[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