From: Andre Przywara <andre.przywara@amd.com>
To: Anthony Liguori <anthony@codemonkey.ws>
Cc: qemu-devel@nongnu.org
Subject: [Qemu-devel] [PATCH] rebase BIOS patch 0005 to apply against updated BOCHS version
Date: Mon, 22 Dec 2008 00:38:06 +0100 [thread overview]
Message-ID: <494ED35E.90304@amd.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 4623 bytes --]
Hi,
the update to the new BOCHS BIOS version obviously broke BIOS patch
0005_hpet.patch. "git am" seems to be pickier than a simple "patch", but
the patch context lines have changed, so I think this patch is
justified. I attached the new version of the file, if the diff against the
patch is hard to read. This is a git patch, so the diff is a bit larger
than necessary. If you want to stay with the CVS diff, tell me and I
will send a new version.
Signed-off-by: Andre Przywara <andre.przywara@amd.com>
Regards,
Andre.
---
From: Andre Przywara <andre.przywara@amd.com>
rebasing BIOS patch 0005 to apply against updated BOCHS version
diff --git a/pc-bios/bios-pq/0005_hpet.patch b/pc-bios/bios-pq/0005_hpet.patch
index dde2799..5ba7983 100644
--- a/pc-bios/bios-pq/0005_hpet.patch
+++ b/pc-bios/bios-pq/0005_hpet.patch
@@ -4,13 +4,13 @@ BOCHS BIOS changes to support HPET in QEMU.
Signed-off-by Beth Kon <eak@us.ibm.com>
-Index: bochs-2.3.7/bios/acpi-dsdt.dsl
-===================================================================
---- bochs-2.3.7.orig/bios/acpi-dsdt.dsl 2008-10-15 12:39:14.000000000 -0500
-+++ bochs-2.3.7/bios/acpi-dsdt.dsl 2008-10-28 07:58:40.000000000 -0500
-@@ -159,6 +159,26 @@
- Return (MEMP)
- }
+diff --git a/bios/acpi-dsdt.dsl b/bios/acpi-dsdt.dsl
+index 5fc3636..a5bc8b3 100644
+--- a/bios/acpi-dsdt.dsl
++++ b/bios/acpi-dsdt.dsl
+@@ -130,6 +130,26 @@ DefinitionBlock (
+ ,, , AddressRangeMemory, TypeStatic)
+ })
}
+#ifdef BX_QEMU
+ Device(HPET) {
@@ -35,11 +35,11 @@ Index: bochs-2.3.7/bios/acpi-dsdt.dsl
}
Scope(\_SB.PCI0) {
-Index: bochs-2.3.7/bios/rombios32.c
-===================================================================
---- bochs-2.3.7.orig/bios/rombios32.c 2008-10-15 12:39:36.000000000 -0500
-+++ bochs-2.3.7/bios/rombios32.c 2008-11-12 14:41:41.000000000 -0600
-@@ -1087,7 +1087,11 @@
+diff --git a/bios/rombios32.c b/bios/rombios32.c
+index de2ffed..f81b269 100644
+--- a/bios/rombios32.c
++++ b/bios/rombios32.c
+@@ -1141,7 +1141,11 @@ struct rsdp_descriptor /* Root System Descriptor Pointer */
struct rsdt_descriptor_rev1
{
ACPI_TABLE_HEADER_DEF /* ACPI common table header */
@@ -51,7 +51,7 @@ Index: bochs-2.3.7/bios/rombios32.c
/* ACPI tables */
};
-@@ -1227,6 +1231,32 @@
+@@ -1281,6 +1285,32 @@ struct madt_processor_apic
#endif
};
@@ -84,9 +84,9 @@ Index: bochs-2.3.7/bios/rombios32.c
struct madt_io_apic
{
APIC_HEADER_DEF
-@@ -1237,6 +1267,17 @@
- * lines start */
- };
+@@ -1295,6 +1325,17 @@ struct madt_io_apic
+
+ #pragma pack()
+#ifdef BX_QEMU
+struct madt_int_override
@@ -102,7 +102,7 @@ Index: bochs-2.3.7/bios/rombios32.c
#include "acpi-dsdt.hex"
static inline uint16_t cpu_to_le16(uint16_t x)
-@@ -1342,6 +1383,10 @@
+@@ -1400,6 +1441,10 @@ void acpi_bios_init(void)
struct facs_descriptor_rev1 *facs;
struct multiple_apic_table *madt;
uint8_t *dsdt, *ssdt;
@@ -113,7 +113,7 @@ Index: bochs-2.3.7/bios/rombios32.c
uint32_t base_addr, rsdt_addr, fadt_addr, addr, facs_addr, dsdt_addr, ssdt_addr;
uint32_t acpi_tables_size, madt_addr, madt_size;
int i;
-@@ -1384,10 +1429,21 @@
+@@ -1442,10 +1487,21 @@ void acpi_bios_init(void)
madt_addr = addr;
madt_size = sizeof(*madt) +
sizeof(struct madt_processor_apic) * smp_cpus +
@@ -135,7 +135,7 @@ Index: bochs-2.3.7/bios/rombios32.c
acpi_tables_size = addr - base_addr;
BX_INFO("ACPI tables: RSDP addr=0x%08lx ACPI DATA addr=0x%08lx size=0x%x\n",
-@@ -1410,6 +1466,9 @@
+@@ -1468,6 +1524,9 @@ void acpi_bios_init(void)
rsdt->table_offset_entry[0] = cpu_to_le32(fadt_addr);
rsdt->table_offset_entry[1] = cpu_to_le32(madt_addr);
rsdt->table_offset_entry[2] = cpu_to_le32(ssdt_addr);
@@ -145,7 +145,7 @@ Index: bochs-2.3.7/bios/rombios32.c
acpi_build_table_header((struct acpi_table_header *)rsdt,
"RSDT", sizeof(*rsdt), 1);
-@@ -1448,6 +1507,9 @@
+@@ -1507,6 +1566,9 @@ void acpi_bios_init(void)
{
struct madt_processor_apic *apic;
struct madt_io_apic *io_apic;
@@ -155,7 +155,7 @@ Index: bochs-2.3.7/bios/rombios32.c
memset(madt, 0, madt_size);
madt->local_apic_address = cpu_to_le32(0xfee00000);
-@@ -1467,10 +1529,34 @@
+@@ -1526,10 +1588,34 @@ void acpi_bios_init(void)
io_apic->io_apic_id = smp_cpus;
io_apic->address = cpu_to_le32(0xfec00000);
io_apic->interrupt = cpu_to_le32(0);
[-- Attachment #2: 0005_hpet.patch --]
[-- Type: text/plain, Size: 5824 bytes --]
From: Beth Kon <eak@us.ibm.com>
BOCHS BIOS changes to support HPET in QEMU.
Signed-off-by Beth Kon <eak@us.ibm.com>
diff --git a/bios/acpi-dsdt.dsl b/bios/acpi-dsdt.dsl
index 5fc3636..a5bc8b3 100644
--- a/bios/acpi-dsdt.dsl
+++ b/bios/acpi-dsdt.dsl
@@ -130,6 +130,26 @@ DefinitionBlock (
,, , AddressRangeMemory, TypeStatic)
})
}
+#ifdef BX_QEMU
+ Device(HPET) {
+ Name(_HID, EISAID("PNP0103"))
+ Name(_UID, 0)
+ Method (_STA, 0, NotSerialized) {
+ Return(0x0F)
+ }
+ Name(_CRS, ResourceTemplate() {
+ DWordMemory(
+ ResourceConsumer, PosDecode, MinFixed, MaxFixed,
+ NonCacheable, ReadWrite,
+ 0x00000000,
+ 0xFED00000,
+ 0xFED003FF,
+ 0x00000000,
+ 0x00000400 /* 1K memory: FED00000 - FED003FF */
+ )
+ })
+ }
+#endif
}
Scope(\_SB.PCI0) {
diff --git a/bios/rombios32.c b/bios/rombios32.c
index de2ffed..f81b269 100644
--- a/bios/rombios32.c
+++ b/bios/rombios32.c
@@ -1141,7 +1141,11 @@ struct rsdp_descriptor /* Root System Descriptor Pointer */
struct rsdt_descriptor_rev1
{
ACPI_TABLE_HEADER_DEF /* ACPI common table header */
+#ifdef BX_QEMU
+ uint32_t table_offset_entry [4]; /* Array of pointers to other */
+#else
uint32_t table_offset_entry [3]; /* Array of pointers to other */
+#endif
/* ACPI tables */
};
@@ -1281,6 +1285,32 @@ struct madt_processor_apic
#endif
};
+#ifdef BX_QEMU
+/*
+ * * ACPI 2.0 Generic Address Space definition.
+ * */
+struct acpi_20_generic_address {
+ uint8_t address_space_id;
+ uint8_t register_bit_width;
+ uint8_t register_bit_offset;
+ uint8_t reserved;
+ uint64_t address;
+};
+
+/*
+ * * HPET Description Table
+ * */
+struct acpi_20_hpet {
+ ACPI_TABLE_HEADER_DEF /* ACPI common table header */
+ uint32_t timer_block_id;
+ struct acpi_20_generic_address addr;
+ uint8_t hpet_number;
+ uint16_t min_tick;
+ uint8_t page_protect;
+};
+#define ACPI_HPET_ADDRESS 0xFED00000UL
+#endif
+
struct madt_io_apic
{
APIC_HEADER_DEF
@@ -1295,6 +1325,17 @@ struct madt_io_apic
#pragma pack()
+#ifdef BX_QEMU
+struct madt_int_override
+{
+ APIC_HEADER_DEF
+ uint8_t bus; /* Identifies ISA Bus */
+ uint8_t source; /* Bus-relative interrupt source */
+ uint32_t gsi; /* GSI that source will signal */
+ uint16_t flags; /* MPS INTI flags */
+};
+#endif
+
#include "acpi-dsdt.hex"
static inline uint16_t cpu_to_le16(uint16_t x)
@@ -1400,6 +1441,10 @@ void acpi_bios_init(void)
struct facs_descriptor_rev1 *facs;
struct multiple_apic_table *madt;
uint8_t *dsdt, *ssdt;
+#ifdef BX_QEMU
+ struct acpi_20_hpet *hpet;
+ uint32_t hpet_addr;
+#endif
uint32_t base_addr, rsdt_addr, fadt_addr, addr, facs_addr, dsdt_addr, ssdt_addr;
uint32_t acpi_tables_size, madt_addr, madt_size;
int i;
@@ -1442,10 +1487,21 @@ void acpi_bios_init(void)
madt_addr = addr;
madt_size = sizeof(*madt) +
sizeof(struct madt_processor_apic) * smp_cpus +
+#ifdef BX_QEMU
+ sizeof(struct madt_io_apic) + sizeof(struct madt_int_override);
+#else
sizeof(struct madt_io_apic);
+#endif
madt = (void *)(addr);
addr += madt_size;
+#ifdef BX_QEMU
+ addr = (addr + 7) & ~7;
+ hpet_addr = addr;
+ hpet = (void *)(addr);
+ addr += sizeof(*hpet);
+#endif
+
acpi_tables_size = addr - base_addr;
BX_INFO("ACPI tables: RSDP addr=0x%08lx ACPI DATA addr=0x%08lx size=0x%x\n",
@@ -1468,6 +1524,9 @@ void acpi_bios_init(void)
rsdt->table_offset_entry[0] = cpu_to_le32(fadt_addr);
rsdt->table_offset_entry[1] = cpu_to_le32(madt_addr);
rsdt->table_offset_entry[2] = cpu_to_le32(ssdt_addr);
+#ifdef BX_QEMU
+ rsdt->table_offset_entry[3] = cpu_to_le32(hpet_addr);
+#endif
acpi_build_table_header((struct acpi_table_header *)rsdt,
"RSDT", sizeof(*rsdt), 1);
@@ -1507,6 +1566,9 @@ void acpi_bios_init(void)
{
struct madt_processor_apic *apic;
struct madt_io_apic *io_apic;
+#ifdef BX_QEMU
+ struct madt_int_override *int_override;
+#endif
memset(madt, 0, madt_size);
madt->local_apic_address = cpu_to_le32(0xfee00000);
@@ -1526,10 +1588,34 @@ void acpi_bios_init(void)
io_apic->io_apic_id = smp_cpus;
io_apic->address = cpu_to_le32(0xfec00000);
io_apic->interrupt = cpu_to_le32(0);
+#ifdef BX_QEMU
+ io_apic++;
+
+ int_override = (void *)io_apic;
+ int_override->type = APIC_XRUPT_OVERRIDE;
+ int_override->length = sizeof(*int_override);
+ int_override->bus = cpu_to_le32(0);
+ int_override->source = cpu_to_le32(0);
+ int_override->gsi = cpu_to_le32(2);
+ int_override->flags = cpu_to_le32(0);
+#endif
acpi_build_table_header((struct acpi_table_header *)madt,
"APIC", madt_size, 1);
}
+
+#ifdef BX_QEMU
+ /* HPET */
+ memset(hpet, 0, sizeof(*hpet));
+ /* Note timer_block_id value must be kept in sync with value advertised by
+ * emulated hpet
+ */
+ hpet->timer_block_id = cpu_to_le32(0x8086a201);
+ hpet->addr.address = cpu_to_le32(ACPI_HPET_ADDRESS);
+ acpi_build_table_header((struct acpi_table_header *)hpet,
+ "HPET", sizeof(*hpet), 1);
+#endif
+
}
/* SMBIOS entry point -- must be written to a 16-bit aligned address
reply other threads:[~2008-12-21 23:38 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
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=494ED35E.90304@amd.com \
--to=andre.przywara@amd.com \
--cc=anthony@codemonkey.ws \
--cc=qemu-devel@nongnu.org \
/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.