ice: fix pin assignment for E810-T without SMA control
authorJacob Keller <jacob.e.keller@intel.com>
Thu, 17 Aug 2023 00:00:55 +0000 (17:00 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 20 Nov 2023 10:58:57 +0000 (11:58 +0100)
[ Upstream commit 5a7cee1cb4b9ef99fe7acd571e1bd51b023b099a ]

Since commit 43c4958a3ddb ("ice: Merge pin initialization of E810 and E810T
adapters"), the ice_ptp_setup_pins_e810() function has been used for both
E810 and E810-T devices. The new implementation only distinguishes between
whether the device has SMA control or not. It was assumed this is always
true for E810-T devices. In addition, it does not set the n_per_out value
appropriately when SMA control is enabled.

In some cases, the E810-T device may not have access to SMA control. In
that case, the E810-T device actually has access to fewer pins than a
standard E810 device.

Fix the implementation to correctly assign the appropriate pin counts for
E810-T devices both with and without SMA control. The mentioned commit
already includes the appropriate macro values for these pin counts but they
were unused.

Instead of assigning the default E810 values and then overwriting them,
handle the cases separately in order of E810-T with SMA, E810-T without
SMA, and then standard E810. This flow makes following the logic easier.

Fixes: 43c4958a3ddb ("ice: Merge pin initialization of E810 and E810T adapters")
Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
Tested-by: Sunitha Mekala <sunithax.d.mekala@intel.com> (A Contingent worker at Intel)
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/net/ethernet/intel/ice/ice_ptp.c

index 81d96a4..c427070 100644 (file)
@@ -2246,18 +2246,20 @@ ice_ptp_setup_sma_pins_e810t(struct ice_pf *pf, struct ptp_clock_info *info)
 static void
 ice_ptp_setup_pins_e810(struct ice_pf *pf, struct ptp_clock_info *info)
 {
-       info->n_per_out = N_PER_OUT_E810;
-
-       if (ice_is_feature_supported(pf, ICE_F_PTP_EXTTS))
-               info->n_ext_ts = N_EXT_TS_E810;
-
        if (ice_is_feature_supported(pf, ICE_F_SMA_CTRL)) {
                info->n_ext_ts = N_EXT_TS_E810;
+               info->n_per_out = N_PER_OUT_E810T;
                info->n_pins = NUM_PTP_PINS_E810T;
                info->verify = ice_verify_pin_e810t;
 
                /* Complete setup of the SMA pins */
                ice_ptp_setup_sma_pins_e810t(pf, info);
+       } else if (ice_is_e810t(&pf->hw)) {
+               info->n_ext_ts = N_EXT_TS_NO_SMA_E810T;
+               info->n_per_out = N_PER_OUT_NO_SMA_E810T;
+       } else {
+               info->n_per_out = N_PER_OUT_E810;
+               info->n_ext_ts = N_EXT_TS_E810;
        }
 }