[coreboot] New patch to review for coreboot: a65378e hpet: common ACPI generation

Patrick Georgi (patrick@georgi-clan.de) gerrit at coreboot.org
Sun Oct 7 12:05:28 CEST 2012


Patrick Georgi (patrick at georgi-clan.de) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/1562

-gerrit

commit a65378e809b60e18eb8b1c2f54c30eff84b3f7f3
Author: Patrick Georgi <patrick at georgi-clan.de>
Date:   Fri Oct 5 21:54:38 2012 +0200

    hpet: common ACPI generation
    
    HPET's min ticks (minimum time between events to avoid
    losing interrupts) is chipset specific, so move it to
    Kconfig.
    
    Via also has a special base address, so move it as well.
    
    Apart from these (and the base address was already #defined),
    the table is very uniform.
    
    Change-Id: I848a2e2b0b16021c7ee5ba99097fa6a5886c3286
    Signed-off-by: Patrick Georgi <patrick at georgi-clan.de>
---
 src/arch/x86/Kconfig                            |  4 ++
 src/arch/x86/boot/acpi.c                        | 14 +++--
 src/mainboard/getac/p470/acpi_tables.c          | 34 +-----------
 src/mainboard/ibase/mb899/acpi_tables.c         | 34 +-----------
 src/mainboard/intel/d945gclf/acpi_tables.c      | 34 +-----------
 src/mainboard/intel/eagleheights/acpi_tables.c  | 34 +-----------
 src/mainboard/intel/emeraldlake2/acpi_tables.c  | 34 +-----------
 src/mainboard/intel/emeraldlake2/romstage.c     |  2 +-
 src/mainboard/iwave/iWRainbowG6/acpi_tables.c   | 33 +-----------
 src/mainboard/kontron/986lcd-m/acpi_tables.c    | 34 +-----------
 src/mainboard/lenovo/t60/acpi_tables.c          | 34 +-----------
 src/mainboard/lenovo/x60/acpi_tables.c          | 34 +-----------
 src/mainboard/msi/ms7135/acpi_tables.c          | 72 +------------------------
 src/mainboard/roda/rk886ex/acpi_tables.c        | 34 +-----------
 src/mainboard/samsung/lumpy/acpi_tables.c       | 34 +-----------
 src/mainboard/samsung/lumpy/romstage.c          |  2 +-
 src/mainboard/samsung/stumpy/acpi_tables.c      | 34 +-----------
 src/mainboard/samsung/stumpy/romstage.c         |  2 +-
 src/mainboard/siemens/sitemp_g1p1/acpi_tables.c | 33 +-----------
 src/mainboard/via/vt8454c/acpi_tables.c         | 36 +------------
 src/northbridge/via/cx700/Kconfig               | 15 +++++-
 src/northbridge/via/cx700/lpc.c                 |  3 +-
 src/southbridge/amd/sb600/Kconfig               |  4 ++
 src/southbridge/intel/bd82x6x/Kconfig           |  4 ++
 src/southbridge/intel/bd82x6x/pch.h             |  1 -
 src/southbridge/intel/i3100/Kconfig             |  9 ++++
 src/southbridge/intel/i82801ax/i82801ax.h       |  1 -
 src/southbridge/intel/i82801bx/i82801bx.h       |  1 -
 src/southbridge/intel/i82801dx/i82801dx.h       |  9 ----
 src/southbridge/intel/i82801dx/lpc.c            |  6 +--
 src/southbridge/intel/i82801gx/Kconfig          |  5 +-
 src/southbridge/intel/i82801gx/i82801gx.h       |  1 -
 src/southbridge/intel/sch/Kconfig               |  4 ++
 src/southbridge/nvidia/ck804/Kconfig            |  4 ++
 src/southbridge/via/vt8237r/lpc.c               |  8 +--
 src/southbridge/via/vt8237r/vt8237r.h           |  1 -
 36 files changed, 82 insertions(+), 566 deletions(-)

diff --git a/src/arch/x86/Kconfig b/src/arch/x86/Kconfig
index 6d56ec6..7e0d195 100644
--- a/src/arch/x86/Kconfig
+++ b/src/arch/x86/Kconfig
@@ -111,4 +111,8 @@ config PCI_CONF2
 	bool
 	default n
 
+config HPET_ADDRESS
+	hex
+	default 0xfed00000 if !HPET_ADDRESS_OVERRIDE
+
 endmenu
diff --git a/src/arch/x86/boot/acpi.c b/src/arch/x86/boot/acpi.c
index 6932208..9881ffe 100644
--- a/src/arch/x86/boot/acpi.c
+++ b/src/arch/x86/boot/acpi.c
@@ -36,6 +36,11 @@
 #include <timestamp.h>
 #endif
 
+/* FIXME: Kconfig doesn't support overridable defaults :-( */
+#ifndef CONFIG_HPET_MIN_TICKS
+#define CONFIG_HPET_MIN_TICKS 0x1000
+#endif
+
 u8 acpi_checksum(u8 *table, u32 length)
 {
 	u8 ret = 0;
@@ -356,7 +361,6 @@ void acpi_create_slit(acpi_slit_t *slit)
 /* http://www.intel.com/hardwaredesign/hpetspec_1.pdf */
 void acpi_create_hpet(acpi_hpet_t *hpet)
 {
-#define HPET_ADDR 0xfed00000ULL
 	acpi_header_t *header = &(hpet->header);
 	acpi_addr_t *addr = &(hpet->addr);
 
@@ -375,12 +379,12 @@ void acpi_create_hpet(acpi_hpet_t *hpet)
 	addr->space_id = 0; /* Memory */
 	addr->bit_width = 64;
 	addr->bit_offset = 0;
-	addr->addrl = HPET_ADDR & 0xffffffff;
-	addr->addrh = HPET_ADDR >> 32;
+	addr->addrl = CONFIG_HPET_ADDRESS & 0xffffffff;
+	addr->addrh = ((unsigned long long)CONFIG_HPET_ADDRESS) >> 32;
 
-	hpet->id = 0x102282a0; /* AMD! FIXME */
+	hpet->id = *(unsigned int*)CONFIG_HPET_ADDRESS;
 	hpet->number = 0;
-	hpet->min_tick = 4096;
+	hpet->min_tick = CONFIG_HPET_MIN_TICKS;
 
 	header->checksum = acpi_checksum((void *)hpet, sizeof(acpi_hpet_t));
 }
diff --git a/src/mainboard/getac/p470/acpi_tables.c b/src/mainboard/getac/p470/acpi_tables.c
index a4ca0a8..9a10087 100644
--- a/src/mainboard/getac/p470/acpi_tables.c
+++ b/src/mainboard/getac/p470/acpi_tables.c
@@ -53,38 +53,6 @@ static void acpi_create_gnvs(global_nvs_t *gnvs)
 	gnvs->did[4] = 0x00000005;
 }
 
-static void acpi_create_intel_hpet(acpi_hpet_t * hpet)
-{
-#define HPET_ADDR  0xfed00000ULL
-	acpi_header_t *header = &(hpet->header);
-	acpi_addr_t *addr = &(hpet->addr);
-
-	memset((void *) hpet, 0, sizeof(acpi_hpet_t));
-
-	/* fill out header fields */
-	memcpy(header->signature, "HPET", 4);
-	memcpy(header->oem_id, OEM_ID, 6);
-	memcpy(header->oem_table_id, ACPI_TABLE_CREATOR, 8);
-	memcpy(header->asl_compiler_id, ASLC, 4);
-
-	header->length = sizeof(acpi_hpet_t);
-	header->revision = 1;
-
-	/* fill out HPET address */
-	addr->space_id = 0;	/* Memory */
-	addr->bit_width = 64;
-	addr->bit_offset = 0;
-	addr->addrl = HPET_ADDR & 0xffffffff;
-	addr->addrh = HPET_ADDR >> 32;
-
-	hpet->id = 0x8086a201;	/* Intel */
-	hpet->number = 0x00;
-	hpet->min_tick = 0x0080;
-
-	header->checksum =
-	    acpi_checksum((void *) hpet, sizeof(acpi_hpet_t));
-}
-
 static long acpi_create_ecdt(acpi_ecdt_t * ecdt)
 {
 	/* Attention: Make sure these match the values from
@@ -230,7 +198,7 @@ unsigned long write_acpi_tables(unsigned long start)
 	hpet = (acpi_hpet_t *) current;
 	current += sizeof(acpi_hpet_t);
 	ALIGN_CURRENT;
-	acpi_create_intel_hpet(hpet);
+	acpi_create_hpet(hpet);
 	acpi_add_table(rsdp, hpet);
 
 	/* If we want to use HPET Timers Linux wants an MADT */
diff --git a/src/mainboard/ibase/mb899/acpi_tables.c b/src/mainboard/ibase/mb899/acpi_tables.c
index 9ff5b1d..e6a517e 100644
--- a/src/mainboard/ibase/mb899/acpi_tables.c
+++ b/src/mainboard/ibase/mb899/acpi_tables.c
@@ -54,38 +54,6 @@ static void acpi_create_gnvs(global_nvs_t *gnvs)
 	gnvs->did[4] = 0x00000005;
 }
 
-static void acpi_create_intel_hpet(acpi_hpet_t * hpet)
-{
-#define HPET_ADDR  0xfed00000ULL
-	acpi_header_t *header = &(hpet->header);
-	acpi_addr_t *addr = &(hpet->addr);
-
-	memset((void *) hpet, 0, sizeof(acpi_hpet_t));
-
-	/* fill out header fields */
-	memcpy(header->signature, "HPET", 4);
-	memcpy(header->oem_id, OEM_ID, 6);
-	memcpy(header->oem_table_id, ACPI_TABLE_CREATOR, 8);
-	memcpy(header->asl_compiler_id, ASLC, 4);
-
-	header->length = sizeof(acpi_hpet_t);
-	header->revision = 1;
-
-	/* fill out HPET address */
-	addr->space_id = 0;	/* Memory */
-	addr->bit_width = 64;
-	addr->bit_offset = 0;
-	addr->addrl = HPET_ADDR & 0xffffffff;
-	addr->addrh = HPET_ADDR >> 32;
-
-	hpet->id = 0x8086a201;	/* Intel */
-	hpet->number = 0x00;
-	hpet->min_tick = 0x0080;
-
-	header->checksum =
-	    acpi_checksum((void *) hpet, sizeof(acpi_hpet_t));
-}
-
 unsigned long acpi_fill_madt(unsigned long current)
 {
 	/* Local APICs */
@@ -176,7 +144,7 @@ unsigned long write_acpi_tables(unsigned long start)
 	hpet = (acpi_hpet_t *) current;
 	current += sizeof(acpi_hpet_t);
 	ALIGN_CURRENT;
-	acpi_create_intel_hpet(hpet);
+	acpi_create_hpet(hpet);
 	acpi_add_table(rsdp, hpet);
 
 	/* If we want to use HPET Timers Linux wants an MADT */
diff --git a/src/mainboard/intel/d945gclf/acpi_tables.c b/src/mainboard/intel/d945gclf/acpi_tables.c
index d32dc81..fba2b42 100644
--- a/src/mainboard/intel/d945gclf/acpi_tables.c
+++ b/src/mainboard/intel/d945gclf/acpi_tables.c
@@ -43,38 +43,6 @@ static void acpi_create_gnvs(global_nvs_t *gnvs)
 	gnvs->mpen = 1; /* Enable Multi Processing */
 }
 
-static void acpi_create_intel_hpet(acpi_hpet_t * hpet)
-{
-#define HPET_ADDR  0xfed00000ULL
-	acpi_header_t *header = &(hpet->header);
-	acpi_addr_t *addr = &(hpet->addr);
-
-	memset((void *) hpet, 0, sizeof(acpi_hpet_t));
-
-	/* fill out header fields */
-	memcpy(header->signature, "HPET", 4);
-	memcpy(header->oem_id, OEM_ID, 6);
-	memcpy(header->oem_table_id, ACPI_TABLE_CREATOR, 8);
-	memcpy(header->asl_compiler_id, ASLC, 4);
-
-	header->length = sizeof(acpi_hpet_t);
-	header->revision = 1;
-
-	/* fill out HPET address */
-	addr->space_id = 0;	/* Memory */
-	addr->bit_width = 64;
-	addr->bit_offset = 0;
-	addr->addrl = HPET_ADDR & 0xffffffff;
-	addr->addrh = HPET_ADDR >> 32;
-
-	hpet->id = 0x8086a201;	/* Intel */
-	hpet->number = 0x00;
-	hpet->min_tick = 0x0080;
-
-	header->checksum =
-	    acpi_checksum((void *) hpet, sizeof(acpi_hpet_t));
-}
-
 unsigned long acpi_fill_madt(unsigned long current)
 {
 	/* Local APICs */
@@ -162,7 +130,7 @@ unsigned long write_acpi_tables(unsigned long start)
 	hpet = (acpi_hpet_t *) current;
 	current += sizeof(acpi_hpet_t);
 	ALIGN_CURRENT;
-	acpi_create_intel_hpet(hpet);
+	acpi_create_hpet(hpet);
 	acpi_add_table(rsdp, hpet);
 
 	/* If we want to use HPET Timers Linux wants an MADT */
diff --git a/src/mainboard/intel/eagleheights/acpi_tables.c b/src/mainboard/intel/eagleheights/acpi_tables.c
index ce67645..e1d8388 100644
--- a/src/mainboard/intel/eagleheights/acpi_tables.c
+++ b/src/mainboard/intel/eagleheights/acpi_tables.c
@@ -51,38 +51,6 @@ unsigned long acpi_fill_mcfg(unsigned long current)
 	return current;
 }
 
-static void acpi_create_intel_hpet(acpi_hpet_t * hpet)
-{
-#define HPET_ADDR  0xfed00000ULL
-	acpi_header_t *header = &(hpet->header);
-	acpi_addr_t *addr = &(hpet->addr);
-
-	memset((void *) hpet, 0, sizeof(acpi_hpet_t));
-
-	/* fill out header fields */
-	memcpy(header->signature, "HPET", 4);
-	memcpy(header->oem_id, OEM_ID, 6);
-	memcpy(header->oem_table_id, "IC      ", 8);
-	memcpy(header->asl_compiler_id, ASLC, 4);
-
-	header->length = sizeof(acpi_hpet_t);
-	header->revision = 1;
-
-	/* fill out HPET address */
-	// XXX factory bios just puts an address here -- who's right?
-	addr->space_id = 0;	/* Memory */
-	addr->bit_width = 64;
-	addr->bit_offset = 0;
-	addr->addrl = HPET_ADDR & 0xffffffff;
-	addr->addrh = HPET_ADDR >> 32;
-
-	hpet->id = 0x80861234;
-	hpet->number = 0x00;
-	hpet->min_tick = 0x0090;
-
-	header->checksum = acpi_checksum((void *) hpet, sizeof(acpi_hpet_t));
-}
-
 #define IO_APIC0 2
 #define IO_APIC1 3
 
@@ -177,7 +145,7 @@ unsigned long write_acpi_tables(unsigned long start)
 	hpet = (acpi_hpet_t *) current;
 	current += sizeof(acpi_hpet_t);
 	ALIGN_CURRENT;
-	acpi_create_intel_hpet(hpet);
+	acpi_create_hpet(hpet);
 	acpi_add_table(rsdp, hpet);
 
 	/* If we want to use HPET Timers Linux wants an MADT */
diff --git a/src/mainboard/intel/emeraldlake2/acpi_tables.c b/src/mainboard/intel/emeraldlake2/acpi_tables.c
index e32fc5b..c22dcab 100644
--- a/src/mainboard/intel/emeraldlake2/acpi_tables.c
+++ b/src/mainboard/intel/emeraldlake2/acpi_tables.c
@@ -109,38 +109,6 @@ static void acpi_create_gnvs(global_nvs_t *gnvs)
 	gnvs->chromeos.vbt2 = ACTIVE_ECFW_RO;
 }
 
