IB/hfi1: Use EPROM platform configuration read
authorDean Luick <dean.luick@intel.com>
Fri, 30 Sep 2016 11:41:45 +0000 (04:41 -0700)
committerDoug Ledford <dledford@redhat.com>
Sun, 2 Oct 2016 12:42:20 +0000 (08:42 -0400)
The driver will now try to read directly from the EPROM as its
first choice for the platform configuration file.

Reviewed-by: Easwar Hariharan <easwar.hariharan@intel.com>
Signed-off-by: Dean Luick <dean.luick@intel.com>
Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
drivers/infiniband/hw/hfi1/chip.c
drivers/infiniband/hw/hfi1/platform.c

index 88394cd..9bf5f23 100644 (file)
@@ -14566,6 +14566,11 @@ struct hfi1_devdata *hfi1_init_dd(struct pci_dev *pdev,
        if (ret)
                goto bail_cleanup;
 
+       /* call before get_platform_config(), after init_chip_resources() */
+       ret = eprom_init(dd);
+       if (ret)
+               goto bail_free_rcverr;
+
        /* Needs to be called before hfi1_firmware_init */
        get_platform_config(dd);
 
@@ -14686,10 +14691,6 @@ struct hfi1_devdata *hfi1_init_dd(struct pci_dev *pdev,
        if (ret)
                goto bail_free_cntrs;
 
-       ret = eprom_init(dd);
-       if (ret)
-               goto bail_free_rcverr;
-
        goto bail;
 
 bail_free_rcverr:
index 965c8ae..2024331 100644 (file)
 
 #include "hfi.h"
 #include "efivar.h"
+#include "eprom.h"
 
 void get_platform_config(struct hfi1_devdata *dd)
 {
        int ret = 0;
        unsigned long size = 0;
        u8 *temp_platform_config = NULL;
+       u32 esize;
+
+       ret = eprom_read_platform_config(dd, (void **)&temp_platform_config,
+                                        &esize);
+       if (!ret) {
+               /* success */
+               size = esize;
+               goto success;
+       }
+       /* fail, try EFI variable */
 
        ret = read_hfi1_efi_var(dd, "configuration", &size,
                                (void **)&temp_platform_config);
-       if (ret) {
-               dd_dev_info(dd,
-                           "%s: Failed to get platform config from UEFI, falling back to request firmware\n",
-                           __func__);
-               /* fall back to request firmware */
-               platform_config_load = 1;
-               goto bail;
-       }
+       if (!ret)
+               goto success;
+
+       dd_dev_info(dd,
+                   "%s: Failed to get platform config from UEFI, falling back to request firmware\n",
+                   __func__);
+       /* fall back to request firmware */
+       platform_config_load = 1;
+       return;
 
+success:
        dd->platform_config.data = temp_platform_config;
        dd->platform_config.size = size;
-
-bail:
-       /* exit */;
 }
 
 void free_platform_config(struct hfi1_devdata *dd)