
From: Simon Glass <sjg@chromium.org> Create a function for this checksumming, since it is not trivial. This will allow the code to be shared with tests. Signed-off-by: Simon Glass <sjg@chromium.org> --- include/acpi/acpi_table.h | 7 +++++++ lib/acpi/base.c | 17 ++++++++++++----- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/include/acpi/acpi_table.h b/include/acpi/acpi_table.h index 05b6385544e..6d599455bd6 100644 --- a/include/acpi/acpi_table.h +++ b/include/acpi/acpi_table.h @@ -1095,6 +1095,13 @@ int acpi_write_dbg2_pci_uart(struct acpi_ctx *ctx, struct udevice *dev, void acpi_write_rsdp(struct acpi_rsdp *rsdp, struct acpi_rsdt *rsdt, struct acpi_xsdt *xsdt); +/** + * acpi_udpate_rsdp_checksum() - Set up the checksum for the RSDP table + * + * @rsdp: Pointer to RSDP + */ +void acpi_udpate_rsdp_checksum(struct acpi_rsdp *rsdp); + /** * acpi_fill_header() - Set up a table header * diff --git a/lib/acpi/base.c b/lib/acpi/base.c index 5c755b14c16..a724acbc9bd 100644 --- a/lib/acpi/base.c +++ b/lib/acpi/base.c @@ -15,6 +15,17 @@ #include <linux/errno.h> #include <linux/string.h> +void acpi_udpate_rsdp_checksum(struct acpi_rsdp *rsdp) +{ + rsdp->checksum = 0; + rsdp->ext_checksum = 0; + + /* Calculate checksums */ + rsdp->checksum = table_compute_checksum(rsdp, 20); + rsdp->ext_checksum = table_compute_checksum(rsdp, + sizeof(struct acpi_rsdp)); +} + void acpi_write_rsdp(struct acpi_rsdp *rsdp, struct acpi_rsdt *rsdt, struct acpi_xsdt *xsdt) { @@ -31,11 +42,7 @@ void acpi_write_rsdp(struct acpi_rsdp *rsdp, struct acpi_rsdt *rsdt, rsdp->length = sizeof(struct acpi_rsdp); rsdp->revision = ACPI_RSDP_REV_ACPI_2_0; - - /* Calculate checksums */ - rsdp->checksum = table_compute_checksum(rsdp, 20); - rsdp->ext_checksum = table_compute_checksum(rsdp, - sizeof(struct acpi_rsdp)); + acpi_udpate_rsdp_checksum(rsdp); } static void acpi_write_rsdt(struct acpi_rsdt *rsdt) -- 2.43.0