Sophie

Sophie

distrib > Scientific%20Linux > 5x > x86_64 > by-pkgid > 27922b4260f65d317aabda37e42bbbff > files > 1557

kernel-2.6.18-238.el5.src.rpm

From: Bhavana Nagendra <bnagendr@redhat.com>
Date: Tue, 5 Feb 2008 11:25:06 -0500
Subject: [ide] missing SB600/SB700 40-pin cable support
Message-id: 20080205162505.26915.49373.sendpatchset@localhost.localdomain
O-Subject: [RHEL5.2 PATCH] Missing SB600/SB700 40-pin IDE cable support
Bugzilla: 431437

Resolves BZ 431437

AMD chipset team found a missing patch in the RHEL5 code base during
QA testing.  This SB600/SB700 40-pin IDE cable detection support has
not been added to RHEL5.1.  Without this patch IDE HDD does not work
if it uses a 40-pin PATA cable on ATI chipset.

RHEL 32bit/64bit 		IDE as primary
(with ide40pin patch)

40pin cable installation	Hdparm:30MB/s

80pin cable installation  	Hdparm:72MB/s

Please ACK.

diff --git a/drivers/ide/pci/atiixp.c b/drivers/ide/pci/atiixp.c
index 39a02ca..3055b18 100644
--- a/drivers/ide/pci/atiixp.c
+++ b/drivers/ide/pci/atiixp.c
@@ -289,8 +289,12 @@ fast_ata_pio:
 
 static void __devinit init_hwif_atiixp(ide_hwif_t *hwif)
 {
+	u8 udma_mode = 0;
+	u8 ch = hwif->channel;
+	struct pci_dev *pdev = hwif->pci_dev;
+	
 	if (!hwif->irq)
-		hwif->irq = hwif->channel ? 15 : 14;
+		hwif->irq = ch ? 15 : 14;
 
 	hwif->autodma = 0;
 	hwif->tuneproc = &atiixp_tuneproc;
@@ -306,8 +310,12 @@ static void __devinit init_hwif_atiixp(ide_hwif_t *hwif)
 	hwif->mwdma_mask = 0x06;
 	hwif->swdma_mask = 0x04;
 
-	/* FIXME: proper cable detection needed */
-	hwif->udma_four = 1;
+	pci_read_config_byte(pdev, ATIIXP_IDE_UDMA_MODE + ch, &udma_mode);
+	if ((udma_mode & 0x07) >= 0x04 || (udma_mode & 0x70) >= 0x40)
+		hwif->udma_four = 1;
+	else
+		hwif->udma_four = 0;
+
 	hwif->ide_dma_host_on = &atiixp_ide_dma_host_on;
 	hwif->ide_dma_host_off = &atiixp_ide_dma_host_off;
 	hwif->ide_dma_check = &atiixp_dma_check;