All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Michael S. Tsirkin" <mst@redhat.com>
To: qemu-devel@nongnu.org
Cc: Peter Maydell <peter.maydell@linaro.org>,
	Andrew Jones <drjones@redhat.com>,
	Samuel Ortiz <sameo@linux.intel.com>,
	Shannon Zhao <shannon.zhaosl@gmail.com>,
	qemu-arm@nongnu.org, Igor Mammedov <imammedo@redhat.com>
Subject: [Qemu-arm] [PULL 28/31] hw: arm: Support both legacy and current RSDP build
Date: Mon, 17 Dec 2018 23:18:35 -0500	[thread overview]
Message-ID: <20181218041625.24969-29-mst@redhat.com> (raw)
In-Reply-To: <20181218041625.24969-1-mst@redhat.com>

From: Samuel Ortiz <sameo@linux.intel.com>

We add the ability to build legacy or current RSDP tables, based on the
AcpiRsdpData revision field passed to build_rsdp().
Although arm/virt only uses RSDP v2, adding that capability to
build_rsdp will allow us to share the RSDP build code between ARM and x86.

Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
Reviewed-by: Andrew Jones <drjones@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
 hw/arm/virt-acpi-build.c | 38 +++++++++++++++++++++++++++++++++-----
 1 file changed, 33 insertions(+), 5 deletions(-)

diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c
index 4a6b53fbfc..05f6654371 100644
--- a/hw/arm/virt-acpi-build.c
+++ b/hw/arm/virt-acpi-build.c
@@ -372,6 +372,20 @@ build_rsdp(GArray *tbl, BIOSLinker *linker, AcpiRsdpData *rsdp_data)
 {
     int tbl_off = tbl->len; /* Table offset in the RSDP file */
 
+    switch (rsdp_data->revision) {
+    case 0:
+        /* With ACPI 1.0, we must have an RSDT pointer */
+        g_assert(rsdp_data->rsdt_tbl_offset);
+        break;
+    case 2:
+        /* With ACPI 2.0+, we must have an XSDT pointer */
+        g_assert(rsdp_data->xsdt_tbl_offset);
+        break;
+    default:
+        /* Only revisions 0 (ACPI 1.0) and 2 (ACPI 2.0+) are valid for RSDP */
+        g_assert_not_reached();
+    }
+
     bios_linker_loader_alloc(linker, ACPI_BUILD_RSDP_FILE, tbl, 16,
                              true /* fseg memory */);
 
@@ -380,10 +394,29 @@ build_rsdp(GArray *tbl, BIOSLinker *linker, AcpiRsdpData *rsdp_data)
     g_array_append_vals(tbl, rsdp_data->oem_id, 6); /* OEMID */
     build_append_int_noprefix(tbl, rsdp_data->revision, 1); /* Revision */
     build_append_int_noprefix(tbl, 0, 4); /* RsdtAddress */
+    if (rsdp_data->rsdt_tbl_offset) {
+        /* RSDT address to be filled by guest linker */
+        bios_linker_loader_add_pointer(linker, ACPI_BUILD_RSDP_FILE,
+                                       tbl_off + 16, 4,
+                                       ACPI_BUILD_TABLE_FILE,
+                                       *rsdp_data->rsdt_tbl_offset);
+    }
+
+    /* Checksum to be filled by guest linker */
+    bios_linker_loader_add_checksum(linker, ACPI_BUILD_RSDP_FILE,
+                                    tbl_off, 20, /* ACPI rev 1.0 RSDP size */
+                                    8);
+
+    if (rsdp_data->revision == 0) {
+        /* ACPI 1.0 RSDP, we're done */
+        return;
+    }
+
     build_append_int_noprefix(tbl, 36, 4); /* Length */
 
     /* XSDT address to be filled by guest linker */
     build_append_int_noprefix(tbl, 0, 8); /* XsdtAddress */
+    /* We already validated our xsdt pointer */
     bios_linker_loader_add_pointer(linker, ACPI_BUILD_RSDP_FILE,
                                    tbl_off + 24, 8,
                                    ACPI_BUILD_TABLE_FILE,
@@ -392,11 +425,6 @@ build_rsdp(GArray *tbl, BIOSLinker *linker, AcpiRsdpData *rsdp_data)
     build_append_int_noprefix(tbl, 0, 1); /* Extended Checksum */
     build_append_int_noprefix(tbl, 0, 3); /* Reserved */
 
-    /* Checksum to be filled by guest linker */
-    bios_linker_loader_add_checksum(linker, ACPI_BUILD_RSDP_FILE,
-                                    tbl_off, 20, /* ACPI rev 1.0 RSDP size */
-                                    8);
-
     /* Extended checksum to be filled by Guest linker */
     bios_linker_loader_add_checksum(linker, ACPI_BUILD_RSDP_FILE,
                                     tbl_off, 36, /* ACPI rev 2.0 RSDP size */
-- 
MST


WARNING: multiple messages have this Message-ID (diff)
From: "Michael S. Tsirkin" <mst@redhat.com>
To: qemu-devel@nongnu.org
Cc: Peter Maydell <peter.maydell@linaro.org>,
	Samuel Ortiz <sameo@linux.intel.com>,
	Igor Mammedov <imammedo@redhat.com>,
	Andrew Jones <drjones@redhat.com>,
	Shannon Zhao <shannon.zhaosl@gmail.com>,
	qemu-arm@nongnu.org
Subject: [Qemu-devel] [PULL 28/31] hw: arm: Support both legacy and current RSDP build
Date: Mon, 17 Dec 2018 23:18:35 -0500	[thread overview]
Message-ID: <20181218041625.24969-29-mst@redhat.com> (raw)
In-Reply-To: <20181218041625.24969-1-mst@redhat.com>

From: Samuel Ortiz <sameo@linux.intel.com>

We add the ability to build legacy or current RSDP tables, based on the
AcpiRsdpData revision field passed to build_rsdp().
Although arm/virt only uses RSDP v2, adding that capability to
build_rsdp will allow us to share the RSDP build code between ARM and x86.

Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
Reviewed-by: Andrew Jones <drjones@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
 hw/arm/virt-acpi-build.c | 38 +++++++++++++++++++++++++++++++++-----
 1 file changed, 33 insertions(+), 5 deletions(-)

diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c
index 4a6b53fbfc..05f6654371 100644
--- a/hw/arm/virt-acpi-build.c
+++ b/hw/arm/virt-acpi-build.c
@@ -372,6 +372,20 @@ build_rsdp(GArray *tbl, BIOSLinker *linker, AcpiRsdpData *rsdp_data)
 {
     int tbl_off = tbl->len; /* Table offset in the RSDP file */
 
+    switch (rsdp_data->revision) {
+    case 0:
+        /* With ACPI 1.0, we must have an RSDT pointer */
+        g_assert(rsdp_data->rsdt_tbl_offset);
+        break;
+    case 2:
+        /* With ACPI 2.0+, we must have an XSDT pointer */
+        g_assert(rsdp_data->xsdt_tbl_offset);
+        break;
+    default:
+        /* Only revisions 0 (ACPI 1.0) and 2 (ACPI 2.0+) are valid for RSDP */
+        g_assert_not_reached();
+    }
+
     bios_linker_loader_alloc(linker, ACPI_BUILD_RSDP_FILE, tbl, 16,
                              true /* fseg memory */);
 
@@ -380,10 +394,29 @@ build_rsdp(GArray *tbl, BIOSLinker *linker, AcpiRsdpData *rsdp_data)
     g_array_append_vals(tbl, rsdp_data->oem_id, 6); /* OEMID */
     build_append_int_noprefix(tbl, rsdp_data->revision, 1); /* Revision */
     build_append_int_noprefix(tbl, 0, 4); /* RsdtAddress */
+    if (rsdp_data->rsdt_tbl_offset) {
+        /* RSDT address to be filled by guest linker */
+        bios_linker_loader_add_pointer(linker, ACPI_BUILD_RSDP_FILE,
+                                       tbl_off + 16, 4,
+                                       ACPI_BUILD_TABLE_FILE,
+                                       *rsdp_data->rsdt_tbl_offset);
+    }
+
+    /* Checksum to be filled by guest linker */
+    bios_linker_loader_add_checksum(linker, ACPI_BUILD_RSDP_FILE,
+                                    tbl_off, 20, /* ACPI rev 1.0 RSDP size */
+                                    8);
+
+    if (rsdp_data->revision == 0) {
+        /* ACPI 1.0 RSDP, we're done */
+        return;
+    }
+
     build_append_int_noprefix(tbl, 36, 4); /* Length */
 
     /* XSDT address to be filled by guest linker */
     build_append_int_noprefix(tbl, 0, 8); /* XsdtAddress */
+    /* We already validated our xsdt pointer */
     bios_linker_loader_add_pointer(linker, ACPI_BUILD_RSDP_FILE,
                                    tbl_off + 24, 8,
                                    ACPI_BUILD_TABLE_FILE,
@@ -392,11 +425,6 @@ build_rsdp(GArray *tbl, BIOSLinker *linker, AcpiRsdpData *rsdp_data)
     build_append_int_noprefix(tbl, 0, 1); /* Extended Checksum */
     build_append_int_noprefix(tbl, 0, 3); /* Reserved */
 
-    /* Checksum to be filled by guest linker */
-    bios_linker_loader_add_checksum(linker, ACPI_BUILD_RSDP_FILE,
-                                    tbl_off, 20, /* ACPI rev 1.0 RSDP size */
-                                    8);
-
     /* Extended checksum to be filled by Guest linker */
     bios_linker_loader_add_checksum(linker, ACPI_BUILD_RSDP_FILE,
                                     tbl_off, 36, /* ACPI rev 2.0 RSDP size */
-- 
MST

  parent reply	other threads:[~2018-12-18  4:32 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-12-18  4:16 [Qemu-devel] [PULL 00/31] pci, pc, virtio: fixes, features Michael S. Tsirkin
2018-12-18  4:16 ` [Qemu-devel] [PULL 01/31] pcie: set link state inactive/active after hot unplug/plug Michael S. Tsirkin
2018-12-18  4:16 ` [Qemu-devel] [PULL 02/31] pc:piix4: Update smbus I/O space after a migration Michael S. Tsirkin
2018-12-18  4:16 ` [Qemu-devel] [PULL 03/31] virtio: Helper for registering virtio device types Michael S. Tsirkin
2018-12-18  4:16 ` [Qemu-devel] [PULL 04/31] virtio: Provide version-specific variants of virtio PCI devices Michael S. Tsirkin
2018-12-18  4:16 ` [Qemu-devel] [PULL 05/31] tests: Remove unused include Michael S. Tsirkin
2018-12-18  4:17 ` [Qemu-devel] [PULL 06/31] hw/smbios: Restrict access to "hw/smbios/ipmi.h" Michael S. Tsirkin
2018-12-18  4:17 ` [Qemu-devel] [PULL 07/31] hw/smbios: Remove "smbios_ipmi.h" Michael S. Tsirkin
2018-12-18  4:17 ` [Qemu-arm] [PULL 08/31] hw/smbios: Move to the hw/firmware/ subdirectory Michael S. Tsirkin
2018-12-18  4:17   ` [Qemu-devel] " Michael S. Tsirkin
2018-12-18  4:17 ` [Qemu-devel] [PULL 09/31] hw/pci-bridge: Fix invalid free() Michael S. Tsirkin
2018-12-18  4:17 ` [Qemu-devel] [PULL 10/31] pcie: Create enums for link speed and width Michael S. Tsirkin
2018-12-18  4:17 ` [Qemu-devel] [PULL 11/31] pci: Sync PCIe downstream port LNKSTA on read Michael S. Tsirkin
2018-12-18  4:17 ` [Qemu-devel] [PULL 12/31] qapi: Define PCIe link speed and width properties Michael S. Tsirkin
2018-12-18  4:17 ` [Qemu-devel] [PULL 13/31] pcie: Add link speed and width fields to PCIESlot Michael S. Tsirkin
2018-12-18  4:17 ` [Qemu-devel] [PULL 14/31] pcie: Fill PCIESlot link fields to support higher speeds and widths Michael S. Tsirkin
2018-12-18  4:17 ` [Qemu-devel] [PULL 15/31] pcie: Allow generic PCIe root port to specify link speed and width Michael S. Tsirkin
2018-12-18  4:17 ` [Qemu-devel] [PULL 16/31] vfio/pci: Remove PCIe Link Status emulation Michael S. Tsirkin
2018-12-18  4:17 ` [Qemu-devel] [PULL 17/31] pcie: Fast PCIe root ports for new machines Michael S. Tsirkin
2018-12-18  4:18 ` [Qemu-devel] [PULL 18/31] intel_iommu: dump correct iova when failed Michael S. Tsirkin
2018-12-18  4:18 ` [Qemu-devel] [PULL 19/31] intel_iommu: convert invalid traces into error reports Michael S. Tsirkin
2018-12-18  4:18 ` [Qemu-devel] [PULL 20/31] intel_iommu: dma read/write draining support Michael S. Tsirkin
2018-12-18  4:18 ` [Qemu-devel] [PULL 21/31] intel_iommu: remove "x-" prefix for "aw-bits" Michael S. Tsirkin
2018-12-18  4:18 ` [Qemu-devel] [PULL 22/31] intel_iommu: turn on IR by default Michael S. Tsirkin
2018-12-18  4:18 ` [Qemu-arm] [PULL 23/31] hw: acpi: The RSDP build API can return void Michael S. Tsirkin
2018-12-18  4:18   ` [Qemu-devel] " Michael S. Tsirkin
2018-12-18  4:18 ` [Qemu-arm] [PULL 24/31] hw: arm: acpi: Fix incorrect checksums in RSDP Michael S. Tsirkin
2018-12-18  4:18   ` [Qemu-devel] " Michael S. Tsirkin
2018-12-18  4:18 ` [Qemu-devel] [PULL 25/31] hw: i386: Use correct RSDT length for checksum Michael S. Tsirkin
2018-12-18  4:18 ` [Qemu-devel] [PULL 26/31] hw: arm: Carry RSDP specific data through AcpiRsdpData Michael S. Tsirkin
2018-12-18  4:18   ` Michael S. Tsirkin
2018-12-18  4:18 ` [Qemu-devel] [PULL 27/31] hw: arm: Convert the RSDP build to the buid_append_foo() API Michael S. Tsirkin
2018-12-18  4:18   ` Michael S. Tsirkin
2018-12-18  4:18 ` Michael S. Tsirkin [this message]
2018-12-18  4:18   ` [Qemu-devel] [PULL 28/31] hw: arm: Support both legacy and current RSDP build Michael S. Tsirkin
2018-12-18  4:18 ` [Qemu-arm] [PULL 29/31] hw: acpi: Export and share the ARM " Michael S. Tsirkin
2018-12-18  4:18   ` [Qemu-devel] " Michael S. Tsirkin
2018-12-18  4:18 ` [Qemu-devel] [PULL 30/31] hw: acpi: Remove AcpiRsdpDescriptor and fix tests Michael S. Tsirkin
2018-12-18  4:18 ` [Qemu-devel] [PULL 31/31] hw/i386: Remove deprecated machines pc-0.10 and pc-0.11 Michael S. Tsirkin
2018-12-18  4:37 ` [Qemu-devel] [PULL 00/31] pci, pc, virtio: fixes, features Michael S. Tsirkin
2018-12-24 12:34 ` no-reply

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=20181218041625.24969-29-mst@redhat.com \
    --to=mst@redhat.com \
    --cc=drjones@redhat.com \
    --cc=imammedo@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-arm@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=sameo@linux.intel.com \
    --cc=shannon.zhaosl@gmail.com \
    /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.