Skip to contentSkip to conversation

ide: add IDE_HFLAG_CLEAR_SIMPLEX host flag

PATCH In review Bartlomiej Zolnierkiewicz 1 participant 1 message Dec 27, 2007 libata

lore
Share & tools
lore
#0 lore raw

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).

---
 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
Index: b/drivers/ide/pci/alim15x3.c
===================================================================
@@ -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(s
 
 static 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
Index: b/drivers/ide/pci/amd74xx.c
===================================================================
@@ -295,6 +295,7 @@ static int __devinit amd74xx_probe(struc
 	if (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
Index: b/drivers/ide/pci/cmd64x.c
===================================================================
@@ -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
Index: b/drivers/ide/pci/generic.c
===================================================================
@@ -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
Index: b/drivers/ide/pci/serverworks.c
===================================================================
@@ -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
Index: b/include/linux/ide.h
===================================================================
@@ -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