efi/ia64: Use existing helpers to locate ESI table
authorArd Biesheuvel <ardb@kernel.org>
Mon, 20 Jan 2020 14:45:39 +0000 (15:45 +0100)
committerArd Biesheuvel <ardb@kernel.org>
Sun, 23 Feb 2020 20:59:42 +0000 (21:59 +0100)
Instead of iterating over the EFI config table array manually,
declare it as an arch table so it gets picked up by the existing
config table handling code.

Tested-by: Tony Luck <tony.luck@intel.com> # arch/ia64
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
arch/ia64/kernel/efi.c
arch/ia64/kernel/esi.c

index 292fe354158d7898a1658403d87008e9072b1e05..74fad89ae2094333747495d96da8329c63c59af0 100644 (file)
 
 #define EFI_DEBUG      0
 
+#define ESI_TABLE_GUID                                 \
+    EFI_GUID(0x43EA58DC, 0xCF28, 0x4b06, 0xB3,         \
+            0x91, 0xB7, 0x50, 0x59, 0x34, 0x2B, 0xD4)
+
 static unsigned long mps_phys = EFI_INVALID_TABLE_ADDR;
 static __initdata unsigned long palo_phys;
 
+unsigned long __initdata esi_phys = EFI_INVALID_TABLE_ADDR;
 unsigned long hcdp_phys = EFI_INVALID_TABLE_ADDR;
 unsigned long sal_systab_phys = EFI_INVALID_TABLE_ADDR;
 
 static __initdata efi_config_table_type_t arch_tables[] = {
+       {ESI_TABLE_GUID, "ESI", &esi_phys},
        {HCDP_TABLE_GUID, "HCDP", &hcdp_phys},
        {MPS_TABLE_GUID, "MPS", &mps_phys},
        {PROCESSOR_ABSTRACTION_LAYER_OVERWRITE_GUID, "PALO", &palo_phys},
index cb514126ef7f687aff61a52edc14d4e107582299..4df57c93e0a8c48d59182d229c89b7f904b32035 100644 (file)
@@ -19,10 +19,6 @@ MODULE_LICENSE("GPL");
 
 #define MODULE_NAME    "esi"
 
-#define ESI_TABLE_GUID                                 \
-    EFI_GUID(0x43EA58DC, 0xCF28, 0x4b06, 0xB3,         \
-            0x91, 0xB7, 0x50, 0x59, 0x34, 0x2B, 0xD4)
-
 enum esi_systab_entry_type {
        ESI_DESC_ENTRY_POINT = 0
 };
@@ -48,27 +44,18 @@ struct pdesc {
 
 static struct ia64_sal_systab *esi_systab;
 
+extern unsigned long esi_phys;
+
 static int __init esi_init (void)
 {
-       efi_config_table_t *config_tables;
        struct ia64_sal_systab *systab;
-       unsigned long esi = 0;
        char *p;
        int i;
 
-       config_tables = __va(efi.systab->tables);
-
-       for (i = 0; i < (int) efi.systab->nr_tables; ++i) {
-               if (efi_guidcmp(config_tables[i].guid, ESI_TABLE_GUID) == 0) {
-                       esi = config_tables[i].table;
-                       break;
-               }
-       }
-
-       if (!esi)
+       if (esi_phys == EFI_INVALID_TABLE_ADDR)
                return -ENODEV;
 
-       systab = __va(esi);
+       systab = __va(esi_phys);
 
        if (strncmp(systab->signature, "ESIT", 4) != 0) {
                printk(KERN_ERR "bad signature in ESI system table!");