linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Re: [PATCH/RFC] Enable HPET on VIA8237 southbridge
@ 2005-09-26 15:49 Clemens Ladisch
  2005-09-26 17:34 ` Karsten Wiese
  0 siblings, 1 reply; 4+ messages in thread
From: Clemens Ladisch @ 2005-09-26 15:49 UTC (permalink / raw)
  To: Karsten Wiese; +Cc: linux-kernel

Karsten Wiese wrote:
> if you have that chip on your mainboard and want to play with it's
> hpet, this might get you going.

I'm using similar code for my ICH5 southbridge, but I patched
arch/i386/kernel/acpi/boot.c instead so that the kernel can use it
for its own purposes.

> One exception: Timer1 says it can do PERIODIC mode,
> but this doesn't work here. One shot is ok.

This may be because your patch doesn't initialize the interrupt
routing registers (which would have been the BIOS' job).


Regards,
Clemens


^ permalink raw reply	[flat|nested] 4+ messages in thread
* [PATCH/RFC] Enable HPET on VIA8237 southbridge
@ 2005-09-26 10:31 Karsten Wiese
  0 siblings, 0 replies; 4+ messages in thread
From: Karsten Wiese @ 2005-09-26 10:31 UTC (permalink / raw)
  To: linux-kernel; +Cc: Ingo Molnar

[-- Attachment #1: Type: text/plain, Size: 116 bytes --]

Hi,

if you have that chip on your mainboard and want to play with it's
hpet, this might get you going.

   Karsten

[-- Attachment #2: patch-via8237-hpet-i386 --]
[-- Type: text/x-diff, Size: 2179 bytes --]

Enable HPET on VIA8237 southbridge

Some BIOSs don't enable the hpet on that chip.
The patch enables it before all the other pci devices.

The hpet's hardware address is set to 0xFED00000,
if the VIA8237 has been identified.

This IS DANGEROUS.
I.e. because the hardware address might be assigned
later in the boot process to somthing else.

Tested succesfully on an K8T800/AMD64 Mobo.
One exception: Timer1 says it can do PERIODIC mode,
but this doesn't work here. One shot is ok.

Signed-off-by: Karsten Wiese <annabellesgraden@yahoo.de>


diff -ur linux-2.6.13-RT/arch/i386/kernel/time_hpet.c linux-2.6.13-RT-kw/arch/i386/kernel/time_hpet.c
--- linux-2.6.13-RT/arch/i386/kernel/time_hpet.c	2005-09-19 15:49:17.000000000 +0200
+++ linux-2.6.13-RT-kw/arch/i386/kernel/time_hpet.c	2005-09-24 00:58:37.000000000 +0200
@@ -223,11 +223,74 @@
 	return use_hpet;
 }
 
+#define HPET_HACK_ENABLE_DANGEROUS 1
+
+#ifdef HPET_HACK_ENABLE_DANGEROUS
+union conf_address {
+	struct {
+		u8	reg;
+		u8	func:	3;
+		u8	dev:	5;
+		u8	bus;
+		u8	reserved:7;
+		u8	enable:	1;
+	} bits;
+	u32	dword;
+};
+
+#include <linux/pci_ids.h>
+
+static void is_hpet_via8237(void)
+{
+	union conf_address ca = {
+		.bits.reg = 0,
+		.bits.dev = 17,
+		.bits.enable = 1
+	};
+	union {
+		struct {
+			u8 control;
+			u8 address[3];
+		} hpet;
+		unsigned raw;
+	} hpet;
+	u32 vendor_id, control;
+
+	control = inl(0xcf8);
+	printk("%X\n", control);
+	outl(ca.dword, 0xcf8);
+	vendor_id = inl(0xcfc);
+	if (vendor_id == (PCI_VENDOR_ID_VIA + (PCI_DEVICE_ID_VIA_8237 << 16))) {
+		hpet.raw = 0xFED00000;
+		hpet.hpet.control = 0x80;
+		ca.bits.reg = 0x68;
+		outl(ca.dword, 0xcf8);
+		outl(hpet.raw, 0xcfc);
+		outl(ca.dword, 0xcf8);
+		hpet_address = (inl(0xcfc) & 0xFFFFFF00);
+		printk(KERN_WARNING "time.c: WARNING: Enabled VIA8237 HPET "
+		       "at %#lx.\n", hpet_address);
+	}
+}
+
+#else
+
+static void is_hpet_via8237(void)
+{
+}
+
+#endif
+
+
 int is_hpet_capable(void)
 {
-	if (!boot_hpet_disable && hpet_address)
-		return 1;
-	return 0;
+	if (boot_hpet_disable)
+		return 0;
+
+        if (!hpet_address)
+		is_hpet_via8237();
+
+	return hpet_address;
 }
 
 static int __init hpet_setup(char* str)

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2005-09-28  7:03 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-09-26 15:49 [PATCH/RFC] Enable HPET on VIA8237 southbridge Clemens Ladisch
2005-09-26 17:34 ` Karsten Wiese
2005-09-28  7:03   ` Clemens Ladisch
  -- strict thread matches above, loose matches on Subject: below --
2005-09-26 10:31 Karsten Wiese

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).