-static void acpi_create_intel_hpet(acpi_hpet_t * hpet)
-{
-#define HPET_ADDR  0xfed00000ULL
-	acpi_header_t *header = &(hpet->header);
-	acpi_addr_t *addr = &(hpet->addr);
-
-	memset((void *) hpet, 0, sizeof(acpi_hpet_t));
-
-	/* fill out header fields */
-	memcpy(header->signature, "HPET", 4);
-	memcpy(header->oem_id, OEM_ID, 6);
-	memcpy(header->oem_table_id, ACPI_TABLE_CREATOR, 8);
-	memcpy(header->asl_compiler_id, ASLC, 4);
-
-	header->length = sizeof(acpi_hpet_t);
-	header->revision = 1;
-
-	/* fill out HPET address */
-	addr->space_id = 0;	/* Memory */
-	addr->bit_width = 64;
-	addr->bit_offset = 0;
-	addr->addrl = HPET_ADDR & 0xffffffff;
-	addr->addrh = HPET_ADDR >> 32;
-
-	hpet->id = 0x8086a201;	/* Intel */
-	hpet->number = 0x00;
-	hpet->min_tick = 0x0080;
-
-	header->checksum =
-	    acpi_checksum((void *) hpet, sizeof(acpi_hpet_t));
-}
-
 unsigned long acpi_fill_madt(unsigned long current)
 {
 	/* Local APICs */
@@ -254,7 +222,7 @@ unsigned long write_acpi_tables(unsigned long start)
 	hpet = (acpi_hpet_t *) current;
 	current += sizeof(acpi_hpet_t);
 	ALIGN_CURRENT;
-	acpi_create_intel_hpet(hpet);
+	acpi_create_hpet(hpet);
 	acpi_add_table(rsdp, hpet);
 
 	/* If we want to use HPET Timers Linux wants an MADT */
diff --git a/src/mainboard/intel/emeraldlake2/romstage.c b/src/mainboard/intel/emeraldlake2/romstage.c
index 7a31242..75e3b0d 100644
--- a/src/mainboard/intel/emeraldlake2/romstage.c
+++ b/src/mainboard/intel/emeraldlake2/romstage.c
@@ -189,7 +189,7 @@ void main(unsigned long bist)
 		smbusbar: SMBUS_IO_BASE,
 		wdbbar: 0x4000000,
 		wdbsize: 0x1000,
-		hpet_address: HPET_ADDR,
+		hpet_address: CONFIG_HPET_ADDRESS,
 		rcba: DEFAULT_RCBABASE,
 		pmbase: DEFAULT_PMBASE,
 		gpiobase: DEFAULT_GPIOBASE,
diff --git a/src/mainboard/iwave/iWRainbowG6/acpi_tables.c b/src/mainboard/iwave/iWRainbowG6/acpi_tables.c
index 3951cff..8095ab0 100644
--- a/src/mainboard/iwave/iWRainbowG6/acpi_tables.c
+++ b/src/mainboard/iwave/iWRainbowG6/acpi_tables.c
@@ -55,37 +55,6 @@ static void acpi_create_gnvs(global_nvs_t * gnvs)
 	gnvs->did[4] = 0x00000005;
 }
 
