ice: check netlist before enabling ICE_F_GNSS
authorJacob Keller <jacob.e.keller@intel.com>
Thu, 17 Aug 2023 00:00:58 +0000 (17:00 -0700)
committerTony Nguyen <anthony.l.nguyen@intel.com>
Mon, 18 Sep 2023 18:27:33 +0000 (11:27 -0700)
Similar to the change made for ICE_F_SMA_CTRL, check the netlist before
enabling support for ICE_F_GNSS. This ensures that the driver only enables
the GNSS feature on devices which actually have the feature enabled in the
firmware device configuration.

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>
drivers/net/ethernet/intel/ice/ice_adminq_cmd.h
drivers/net/ethernet/intel/ice/ice_common.c
drivers/net/ethernet/intel/ice/ice_common.h
drivers/net/ethernet/intel/ice/ice_gnss.c

index b20241df4d3f719ea90c146a06f542ba8002b403..24293f52f2d1eb0d83bcfe9d929fcb27ce59778f 100644 (file)
@@ -1393,6 +1393,7 @@ struct ice_aqc_link_topo_params {
 #define ICE_AQC_LINK_TOPO_NODE_TYPE_ID_EEPROM  8
 #define ICE_AQC_LINK_TOPO_NODE_TYPE_CLK_CTRL   9
 #define ICE_AQC_LINK_TOPO_NODE_TYPE_CLK_MUX    10
+#define ICE_AQC_LINK_TOPO_NODE_TYPE_GPS                11
 #define ICE_AQC_LINK_TOPO_NODE_CTX_S           4
 #define ICE_AQC_LINK_TOPO_NODE_CTX_M           \
                                (0xF << ICE_AQC_LINK_TOPO_NODE_CTX_S)
@@ -1435,6 +1436,7 @@ struct ice_aqc_get_link_topo {
 #define ICE_AQC_GET_LINK_TOPO_NODE_NR_E822_PHY         0x30
 #define ICE_AQC_GET_LINK_TOPO_NODE_NR_C827             0x31
 #define ICE_AQC_GET_LINK_TOPO_NODE_NR_GEN_CLK_MUX      0x47
+#define ICE_AQC_GET_LINK_TOPO_NODE_NR_GEN_GPS          0x48
        u8 rsvd[9];
 };
 
index 089558b3b1ae90dca2d9848ddca7615cb0bcd5dd..8f31ae4499480f48eac98714cf4282b509c639c6 100644 (file)
@@ -2764,6 +2764,21 @@ bool ice_is_pf_c827(struct ice_hw *hw)
        return false;
 }
 
+/**
+ * ice_is_gps_in_netlist
+ * @hw: pointer to the hw struct
+ *
+ * Check if the GPS generic device is present in the netlist
+ */
+bool ice_is_gps_in_netlist(struct ice_hw *hw)
+{
+       if (ice_find_netlist_node(hw, ICE_AQC_LINK_TOPO_NODE_TYPE_GPS,
+                                 ICE_AQC_GET_LINK_TOPO_NODE_NR_GEN_GPS, NULL))
+               return false;
+
+       return true;
+}
+
 /**
  * ice_aq_list_caps - query function/device capabilities
  * @hw: pointer to the HW struct
index 74e44b450de4314c11caab8eb83393b5335f4e90..47a75651ca3881ddd1061d2108b870f26d649ebf 100644 (file)
@@ -93,6 +93,7 @@ ice_aq_get_phy_caps(struct ice_port_info *pi, bool qual_mods, u8 report_mode,
                    struct ice_aqc_get_phy_caps_data *caps,
                    struct ice_sq_cd *cd);
 bool ice_is_pf_c827(struct ice_hw *hw);
+bool ice_is_gps_in_netlist(struct ice_hw *hw);
 int
 ice_find_netlist_node(struct ice_hw *hw, u8 node_type_ctx, u8 node_part_number,
                      u16 *node_handle);
index 75c9de675f2028611c2d91d1b2ed055401dbeadd..c8ea1af51ad38ddcc9f6fe42f8a8c2a8a26cbdc6 100644 (file)
@@ -389,6 +389,9 @@ bool ice_gnss_is_gps_present(struct ice_hw *hw)
        if (!hw->func_caps.ts_func_info.src_tmr_owned)
                return false;
 
+       if (!ice_is_gps_in_netlist(hw))
+               return false;
+
 #if IS_ENABLED(CONFIG_PTP_1588_CLOCK)
        if (ice_is_e810t(hw)) {
                int err;