summaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/quirks.c
diff options
context:
space:
mode:
authorThomas Gleixner <tglx@linutronix.de>2010-04-13 15:31:36 +0200
committerH. Peter Anvin <hpa@zytor.com>2010-04-28 18:14:29 -0700
commit30a564be9d9554c168a654eddc2165869cc0d7bf (patch)
tree734de780e0f84a189f66ca3cbf611e6f2bc563e9 /arch/x86/kernel/quirks.c
parent1d16b0f2f3edf05f12a9e3960588e0d4854157bb (diff)
downloadlinux-30a564be9d9554c168a654eddc2165869cc0d7bf.tar.gz
linux-30a564be9d9554c168a654eddc2165869cc0d7bf.tar.bz2
linux-30a564be9d9554c168a654eddc2165869cc0d7bf.zip
x86, hpet: Restrict read back to affected ATI chipsets
After programming the HPET, we do a readback as a workaround for ATI/SBx00 chipsets as a synchronization. Unfortunately this triggers an erratum in newer ICH chipsets (ICH9+) where reading the comparator immediately after the write returns the old value. Furthermore, as always, I/O reads are bad for performance. Therefore, restrict the readback to the chipsets that need it, or, for debugging purposes, when we are running with hpet=verbose. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Acked-by: Venkatesh Pallipadi <venki@google.com> LKML-Reference: <20100225185348.GA9674@linux-os.sc.intel.com> Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Diffstat (limited to 'arch/x86/kernel/quirks.c')
-rw-r--r--arch/x86/kernel/quirks.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/arch/x86/kernel/quirks.c b/arch/x86/kernel/quirks.c
index 12e9feaa2f7a..cd2c336c8d09 100644
--- a/arch/x86/kernel/quirks.c
+++ b/arch/x86/kernel/quirks.c
@@ -495,10 +495,15 @@ void force_hpet_resume(void)
/*
* HPET MSI on some boards (ATI SB700/SB800) has side effect on
* floppy DMA. Disable HPET MSI on such platforms.
+ *
+ * Also force the read back of the CMP register in hpet_next_event()
+ * to work around the problem that the CMP register write seems to be
+ * delayed. See hpet_next_event() for details.
*/
static void force_disable_hpet_msi(struct pci_dev *unused)
{
hpet_msi_disable = 1;
+ hpet_readback_cmp = 1;
}
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_SBX00_SMBUS,