[PATCH 3/5] BIOS changes for qemu-kvm hpet support (v8)

Beth Kon
2009-07-01T03:56:53Z

Advertise HPET in ACPI HPET table

Signed-off-by: Beth Kon <eak@us.ibm.com>
Signed-off-by: Avi Kivity <avi@redhat.com>

---
kvm/bios/acpi-dsdt.dsl | 2 --
kvm/bios/rombios32.c | 11 +++--------
2 files changed, 3 insertions(+), 10 deletions(-)

diff --git a/kvm/bios/acpi-dsdt.dsl b/kvm/bios/acpi-dsdt.dsl
index 3560baa..26fc7ad 100755
--- a/kvm/bios/acpi-dsdt.dsl
+++ b/kvm/bios/acpi-dsdt.dsl
@@ -194,7 +194,6 @@ DefinitionBlock (
})
}
#ifdef BX_QEMU
-#ifdef HPET_WORKS_IN_KVM
Device(HPET) {
Name(_HID, EISAID("PNP0103"))
Name(_UID, 0)
@@ -214,7 +213,6 @@ DefinitionBlock (
})
}
#endif
-#endif
}

Scope(\_SB.PCI0) {
diff --git a/kvm/bios/rombios32.c b/kvm/bios/rombios32.c
index 9e5370e..110d130 100755
--- a/kvm/bios/rombios32.c
+++ b/kvm/bios/rombios32.c
@@ -1527,8 +1527,8 @@ struct acpi_20_generic_address {
} __attribute__((__packed__));

/*
- * * HPET Description Table
- * */
+ * HPET Description Table
+ */
struct acpi_20_hpet {
ACPI_TABLE_HEADER_DEF /* ACPI common table header */
uint32_t timer_block_id;
@@ -1717,13 +1717,11 @@ void acpi_bios_init(void)
addr += madt_size;

#ifdef BX_QEMU
-#ifdef HPET_WORKS_IN_KVM
addr = (addr + 7) & ~7;
hpet_addr = addr;
hpet = (void *)(addr);
addr += sizeof(*hpet);
#endif
-#endif

/* RSDP */
memset(rsdp, 0, sizeof(*rsdp));
@@ -1901,7 +1899,6 @@ void acpi_bios_init(void)
}

/* HPET */
-#ifdef HPET_WORKS_IN_KVM
memset(hpet, 0, sizeof(*hpet));
/* Note timer_block_id value must be kept in sync with value advertised by
* emulated hpet
@@ -1910,7 +1907,6 @@ void acpi_bios_init(void)
hpet->addr.address = cpu_to_le32(ACPI_HPET_ADDRESS);
acpi_build_table_header((struct acpi_table_header *)hpet,
"HPET", sizeof(*hpet), 1);
-#endif

#endif

@@ -1920,8 +1916,7 @@ void acpi_bios_init(void)
rsdt->table_offset_entry[nb_rsdt_entries++] = cpu_to_le32(ssdt_addr);
rsdt->table_offset_entry[nb_rsdt_entries++] = cpu_to_le32(madt_addr);
#ifdef BX_QEMU
- /* No HPET (yet) */
-// rsdt->table_offset_entry[nb_rsdt_entries++] = cpu_to_le32(hpet_addr);
+ rsdt->table_offset_entry[nb_rsdt_entries++] = cpu_to_le32(hpet_addr);
if (nb_numa_nodes > 0)
rsdt->table_offset_entry[nb_rsdt_entries++] = cpu_to_le32(srat_addr);
acpi_additional_tables(); /* resets cfg to required entry */