From: Pabitra Dalai <pabitra.da...@intel.com>

To reflect updates in the data sheet, add:

- loopback mode value into ice_aqc_set_port_params
- required defines to support loopback mode
- added loopback mode handling in ice_port_info

Signed-off-by: Pabitra Dalai <pabitra.da...@intel.com>
Signed-off-by: Ian Stokes <ian.sto...@intel.com>
---
 drivers/net/ice/base/ice_adminq_cmd.h | 7 ++++++-
 drivers/net/ice/base/ice_common.c     | 4 ++++
 drivers/net/ice/base/ice_common.h     | 3 +++
 drivers/net/ice/base/ice_type.h       | 1 +
 4 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ice/base/ice_adminq_cmd.h 
b/drivers/net/ice/base/ice_adminq_cmd.h
index d828731a5b..c431b82784 100644
--- a/drivers/net/ice/base/ice_adminq_cmd.h
+++ b/drivers/net/ice/base/ice_adminq_cmd.h
@@ -264,7 +264,12 @@ struct ice_aqc_set_port_params {
                                (0x3F << ICE_AQC_SET_P_PARAMS_LOGI_PORT_ID_S)
 #define ICE_AQC_SET_P_PARAMS_IS_LOGI_PORT      BIT(14)
 #define ICE_AQC_SET_P_PARAMS_SWID_VALID                BIT(15)
-       u8 reserved[10];
+       u8 lb_mode;
+#define ICE_AQC_SET_P_PARAMS_LOOPBACK_MODE_VALID BIT(2)
+#define ICE_AQC_SET_P_PARAMS_LOOPBACK_MODE_NORMAL 0x00
+#define ICE_AQC_SET_P_PARAMS_LOOPBACK_MODE_NO 0x01
+#define ICE_AQC_SET_P_PARAMS_LOOPBACK_MODE_HIGH 0x02
+       u8 reserved[9];
 };
 
 /* These resource type defines are used for all switch resource
diff --git a/drivers/net/ice/base/ice_common.c 
b/drivers/net/ice/base/ice_common.c
index 079df60cab..bb845700dd 100644
--- a/drivers/net/ice/base/ice_common.c
+++ b/drivers/net/ice/base/ice_common.c
@@ -1058,6 +1058,8 @@ int ice_init_hw(struct ice_hw *hw)
                goto err_unroll_cqinit;
        }
 
+       hw->port_info->loopback_mode = 
ICE_AQC_SET_P_PARAMS_LOOPBACK_MODE_NORMAL;
+
        /* set the back pointer to HW */
        hw->port_info->hw = hw;
 
@@ -3231,6 +3233,8 @@ ice_aq_set_port_params(struct ice_port_info *pi, u16 
bad_frame_vsi,
        cmd = &desc.params.set_port_params;
 
        ice_fill_dflt_direct_cmd_desc(&desc, ice_aqc_opc_set_port_params);
+       cmd->lb_mode = pi->loopback_mode |
+                      ICE_AQC_SET_P_PARAMS_LOOPBACK_MODE_VALID;
        cmd->bad_frame_vsi = CPU_TO_LE16(bad_frame_vsi);
        if (save_bad_pac)
                cmd_flags |= ICE_AQC_SET_P_PARAMS_SAVE_BAD_PACKETS;
diff --git a/drivers/net/ice/base/ice_common.h 
b/drivers/net/ice/base/ice_common.h
index a57bb4523d..d06742aa77 100644
--- a/drivers/net/ice/base/ice_common.h
+++ b/drivers/net/ice/base/ice_common.h
@@ -15,6 +15,9 @@
 #define ICE_SQ_SEND_DELAY_TIME_MS      10
 #define ICE_SQ_SEND_MAX_EXECUTE                3
 
+#define LOOPBACK_MODE_NO       0
+#define LOOPBACK_MODE_HIGH     2
+
 enum ice_fw_modes {
        ICE_FW_MODE_NORMAL,
        ICE_FW_MODE_DBG,
diff --git a/drivers/net/ice/base/ice_type.h b/drivers/net/ice/base/ice_type.h
index 2a4e325993..638e812c0f 100644
--- a/drivers/net/ice/base/ice_type.h
+++ b/drivers/net/ice/base/ice_type.h
@@ -1208,6 +1208,7 @@ struct ice_port_info {
        u16 sw_id;                      /* Initial switch ID belongs to port */
        u16 pf_vf_num;
        u8 port_state;
+       u8 loopback_mode;
 #define ICE_SCHED_PORT_STATE_INIT      0x0
 #define ICE_SCHED_PORT_STATE_READY     0x1
        u8 lport;
-- 
2.43.0

Reply via email to