Re: [PATCH] x86: Force enable HPET for CK804 (nForce 4) chipsets

2007-10-19 Thread Thomas Gleixner
On Fri, 19 Oct 2007, Carlos Corbacho wrote:
> From: Carlos Corbacho <[EMAIL PROTECTED]>
> 
> This patch adds a quirk from LinuxBIOS to force enable HPET on
> the nVidia CK804 (nForce 4) chipset.
> 
> This quirk can very likely support more than just nForce 4
> (LinuxBIOS use the same code for nForce 5), and possibly nForce 3,
> but I don't have those chipsets, so cannot add and test them.
> 
> Tested on an Abit KN9 (CK804).
> 
> Signed-off-by: Carlos Corbacho <[EMAIL PROTECTED]>

Applied. Thanks,

tglx
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH] x86: Force enable HPET for CK804 (nForce 4) chipsets

2007-10-19 Thread Carlos Corbacho
From: Carlos Corbacho <[EMAIL PROTECTED]>

This patch adds a quirk from LinuxBIOS to force enable HPET on
the nVidia CK804 (nForce 4) chipset.

This quirk can very likely support more than just nForce 4
(LinuxBIOS use the same code for nForce 5), and possibly nForce 3,
but I don't have those chipsets, so cannot add and test them.

Tested on an Abit KN9 (CK804).

Signed-off-by: Carlos Corbacho <[EMAIL PROTECTED]>
---
Thomas,

I've rewritten the code based on what LinuxBIOS does, since they have a better 
idea
of how to drive the HPET than I do. I've tested this code, and it's also working
fine here on my system.

 Documentation/kernel-parameters.txt |3 +-
 arch/x86/kernel/quirks.c|   36 ++-
 2 files changed, 37 insertions(+), 2 deletions(-)

diff --git a/Documentation/kernel-parameters.txt 
b/Documentation/kernel-parameters.txt
index 983f631..8abbfe6 100644
--- a/Documentation/kernel-parameters.txt
+++ b/Documentation/kernel-parameters.txt
@@ -434,7 +434,8 @@ and is between 256 and 4096 characters. It is defined in 
the file
hpet=   [X86-32,HPET] option to control HPET usage
Format: { enable (default) | disable | force }
disable: disable HPET and use PIT instead
-   force: allow force enabled of undocumented chips (ICH4, 
VIA)
+   force: allow force enabled of undocumented chips (ICH4,
+   VIA, nVidia)
 
com20020=   [HW,NET] ARCnet - COM20020 chipset
Format:
diff --git a/arch/x86/kernel/quirks.c b/arch/x86/kernel/quirks.c
index a4ce191..cb21bcb 100644
--- a/arch/x86/kernel/quirks.c
+++ b/arch/x86/kernel/quirks.c
@@ -60,7 +60,8 @@ static enum {
NONE_FORCE_HPET_RESUME,
OLD_ICH_FORCE_HPET_RESUME,
ICH_FORCE_HPET_RESUME,
-   VT8237_FORCE_HPET_RESUME
+   VT8237_FORCE_HPET_RESUME,
+   NVIDIA_FORCE_HPET_RESUME,
 } force_hpet_resume_type;
 
 static void __iomem *rcba_base;
@@ -321,6 +322,36 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, 
PCI_DEVICE_ID_VIA_8235,
 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8237,
 vt8237_force_enable_hpet);
 
+/*
+ * Undocumented chipset feature taken from LinuxBIOS.
+ */
+static void nvidia_force_hpet_resume(void)
+{
+   pci_write_config_dword(cached_dev, 0x44, 0xfed1);
+   printk(KERN_DEBUG "Force enabled HPET at resume\n");
+}
+
+static void nvidia_force_enable_hpet(struct pci_dev *dev)
+{
+   u32 uninitialized_var(val);
+
+   if (!hpet_force_user || hpet_address || force_hpet_address)
+   return;
+
+   pci_write_config_dword(dev, 0x44, 0xfed1);
+   pci_read_config_dword(dev, 0x44, );
+   force_hpet_address = val & 0xfffe;
+   printk(KERN_DEBUG "Force enabled HPET at base address 0x%lx\n",
+   force_hpet_address);
+   cached_dev = dev;
+   return;
+}
+
+/* ISA Bridges */
+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_NVIDIA, 0x0050,
+   nvidia_force_enable_hpet);
+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_NVIDIA, 0x0051,
+   nvidia_force_enable_hpet);
 
 void force_hpet_resume(void)
 {
@@ -334,6 +365,9 @@ void force_hpet_resume(void)
case VT8237_FORCE_HPET_RESUME:
return vt8237_force_hpet_resume();
 
+   case NVIDIA_FORCE_HPET_RESUME:
+   return nvidia_force_hpet_resume();
+
default:
break;
}
-- 
1.5.2.2
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH] x86: Force enable HPET for CK804 (nForce 4) chipsets

