ide: add IDE_HFLAG_CLEAR_SIMPLEX host flag
PATCH 2/3 ide: add IDE_HFLAG_CLEAR_SIMPLEX host flag
* Rename 'simplex_stat' variable to 'dma_stat' in ide_get_or_set_dma_base().
* Factor out code for forcing host out of "simplex" mode from ide_get_or_set_dma_base() to ide_pci_clear_simplex() helper.
* Add IDE_HFLAG_CLEAR_SIMPLEX host flag and set it in alim15x3 (for M5229), amd74xx (for AMD 7409), cmd64x (for CMD643), generic (for Netcell) and serverworks (for CSB5) host drivers.
* Make ide_get_or_set_dma_base() test for IDE_HFLAG_CLEAR_SIMPLEX host flag instead of checking dev->device (BTW the code was buggy because it didn't check for dev->vendor, luckily none of these PCI Device IDs was used by some other vendor for PCI IDE controller).
Signed-off-by Bartlomiej Zolnierkiewicz <[email protected]>
--- drivers/ide/pci/alim15x3.c | 7 ++- drivers/ide/pci/amd74xx.c | 1 drivers/ide/pci/cmd64x.c | 4 +- drivers/ide/pci/generic.c | 3 + drivers/ide/pci/serverworks.c | 4 +- drivers/ide/setup-pci.c | 77 ++++++++++++++++++------------------------ include/linux/ide.h | 2 + 7 files changed, 49 insertions(+), 49 deletions(-)
drivers/ide/pci/alim15x3.c +5 -2
@@ -775,7 +775,7 @@ static int __devinit alim15x3_init_one(s };struct ide_port_info d = ali15x3_chipset; -u8 rev = dev->revision; +u8 rev = dev->revision, idx = id->driver_data;if (pci_dev_present (ati_rs100))printk (KERN_WARNING "alim15x3: ATI Radeon IGP Northbridge is not yet fully tested.\n" );
@@ -798,6 +798,9 @@ static int __devinit alim15x3_init_one(s d.udma_mask =ATA_UDMA6 ; } +if (idx ==0 ) + d.host_flags |=IDE_HFLAG_CLEAR_SIMPLEX ; +#if defined(CONFIG_SPARC64 ) d.init_hwif = init_hwif_common_ali15x3;#endif /* CONFIG_SPARC64 */
@@ -807,7 +810,7 @@ static int __devinit alim15x3_init_one(sstatic const struct pci_device_id alim15x3_pci_tbl[] = { {PCI_VDEVICE (AL ,PCI_DEVICE_ID_AL_M5229 ),0 }, - {PCI_VDEVICE (AL ,PCI_DEVICE_ID_AL_M5228 ),0 }, + {PCI_VDEVICE (AL ,PCI_DEVICE_ID_AL_M5228 ),1 }, {0 , }, };MODULE_DEVICE_TABLE (pci, alim15x3_pci_tbl);
drivers/ide/pci/amd74xx.c +1 -0
@@ -295,6 +295,7 @@ static int __devinit amd74xx_probe(strucif (idx ==1 ) {if (dev->revision <=7 ) d.swdma_mask =0 ; + d.host_flags |=IDE_HFLAG_CLEAR_SIMPLEX ; }else if (idx ==4 ) {if (dev->subsystem_vendor ==PCI_VENDOR_ID_AMD && dev->subsystem_device ==PCI_DEVICE_ID_AMD_SERENADE )
drivers/ide/pci/cmd64x.c +3 -1
@@ -443,7 +443,9 @@ static const struct ide_port_info cmd64x .init_chipset = init_chipset_cmd64x, .init_hwif = init_hwif_cmd64x, .enablebits = {{0x00,0x00,0x00}, {0x51,0x08,0x08}}, - .host_flags = IDE_HFLAG_ABUSE_PREFETCH | IDE_HFLAG_BOOTABLE, + .host_flags = IDE_HFLAG_CLEAR_SIMPLEX | +IDE_HFLAG_ABUSE_PREFETCH | + IDE_HFLAG_BOOTABLE, .pio_mask = ATA_PIO5, .mwdma_mask = ATA_MWDMA2, .udma_mask = 0x00, /* no udma */
drivers/ide/pci/generic.c +2 -1
@@ -104,7 +104,8 @@ static const struct ide_port_info generi {/* 14 */ .name = "Revolution", - .host_flags =IDE_HFLAG_TRUST_BIOS_FOR_DMA | + .host_flags =IDE_HFLAG_CLEAR_SIMPLEX | +IDE_HFLAG_TRUST_BIOS_FOR_DMA | IDE_HFLAG_OFF_BOARD, .swdma_mask = ATA_SWDMA2, .mwdma_mask = ATA_MWDMA2,
drivers/ide/pci/serverworks.c +3 -1
@@ -418,7 +418,9 @@ static int __devinit svwks_init_one(stru d = serverworks_chipsets[idx]; -if (idx ==2 || idx ==3 ) { +if (idx ==1 ) + d.host_flags |=IDE_HFLAG_CLEAR_SIMPLEX ; +else if (idx ==2 || idx ==3 ) {if ((PCI_FUNC (dev->devfn) &1 ) ==0 ) {if (pci_resource_start (dev,0 ) !=0x01f1 ) d.host_flags &= ~IDE_HFLAG_BOOTABLE ;
drivers/ide/setup-pci.c +33 -44
97 lines not on this page · raw message
include/linux/ide.h +2 -0
@@ -1096,6 +1096,8 @@ enum {IDE_HFLAG_ABUSE_SET_DMA_MODE = (1 <<26 ),/* host is CY82C693 */ IDE_HFLAG_CY82C693 = (1 <<27 ), +/* force host out of "simplex" mode */ + IDE_HFLAG_CLEAR_SIMPLEX = (1 << 28), };#ifdef CONFIG_BLK_DEV_OFFBOARD