[PATCH] X86 Architecture: HPET Rework for SB700
Cai, Crane
Crane.Cai at amd.com
Mon Aug 11 01:00:04 UTC 2008
We have confirmed hardy no this issue, till now.
Now this issue is only occurred on the interped.
May you can only patch the interpid kernel.
Thanks,
- Crane
-----Original Message-----
From: Stefan Bader [mailto:stefan.bader at canonical.com]
Sent: Friday, August 08, 2008 8:25 PM
To: Cai, Crane
Cc: kernel-team at lists.ubuntu.com; ben.collins at canonical.com; Ma, Yufei
Subject: Re: [PATCH] X86 Architecture: HPET Rework for SB700
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
crane cai wrote:
> x86: HPET rework for SB700
>
> SB700 supports the features to reduce EMI on system clocks. When this
> feature is enabled in software, the HPET timer base frequency may
> change and its new value needs to be reported to the OS or may need to
> be adjusted as it will differ from the default value reported by
> hardware power up value. This software routine accomplish this task to
> ensure that the system timer is adjusted accordingly by the OS to it
accurate.
>
> Signed-off-by: XiaoGang Zheng <gang.zheng at amd.com>
> Signed-off-by: Crane Cai <crane.cai at amd.com>
>
> ----------------------------
>
> diff --git a/arch/x86/kernel/early-quirks.c
> b/arch/x86/kernel/early-quirks.c index 4353cf5..74a3eb7 100644
> --- a/arch/x86/kernel/early-quirks.c
> +++ b/arch/x86/kernel/early-quirks.c
> @@ -17,6 +17,7 @@
> #include <asm/io_apic.h>
> #include <asm/apic.h>
> #include <asm/iommu.h>
> +#include <asm/hpet.h>
>
> static void __init fix_hypertransport_config(int num, int slot, int
> func) { @@ -95,6 +96,16 @@ static void __init nvidia_bugs(int num,
> int slot, int func)
>
> }
>
> +static void __init amd_sb700_hpet(int num, int slot, int func) {
> + int rev;
> + rev = read_pci_config_byte(num, slot, func, 0x08);
> + if (rev <= 0x3a && rev >= 0x30) {
> + hpet_rework = 1;
> + printk(KERN_INFO "SB700 rev 0x3a under detected!\n");
> + }
> +}
> +
> #define QFLAG_APPLY_ONCE 0x1
> #define QFLAG_APPLIED 0x2
> #define QFLAG_DONE (QFLAG_APPLY_ONCE|QFLAG_APPLIED)
> @@ -114,6 +125,8 @@ static struct chipset early_qrk[] __initdata = {
> PCI_CLASS_BRIDGE_PCI, PCI_ANY_ID, QFLAG_APPLY_ONCE, via_bugs
},
> { PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_K8_NB,
> PCI_CLASS_BRIDGE_HOST, PCI_ANY_ID, 0,
fix_hypertransport_config },
> + { PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_SBX00_SMBUS,
> + PCI_CLASS_SERIAL_SMBUS, PCI_ANY_ID, 0, amd_sb700_hpet },
> {}
> };
>
> diff --git a/arch/x86/kernel/hpet.c b/arch/x86/kernel/hpet.c index
> ad2b15a..d940cca 100644
> --- a/arch/x86/kernel/hpet.c
> +++ b/arch/x86/kernel/hpet.c
> @@ -23,6 +23,9 @@
> * HPET address is set in acpi/boot.c, when an ACPI entry exists
> */
> unsigned long hpet_address;
> +
> +int hpet_rework __initdata = 0;
> +
> static void __iomem *hpet_virt_address;
>
> unsigned long hpet_readl(unsigned long a) @@ -369,6 +372,12 @@ int
> __init hpet_enable(void)
> * Read the period and check for a sane value:
> */
> hpet_period = hpet_readl(HPET_PERIOD);
> +
> + if (hpet_rework) {
> + int timeout = 1000;
> + while (0xffffffff == hpet_readl(HPET_CFG) && timeout--
!= 0)
> + ;
> + }
> if (hpet_period < HPET_MIN_PERIOD || hpet_period >
HPET_MAX_PERIOD)
> goto out_nohpet;
>
> diff --git a/include/asm-x86/hpet.h b/include/asm-x86/hpet.h index
> 82f1ac6..2536c21 100644
> --- a/include/asm-x86/hpet.h
> +++ b/include/asm-x86/hpet.h
> @@ -55,6 +55,8 @@
> */
> #define HPET_MIN_PERIOD 100000UL
>
> +extern int hpet_rework;
> +
> /* hpet memory map physical address */ extern unsigned long
> hpet_address; extern unsigned long force_hpet_address;
>
>
>
For Hardy the fix relies on changes to the early-quirks infrastructure
made by a patch to fix kdump issues. This causes the required changes to
be at a larger scale. Therefor I would appreciate if you could confirm
whether this hang also occurs on Hardy (8.04).
Thanks.
Stefan
- --
When all other means of communication fail, try words!
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
iD8DBQFInDs4P+TjRTJVqvQRAvzHAJ9DZIPGYvWmA5vI/Q867OLZ5yfCkQCgkS4/
jOI3REzpnGuoE9PBhZ2LKz8=
=oB9e
-----END PGP SIGNATURE-----
More information about the kernel-team
mailing list