Re: [2.6.10-rc2+] ide1=ata66 -- OBSOLETE OPTION, WILL BE REMOVEDSOON!

From: Rene Herman
Date: Tue Dec 14 2004 - 11:19:35 EST


Bartlomiej Zolnierkiewicz wrote:

I do need a way to force an 80c cable on this AMD756 (ATA66 max) board,
since the BIOS doesn't seem to be setting the cable bits correctly.


Ugh, I checked AMD datasheets and AMD756 doesn't support host
side cable detection. Well, we can try doing disk side only for it.
[ ATi and ITE (in -ac kernels) drivers are also doing this. ]

--- amd74xx.c.orig 2004-11-02 14:17:14.000000000 +0100
+++ amd74xx.c 2004-12-13 22:41:50.406229168 +0100
@@ -344,10 +344,8 @@
break;
case AMD_UDMA_66:
- pci_read_config_dword(dev, AMD_UDMA_TIMING, &u);
- for (i = 24; i >= 0; i -= 8)
- if ((u >> i) & 4)
- amd_80w |= (1 << (1 - (i >> 4)));
+ /* no host side cable detection */
+ amd_80w = 0x03;
break;
}


Well, yes, works for me I guess. Was playing around to see if I could find something a bit more subtle but it seems nothing's available. My BIOS does show hdc (a DVD-ROM by the way) to be udma4 in its summary screen but it does not enable udma for it. I saw AMD_DRIVE_TIMINGS is not used for udma (and programmed by my BIOS to the highest PIO mode the device offers for all devices present) so also of no use...

Attached patch combines this and deleting a "use ide0=ata66" advice from the driver.

One slight cosmetic problem, with amd_80w set unconditionally the /proc/ide/amd74xx file's "cable type" line will now always show "80w" and seems likely to confuse people that have 40w cables installed. I believe the proc file may be on its way out anyway? If not, one option could be to print "n/a" for amd_config->flags & AMD_UDMA == AMD_UDMA_66 (<= ?).

Rene. --- linux-2.6.10-rc3/drivers/ide/pci/amd74xx.c.orig 2004-12-14 11:33:21.000000000 +0100
+++ linux-2.6.10-rc3/drivers/ide/pci/amd74xx.c 2004-12-14 16:31:22.000000000 +0100
@@ -344,10 +344,8 @@
break;

case AMD_UDMA_66:
- pci_read_config_dword(dev, AMD_UDMA_TIMING, &u);
- for (i = 24; i >= 0; i -= 8)
- if ((u >> i) & 4)
- amd_80w |= (1 << (1 - (i >> 4)));
+ /* no host side cable detection */
+ amd_80w = 0x03;
break;
}

@@ -383,8 +381,6 @@
if (amd_clock < 20000 || amd_clock > 50000) {
printk(KERN_WARNING "%s: User given PCI clock speed impossible (%d), using 33 MHz instead.\n",
amd_chipset->name, amd_clock);
- printk(KERN_WARNING "%s: Use ide0=ata66 if you want to assume 80-wire cable\n",
- amd_chipset->name);
amd_clock = 33333;
}