Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[PATCH] pata_amd: Check enable bits on Nvidia

A couple of people reported long delays on probe with the newer kernels
and Nvidia PATA. This turned out to be because the Nvidia path forgot to
check the enable bits so probed empty ports.

Signed-off-by: Alan Cox <alan@redhat.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>

authored by

Alan Cox and committed by
Jeff Garzik
76ff3c6e af323a2f

+12 -1
+12 -1
drivers/ata/pata_amd.c
··· 25 25 #include <linux/libata.h> 26 26 27 27 #define DRV_NAME "pata_amd" 28 - #define DRV_VERSION "0.2.2" 28 + #define DRV_VERSION "0.2.3" 29 29 30 30 /** 31 31 * timing_setup - shared timing computation and load ··· 253 253 254 254 static int nv_pre_reset(struct ata_port *ap) { 255 255 static const u8 bitmask[2] = {0x03, 0xC0}; 256 + static const struct pci_bits nv_enable_bits[] = { 257 + { 0x50, 1, 0x02, 0x02 }, 258 + { 0x50, 1, 0x01, 0x01 } 259 + }; 256 260 257 261 struct pci_dev *pdev = to_pci_dev(ap->host->dev); 258 262 u8 ata66; 259 263 u16 udma; 264 + 265 + if (!pci_test_config_bits(pdev, &nv_enable_bits[ap->port_no])) { 266 + ata_port_disable(ap); 267 + printk(KERN_INFO "ata%u: port disabled. ignoring.\n", ap->id); 268 + return 0; 269 + } 270 + 260 271 261 272 pci_read_config_byte(pdev, 0x52, &ata66); 262 273 if (ata66 & bitmask[ap->port_no])