-static void acpi_create_intel_hpet(acpi_hpet_t *hpet)
-{
-#define HPET_ADDR  0xfed00000ULL
-	acpi_header_t *header = &(hpet->header);
-	acpi_addr_t *addr = &(hpet->addr);
-
-	memset((void *)hpet, 0, sizeof(acpi_hpet_t));
-
-	/* Fill out header fields. */
-	memcpy(header->signature, "HPET", 4);
-	memcpy(header->oem_id, OEM_ID, 6);
-	memcpy(header->oem_table_id, ACPI_TABLE_CREATOR, 8);
-	memcpy(header->asl_compiler_id, ASLC, 4);
-
-	header->length = sizeof(acpi_hpet_t);
-	header->revision = 1;
-
-	/* Fill out HPET address. */
-	addr->space_id = 0;	/* Memory */
-	addr->bit_width = 64;
-	addr->bit_offset = 0;
-	addr->addrl = HPET_ADDR & 0xffffffff;
-	addr->addrh = HPET_ADDR >> 32;
-
-	hpet->id = 0x8086a201;	/* Intel */
-	hpet->number = 0x00;
-	hpet->min_tick = 0x0080;
-
-	header->checksum = acpi_checksum((void *)hpet, sizeof(acpi_hpet_t));
-}
-
 unsigned long acpi_fill_madt(unsigned long current)
 {
 	/* Local APICs */
@@ -180,7 +149,7 @@ unsigned long write_acpi_tables(unsigned long start)
 	hpet = (acpi_hpet_t *) current;
 	current += sizeof(acpi_hpet_t);
 	ALIGN_CURRENT;
-	acpi_create_intel_hpet(hpet);
+	acpi_create_hpet(hpet);
 	acpi_add_table(rsdp, hpet);
 
 	/* If we want to use HPET Timers Linux wants an MADT */
diff --git a/src/mainboard/kontron/986lcd-m/acpi_tables.c b/src/mainboard/kontron/986lcd-m/acpi_tables.c
index 9ff5b1d..e6a517e 100644
--- a/src/mainboard/kontron/986lcd-m/acpi_tables.c
+++ b/src/mainboard/kontron/986lcd-m/acpi_tables.c
@@ -54,38 +54,6 @@ static void acpi_create_gnvs(global_nvs_t *gnvs)
 	gnvs->did[4] = 0x00000005;
 }
 
