[PATCH 3/5] ACPI tables: when bodging up an RSDP, do the right thing for the arch
Alex Hung
alex.hung at canonical.com
Wed Jan 27 03:01:55 UTC 2016
On 2016-01-22 09:14 AM, Al Stone wrote:
> 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 at linaro.org>
> ---
> src/lib/src/fwts_acpi_tables.c | 19 +++++++++++--------
> 1 file changed, 11 insertions(+), 8 deletions(-)
>
> 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;
> + }
Since non-ARM (ex. x86) can have either RSDP or XSDP, should the below
statements be included here as well?
if ((rsdp->revision > 0) && (rsdp->length >= 36) &&
(rsdp->xsdt_address != xsdt_fake_addr)) {
rsdp->xsdt_address = xsdt_fake_addr;
redo_rsdp_checksum = true;
}
> }
> /* And update checksum if we've updated the rsdp */
> if (redo_rsdp_checksum) {
>
--
Cheers,
Alex Hung
More information about the fwts-devel
mailing list