Re: [PATCH] HPT37x: read f_CNT saved by BIOS from port

Sergei Shtylyov
2006-05-20T08:42:31Z

[-- Attachment #1: Type: text/plain, Size: 372 bytes --]

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!

MBR, Sergei

Signed-off-by: Sergei Shtylyov <sshtylyov@ru.mvista.com>

[-- Attachment #2: HPT37x-read-f_CNT-from-port.patch --]
[-- Type: text/plain, Size: 922 bytes --]

Index: linus/drivers/ide/pci/hpt366.c
===================================================================
--- linus.orig/drivers/ide/pci/hpt366.c
+++ linus/drivers/ide/pci/hpt366.c
@@ -1016,14 +1016,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 */