-static void acpi_create_intel_hpet(acpi_hpet_t * hpet)
-{
-#define HPET_ADDR  0xfed00000ULL
-	acpi_header_t *header = &(hpet->header);
-	acpi_addr_t *addr = &(hpet->addr);
-
-	memset((void *) hpet, 0, sizeof(acpi_hpet_t));
-
-	/* fill out header fields */
-	memcpy(header->signature, "HPET", 4);
-	memcpy(header->oem_id, OEM_ID, 6);
-	memcpy(header->oem_table_id, ACPI_TABLE_CREATOR, 8);
-	memcpy(header->asl_compiler_id, ASLC, 4);
-
-	header->length = sizeof(acpi_hpet_t);
-	header->revision = 1;
-
-	/* fill out HPET address */
-	addr->space_id = 0;	/* Memory */
-	addr->bit_width = 64;
-	addr->bit_offset = 0;
-	addr->addrl = HPET_ADDR & 0xffffffff;
-	addr->addrh = HPET_ADDR >> 32;
-
-	hpet->id = 0x8086a201;	/* Intel */
-	hpet->number = 0x00;
-	hpet->min_tick = 0x0080;
-
-	header->checksum =
-	    acpi_checksum((void *) hpet, sizeof(acpi_hpet_t));
-}
-
 unsigned long acpi_fill_madt(unsigned long current)
 {
 	/* Local APICs */
@@ -176,7 +144,7 @@ unsigned long write_acpi_tables(unsigned long start)
 	hpet = (acpi_hpet_t *) current;
 	current += sizeof(acpi_hpet_t);
 	ALIGN_CURRENT;
-	acpi_create_intel_hpet(hpet);
+	acpi_create_hpet(hpet);
 	acpi_add_table(rsdp, hpet);
 
 	/* If we want to use HPET Timers Linux wants an MADT */
diff --git a/src/mainboard/lenovo/t60/acpi_tables.c b/src/mainboard/lenovo/t60/acpi_tables.c
index db86317..f6ed4ae 100644
--- a/src/mainboard/lenovo/t60/acpi_tables.c
+++ b/src/mainboard/lenovo/t60/acpi_tables.c
@@ -55,38 +55,6 @@ static void acpi_create_gnvs(global_nvs_t *gnvs)
 	gnvs->did[4] = 0x00000005;
 }
 
-static void acpi_create_intel_hpet(acpi_hpet_t * hpet)
-{
-#define HPET_ADDR  0xfed00000ULL
-	acpi_header_t *header = &(hpet->header);
-	acpi_addr_t *addr = &(hpet->addr);
-
-	memset((void *) hpet, 0, sizeof(acpi_hpet_t));
-
-	/* fill out header fields */
-	memcpy(header->signature, "HPET", 4);
-	memcpy(header->oem_id, OEM_ID, 6);
-	memcpy(header->oem_table_id, ACPI_TABLE_CREATOR, 8);
-	memcpy(header->asl_compiler_id, ASLC, 4);
-
-	header->length = sizeof(acpi_hpet_t);
-	header->revision = 1;
-
-	/* fill out HPET address */
-	addr->space_id = 0;	/* Memory */
-	addr->bit_width = 64;
-	addr->bit_offset = 0;
-	addr->addrl = HPET_ADDR & 0xffffffff;
-	addr->addrh = HPET_ADDR >> 32;
-
-	hpet->id = 0x8086a201;	/* Intel */
-	hpet->number = 0x00;
-	hpet->min_tick = 0x0080;
-
-	header->checksum =
-	    acpi_checksum((void *) hpet, sizeof(acpi_hpet_t));
-}
-
 unsigned long acpi_fill_madt(unsigned long current)
 {
 	/* Local APICs */
@@ -188,7 +156,7 @@ unsigned long write_acpi_tables(unsigned long start)
 	hpet = (acpi_hpet_t *) current;
 	current += sizeof(acpi_hpet_t);
 	ALIGN_CURRENT;
-	acpi_create_intel_hpet(hpet);
+	acpi_create_hpet(hpet);
 	acpi_add_table(rsdp, hpet);
 
 	/* If we want to use HPET Timers Linux wants an MADT */
diff --git a/src/mainboard/lenovo/x60/acpi_tables.c b/src/mainboard/lenovo/x60/acpi_tables.c
index db86317..f6ed4ae 100644
--- a/src/mainboard/lenovo/x60/acpi_tables.c
+++ b/src/mainboard/lenovo/x60/acpi_tables.c
@@ -55,38 +55,6 @@ static void acpi_create_gnvs(global_nvs_t *gnvs)
 	gnvs->did[4] = 0x00000005;
 }
 