2007-10-19 Thread Carlos Corbacho
From: Carlos Corbacho [EMAIL PROTECTED]

This patch adds a quirk from LinuxBIOS to force enable HPET on
the nVidia CK804 (nForce 4) chipset.

This quirk can very likely support more than just nForce 4
(LinuxBIOS use the same code for nForce 5), and possibly nForce 3,
but I don't have those chipsets, so cannot add and test them.

Tested on an Abit KN9 (CK804).

Signed-off-by: Carlos Corbacho [EMAIL PROTECTED]
---
Thomas,

I've rewritten the code based on what LinuxBIOS does, since they have a better 
idea
of how to drive the HPET than I do. I've tested this code, and it's also working
fine here on my system.

 Documentation/kernel-parameters.txt |3 +-
 arch/x86/kernel/quirks.c|   36 ++-
 2 files changed, 37 insertions(+), 2 deletions(-)

diff --git a/Documentation/kernel-parameters.txt 
b/Documentation/kernel-parameters.txt
index 983f631..8abbfe6 100644
--- a/Documentation/kernel-parameters.txt
+++ b/Documentation/kernel-parameters.txt
@@ -434,7 +434,8 @@ and is between 256 and 4096 characters. It is defined in 
the file
hpet=   [X86-32,HPET] option to control HPET usage
Format: { enable (default) | disable | force }
disable: disable HPET and use PIT instead
-   force: allow force enabled of undocumented chips (ICH4, 
VIA)
+   force: allow force enabled of undocumented chips (ICH4,
+   VIA, nVidia)
 
com20020=   [HW,NET] ARCnet - COM20020 chipset
Format:
diff --git a/arch/x86/kernel/quirks.c b/arch/x86/kernel/quirks.c
index a4ce191..cb21bcb 100644
--- a/arch/x86/kernel/quirks.c
+++ b/arch/x86/kernel/quirks.c
@@ -60,7 +60,8 @@ static enum {
NONE_FORCE_HPET_RESUME,
OLD_ICH_FORCE_HPET_RESUME,
ICH_FORCE_HPET_RESUME,
-   VT8237_FORCE_HPET_RESUME
+   VT8237_FORCE_HPET_RESUME,
+   NVIDIA_FORCE_HPET_RESUME,
 } force_hpet_resume_type;
 
 static void __iomem *rcba_base;
@@ -321,6 +322,36 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, 
PCI_DEVICE_ID_VIA_8235,
 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8237,
 vt8237_force_enable_hpet);
 
+/*
+ * Undocumented chipset feature taken from LinuxBIOS.
+ */
+static void nvidia_force_hpet_resume(void)
+{
+   pci_write_config_dword(cached_dev, 0x44, 0xfed1);
+   printk(KERN_DEBUG Force enabled HPET at resume\n);
+}
+
+static void nvidia_force_enable_hpet(struct pci_dev *dev)
+{
+   u32 uninitialized_var(val);
+
+   if (!hpet_force_user || hpet_address || force_hpet_address)
+   return;
+
+   pci_write_config_dword(dev, 0x44, 0xfed1);
+   pci_read_config_dword(dev, 0x44, val);
+   force_hpet_address = val  0xfffe;
+   printk(KERN_DEBUG Force enabled HPET at base address 0x%lx\n,
+   force_hpet_address);
+   cached_dev = dev;
+   return;
+}
+
+/* ISA Bridges */
+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_NVIDIA, 0x0050,
+   nvidia_force_enable_hpet);
+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_NVIDIA, 0x0051,
+   nvidia_force_enable_hpet);
 
 void force_hpet_resume(void)
 {
@@ -334,6 +365,9 @@ void force_hpet_resume(void)
case VT8237_FORCE_HPET_RESUME:
return vt8237_force_hpet_resume();
 
+   case NVIDIA_FORCE_HPET_RESUME:
+   return nvidia_force_hpet_resume();
+
default:
break;
}
-- 
1.5.2.2
-
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH] x86: Force enable HPET for CK804 (nForce 4) chipsets

2007-10-19 Thread Thomas Gleixner
On Fri, 19 Oct 2007, Carlos Corbacho wrote:
 From: Carlos Corbacho [EMAIL PROTECTED]
 
 This patch adds a quirk from LinuxBIOS to force enable HPET on
 the nVidia CK804 (nForce 4) chipset.
 
 This quirk can very likely support more than just nForce 4
 (LinuxBIOS use the same code for nForce 5), and possibly nForce 3,
 but I don't have those chipsets, so cannot add and test them.
 
 Tested on an Abit KN9 (CK804).
 
 Signed-off-by: Carlos Corbacho [EMAIL PROTECTED]

Applied. Thanks,

tglx
-
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/