Commit f046bd0a authored by Rahul Lakkireddy's avatar Rahul Lakkireddy Committed by David S. Miller
Browse files

cxgb4: fix sleep in atomic when flashing PHY firmware



Before writing new PHY firmware to on-chip memory, driver queries
firmware for current running PHY firmware version, which can result
in sleep waiting for reply. So, move spinlock closer to the actual
on-chip memory write operation, instead of taking it at the callers.

Fixes: 5fff701c ("cxgb4: always sync access when flashing PHY firmware")
Signed-off-by: default avatarRahul Lakkireddy <rahul.lakkireddy@chelsio.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 42a20397
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -1337,9 +1337,7 @@ static int cxgb4_ethtool_flash_phy(struct net_device *netdev,
		return ret;
	}

	spin_lock_bh(&adap->win0_lock);
	ret = t4_load_phy_fw(adap, MEMWIN_NIC, NULL, data, size);
	spin_unlock_bh(&adap->win0_lock);
	if (ret)
		dev_err(adap->pdev_dev, "Failed to load PHY FW\n");

+0 −2
Original line number Diff line number Diff line
@@ -4424,10 +4424,8 @@ static int adap_init0_phy(struct adapter *adap)

	/* Load PHY Firmware onto adapter.
	 */
	spin_lock_bh(&adap->win0_lock);
	ret = t4_load_phy_fw(adap, MEMWIN_NIC, phy_info->phy_fw_version,
			     (u8 *)phyf->data, phyf->size);
	spin_unlock_bh(&adap->win0_lock);
	if (ret < 0)
		dev_err(adap->pdev_dev, "PHY Firmware transfer error %d\n",
			-ret);
+2 −0
Original line number Diff line number Diff line
@@ -3820,9 +3820,11 @@ int t4_load_phy_fw(struct adapter *adap, int win,
	/* Copy the supplied PHY Firmware image to the adapter memory location
	 * allocated by the adapter firmware.
	 */
	spin_lock_bh(&adap->win0_lock);
	ret = t4_memory_rw(adap, win, mtype, maddr,
			   phy_fw_size, (__be32 *)phy_fw_data,
			   T4_MEMORY_WRITE);
	spin_unlock_bh(&adap->win0_lock);
	if (ret)
		return ret;