[PATCH 2/5] acpi: simplify updating header checksum

Ilias Apalodimas ilias.apalodimas at linaro.org
Wed Mar 26 08:30:18 CET 2025


On Sat, 22 Mar 2025 at 01:21, Heinrich Schuchardt
<heinrich.schuchardt at canonical.com> wrote:
>
> Use acpi_update_checksum() for updating ACPI table header checksum.
>
> Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt at canonical.com>

Reviewed-by: Ilias Apalodimas <ilias.apalodimas at linaro.org>

> ---
>  lib/acpi/acpi_table.c | 18 +++++++-----------
>  lib/acpi/base.c       |  6 ++----
>  lib/acpi/csrt.c       |  2 +-
>  lib/acpi/mcfg.c       |  2 +-
>  lib/acpi/ssdt.c       |  2 +-
>  5 files changed, 12 insertions(+), 18 deletions(-)
>
> diff --git a/lib/acpi/acpi_table.c b/lib/acpi/acpi_table.c
> index c0ed24984af..b5495d48a46 100644
> --- a/lib/acpi/acpi_table.c
> +++ b/lib/acpi/acpi_table.c
> @@ -195,9 +195,7 @@ int acpi_add_table(struct acpi_ctx *ctx, void *table)
>                                         (sizeof(u32) * (i + 1));
>
>                 /* Re-calculate checksum */
> -               rsdt->header.checksum = 0;
> -               rsdt->header.checksum = table_compute_checksum((u8 *)rsdt,
> -                                                              rsdt->header.length);
> +               acpi_update_checksum(&rsdt->header);
>         }
>
>         if (ctx->xsdt) {
> @@ -228,9 +226,7 @@ int acpi_add_table(struct acpi_ctx *ctx, void *table)
>                                         (sizeof(u64) * (i + 1));
>
>                 /* Re-calculate checksum */
> -               xsdt->header.checksum = 0;
> -               xsdt->header.checksum = table_compute_checksum((u8 *)xsdt,
> -                                                              xsdt->header.length);
> +               acpi_update_checksum(&xsdt->header);
>         }
>
>         return 0;
> @@ -268,7 +264,7 @@ int acpi_write_fadt(struct acpi_ctx *ctx, const struct acpi_writer *entry)
>
>         acpi_fill_fadt(fadt);
>
> -       header->checksum = table_compute_checksum(fadt, header->length);
> +       acpi_update_checksum(header);
>
>         return acpi_add_fadt(ctx, fadt);
>  }
> @@ -303,7 +299,7 @@ int acpi_write_madt(struct acpi_ctx *ctx, const struct acpi_writer *entry)
>         if (IS_ENABLED(CONFIG_ACPI_PARKING_PROTOCOL))
>                 acpi_write_park(madt);
>
> -       header->checksum = table_compute_checksum((void *)madt, header->length);
> +       acpi_update_checksum(header);
>         acpi_add_table(ctx, madt);
>         ctx->current = (void *)madt + madt->header.length;
>
> @@ -374,7 +370,7 @@ void acpi_create_dbg2(struct acpi_dbg2_header *dbg2,
>         /* Update structure lengths and checksum */
>         device->length = current - (uintptr_t)device;
>         header->length = current - (uintptr_t)dbg2;
> -       header->checksum = table_compute_checksum(dbg2, header->length);
> +       acpi_update_checksum(header);
>  }
>
>  int acpi_write_dbg2_pci_uart(struct acpi_ctx *ctx, struct udevice *dev,
> @@ -549,7 +545,7 @@ static int acpi_write_spcr(struct acpi_ctx *ctx, const struct acpi_writer *entry
>                 spcr->baud_rate = 0;
>
>         /* Fix checksum */
> -       header->checksum = table_compute_checksum((void *)spcr, header->length);
> +       acpi_update_checksum(header);
>
>         acpi_add_table(ctx, spcr);
>         acpi_inc(ctx, spcr->header.length);
> @@ -759,7 +755,7 @@ static int acpi_write_iort(struct acpi_ctx *ctx, const struct acpi_writer *entry
>
>         /* (Re)calculate length and checksum */
>         iort->header.length = ctx->current - (void *)iort;
> -       iort->header.checksum = table_compute_checksum((void *)iort, iort->header.length);
> +       acpi_update_checksum(&iort->header);
>         log_debug("IORT at %p, length %x\n", iort, iort->header.length);
>
>         /* Drop the table if it is empty */
> diff --git a/lib/acpi/base.c b/lib/acpi/base.c
> index 8b6af2bc43a..5c755b14c16 100644
> --- a/lib/acpi/base.c
> +++ b/lib/acpi/base.c
> @@ -50,8 +50,7 @@ static void acpi_write_rsdt(struct acpi_rsdt *rsdt)
>         /* Entries are filled in later, we come with an empty set */
>
>         /* Fix checksum */
> -       header->checksum = table_compute_checksum(rsdt,
> -                                                 sizeof(struct acpi_rsdt));
> +       acpi_update_checksum(header);
>  }
>
>  static void acpi_write_xsdt(struct acpi_xsdt *xsdt)
> @@ -66,8 +65,7 @@ static void acpi_write_xsdt(struct acpi_xsdt *xsdt)
>         /* Entries are filled in later, we come with an empty set */
>
>         /* Fix checksum */
> -       header->checksum = table_compute_checksum(xsdt,
> -                                                 sizeof(struct acpi_xsdt));
> +       acpi_update_checksum(header);
>  }
>
>  static int acpi_write_base(struct acpi_ctx *ctx,
> diff --git a/lib/acpi/csrt.c b/lib/acpi/csrt.c
> index 00927e53406..b863c644c07 100644
> --- a/lib/acpi/csrt.c
> +++ b/lib/acpi/csrt.c
> @@ -40,7 +40,7 @@ int acpi_write_csrt(struct acpi_ctx *ctx, const struct acpi_writer *entry)
>
>         /* (Re)calculate length and checksum */
>         header->length = (ulong)ctx->current - (ulong)csrt;
> -       header->checksum = table_compute_checksum(csrt, header->length);
> +       acpi_update_checksum(header);
>
>         acpi_add_table(ctx, csrt);
>
> diff --git a/lib/acpi/mcfg.c b/lib/acpi/mcfg.c
> index 8b8a5bfafae..e21fe7ce123 100644
> --- a/lib/acpi/mcfg.c
> +++ b/lib/acpi/mcfg.c
> @@ -57,7 +57,7 @@ int acpi_write_mcfg(struct acpi_ctx *ctx, const struct acpi_writer *entry)
>
>         /* (Re)calculate length and checksum */
>         header->length = (ulong)ctx->current - (ulong)mcfg;
> -       header->checksum = table_compute_checksum(mcfg, header->length);
> +       acpi_update_checksum(header);
>
>         acpi_add_table(ctx, mcfg);
>
> diff --git a/lib/acpi/ssdt.c b/lib/acpi/ssdt.c
> index df1d739d117..41e2d3c2f6c 100644
> --- a/lib/acpi/ssdt.c
> +++ b/lib/acpi/ssdt.c
> @@ -35,7 +35,7 @@ int acpi_write_ssdt(struct acpi_ctx *ctx, const struct acpi_writer *entry)
>
>         /* (Re)calculate length and checksum */
>         ssdt->length = ctx->current - (void *)ssdt;
> -       ssdt->checksum = table_compute_checksum((void *)ssdt, ssdt->length);
> +       acpi_update_checksum(ssdt);
>         log_debug("SSDT at %p, length %x\n", ssdt, ssdt->length);
>
>         /* Drop the table if it is empty */
> --
> 2.48.1
>


More information about the U-Boot mailing list