diff mbox

[3/5] ACPI tables: when bodging up an RSDP, do the right thing for the arch

Message ID 1453425260-21576-4-git-send-email-al.stone@linaro.org
State Superseded
Headers show

Commit Message

Al Stone Jan. 22, 2016, 1:14 a.m. UTC
If it is necessary to create an RSDP table because there is none that
can be read, add in only the RSDT or XSDT pointers as needed.  For x86,
it can be either, but for arm64 it should only be the XSDT address that
is used in the RSDP.

Signed-off-by: Al Stone <al.stone@linaro.org>

---
 src/lib/src/fwts_acpi_tables.c | 19 +++++++++++--------
 1 file changed, 11 insertions(+), 8 deletions(-)

-- 
2.5.0
diff mbox

Patch

diff --git a/src/lib/src/fwts_acpi_tables.c b/src/lib/src/fwts_acpi_tables.c
index 0191b6b..83bd1dd 100644
--- a/src/lib/src/fwts_acpi_tables.c
+++ b/src/lib/src/fwts_acpi_tables.c
@@ -1101,14 +1101,17 @@  static int fwts_acpi_load_tables_fixup(fwts_framework *fw)
 	}
 
 	/* Now we have all the tables, final fix up is required */
-	if (rsdp->rsdt_address != rsdt_fake_addr) {
-		rsdp->rsdt_address = rsdt_fake_addr;
-		redo_rsdp_checksum = true;
-	}
-	if ((rsdp->revision > 0) && (rsdp->length >= 36) &&
-	    (rsdp->xsdt_address != xsdt_fake_addr)) {
-		rsdp->xsdt_address = xsdt_fake_addr;
-		redo_rsdp_checksum = true;
+	if (fw->target_arch == FWTS_ARCH_ARM64) {
+		if ((rsdp->revision > 0) && (rsdp->length >= 36) &&
+		    (rsdp->xsdt_address != xsdt_fake_addr)) {
+			rsdp->xsdt_address = xsdt_fake_addr;
+			redo_rsdp_checksum = true;
+		}
+	} else {
+		if (rsdp->rsdt_address != rsdt_fake_addr) {
+			rsdp->rsdt_address = rsdt_fake_addr;
+			redo_rsdp_checksum = true;
+		}
 	}
 	/* And update checksum if we've updated the rsdp */
 	if (redo_rsdp_checksum) {