i40e: Use DECLARE_BITMAP for flags field in i40e_hw
authorIvan Vecera <ivecera@redhat.com>
Mon, 13 Nov 2023 23:10:26 +0000 (15:10 -0800)
committerJakub Kicinski <kuba@kernel.org>
Wed, 15 Nov 2023 04:05:44 +0000 (20:05 -0800)
Convert flags field in i40e_hw from u64 to bitmap and its usage
to use bit access functions and rename the field to 'caps' as
this field describes capabilities that are set once on init and
read many times later.

Changes:
- Convert "hw_ptr->flags & FLAG" to "test_bit(FLAG, ...)"
- Convert "hw_ptr->flags |= FLAG" to "set_bit(FLAG, ...)"
- Convert "hw_ptr->flags &= ~FLAG" to "clear_bit(FLAG, ...)"
- Rename i40e_hw.flags to i40e_hw.caps
- Rename i40e_set_hw_flags() to i40e_set_hw_caps()
- Adjust caps names so they are prefixed by I40E_HW_CAP_ and existing
  _CAPABLE suffixes are stripped

Signed-off-by: Ivan Vecera <ivecera@redhat.com>
Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
Tested-by: Pucha Himasekhar Reddy <himasekharx.reddy.pucha@intel.com> (A Contingent worker at Intel)
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
Link: https://lore.kernel.org/r/20231113231047.548659-8-anthony.l.nguyen@intel.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/intel/i40e/i40e_adminq.c
drivers/net/ethernet/intel/i40e/i40e_common.c
drivers/net/ethernet/intel/i40e/i40e_dcb.c
drivers/net/ethernet/intel/i40e/i40e_ethtool.c
drivers/net/ethernet/intel/i40e/i40e_main.c
drivers/net/ethernet/intel/i40e/i40e_nvm.c
drivers/net/ethernet/intel/i40e/i40e_type.h

index 9a5a47b29bb753709a166764e4bc20f9d836ca97..6754f6b3508cd113e0d32d58abd5827a1f15ee1d 100644 (file)
@@ -503,44 +503,44 @@ shutdown_arq_out:
 }
 
 /**
- *  i40e_set_hw_flags - set HW flags
+ *  i40e_set_hw_caps - set HW flags
  *  @hw: pointer to the hardware structure
  **/
