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

Commit c91b4a12 authored by Caz Yokoyama's avatar Caz Yokoyama Committed by Greg Kroah-Hartman
Browse files

staging/rdma/hfi1: Reset firmware instead of reloading Sbus



Reset firmware instead of reloading Sbus firmware if it's already done for this
ASIC.  To work around thermal polling problem in firmware, don't reload Sbus
firmware, instead, reset the firmware on the initialization of the second HFI.

Reviewed-by: default avatarEaswar Hariharan <easwar.hariharan@intel.com>
Reviewed-by: default avatarDennis Dalessandro <dennis.dalessandro@intel.com>
Reviewed-by: default avatarDean Luick <dean.luick@intel.com>
Signed-off-by: default avatarCaz Yokoyama <caz.yokoyama@intel.com>
Signed-off-by: default avatarIra Weiny <ira.weiny@intel.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 07839049
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -609,6 +609,7 @@ static inline void write_uctxt_csr(struct hfi1_devdata *dd, int ctxt,
u64 create_pbc(struct hfi1_pportdata *ppd, u64, int, u32, u32);

/* firmware.c */
#define SBUS_MASTER_BROADCAST 0xfd
#define NUM_PCIE_SERDES 16	/* number of PCIe serdes on the SBus */
extern const u8 pcie_serdes_broadcast[];
extern const u8 pcie_pcs_addrs[2][NUM_PCIE_SERDES];
+1 −3
Original line number Diff line number Diff line
@@ -924,9 +924,6 @@ static int load_8051_firmware(struct hfi1_devdata *dd,
	return 0;
}

/* SBus Master broadcast address */
#define SBUS_MASTER_BROADCAST 0xfd

/*
 * Write the SBus request register
 *
@@ -1255,6 +1252,7 @@ int load_firmware(struct hfi1_devdata *dd)
			ret = load_sbus_firmware(dd, &fw_sbus);
			if (ret)
				goto clear;
			fw_sbus_load = 0;
		}

		if (fw_fabric_serdes_load) {
+12 −1
Original line number Diff line number Diff line
@@ -946,9 +946,20 @@ int do_pcie_gen3_transition(struct hfi1_devdata *dd)
			    __func__);
	}

retry:
	if (therm) {
		/* toggle SPICO_ENABLE to get back to the state
		   just after the firmware load */
		sbus_request(dd, SBUS_MASTER_BROADCAST, 0x01,
			WRITE_SBUS_RECEIVER, 0x00000040);
		sbus_request(dd, SBUS_MASTER_BROADCAST, 0x01,
			WRITE_SBUS_RECEIVER, 0x00000140);
		dd_dev_info(dd, "%s: toggle SPICO_ENABLE to reset the bus\n",
			    __func__);
	}

	/* step 3: download SBus Master firmware */
	/* step 4: download PCIe Gen3 SerDes firmware */
retry:
	dd_dev_info(dd, "%s: downloading firmware\n", __func__);
	ret = load_pcie_firmware(dd);
	if (ret)