x86: acpi: Refactor XSDT handling in acpi_add_table()
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Thu, 27 Feb 2020 14:00:51 +0000 (16:00 +0200)
committerBin Meng <bmeng.cn@gmail.com>
Sat, 4 Apr 2020 14:08:44 +0000 (22:08 +0800)
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@linux.intel.com>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
arch/x86/lib/acpi_table.c

index 0d69cf271f4153d092710d81ec82d3814467966a..66e32f21bdbd84643bcabbe8dc77d515ed91a917 100644 (file)
@@ -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)