-static void i40e_set_hw_flags(struct i40e_hw *hw)
+static void i40e_set_hw_caps(struct i40e_hw *hw)
 {
        struct i40e_adminq_info *aq = &hw->aq;
 
-       hw->flags = 0;
+       bitmap_zero(hw->caps, I40E_HW_CAPS_NBITS);
 
        switch (hw->mac.type) {
        case I40E_MAC_XL710:
                if (aq->api_maj_ver > 1 ||
                    (aq->api_maj_ver == 1 &&
                     aq->api_min_ver >= I40E_MINOR_VER_GET_LINK_INFO_XL710)) {
-                       hw->flags |= I40E_HW_FLAG_AQ_PHY_ACCESS_CAPABLE;
-                       hw->flags |= I40E_HW_FLAG_FW_LLDP_STOPPABLE;
+                       set_bit(I40E_HW_CAP_AQ_PHY_ACCESS, hw->caps);
+                       set_bit(I40E_HW_CAP_FW_LLDP_STOPPABLE, hw->caps);
                        /* The ability to RX (not drop) 802.1ad frames */
-                       hw->flags |= I40E_HW_FLAG_802_1AD_CAPABLE;
+                       set_bit(I40E_HW_CAP_802_1AD, hw->caps);
                }
                break;
        case I40E_MAC_X722:
-               hw->flags |= I40E_HW_FLAG_AQ_SRCTL_ACCESS_ENABLE |
-                            I40E_HW_FLAG_NVM_READ_REQUIRES_LOCK;
+               set_bit(I40E_HW_CAP_AQ_SRCTL_ACCESS_ENABLE, hw->caps);
+               set_bit(I40E_HW_CAP_NVM_READ_REQUIRES_LOCK, hw->caps);
 
                if (aq->api_maj_ver > 1 ||
                    (aq->api_maj_ver == 1 &&
                     aq->api_min_ver >= I40E_MINOR_VER_FW_LLDP_STOPPABLE_X722))
-                       hw->flags |= I40E_HW_FLAG_FW_LLDP_STOPPABLE;
+                       set_bit(I40E_HW_CAP_FW_LLDP_STOPPABLE, hw->caps);
 
                if (aq->api_maj_ver > 1 ||
                    (aq->api_maj_ver == 1 &&
                     aq->api_min_ver >= I40E_MINOR_VER_GET_LINK_INFO_X722))
-                       hw->flags |= I40E_HW_FLAG_AQ_PHY_ACCESS_CAPABLE;
+                       set_bit(I40E_HW_CAP_AQ_PHY_ACCESS, hw->caps);
 
                if (aq->api_maj_ver > 1 ||
                    (aq->api_maj_ver == 1 &&
                     aq->api_min_ver >= I40E_MINOR_VER_FW_REQUEST_FEC_X722))
-                       hw->flags |= I40E_HW_FLAG_X722_FEC_REQUEST_CAPABLE;
+                       set_bit(I40E_HW_CAP_X722_FEC_REQUEST, hw->caps);
 
                fallthrough;
        default:
@@ -551,17 +551,17 @@ static void i40e_set_hw_flags(struct i40e_hw *hw)
        if (aq->api_maj_ver > 1 ||
            (aq->api_maj_ver == 1 &&
             aq->api_min_ver >= 5))
-               hw->flags |= I40E_HW_FLAG_NVM_READ_REQUIRES_LOCK;
+               set_bit(I40E_HW_CAP_NVM_READ_REQUIRES_LOCK, hw->caps);
 
        if (aq->api_maj_ver > 1 ||
            (aq->api_maj_ver == 1 &&
             aq->api_min_ver >= 8))
-               hw->flags |= I40E_HW_FLAG_FW_LLDP_PERSISTENT;
+               set_bit(I40E_HW_CAP_FW_LLDP_PERSISTENT, hw->caps);
 
        if (aq->api_maj_ver > 1 ||
            (aq->api_maj_ver == 1 &&
             aq->api_min_ver >= 9))
-               hw->flags |= I40E_HW_FLAG_AQ_PHY_ACCESS_EXTENDED;
+               set_bit(I40E_HW_CAP_AQ_PHY_ACCESS_EXTENDED, hw->caps);
 }
 
 /**
@@ -631,7 +631,7 @@ int i40e_init_adminq(struct i40e_hw *hw)
        /* Some features were introduced in different FW API version
         * for different MAC type.
         */
-       i40e_set_hw_flags(hw);
+       i40e_set_hw_caps(hw);
 
        /* get the NVM version info */
        i40e_read_nvm_word(hw, I40E_SR_NVM_DEV_STARTER_VERSION,
@@ -649,20 +649,20 @@ int i40e_init_adminq(struct i40e_hw *hw)
        if (hw->mac.type == I40E_MAC_XL710 &&
            hw->aq.api_maj_ver == I40E_FW_API_VERSION_MAJOR &&
            hw->aq.api_min_ver >= I40E_MINOR_VER_GET_LINK_INFO_XL710) {
-               hw->flags |= I40E_HW_FLAG_AQ_PHY_ACCESS_CAPABLE;
-               hw->flags |= I40E_HW_FLAG_FW_LLDP_STOPPABLE;
+               set_bit(I40E_HW_CAP_AQ_PHY_ACCESS, hw->caps);
+               set_bit(I40E_HW_CAP_FW_LLDP_STOPPABLE, hw->caps);
        }
        if (hw->mac.type == I40E_MAC_X722 &&
            hw->aq.api_maj_ver == I40E_FW_API_VERSION_MAJOR &&
            hw->aq.api_min_ver >= I40E_MINOR_VER_FW_LLDP_STOPPABLE_X722) {
-               hw->flags |= I40E_HW_FLAG_FW_LLDP_STOPPABLE;
+               set_bit(I40E_HW_CAP_FW_LLDP_STOPPABLE, hw->caps);
        }
 
        /* The ability to RX (not drop) 802.1ad frames was added in API 1.7 */
        if (hw->aq.api_maj_ver > 1 ||
            (hw->aq.api_maj_ver == 1 &&
             hw->aq.api_min_ver >= 7))
-               hw->flags |= I40E_HW_FLAG_802_1AD_CAPABLE;
+               set_bit(I40E_HW_CAP_802_1AD, hw->caps);
 
        if (hw->aq.api_maj_ver > I40E_FW_API_VERSION_MAJOR) {
                ret_code = -EIO;
index d7e24d661724a244d667ad04011eadb4c35c5919..7fce881abc93ca7e54f1824c91ff8fdfad8e12c8 100644 (file)
@@ -1650,7 +1650,7 @@ int i40e_aq_get_link_info(struct i40e_hw *hw,
             hw->aq.fw_min_ver < 40)) && hw_link_info->phy_type == 0xE)
                hw_link_info->phy_type = I40E_PHY_TYPE_10GBASE_SFPP_CU;
 
-       if (hw->flags & I40E_HW_FLAG_AQ_PHY_ACCESS_CAPABLE &&
+       if (test_bit(I40E_HW_CAP_AQ_PHY_ACCESS, hw->caps) &&
            hw->mac.type != I40E_MAC_X722) {
                __le32 tmp;
 
@@ -2253,7 +2253,7 @@ int i40e_aq_set_switch_config(struct i40e_hw *hw,
        scfg->flags = cpu_to_le16(flags);
        scfg->valid_flags = cpu_to_le16(valid_flags);
        scfg->mode = mode;
-       if (hw->flags & I40E_HW_FLAG_802_1AD_CAPABLE) {
+       if (test_bit(I40E_HW_CAP_802_1AD, hw->caps)) {
                scfg->switch_tag = cpu_to_le16(hw->switch_tag);
                scfg->first_tag = cpu_to_le16(hw->first_tag);
                scfg->second_tag = cpu_to_le16(hw->second_tag);
@@ -3637,7 +3637,7 @@ i40e_aq_restore_lldp(struct i40e_hw *hw, u8 *setting, bool restore,
                (struct i40e_aqc_lldp_restore *)&desc.params.raw;
        int status;
 
-       if (!(hw->flags & I40E_HW_FLAG_FW_LLDP_PERSISTENT)) {
+       if (!test_bit(I40E_HW_CAP_FW_LLDP_PERSISTENT, hw->caps)) {
                i40e_debug(hw, I40E_DEBUG_ALL,
                           "Restore LLDP not supported by current FW version.\n");
                return -ENODEV;
@@ -3680,7 +3680,7 @@ int i40e_aq_stop_lldp(struct i40e_hw *hw, bool shutdown_agent,
                cmd->command |= I40E_AQ_LLDP_AGENT_SHUTDOWN;
 
        if (persist) {
-               if (hw->flags & I40E_HW_FLAG_FW_LLDP_PERSISTENT)
+               if (test_bit(I40E_HW_CAP_FW_LLDP_PERSISTENT, hw->caps))
                        cmd->command |= I40E_AQ_LLDP_AGENT_STOP_PERSIST;
                else
                        i40e_debug(hw, I40E_DEBUG_ALL,
@@ -3713,7 +3713,7 @@ int i40e_aq_start_lldp(struct i40e_hw *hw, bool persist,
        cmd->command = I40E_AQ_LLDP_AGENT_START;
 
        if (persist) {
-               if (hw->flags & I40E_HW_FLAG_FW_LLDP_PERSISTENT)
+               if (test_bit(I40E_HW_CAP_FW_LLDP_PERSISTENT, hw->caps))
                        cmd->command |= I40E_AQ_LLDP_AGENT_START_PERSIST;
                else
                        i40e_debug(hw, I40E_DEBUG_ALL,
@@ -3741,7 +3741,7 @@ i40e_aq_set_dcb_parameters(struct i40e_hw *hw, bool dcb_enable,
                (struct i40e_aqc_set_dcb_parameters *)&desc.params.raw;
        int status;
 
-       if (!(hw->flags & I40E_HW_FLAG_FW_LLDP_STOPPABLE))
+       if (!test_bit(I40E_HW_CAP_FW_LLDP_STOPPABLE, hw->caps))
                return -ENODEV;
 
        i40e_fill_default_direct_cmd_desc(&desc,
@@ -5043,7 +5043,7 @@ static int i40e_led_get_reg(struct i40e_hw *hw, u16 led_addr,
        u32 i;
 
        *reg_val = 0;
-       if (hw->flags & I40E_HW_FLAG_AQ_PHY_ACCESS_CAPABLE) {
+       if (test_bit(I40E_HW_CAP_AQ_PHY_ACCESS, hw->caps)) {
                status =
                       i40e_aq_get_phy_register(hw,
                                                I40E_AQ_PHY_REG_ACCESS_EXTERNAL,
@@ -5076,7 +5076,7 @@ static int i40e_led_set_reg(struct i40e_hw *hw, u16 led_addr,
        int status;
        u32 i;
 
-       if (hw->flags & I40E_HW_FLAG_AQ_PHY_ACCESS_CAPABLE) {
+       if (test_bit(I40E_HW_CAP_AQ_PHY_ACCESS, hw->caps)) {
                status =
                       i40e_aq_set_phy_register(hw,
                                                I40E_AQ_PHY_REG_ACCESS_EXTERNAL,
@@ -5115,7 +5115,7 @@ int i40e_led_get_phy(struct i40e_hw *hw, u16 *led_addr,
        u8 port_num;
        u32 i;
 
-       if (hw->flags & I40E_HW_FLAG_AQ_PHY_ACCESS_CAPABLE) {
+       if (test_bit(I40E_HW_CAP_AQ_PHY_ACCESS, hw->caps)) {
                status =
                      i40e_aq_get_phy_register(hw,
                                               I40E_AQ_PHY_REG_ACCESS_EXTERNAL,
@@ -5335,7 +5335,7 @@ static void i40e_mdio_if_number_selection(struct i40e_hw *hw, bool set_mdio,
                                          struct i40e_aqc_phy_register_access *cmd)
 {
        if (set_mdio && cmd->phy_interface == I40E_AQ_PHY_REG_ACCESS_EXTERNAL) {
-               if (hw->flags & I40E_HW_FLAG_AQ_PHY_ACCESS_EXTENDED)
+               if (test_bit(I40E_HW_CAP_AQ_PHY_ACCESS_EXTENDED, hw->caps))
                        cmd->cmd_flags |=
                                I40E_AQ_PHY_REG_ACCESS_SET_MDIO_IF_NUMBER |
                                ((mdio_num <<
index 68602fc375f6202ef99866bb98fec30f79b32fbc..39e44a2e0677e859df617985ef859121941542ca 100644 (file)
@@ -877,7 +877,7 @@ int i40e_init_dcb(struct i40e_hw *hw, bool enable_mib_change)
                return -EOPNOTSUPP;
 
        /* Read LLDP NVM area */
-       if (hw->flags & I40E_HW_FLAG_FW_LLDP_PERSISTENT) {
+       if (test_bit(I40E_HW_CAP_FW_LLDP_PERSISTENT, hw->caps)) {
                u8 offset = 0;
 
                if (hw->mac.type == I40E_MAC_XL710)
index a06062c2e84d0dd4cfb0c19ec88f4768e2229cd5..b4cc9bb4bc4e1fb3a0f27459a6dc9fd2626476ef 100644 (file)
@@ -1595,7 +1595,7 @@ static int i40e_set_fec_param(struct net_device *netdev,
                return -EPERM;
 
        if (hw->mac.type == I40E_MAC_X722 &&
-           !(hw->flags & I40E_HW_FLAG_X722_FEC_REQUEST_CAPABLE)) {
+           !test_bit(I40E_HW_CAP_X722_FEC_REQUEST, hw->caps)) {
                netdev_err(netdev, "Setting FEC encoding not supported by firmware. Please update the NVM image.\n");
                return -EOPNOTSUPP;
        }
@@ -2831,7 +2831,7 @@ static int i40e_set_phys_id(struct net_device *netdev,
                if (!test_bit(I40E_HW_PHY_CONTROLS_LEDS, pf->hw_features)) {
                        pf->led_status = i40e_led_get(hw);
                } else {
-                       if (!(hw->flags & I40E_HW_FLAG_AQ_PHY_ACCESS_CAPABLE))
+                       if (!test_bit(I40E_HW_CAP_AQ_PHY_ACCESS, hw->caps))
                                i40e_aq_set_phy_debug(hw, I40E_PHY_DEBUG_ALL,
                                                      NULL);
                        ret = i40e_led_get_phy(hw, &temp_status,
@@ -2858,7 +2858,7 @@ static int i40e_set_phys_id(struct net_device *netdev,
                        ret = i40e_led_set_phy(hw, false, pf->led_status,
                                               (pf->phy_led_val |
                                               I40E_PHY_LED_MODE_ORIG));
-                       if (!(hw->flags & I40E_HW_FLAG_AQ_PHY_ACCESS_CAPABLE))
+                       if (!test_bit(I40E_HW_CAP_AQ_PHY_ACCESS, hw->caps))
                                i40e_aq_set_phy_debug(hw, 0, NULL);
                }
                break;
@@ -5340,7 +5340,7 @@ flags_complete:
         * LLDP with this flag on unsupported FW versions.
         */
        if (test_bit(I40E_FLAG_FW_LLDP_DIS, changed_flags) &&
-           (!(pf->hw.flags & I40E_HW_FLAG_FW_LLDP_STOPPABLE))) {
+           !test_bit(I40E_HW_CAP_FW_LLDP_STOPPABLE, pf->hw.caps)) {
                dev_warn(&pf->pdev->dev,
                         "Device does not support changing FW LLDP\n");
                return -EOPNOTSUPP;
@@ -5511,7 +5511,7 @@ static int i40e_get_module_info(struct net_device *netdev,
        int status;
 
        /* Check if firmware supports reading module EEPROM. */
-       if (!(hw->flags & I40E_HW_FLAG_AQ_PHY_ACCESS_CAPABLE)) {
+       if (!test_bit(I40E_HW_CAP_AQ_PHY_ACCESS, hw->caps)) {
                netdev_err(vsi->netdev, "Module EEPROM memory read not supported. Please update the NVM image.\n");
                return -EINVAL;
        }
index 1c84136b94826d853d4bf6bbb4ce9974d36ba89e..7523ac4bd430bb62027e5a0445b8c2d1952ab5ec 100644 (file)
@@ -12856,8 +12856,8 @@ static int i40e_sw_init(struct i40e_pf *pf)
         */
        if (pf->hw.mac.type == I40E_MAC_XL710 &&
            pf->hw.func_caps.npar_enable &&
-           (pf->hw.flags & I40E_HW_FLAG_FW_LLDP_STOPPABLE))
-               pf->hw.flags &= ~I40E_HW_FLAG_FW_LLDP_STOPPABLE;
+           test_bit(I40E_HW_CAP_FW_LLDP_STOPPABLE, pf->hw.caps))
+               clear_bit(I40E_HW_CAP_FW_LLDP_STOPPABLE, pf->hw.caps);
 
 #ifdef CONFIG_PCI_IOV
        if (pf->hw.func_caps.num_vfs && pf->hw.partition_id == 1) {
index 77cdbfc19d477a376690456e59cdb7265aed2f97..62eb34871094f56249433277e7e73c1036606d7d 100644 (file)
@@ -291,7 +291,7 @@ static int i40e_read_nvm_word_aq(struct i40e_hw *hw, u16 offset,
 static int __i40e_read_nvm_word(struct i40e_hw *hw,
                                u16 offset, u16 *data)
 {
-       if (hw->flags & I40E_HW_FLAG_AQ_SRCTL_ACCESS_ENABLE)
+       if (test_bit(I40E_HW_CAP_AQ_SRCTL_ACCESS_ENABLE, hw->caps))
                return i40e_read_nvm_word_aq(hw, offset, data);
 
        return i40e_read_nvm_word_srctl(hw, offset, data);
@@ -310,14 +310,14 @@ int i40e_read_nvm_word(struct i40e_hw *hw, u16 offset,
 {
        int ret_code = 0;
 
-       if (hw->flags & I40E_HW_FLAG_NVM_READ_REQUIRES_LOCK)
+       if (test_bit(I40E_HW_CAP_NVM_READ_REQUIRES_LOCK, hw->caps))
                ret_code = i40e_acquire_nvm(hw, I40E_RESOURCE_READ);
        if (ret_code)
                return ret_code;
 
        ret_code = __i40e_read_nvm_word(hw, offset, data);
 
-       if (hw->flags & I40E_HW_FLAG_NVM_READ_REQUIRES_LOCK)
+       if (test_bit(I40E_HW_CAP_NVM_READ_REQUIRES_LOCK, hw->caps))
                i40e_release_nvm(hw);
 
        return ret_code;
@@ -499,7 +499,7 @@ static int __i40e_read_nvm_buffer(struct i40e_hw *hw,
                                  u16 offset, u16 *words,
                                  u16 *data)
 {
-       if (hw->flags & I40E_HW_FLAG_AQ_SRCTL_ACCESS_ENABLE)
+       if (test_bit(I40E_HW_CAP_AQ_SRCTL_ACCESS_ENABLE, hw->caps))
                return i40e_read_nvm_buffer_aq(hw, offset, words, data);
 
        return i40e_read_nvm_buffer_srctl(hw, offset, words, data);
@@ -521,7 +521,7 @@ int i40e_read_nvm_buffer(struct i40e_hw *hw, u16 offset,
 {
        int ret_code = 0;
 
-       if (hw->flags & I40E_HW_FLAG_AQ_SRCTL_ACCESS_ENABLE) {
+       if (test_bit(I40E_HW_CAP_AQ_SRCTL_ACCESS_ENABLE, hw->caps)) {
                ret_code = i40e_acquire_nvm(hw, I40E_RESOURCE_READ);
                if (!ret_code) {
                        ret_code = i40e_read_nvm_buffer_aq(hw, offset, words,
index 060aac35d9454d52ec0b91c50b603829c16d3a01..889bc240473832d65dc7070bd3b94f3a8bc4a3ea 100644 (file)
@@ -482,6 +482,18 @@ struct i40e_dcbx_config {
        struct i40e_dcb_app_priority_table app[I40E_DCBX_MAX_APPS];
 };
 
+enum i40e_hw_flags {
+       I40E_HW_CAP_AQ_SRCTL_ACCESS_ENABLE,
+       I40E_HW_CAP_802_1AD,
+       I40E_HW_CAP_AQ_PHY_ACCESS,
+       I40E_HW_CAP_NVM_READ_REQUIRES_LOCK,
+       I40E_HW_CAP_FW_LLDP_STOPPABLE,
+       I40E_HW_CAP_FW_LLDP_PERSISTENT,
+       I40E_HW_CAP_AQ_PHY_ACCESS_EXTENDED,
+       I40E_HW_CAP_X722_FEC_REQUEST,
+       I40E_HW_CAPS_NBITS,
+};
+
 /* Port hardware description */
 struct i40e_hw {
        u8 __iomem *hw_addr;
@@ -546,15 +558,7 @@ struct i40e_hw {
        struct i40e_dcbx_config remote_dcbx_config; /* Peer Cfg */
        struct i40e_dcbx_config desired_dcbx_config; /* CEE Desired Cfg */
 
-#define I40E_HW_FLAG_AQ_SRCTL_ACCESS_ENABLE BIT_ULL(0)
-#define I40E_HW_FLAG_802_1AD_CAPABLE        BIT_ULL(1)
-#define I40E_HW_FLAG_AQ_PHY_ACCESS_CAPABLE  BIT_ULL(2)
-#define I40E_HW_FLAG_NVM_READ_REQUIRES_LOCK BIT_ULL(3)
-#define I40E_HW_FLAG_FW_LLDP_STOPPABLE      BIT_ULL(4)
-#define I40E_HW_FLAG_FW_LLDP_PERSISTENT     BIT_ULL(5)
-#define I40E_HW_FLAG_AQ_PHY_ACCESS_EXTENDED BIT_ULL(6)
-#define I40E_HW_FLAG_X722_FEC_REQUEST_CAPABLE BIT_ULL(7)
-       u64 flags;
+       DECLARE_BITMAP(caps, I40E_HW_CAPS_NBITS);
 
        /* Used in set switch config AQ command */
        u16 switch_tag;