Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e83eba21 authored by Dean Luick's avatar Dean Luick Committed by Doug Ledford
Browse files

IB/hfi1: Use EPROM platform configuration read



The driver will now try to read directly from the EPROM as its
first choice for the platform configuration file.

Reviewed-by: default avatarEaswar Hariharan <easwar.hariharan@intel.com>
Signed-off-by: default avatarDean Luick <dean.luick@intel.com>
Signed-off-by: default avatarDennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: default avatarDoug Ledford <dledford@redhat.com>
parent 107ffbc5
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -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:
+21 −11
Original line number Diff line number Diff line
@@ -47,29 +47,39 @@

#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) {
	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;
		goto bail;
	}
	return;

success:
	dd->platform_config.data = temp_platform_config;
	dd->platform_config.size = size;

bail:
	/* exit */;
}

void free_platform_config(struct hfi1_devdata *dd)