ice: convert clk_freq capability into time_ref
authorJacob Keller <jacob.e.keller@intel.com>
Wed, 13 Oct 2021 15:53:41 +0000 (08:53 -0700)
committerTony Nguyen <anthony.l.nguyen@intel.com>
Tue, 21 Dec 2021 17:11:02 +0000 (09:11 -0800)
Convert the clk_freq value into the associated time_ref frequency value
for E822 devices. This simplifies determining the time reference value
for the clock.

Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
Tested-by: Gurucharan G <gurucharanx.g@intel.com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
drivers/net/ethernet/intel/ice/ice_common.c
drivers/net/ethernet/intel/ice/ice_type.h

index 157add1..2a1ee60 100644 (file)
@@ -2189,6 +2189,18 @@ ice_parse_1588_func_caps(struct ice_hw *hw, struct ice_hw_func_caps *func_p,
        info->clk_freq = (number & ICE_TS_CLK_FREQ_M) >> ICE_TS_CLK_FREQ_S;
        info->clk_src = ((number & ICE_TS_CLK_SRC_M) != 0);
 
+       if (info->clk_freq < NUM_ICE_TIME_REF_FREQ) {
+               info->time_ref = (enum ice_time_ref_freq)info->clk_freq;
+       } else {
+               /* Unknown clock frequency, so assume a (probably incorrect)
+                * default to avoid out-of-bounds look ups of frequency
+                * related information.
+                */
+               ice_debug(hw, ICE_DBG_INIT, "1588 func caps: unknown clock frequency %u\n",
+                         info->clk_freq);
+               info->time_ref = ICE_TIME_REF_FREQ_25_000;
+       }
+
        ice_debug(hw, ICE_DBG_INIT, "func caps: ieee_1588 = %u\n",
                  func_p->common_cap.ieee_1588);
        ice_debug(hw, ICE_DBG_INIT, "func caps: src_tmr_owned = %u\n",
index 58b1907..caf0a02 100644 (file)
@@ -298,9 +298,30 @@ struct ice_hw_common_caps {
 #define ICE_TS_TMR_IDX_ASSOC_S         24
 #define ICE_TS_TMR_IDX_ASSOC_M         BIT(24)
 
+/* TIME_REF clock rate specification */
+enum ice_time_ref_freq {
+       ICE_TIME_REF_FREQ_25_000        = 0,
+       ICE_TIME_REF_FREQ_122_880       = 1,
+       ICE_TIME_REF_FREQ_125_000       = 2,
+       ICE_TIME_REF_FREQ_153_600       = 3,
+       ICE_TIME_REF_FREQ_156_250       = 4,
+       ICE_TIME_REF_FREQ_245_760       = 5,
+
+       NUM_ICE_TIME_REF_FREQ
+};
+
+/* Clock source specification */
+enum ice_clk_src {
+       ICE_CLK_SRC_TCX0        = 0, /* Temperature compensated oscillator  */
+       ICE_CLK_SRC_TIME_REF    = 1, /* Use TIME_REF reference clock */
+
+       NUM_ICE_CLK_SRC
+};
+
 struct ice_ts_func_info {
        /* Function specific info */
-       u32 clk_freq;
+       enum ice_time_ref_freq time_ref;
+       u8 clk_freq;
        u8 clk_src;
        u8 tmr_index_assoc;
        u8 ena;