-static void acpi_create_intel_hpet(acpi_hpet_t * hpet)
-{
-#define HPET_ADDR  0xfed00000ULL
-	acpi_header_t *header = &(hpet->header);
-	acpi_addr_t *addr = &(hpet->addr);
-
-	memset((void *) hpet, 0, sizeof(acpi_hpet_t));
-
-	/* fill out header fields */
-	memcpy(header->signature, "HPET", 4);
-	memcpy(header->oem_id, OEM_ID, 6);
-	memcpy(header->oem_table_id, ACPI_TABLE_CREATOR, 8);
-	memcpy(header->asl_compiler_id, ASLC, 4);
-
-	header->length = sizeof(acpi_hpet_t);
-	header->revision = 1;
-
-	/* fill out HPET address */
-	addr->space_id = 0;	/* Memory */
-	addr->bit_width = 64;
-	addr->bit_offset = 0;
-	addr->addrl = HPET_ADDR & 0xffffffff;
-	addr->addrh = HPET_ADDR >> 32;
-
-	hpet->id = 0x8086a201;	/* Intel */
-	hpet->number = 0x00;
-	hpet->min_tick = 0x0080;
-
-	header->checksum =
-	    acpi_checksum((void *) hpet, sizeof(acpi_hpet_t));
-}
-
 unsigned long acpi_fill_madt(unsigned long current)
 {
 	/* Local APICs */
@@ -188,7 +156,7 @@ unsigned long write_acpi_tables(unsigned long start)
 	hpet = (acpi_hpet_t *) current;
 	current += sizeof(acpi_hpet_t);
 	ALIGN_CURRENT;
-	acpi_create_intel_hpet(hpet);
+	acpi_create_hpet(hpet);
 	acpi_add_table(rsdp, hpet);
 
 	/* If we want to use HPET Timers Linux wants an MADT */
diff --git a/src/mainboard/msi/ms7135/acpi_tables.c b/src/mainboard/msi/ms7135/acpi_tables.c
index 4a3fbe2..6bd3183a 100644
--- a/src/mainboard/msi/ms7135/acpi_tables.c
+++ b/src/mainboard/msi/ms7135/acpi_tables.c
@@ -23,76 +23,6 @@
 
 extern const unsigned char AmlCode[];
 
-static void acpi_create_hpet_new(acpi_hpet_t *);
-static int acpi_create_hpet_new_fill(acpi_hpet_t *, u32, u16, u8);
-static unsigned long acpi_fill_hpet_new(unsigned long);
-
-void acpi_create_hpet_new(acpi_hpet_t *hpet)
-{
-	acpi_header_t *header=&(hpet->header);
-	unsigned long current=(unsigned long)hpet;
-
-	memset((void *)hpet, 0, sizeof(acpi_hpet_t));
-
-	/* fill out header fields */
-	memcpy(header->signature, "HPET", 4);
-	memcpy(header->oem_id, OEM_ID, 6);
-	memcpy(header->oem_table_id, ACPI_TABLE_CREATOR, 8);
-	memcpy(header->asl_compiler_id, ASLC, 4);
-
-	header->length = sizeof(acpi_hpet_t);
-	header->revision = 1;
-
-	current = acpi_fill_hpet_new(current);
-
-	/* recalculate length */
-	header->length = current - (unsigned long)hpet;
-
-	header->checksum	= acpi_checksum((void *)hpet, header->length);
-}
-
-
-int acpi_create_hpet_new_fill(acpi_hpet_t *hpet, u32 base, u16 min, u8 attr)
-{
-	static u8 num = 0;
-	acpi_addr_t *addr = &(hpet->addr);
-
-	hpet->id = read32(base + 0x000);
-
-	/* fill out HPET address */
-	addr->space_id		= 0; /* Memory */
-	addr->bit_width		= 0;
-	addr->bit_offset	= 0;
-	addr->addrl		= base;
-	addr->addrh		= 0;
-
-	hpet->number	= num++;
-	hpet->min_tick  = min;
-	hpet->attributes = attr;
-
-	return (sizeof(acpi_hpet_t));
-}
-
-static unsigned long acpi_fill_hpet_new(unsigned long current)
-{
-#if 1
-	device_t dev;
-	unsigned long hpet_base;
-
-	dev = dev_find_slot(0x0, PCI_DEVFN(0x1,0));
-	if (!dev)
-		return current;
-
-	hpet_base = pci_read_config32(dev, 0x44) & ~0xf;
-
-	printk(BIOS_INFO, "hpet_base %lx.\n", hpet_base);
-
-	current += acpi_create_hpet_new_fill((acpi_hpet_t *)current, hpet_base, 250, 1);
-#endif
-
-	return current;
-}
-
 unsigned long acpi_fill_mcfg(unsigned long current)
 {
 	device_t dev;
@@ -239,7 +169,7 @@ unsigned long write_acpi_tables(unsigned long start)
 	current = ALIGN(current, 16);
 	hpet = (acpi_hpet_t *) current;
 	printk(BIOS_DEBUG, "ACPI:    * HPET @ %p\n", hpet);
-	acpi_create_hpet_new(hpet);
+	acpi_create_hpet(hpet);
 	acpi_add_table(rsdp, hpet);
 	current += hpet->header.length;
 
diff --git a/src/mainboard/roda/rk886ex/acpi_tables.c b/src/mainboard/roda/rk886ex/acpi_tables.c
index db86317..f6ed4ae 100644
--- a/src/mainboard/roda/rk886ex/acpi_tables.c
+++ b/src/mainboard/roda/rk886ex/acpi_tables.c
@@ -55,38 +55,6 @@ static void acpi_create_gnvs(global_nvs_t *gnvs)
 	gnvs->did[4] = 0x00000005;
 }
 
-static void acpi_create_intel_hpet(acpi_hpet_t * hpet)
-{
-#define HPET_ADDR  0xfed00000ULL
-	acpi_header_t *header = &(hpet->header);
-	acpi_addr_t *addr = &(hpet->addr);
-
-	memset((void *) hpet, 0, sizeof(acpi_hpet_t));
-
-	/* fill out header fields */
-	memcpy(header->signature, "HPET", 4);
-	memcpy(header->oem_id, OEM_ID, 6);
-	memcpy(header->oem_table_id, ACPI_TABLE_CREATOR, 8);
-	memcpy(header->asl_compiler_id, ASLC, 4);
-
-	header->length = sizeof(acpi_hpet_t);
-	header->revision = 1;
-
-	/* fill out HPET address */
-	addr->space_id = 0;	/* Memory */
-	addr->bit_width = 64;
-	addr->bit_offset = 0;
-	addr->addrl = HPET_ADDR & 0xffffffff;
-	addr->addrh = HPET_ADDR >> 32;
-
-	hpet->id = 0x8086a201;	/* Intel */
-	hpet->number = 0x00;
-	hpet->min_tick = 0x0080;
-
-	header->checksum =
-	    acpi_checksum((void *) hpet, sizeof(acpi_hpet_t));
-}
-
 unsigned long acpi_fill_madt(unsigned long current)
 {
 	/* Local APICs */
@@ -188,7 +156,7 @@ unsigned long write_acpi_tables(unsigned long start)
 	hpet = (acpi_hpet_t *) current;
 	current += sizeof(acpi_hpet_t);
 	ALIGN_CURRENT;
-	acpi_create_intel_hpet(hpet);
+	acpi_create_hpet(hpet);
 	acpi_add_table(rsdp, hpet);
 
 	/* If we want to use HPET Timers Linux wants an MADT */
diff --git a/src/mainboard/samsung/lumpy/acpi_tables.c b/src/mainboard/samsung/lumpy/acpi_tables.c
index 71b0c59..fca9c82 100644
--- a/src/mainboard/samsung/lumpy/acpi_tables.c
+++ b/src/mainboard/samsung/lumpy/acpi_tables.c
@@ -106,38 +106,6 @@ static void acpi_create_gnvs(global_nvs_t *gnvs)
 	gnvs->chromeos.vbt2 = ec_read(0xcb) ? ACTIVE_ECFW_RW : ACTIVE_ECFW_RO;
 }
 
-static void acpi_create_intel_hpet(acpi_hpet_t * hpet)
-{
-#define HPET_ADDR  0xfed00000ULL
-	acpi_header_t *header = &(hpet->header);
-	acpi_addr_t *addr = &(hpet->addr);
-
-	memset((void *) hpet, 0, sizeof(acpi_hpet_t));
-
-	/* fill out header fields */
-	memcpy(header->signature, "HPET", 4);
-	memcpy(header->oem_id, OEM_ID, 6);
-	memcpy(header->oem_table_id, ACPI_TABLE_CREATOR, 8);
-	memcpy(header->asl_compiler_id, ASLC, 4);
-
-	header->length = sizeof(acpi_hpet_t);
-	header->revision = 1;
-
-	/* fill out HPET address */
-	addr->space_id = 0;	/* Memory */
-	addr->bit_width = 64;
-	addr->bit_offset = 0;
-	addr->addrl = HPET_ADDR & 0xffffffff;
-	addr->addrh = HPET_ADDR >> 32;
-
-	hpet->id = 0x8086a201;	/* Intel */
-	hpet->number = 0x00;
-	hpet->min_tick = 0x0080;
-
-	header->checksum =
-	    acpi_checksum((void *) hpet, sizeof(acpi_hpet_t));
-}
-
 unsigned long acpi_fill_madt(unsigned long current)
 {
 	/* Local APICs */
@@ -251,7 +219,7 @@ unsigned long write_acpi_tables(unsigned long start)
 	hpet = (acpi_hpet_t *) current;
 	current += sizeof(acpi_hpet_t);
 	ALIGN_CURRENT;
-	acpi_create_intel_hpet(hpet);
+	acpi_create_hpet(hpet);
 	acpi_add_table(rsdp, hpet);
 
 	/* If we want to use HPET Timers Linux wants an MADT */
diff --git a/src/mainboard/samsung/lumpy/romstage.c b/src/mainboard/samsung/lumpy/romstage.c
index 4bba76e..57c6eea 100644
--- a/src/mainboard/samsung/lumpy/romstage.c
+++ b/src/mainboard/samsung/lumpy/romstage.c
@@ -155,7 +155,7 @@ void main(unsigned long bist)
 		.smbusbar = SMBUS_IO_BASE,
 		.wdbbar = 0x4000000,
 		.wdbsize = 0x1000,
-		.hpet_address = HPET_ADDR,
+		.hpet_address = CONFIG_HPET_ADDRESS,
 		.rcba = DEFAULT_RCBABASE,
 		.pmbase = DEFAULT_PMBASE,
 		.gpiobase = DEFAULT_GPIOBASE,
diff --git a/src/mainboard/samsung/stumpy/acpi_tables.c b/src/mainboard/samsung/stumpy/acpi_tables.c
index 5654460..b91e1e3 100644
--- a/src/mainboard/samsung/stumpy/acpi_tables.c
+++ b/src/mainboard/samsung/stumpy/acpi_tables.c
@@ -110,38 +110,6 @@ static void acpi_create_gnvs(global_nvs_t *gnvs)
 	gnvs->chromeos.vbt2 = ACTIVE_ECFW_RO;
 }
 
-static void acpi_create_intel_hpet(acpi_hpet_t * hpet)
-{
-#define HPET_ADDR  0xfed00000ULL
-	acpi_header_t *header = &(hpet->header);
-	acpi_addr_t *addr = &(hpet->addr);
-
-	memset((void *) hpet, 0, sizeof(acpi_hpet_t));
-
-	/* fill out header fields */
-	memcpy(header->signature, "HPET", 4);
-	memcpy(header->oem_id, OEM_ID, 6);
-	memcpy(header->oem_table_id, ACPI_TABLE_CREATOR, 8);
-	memcpy(header->asl_compiler_id, ASLC, 4);
-
-	header->length = sizeof(acpi_hpet_t);
-	header->revision = 1;
-
-	/* fill out HPET address */
-	addr->space_id = 0;	/* Memory */
-	addr->bit_width = 64;
-	addr->bit_offset = 0;
-	addr->addrl = HPET_ADDR & 0xffffffff;
-	addr->addrh = HPET_ADDR >> 32;
-
-	hpet->id = 0x8086a201;	/* Intel */
-	hpet->number = 0x00;
-	hpet->min_tick = 0x0080;
-
-	header->checksum =
-	    acpi_checksum((void *) hpet, sizeof(acpi_hpet_t));
-}
-
 unsigned long acpi_fill_madt(unsigned long current)
 {
 	/* Local APICs */
@@ -255,7 +223,7 @@ unsigned long write_acpi_tables(unsigned long start)
 	hpet = (acpi_hpet_t *) current;
 	current += sizeof(acpi_hpet_t);
 	ALIGN_CURRENT;
-	acpi_create_intel_hpet(hpet);
+	acpi_create_hpet(hpet);
 	acpi_add_table(rsdp, hpet);
 
 	/* If we want to use HPET Timers Linux wants an MADT */
diff --git a/src/mainboard/samsung/stumpy/romstage.c b/src/mainboard/samsung/stumpy/romstage.c
index 58305c8..5602c63 100644
--- a/src/mainboard/samsung/stumpy/romstage.c
+++ b/src/mainboard/samsung/stumpy/romstage.c
@@ -190,7 +190,7 @@ void main(unsigned long bist)
 		smbusbar: SMBUS_IO_BASE,
 		wdbbar: 0x4000000,
 		wdbsize: 0x1000,
-		hpet_address: HPET_ADDR,
+		hpet_address: CONFIG_HPET_ADDRESS,
 		rcba: DEFAULT_RCBABASE,
 		pmbase: DEFAULT_PMBASE,
 		gpiobase: DEFAULT_GPIOBASE,
diff --git a/src/mainboard/siemens/sitemp_g1p1/acpi_tables.c b/src/mainboard/siemens/sitemp_g1p1/acpi_tables.c
index 9cdaa64..ea69034 100644
--- a/src/mainboard/siemens/sitemp_g1p1/acpi_tables.c
+++ b/src/mainboard/siemens/sitemp_g1p1/acpi_tables.c
@@ -76,37 +76,6 @@ static void acpi_write_gvars(global_vars_t *gvars)
 	gvars->mpen = 1;
 }
 
-static void acpi_create_my_hpet(acpi_hpet_t *hpet)
-{
-#define HPET_ADDR  0xfed00000ULL
-	acpi_header_t *header=&(hpet->header);
-	acpi_addr_t *addr=&(hpet->addr);
-
-	memset((void *)hpet, 0, sizeof(acpi_hpet_t));
-
-	/* fill out header fields */
-	memcpy(header->signature, "HPET", 4);
-	memcpy(header->oem_id, OEM_ID, 6);
-	memcpy(header->oem_table_id, ACPI_TABLE_CREATOR, 8);
-	memcpy(header->asl_compiler_id, ASLC, 4);
-
-	header->length = sizeof(acpi_hpet_t);
-	header->revision = 1;
-
-	/* fill out HPET address */
-	addr->space_id		= 0; /* Memory */
-	addr->bit_width		= 64;
-	addr->bit_offset	= 0;
-	addr->addrl		= HPET_ADDR & 0xffffffff;
-	addr->addrh		= HPET_ADDR >> 32;
-
-	hpet->id = 0x43538301;
-	hpet->number	= 0;
-	hpet->min_tick  = 20;
-
-	header->checksum	= acpi_checksum((void *)hpet, sizeof(acpi_hpet_t));
-}
-
 #if DUMP_ACPI_TABLES == 1
 static void dump_mem(u32 start, u32 end)
 {
@@ -231,7 +200,7 @@ unsigned long write_acpi_tables(unsigned long start)
 	 /* HPET */
 	printk(BIOS_DEBUG, "ACPI:    * HPET\n");
 	hpet = (acpi_hpet_t *) current;
-	acpi_create_my_hpet(hpet);
+	acpi_create_hpet(hpet);
 	current += sizeof(acpi_hpet_t);
 	acpi_add_table(rsdp, hpet);
 
diff --git a/src/mainboard/via/vt8454c/acpi_tables.c b/src/mainboard/via/vt8454c/acpi_tables.c
index a191ada..a13395a 100644
--- a/src/mainboard/via/vt8454c/acpi_tables.c
+++ b/src/mainboard/via/vt8454c/acpi_tables.c
@@ -51,40 +51,6 @@ unsigned long acpi_fill_mcfg(unsigned long current)
 	return current;
 }
 
-
-static void acpi_create_via_hpet(acpi_hpet_t * hpet)
-{
-#define HPET_ADDR  0xfe800000ULL
-	acpi_header_t *header = &(hpet->header);
-	acpi_addr_t *addr = &(hpet->addr);
-
-	memset((void *) hpet, 0, sizeof(acpi_hpet_t));
-
-	/* fill out header fields */
-	memcpy(header->signature, "HPET", 4);
-	memcpy(header->oem_id, OEM_ID, 6);
-	memcpy(header->oem_table_id, ACPI_TABLE_CREATOR, 8);
-	memcpy(header->asl_compiler_id, ASLC, 4);
-
-	header->length = sizeof(acpi_hpet_t);
-	header->revision = 1;
-
-	/* fill out HPET address */
-	// XXX factory bios just puts an address here -- who's right?
-	addr->space_id = 0;	/* Memory */
-	addr->bit_width = 64;
-	addr->bit_offset = 0;
-	addr->addrl = HPET_ADDR & 0xffffffff;
-	addr->addrh = HPET_ADDR >> 32;
-
-	hpet->id = 0x11068201;	/* VIA */
-	hpet->number = 0x00;
-	hpet->min_tick = 0x0090;
-
-	header->checksum =
-	    acpi_checksum((void *) hpet, sizeof(acpi_hpet_t));
-}
-
 unsigned long acpi_fill_madt(unsigned long current)
 {
 	/* Local Apic */
@@ -153,7 +119,7 @@ unsigned long write_acpi_tables(unsigned long start)
 
 	hpet = (acpi_hpet_t *) current;
 	current += sizeof(acpi_hpet_t);
-	acpi_create_via_hpet(hpet);
+	acpi_create_hpet(hpet);
 	acpi_add_table(rsdp, hpet);
 
 	/* If we want to use HPET Timers Linux wants an MADT */
diff --git a/src/northbridge/via/cx700/Kconfig b/src/northbridge/via/cx700/Kconfig
index 7e4a193..8f6e337 100644
--- a/src/northbridge/via/cx700/Kconfig
+++ b/src/northbridge/via/cx700/Kconfig
@@ -28,6 +28,8 @@ config CX700_VIDEO_MB_128MB
 
 endchoice
 
+if NORTHBRIDGE_VIA_CX700
+
 config VIDEO_MB
 	int
 	default 0   if CX700_VIDEO_MB_OFF
@@ -36,5 +38,16 @@ config VIDEO_MB
 	default 32  if CX700_VIDEO_MB_32MB
 	default 64  if CX700_VIDEO_MB_64MB
 	default 128 if CX700_VIDEO_MB_128MB
-	depends on NORTHBRIDGE_VIA_CX700
 
+config HPET_ADDRESS_OVERRIDE
+	def_bool y
+
+config HPET_ADDRESS
+	hex
+	default 0xfe800000
+
+config HPET_MIN_TICKS
+	hex
+	default 0x90
+
+endif
diff --git a/src/northbridge/via/cx700/lpc.c b/src/northbridge/via/cx700/lpc.c
index 77ab97c..5a9ced0 100644
--- a/src/northbridge/via/cx700/lpc.c
+++ b/src/northbridge/via/cx700/lpc.c
@@ -32,7 +32,6 @@
 #include <stdlib.h>
 
 #define ACPI_IO_BASE	0x400
-#define HPET_ADDR	0xfe800000UL
 
 static const unsigned char pci_irqs[4] = { 11, 11, 10, 10 };
 
@@ -229,7 +228,7 @@ static void cx700_set_lpc_registers(struct device *dev)
 	pci_write_config8(dev, 0x40, 0x54);
 
 	/* Enable HPET timer */
-	pci_write_config32(dev, 0x68, (1 << 31) | (HPET_ADDR >> 8));
+	pci_write_config32(dev, 0x68, (1 << 31) | (CONFIG_HPET_ADDRESS >> 8));
 
 }
 
diff --git a/src/southbridge/amd/sb600/Kconfig b/src/southbridge/amd/sb600/Kconfig
index 8ec3967..51d8310 100644
--- a/src/southbridge/amd/sb600/Kconfig
+++ b/src/southbridge/amd/sb600/Kconfig
@@ -59,4 +59,8 @@ config SATA_MODE
 	default 1 if SATA_MODE_IDE
 	default 0 if SATA_MODE_AHCI
 
+config HPET_MIN_TICKS
+        hex
+        default 0x14
+
 endif
diff --git a/src/southbridge/intel/bd82x6x/Kconfig b/src/southbridge/intel/bd82x6x/Kconfig
index a7d41dc..75858c2 100644
--- a/src/southbridge/intel/bd82x6x/Kconfig
+++ b/src/southbridge/intel/bd82x6x/Kconfig
@@ -55,4 +55,8 @@ config SERIRQ_CONTINUOUS_MODE
 	  If you set this option to y, the serial IRQ machine will be
 	  operated in continuous mode.
 
+config HPET_MIN_TICKS
+	hex
+	default 0x80
+
 endif
diff --git a/src/southbridge/intel/bd82x6x/pch.h b/src/southbridge/intel/bd82x6x/pch.h
index 7e67e3b..c9044ed 100644
--- a/src/southbridge/intel/bd82x6x/pch.h
+++ b/src/southbridge/intel/bd82x6x/pch.h
@@ -47,7 +47,6 @@
 #define DEFAULT_GPIOBASE	0x0480
 #define DEFAULT_PMBASE		0x0500
 
-#define HPET_ADDR		0xfed00000
 #define DEFAULT_RCBA		0xfed1c000
 
 #ifndef __ACPI__
diff --git a/src/southbridge/intel/i3100/Kconfig b/src/southbridge/intel/i3100/Kconfig
index f2b7923..e0acc63 100644
--- a/src/southbridge/intel/i3100/Kconfig
+++ b/src/southbridge/intel/i3100/Kconfig
@@ -2,3 +2,12 @@ config SOUTHBRIDGE_INTEL_I3100
 	bool
 	select IOAPIC
 	select HAVE_HARD_RESET
+
+if SOUTHBRIDGE_INTEL_I3100
+
+config HPET_MIN_TICKS
+        hex
+        default 0x90
+
+endif
+
diff --git a/src/southbridge/intel/i82801ax/i82801ax.h b/src/southbridge/intel/i82801ax/i82801ax.h
index bd192e0..186a917 100644
--- a/src/southbridge/intel/i82801ax/i82801ax.h
+++ b/src/southbridge/intel/i82801ax/i82801ax.h
@@ -33,7 +33,6 @@ int smbus_read_byte(u8 device, u8 address);
 
 #define SMBUS_IO_BASE		0x0f00
 #define PMBASE_ADDR		0x0400
-#define HPET_ADDR		0xfed00000
 
 #define PCI_DMA_CFG		0x90
 #define SERIRQ_CNTL		0x64
diff --git a/src/southbridge/intel/i82801bx/i82801bx.h b/src/southbridge/intel/i82801bx/i82801bx.h
index 090cddf..405e52b 100644
--- a/src/southbridge/intel/i82801bx/i82801bx.h
+++ b/src/southbridge/intel/i82801bx/i82801bx.h
@@ -34,7 +34,6 @@ int smbus_read_byte(u8 device, u8 address);
 #define SMBUS_IO_BASE		0x0f00
 #define PMBASE_ADDR		0x0400
 #define GPIO_BASE_ADDR		0x0500
-#define HPET_ADDR		0xfed00000
 
 #define SECSTS			0x1e
 
diff --git a/src/southbridge/intel/i82801dx/i82801dx.h b/src/southbridge/intel/i82801dx/i82801dx.h
index 4da430a..d9e4d38 100644
--- a/src/southbridge/intel/i82801dx/i82801dx.h
+++ b/src/southbridge/intel/i82801dx/i82801dx.h
@@ -41,15 +41,6 @@ int smbus_read_byte(unsigned device, unsigned address);
 #endif
 #endif
 
-/*
- * HPET Memory Address Range. Possible values:
- * 0xfed00000 for FED0_0000h - FED0_03FFh
- * 0xfed01000 for FED0_1000h - FED0_13FFh
- * 0xfed02000 for FED0_2000h - FED0_23FFh
- * 0xfed03000 for FED0_3000h - FED0_33FFh
- */
-#define HPET_ADDR		0xfed00000
-
 #define DEBUG_PERIODIC_SMIS 0
 
 #define MAINBOARD_POWER_OFF	0
diff --git a/src/southbridge/intel/i82801dx/lpc.c b/src/southbridge/intel/i82801dx/lpc.c
index 768e700..fbf8e12 100644
--- a/src/southbridge/intel/i82801dx/lpc.c
+++ b/src/southbridge/intel/i82801dx/lpc.c
@@ -233,7 +233,7 @@ static void enable_hpet(struct device *dev)
 	u32 reg32, hpet, val;
 
 	/* Set HPET base address and enable it */
-	printk(BIOS_DEBUG, "Enabling HPET at 0x%x\n", HPET_ADDR);
+	printk(BIOS_DEBUG, "Enabling HPET at 0x%x\n", CONFIG_HPET_ADDRESS);
 	reg32 = pci_read_config32(dev, GEN_CNTL);
 	/*
 	 * Bit 17 is HPET enable bit.
@@ -241,7 +241,7 @@ static void enable_hpet(struct device *dev)
 	 */
 	reg32 &= ~(3 << 15);	/* Clear it */
 
-	hpet = HPET_ADDR >> 12;
+	hpet = CONFIG_HPET_ADDRESS >> 12;
 	hpet &= 0x3;
 
 	reg32 |= (hpet << 15);
@@ -254,7 +254,7 @@ static void enable_hpet(struct device *dev)
 	val &= 0x7;
 
 	if ((val & 0x4) && (hpet == (val & 0x3))) {
-		printk(BIOS_INFO, "HPET enabled at 0x%x\n", HPET_ADDR);
+		printk(BIOS_INFO, "HPET enabled at 0x%x\n", CONFIG_HPET_ADDRESS);
 	} else {
 		printk(BIOS_WARNING, "HPET was not enabled correctly\n");
 		reg32 &= ~(1 << 17);	/* Clear Enable */
diff --git a/src/southbridge/intel/i82801gx/Kconfig b/src/southbridge/intel/i82801gx/Kconfig
index 3550954..4937df7 100644
--- a/src/southbridge/intel/i82801gx/Kconfig
+++ b/src/southbridge/intel/i82801gx/Kconfig
@@ -41,7 +41,10 @@ config USBDEBUG_DEFAULT_PORT
 config BOOTBLOCK_SOUTHBRIDGE_INIT
         string
 	default "southbridge/intel/i82801gx/bootblock.c"
-	depends on SOUTHBRIDGE_INTEL_I82801GX
+
+config HPET_MIN_TICKS
+	hex
+	default 0x80
 
 endif
 
diff --git a/src/southbridge/intel/i82801gx/i82801gx.h b/src/southbridge/intel/i82801gx/i82801gx.h
index 8fb5b92..566311f 100644
--- a/src/southbridge/intel/i82801gx/i82801gx.h
+++ b/src/southbridge/intel/i82801gx/i82801gx.h
@@ -32,7 +32,6 @@
 #define DEFAULT_GPIOBASE	0x0480
 #define DEFAULT_PMBASE		0x0500
 
-#define HPET_ADDR		0xfed00000
 #define DEFAULT_RCBA		0xfed1c000
 
 #ifndef __ACPI__
diff --git a/src/southbridge/intel/sch/Kconfig b/src/southbridge/intel/sch/Kconfig
index 83ff447..32eb868 100644
--- a/src/southbridge/intel/sch/Kconfig
+++ b/src/southbridge/intel/sch/Kconfig
@@ -48,5 +48,9 @@ config CMC_FILE
 	  The path and filename of the file to use as CMC state machine
 	  binary.
 
+config HPET_MIN_TICKS
+        hex
+        default 0x80
+
 endif
 
diff --git a/src/southbridge/nvidia/ck804/Kconfig b/src/southbridge/nvidia/ck804/Kconfig
index 97927d7..b6f718e 100644
--- a/src/southbridge/nvidia/ck804/Kconfig
+++ b/src/southbridge/nvidia/ck804/Kconfig
@@ -38,4 +38,8 @@ config CK804_NUM
 	int
 	default 1
 
+config HPET_MIN_TICKS
+        hex
+        default 0xfa
+
 endif
diff --git a/src/southbridge/via/vt8237r/lpc.c b/src/southbridge/via/vt8237r/lpc.c
index a47ab38..1d96560 100644
--- a/src/southbridge/via/vt8237r/lpc.c
+++ b/src/southbridge/via/vt8237r/lpc.c
@@ -387,8 +387,8 @@ static void vt8237a_init(struct device *dev)
 	/* Host Bus Power Management Control, maybe not needed */
 	pci_write_config8(dev, 0x8c, 0x5);
 
-	/* Enable HPET at VT8237R_HPET_ADDR. */
-	pci_write_config32(dev, 0x68, (VT8237R_HPET_ADDR | 0x80));
+	/* Enable HPET */
+	pci_write_config32(dev, 0x68, (CONFIG_HPET_ADDRESS | 0x80));
 
 	southbridge_init_common(dev);
 
@@ -426,8 +426,8 @@ static void vt8237s_init(struct device *dev)
 	/* Host Bus Power Management Control, maybe not needed */
 	pci_write_config8(dev, 0x8c, 0x5);
 
-	/* Enable HPET at VT8237R_HPET_ADDR., does not work correctly on R. */
-	pci_write_config32(dev, 0x68, (VT8237R_HPET_ADDR | 0x80));
+	/* Enable HPET, does not work correctly on R. */
+	pci_write_config32(dev, 0x68, (CONFIG_HPET_ADDRESS | 0x80));
 
 	southbridge_init_common(dev);
 
diff --git a/src/southbridge/via/vt8237r/vt8237r.h b/src/southbridge/via/vt8237r/vt8237r.h
index 9d5a1fc..58cb857 100644
--- a/src/southbridge/via/vt8237r/vt8237r.h
+++ b/src/southbridge/via/vt8237r/vt8237r.h
@@ -33,7 +33,6 @@
 #else
 #define VT8237S_SPI_MEM_BASE		0xfed02000UL
 #endif
-#define VT8237R_HPET_ADDR		0xfed00000ULL
 
 /* PMBASE FIXME mostly taken from ich7 */
 #define PM1_STS		0x00




More information about the coreboot mailing list