From mboxrd@z Thu Jan 1 00:00:00 1970 From: Simon Glass Date: Thu, 27 Feb 2020 15:40:41 -0800 Subject: [PATCH v1] x86: acpi: Refactor XSDT handling in acpi_add_table() In-Reply-To: <20200227140051.75072-1-andriy.shevchenko@linux.intel.com> References: <20200227140051.75072-1-andriy.shevchenko@linux.intel.com> Message-ID: List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hi Andy, On Thu, 27 Feb 2020 at 06:00, Andy Shevchenko 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 > --- > 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 >