Skip to content

Commit

Permalink
ice: Add check for lport extraction to LAG init
Browse files Browse the repository at this point in the history
To fully support initializing the LAG support code, a DDP package that
extracts the logical port from the metadata is required.  If such a
package is not present, there could be difficulties in supporting some
bond types.

Add a check into the initialization flow that will bypass the new paths
if any of the support pieces are missing.

Reviewed-by: Przemek Kitszel <[email protected]>
Fixes: df006dd ("ice: Add initial support framework for LAG")
Signed-off-by: Dave Ertman <[email protected]>
Reviewed-by: Marcin Szycik <[email protected]>
Reviewed-by: Simon Horman <[email protected]>
Tested-by: Sujai Buvaneswaran <[email protected]>
Tested-by: Pucha Himasekhar Reddy <[email protected]> (A Contingent worker at Intel)
Signed-off-by: Tony Nguyen <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Jakub Kicinski <[email protected]>
  • Loading branch information
dmertman authored and kuba-moo committed Feb 15, 2024
1 parent 63a3dd6 commit dadd170
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 2 deletions.
25 changes: 23 additions & 2 deletions drivers/net/ethernet/intel/ice/ice_lag.c
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,27 @@ ice_lag_find_hw_by_lport(struct ice_lag *lag, u8 lport)
return NULL;
}

/**
* ice_pkg_has_lport_extract - check if lport extraction supported
* @hw: HW struct
*/
static bool ice_pkg_has_lport_extract(struct ice_hw *hw)
{
int i;

for (i = 0; i < hw->blk[ICE_BLK_SW].es.count; i++) {
u16 offset;
u8 fv_prot;

ice_find_prot_off(hw, ICE_BLK_SW, ICE_SW_DEFAULT_PROFILE, i,
&fv_prot, &offset);
if (fv_prot == ICE_FV_PROT_MDID &&
offset == ICE_LP_EXT_BUF_OFFSET)
return true;
}
return false;
}

/**
* ice_lag_find_primary - returns pointer to primary interfaces lag struct
* @lag: local interfaces lag struct
Expand Down Expand Up @@ -1206,7 +1227,7 @@ static void ice_lag_del_prune_list(struct ice_lag *lag, struct ice_pf *event_pf)
}

/**
* ice_lag_init_feature_support_flag - Check for NVM support for LAG
* ice_lag_init_feature_support_flag - Check for package and NVM support for LAG
* @pf: PF struct
*/
static void ice_lag_init_feature_support_flag(struct ice_pf *pf)
Expand All @@ -1219,7 +1240,7 @@ static void ice_lag_init_feature_support_flag(struct ice_pf *pf)
else
ice_clear_feature_support(pf, ICE_F_ROCE_LAG);

if (caps->sriov_lag)
if (caps->sriov_lag && ice_pkg_has_lport_extract(&pf->hw))
ice_set_feature_support(pf, ICE_F_SRIOV_LAG);
else
ice_clear_feature_support(pf, ICE_F_SRIOV_LAG);
Expand Down
3 changes: 3 additions & 0 deletions drivers/net/ethernet/intel/ice/ice_lag.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@ enum ice_lag_role {
#define ICE_LAG_INVALID_PORT 0xFF

#define ICE_LAG_RESET_RETRIES 5
#define ICE_SW_DEFAULT_PROFILE 0
#define ICE_FV_PROT_MDID 255
#define ICE_LP_EXT_BUF_OFFSET 32

struct ice_pf;
struct ice_vf;
Expand Down

0 comments on commit dadd170

Please sign in to comment.