diff options
| -rw-r--r-- | drivers/net/ethernet/intel/ice/ice.h | 15 | ||||
| -rw-r--r-- | drivers/net/ethernet/intel/ice/ice_adminq_cmd.h | 25 | ||||
| -rw-r--r-- | drivers/net/ethernet/intel/ice/ice_common.c | 30 | ||||
| -rw-r--r-- | drivers/net/ethernet/intel/ice/ice_controlq.c | 29 | ||||
| -rw-r--r-- | drivers/net/ethernet/intel/ice/ice_ethtool.c | 52 | ||||
| -rw-r--r-- | drivers/net/ethernet/intel/ice/ice_hw_autogen.h | 8 | ||||
| -rw-r--r-- | drivers/net/ethernet/intel/ice/ice_lan_tx_rx.h | 1 | ||||
| -rw-r--r-- | drivers/net/ethernet/intel/ice/ice_main.c | 115 | ||||
| -rw-r--r-- | drivers/net/ethernet/intel/ice/ice_nvm.c | 5 | ||||
| -rw-r--r-- | drivers/net/ethernet/intel/ice/ice_sched.c | 3 | ||||
| -rw-r--r-- | drivers/net/ethernet/intel/ice/ice_switch.c | 4 | ||||
| -rw-r--r-- | drivers/net/ethernet/intel/ice/ice_switch.h | 6 | ||||
| -rw-r--r-- | drivers/net/ethernet/intel/ice/ice_txrx.h | 2 | ||||
| -rw-r--r-- | drivers/net/ethernet/intel/ice/ice_type.h | 16 |
14 files changed, 185 insertions, 126 deletions
diff --git a/drivers/net/ethernet/intel/ice/ice.h b/drivers/net/ethernet/intel/ice/ice.h index d8b5fff581e7..868f4a1d0f72 100644 --- a/drivers/net/ethernet/intel/ice/ice.h +++ b/drivers/net/ethernet/intel/ice/ice.h | |||
| @@ -89,6 +89,13 @@ extern const char ice_drv_ver[]; | |||
| 89 | #define ice_for_each_rxq(vsi, i) \ | 89 | #define ice_for_each_rxq(vsi, i) \ |
| 90 | for ((i) = 0; (i) < (vsi)->num_rxq; (i)++) | 90 | for ((i) = 0; (i) < (vsi)->num_rxq; (i)++) |
| 91 | 91 | ||
| 92 | /* Macros for each allocated tx/rx ring whether used or not in a VSI */ | ||
| 93 | #define ice_for_each_alloc_txq(vsi, i) \ | ||
| 94 | for ((i) = 0; (i) < (vsi)->alloc_txq; (i)++) | ||
| 95 | |||
| 96 | #define ice_for_each_alloc_rxq(vsi, i) \ | ||
| 97 | for ((i) = 0; (i) < (vsi)->alloc_rxq; (i)++) | ||
| 98 | |||
| 92 | struct ice_tc_info { | 99 | struct ice_tc_info { |
| 93 | u16 qoffset; | 100 | u16 qoffset; |
| 94 | u16 qcount; | 101 | u16 qcount; |
| @@ -189,9 +196,9 @@ struct ice_vsi { | |||
| 189 | struct list_head tmp_sync_list; /* MAC filters to be synced */ | 196 | struct list_head tmp_sync_list; /* MAC filters to be synced */ |
| 190 | struct list_head tmp_unsync_list; /* MAC filters to be unsynced */ | 197 | struct list_head tmp_unsync_list; /* MAC filters to be unsynced */ |
| 191 | 198 | ||
| 192 | bool irqs_ready; | 199 | u8 irqs_ready; |
| 193 | bool current_isup; /* Sync 'link up' logging */ | 200 | u8 current_isup; /* Sync 'link up' logging */ |
| 194 | bool stat_offsets_loaded; | 201 | u8 stat_offsets_loaded; |
| 195 | 202 | ||
| 196 | /* queue information */ | 203 | /* queue information */ |
| 197 | u8 tx_mapping_mode; /* ICE_MAP_MODE_[CONTIG|SCATTER] */ | 204 | u8 tx_mapping_mode; /* ICE_MAP_MODE_[CONTIG|SCATTER] */ |
| @@ -262,7 +269,7 @@ struct ice_pf { | |||
| 262 | struct ice_hw_port_stats stats; | 269 | struct ice_hw_port_stats stats; |
| 263 | struct ice_hw_port_stats stats_prev; | 270 | struct ice_hw_port_stats stats_prev; |
| 264 | struct ice_hw hw; | 271 | struct ice_hw hw; |
| 265 | bool stat_prev_loaded; /* has previous stats been loaded */ | 272 | u8 stat_prev_loaded; /* has previous stats been loaded */ |
| 266 | char int_name[ICE_INT_NAME_STR_LEN]; | 273 | char int_name[ICE_INT_NAME_STR_LEN]; |
| 267 | }; | 274 | }; |
| 268 | 275 | ||
diff --git a/drivers/net/ethernet/intel/ice/ice_adminq_cmd.h b/drivers/net/ethernet/intel/ice/ice_adminq_cmd.h index 7541ec2270b3..a0614f472658 100644 --- a/drivers/net/ethernet/intel/ice/ice_adminq_cmd.h +++ b/drivers/net/ethernet/intel/ice/ice_adminq_cmd.h | |||
| @@ -329,19 +329,19 @@ struct ice_aqc_vsi_props { | |||
| 329 | /* VLAN section */ | 329 | /* VLAN section */ |
| 330 | __le16 pvid; /* VLANS include priority bits */ | 330 | __le16 pvid; /* VLANS include priority bits */ |
| 331 | u8 pvlan_reserved[2]; | 331 | u8 pvlan_reserved[2]; |
| 332 | u8 port_vlan_flags; | 332 | u8 vlan_flags; |
| 333 | #define ICE_AQ_VSI_PVLAN_MODE_S 0 | 333 | #define ICE_AQ_VSI_VLAN_MODE_S 0 |
| 334 | #define ICE_AQ_VSI_PVLAN_MODE_M (0x3 << ICE_AQ_VSI_PVLAN_MODE_S) | 334 | #define ICE_AQ_VSI_VLAN_MODE_M (0x3 << ICE_AQ_VSI_VLAN_MODE_S) |
| 335 | #define ICE_AQ_VSI_PVLAN_MODE_UNTAGGED 0x1 | 335 | #define ICE_AQ_VSI_VLAN_MODE_UNTAGGED 0x1 |
| 336 | #define ICE_AQ_VSI_PVLAN_MODE_TAGGED 0x2 | 336 | #define ICE_AQ_VSI_VLAN_MODE_TAGGED 0x2 |
| 337 | #define ICE_AQ_VSI_PVLAN_MODE_ALL 0x3 | 337 | #define ICE_AQ_VSI_VLAN_MODE_ALL 0x3 |
| 338 | #define ICE_AQ_VSI_PVLAN_INSERT_PVID BIT(2) | 338 | #define ICE_AQ_VSI_PVLAN_INSERT_PVID BIT(2) |
| 339 | #define ICE_AQ_VSI_PVLAN_EMOD_S 3 | 339 | #define ICE_AQ_VSI_VLAN_EMOD_S 3 |
| 340 | #define ICE_AQ_VSI_PVLAN_EMOD_M (0x3 << ICE_AQ_VSI_PVLAN_EMOD_S) | 340 | #define ICE_AQ_VSI_VLAN_EMOD_M (0x3 << ICE_AQ_VSI_VLAN_EMOD_S) |
| 341 | #define ICE_AQ_VSI_PVLAN_EMOD_STR_BOTH (0x0 << ICE_AQ_VSI_PVLAN_EMOD_S) | 341 | #define ICE_AQ_VSI_VLAN_EMOD_STR_BOTH (0x0 << ICE_AQ_VSI_VLAN_EMOD_S) |
| 342 | #define ICE_AQ_VSI_PVLAN_EMOD_STR_UP (0x1 << ICE_AQ_VSI_PVLAN_EMOD_S) | 342 | #define ICE_AQ_VSI_VLAN_EMOD_STR_UP (0x1 << ICE_AQ_VSI_VLAN_EMOD_S) |
| 343 | #define ICE_AQ_VSI_PVLAN_EMOD_STR (0x2 << ICE_AQ_VSI_PVLAN_EMOD_S) | 343 | #define ICE_AQ_VSI_VLAN_EMOD_STR (0x2 << ICE_AQ_VSI_VLAN_EMOD_S) |
| 344 | #define ICE_AQ_VSI_PVLAN_EMOD_NOTHING (0x3 << ICE_AQ_VSI_PVLAN_EMOD_S) | 344 | #define ICE_AQ_VSI_VLAN_EMOD_NOTHING (0x3 << ICE_AQ_VSI_VLAN_EMOD_S) |
| 345 | u8 pvlan_reserved2[3]; | 345 | u8 pvlan_reserved2[3]; |
| 346 | /* ingress egress up sections */ | 346 | /* ingress egress up sections */ |
| 347 | __le32 ingress_table; /* bitmap, 3 bits per up */ | 347 | __le32 ingress_table; /* bitmap, 3 bits per up */ |
| @@ -594,6 +594,7 @@ struct ice_sw_rule_lg_act { | |||
| 594 | #define ICE_LG_ACT_GENERIC_OFFSET_M (0x7 << ICE_LG_ACT_GENERIC_OFFSET_S) | 594 | #define ICE_LG_ACT_GENERIC_OFFSET_M (0x7 << ICE_LG_ACT_GENERIC_OFFSET_S) |
| 595 | #define ICE_LG_ACT_GENERIC_PRIORITY_S 22 | 595 | #define ICE_LG_ACT_GENERIC_PRIORITY_S 22 |
| 596 | #define ICE_LG_ACT_GENERIC_PRIORITY_M (0x7 << ICE_LG_ACT_GENERIC_PRIORITY_S) | 596 | #define ICE_LG_ACT_GENERIC_PRIORITY_M (0x7 << ICE_LG_ACT_GENERIC_PRIORITY_S) |
| 597 | #define ICE_LG_ACT_GENERIC_OFF_RX_DESC_PROF_IDX 7 | ||
| 597 | 598 | ||
| 598 | /* Action = 7 - Set Stat count */ | 599 | /* Action = 7 - Set Stat count */ |
| 599 | #define ICE_LG_ACT_STAT_COUNT 0x7 | 600 | #define ICE_LG_ACT_STAT_COUNT 0x7 |
diff --git a/drivers/net/ethernet/intel/ice/ice_common.c b/drivers/net/ethernet/intel/ice/ice_common.c index 71d032cc5fa7..661beea6af79 100644 --- a/drivers/net/ethernet/intel/ice/ice_common.c +++ b/drivers/net/ethernet/intel/ice/ice_common.c | |||
| @@ -45,6 +45,9 @@ static enum ice_status ice_set_mac_type(struct ice_hw *hw) | |||
| 45 | /** | 45 | /** |
| 46 | * ice_clear_pf_cfg - Clear PF configuration | 46 | * ice_clear_pf_cfg - Clear PF configuration |
| 47 | * @hw: pointer to the hardware structure | 47 | * @hw: pointer to the hardware structure |
| 48 | * | ||
| 49 | * Clears any existing PF configuration (VSIs, VSI lists, switch rules, port | ||
| 50 | * configuration, flow director filters, etc.). | ||
| 48 | */ | 51 | */ |
| 49 | enum ice_status ice_clear_pf_cfg(struct ice_hw *hw) | 52 | enum ice_status ice_clear_pf_cfg(struct ice_hw *hw) |
| 50 | { | 53 | { |
| @@ -1483,7 +1486,7 @@ enum ice_status ice_get_link_status(struct ice_port_info *pi, bool *link_up) | |||
| 1483 | struct ice_phy_info *phy_info; | 1486 | struct ice_phy_info *phy_info; |
| 1484 | enum ice_status status = 0; | 1487 | enum ice_status status = 0; |
| 1485 | 1488 | ||
| 1486 | if (!pi) | 1489 | if (!pi || !link_up) |
| 1487 | return ICE_ERR_PARAM; | 1490 | return ICE_ERR_PARAM; |
| 1488 | 1491 | ||
| 1489 | phy_info = &pi->phy; | 1492 | phy_info = &pi->phy; |
| @@ -1619,20 +1622,23 @@ __ice_aq_get_set_rss_lut(struct ice_hw *hw, u16 vsi_id, u8 lut_type, u8 *lut, | |||
| 1619 | } | 1622 | } |
| 1620 | 1623 | ||
| 1621 | /* LUT size is only valid for Global and PF table types */ | 1624 | /* LUT size is only valid for Global and PF table types */ |
| 1622 | if (lut_size == ICE_AQC_GSET_RSS_LUT_TABLE_SIZE_128) { | 1625 | switch (lut_size) { |
| 1623 | flags |= (ICE_AQC_GSET_RSS_LUT_TABLE_SIZE_128_FLAG << | 1626 | case ICE_AQC_GSET_RSS_LUT_TABLE_SIZE_128: |
| 1624 | ICE_AQC_GSET_RSS_LUT_TABLE_SIZE_S) & | 1627 | break; |
| 1625 | ICE_AQC_GSET_RSS_LUT_TABLE_SIZE_M; | 1628 | case ICE_AQC_GSET_RSS_LUT_TABLE_SIZE_512: |
| 1626 | } else if (lut_size == ICE_AQC_GSET_RSS_LUT_TABLE_SIZE_512) { | ||
| 1627 | flags |= (ICE_AQC_GSET_RSS_LUT_TABLE_SIZE_512_FLAG << | 1629 | flags |= (ICE_AQC_GSET_RSS_LUT_TABLE_SIZE_512_FLAG << |
| 1628 | ICE_AQC_GSET_RSS_LUT_TABLE_SIZE_S) & | 1630 | ICE_AQC_GSET_RSS_LUT_TABLE_SIZE_S) & |
| 1629 | ICE_AQC_GSET_RSS_LUT_TABLE_SIZE_M; | 1631 | ICE_AQC_GSET_RSS_LUT_TABLE_SIZE_M; |
| 1630 | } else if ((lut_size == ICE_AQC_GSET_RSS_LUT_TABLE_SIZE_2K) && | 1632 | break; |
| 1631 | (lut_type == ICE_AQC_GSET_RSS_LUT_TABLE_TYPE_PF)) { | 1633 | case ICE_AQC_GSET_RSS_LUT_TABLE_SIZE_2K: |
| 1632 | flags |= (ICE_AQC_GSET_RSS_LUT_TABLE_SIZE_2K_FLAG << | 1634 | if (lut_type == ICE_AQC_GSET_RSS_LUT_TABLE_TYPE_PF) { |
| 1633 | ICE_AQC_GSET_RSS_LUT_TABLE_SIZE_S) & | 1635 | flags |= (ICE_AQC_GSET_RSS_LUT_TABLE_SIZE_2K_FLAG << |
| 1634 | ICE_AQC_GSET_RSS_LUT_TABLE_SIZE_M; | 1636 | ICE_AQC_GSET_RSS_LUT_TABLE_SIZE_S) & |
| 1635 | } else { | 1637 | ICE_AQC_GSET_RSS_LUT_TABLE_SIZE_M; |
| 1638 | break; | ||
| 1639 | } | ||
| 1640 | /* fall-through */ | ||
| 1641 | default: | ||
| 1636 | status = ICE_ERR_PARAM; | 1642 | status = ICE_ERR_PARAM; |
| 1637 | goto ice_aq_get_set_rss_lut_exit; | 1643 | goto ice_aq_get_set_rss_lut_exit; |
| 1638 | } | 1644 | } |
diff --git a/drivers/net/ethernet/intel/ice/ice_controlq.c b/drivers/net/ethernet/intel/ice/ice_controlq.c index 7c511f144ed6..62be72fdc8f3 100644 --- a/drivers/net/ethernet/intel/ice/ice_controlq.c +++ b/drivers/net/ethernet/intel/ice/ice_controlq.c | |||
| @@ -597,10 +597,14 @@ static enum ice_status ice_init_check_adminq(struct ice_hw *hw) | |||
| 597 | return 0; | 597 | return 0; |
| 598 | 598 | ||
| 599 | init_ctrlq_free_rq: | 599 | init_ctrlq_free_rq: |
| 600 | ice_shutdown_rq(hw, cq); | 600 | if (cq->rq.head) { |
| 601 | ice_shutdown_sq(hw, cq); | 601 | ice_shutdown_rq(hw, cq); |
| 602 | mutex_destroy(&cq->sq_lock); | 602 | mutex_destroy(&cq->rq_lock); |
| 603 | mutex_destroy(&cq->rq_lock); | 603 | } |
| 604 | if (cq->sq.head) { | ||
| 605 | ice_shutdown_sq(hw, cq); | ||
| 606 | mutex_destroy(&cq->sq_lock); | ||
| 607 | } | ||
| 604 | return status; | 608 | return status; |
| 605 | } | 609 | } |
| 606 | 610 | ||
