]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ice: Add NAC Topology device capability parser
authorGrzegorz Nitka <grzegorz.nitka@intel.com>
Tue, 28 May 2024 23:04:00 +0000 (16:04 -0700)
committerJakub Kicinski <kuba@kernel.org>
Sat, 1 Jun 2024 22:51:51 +0000 (15:51 -0700)
Add new device capability ICE_AQC_CAPS_NAC_TOPOLOGY which allows to
determine the mode of operation (1 or 2 NAC).
Define a new structure to store data from new capability and
corresponding parser code.

Co-developed-by: Prathisna Padmasanan <prathisna.padmasanan@intel.com>
Signed-off-by: Prathisna Padmasanan <prathisna.padmasanan@intel.com>
Signed-off-by: Grzegorz Nitka <grzegorz.nitka@intel.com>
Reviewed-by: Pawel Kaminski <pawel.kaminski@intel.com>
Reviewed-by: Mateusz Polchlopek <mateusz.polchlopek@intel.com>
Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
Reviewed-by: Arkadiusz Kubalewski <arkadiusz.kubalewski@intel.com>
Signed-off-by: Karol Kolacinski <karol.kolacinski@intel.com>
Tested-by: Pucha Himasekhar Reddy <himasekharx.reddy.pucha@intel.com>
Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
Link: https://lore.kernel.org/r/20240528-next-2024-05-28-ptp-refactors-v1-10-c082739bb6f6@intel.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/intel/ice/ice_adminq_cmd.h
drivers/net/ethernet/intel/ice/ice_common.c
drivers/net/ethernet/intel/ice/ice_type.h

index e76c388b99055f6586c1b04b2af6cdfa35a3dbca..621a2ca7093ebc994a34e10cfa763c05272ce1ac 100644 (file)
@@ -122,6 +122,7 @@ struct ice_aqc_list_caps_elem {
 #define ICE_AQC_CAPS_POST_UPDATE_RESET_RESTRICT                0x0077
 #define ICE_AQC_CAPS_NVM_MGMT                          0x0080
 #define ICE_AQC_CAPS_TX_SCHED_TOPO_COMP_MODE           0x0085
+#define ICE_AQC_CAPS_NAC_TOPOLOGY                      0x0087
 #define ICE_AQC_CAPS_FW_LAG_SUPPORT                    0x0092
 #define ICE_AQC_BIT_ROCEV2_LAG                         0x01
 #define ICE_AQC_BIT_SRIOV_LAG                          0x02
index 4dbd3fca5527314346832c82b42fddd4cdb2455f..9ae61cd8923e390d36a21a535d8d955df8733432 100644 (file)
@@ -2593,6 +2593,34 @@ ice_parse_sensor_reading_cap(struct ice_hw *hw, struct ice_hw_dev_caps *dev_p,
                  dev_p->supported_sensors);
 }
 
+/**
+ * ice_parse_nac_topo_dev_caps - Parse ICE_AQC_CAPS_NAC_TOPOLOGY cap
+ * @hw: pointer to the HW struct
+ * @dev_p: pointer to device capabilities structure
+ * @cap: capability element to parse
+ *
+ * Parse ICE_AQC_CAPS_NAC_TOPOLOGY for device capabilities.
+ */
+static void ice_parse_nac_topo_dev_caps(struct ice_hw *hw,
+                                       struct ice_hw_dev_caps *dev_p,
+                                       struct ice_aqc_list_caps_elem *cap)
+{
+       dev_p->nac_topo.mode = le32_to_cpu(cap->number);
+       dev_p->nac_topo.id = le32_to_cpu(cap->phys_id) & ICE_NAC_TOPO_ID_M;
+
+       dev_info(ice_hw_to_dev(hw),
+                "PF is configured in %s mode with IP instance ID %d\n",
+                (dev_p->nac_topo.mode & ICE_NAC_TOPO_PRIMARY_M) ?
+                "primary" : "secondary", dev_p->nac_topo.id);
+
+       ice_debug(hw, ICE_DBG_INIT, "dev caps: nac topology is_primary = %d\n",
+                 !!(dev_p->nac_topo.mode & ICE_NAC_TOPO_PRIMARY_M));
+       ice_debug(hw, ICE_DBG_INIT, "dev caps: nac topology is_dual = %d\n",
+                 !!(dev_p->nac_topo.mode & ICE_NAC_TOPO_DUAL_M));
+       ice_debug(hw, ICE_DBG_INIT, "dev caps: nac topology id = %d\n",
+                 dev_p->nac_topo.id);
+}
+
 /**
  * ice_parse_dev_caps - Parse device capabilities
  * @hw: pointer to the HW struct
@@ -2644,6 +2672,9 @@ ice_parse_dev_caps(struct ice_hw *hw, struct ice_hw_dev_caps *dev_p,
                case ICE_AQC_CAPS_SENSOR_READING:
                        ice_parse_sensor_reading_cap(hw, dev_p, &cap_resp[i]);
                        break;
+               case ICE_AQC_CAPS_NAC_TOPOLOGY:
+                       ice_parse_nac_topo_dev_caps(hw, dev_p, &cap_resp[i]);
+                       break;
                default:
                        /* Don't list common capabilities as unknown */
                        if (!found)
index 39d8fc08d651da738c5547f3dc6def050ce68100..841860784e3ce9c67862f50bbd98341cec5ff26d 100644 (file)
@@ -374,6 +374,15 @@ struct ice_ts_dev_info {
        u8 ts_ll_int_read;
 };
 
+#define ICE_NAC_TOPO_PRIMARY_M BIT(0)
+#define ICE_NAC_TOPO_DUAL_M    BIT(1)
+#define ICE_NAC_TOPO_ID_M      GENMASK(0xF, 0)
+
+struct ice_nac_topology {
+       u32 mode;
+       u8 id;
+};
+
 /* Function specific capabilities */
 struct ice_hw_func_caps {
        struct ice_hw_common_caps common_cap;
@@ -395,6 +404,7 @@ struct ice_hw_dev_caps {
        u32 num_flow_director_fltr;     /* Number of FD filters available */
        struct ice_ts_dev_info ts_dev_info;
        u32 num_funcs;
+       struct ice_nac_topology nac_topo;
        /* bitmap of supported sensors
         * bit 0 - internal temperature sensor
         * bit 31:1 - Reserved