[PATCH v1] x86: acpi: Refactor XSDT handling in acpi_add_table()

Simon Glass sjg at chromium.org
Fri Feb 28 00:40:41 CET 2020


Hi Andy,

On Thu, 27 Feb 2020 at 06:00, Andy Shevchenko
<andriy.shevchenko at linux.intel.com> wrote:
>
> There is no need to have an assignment to NULL for XSDT pointer.
> Therefore, no need to assign it when rsdt_address is not set.
> Because of above changes we may decrease indentation level as well.
>
> While here, drop unnecessary parentheses.
>
> Signed-off-by: Andy Shevchenko <andriy.shevchenko at linux.intel.com>
> ---
>  arch/x86/lib/acpi_table.c | 37 +++++++++++++++++++------------------
>  1 file changed, 19 insertions(+), 18 deletions(-)

Could you take a look at the ACPI series?

It was sent out about a month ago and has a refactor to this function.

u-boot-dm/coral-working

Regards,
Simon


>
> diff --git a/arch/x86/lib/acpi_table.c b/arch/x86/lib/acpi_table.c
> index efc4edf801..421456fc2e 100644
> --- a/arch/x86/lib/acpi_table.c
> +++ b/arch/x86/lib/acpi_table.c
> @@ -109,14 +109,11 @@ static void acpi_add_table(struct acpi_rsdp *rsdp, void *table)
>  {
>         int i, entries_num;
>         struct acpi_rsdt *rsdt;
> -       struct acpi_xsdt *xsdt = NULL;
> +       struct acpi_xsdt *xsdt;
>
>         /* The RSDT is mandatory while the XSDT is not */
>         rsdt = (struct acpi_rsdt *)rsdp->rsdt_address;
>
> -       if (rsdp->xsdt_address)
> -               xsdt = (struct acpi_xsdt *)((u32)rsdp->xsdt_address);
> -
>         /* This should always be MAX_ACPI_TABLES */
>         entries_num = ARRAY_SIZE(rsdt->entry);
>
> @@ -135,30 +132,34 @@ static void acpi_add_table(struct acpi_rsdp *rsdp, void *table)
>
>         /* Fix RSDT length or the kernel will assume invalid entries */
>         rsdt->header.length = sizeof(struct acpi_table_header) +
> -                               (sizeof(u32) * (i + 1));
> +                               sizeof(u32) * (i + 1);
>
>         /* Re-calculate checksum */
>         rsdt->header.checksum = 0;
>         rsdt->header.checksum = table_compute_checksum((u8 *)rsdt,
>                         rsdt->header.length);
>
> +       /* The RSDT is mandatory while the XSDT is not */
> +       if (!rsdp->xsdt_address)
> +               return;
> +
>         /*
>          * And now the same thing for the XSDT. We use the same index as for
>          * now we want the XSDT and RSDT to always be in sync in U-Boot
>          */
> -       if (xsdt) {
> -               /* Add table to the XSDT */
> -               xsdt->entry[i] = (u64)(u32)table;
> -
> -               /* Fix XSDT length */
> -               xsdt->header.length = sizeof(struct acpi_table_header) +
> -                       (sizeof(u64) * (i + 1));
> -
> -               /* Re-calculate checksum */
> -               xsdt->header.checksum = 0;
> -               xsdt->header.checksum = table_compute_checksum((u8 *)xsdt,
> -                               xsdt->header.length);
> -       }
> +       xsdt = (struct acpi_xsdt *)((u32)rsdp->xsdt_address);
> +
> +       /* Add table to the XSDT */
> +       xsdt->entry[i] = (u64)(u32)table;
> +
> +       /* Fix XSDT length */
> +       xsdt->header.length = sizeof(struct acpi_table_header) +
> +                               sizeof(u64) * (i + 1);
> +
> +       /* Re-calculate checksum */
> +       xsdt->header.checksum = 0;
> +       xsdt->header.checksum = table_compute_checksum((u8 *)xsdt,
> +                       xsdt->header.length);
>  }
>
>  static void acpi_create_facs(struct acpi_facs *facs)
> --
> 2.25.0
>


More information about the U-Boot mailing list