From: crane cai <crane.cai@amd.com>
To: Thomas Gleixner <tglx@linutronix.de>
Cc: vojtech@suse.cz, Ingo Molnar <mingo@elte.hu>,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH] HPET: Workaround for a BIOS workaround on AMD SB700 platform
Date: Fri, 15 Aug 2008 10:09:26 +0800 [thread overview]
Message-ID: <1218766167.5646.55.camel@crane-laptop> (raw)
In-Reply-To: <alpine.LFD.1.10.0808141206130.3243@apollo.tec.linutronix.de>
Hi Thomas,
Your modification has been checked OK on our SB700 platform. Thank you.
Now could you help us to merge your patch to kernel source? Or do I need
to resubmit a patch on it?
Best regards,
- Crane
On Thu, 2008-08-14 at 18:11 +0800, Thomas Gleixner wrote:
> Crane,
>
> thanks for debugging this. I think we don't need a quirk for this
> workaround. Checking the config register value for 0xffffffff is safe
> on all machines. I simplified your patch to the one below and added a
> printk in case the check times out.
>
> One thing I'm a bit wary about is the readout of the HPET_PERIOD
> register. Is the value correct even _before_ the SMM machinery is
> started ?
> Thanks,
>
> tglx
> -----
> diff --git a/arch/x86/kernel/hpet.c b/arch/x86/kernel/hpet.c
> index ad2b15a..59fd3b6 100644
> --- a/arch/x86/kernel/hpet.c
> +++ b/arch/x86/kernel/hpet.c
> @@ -359,6 +359,7 @@ static int hpet_clocksource_register(void)
> int __init hpet_enable(void)
> {
> unsigned long id;
> + int i;
>
> if (!is_hpet_capable())
> return 0;
> @@ -369,6 +370,29 @@ int __init hpet_enable(void)
> * Read the period and check for a sane value:
> */
> hpet_period = hpet_readl(HPET_PERIOD);
> +
> + /*
> + * AMD SB700 based systems with spread spectrum enabled use a
> + * SMM based HPET emulation to provide proper frequency
> + * setting. The SMM code is initialized with the first HPET
> + * register access and takes some time to complete. During
> + * this time the config register reads 0xffffffff. We check
> + * for max. 1000 loops whether the config register reads a non
> + * 0xffffffff value to make sure that HPET is up and running
> + * before we go further. A counting loop is safe, as the HPET
> + * access takes thousands of CPU cycles. On non SB700 based
> + * machines this check is only done once and has no side
> + * effects.
> + */
> + for (i = 0; hpet_readl(HPET_CFG) == 0xFFFFFFFF; i++) {
> + if (i == 1000) {
> + printk(KERN_WARNING
> + "HPET config register value = 0xFFFFFFFF. "
> + "Disabling HPET\n");
> + goto out_nohpet;
> + }
> + }
> +
> if (hpet_period < HPET_MIN_PERIOD || hpet_period > HPET_MAX_PERIOD)
> goto out_nohpet;
>
next prev parent reply other threads:[~2008-08-15 2:09 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-08-14 3:13 [PATCH] HPET: Workaround for a BIOS workaround on AMD SB700 platform crane cai
2008-08-14 8:41 ` Ingo Molnar
2008-08-14 9:10 ` crane cai
2008-08-14 9:04 ` Ingo Molnar
2008-08-14 10:11 ` Thomas Gleixner
2008-08-15 2:09 ` crane cai [this message]
2008-08-15 12:27 ` Ingo Molnar
2008-08-14 14:11 ` Lennart Sorensen
2008-08-14 14:14 ` Vojtech Pavlik
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1218766167.5646.55.camel@crane-laptop \
--to=crane.cai@amd.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=tglx@linutronix.de \
--cc=vojtech@suse.cz \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.