* [PATCH v1 1/3] net/zxdh: modify some MAC config issues @ 2025-06-07 2:30 Junlong Wang 2025-06-07 2:30 ` [PATCH v1 2/3] net/zxdh: modify some VLAN related issues Junlong Wang ` (5 more replies) 0 siblings, 6 replies; 16+ messages in thread From: Junlong Wang @ 2025-06-07 2:30 UTC (permalink / raw) To: dev; +Cc: Junlong Wang [-- Attachment #1.1.1: Type: text/plain, Size: 12987 bytes --] modify some mac config issues, which were discovered during the testing process. Signed-off-by: Junlong Wang <wang.junlong1@zte.com.cn> --- drivers/net/zxdh/meson.build | 2 +- drivers/net/zxdh/zxdh_ethdev.c | 16 +++++++++++++ drivers/net/zxdh/zxdh_ethdev_ops.c | 36 +++++++++++++++++++++++------- drivers/net/zxdh/zxdh_msg.c | 10 ++++----- drivers/net/zxdh/zxdh_tables.c | 29 +++++++++++++----------- 5 files changed, 66 insertions(+), 27 deletions(-) diff --git a/drivers/net/zxdh/meson.build b/drivers/net/zxdh/meson.build index a48a0d43c2..ec71451a55 100644 --- a/drivers/net/zxdh/meson.build +++ b/drivers/net/zxdh/meson.build @@ -7,7 +7,7 @@ if not is_linux subdir_done() endif -if not dpdk_conf.has('RTE_ARCH_X86_64') or not dpdk_conf.get('RTE_ARCH_64') +if arch_subdir != 'x86' and arch_subdir != 'arm' or not dpdk_conf.get('RTE_ARCH_64') build = false reason = 'only supported on x86_64 and aarch64' subdir_done() diff --git a/drivers/net/zxdh/zxdh_ethdev.c b/drivers/net/zxdh/zxdh_ethdev.c index 80053678cb..74018821d1 100644 --- a/drivers/net/zxdh/zxdh_ethdev.c +++ b/drivers/net/zxdh/zxdh_ethdev.c @@ -1265,6 +1265,7 @@ static int zxdh_mac_config(struct rte_eth_dev *eth_dev) { struct zxdh_hw *hw = eth_dev->data->dev_private; + struct zxdh_msg_info msg_info = {0}; int ret = 0; if (hw->is_pf) { @@ -1274,7 +1275,22 @@ zxdh_mac_config(struct rte_eth_dev *eth_dev) PMD_DRV_LOG(ERR, "Failed to add mac: port 0x%x", hw->vport.vport); return ret; } + hw->uc_num++; + } else { + struct zxdh_mac_filter *mac_filter = &msg_info.data.mac_filter_msg; + + mac_filter->filter_flag = 0xff; + memcpy(&mac_filter->mac, ð_dev->data->mac_addrs[0], + sizeof(eth_dev->data->mac_addrs[0])); + zxdh_msg_head_build(hw, ZXDH_MAC_ADD, &msg_info); + ret = zxdh_vf_send_msg_to_pf(eth_dev, &msg_info, sizeof(msg_info), NULL, 0); + if (ret) { + PMD_DRV_LOG(ERR, "Failed to send msg: msg type %d", ZXDH_MAC_ADD); + return ret; + } + hw->uc_num++; } + return ret; } diff --git a/drivers/net/zxdh/zxdh_ethdev_ops.c b/drivers/net/zxdh/zxdh_ethdev_ops.c index f8e8d26c50..e865d23849 100644 --- a/drivers/net/zxdh/zxdh_ethdev_ops.c +++ b/drivers/net/zxdh/zxdh_ethdev_ops.c @@ -413,7 +413,10 @@ zxdh_dev_mac_addr_set(struct rte_eth_dev *dev, struct rte_ether_addr *addr) struct zxdh_hw *hw = (struct zxdh_hw *)dev->data->dev_private; struct rte_ether_addr *old_addr = &dev->data->mac_addrs[0]; struct zxdh_msg_info msg_info = {0}; - uint16_t ret = 0; + uint8_t zxdh_msg_reply_info[ZXDH_ST_SZ_BYTES(msg_reply_info)] = {0}; + void *reply_body_addr = ZXDH_ADDR_OF(msg_reply_info, zxdh_msg_reply_info, reply_body); + void *mac_reply_msg_addr = ZXDH_ADDR_OF(msg_reply_body, reply_body_addr, mac_reply_msg); + int ret = 0; if (!rte_is_valid_assigned_ether_addr(addr)) { PMD_DRV_LOG(ERR, "mac address is invalid!"); @@ -425,7 +428,7 @@ zxdh_dev_mac_addr_set(struct rte_eth_dev *dev, struct rte_ether_addr *addr) if (hw->is_pf) { ret = zxdh_add_mac_table(hw, hw->vport.vport, addr, hw->hash_search_index, 0, 0); if (ret) { - if (ret == ZXDH_EEXIST_MAC_FLAG) { + if (ret == -EADDRINUSE) { PMD_DRV_LOG(ERR, "pf mac add failed! mac is in used, code:%d", ret); return -EADDRINUSE; } @@ -446,9 +449,11 @@ zxdh_dev_mac_addr_set(struct rte_eth_dev *dev, struct rte_ether_addr *addr) mac_filter->filter_flag = ZXDH_MAC_UNFILTER; memcpy(&mac_filter->mac, addr, sizeof(struct rte_ether_addr)); zxdh_msg_head_build(hw, ZXDH_MAC_ADD, &msg_info); - ret = zxdh_vf_send_msg_to_pf(dev, &msg_info, sizeof(msg_info), NULL, 0); + ret = zxdh_vf_send_msg_to_pf(dev, &msg_info, sizeof(msg_info), + zxdh_msg_reply_info, ZXDH_ST_SZ_BYTES(msg_reply_info)); if (ret) { - if (ret == ZXDH_EEXIST_MAC_FLAG) { + uint8_t flag = ZXDH_GET(mac_reply_msg, mac_reply_msg_addr, mac_flag); + if (flag == ZXDH_EEXIST_MAC_FLAG) { PMD_DRV_LOG(ERR, "pf mac add failed! mac is in used, code:%d", ret); return -EADDRINUSE; } @@ -482,7 +487,11 @@ zxdh_dev_mac_addr_add(struct rte_eth_dev *dev, struct rte_ether_addr *mac_addr, { struct zxdh_hw *hw = dev->data->dev_private; struct zxdh_msg_info msg_info = {0}; - uint16_t i, ret; + uint8_t zxdh_msg_reply_info[ZXDH_ST_SZ_BYTES(msg_reply_info)] = {0}; + void *reply_body_addr = ZXDH_ADDR_OF(msg_reply_info, zxdh_msg_reply_info, reply_body); + void *mac_reply_msg_addr = ZXDH_ADDR_OF(msg_reply_body, reply_body_addr, mac_reply_msg); + uint16_t i; + int ret; if (index >= ZXDH_MAX_MAC_ADDRS) { PMD_DRV_LOG(ERR, "Add mac index (%u) is out of range", index); @@ -503,6 +512,10 @@ zxdh_dev_mac_addr_add(struct rte_eth_dev *dev, struct rte_ether_addr *mac_addr, ret = zxdh_add_mac_table(hw, hw->vport.vport, mac_addr, hw->hash_search_index, 0, 0); if (ret) { + if (ret == -EADDRINUSE) { + PMD_DRV_LOG(ERR, "pf mac add failed mac is in used"); + return -EADDRINUSE; + } PMD_DRV_LOG(ERR, "mac_addr_add failed, code:%d", ret); return ret; } @@ -530,15 +543,22 @@ zxdh_dev_mac_addr_add(struct rte_eth_dev *dev, struct rte_ether_addr *mac_addr, } } else { struct zxdh_mac_filter *mac_filter = &msg_info.data.mac_filter_msg; - + uint8_t flag; mac_filter->filter_flag = ZXDH_MAC_FILTER; memcpy(&mac_filter->mac, mac_addr, sizeof(struct rte_ether_addr)); zxdh_msg_head_build(hw, ZXDH_MAC_ADD, &msg_info); if (rte_is_unicast_ether_addr(mac_addr)) { if (hw->uc_num < ZXDH_MAX_UC_MAC_ADDRS) { - ret = zxdh_vf_send_msg_to_pf(dev, &msg_info, - sizeof(msg_info), NULL, 0); + ret = zxdh_vf_send_msg_to_pf(dev, &msg_info, sizeof(msg_info), + zxdh_msg_reply_info, + ZXDH_ST_SZ_BYTES(msg_reply_info)); if (ret) { + flag = ZXDH_GET(mac_reply_msg, + mac_reply_msg_addr, mac_flag); + if (flag == ZXDH_EEXIST_MAC_FLAG) { + PMD_DRV_LOG(ERR, "pf mac add failed mac is in used"); + return -EADDRINUSE; + } PMD_DRV_LOG(ERR, "Failed to send msg: port 0x%x msg type %d", hw->vport.vport, ZXDH_MAC_ADD); return ret; diff --git a/drivers/net/zxdh/zxdh_msg.c b/drivers/net/zxdh/zxdh_msg.c index 02ecd93b12..49291cfbaf 100644 --- a/drivers/net/zxdh/zxdh_msg.c +++ b/drivers/net/zxdh/zxdh_msg.c @@ -1349,11 +1349,11 @@ zxdh_add_vf_mac_table(struct zxdh_hw *hw, uint16_t vport, void *cfg_data, union zxdh_virport_num port = {0}; struct zxdh_mac_filter *mac_filter = (struct zxdh_mac_filter *)cfg_data; struct rte_ether_addr *addr = &mac_filter->mac; - int i = 0, ret = 0; - uint16_t vf_id = port.vfid; - port.vport = vport; void *reply_data_addr = ZXDH_ADDR_OF(msg_reply_body, reply_body, reply_data); void *mac_reply_msg_addr = ZXDH_ADDR_OF(msg_reply_body, reply_body, mac_reply_msg); + port.vport = vport; + uint16_t vf_id = port.vfid; + int i = 0, ret = 0; for (i = 0; i < ZXDH_MAX_MAC_ADDRS; i++) if (rte_is_same_ether_addr(&hw->vfinfo[vf_id].vf_mac[i], addr)) @@ -1396,12 +1396,12 @@ static int zxdh_del_vf_mac_table(struct zxdh_hw *hw, uint16_t vport, void *cfg_data, void *res_info, uint16_t *res_len) { - int ret, i = 0; struct zxdh_mac_filter *mac_filter = (struct zxdh_mac_filter *)cfg_data; union zxdh_virport_num port = (union zxdh_virport_num)vport; char str[ZXDH_MSG_REPLY_BODY_MAX_LEN] = "del mac"; - uint16_t vf_id = port.vfid; + uint16_t vf_id = port.vfid; void *reply_data_addr = ZXDH_ADDR_OF(msg_reply_body, res_info, reply_data); + int ret, i = 0; PMD_DRV_LOG(DEBUG, "[PF GET MSG FROM VF]--vf mac to del."); ret = zxdh_del_mac_table(hw, vport, &mac_filter->mac, hw->hash_search_index, 0, 0); diff --git a/drivers/net/zxdh/zxdh_tables.c b/drivers/net/zxdh/zxdh_tables.c index 29741e53ed..26d9b90382 100644 --- a/drivers/net/zxdh/zxdh_tables.c +++ b/drivers/net/zxdh/zxdh_tables.c @@ -8,8 +8,9 @@ #include "zxdh_tables.h" #include "zxdh_logs.h" -#define ZXDH_UNIMAC_HASH_INDEX(index) (ZXDH_SDT_L2_ENTRY_TABLE0 + (index)) -#define ZXDH_MULTIMAC_HASH_INDEX(index) (ZXDH_SDT_MC_TABLE0 + (index)) + +#define ZXDH_UNICAST_MAC_HASH_INDEX(index) (ZXDH_SDT_L2_ENTRY_TABLE0 + (index)) +#define ZXDH_MULTICAST_MAC_HASH_INDEX(index) (ZXDH_SDT_MC_TABLE0 + (index)) #define ZXDH_MC_GROUP_NUM 4 #define ZXDH_BASE_VFID 1152 #define ZXDH_TABLE_HIT_FLAG 128 @@ -257,7 +258,7 @@ zxdh_add_mac_table(struct zxdh_hw *hw, uint16_t vport, struct rte_ether_addr *ad .p_rst = (uint8_t *)&unicast_table.entry }; ZXDH_DTB_USER_ENTRY_T entry_get = { - .sdt_no = ZXDH_UNIMAC_HASH_INDEX(hash_search_idx), + .sdt_no = ZXDH_UNICAST_MAC_HASH_INDEX(hash_search_idx), .p_entry_data = (void *)&dtb_hash_entry }; @@ -294,19 +295,20 @@ zxdh_add_mac_table(struct zxdh_hw *hw, uint16_t vport, struct rte_ether_addr *ad }; ZXDH_DTB_USER_ENTRY_T entry_get = { - .sdt_no = ZXDH_MULTIMAC_HASH_INDEX(hash_search_idx), + .sdt_no = ZXDH_MULTICAST_MAC_HASH_INDEX(hash_search_idx), .p_entry_data = (void *)&dtb_hash_entry }; ret = zxdh_np_dtb_table_entry_get(hw->slot_id, hw->dev_sd->dtb_sd.queueid, &entry_get, 1); uint8_t index = (vport_num.vfid % 64) / 32; + uint8_t value = (vport_num.vfid % 64) % 32; if (ret == 0) { if (vport_num.vf_flag) { if (group_id == vport_num.vfid / 64) multicast_table.entry.mc_bitmap[index] |= rte_cpu_to_be_32(UINT32_C(1) << - (31 - index)); + (31 - value)); } else { if (group_id == vport_num.vfid / 64) multicast_table.entry.mc_pf_enable = @@ -317,7 +319,7 @@ zxdh_add_mac_table(struct zxdh_hw *hw, uint16_t vport, struct rte_ether_addr *ad if (group_id == vport_num.vfid / 64) multicast_table.entry.mc_bitmap[index] |= rte_cpu_to_be_32(UINT32_C(1) << - (31 - index)); + (31 - value)); else multicast_table.entry.mc_bitmap[index] = false; @@ -347,8 +349,7 @@ zxdh_del_mac_table(struct zxdh_hw *hw, uint16_t vport, struct rte_ether_addr *ad struct zxdh_mac_unicast_table unicast_table = {0}; struct zxdh_mac_multicast_table multicast_table = {0}; union zxdh_virport_num vport_num = (union zxdh_virport_num)vport; - union zxdh_virport_num port = (union zxdh_virport_num)vport; - uint16_t vfid = zxdh_vport_to_vfid(port); + uint16_t vfid = zxdh_vport_to_vfid(vport_num); uint32_t ret, del_flag = 0; uint16_t group_id = 0; @@ -365,7 +366,7 @@ zxdh_del_mac_table(struct zxdh_hw *hw, uint16_t vport, struct rte_ether_addr *ad }; ZXDH_DTB_USER_ENTRY_T entry_get = { - .sdt_no = ZXDH_UNIMAC_HASH_INDEX(hash_search_idx), + .sdt_no = ZXDH_UNICAST_MAC_HASH_INDEX(hash_search_idx), .p_entry_data = (void *)&dtb_hash_entry }; ret = zxdh_np_dtb_table_entry_get(hw->slot_id, hw->dev_sd->dtb_sd.queueid, @@ -393,16 +394,17 @@ zxdh_del_mac_table(struct zxdh_hw *hw, uint16_t vport, struct rte_ether_addr *ad }; ZXDH_DTB_USER_ENTRY_T entry_get = { - .sdt_no = ZXDH_MULTIMAC_HASH_INDEX(hash_search_idx), + .sdt_no = ZXDH_MULTICAST_MAC_HASH_INDEX(hash_search_idx), .p_entry_data = (void *)&dtb_hash_entry }; ret = zxdh_np_dtb_table_entry_get(hw->slot_id, hw->dev_sd->dtb_sd.queueid, &entry_get, 1); uint8_t index = (vport_num.vfid % 64) / 32; + uint8_t value = (vport_num.vfid % 64) % 32; if (vport_num.vf_flag) multicast_table.entry.mc_bitmap[index] &= - ~(rte_cpu_to_be_32(UINT32_C(1) << (31 - index))); + ~(rte_cpu_to_be_32(UINT32_C(1) << (31 - value))); else multicast_table.entry.mc_pf_enable = 0; @@ -422,7 +424,7 @@ zxdh_del_mac_table(struct zxdh_hw *hw, uint16_t vport, struct rte_ether_addr *ad .p_rst = (uint8_t *)&multicast_table.entry }; ZXDH_DTB_USER_ENTRY_T entry_get = { - .sdt_no = ZXDH_MULTIMAC_HASH_INDEX(hash_search_idx), + .sdt_no = ZXDH_MULTICAST_MAC_HASH_INDEX(hash_search_idx), .p_entry_data = (void *)&dtb_hash_entry }; @@ -447,7 +449,7 @@ zxdh_del_mac_table(struct zxdh_hw *hw, uint16_t vport, struct rte_ether_addr *ad .p_rst = (uint8_t *)&multicast_table.entry }; ZXDH_DTB_USER_ENTRY_T entry_get = { - .sdt_no = ZXDH_MULTIMAC_HASH_INDEX(hash_search_idx), + .sdt_no = ZXDH_MULTICAST_MAC_HASH_INDEX(hash_search_idx), .p_entry_data = (void *)&dtb_hash_entry }; @@ -604,6 +606,7 @@ zxdh_dev_unicast_table_set(struct zxdh_hw *hw, uint16_t vport, bool enable) struct zxdh_unitcast_table uc_table = {0}; struct zxdh_port_attr_table port_attr = {0}; union zxdh_virport_num vport_num = (union zxdh_virport_num)vport; + uint16_t vfid = zxdh_vport_to_vfid(vport_num); int16_t ret = 0; ZXDH_DTB_ERAM_ENTRY_INFO_T uc_table_entry = { -- 2.27.0 [-- Attachment #1.1.2: Type: text/html , Size: 34183 bytes --] ^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH v1 2/3] net/zxdh: modify some VLAN related issues 2025-06-07 2:30 [PATCH v1 1/3] net/zxdh: modify some MAC config issues Junlong Wang @ 2025-06-07 2:30 ` Junlong Wang 2025-06-16 16:20 ` Stephen Hemminger 2025-06-07 2:30 ` [PATCH v1 3/3] net/zxdh: modify RSS " Junlong Wang ` (4 subsequent siblings) 5 siblings, 1 reply; 16+ messages in thread From: Junlong Wang @ 2025-06-07 2:30 UTC (permalink / raw) To: dev; +Cc: Junlong Wang [-- Attachment #1.1.1: Type: text/plain, Size: 13158 bytes --] modify some vlan related issues, and provided vlan tpid set ops. Signed-off-by: Junlong Wang <wang.junlong1@zte.com.cn> --- drivers/net/zxdh/zxdh_ethdev.c | 10 +++++- drivers/net/zxdh/zxdh_ethdev_ops.c | 39 +++++++++++++++++++- drivers/net/zxdh/zxdh_ethdev_ops.h | 1 + drivers/net/zxdh/zxdh_msg.c | 58 +++++++++++++++++++++++++++++- drivers/net/zxdh/zxdh_msg.h | 7 +++- drivers/net/zxdh/zxdh_tables.c | 30 ++++++++++++---- drivers/net/zxdh/zxdh_tables.h | 7 +++- 7 files changed, 140 insertions(+), 12 deletions(-) diff --git a/drivers/net/zxdh/zxdh_ethdev.c b/drivers/net/zxdh/zxdh_ethdev.c index 74018821d1..9512aff99c 100644 --- a/drivers/net/zxdh/zxdh_ethdev.c +++ b/drivers/net/zxdh/zxdh_ethdev.c @@ -1429,6 +1429,7 @@ static const struct eth_dev_ops zxdh_eth_dev_ops = { .allmulticast_disable = zxdh_dev_allmulticast_disable, .vlan_filter_set = zxdh_dev_vlan_filter_set, .vlan_offload_set = zxdh_dev_vlan_offload_set, + .vlan_tpid_set = zxdh_vlan_tpid_set, .reta_update = zxdh_dev_rss_reta_update, .reta_query = zxdh_dev_rss_reta_query, .rss_hash_update = zxdh_rss_hash_update, @@ -1907,6 +1908,7 @@ zxdh_np_init(struct rte_eth_dev *eth_dev) static int zxdh_tables_init(struct rte_eth_dev *dev) { + struct zxdh_hw *hw = dev->data->dev_private; int ret = 0; ret = zxdh_port_attr_init(dev); @@ -1927,12 +1929,18 @@ zxdh_tables_init(struct rte_eth_dev *dev) return ret; } - ret = zxdh_vlan_filter_table_init(dev); + ret = zxdh_vlan_filter_table_init(hw, hw->vport.vport); if (ret) { PMD_DRV_LOG(ERR, "vlan filter table init failed"); return ret; } + ret = zxdh_port_vlan_table_init(hw, hw->vport.vport); + if (ret) { + PMD_DRV_LOG(ERR, "port vlan table init failed"); + return ret; + } + return ret; } diff --git a/drivers/net/zxdh/zxdh_ethdev_ops.c b/drivers/net/zxdh/zxdh_ethdev_ops.c index e865d23849..c16271aeaf 100644 --- a/drivers/net/zxdh/zxdh_ethdev_ops.c +++ b/drivers/net/zxdh/zxdh_ethdev_ops.c @@ -895,7 +895,7 @@ zxdh_dev_vlan_offload_set(struct rte_eth_dev *dev, int mask) return -EAGAIN; } } else { - msg.data.vlan_filter_set_msg.enable = true; + msg.data.vlan_filter_set_msg.enable = false; zxdh_msg_head_build(hw, ZXDH_VLAN_FILTER_SET, &msg); ret = zxdh_vf_send_msg_to_pf(hw->eth_dev, &msg, sizeof(struct zxdh_msg_info), NULL, 0); @@ -1004,6 +1004,43 @@ zxdh_dev_vlan_offload_set(struct rte_eth_dev *dev, int mask) return ret; } +int +zxdh_vlan_tpid_set(struct rte_eth_dev *dev, enum rte_vlan_type vlan_type, uint16_t tpid) +{ + struct zxdh_hw *hw = dev->data->dev_private; + struct zxdh_port_vlan_table port_vlan_table = {0}; + struct zxdh_msg_info msg = {0}; + int ret = 0; + + if (vlan_type != RTE_ETH_VLAN_TYPE_OUTER) { + PMD_DRV_LOG(ERR, "unsupported rte vlan type!"); + return -1; + } + + if (hw->is_pf) { + ret = zxdh_get_port_vlan_attr(hw, hw->vport.vport, &port_vlan_table); + if (ret != 0) + PMD_DRV_LOG(ERR, "get port vlan attr table failed"); + port_vlan_table.hit_flag = 1; + port_vlan_table.business_vlan_tpid = tpid; + ret = zxdh_set_port_vlan_attr(hw, hw->vport.vport, &port_vlan_table); + if (ret != 0) + PMD_DRV_LOG(ERR, "set port vlan tpid %d attr table failed", tpid); + } else { + zxdh_msg_head_build(hw, ZXDH_VLAN_SET_TPID, &msg); + msg.data.zxdh_vlan_tpid.tpid = tpid; + ret = zxdh_vf_send_msg_to_pf(dev, &msg, + sizeof(struct zxdh_msg_info), NULL, 0); + if (ret) { + PMD_DRV_LOG(ERR, "port %d vlan tpid %d set failed", + hw->vfid, tpid); + return -1; + } + } + + return 0; +} + int zxdh_dev_rss_reta_update(struct rte_eth_dev *dev, struct rte_eth_rss_reta_entry64 *reta_conf, diff --git a/drivers/net/zxdh/zxdh_ethdev_ops.h b/drivers/net/zxdh/zxdh_ethdev_ops.h index 97a1eb4532..6015b3de59 100644 --- a/drivers/net/zxdh/zxdh_ethdev_ops.h +++ b/drivers/net/zxdh/zxdh_ethdev_ops.h @@ -120,6 +120,7 @@ int zxdh_dev_allmulticast_enable(struct rte_eth_dev *dev); int zxdh_dev_allmulticast_disable(struct rte_eth_dev *dev); int zxdh_dev_vlan_filter_set(struct rte_eth_dev *dev, uint16_t vlan_id, int on); int zxdh_dev_vlan_offload_set(struct rte_eth_dev *dev, int mask); +int zxdh_vlan_tpid_set(struct rte_eth_dev *dev, enum rte_vlan_type vlan_type, uint16_t tpid); int zxdh_dev_rss_reta_update(struct rte_eth_dev *dev, struct rte_eth_rss_reta_entry64 *reta_conf, uint16_t reta_size); diff --git a/drivers/net/zxdh/zxdh_msg.c b/drivers/net/zxdh/zxdh_msg.c index 49291cfbaf..be4f115380 100644 --- a/drivers/net/zxdh/zxdh_msg.c +++ b/drivers/net/zxdh/zxdh_msg.c @@ -1233,6 +1233,24 @@ zxdh_vf_promisc_uninit(struct zxdh_hw *hw, union zxdh_virport_num vport) return ret; } +static int +zxdh_vf_vlan_table_init(struct zxdh_hw *hw, uint16_t vport) +{ + int ret = 0; + ret = zxdh_vlan_filter_table_init(hw, vport); + if (ret) { + PMD_DRV_LOG(ERR, "vf vlan filter table init failed, code:%d", ret); + return -1; + } + + ret = zxdh_port_vlan_table_init(hw, vport); + if (ret) { + PMD_DRV_LOG(ERR, "vf port vlan table init failed, code:%d", ret); + return -1; + } + return ret; +} + static int zxdh_vf_port_init(struct zxdh_hw *pf_hw, uint16_t vport, void *cfg_data, void *res_info, uint16_t *res_len) @@ -1254,7 +1272,7 @@ zxdh_vf_port_init(struct zxdh_hw *pf_hw, uint16_t vport, void *cfg_data, port_attr.port_base_qid = vf_init_msg->base_qid; uint16_t vfid = zxdh_vport_to_vfid(port); - ret = zxdh_set_port_attr(pf_hw, vfid, &port_attr); + ret = zxdh_set_port_attr(pf_hw, vport, &port_attr); if (ret) { PMD_DRV_LOG(ERR, "set vport attr failed, code:%d", ret); goto proc_end; @@ -1265,6 +1283,13 @@ zxdh_vf_port_init(struct zxdh_hw *pf_hw, uint16_t vport, void *cfg_data, PMD_DRV_LOG(ERR, "vf_promisc_table_init failed, code:%d", ret); goto proc_end; } + + ret = zxdh_vf_vlan_table_init(pf_hw, vport); + if (ret) { + PMD_DRV_LOG(ERR, "vf vlan table init failed, code:%d", ret); + goto proc_end; + } + ZXDH_SET(msg_reply_body, res_info, flag, ZXDH_REPS_SUCC); *res_len = sizeof(uint8_t); @@ -2131,6 +2156,36 @@ zxdh_vf_mtr_hw_profile_cfg(struct zxdh_hw *pf_hw __rte_unused, return 0; } +static int +zxdh_vf_vlan_tpid_set(struct zxdh_hw *pf_hw, uint16_t vport, void *cfg_data, + void *res_info, uint16_t *res_len) +{ + union zxdh_virport_num port = {.vport = vport}; + struct zxdh_vlan_tpid *vlan_tpid = (struct zxdh_vlan_tpid *)cfg_data; + struct zxdh_port_vlan_table port_vlan_table = {0}; + int ret = 0; + + RTE_ASSERT(!cfg_data || !pf_hw || !res_info || !res_len); + + ret = zxdh_get_port_vlan_attr(pf_hw, vport, &port_vlan_table); + if (ret) { + PMD_DRV_LOG(ERR, "get port vlan attr failed, code:%d", ret); + goto proc_end; + } + port_vlan_table.hit_flag = 1; + port_vlan_table.business_vlan_tpid = vlan_tpid->tpid; + ret = zxdh_set_port_vlan_attr(pf_hw, vport, &port_vlan_table); + if (ret) { + PMD_DRV_LOG(ERR, "set port vlan attr failed, code:%d", ret); + goto proc_end; + } + +proc_end: + *res_len = sizeof(uint8_t); + ZXDH_SET(msg_reply_body, res_info, flag, ZXDH_REPS_FAIL); + return ret; +} + static const zxdh_msg_process_callback zxdh_proc_cb[] = { [ZXDH_NULL] = NULL, [ZXDH_VF_PORT_INIT] = zxdh_vf_port_init, @@ -2142,6 +2197,7 @@ static const zxdh_msg_process_callback zxdh_proc_cb[] = { [ZXDH_VLAN_FILTER_ADD] = zxdh_vf_vlan_filter_table_add, [ZXDH_VLAN_FILTER_DEL] = zxdh_vf_vlan_filter_table_del, [ZXDH_VLAN_OFFLOAD] = zxdh_vf_set_vlan_offload, + [ZXDH_VLAN_SET_TPID] = zxdh_vf_vlan_tpid_set, [ZXDH_RSS_ENABLE] = zxdh_vf_rss_enable, [ZXDH_RSS_RETA_GET] = zxdh_vf_rss_table_get, [ZXDH_RSS_RETA_SET] = zxdh_vf_rss_table_set, diff --git a/drivers/net/zxdh/zxdh_msg.h b/drivers/net/zxdh/zxdh_msg.h index 7dad6f7335..b62ace7219 100644 --- a/drivers/net/zxdh/zxdh_msg.h +++ b/drivers/net/zxdh/zxdh_msg.h @@ -229,7 +229,7 @@ enum zxdh_msg_type { ZXDH_VLAN_FILTER_ADD = 18, ZXDH_VLAN_FILTER_DEL = 19, ZXDH_VLAN_OFFLOAD = 21, - + ZXDH_VLAN_SET_TPID = 23, ZXDH_PORT_ATTRS_SET = 25, ZXDH_PORT_PROMISC_SET = 26, @@ -535,6 +535,10 @@ struct zxdh_plcr_profile_free { uint16_t profile_id; }; +struct zxdh_vlan_tpid { + uint16_t tpid; +}; + struct zxdh_msg_info { union { uint8_t head_len[ZXDH_MSG_HEAD_LEN]; @@ -551,6 +555,7 @@ struct zxdh_msg_info { struct zxdh_vlan_filter vlan_filter_msg; struct zxdh_vlan_filter_set vlan_filter_set_msg; struct zxdh_vlan_offload vlan_offload_msg; + struct zxdh_vlan_tpid zxdh_vlan_tpid; struct zxdh_rss_reta rss_reta; struct zxdh_rss_enable rss_enable; struct zxdh_rss_hf rss_hf; diff --git a/drivers/net/zxdh/zxdh_tables.c b/drivers/net/zxdh/zxdh_tables.c index 26d9b90382..57a291e92a 100644 --- a/drivers/net/zxdh/zxdh_tables.c +++ b/drivers/net/zxdh/zxdh_tables.c @@ -700,10 +700,11 @@ zxdh_dev_multicast_table_set(struct zxdh_hw *hw, uint16_t vport, bool enable) } int -zxdh_vlan_filter_table_init(struct rte_eth_dev *dev) +zxdh_vlan_filter_table_init(struct zxdh_hw *hw, uint16_t vport) { - struct zxdh_hw *hw = dev->data->dev_private; struct zxdh_dtb_shared_data *dtb_data = &hw->dev_sd->dtb_sd; + union zxdh_virport_num vport_num = (union zxdh_virport_num)vport; + uint16_t vfid = zxdh_vport_to_vfid(vport_num); struct zxdh_vlan_filter_table vlan_table = {0}; int16_t ret = 0; @@ -718,7 +719,7 @@ zxdh_vlan_filter_table_init(struct rte_eth_dev *dev) } else { vlan_table.vlans[0] = 0; } - uint32_t index = (vlan_group << 11) | hw->vport.vfid; + uint32_t index = (vlan_group << 11) | vfid; ZXDH_DTB_ERAM_ENTRY_INFO_T entry_data = { .index = index, .p_data = (uint32_t *)&vlan_table @@ -730,7 +731,7 @@ zxdh_vlan_filter_table_init(struct rte_eth_dev *dev) if (ret != 0) { PMD_DRV_LOG(ERR, "[vfid:%d], vlan_group:%d, init vlan filter table failed", - hw->vport.vfid, vlan_group); + vfid, vlan_group); ret = -1; } } @@ -750,7 +751,7 @@ zxdh_vlan_filter_table_set(struct zxdh_hw *hw, uint16_t vport, uint16_t vlan_id, memset(&vlan_table, 0, sizeof(struct zxdh_vlan_filter_table)); int table_num = vlan_id / ZXDH_VLAN_FILTER_VLANID_STEP; uint32_t index = (table_num << 11) | vfid; - uint16_t group = (vlan_id - table_num * ZXDH_VLAN_FILTER_VLANID_STEP) / 8 + 1; + uint16_t group = (vlan_id % ZXDH_VLAN_FILTER_VLANID_STEP) / 8 + 1; uint8_t val = sizeof(struct zxdh_vlan_filter_table) / sizeof(uint32_t); uint8_t vlan_tbl_index = group / val; @@ -951,7 +952,7 @@ zxdh_vlan_relate_vport(struct rte_eth_dev *dev, uint16_t vport, return 0; } -static int +int zxdh_set_port_vlan_attr(struct zxdh_hw *hw, uint16_t vport, struct zxdh_port_vlan_table *port_vlan) { @@ -974,7 +975,7 @@ zxdh_set_port_vlan_attr(struct zxdh_hw *hw, uint16_t vport, return ret; } -static int +int zxdh_get_port_vlan_attr(struct zxdh_hw *hw, uint16_t vport, struct zxdh_port_vlan_table *port_vlan) { @@ -1046,3 +1047,18 @@ int zxdh_set_vlan_offload(struct zxdh_hw *hw, uint16_t vport, uint8_t type, uint { return set_vlan_config(hw, vport, type, enable); } + +int zxdh_port_vlan_table_init(struct zxdh_hw *hw, uint16_t vport) +{ + struct zxdh_port_vlan_table port_vlan = {0}; + int ret = 0; + + if (!hw->is_pf) + return 0; + + ret = zxdh_set_port_vlan_attr(hw, vport, &port_vlan); + if (ret) + PMD_DRV_LOG(ERR, "port vlan table init failed"); + + return ret; +} diff --git a/drivers/net/zxdh/zxdh_tables.h b/drivers/net/zxdh/zxdh_tables.h index cb34e38be8..3280ff1f89 100644 --- a/drivers/net/zxdh/zxdh_tables.h +++ b/drivers/net/zxdh/zxdh_tables.h @@ -362,7 +362,7 @@ int zxdh_promisc_table_init(struct rte_eth_dev *dev); int zxdh_promisc_table_uninit(struct rte_eth_dev *dev); int zxdh_dev_unicast_table_set(struct zxdh_hw *hw, uint16_t vport, bool enable); int zxdh_dev_multicast_table_set(struct zxdh_hw *hw, uint16_t vport, bool enable); -int zxdh_vlan_filter_table_init(struct rte_eth_dev *dev); +int zxdh_vlan_filter_table_init(struct zxdh_hw *hw, uint16_t vport); int zxdh_vlan_filter_table_set(struct zxdh_hw *hw, uint16_t vport, uint16_t vlan_id, uint8_t enable); int zxdh_rss_table_set(struct zxdh_hw *hw, uint16_t vport, struct zxdh_rss_reta *rss_reta); @@ -372,5 +372,10 @@ int zxdh_set_panel_attr(struct rte_eth_dev *dev, struct zxdh_panel_table *panel_ int zxdh_dev_broadcast_set(struct zxdh_hw *hw, uint16_t vport, bool enable); int zxdh_set_vlan_filter(struct zxdh_hw *hw, uint16_t vport, uint8_t enable); int zxdh_set_vlan_offload(struct zxdh_hw *hw, uint16_t vport, uint8_t type, uint8_t enable); +int zxdh_set_port_vlan_attr(struct zxdh_hw *hw, uint16_t vport, + struct zxdh_port_vlan_table *port_vlan); +int zxdh_get_port_vlan_attr(struct zxdh_hw *hw, uint16_t vport, + struct zxdh_port_vlan_table *port_vlan); +int zxdh_port_vlan_table_init(struct zxdh_hw *hw, uint16_t vport); #endif /* ZXDH_TABLES_H */ -- 2.27.0 [-- Attachment #1.1.2: Type: text/html , Size: 28012 bytes --] ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v1 2/3] net/zxdh: modify some VLAN related issues 2025-06-07 2:30 ` [PATCH v1 2/3] net/zxdh: modify some VLAN related issues Junlong Wang @ 2025-06-16 16:20 ` Stephen Hemminger 0 siblings, 0 replies; 16+ messages in thread From: Stephen Hemminger @ 2025-06-16 16:20 UTC (permalink / raw) To: Junlong Wang; +Cc: dev On Sat, 7 Jun 2025 10:30:19 +0800 Junlong Wang <wang.junlong1@zte.com.cn> wrote: > modify some vlan related issues, and provided > vlan tpid set ops. > > Signed-off-by: Junlong Wang <wang.junlong1@zte.com.cn> Best not to mix bug fix with new features. Bug fix should have Fixes: tag. ^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH v1 3/3] net/zxdh: modify RSS related issues 2025-06-07 2:30 [PATCH v1 1/3] net/zxdh: modify some MAC config issues Junlong Wang 2025-06-07 2:30 ` [PATCH v1 2/3] net/zxdh: modify some VLAN related issues Junlong Wang @ 2025-06-07 2:30 ` Junlong Wang 2025-06-16 16:22 ` Stephen Hemminger 2025-06-12 0:14 ` [PATCH v1 1/3] net/zxdh: modify some MAC config issues Thomas Monjalon ` (3 subsequent siblings) 5 siblings, 1 reply; 16+ messages in thread From: Junlong Wang @ 2025-06-07 2:30 UTC (permalink / raw) To: dev; +Cc: Junlong Wang [-- Attachment #1.1.1: Type: text/plain, Size: 9205 bytes --] modify rss related issues in testing process. Signed-off-by: Junlong Wang <wang.junlong1@zte.com.cn> --- drivers/net/zxdh/zxdh_ethdev.c | 1 + drivers/net/zxdh/zxdh_ethdev_ops.c | 66 +++++++++++++++++++----------- drivers/net/zxdh/zxdh_ethdev_ops.h | 4 +- drivers/net/zxdh/zxdh_msg.c | 12 +++--- drivers/net/zxdh/zxdh_tables.c | 8 ++-- 5 files changed, 54 insertions(+), 37 deletions(-) diff --git a/drivers/net/zxdh/zxdh_ethdev.c b/drivers/net/zxdh/zxdh_ethdev.c index 9512aff99c..a245ab24ce 100644 --- a/drivers/net/zxdh/zxdh_ethdev.c +++ b/drivers/net/zxdh/zxdh_ethdev.c @@ -66,6 +66,7 @@ zxdh_dev_infos_get(struct rte_eth_dev *dev, dev_info->rx_offload_capa |= RTE_ETH_RX_OFFLOAD_TCP_LRO; dev_info->rx_offload_capa |= RTE_ETH_RX_OFFLOAD_RSS_HASH; + dev_info->hash_key_size = ZXDH_RSS_HASH_KEY_LEN; dev_info->reta_size = RTE_ETH_RSS_RETA_SIZE_256; dev_info->flow_type_rss_offloads = ZXDH_RSS_HF; diff --git a/drivers/net/zxdh/zxdh_ethdev_ops.c b/drivers/net/zxdh/zxdh_ethdev_ops.c index c16271aeaf..86517d571a 100644 --- a/drivers/net/zxdh/zxdh_ethdev_ops.c +++ b/drivers/net/zxdh/zxdh_ethdev_ops.c @@ -289,7 +289,7 @@ zxdh_link_info_get(struct rte_eth_dev *dev, struct rte_eth_link *link) zxdh_pci_read_dev_config(hw, offsetof(struct zxdh_net_config, status), &status, sizeof(status)); - link->link_status = status; + link->link_status = status & hw->admin_status; if (status == RTE_ETH_LINK_DOWN) { link->link_speed = RTE_ETH_SPEED_NUM_UNKNOWN; @@ -1207,7 +1207,7 @@ zxdh_rss_hf_to_hw(uint64_t hf) } static uint64_t -zxdh_rss_hf_to_eth(uint32_t hw_hf) +zxdh_rss_hf_to_eth(uint64_t hw_hf) { uint64_t hf = 0; @@ -1245,7 +1245,7 @@ zxdh_rss_hash_update(struct rte_eth_dev *dev, hw_hf_new = zxdh_rss_hf_to_hw(rss_conf->rss_hf); hw_hf_old = zxdh_rss_hf_to_hw(old_rss_conf->rss_hf); - if ((hw_hf_new != hw_hf_old || !!rss_conf->rss_hf)) + if ((hw_hf_new != hw_hf_old || hw->rss_enable != (!!rss_conf->rss_hf))) need_update_hf = 1; if (need_update_hf) { @@ -1267,6 +1267,9 @@ zxdh_rss_hash_update(struct rte_eth_dev *dev, return -EINVAL; } } + hw->rss_enable = !!rss_conf->rss_hf; + if (rss_conf->rss_hf == 0) + return 0; if (hw->is_pf) { ret = zxdh_get_port_attr(hw, hw->vport.vport, &port_attr); port_attr.rss_hash_factor = hw_hf_new; @@ -1294,15 +1297,16 @@ zxdh_rss_hash_update(struct rte_eth_dev *dev, int zxdh_rss_hash_conf_get(struct rte_eth_dev *dev, struct rte_eth_rss_conf *rss_conf) { - struct zxdh_hw *hw = (struct zxdh_hw *)dev->data->dev_private; + struct zxdh_hw *hw = dev->data->dev_private; struct rte_eth_rss_conf *old_rss_conf = &dev->data->dev_conf.rx_adv_conf.rss_conf; struct zxdh_msg_info msg = {0}; uint8_t zxdh_msg_reply_info[ZXDH_ST_SZ_BYTES(msg_reply_info)] = {0}; void *reply_body_addr = ZXDH_ADDR_OF(msg_reply_info, zxdh_msg_reply_info, reply_body); void *rss_hf_msg_addr = ZXDH_ADDR_OF(msg_reply_body, reply_body_addr, rss_hf_msg); struct zxdh_port_attr_table port_attr = {0}; - uint32_t rss_hf; - uint32_t hw_hf; + uint64_t rss_hf = 0; + uint64_t hw_hf = 0; + uint8_t need_update_hf = 0; int ret; if (rss_conf == NULL) { @@ -1310,27 +1314,40 @@ zxdh_rss_hash_conf_get(struct rte_eth_dev *dev, struct rte_eth_rss_conf *rss_con return -ENOMEM; } - hw_hf = zxdh_rss_hf_to_hw(old_rss_conf->rss_hf); - rss_conf->rss_hf = zxdh_rss_hf_to_eth(hw_hf); + if (hw->rss_enable == 0) { + rss_conf->rss_hf = 0; + return 0; + } - zxdh_msg_head_build(hw, ZXDH_RSS_HF_GET, &msg); - if (hw->is_pf) { - ret = zxdh_get_port_attr(hw, hw->vport.vport, &port_attr); - if (ret) { - PMD_DRV_LOG(ERR, "rss hash factor set failed"); - return -EINVAL; - } - ZXDH_SET(rss_hf, rss_hf_msg_addr, rss_hf, port_attr.rss_hash_factor); - } else { - ret = zxdh_vf_send_msg_to_pf(dev, &msg, sizeof(struct zxdh_msg_info), - zxdh_msg_reply_info, ZXDH_ST_SZ_BYTES(msg_reply_info)); - if (ret) { - PMD_DRV_LOG(ERR, "rss hash factor set failed"); - return -EINVAL; + if (old_rss_conf->rss_hf == 0) + need_update_hf = 1; + + if (!need_update_hf) { + hw_hf = zxdh_rss_hf_to_hw(old_rss_conf->rss_hf); + rss_conf->rss_hf = zxdh_rss_hf_to_eth(hw_hf); + } + + if (need_update_hf) { + zxdh_msg_head_build(hw, ZXDH_RSS_HF_GET, &msg); + if (hw->is_pf) { + ret = zxdh_get_port_attr(hw, hw->vport.vport, &port_attr); + if (ret) { + PMD_DRV_LOG(ERR, "rss hash factor set failed"); + return -EINVAL; + } + ZXDH_SET(rss_hf, rss_hf_msg_addr, rss_hf, port_attr.rss_hash_factor); + } else { + ret = zxdh_vf_send_msg_to_pf(dev, &msg, sizeof(struct zxdh_msg_info), + zxdh_msg_reply_info, ZXDH_ST_SZ_BYTES(msg_reply_info)); + if (ret) { + PMD_DRV_LOG(ERR, "rss hash factor set failed"); + return -EINVAL; + } } + rss_hf = ZXDH_GET(rss_hf, rss_hf_msg_addr, rss_hf); + rss_conf->rss_hf = zxdh_rss_hf_to_eth(rss_hf); + old_rss_conf->rss_hf = zxdh_rss_hf_to_eth(hw_hf); } - rss_hf = ZXDH_GET(rss_hf, rss_hf_msg_addr, rss_hf); - rss_conf->rss_hf = zxdh_rss_hf_to_eth(rss_hf); return 0; } @@ -1389,7 +1406,6 @@ zxdh_rss_configure(struct rte_eth_dev *dev) if (curr_rss_enable && hw->rss_init == 0) { /* config hash factor */ - dev->data->dev_conf.rx_adv_conf.rss_conf.rss_hf = ZXDH_HF_F5_ETH; hw_hf = zxdh_rss_hf_to_hw(dev->data->dev_conf.rx_adv_conf.rss_conf.rss_hf); memset(&msg, 0, sizeof(msg)); if (hw->is_pf) { diff --git a/drivers/net/zxdh/zxdh_ethdev_ops.h b/drivers/net/zxdh/zxdh_ethdev_ops.h index 6015b3de59..762562fbef 100644 --- a/drivers/net/zxdh/zxdh_ethdev_ops.h +++ b/drivers/net/zxdh/zxdh_ethdev_ops.h @@ -12,8 +12,7 @@ #include "zxdh_ethdev.h" #define ZXDH_ETH_RSS_L2 RTE_ETH_RSS_L2_PAYLOAD -#define ZXDH_ETH_RSS_IP \ - (RTE_ETH_RSS_IPV4 | \ +#define ZXDH_ETH_RSS_IP (RTE_ETH_RSS_IPV4 | \ RTE_ETH_RSS_FRAG_IPV4 | \ RTE_ETH_RSS_IPV6 | \ RTE_ETH_RSS_FRAG_IPV6) @@ -25,6 +24,7 @@ #define ZXDH_HF_F3_ETH ZXDH_ETH_RSS_IP #define ZXDH_HF_MAC_VLAN_ETH ZXDH_ETH_RSS_L2 #define ZXDH_RSS_HF ((ZXDH_HF_MAC_VLAN_ETH | ZXDH_HF_F3_ETH | ZXDH_HF_F5_ETH)) +#define ZXDH_RSS_HASH_KEY_LEN 40U #define ZXDH_ETHER_MIN_MTU 68 diff --git a/drivers/net/zxdh/zxdh_msg.c b/drivers/net/zxdh/zxdh_msg.c index be4f115380..68f2bab0c1 100644 --- a/drivers/net/zxdh/zxdh_msg.c +++ b/drivers/net/zxdh/zxdh_msg.c @@ -1270,7 +1270,6 @@ zxdh_vf_port_init(struct zxdh_hw *pf_hw, uint16_t vport, void *cfg_data, port_attr.pf_vfid = pf_hw->vfid; port_attr.hash_search_index = pf_hw->hash_search_index; port_attr.port_base_qid = vf_init_msg->base_qid; - uint16_t vfid = zxdh_vport_to_vfid(port); ret = zxdh_set_port_attr(pf_hw, vport, &port_attr); if (ret) { @@ -1714,12 +1713,14 @@ zxdh_vf_rss_table_get(struct zxdh_hw *hw, uint16_t vport, void *cfg_data __rte_u if (ret) sprintf(str, "set rss reta tbl failed, code:%d", ret); - *res_len = strlen(str) + sizeof(uint8_t); - if (ret == 0) + if (ret == 0) { + *res_len = ZXDH_ST_SZ_BYTES(rss_reta) + sizeof(uint8_t); ZXDH_SET(msg_reply_body, reply, flag, ZXDH_REPS_SUCC); - else + } else { + *res_len = strlen(str) + sizeof(uint8_t); ZXDH_SET(msg_reply_body, reply, flag, ZXDH_REPS_FAIL); - memcpy(reply_data_addr, str, strlen(str) + 1); + memcpy(reply_data_addr, str, strlen(str) + 1); + } return ret; } @@ -2160,7 +2161,6 @@ static int zxdh_vf_vlan_tpid_set(struct zxdh_hw *pf_hw, uint16_t vport, void *cfg_data, void *res_info, uint16_t *res_len) { - union zxdh_virport_num port = {.vport = vport}; struct zxdh_vlan_tpid *vlan_tpid = (struct zxdh_vlan_tpid *)cfg_data; struct zxdh_port_vlan_table port_vlan_table = {0}; int ret = 0; diff --git a/drivers/net/zxdh/zxdh_tables.c b/drivers/net/zxdh/zxdh_tables.c index 57a291e92a..e11b4bf92c 100644 --- a/drivers/net/zxdh/zxdh_tables.c +++ b/drivers/net/zxdh/zxdh_tables.c @@ -620,7 +620,7 @@ zxdh_dev_unicast_table_set(struct zxdh_hw *hw, uint16_t vport, bool enable) ret = zxdh_np_dtb_table_entry_get(hw->slot_id, dtb_data->queueid, &entry, 1); if (ret) { - PMD_DRV_LOG(ERR, "unicast_table_get_failed:%d", hw->vfid); + PMD_DRV_LOG(ERR, "unicast_table_get_failed:%d", vfid); return -ret; } @@ -637,20 +637,20 @@ zxdh_dev_unicast_table_set(struct zxdh_hw *hw, uint16_t vport, bool enable) ret = zxdh_np_dtb_table_entry_write(hw->slot_id, dtb_data->queueid, 1, &entry); if (ret) { - PMD_DRV_LOG(ERR, "unicast_table_set_failed:%d", hw->vfid); + PMD_DRV_LOG(ERR, "unicast_table_set_failed:%d", vfid); return -ret; } ret = zxdh_get_port_attr(hw, vport, &port_attr); if (ret) { - PMD_DRV_LOG(ERR, "port_attr_table_get_failed:%d", hw->vfid); + PMD_DRV_LOG(ERR, "port_attr_table_get_failed:%d", vfid); return -ret; } port_attr.promisc_enable = enable; ret = zxdh_set_port_attr(hw, vport, &port_attr); if (ret) { - PMD_DRV_LOG(ERR, "port_attr_table_set_failed:%d", hw->vfid); + PMD_DRV_LOG(ERR, "port_attr_table_set_failed:%d", vfid); return -ret; } -- 2.27.0 [-- Attachment #1.1.2: Type: text/html , Size: 20529 bytes --] ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v1 3/3] net/zxdh: modify RSS related issues 2025-06-07 2:30 ` [PATCH v1 3/3] net/zxdh: modify RSS " Junlong Wang @ 2025-06-16 16:22 ` Stephen Hemminger 0 siblings, 0 replies; 16+ messages in thread From: Stephen Hemminger @ 2025-06-16 16:22 UTC (permalink / raw) To: Junlong Wang; +Cc: dev On Sat, 7 Jun 2025 10:30:20 +0800 Junlong Wang <wang.junlong1@zte.com.cn> wrote: > modify rss related issues in testing process. Better commit message please. Should have Fixes: tabg. > > Signed-off-by: Junlong Wang <wang.junlong1@zte.com.cn> > --- > drivers/net/zxdh/zxdh_ethdev.c | 1 + > drivers/net/zxdh/zxdh_ethdev_ops.c | 66 +++++++++++++++++++----------- > drivers/net/zxdh/zxdh_ethdev_ops.h | 4 +- > drivers/net/zxdh/zxdh_msg.c | 12 +++--- > drivers/net/zxdh/zxdh_tables.c | 8 ++-- > 5 files changed, 54 insertions(+), 37 deletions(-) > > diff --git a/drivers/net/zxdh/zxdh_ethdev.c b/drivers/net/zxdh/zxdh_ethdev.c > index 9512aff99c..a245ab24ce 100644 > --- a/drivers/net/zxdh/zxdh_ethdev.c > +++ b/drivers/net/zxdh/zxdh_ethdev.c > @@ -66,6 +66,7 @@ zxdh_dev_infos_get(struct rte_eth_dev *dev, > dev_info->rx_offload_capa |= RTE_ETH_RX_OFFLOAD_TCP_LRO; > dev_info->rx_offload_capa |= RTE_ETH_RX_OFFLOAD_RSS_HASH; > > + dev_info->hash_key_size = ZXDH_RSS_HASH_KEY_LEN; > dev_info->reta_size = RTE_ETH_RSS_RETA_SIZE_256; > dev_info->flow_type_rss_offloads = ZXDH_RSS_HF; > > diff --git a/drivers/net/zxdh/zxdh_ethdev_ops.c b/drivers/net/zxdh/zxdh_ethdev_ops.c > index c16271aeaf..86517d571a 100644 > --- a/drivers/net/zxdh/zxdh_ethdev_ops.c > +++ b/drivers/net/zxdh/zxdh_ethdev_ops.c > @@ -289,7 +289,7 @@ zxdh_link_info_get(struct rte_eth_dev *dev, struct rte_eth_link *link) > zxdh_pci_read_dev_config(hw, offsetof(struct zxdh_net_config, status), > &status, sizeof(status)); > > - link->link_status = status; > + link->link_status = status & hw->admin_status; > > if (status == RTE_ETH_LINK_DOWN) { > link->link_speed = RTE_ETH_SPEED_NUM_UNKNOWN; > @@ -1207,7 +1207,7 @@ zxdh_rss_hf_to_hw(uint64_t hf) > } > > static uint64_t > -zxdh_rss_hf_to_eth(uint32_t hw_hf) > +zxdh_rss_hf_to_eth(uint64_t hw_hf) > { > uint64_t hf = 0; > > @@ -1245,7 +1245,7 @@ zxdh_rss_hash_update(struct rte_eth_dev *dev, > hw_hf_new = zxdh_rss_hf_to_hw(rss_conf->rss_hf); > hw_hf_old = zxdh_rss_hf_to_hw(old_rss_conf->rss_hf); > > - if ((hw_hf_new != hw_hf_old || !!rss_conf->rss_hf)) > + if ((hw_hf_new != hw_hf_old || hw->rss_enable != (!!rss_conf->rss_hf))) You don't needs so many () here. Just: if (hw_hf_new != hw_hf_old || hw->rss_enable != !!rss_conf->rss_hf) ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v1 1/3] net/zxdh: modify some MAC config issues 2025-06-07 2:30 [PATCH v1 1/3] net/zxdh: modify some MAC config issues Junlong Wang 2025-06-07 2:30 ` [PATCH v1 2/3] net/zxdh: modify some VLAN related issues Junlong Wang 2025-06-07 2:30 ` [PATCH v1 3/3] net/zxdh: modify RSS " Junlong Wang @ 2025-06-12 0:14 ` Thomas Monjalon 2025-06-12 1:18 ` Junlong Wang ` (2 subsequent siblings) 5 siblings, 0 replies; 16+ messages in thread From: Thomas Monjalon @ 2025-06-12 0:14 UTC (permalink / raw) To: Junlong Wang; +Cc: dev Hello, 07/06/2025 04:30, Junlong Wang: > modify some mac config issues, > which were discovered during the testing process. > > Signed-off-by: Junlong Wang <wang.junlong1@zte.com.cn> That's not how we fix issues in general in DPDK. We want to provide tracking history, so: - we split the fixes per issue - we provide the cause origin (with "Fixes:" line) Please could split and better comment these fixes? Thanks ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v1 1/3] net/zxdh: modify some MAC config issues 2025-06-07 2:30 [PATCH v1 1/3] net/zxdh: modify some MAC config issues Junlong Wang ` (2 preceding siblings ...) 2025-06-12 0:14 ` [PATCH v1 1/3] net/zxdh: modify some MAC config issues Thomas Monjalon @ 2025-06-12 1:18 ` Junlong Wang 2025-06-16 16:16 ` Stephen Hemminger 2025-06-17 2:04 ` [PATCH v2 1/5] net/zxdh: fix meson.build issus in compilation Junlong Wang 5 siblings, 0 replies; 16+ messages in thread From: Junlong Wang @ 2025-06-12 1:18 UTC (permalink / raw) To: thomas, stephen; +Cc: dev [-- Attachment #1.1.1: Type: text/plain, Size: 583 bytes --] >> modify some mac config issues, >> which were discovered during the testing process. >> >> Signed-off-by: Junlong Wang <wang.junlong1@zte.com.cn> > That's not how we fix issues in general in DPDK. > We want to provide tracking history, so: > - we split the fixes per issue > - we provide the cause origin (with "Fixes:" line) > > Please could split and better comment these fixes? > Thanks Okay, I will revise and resubmit it split and better comment these fixes. but this series patch status is Awaiting Upstream, do I need to modify the status for rollback. [-- Attachment #1.1.2: Type: text/html , Size: 1174 bytes --] ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v1 1/3] net/zxdh: modify some MAC config issues 2025-06-07 2:30 [PATCH v1 1/3] net/zxdh: modify some MAC config issues Junlong Wang ` (3 preceding siblings ...) 2025-06-12 1:18 ` Junlong Wang @ 2025-06-16 16:16 ` Stephen Hemminger 2025-06-17 2:04 ` [PATCH v2 1/5] net/zxdh: fix meson.build issus in compilation Junlong Wang 5 siblings, 0 replies; 16+ messages in thread From: Stephen Hemminger @ 2025-06-16 16:16 UTC (permalink / raw) To: Junlong Wang; +Cc: dev On Sat, 7 Jun 2025 10:30:18 +0800 Junlong Wang <wang.junlong1@zte.com.cn> wrote: > modify some mac config issues, > which were discovered during the testing process. This sounds like you fixed one or more bugs. In which case patch should be sent with the Fixes: tag so that stable maintainers know if it should be backported. ^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH v2 1/5] net/zxdh: fix meson.build issus in compilation 2025-06-07 2:30 [PATCH v1 1/3] net/zxdh: modify some MAC config issues Junlong Wang ` (4 preceding siblings ...) 2025-06-16 16:16 ` Stephen Hemminger @ 2025-06-17 2:04 ` Junlong Wang 2025-06-17 2:05 ` [PATCH v2 2/5] net/zxdh: modify some MAC config issues Junlong Wang ` (5 more replies) 5 siblings, 6 replies; 16+ messages in thread From: Junlong Wang @ 2025-06-17 2:04 UTC (permalink / raw) To: stephen; +Cc: dev, Junlong Wang, stable [-- Attachment #1.1.1: Type: text/plain, Size: 850 bytes --] fix meson.build issus in compilation, which caused the inability to compile in the arm64 environment. Fixes: 29e89288ff14 ("net/zxdh: add driver skeleton") Cc: stable@dpdk.org Signed-off-by: Junlong Wang <wang.junlong1@zte.com.cn> --- drivers/net/zxdh/meson.build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/zxdh/meson.build b/drivers/net/zxdh/meson.build index a48a0d43c2..ec71451a55 100644 --- a/drivers/net/zxdh/meson.build +++ b/drivers/net/zxdh/meson.build @@ -7,7 +7,7 @@ if not is_linux subdir_done() endif -if not dpdk_conf.has('RTE_ARCH_X86_64') or not dpdk_conf.get('RTE_ARCH_64') +if arch_subdir != 'x86' and arch_subdir != 'arm' or not dpdk_conf.get('RTE_ARCH_64') build = false reason = 'only supported on x86_64 and aarch64' subdir_done() -- 2.27.0 [-- Attachment #1.1.2: Type: text/html , Size: 1504 bytes --] ^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH v2 2/5] net/zxdh: modify some MAC config issues 2025-06-17 2:04 ` [PATCH v2 1/5] net/zxdh: fix meson.build issus in compilation Junlong Wang @ 2025-06-17 2:05 ` Junlong Wang 2025-06-17 2:05 ` [PATCH v2 3/5] net/zxdh: modify some VLAN related issues Junlong Wang ` (4 subsequent siblings) 5 siblings, 0 replies; 16+ messages in thread From: Junlong Wang @ 2025-06-17 2:05 UTC (permalink / raw) To: stephen; +Cc: dev, Junlong Wang [-- Attachment #1.1.1: Type: text/plain, Size: 14067 bytes --] modify some mac config issues, which were discovered during the testing process. Fixes: 1c8f68b64cfc ("net/zxdh: optimize MAC operations") Signed-off-by: Junlong Wang <wang.junlong1@zte.com.cn> --- drivers/net/zxdh/zxdh_ethdev.c | 16 ++++++++++++ drivers/net/zxdh/zxdh_ethdev_ops.c | 34 +++++++++++++++++++----- drivers/net/zxdh/zxdh_msg.c | 10 +++---- drivers/net/zxdh/zxdh_tables.c | 42 ++++++++++++++++-------------- 4 files changed, 70 insertions(+), 32 deletions(-) diff --git a/drivers/net/zxdh/zxdh_ethdev.c b/drivers/net/zxdh/zxdh_ethdev.c index 80053678cb..74018821d1 100644 --- a/drivers/net/zxdh/zxdh_ethdev.c +++ b/drivers/net/zxdh/zxdh_ethdev.c @@ -1265,6 +1265,7 @@ static int zxdh_mac_config(struct rte_eth_dev *eth_dev) { struct zxdh_hw *hw = eth_dev->data->dev_private; + struct zxdh_msg_info msg_info = {0}; int ret = 0; if (hw->is_pf) { @@ -1274,7 +1275,22 @@ zxdh_mac_config(struct rte_eth_dev *eth_dev) PMD_DRV_LOG(ERR, "Failed to add mac: port 0x%x", hw->vport.vport); return ret; } + hw->uc_num++; + } else { + struct zxdh_mac_filter *mac_filter = &msg_info.data.mac_filter_msg; + + mac_filter->filter_flag = 0xff; + memcpy(&mac_filter->mac, ð_dev->data->mac_addrs[0], + sizeof(eth_dev->data->mac_addrs[0])); + zxdh_msg_head_build(hw, ZXDH_MAC_ADD, &msg_info); + ret = zxdh_vf_send_msg_to_pf(eth_dev, &msg_info, sizeof(msg_info), NULL, 0); + if (ret) { + PMD_DRV_LOG(ERR, "Failed to send msg: msg type %d", ZXDH_MAC_ADD); + return ret; + } + hw->uc_num++; } + return ret; } diff --git a/drivers/net/zxdh/zxdh_ethdev_ops.c b/drivers/net/zxdh/zxdh_ethdev_ops.c index f8e8d26c50..c7a9dc7854 100644 --- a/drivers/net/zxdh/zxdh_ethdev_ops.c +++ b/drivers/net/zxdh/zxdh_ethdev_ops.c @@ -413,7 +413,10 @@ zxdh_dev_mac_addr_set(struct rte_eth_dev *dev, struct rte_ether_addr *addr) struct zxdh_hw *hw = (struct zxdh_hw *)dev->data->dev_private; struct rte_ether_addr *old_addr = &dev->data->mac_addrs[0]; struct zxdh_msg_info msg_info = {0}; - uint16_t ret = 0; + uint8_t zxdh_msg_reply_info[ZXDH_ST_SZ_BYTES(msg_reply_info)] = {0}; + void *reply_body_addr = ZXDH_ADDR_OF(msg_reply_info, zxdh_msg_reply_info, reply_body); + void *mac_reply_msg_addr = ZXDH_ADDR_OF(msg_reply_body, reply_body_addr, mac_reply_msg); + int ret = 0; if (!rte_is_valid_assigned_ether_addr(addr)) { PMD_DRV_LOG(ERR, "mac address is invalid!"); @@ -425,7 +428,7 @@ zxdh_dev_mac_addr_set(struct rte_eth_dev *dev, struct rte_ether_addr *addr) if (hw->is_pf) { ret = zxdh_add_mac_table(hw, hw->vport.vport, addr, hw->hash_search_index, 0, 0); if (ret) { - if (ret == ZXDH_EEXIST_MAC_FLAG) { + if (ret == -EADDRINUSE) { PMD_DRV_LOG(ERR, "pf mac add failed! mac is in used, code:%d", ret); return -EADDRINUSE; } @@ -446,9 +449,11 @@ zxdh_dev_mac_addr_set(struct rte_eth_dev *dev, struct rte_ether_addr *addr) mac_filter->filter_flag = ZXDH_MAC_UNFILTER; memcpy(&mac_filter->mac, addr, sizeof(struct rte_ether_addr)); zxdh_msg_head_build(hw, ZXDH_MAC_ADD, &msg_info); - ret = zxdh_vf_send_msg_to_pf(dev, &msg_info, sizeof(msg_info), NULL, 0); + ret = zxdh_vf_send_msg_to_pf(dev, &msg_info, sizeof(msg_info), + zxdh_msg_reply_info, ZXDH_ST_SZ_BYTES(msg_reply_info)); if (ret) { - if (ret == ZXDH_EEXIST_MAC_FLAG) { + uint8_t flag = ZXDH_GET(mac_reply_msg, mac_reply_msg_addr, mac_flag); + if (flag == ZXDH_EEXIST_MAC_FLAG) { PMD_DRV_LOG(ERR, "pf mac add failed! mac is in used, code:%d", ret); return -EADDRINUSE; } @@ -482,7 +487,11 @@ zxdh_dev_mac_addr_add(struct rte_eth_dev *dev, struct rte_ether_addr *mac_addr, { struct zxdh_hw *hw = dev->data->dev_private; struct zxdh_msg_info msg_info = {0}; - uint16_t i, ret; + uint8_t zxdh_msg_reply_info[ZXDH_ST_SZ_BYTES(msg_reply_info)] = {0}; + void *reply_body_addr = ZXDH_ADDR_OF(msg_reply_info, zxdh_msg_reply_info, reply_body); + void *mac_reply_msg_addr = ZXDH_ADDR_OF(msg_reply_body, reply_body_addr, mac_reply_msg); + uint16_t i; + int ret; if (index >= ZXDH_MAX_MAC_ADDRS) { PMD_DRV_LOG(ERR, "Add mac index (%u) is out of range", index); @@ -503,6 +512,10 @@ zxdh_dev_mac_addr_add(struct rte_eth_dev *dev, struct rte_ether_addr *mac_addr, ret = zxdh_add_mac_table(hw, hw->vport.vport, mac_addr, hw->hash_search_index, 0, 0); if (ret) { + if (ret == -EADDRINUSE) { + PMD_DRV_LOG(ERR, "pf mac add failed mac is in used"); + return -EADDRINUSE; + } PMD_DRV_LOG(ERR, "mac_addr_add failed, code:%d", ret); return ret; } @@ -536,9 +549,16 @@ zxdh_dev_mac_addr_add(struct rte_eth_dev *dev, struct rte_ether_addr *mac_addr, zxdh_msg_head_build(hw, ZXDH_MAC_ADD, &msg_info); if (rte_is_unicast_ether_addr(mac_addr)) { if (hw->uc_num < ZXDH_MAX_UC_MAC_ADDRS) { - ret = zxdh_vf_send_msg_to_pf(dev, &msg_info, - sizeof(msg_info), NULL, 0); + ret = zxdh_vf_send_msg_to_pf(dev, &msg_info, sizeof(msg_info), + zxdh_msg_reply_info, + ZXDH_ST_SZ_BYTES(msg_reply_info)); if (ret) { + flag = ZXDH_GET(mac_reply_msg, + mac_reply_msg_addr, mac_flag); + if (flag == ZXDH_EEXIST_MAC_FLAG) { + PMD_DRV_LOG(ERR, "pf mac add failed mac is in used"); + return -EADDRINUSE; + } PMD_DRV_LOG(ERR, "Failed to send msg: port 0x%x msg type %d", hw->vport.vport, ZXDH_MAC_ADD); return ret; diff --git a/drivers/net/zxdh/zxdh_msg.c b/drivers/net/zxdh/zxdh_msg.c index 02ecd93b12..452c7ab2e3 100644 --- a/drivers/net/zxdh/zxdh_msg.c +++ b/drivers/net/zxdh/zxdh_msg.c @@ -1349,11 +1349,11 @@ zxdh_add_vf_mac_table(struct zxdh_hw *hw, uint16_t vport, void *cfg_data, union zxdh_virport_num port = {0}; struct zxdh_mac_filter *mac_filter = (struct zxdh_mac_filter *)cfg_data; struct rte_ether_addr *addr = &mac_filter->mac; - int i = 0, ret = 0; - uint16_t vf_id = port.vfid; - port.vport = vport; void *reply_data_addr = ZXDH_ADDR_OF(msg_reply_body, reply_body, reply_data); void *mac_reply_msg_addr = ZXDH_ADDR_OF(msg_reply_body, reply_body, mac_reply_msg); + port.vport = vport; + uint16_t vf_id = port.vfid; + int i = 0, ret = 0; for (i = 0; i < ZXDH_MAX_MAC_ADDRS; i++) if (rte_is_same_ether_addr(&hw->vfinfo[vf_id].vf_mac[i], addr)) @@ -1396,12 +1396,12 @@ static int zxdh_del_vf_mac_table(struct zxdh_hw *hw, uint16_t vport, void *cfg_data, void *res_info, uint16_t *res_len) { - int ret, i = 0; struct zxdh_mac_filter *mac_filter = (struct zxdh_mac_filter *)cfg_data; union zxdh_virport_num port = (union zxdh_virport_num)vport; char str[ZXDH_MSG_REPLY_BODY_MAX_LEN] = "del mac"; - uint16_t vf_id = port.vfid; void *reply_data_addr = ZXDH_ADDR_OF(msg_reply_body, res_info, reply_data); + uint16_t vf_id = port.vfid; + int ret, i = 0; PMD_DRV_LOG(DEBUG, "[PF GET MSG FROM VF]--vf mac to del."); ret = zxdh_del_mac_table(hw, vport, &mac_filter->mac, hw->hash_search_index, 0, 0); diff --git a/drivers/net/zxdh/zxdh_tables.c b/drivers/net/zxdh/zxdh_tables.c index 29741e53ed..33f161c4cd 100644 --- a/drivers/net/zxdh/zxdh_tables.c +++ b/drivers/net/zxdh/zxdh_tables.c @@ -8,8 +8,8 @@ #include "zxdh_tables.h" #include "zxdh_logs.h" -#define ZXDH_UNIMAC_HASH_INDEX(index) (ZXDH_SDT_L2_ENTRY_TABLE0 + (index)) -#define ZXDH_MULTIMAC_HASH_INDEX(index) (ZXDH_SDT_MC_TABLE0 + (index)) +#define ZXDH_UNICAST_MAC_HASH_INDEX(index) (ZXDH_SDT_L2_ENTRY_TABLE0 + (index)) +#define ZXDH_MULTICAST_MAC_HASH_INDEX(index) (ZXDH_SDT_MC_TABLE0 + (index)) #define ZXDH_MC_GROUP_NUM 4 #define ZXDH_BASE_VFID 1152 #define ZXDH_TABLE_HIT_FLAG 128 @@ -244,8 +244,8 @@ zxdh_add_mac_table(struct zxdh_hw *hw, uint16_t vport, struct rte_ether_addr *ad struct zxdh_mac_multicast_table multicast_table = {0}; union zxdh_virport_num vport_num = (union zxdh_virport_num)vport; uint16_t vfid = zxdh_vport_to_vfid(vport_num); - uint32_t ret; uint16_t group_id = 0; + int16_t ret; if (rte_is_unicast_ether_addr(addr)) { rte_memcpy(unicast_table.key.dmac_addr, addr, sizeof(struct rte_ether_addr)); @@ -257,7 +257,7 @@ zxdh_add_mac_table(struct zxdh_hw *hw, uint16_t vport, struct rte_ether_addr *ad .p_rst = (uint8_t *)&unicast_table.entry }; ZXDH_DTB_USER_ENTRY_T entry_get = { - .sdt_no = ZXDH_UNIMAC_HASH_INDEX(hash_search_idx), + .sdt_no = ZXDH_UNICAST_MAC_HASH_INDEX(hash_search_idx), .p_entry_data = (void *)&dtb_hash_entry }; @@ -294,19 +294,20 @@ zxdh_add_mac_table(struct zxdh_hw *hw, uint16_t vport, struct rte_ether_addr *ad }; ZXDH_DTB_USER_ENTRY_T entry_get = { - .sdt_no = ZXDH_MULTIMAC_HASH_INDEX(hash_search_idx), + .sdt_no = ZXDH_MULTICAST_MAC_HASH_INDEX(hash_search_idx), .p_entry_data = (void *)&dtb_hash_entry }; ret = zxdh_np_dtb_table_entry_get(hw->slot_id, hw->dev_sd->dtb_sd.queueid, &entry_get, 1); uint8_t index = (vport_num.vfid % 64) / 32; + uint8_t value = (vport_num.vfid % 64) % 32; if (ret == 0) { if (vport_num.vf_flag) { if (group_id == vport_num.vfid / 64) multicast_table.entry.mc_bitmap[index] |= rte_cpu_to_be_32(UINT32_C(1) << - (31 - index)); + (31 - value)); } else { if (group_id == vport_num.vfid / 64) multicast_table.entry.mc_pf_enable = @@ -317,7 +318,7 @@ zxdh_add_mac_table(struct zxdh_hw *hw, uint16_t vport, struct rte_ether_addr *ad if (group_id == vport_num.vfid / 64) multicast_table.entry.mc_bitmap[index] |= rte_cpu_to_be_32(UINT32_C(1) << - (31 - index)); + (31 - value)); else multicast_table.entry.mc_bitmap[index] = false; @@ -347,10 +348,9 @@ zxdh_del_mac_table(struct zxdh_hw *hw, uint16_t vport, struct rte_ether_addr *ad struct zxdh_mac_unicast_table unicast_table = {0}; struct zxdh_mac_multicast_table multicast_table = {0}; union zxdh_virport_num vport_num = (union zxdh_virport_num)vport; - union zxdh_virport_num port = (union zxdh_virport_num)vport; - uint16_t vfid = zxdh_vport_to_vfid(port); - uint32_t ret, del_flag = 0; - uint16_t group_id = 0; + uint16_t vfid = zxdh_vport_to_vfid(vport_num); + uint16_t del_flag, group_id = 0; + int32_t ret = 0; if (rte_is_unicast_ether_addr(addr)) { rte_memcpy(unicast_table.key.dmac_addr, addr, sizeof(struct rte_ether_addr)); @@ -365,7 +365,7 @@ zxdh_del_mac_table(struct zxdh_hw *hw, uint16_t vport, struct rte_ether_addr *ad }; ZXDH_DTB_USER_ENTRY_T entry_get = { - .sdt_no = ZXDH_UNIMAC_HASH_INDEX(hash_search_idx), + .sdt_no = ZXDH_UNICAST_MAC_HASH_INDEX(hash_search_idx), .p_entry_data = (void *)&dtb_hash_entry }; ret = zxdh_np_dtb_table_entry_get(hw->slot_id, hw->dev_sd->dtb_sd.queueid, @@ -393,16 +393,17 @@ zxdh_del_mac_table(struct zxdh_hw *hw, uint16_t vport, struct rte_ether_addr *ad }; ZXDH_DTB_USER_ENTRY_T entry_get = { - .sdt_no = ZXDH_MULTIMAC_HASH_INDEX(hash_search_idx), + .sdt_no = ZXDH_MULTICAST_MAC_HASH_INDEX(hash_search_idx), .p_entry_data = (void *)&dtb_hash_entry }; ret = zxdh_np_dtb_table_entry_get(hw->slot_id, hw->dev_sd->dtb_sd.queueid, &entry_get, 1); uint8_t index = (vport_num.vfid % 64) / 32; + uint8_t value = (vport_num.vfid % 64) % 32; if (vport_num.vf_flag) multicast_table.entry.mc_bitmap[index] &= - ~(rte_cpu_to_be_32(UINT32_C(1) << (31 - index))); + ~(rte_cpu_to_be_32(UINT32_C(1) << (31 - value))); else multicast_table.entry.mc_pf_enable = 0; @@ -422,7 +423,7 @@ zxdh_del_mac_table(struct zxdh_hw *hw, uint16_t vport, struct rte_ether_addr *ad .p_rst = (uint8_t *)&multicast_table.entry }; ZXDH_DTB_USER_ENTRY_T entry_get = { - .sdt_no = ZXDH_MULTIMAC_HASH_INDEX(hash_search_idx), + .sdt_no = ZXDH_MULTICAST_MAC_HASH_INDEX(hash_search_idx), .p_entry_data = (void *)&dtb_hash_entry }; @@ -447,7 +448,7 @@ zxdh_del_mac_table(struct zxdh_hw *hw, uint16_t vport, struct rte_ether_addr *ad .p_rst = (uint8_t *)&multicast_table.entry }; ZXDH_DTB_USER_ENTRY_T entry_get = { - .sdt_no = ZXDH_MULTIMAC_HASH_INDEX(hash_search_idx), + .sdt_no = ZXDH_MULTICAST_MAC_HASH_INDEX(hash_search_idx), .p_entry_data = (void *)&dtb_hash_entry }; @@ -604,6 +605,7 @@ zxdh_dev_unicast_table_set(struct zxdh_hw *hw, uint16_t vport, bool enable) struct zxdh_unitcast_table uc_table = {0}; struct zxdh_port_attr_table port_attr = {0}; union zxdh_virport_num vport_num = (union zxdh_virport_num)vport; + uint16_t vfid = zxdh_vport_to_vfid(vport_num); int16_t ret = 0; ZXDH_DTB_ERAM_ENTRY_INFO_T uc_table_entry = { @@ -617,7 +619,7 @@ zxdh_dev_unicast_table_set(struct zxdh_hw *hw, uint16_t vport, bool enable) ret = zxdh_np_dtb_table_entry_get(hw->slot_id, dtb_data->queueid, &entry, 1); if (ret) { - PMD_DRV_LOG(ERR, "unicast_table_get_failed:%d", hw->vfid); + PMD_DRV_LOG(ERR, "unicast_table_get_failed:%d", vfid); return -ret; } @@ -634,20 +636,20 @@ zxdh_dev_unicast_table_set(struct zxdh_hw *hw, uint16_t vport, bool enable) ret = zxdh_np_dtb_table_entry_write(hw->slot_id, dtb_data->queueid, 1, &entry); if (ret) { - PMD_DRV_LOG(ERR, "unicast_table_set_failed:%d", hw->vfid); + PMD_DRV_LOG(ERR, "unicast_table_set_failed:%d", vfid); return -ret; } ret = zxdh_get_port_attr(hw, vport, &port_attr); if (ret) { - PMD_DRV_LOG(ERR, "port_attr_table_get_failed:%d", hw->vfid); + PMD_DRV_LOG(ERR, "port_attr_table_get_failed:%d", vfid); return -ret; } port_attr.promisc_enable = enable; ret = zxdh_set_port_attr(hw, vport, &port_attr); if (ret) { - PMD_DRV_LOG(ERR, "port_attr_table_set_failed:%d", hw->vfid); + PMD_DRV_LOG(ERR, "port_attr_table_set_failed:%d", vfid); return -ret; } -- 2.27.0 [-- Attachment #1.1.2: Type: text/html , Size: 36658 bytes --] ^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH v2 3/5] net/zxdh: modify some VLAN related issues 2025-06-17 2:04 ` [PATCH v2 1/5] net/zxdh: fix meson.build issus in compilation Junlong Wang 2025-06-17 2:05 ` [PATCH v2 2/5] net/zxdh: modify some MAC config issues Junlong Wang @ 2025-06-17 2:05 ` Junlong Wang 2025-06-17 2:05 ` [PATCH v2 4/5] net/zxdh: modify RSS " Junlong Wang ` (3 subsequent siblings) 5 siblings, 0 replies; 16+ messages in thread From: Junlong Wang @ 2025-06-17 2:05 UTC (permalink / raw) To: stephen; +Cc: dev, Junlong Wang [-- Attachment #1.1.1: Type: text/plain, Size: 8322 bytes --] modify some vlan related issues, which were discovered during the testing process. Fixes: b4f996b7fcf6 ("net/zxdh: optimize VLAN filter and offload") Signed-off-by: Junlong Wang <wang.junlong1@zte.com.cn> --- drivers/net/zxdh/zxdh_ethdev.c | 9 ++++++++- drivers/net/zxdh/zxdh_ethdev_ops.c | 4 ++-- drivers/net/zxdh/zxdh_msg.c | 28 ++++++++++++++++++++++++++-- drivers/net/zxdh/zxdh_tables.c | 28 ++++++++++++++++++++++------ drivers/net/zxdh/zxdh_tables.h | 7 ++++++- 5 files changed, 64 insertions(+), 12 deletions(-) diff --git a/drivers/net/zxdh/zxdh_ethdev.c b/drivers/net/zxdh/zxdh_ethdev.c index 74018821d1..d92df46d11 100644 --- a/drivers/net/zxdh/zxdh_ethdev.c +++ b/drivers/net/zxdh/zxdh_ethdev.c @@ -1907,6 +1907,7 @@ zxdh_np_init(struct rte_eth_dev *eth_dev) static int zxdh_tables_init(struct rte_eth_dev *dev) { + struct zxdh_hw *hw = dev->data->dev_private; int ret = 0; ret = zxdh_port_attr_init(dev); @@ -1927,12 +1928,18 @@ zxdh_tables_init(struct rte_eth_dev *dev) return ret; } - ret = zxdh_vlan_filter_table_init(dev); + ret = zxdh_vlan_filter_table_init(hw, hw->vport.vport); if (ret) { PMD_DRV_LOG(ERR, "vlan filter table init failed"); return ret; } + ret = zxdh_port_vlan_table_init(hw, hw->vport.vport); + if (ret) { + PMD_DRV_LOG(ERR, "port vlan table init failed"); + return ret; + } + return ret; } diff --git a/drivers/net/zxdh/zxdh_ethdev_ops.c b/drivers/net/zxdh/zxdh_ethdev_ops.c index c7a9dc7854..3eed388dac 100644 --- a/drivers/net/zxdh/zxdh_ethdev_ops.c +++ b/drivers/net/zxdh/zxdh_ethdev_ops.c @@ -553,7 +553,7 @@ zxdh_dev_mac_addr_add(struct rte_eth_dev *dev, struct rte_ether_addr *mac_addr, zxdh_msg_reply_info, ZXDH_ST_SZ_BYTES(msg_reply_info)); if (ret) { - flag = ZXDH_GET(mac_reply_msg, + uint8_t flag = ZXDH_GET(mac_reply_msg, mac_reply_msg_addr, mac_flag); if (flag == ZXDH_EEXIST_MAC_FLAG) { PMD_DRV_LOG(ERR, "pf mac add failed mac is in used"); @@ -895,7 +895,7 @@ zxdh_dev_vlan_offload_set(struct rte_eth_dev *dev, int mask) return -EAGAIN; } } else { - msg.data.vlan_filter_set_msg.enable = true; + msg.data.vlan_filter_set_msg.enable = false; zxdh_msg_head_build(hw, ZXDH_VLAN_FILTER_SET, &msg); ret = zxdh_vf_send_msg_to_pf(hw->eth_dev, &msg, sizeof(struct zxdh_msg_info), NULL, 0); diff --git a/drivers/net/zxdh/zxdh_msg.c b/drivers/net/zxdh/zxdh_msg.c index 452c7ab2e3..e607ea1dab 100644 --- a/drivers/net/zxdh/zxdh_msg.c +++ b/drivers/net/zxdh/zxdh_msg.c @@ -1233,6 +1233,24 @@ zxdh_vf_promisc_uninit(struct zxdh_hw *hw, union zxdh_virport_num vport) return ret; } +static int +zxdh_vf_vlan_table_init(struct zxdh_hw *hw, uint16_t vport) +{ + int ret = 0; + ret = zxdh_vlan_filter_table_init(hw, vport); + if (ret) { + PMD_DRV_LOG(ERR, "vf vlan filter table init failed, code:%d", ret); + return -1; + } + + ret = zxdh_port_vlan_table_init(hw, vport); + if (ret) { + PMD_DRV_LOG(ERR, "vf port vlan table init failed, code:%d", ret); + return -1; + } + return ret; +} + static int zxdh_vf_port_init(struct zxdh_hw *pf_hw, uint16_t vport, void *cfg_data, void *res_info, uint16_t *res_len) @@ -1252,9 +1270,8 @@ zxdh_vf_port_init(struct zxdh_hw *pf_hw, uint16_t vport, void *cfg_data, port_attr.pf_vfid = pf_hw->vfid; port_attr.hash_search_index = pf_hw->hash_search_index; port_attr.port_base_qid = vf_init_msg->base_qid; - uint16_t vfid = zxdh_vport_to_vfid(port); - ret = zxdh_set_port_attr(pf_hw, vfid, &port_attr); + ret = zxdh_set_port_attr(pf_hw, vport, &port_attr); if (ret) { PMD_DRV_LOG(ERR, "set vport attr failed, code:%d", ret); goto proc_end; @@ -1265,6 +1282,13 @@ zxdh_vf_port_init(struct zxdh_hw *pf_hw, uint16_t vport, void *cfg_data, PMD_DRV_LOG(ERR, "vf_promisc_table_init failed, code:%d", ret); goto proc_end; } + + ret = zxdh_vf_vlan_table_init(pf_hw, vport); + if (ret) { + PMD_DRV_LOG(ERR, "vf vlan table init failed, code:%d", ret); + goto proc_end; + } + ZXDH_SET(msg_reply_body, res_info, flag, ZXDH_REPS_SUCC); *res_len = sizeof(uint8_t); diff --git a/drivers/net/zxdh/zxdh_tables.c b/drivers/net/zxdh/zxdh_tables.c index 33f161c4cd..a213df4f23 100644 --- a/drivers/net/zxdh/zxdh_tables.c +++ b/drivers/net/zxdh/zxdh_tables.c @@ -699,10 +699,11 @@ zxdh_dev_multicast_table_set(struct zxdh_hw *hw, uint16_t vport, bool enable) } int -zxdh_vlan_filter_table_init(struct rte_eth_dev *dev) +zxdh_vlan_filter_table_init(struct zxdh_hw *hw, uint16_t vport) { - struct zxdh_hw *hw = dev->data->dev_private; struct zxdh_dtb_shared_data *dtb_data = &hw->dev_sd->dtb_sd; + union zxdh_virport_num vport_num = (union zxdh_virport_num)vport; + uint16_t vfid = zxdh_vport_to_vfid(vport_num); struct zxdh_vlan_filter_table vlan_table = {0}; int16_t ret = 0; @@ -717,7 +718,7 @@ zxdh_vlan_filter_table_init(struct rte_eth_dev *dev) } else { vlan_table.vlans[0] = 0; } - uint32_t index = (vlan_group << 11) | hw->vport.vfid; + uint32_t index = (vlan_group << 11) | vfid; ZXDH_DTB_ERAM_ENTRY_INFO_T entry_data = { .index = index, .p_data = (uint32_t *)&vlan_table @@ -749,7 +750,7 @@ zxdh_vlan_filter_table_set(struct zxdh_hw *hw, uint16_t vport, uint16_t vlan_id, memset(&vlan_table, 0, sizeof(struct zxdh_vlan_filter_table)); int table_num = vlan_id / ZXDH_VLAN_FILTER_VLANID_STEP; uint32_t index = (table_num << 11) | vfid; - uint16_t group = (vlan_id - table_num * ZXDH_VLAN_FILTER_VLANID_STEP) / 8 + 1; + uint16_t group = (vlan_id % ZXDH_VLAN_FILTER_VLANID_STEP) / 8 + 1; uint8_t val = sizeof(struct zxdh_vlan_filter_table) / sizeof(uint32_t); uint8_t vlan_tbl_index = group / val; @@ -950,7 +951,7 @@ zxdh_vlan_relate_vport(struct rte_eth_dev *dev, uint16_t vport, return 0; } -static int +int zxdh_set_port_vlan_attr(struct zxdh_hw *hw, uint16_t vport, struct zxdh_port_vlan_table *port_vlan) { @@ -973,7 +974,7 @@ zxdh_set_port_vlan_attr(struct zxdh_hw *hw, uint16_t vport, return ret; } -static int +int zxdh_get_port_vlan_attr(struct zxdh_hw *hw, uint16_t vport, struct zxdh_port_vlan_table *port_vlan) { @@ -1045,3 +1046,18 @@ int zxdh_set_vlan_offload(struct zxdh_hw *hw, uint16_t vport, uint8_t type, uint { return set_vlan_config(hw, vport, type, enable); } + +int zxdh_port_vlan_table_init(struct zxdh_hw *hw, uint16_t vport) +{ + struct zxdh_port_vlan_table port_vlan = {0}; + int ret = 0; + + if (!hw->is_pf) + return 0; + + ret = zxdh_set_port_vlan_attr(hw, vport, &port_vlan); + if (ret) + PMD_DRV_LOG(ERR, "port vlan table init failed"); + + return ret; +} diff --git a/drivers/net/zxdh/zxdh_tables.h b/drivers/net/zxdh/zxdh_tables.h index cb34e38be8..3280ff1f89 100644 --- a/drivers/net/zxdh/zxdh_tables.h +++ b/drivers/net/zxdh/zxdh_tables.h @@ -362,7 +362,7 @@ int zxdh_promisc_table_init(struct rte_eth_dev *dev); int zxdh_promisc_table_uninit(struct rte_eth_dev *dev); int zxdh_dev_unicast_table_set(struct zxdh_hw *hw, uint16_t vport, bool enable); int zxdh_dev_multicast_table_set(struct zxdh_hw *hw, uint16_t vport, bool enable); -int zxdh_vlan_filter_table_init(struct rte_eth_dev *dev); +int zxdh_vlan_filter_table_init(struct zxdh_hw *hw, uint16_t vport); int zxdh_vlan_filter_table_set(struct zxdh_hw *hw, uint16_t vport, uint16_t vlan_id, uint8_t enable); int zxdh_rss_table_set(struct zxdh_hw *hw, uint16_t vport, struct zxdh_rss_reta *rss_reta); @@ -372,5 +372,10 @@ int zxdh_set_panel_attr(struct rte_eth_dev *dev, struct zxdh_panel_table *panel_ int zxdh_dev_broadcast_set(struct zxdh_hw *hw, uint16_t vport, bool enable); int zxdh_set_vlan_filter(struct zxdh_hw *hw, uint16_t vport, uint8_t enable); int zxdh_set_vlan_offload(struct zxdh_hw *hw, uint16_t vport, uint8_t type, uint8_t enable); +int zxdh_set_port_vlan_attr(struct zxdh_hw *hw, uint16_t vport, + struct zxdh_port_vlan_table *port_vlan); +int zxdh_get_port_vlan_attr(struct zxdh_hw *hw, uint16_t vport, + struct zxdh_port_vlan_table *port_vlan); +int zxdh_port_vlan_table_init(struct zxdh_hw *hw, uint16_t vport); #endif /* ZXDH_TABLES_H */ -- 2.27.0 [-- Attachment #1.1.2: Type: text/html , Size: 17628 bytes --] ^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH v2 4/5] net/zxdh: modify RSS related issues 2025-06-17 2:04 ` [PATCH v2 1/5] net/zxdh: fix meson.build issus in compilation Junlong Wang 2025-06-17 2:05 ` [PATCH v2 2/5] net/zxdh: modify some MAC config issues Junlong Wang 2025-06-17 2:05 ` [PATCH v2 3/5] net/zxdh: modify some VLAN related issues Junlong Wang @ 2025-06-17 2:05 ` Junlong Wang 2025-06-17 2:05 ` [PATCH v2 5/5] net/zxdh: add support VLAN TPID set ops Junlong Wang ` (2 subsequent siblings) 5 siblings, 0 replies; 16+ messages in thread From: Junlong Wang @ 2025-06-17 2:05 UTC (permalink / raw) To: stephen; +Cc: dev, Junlong Wang [-- Attachment #1.1.1: Type: text/plain, Size: 5879 bytes --] modify rss related issues in testing process. Modify the comments of the maintainers. Fixes: 01acc23bab13 ("net/zxdh: optimize RSS operations") Signed-off-by: Junlong Wang <wang.junlong1@zte.com.cn> --- drivers/net/zxdh/zxdh_ethdev.h | 1 + drivers/net/zxdh/zxdh_ethdev_ops.c | 64 +++++++++++++++++++----------- drivers/net/zxdh/zxdh_msg.c | 10 +++-- 3 files changed, 47 insertions(+), 28 deletions(-) diff --git a/drivers/net/zxdh/zxdh_ethdev.h b/drivers/net/zxdh/zxdh_ethdev.h index 169af209a2..1013446876 100644 --- a/drivers/net/zxdh/zxdh_ethdev.h +++ b/drivers/net/zxdh/zxdh_ethdev.h @@ -54,6 +54,7 @@ #define ZXDH_SLOT_MAX 256 #define ZXDH_MAX_VF 256 #define ZXDH_HASHIDX_MAX 6 +#define ZXDH_RSS_HASH_KEY_LEN 40U union zxdh_virport_num { uint16_t vport; diff --git a/drivers/net/zxdh/zxdh_ethdev_ops.c b/drivers/net/zxdh/zxdh_ethdev_ops.c index 3eed388dac..b1361ef518 100644 --- a/drivers/net/zxdh/zxdh_ethdev_ops.c +++ b/drivers/net/zxdh/zxdh_ethdev_ops.c @@ -1170,7 +1170,7 @@ zxdh_rss_hf_to_hw(uint64_t hf) } static uint64_t -zxdh_rss_hf_to_eth(uint32_t hw_hf) +zxdh_rss_hf_to_eth(uint64_t hw_hf) { uint64_t hf = 0; @@ -1208,7 +1208,7 @@ zxdh_rss_hash_update(struct rte_eth_dev *dev, hw_hf_new = zxdh_rss_hf_to_hw(rss_conf->rss_hf); hw_hf_old = zxdh_rss_hf_to_hw(old_rss_conf->rss_hf); - if ((hw_hf_new != hw_hf_old || !!rss_conf->rss_hf)) + if (hw_hf_new != hw_hf_old || hw->rss_enable != !!rss_conf->rss_hf) need_update_hf = 1; if (need_update_hf) { @@ -1230,6 +1230,9 @@ zxdh_rss_hash_update(struct rte_eth_dev *dev, return -EINVAL; } } + hw->rss_enable = !!rss_conf->rss_hf; + if (rss_conf->rss_hf == 0) + return 0; if (hw->is_pf) { ret = zxdh_get_port_attr(hw, hw->vport.vport, &port_attr); port_attr.rss_hash_factor = hw_hf_new; @@ -1257,15 +1260,16 @@ zxdh_rss_hash_update(struct rte_eth_dev *dev, int zxdh_rss_hash_conf_get(struct rte_eth_dev *dev, struct rte_eth_rss_conf *rss_conf) { - struct zxdh_hw *hw = (struct zxdh_hw *)dev->data->dev_private; + struct zxdh_hw *hw = dev->data->dev_private; struct rte_eth_rss_conf *old_rss_conf = &dev->data->dev_conf.rx_adv_conf.rss_conf; struct zxdh_msg_info msg = {0}; uint8_t zxdh_msg_reply_info[ZXDH_ST_SZ_BYTES(msg_reply_info)] = {0}; void *reply_body_addr = ZXDH_ADDR_OF(msg_reply_info, zxdh_msg_reply_info, reply_body); void *rss_hf_msg_addr = ZXDH_ADDR_OF(msg_reply_body, reply_body_addr, rss_hf_msg); struct zxdh_port_attr_table port_attr = {0}; - uint32_t rss_hf; - uint32_t hw_hf; + uint64_t rss_hf = 0; + uint64_t hw_hf = 0; + uint8_t need_update_hf = 0; int ret; if (rss_conf == NULL) { @@ -1273,27 +1277,40 @@ zxdh_rss_hash_conf_get(struct rte_eth_dev *dev, struct rte_eth_rss_conf *rss_con return -ENOMEM; } - hw_hf = zxdh_rss_hf_to_hw(old_rss_conf->rss_hf); - rss_conf->rss_hf = zxdh_rss_hf_to_eth(hw_hf); + if (hw->rss_enable == 0) { + rss_conf->rss_hf = 0; + return 0; + } - zxdh_msg_head_build(hw, ZXDH_RSS_HF_GET, &msg); - if (hw->is_pf) { - ret = zxdh_get_port_attr(hw, hw->vport.vport, &port_attr); - if (ret) { - PMD_DRV_LOG(ERR, "rss hash factor set failed"); - return -EINVAL; - } - ZXDH_SET(rss_hf, rss_hf_msg_addr, rss_hf, port_attr.rss_hash_factor); - } else { - ret = zxdh_vf_send_msg_to_pf(dev, &msg, sizeof(struct zxdh_msg_info), - zxdh_msg_reply_info, ZXDH_ST_SZ_BYTES(msg_reply_info)); - if (ret) { - PMD_DRV_LOG(ERR, "rss hash factor set failed"); - return -EINVAL; + if (old_rss_conf->rss_hf == 0) + need_update_hf = 1; + + if (!need_update_hf) { + hw_hf = zxdh_rss_hf_to_hw(old_rss_conf->rss_hf); + rss_conf->rss_hf = zxdh_rss_hf_to_eth(hw_hf); + } + + if (need_update_hf) { + zxdh_msg_head_build(hw, ZXDH_RSS_HF_GET, &msg); + if (hw->is_pf) { + ret = zxdh_get_port_attr(hw, hw->vport.vport, &port_attr); + if (ret) { + PMD_DRV_LOG(ERR, "rss hash factor set failed"); + return -EINVAL; + } + ZXDH_SET(rss_hf, rss_hf_msg_addr, rss_hf, port_attr.rss_hash_factor); + } else { + ret = zxdh_vf_send_msg_to_pf(dev, &msg, sizeof(struct zxdh_msg_info), + zxdh_msg_reply_info, ZXDH_ST_SZ_BYTES(msg_reply_info)); + if (ret) { + PMD_DRV_LOG(ERR, "rss hash factor set failed"); + return -EINVAL; + } } + rss_hf = ZXDH_GET(rss_hf, rss_hf_msg_addr, rss_hf); + rss_conf->rss_hf = zxdh_rss_hf_to_eth(rss_hf); + old_rss_conf->rss_hf = zxdh_rss_hf_to_eth(hw_hf); } - rss_hf = ZXDH_GET(rss_hf, rss_hf_msg_addr, rss_hf); - rss_conf->rss_hf = zxdh_rss_hf_to_eth(rss_hf); return 0; } @@ -1352,7 +1369,6 @@ zxdh_rss_configure(struct rte_eth_dev *dev) if (curr_rss_enable && hw->rss_init == 0) { /* config hash factor */ - dev->data->dev_conf.rx_adv_conf.rss_conf.rss_hf = ZXDH_HF_F5_ETH; hw_hf = zxdh_rss_hf_to_hw(dev->data->dev_conf.rx_adv_conf.rss_conf.rss_hf); memset(&msg, 0, sizeof(msg)); if (hw->is_pf) { diff --git a/drivers/net/zxdh/zxdh_msg.c b/drivers/net/zxdh/zxdh_msg.c index e607ea1dab..b378a99a7e 100644 --- a/drivers/net/zxdh/zxdh_msg.c +++ b/drivers/net/zxdh/zxdh_msg.c @@ -1713,12 +1713,14 @@ zxdh_vf_rss_table_get(struct zxdh_hw *hw, uint16_t vport, void *cfg_data __rte_u if (ret) sprintf(str, "set rss reta tbl failed, code:%d", ret); - *res_len = strlen(str) + sizeof(uint8_t); - if (ret == 0) + if (ret == 0) { + *res_len = ZXDH_ST_SZ_BYTES(rss_reta) + sizeof(uint8_t); ZXDH_SET(msg_reply_body, reply, flag, ZXDH_REPS_SUCC); - else + } else { + *res_len = strlen(str) + sizeof(uint8_t); ZXDH_SET(msg_reply_body, reply, flag, ZXDH_REPS_FAIL); - memcpy(reply_data_addr, str, strlen(str) + 1); + memcpy(reply_data_addr, str, strlen(str) + 1); + } return ret; } -- 2.27.0 [-- Attachment #1.1.2: Type: text/html , Size: 13714 bytes --] ^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH v2 5/5] net/zxdh: add support VLAN TPID set ops 2025-06-17 2:04 ` [PATCH v2 1/5] net/zxdh: fix meson.build issus in compilation Junlong Wang ` (2 preceding siblings ...) 2025-06-17 2:05 ` [PATCH v2 4/5] net/zxdh: modify RSS " Junlong Wang @ 2025-06-17 2:05 ` Junlong Wang 2025-06-17 3:32 ` zhoumin 2025-06-17 14:01 ` [PATCH v2 1/5] net/zxdh: fix meson.build issus in compilation Stephen Hemminger 2025-06-17 15:20 ` Stephen Hemminger 5 siblings, 1 reply; 16+ messages in thread From: Junlong Wang @ 2025-06-17 2:05 UTC (permalink / raw) To: stephen; +Cc: dev, Junlong Wang [-- Attachment #1.1.1: Type: text/plain, Size: 6034 bytes --] provided vlan tpid set ops implementations. Signed-off-by: Junlong Wang <wang.junlong1@zte.com.cn> --- drivers/net/zxdh/zxdh_ethdev.c | 1 + drivers/net/zxdh/zxdh_ethdev_ops.c | 37 ++++++++++++++++++++++++++++++ drivers/net/zxdh/zxdh_ethdev_ops.h | 1 + drivers/net/zxdh/zxdh_msg.c | 30 ++++++++++++++++++++++++ drivers/net/zxdh/zxdh_msg.h | 6 +++++ 5 files changed, 75 insertions(+) diff --git a/drivers/net/zxdh/zxdh_ethdev.c b/drivers/net/zxdh/zxdh_ethdev.c index d92df46d11..9512aff99c 100644 --- a/drivers/net/zxdh/zxdh_ethdev.c +++ b/drivers/net/zxdh/zxdh_ethdev.c @@ -1429,6 +1429,7 @@ static const struct eth_dev_ops zxdh_eth_dev_ops = { .allmulticast_disable = zxdh_dev_allmulticast_disable, .vlan_filter_set = zxdh_dev_vlan_filter_set, .vlan_offload_set = zxdh_dev_vlan_offload_set, + .vlan_tpid_set = zxdh_vlan_tpid_set, .reta_update = zxdh_dev_rss_reta_update, .reta_query = zxdh_dev_rss_reta_query, .rss_hash_update = zxdh_rss_hash_update, diff --git a/drivers/net/zxdh/zxdh_ethdev_ops.c b/drivers/net/zxdh/zxdh_ethdev_ops.c index b1361ef518..52a6b1c919 100644 --- a/drivers/net/zxdh/zxdh_ethdev_ops.c +++ b/drivers/net/zxdh/zxdh_ethdev_ops.c @@ -1004,6 +1004,43 @@ zxdh_dev_vlan_offload_set(struct rte_eth_dev *dev, int mask) return ret; } +int +zxdh_vlan_tpid_set(struct rte_eth_dev *dev, enum rte_vlan_type vlan_type, uint16_t tpid) +{ + struct zxdh_hw *hw = dev->data->dev_private; + struct zxdh_port_vlan_table port_vlan_table = {0}; + struct zxdh_msg_info msg = {0}; + int ret = 0; + + if (vlan_type != RTE_ETH_VLAN_TYPE_OUTER) { + PMD_DRV_LOG(ERR, "unsupported rte vlan type!"); + return -1; + } + + if (hw->is_pf) { + ret = zxdh_get_port_vlan_attr(hw, hw->vport.vport, &port_vlan_table); + if (ret != 0) + PMD_DRV_LOG(ERR, "get port vlan attr table failed"); + port_vlan_table.hit_flag = 1; + port_vlan_table.business_vlan_tpid = tpid; + ret = zxdh_set_port_vlan_attr(hw, hw->vport.vport, &port_vlan_table); + if (ret != 0) + PMD_DRV_LOG(ERR, "set port vlan tpid %d attr table failed", tpid); + } else { + zxdh_msg_head_build(hw, ZXDH_VLAN_SET_TPID, &msg); + msg.data.zxdh_vlan_tpid.tpid = tpid; + ret = zxdh_vf_send_msg_to_pf(dev, &msg, + sizeof(struct zxdh_msg_info), NULL, 0); + if (ret) { + PMD_DRV_LOG(ERR, "port %d vlan tpid %d set failed", + hw->vfid, tpid); + return -1; + } + } + + return 0; +} + int zxdh_dev_rss_reta_update(struct rte_eth_dev *dev, struct rte_eth_rss_reta_entry64 *reta_conf, diff --git a/drivers/net/zxdh/zxdh_ethdev_ops.h b/drivers/net/zxdh/zxdh_ethdev_ops.h index 97a1eb4532..6015b3de59 100644 --- a/drivers/net/zxdh/zxdh_ethdev_ops.h +++ b/drivers/net/zxdh/zxdh_ethdev_ops.h @@ -120,6 +120,7 @@ int zxdh_dev_allmulticast_enable(struct rte_eth_dev *dev); int zxdh_dev_allmulticast_disable(struct rte_eth_dev *dev); int zxdh_dev_vlan_filter_set(struct rte_eth_dev *dev, uint16_t vlan_id, int on); int zxdh_dev_vlan_offload_set(struct rte_eth_dev *dev, int mask); +int zxdh_vlan_tpid_set(struct rte_eth_dev *dev, enum rte_vlan_type vlan_type, uint16_t tpid); int zxdh_dev_rss_reta_update(struct rte_eth_dev *dev, struct rte_eth_rss_reta_entry64 *reta_conf, uint16_t reta_size); diff --git a/drivers/net/zxdh/zxdh_msg.c b/drivers/net/zxdh/zxdh_msg.c index b378a99a7e..69fdd3cf4e 100644 --- a/drivers/net/zxdh/zxdh_msg.c +++ b/drivers/net/zxdh/zxdh_msg.c @@ -2157,6 +2157,35 @@ zxdh_vf_mtr_hw_profile_cfg(struct zxdh_hw *pf_hw __rte_unused, return 0; } +static int +zxdh_vf_vlan_tpid_set(struct zxdh_hw *pf_hw, uint16_t vport, void *cfg_data, + void *res_info, uint16_t *res_len) +{ + struct zxdh_vlan_tpid *vlan_tpid = (struct zxdh_vlan_tpid *)cfg_data; + struct zxdh_port_vlan_table port_vlan_table = {0}; + int ret = 0; + + RTE_ASSERT(!cfg_data || !pf_hw || !res_info || !res_len); + + ret = zxdh_get_port_vlan_attr(pf_hw, vport, &port_vlan_table); + if (ret) { + PMD_DRV_LOG(ERR, "get port vlan attr failed, code:%d", ret); + goto proc_end; + } + port_vlan_table.hit_flag = 1; + port_vlan_table.business_vlan_tpid = vlan_tpid->tpid; + ret = zxdh_set_port_vlan_attr(pf_hw, vport, &port_vlan_table); + if (ret) { + PMD_DRV_LOG(ERR, "set port vlan attr failed, code:%d", ret); + goto proc_end; + } + +proc_end: + *res_len = sizeof(uint8_t); + ZXDH_SET(msg_reply_body, res_info, flag, ZXDH_REPS_FAIL); + return ret; +} + static const zxdh_msg_process_callback zxdh_proc_cb[] = { [ZXDH_NULL] = NULL, [ZXDH_VF_PORT_INIT] = zxdh_vf_port_init, @@ -2168,6 +2197,7 @@ static const zxdh_msg_process_callback zxdh_proc_cb[] = { [ZXDH_VLAN_FILTER_ADD] = zxdh_vf_vlan_filter_table_add, [ZXDH_VLAN_FILTER_DEL] = zxdh_vf_vlan_filter_table_del, [ZXDH_VLAN_OFFLOAD] = zxdh_vf_set_vlan_offload, + [ZXDH_VLAN_SET_TPID] = zxdh_vf_vlan_tpid_set, [ZXDH_RSS_ENABLE] = zxdh_vf_rss_enable, [ZXDH_RSS_RETA_GET] = zxdh_vf_rss_table_get, [ZXDH_RSS_RETA_SET] = zxdh_vf_rss_table_set, diff --git a/drivers/net/zxdh/zxdh_msg.h b/drivers/net/zxdh/zxdh_msg.h index 7dad6f7335..86c406c333 100644 --- a/drivers/net/zxdh/zxdh_msg.h +++ b/drivers/net/zxdh/zxdh_msg.h @@ -229,6 +229,7 @@ enum zxdh_msg_type { ZXDH_VLAN_FILTER_ADD = 18, ZXDH_VLAN_FILTER_DEL = 19, ZXDH_VLAN_OFFLOAD = 21, + ZXDH_VLAN_SET_TPID = 23, ZXDH_PORT_ATTRS_SET = 25, ZXDH_PORT_PROMISC_SET = 26, @@ -535,6 +536,10 @@ struct zxdh_plcr_profile_free { uint16_t profile_id; }; +struct zxdh_vlan_tpid { + uint16_t tpid; +}; + struct zxdh_msg_info { union { uint8_t head_len[ZXDH_MSG_HEAD_LEN]; @@ -551,6 +556,7 @@ struct zxdh_msg_info { struct zxdh_vlan_filter vlan_filter_msg; struct zxdh_vlan_filter_set vlan_filter_set_msg; struct zxdh_vlan_offload vlan_offload_msg; + struct zxdh_vlan_tpid zxdh_vlan_tpid; struct zxdh_rss_reta rss_reta; struct zxdh_rss_enable rss_enable; struct zxdh_rss_hf rss_hf; -- 2.27.0 [-- Attachment #1.1.2: Type: text/html , Size: 12576 bytes --] ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v2 5/5] net/zxdh: add support VLAN TPID set ops 2025-06-17 2:05 ` [PATCH v2 5/5] net/zxdh: add support VLAN TPID set ops Junlong Wang @ 2025-06-17 3:32 ` zhoumin 0 siblings, 0 replies; 16+ messages in thread From: zhoumin @ 2025-06-17 3:32 UTC (permalink / raw) To: dev Recheck-request: rebase=main, loongarch-compilation ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v2 1/5] net/zxdh: fix meson.build issus in compilation 2025-06-17 2:04 ` [PATCH v2 1/5] net/zxdh: fix meson.build issus in compilation Junlong Wang ` (3 preceding siblings ...) 2025-06-17 2:05 ` [PATCH v2 5/5] net/zxdh: add support VLAN TPID set ops Junlong Wang @ 2025-06-17 14:01 ` Stephen Hemminger 2025-06-17 15:20 ` Stephen Hemminger 5 siblings, 0 replies; 16+ messages in thread From: Stephen Hemminger @ 2025-06-17 14:01 UTC (permalink / raw) To: Junlong Wang; +Cc: dev, stable On Tue, 17 Jun 2025 10:04:59 +0800 Junlong Wang <wang.junlong1@zte.com.cn> wrote: > fix meson.build issus in compilation, which > caused the inability to compile in the arm64 environment. > > Fixes: 29e89288ff14 ("net/zxdh: add driver skeleton") > Cc: stable@dpdk.org > > Signed-off-by: Junlong Wang <wang.junlong1@zte.com.cn> Typo in commit subject. I can fix that during merge.s/issus/issues/ ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v2 1/5] net/zxdh: fix meson.build issus in compilation 2025-06-17 2:04 ` [PATCH v2 1/5] net/zxdh: fix meson.build issus in compilation Junlong Wang ` (4 preceding siblings ...) 2025-06-17 14:01 ` [PATCH v2 1/5] net/zxdh: fix meson.build issus in compilation Stephen Hemminger @ 2025-06-17 15:20 ` Stephen Hemminger 5 siblings, 0 replies; 16+ messages in thread From: Stephen Hemminger @ 2025-06-17 15:20 UTC (permalink / raw) To: Junlong Wang; +Cc: dev, stable On Tue, 17 Jun 2025 10:04:59 +0800 Junlong Wang <wang.junlong1@zte.com.cn> wrote: > fix meson.build issus in compilation, which > caused the inability to compile in the arm64 environment. > > Fixes: 29e89288ff14 ("net/zxdh: add driver skeleton") > Cc: stable@dpdk.org > > Signed-off-by: Junlong Wang <wang.junlong1@zte.com.cn> > --- This series looks much better but please revise the commit message (again). To help with stable (and user reports) it is better to include more precise wording of what the problem is. It is clearer if you use the word "fix" instead of "modify". Also, describe what the bug is. This applies to several of these patches. If it is a bug fix it could be marked for stable. Although this driver is new and experimental so won't get backported. Instead of: Subject: net/zxdh: modify some MAC config issues modify some mac config issues, which were discovered during the testing process. Fixes: 1c8f68b64cfc ("net/zxdh: optimize MAC operations") Signed-off-by: Junlong Wang <wang.junlong1@zte.com.cn> Something like: Subject: net/zxdh: fix issues related to MAC configuration Fix error handling when MAC configuration fails. This is issue was discovered during internal testing. Fixes: 1c8f68b64cfc ("net/zxdh: optimize MAC operations") Cc: stable@dpdk.org Signed-off-by: Junlong Wang <wang.junlong1@zte.com.cn> ^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2025-06-17 15:20 UTC | newest] Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2025-06-07 2:30 [PATCH v1 1/3] net/zxdh: modify some MAC config issues Junlong Wang 2025-06-07 2:30 ` [PATCH v1 2/3] net/zxdh: modify some VLAN related issues Junlong Wang 2025-06-16 16:20 ` Stephen Hemminger 2025-06-07 2:30 ` [PATCH v1 3/3] net/zxdh: modify RSS " Junlong Wang 2025-06-16 16:22 ` Stephen Hemminger 2025-06-12 0:14 ` [PATCH v1 1/3] net/zxdh: modify some MAC config issues Thomas Monjalon 2025-06-12 1:18 ` Junlong Wang 2025-06-16 16:16 ` Stephen Hemminger 2025-06-17 2:04 ` [PATCH v2 1/5] net/zxdh: fix meson.build issus in compilation Junlong Wang 2025-06-17 2:05 ` [PATCH v2 2/5] net/zxdh: modify some MAC config issues Junlong Wang 2025-06-17 2:05 ` [PATCH v2 3/5] net/zxdh: modify some VLAN related issues Junlong Wang 2025-06-17 2:05 ` [PATCH v2 4/5] net/zxdh: modify RSS " Junlong Wang 2025-06-17 2:05 ` [PATCH v2 5/5] net/zxdh: add support VLAN TPID set ops Junlong Wang 2025-06-17 3:32 ` zhoumin 2025-06-17 14:01 ` [PATCH v2 1/5] net/zxdh: fix meson.build issus in compilation Stephen Hemminger 2025-06-17 15:20 ` Stephen Hemminger
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).