ice: c827: move wait for FW to ice_init_hw()
JIRA: https://issues.redhat.com/browse/RHEL-63642 Upstream commit(s): commit c37dd67c423308c5a58c1a6e5b53229a95e19c3f Author: Przemek Kitszel <przemyslaw.kitszel@intel.com> Date: Wed Oct 2 13:50:21 2024 +0200 ice: c827: move wait for FW to ice_init_hw() Move call to ice_wait_for_fw() from ice_init_dev() into ice_init_hw(), where it fits better. This requires also to move ice_wait_for_fw() to ice_common.c. ice_is_pf_c827() is now used only in ice_common.c, so it could be static. Reviewed-by: Marcin Szycik <marcin.szycik@linux.intel.com> Signed-off-by: Przemek Kitszel <przemyslaw.kitszel@intel.com> Tested-by: Pucha Himasekhar Reddy <himasekharx.reddy.pucha@intel.com> (A Contingent worker at Intel) Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com> Signed-off-by: Petr Oros <poros@redhat.com>
This commit is contained in:
parent
5150d3a815
commit
8a26b1a718
|
@ -307,6 +307,42 @@ bool ice_is_e825c(struct ice_hw *hw)
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_is_pf_c827 - check if pf contains c827 phy
|
||||
* @hw: pointer to the hw struct
|
||||
*
|
||||
* Return: true if the device has c827 phy.
|
||||
*/
|
||||
static bool ice_is_pf_c827(struct ice_hw *hw)
|
||||
{
|
||||
struct ice_aqc_get_link_topo cmd = {};
|
||||
u8 node_part_number;
|
||||
u16 node_handle;
|
||||
int status;
|
||||
|
||||
if (hw->mac_type != ICE_MAC_E810)
|
||||
return false;
|
||||
|
||||
if (hw->device_id != ICE_DEV_ID_E810C_QSFP)
|
||||
return true;
|
||||
|
||||
cmd.addr.topo_params.node_type_ctx =
|
||||
FIELD_PREP(ICE_AQC_LINK_TOPO_NODE_TYPE_M, ICE_AQC_LINK_TOPO_NODE_TYPE_PHY) |
|
||||
FIELD_PREP(ICE_AQC_LINK_TOPO_NODE_CTX_M, ICE_AQC_LINK_TOPO_NODE_CTX_PORT);
|
||||
cmd.addr.topo_params.index = 0;
|
||||
|
||||
status = ice_aq_get_netlist_node(hw, &cmd, &node_part_number,
|
||||
&node_handle);
|
||||
|
||||
if (status || node_part_number != ICE_AQC_GET_LINK_TOPO_NODE_NR_C827)
|
||||
return false;
|
||||
|
||||
if (node_handle == E810C_QSFP_C827_0_HANDLE || node_handle == E810C_QSFP_C827_1_HANDLE)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_clear_pf_cfg - Clear PF configuration
|
||||
* @hw: pointer to the hardware structure
|
||||
|
@ -1021,6 +1057,33 @@ static void ice_get_itr_intrl_gran(struct ice_hw *hw)
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_wait_for_fw - wait for full FW readiness
|
||||
* @hw: pointer to the hardware structure
|
||||
* @timeout: milliseconds that can elapse before timing out
|
||||
*
|
||||
* Return: 0 on success, -ETIMEDOUT on timeout.
|
||||
*/
|
||||
static int ice_wait_for_fw(struct ice_hw *hw, u32 timeout)
|
||||
{
|
||||
int fw_loading;
|
||||
u32 elapsed = 0;
|
||||
|
||||
while (elapsed <= timeout) {
|
||||
fw_loading = rd32(hw, GL_MNG_FWSM) & GL_MNG_FWSM_FW_LOADING_M;
|
||||
|
||||
/* firmware was not yet loaded, we have to wait more */
|
||||
if (fw_loading) {
|
||||
elapsed += 100;
|
||||
msleep(100);
|
||||
continue;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
return -ETIMEDOUT;
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_init_hw - main hardware initialization routine
|
||||
* @hw: pointer to the hardware structure
|
||||
|
@ -1170,8 +1233,19 @@ int ice_init_hw(struct ice_hw *hw)
|
|||
mutex_init(&hw->tnl_lock);
|
||||
ice_init_chk_recipe_reuse_support(hw);
|
||||
|
||||
return 0;
|
||||
/* Some cards require longer initialization times
|
||||
* due to necessity of loading FW from an external source.
|
||||
* This can take even half a minute.
|
||||
*/
|
||||
if (ice_is_pf_c827(hw)) {
|
||||
status = ice_wait_for_fw(hw, 30000);
|
||||
if (status) {
|
||||
dev_err(ice_hw_to_dev(hw), "ice_wait_for_fw timed out");
|
||||
goto err_unroll_fltr_mgmt_struct;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
err_unroll_fltr_mgmt_struct:
|
||||
ice_cleanup_fltr_mgmt_struct(hw);
|
||||
err_unroll_sched:
|
||||
|
@ -2687,40 +2761,6 @@ ice_parse_dev_caps(struct ice_hw *hw, struct ice_hw_dev_caps *dev_p,
|
|||
ice_recalc_port_limited_caps(hw, &dev_p->common_cap);
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_is_pf_c827 - check if pf contains c827 phy
|
||||
* @hw: pointer to the hw struct
|
||||
*/
|
||||
bool ice_is_pf_c827(struct ice_hw *hw)
|
||||
{
|
||||
struct ice_aqc_get_link_topo cmd = {};
|
||||
u8 node_part_number;
|
||||
u16 node_handle;
|
||||
int status;
|
||||
|
||||
if (hw->mac_type != ICE_MAC_E810)
|
||||
return false;
|
||||
|
||||
if (hw->device_id != ICE_DEV_ID_E810C_QSFP)
|
||||
return true;
|
||||
|
||||
cmd.addr.topo_params.node_type_ctx =
|
||||
FIELD_PREP(ICE_AQC_LINK_TOPO_NODE_TYPE_M, ICE_AQC_LINK_TOPO_NODE_TYPE_PHY) |
|
||||
FIELD_PREP(ICE_AQC_LINK_TOPO_NODE_CTX_M, ICE_AQC_LINK_TOPO_NODE_CTX_PORT);
|
||||
cmd.addr.topo_params.index = 0;
|
||||
|
||||
status = ice_aq_get_netlist_node(hw, &cmd, &node_part_number,
|
||||
&node_handle);
|
||||
|
||||
if (status || node_part_number != ICE_AQC_GET_LINK_TOPO_NODE_NR_C827)
|
||||
return false;
|
||||
|
||||
if (node_handle == E810C_QSFP_C827_0_HANDLE || node_handle == E810C_QSFP_C827_1_HANDLE)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_is_phy_rclk_in_netlist
|
||||
* @hw: pointer to the hw struct
|
||||
|
|
|
@ -113,7 +113,6 @@ int
|
|||
ice_aq_get_phy_caps(struct ice_port_info *pi, bool qual_mods, u8 report_mode,
|
||||
struct ice_aqc_get_phy_caps_data *caps,
|
||||
struct ice_sq_cd *cd);
|
||||
bool ice_is_pf_c827(struct ice_hw *hw);
|
||||
bool ice_is_phy_rclk_in_netlist(struct ice_hw *hw);
|
||||
bool ice_is_clock_mux_in_netlist(struct ice_hw *hw);
|
||||
bool ice_is_cgu_in_netlist(struct ice_hw *hw);
|
||||
|
|
|
@ -4712,31 +4712,6 @@ static void ice_decfg_netdev(struct ice_vsi *vsi)
|
|||
vsi->netdev = NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_wait_for_fw - wait for full FW readiness
|
||||
* @hw: pointer to the hardware structure
|
||||
* @timeout: milliseconds that can elapse before timing out
|
||||
*/
|
||||
static int ice_wait_for_fw(struct ice_hw *hw, u32 timeout)
|
||||
{
|
||||
int fw_loading;
|
||||
u32 elapsed = 0;
|
||||
|
||||
while (elapsed <= timeout) {
|
||||
fw_loading = rd32(hw, GL_MNG_FWSM) & GL_MNG_FWSM_FW_LOADING_M;
|
||||
|
||||
/* firmware was not yet loaded, we have to wait more */
|
||||
if (fw_loading) {
|
||||
elapsed += 100;
|
||||
msleep(100);
|
||||
continue;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
return -ETIMEDOUT;
|
||||
}
|
||||
|
||||
int ice_init_dev(struct ice_pf *pf)
|
||||
{
|
||||
struct device *dev = ice_pf_to_dev(pf);
|
||||
|
@ -4749,18 +4724,6 @@ int ice_init_dev(struct ice_pf *pf)
|
|||
return err;
|
||||
}
|
||||
|
||||
/* Some cards require longer initialization times
|
||||
* due to necessity of loading FW from an external source.
|
||||
* This can take even half a minute.
|
||||
*/
|
||||
if (ice_is_pf_c827(hw)) {
|
||||
err = ice_wait_for_fw(hw, 30000);
|
||||
if (err) {
|
||||
dev_err(dev, "ice_wait_for_fw timed out");
|
||||
return err;
|
||||
}
|
||||
}
|
||||
|
||||
ice_init_feature_support(pf);
|
||||
|
||||
err = ice_init_ddp_config(hw, pf);
|
||||
|
|
Loading…
Reference in New Issue