From: Chinh T Cao <chinh.t....@intel.com>

When setting the PHY cfg (CQ cmd 0x0601), if the firmware responds
with an EMODE error, software will ignore the error as it simply
means that manageability (ex: BMC) is in control of the link and that
the new setting may not be applied.

Signed-off-by: Chinh T Cao <chinh.t....@intel.com>
Signed-off-by: Tony Nguyen <anthony.l.ngu...@intel.com>
Tested-by: Andrew Bowers <andrewx.bow...@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirs...@intel.com>
---
 drivers/net/ethernet/intel/ice/ice_adminq_cmd.h | 1 +
 drivers/net/ethernet/intel/ice/ice_common.c     | 7 ++++++-
 drivers/net/ethernet/intel/ice/ice_main.c       | 2 ++
 3 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/intel/ice/ice_adminq_cmd.h 
b/drivers/net/ethernet/intel/ice/ice_adminq_cmd.h
index 50040c5c55ec..92f82f2a8af4 100644
--- a/drivers/net/ethernet/intel/ice/ice_adminq_cmd.h
+++ b/drivers/net/ethernet/intel/ice/ice_adminq_cmd.h
@@ -1826,6 +1826,7 @@ enum ice_aq_err {
        ICE_AQ_RC_EINVAL        = 14, /* Invalid argument */
        ICE_AQ_RC_ENOSPC        = 16, /* No space left or allocation failure */
        ICE_AQ_RC_ENOSYS        = 17, /* Function not implemented */
+       ICE_AQ_RC_EMODE         = 21, /* Op not allowed in current dev mode */
        ICE_AQ_RC_ENOSEC        = 24, /* Missing security manifest */
        ICE_AQ_RC_EBADSIG       = 25, /* Bad RSA signature */
        ICE_AQ_RC_ESVN          = 26, /* SVN number prohibits this package */
diff --git a/drivers/net/ethernet/intel/ice/ice_common.c 
b/drivers/net/ethernet/intel/ice/ice_common.c
index d4a31c734326..bce0e1281168 100644
--- a/drivers/net/ethernet/intel/ice/ice_common.c
+++ b/drivers/net/ethernet/intel/ice/ice_common.c
@@ -2232,6 +2232,7 @@ ice_aq_set_phy_cfg(struct ice_hw *hw, u8 lport,
                   struct ice_aqc_set_phy_cfg_data *cfg, struct ice_sq_cd *cd)
 {
        struct ice_aq_desc desc;
+       enum ice_status status;
 
        if (!cfg)
                return ICE_ERR_PARAM;
@@ -2260,7 +2261,11 @@ ice_aq_set_phy_cfg(struct ice_hw *hw, u8 lport,
        ice_debug(hw, ICE_DBG_LINK, "eeer_value = 0x%x\n", cfg->eeer_value);
        ice_debug(hw, ICE_DBG_LINK, "link_fec_opt = 0x%x\n", cfg->link_fec_opt);
 
-       return ice_aq_send_cmd(hw, &desc, cfg, sizeof(*cfg), cd);
+       status = ice_aq_send_cmd(hw, &desc, cfg, sizeof(*cfg), cd);
+       if (hw->adminq.sq_last_status == ICE_AQ_RC_EMODE)
+               status = 0;
+
+       return status;
 }
 
 /**
diff --git a/drivers/net/ethernet/intel/ice/ice_main.c 
b/drivers/net/ethernet/intel/ice/ice_main.c
index cb72ff32a29b..082825e3cb39 100644
--- a/drivers/net/ethernet/intel/ice/ice_main.c
+++ b/drivers/net/ethernet/intel/ice/ice_main.c
@@ -5159,6 +5159,8 @@ const char *ice_aq_str(enum ice_aq_err aq_err)
                return "ICE_AQ_RC_ENOSPC";
        case ICE_AQ_RC_ENOSYS:
                return "ICE_AQ_RC_ENOSYS";
+       case ICE_AQ_RC_EMODE:
+               return "ICE_AQ_RC_EMODE";
        case ICE_AQ_RC_ENOSEC:
                return "ICE_AQ_RC_ENOSEC";
        case ICE_AQ_RC_EBADSIG:
-- 
2.26.2

Reply via email to