From: Sergei Shtylyov The undocumented register BIOS uses for saving f_CNT seems to only be mapped to I/O space while all the other HPT3xx regs are dual-mapped. Looks like another HighPoint's dirty trick. With this patch, the deadly kernel oops on the cards having the modern HighPoint BIOSes is now at last gone! Signed-off-by: Sergei Shtylyov Cc: Bartlomiej Zolnierkiewicz Cc: Alan Cox Signed-off-by: Andrew Morton --- drivers/ide/pci/hpt366.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff -puN drivers/ide/pci/hpt366.c~ide-hpt3xx-fix-pci-clock-detection-fix-2 drivers/ide/pci/hpt366.c --- a/drivers/ide/pci/hpt366.c~ide-hpt3xx-fix-pci-clock-detection-fix-2 +++ a/drivers/ide/pci/hpt366.c @@ -1035,14 +1035,14 @@ static void __devinit hpt37x_clocking(id * First try reading the register in which the HighPoint BIOS * saves f_CNT value before reprogramming the DPLL from its * default setting (which differs for the various chips). + * NOTE: This register is only accessible via I/O space. + * * In case the signature check fails, we'll have to resort to * reading the f_CNT register itself in hopes that nobody has * touched the DPLL yet... */ - pci_read_config_dword(dev, 0x70, &temp); + temp = inl(pci_resource_start(dev, 4) + 0x90); if ((temp & 0xFFFFF000) != 0xABCDE000) { - int i; - printk(KERN_WARNING "HPT37X: no clock data saved by BIOS\n"); /* Calculate the average value of f_CNT */ _