未验证 提交 60cd8669 编写于 作者: O openeuler-ci-bot 提交者: Gitee

!320 Some bugfix about rx packet,rx copybreak and phy link ksettings for the HNS3.

Merge Pull Request from: @svishen 
 
This series includes some bugfix for the HNS3 ethernet driver.
Patch 1# fix incorrect hw rss hash type of rx packet.
Fixes: 79664077 ("net: hns3: support RXD advanced layout")
Fixes: 232fc64b ("net: hns3: Add HW RSS hash information to RX skb")
Fixes: ea485867 ("net: hns3: handle the BD info on the last BD of the packet")

Patch 2# fix return value check bug of rx copybreak.
Fixes: e74a726d ("net: hns3: refactor hns3_nic_reuse_page()")
Fixes: 99f6b5fb ("net: hns3: use bounce buffer when rx page can not be reused")

Patch 3# net: hns3: fix setting incorrect phy link ksettings
for firmware in resetting process
Fixes: f5f2b3e4 ("net: hns3: add support for imp-controlled PHYs")
Fixes: c5ef83cb ("net: hns3: fix for phy_addr error in hclge_mac_mdio_config")
Fixes: 2312e050 ("net: hns3: Fix for deadlock problem occurring when unregistering ae_algo")

issue:
#I65DT5:net: hns3: This series bugfix for the HNS3 ethernet driver.

Test:
before

```
[root@localhost bin]# ethtool --reset enp53s0f0 all
ETHTOOL_RESET 0xffffffff
[150074.537297][T753377] hns3 0000:35:00.0 enp53s0f0: Setting reset type 6
[150074.539476][T753377] hns3 0000:35:00.0: received reset event, reset type is 6
Components reset:     0xffffffff[150074.542900][T753350] hns3 0000:35:00.0: global reset requested

[150074.546063][    C3] hns3 0000:35:00.0: global reset interrupt
[150074.548914][    C3] hns3 0000:35:00.1: global reset interrupt
[150074.552496][T753303] hns3 0000:35:00.1 enp53s0f1: link down
[root@localhost bin]# [150074.665230][T753303] hns3 0000:35:00.1: prepare wait ok
[150074.850640][T753350] hns3 0000:35:00.0: cleaned 0, need to clean 1
[150074.854640][T753350] hns3 0000:35:00.0: get link status cmd failed -52
[150074.857504][T753350] hns3 0000:35:00.0: failed to get phy link ksetting, ret = -16.
[150074.875240][T753350] hns3 0000:35:00.0 enp53s0f0: link down
[150074.985282][T753350] hns3 0000:35:00.0: prepare wait ok
[150075.093602][T753350] hns3 0000:35:00.0: In reset process RoCE client uninit.
[150075.101975][T753303] hns3 0000:35:00.1: In reset process RoCE client uninit.
[150075.436311][T753303] hns3 0000:35:00.1: Func clear success after reset.
[150075.438800][T753303] hns3 0000:35:00.1: Func clear success after reset.
[150075.441592][T753303] hns3 0000:35:00.1: Func clear success after reset.
[150075.443786][T753303] hns3 0000:35:00.1: Func clear success after reset.
[150075.446365][T753303] hns3 0000:35:00.1: Func clear success after reset.
[150075.447419][T753350] hns3 0000:35:00.0: Func clear success after reset.
[150075.451091][T753350] hns3 0000:35:00.0: Func clear success after reset.
[150075.453474][T753350] hns3 0000:35:00.0: Func clear success after reset.
[150075.455644][T753350] hns3 0000:35:00.0: Func clear success after reset.
[150075.458244][T753350] hns3 0000:35:00.0: Func clear success after reset.
[150076.100055][T753303] hns3 0000:35:00.1: The firmware version is 3.10.3.3
[150076.176640][T753303] hns3 0000:35:00.1: failed to set phy link ksettings, ret = -22.
[150076.180219][T753303] hns3 0000:35:00.1: failed to init tp port, ret = -22
[150076.184130][T753303] hns3 0000:35:00.1: re-schedule reset task(1)
[150076.331566][T753350] hns3 0000:35:00.0: The firmware version is 3.10.3.3
[150076.389714][T753350] hns3 0000:35:00.0: failed to set phy link ksettings, ret = -22.
[150076.392443][T753350] hns3 0000:35:00.0: failed to init tp port, ret = -22
[150076.395624][T753350] hns3 0000:35:00.0: re-schedule reset task(1)
[150076.505410][T753350] hns3 0000:35:00.0: prepare wait ok
[150076.505447][T753303] hns3 0000:35:00.1: prepare wait ok
[150076.505595][T753303] hns3 0000:35:00.1: In reset process RoCE client uninit.
[150076.507203][T753350] hns3 0000:35:00.0: In reset process RoCE client uninit.
[150076.613321][T753303] hns3 0000:35:00.1 enp53s0f1: already uninitialized
[150076.616410][T753303] hns3 0000:35:00.1: The firmware version is 3.10.3.3
[150076.672797][T753303] hns3 0000:35:00.1: failed to set phy link ksettings, ret = -22.
[150076.675727][T753303] hns3 0000:35:00.1: failed to init tp port, ret = -22
[150076.679115][T753303] hns3 0000:35:00.1: re-schedule reset task(2)
[150076.680281][T753350] hns3 0000:35:00.0 enp53s0f0: already uninitialized
[150076.685248][T753350] hns3 0000:35:00.0: The firmware version is 3.10.3.3
[150076.741248][T753350] hns3 0000:35:00.0: failed to set phy link ksettings, ret = -22.
[150076.743891][T753350] hns3 0000:35:00.0: failed to init tp port, ret = -22
[150076.746731][T753350] hns3 0000:35:00.0: re-schedule reset task(2)
[150076.853335][T753303] hns3 0000:35:00.1: prepare wait ok
[150076.855171][T753303] hns3 0000:35:00.1: In reset process RoCE client uninit.
[150076.857620][T753350] hns3 0000:35:00.0: prepare wait ok
[150076.857773][T753350] hns3 0000:35:00.0: In reset process RoCE client uninit.
[150076.965700][T753303] hns3 0000:35:00.1 enp53s0f1: already uninitialized
[150076.969398][T753303] hns3 0000:35:00.1: The firmware version is 3.10.3.3
[150077.028455][T753303] hns3 0000:35:00.1: failed to set phy link ksettings, ret = -22.
[150077.031628][T753303] hns3 0000:35:00.1: failed to init tp port, ret = -22
[150077.034743][T753303] hns3 0000:35:00.1: re-schedule reset task(3)
[150077.034959][T753350] hns3 0000:35:00.0 enp53s0f0: already uninitialized
[150077.040503][T753350] hns3 0000:35:00.0: The firmware version is 3.10.3.3
[150077.097388][T753350] hns3 0000:35:00.0: failed to set phy link ksettings, ret = -22.
[150077.099911][T753350] hns3 0000:35:00.0: failed to init tp port, ret = -22
[150077.102682][T753350] hns3 0000:35:00.0: re-schedule reset task(3)
[150077.209423][T753303] hns3 0000:35:00.1: prepare wait ok
[150077.211246][T753303] hns3 0000:35:00.1: In reset process RoCE client uninit.
[150077.213324][T753350] hns3 0000:35:00.0: prepare wait ok
[150077.213405][T753350] hns3 0000:35:00.0: In reset process RoCE client uninit.
[150077.321889][T753350] hns3 0000:35:00.0 enp53s0f0: already uninitialized
[150077.326240][T753350] hns3 0000:35:00.0: The firmware version is 3.10.3.3
[150077.380433][T753350] hns3 0000:35:00.0: failed to set phy link ksettings, ret = -22.
[150077.383371][T753350] hns3 0000:35:00.0: failed to init tp port, ret = -22
[150077.386465][T753350] hns3 0000:35:00.0: re-schedule reset task(4)
[150077.386647][T753303] hns3 0000:35:00.1 enp53s0f1: already uninitialized
[150077.391998][T753303] hns3 0000:35:00.1: The firmware version is 3.10.3.3
[150077.448488][T753303] hns3 0000:35:00.1: failed to set phy link ksettings, ret = -22.
[150077.451611][T753303] hns3 0000:35:00.1: failed to init tp port, ret = -22
[150077.454382][T753303] hns3 0000:35:00.1: re-schedule reset task(4)
[150077.561306][T753303] hns3 0000:35:00.1: prepare wait ok
[150077.561349][T753350] hns3 0000:35:00.0: prepare wait ok
[150077.561519][T753350] hns3 0000:35:00.0: In reset process RoCE client uninit.
[150077.563110][T753303] hns3 0000:35:00.1: In reset process RoCE client uninit.
[150077.670158][T753350] hns3 0000:35:00.0 enp53s0f0: already uninitialized
[150077.674054][T753350] hns3 0000:35:00.0: The firmware version is 3.10.3.3
[150077.728474][T753350] hns3 0000:35:00.0: failed to set phy link ksettings, ret = -22.
[150077.731156][T753350] hns3 0000:35:00.0: failed to init tp port, ret = -22
[150077.733575][T753350] hns3 0000:35:00.0: re-schedule reset task(5)
[150077.733778][T753303] hns3 0000:35:00.1 enp53s0f1: already uninitialized
[150077.738889][T753303] hns3 0000:35:00.1: The firmware version is 3.10.3.3
[150077.792638][T753303] hns3 0000:35:00.1: failed to set phy link ksettings, ret = -22.
[150077.795669][T753303] hns3 0000:35:00.1: failed to init tp port, ret = -22
[150077.798354][T753303] hns3 0000:35:00.1: re-schedule reset task(5)
[150077.905835][T753350] hns3 0000:35:00.0: prepare wait ok
[150077.907645][T753350] hns3 0000:35:00.0: In reset process RoCE client uninit.
[150077.909440][T753303] hns3 0000:35:00.1: prepare wait ok
[150077.911198][T753303] hns3 0000:35:00.1: In reset process RoCE client uninit.
[150078.018590][T753350] hns3 0000:35:00.0 enp53s0f0: already uninitialized
[150078.022734][T753350] hns3 0000:35:00.0: The firmware version is 3.10.3.3
[150078.076269][T753350] hns3 0000:35:00.0: failed to set phy link ksettings, ret = -22.
[150078.079143][T753350] hns3 0000:35:00.0: failed to init tp port, ret = -22
[150078.081812][T753350] hns3 0000:35:00.0: Reset fail!
[150078.081957][T753303] hns3 0000:35:00.1 enp53s0f1: already uninitialized
[150078.083730][T753350] hns3 0000:35:00.0: dump reset info:
[150078.083730][T753350] PF reset count: 0
[150078.083730][T753350] FLR reset count: 0
[150078.083730][T753350] GLOBAL reset count: 1
[150078.083730][T753350] IMP reset count: 0
[150078.083730][T753350] reset done count: 0
[150078.083730][T753350] HW reset done count: 6
[150078.083730][T753350] reset count: 6
[150078.083730][T753350] reset fail count: 5
[150078.083730][T753350] vector0 interrupt enable status: 0x1
[150078.083730][T753350] reset interrupt source: 0x0
[150078.083730][T753350] reset interrupt status: 0x0
[150078.083730][T753350] RAS interrupt status: 0x0
[150078.083730][T753350] hardware reset status: 0x0
[150078.083730][T753350] handshake status: 0x10080
[150078.083730][T753350] function reset status: 0x0
[150078.083730][T753350] hdev state: 0x802b2
[150078.086765][T753303] hns3 0000:35:00.1: The firmware version is 3.10.3.3
[150078.160671][T753303] hns3 0000:35:00.1: failed to set phy link ksettings, ret = -22.
[150078.163837][T753303] hns3 0000:35:00.1: failed to init tp port, ret = -22
[150078.166346][T753303] hns3 0000:35:00.1: Reset fail!
[150078.168266][T753303] hns3 0000:35:00.1: dump reset info:
[150078.168266][T753303] PF reset count: 0
[150078.168266][T753303] FLR reset count: 0
[150078.168266][T753303] GLOBAL reset count: 1
[150078.168266][T753303] IMP reset count: 0
[150078.168266][T753303] reset done count: 0
[150078.168266][T753303] HW reset done count: 6
[150078.168266][T753303] reset count: 6
[150078.168266][T753303] reset fail count: 5
[150078.168266][T753303] vector0 interrupt enable status: 0x1
[150078.168266][T753303] reset interrupt source: 0x0
[150078.168266][T753303] reset interrupt status: 0x0
[150078.168266][T753303] RAS interrupt status: 0x0
[150078.168266][T753303] hardware reset status: 0x0
[150078.168266][T753303] handshake status: 0x10080
[150078.168266][T753303] function reset status: 0x0
[150078.168266][T753303] hdev state: 0x802b2

[root@localhost bin]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: enp65s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether e0:00:84:56:4e:38 brd ff:ff:ff:ff:ff:ff
    inet 192.168.60.11/24 scope global enp65s0f0
       valid_lft forever preferred_lft forever
4: enp65s0f1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
    link/ether e0:00:84:56:4e:39 brd ff:ff:ff:ff:ff:ff
372: enp53s0f0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
    link/ether ce:04:7a:b4:9a:b1 brd ff:ff:ff:ff:ff:ff
373: enp53s0f1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
    link/ether 42:2f:aa:f3:50:e5 brd ff:ff:ff:ff:ff:ff
[root@localhost bin]#

```

after
```
[root@localhost pll]# ethtool --reset enp53s0f1 all
ETHTOOL_RESET 0xffffffff
[20652.651629][ T2931] hns3 0000:35:00.1 enp53s0f1: Setting reset type 6
Components reset:     0xffffffff
[root@localhost pll]# [20662.722669][    C1] hns3 0000:35:00.1: triggering reset in reset timer
[20662.725095][    C1] hns3 0000:35:00.1: received reset event, reset type is 6
[20662.728231][ T2880] hns3 0000:35:00.1: global reset requested
[20662.730430][    C1] hns3 0000:35:00.0: global reset interrupt
[20662.732888][    C1] hns3 0000:35:00.1: global reset interrupt
[20662.733803][ T2923] hns3 0000:35:00.0 enp53s0f0: link down
[20662.846863][ T2923] hns3 0000:35:00.0: prepare wait ok
[20663.028936][ T2880] hns3 0000:35:00.1: cleaned 0, need to clean 1
[20663.031251][ T2880] hns3 0000:35:00.1: get link status cmd failed -52
[20663.039432][ T2880] hns3 0000:35:00.1 enp53s0f1: link down
[20663.147103][ T2880] hns3 0000:35:00.1: prepare wait ok
[20663.312845][ T2880] hns3 0000:35:00.1: The firmware version is 3.10.3.3
[20664.260637][ T2880] hns3 0000:35:00.1: phc initializes ok!
[20664.404095][ T2880] hns3 0000:35:00.1: Reset done, hclge driver initialization finished.
[20664.536803][ T2923] hns3 0000:35:00.0: The firmware version is 3.10.3.3
[20665.484856][ T2923] hns3 0000:35:00.0: phc initializes ok!
[20665.628249][ T2923] hns3 0000:35:00.0: Reset done, hclge driver initialization finished.
[20665.875837][ T2923] hns3 0000:35:00.0 enp53s0f0: link up
[20665.881068][ T2880] hns3 0000:35:00.1 enp53s0f1: link up
``` 
 
Link:https://gitee.com/openeuler/kernel/pulls/320 
Reviewed-by: Zheng Zengkai <zhengzengkai@huawei.com> 
Reviewed-by: Yue Haibing <yuehaibing@huawei.com> 
Signed-off-by: Zheng Zengkai <zhengzengkai@huawei.com> 
...@@ -845,7 +845,6 @@ struct hnae3_knic_private_info { ...@@ -845,7 +845,6 @@ struct hnae3_knic_private_info {
const struct hnae3_dcb_ops *dcb_ops; const struct hnae3_dcb_ops *dcb_ops;
u16 int_rl_setting; u16 int_rl_setting;
enum pkt_hash_types rss_type;
void __iomem *io_base; void __iomem *io_base;
}; };
......
...@@ -191,23 +191,6 @@ u32 hclge_comm_get_rss_key_size(struct hnae3_handle *handle) ...@@ -191,23 +191,6 @@ u32 hclge_comm_get_rss_key_size(struct hnae3_handle *handle)
return HCLGE_COMM_RSS_KEY_SIZE; return HCLGE_COMM_RSS_KEY_SIZE;
} }
void hclge_comm_get_rss_type(struct hnae3_handle *nic,
struct hclge_comm_rss_tuple_cfg *rss_tuple_sets)
{
if (rss_tuple_sets->ipv4_tcp_en ||
rss_tuple_sets->ipv4_udp_en ||
rss_tuple_sets->ipv4_sctp_en ||
rss_tuple_sets->ipv6_tcp_en ||
rss_tuple_sets->ipv6_udp_en ||
rss_tuple_sets->ipv6_sctp_en)
nic->kinfo.rss_type = PKT_HASH_TYPE_L4;
else if (rss_tuple_sets->ipv4_fragment_en ||
rss_tuple_sets->ipv6_fragment_en)
nic->kinfo.rss_type = PKT_HASH_TYPE_L3;
else
nic->kinfo.rss_type = PKT_HASH_TYPE_NONE;
}
int hclge_comm_parse_rss_hfunc(struct hclge_comm_rss_cfg *rss_cfg, int hclge_comm_parse_rss_hfunc(struct hclge_comm_rss_cfg *rss_cfg,
const u8 hfunc, u8 *hash_algo) const u8 hfunc, u8 *hash_algo)
{ {
...@@ -344,9 +327,6 @@ int hclge_comm_set_rss_input_tuple(struct hnae3_handle *nic, ...@@ -344,9 +327,6 @@ int hclge_comm_set_rss_input_tuple(struct hnae3_handle *nic,
req->ipv6_sctp_en = rss_cfg->rss_tuple_sets.ipv6_sctp_en; req->ipv6_sctp_en = rss_cfg->rss_tuple_sets.ipv6_sctp_en;
req->ipv6_fragment_en = rss_cfg->rss_tuple_sets.ipv6_fragment_en; req->ipv6_fragment_en = rss_cfg->rss_tuple_sets.ipv6_fragment_en;
if (is_pf)
hclge_comm_get_rss_type(nic, &rss_cfg->rss_tuple_sets);
ret = hclge_comm_cmd_send(hw, &desc, 1); ret = hclge_comm_cmd_send(hw, &desc, 1);
if (ret) if (ret)
dev_err(&hw->cmq.csq.pdev->dev, dev_err(&hw->cmq.csq.pdev->dev,
......
...@@ -95,8 +95,6 @@ struct hclge_comm_rss_tc_mode_cmd { ...@@ -95,8 +95,6 @@ struct hclge_comm_rss_tc_mode_cmd {
}; };
u32 hclge_comm_get_rss_key_size(struct hnae3_handle *handle); u32 hclge_comm_get_rss_key_size(struct hnae3_handle *handle);
void hclge_comm_get_rss_type(struct hnae3_handle *nic,
struct hclge_comm_rss_tuple_cfg *rss_tuple_sets);
void hclge_comm_rss_indir_init_cfg(struct hnae3_ae_dev *ae_dev, void hclge_comm_rss_indir_init_cfg(struct hnae3_ae_dev *ae_dev,
struct hclge_comm_rss_cfg *rss_cfg); struct hclge_comm_rss_cfg *rss_cfg);
int hclge_comm_get_rss_tuple(struct hclge_comm_rss_cfg *rss_cfg, int flow_type, int hclge_comm_get_rss_tuple(struct hclge_comm_rss_cfg *rss_cfg, int flow_type,
......
...@@ -110,26 +110,28 @@ static const struct pci_device_id hns3_pci_tbl[] = { ...@@ -110,26 +110,28 @@ static const struct pci_device_id hns3_pci_tbl[] = {
}; };
MODULE_DEVICE_TABLE(pci, hns3_pci_tbl); MODULE_DEVICE_TABLE(pci, hns3_pci_tbl);
#define HNS3_RX_PTYPE_ENTRY(ptype, l, s, t) \ #define HNS3_RX_PTYPE_ENTRY(ptype, l, s, t, h) \
{ ptype, \ { ptype, \
l, \ l, \
CHECKSUM_##s, \ CHECKSUM_##s, \
HNS3_L3_TYPE_##t, \ HNS3_L3_TYPE_##t, \
1 } 1, \
h}
#define HNS3_RX_PTYPE_UNUSED_ENTRY(ptype) \ #define HNS3_RX_PTYPE_UNUSED_ENTRY(ptype) \
{ ptype, 0, CHECKSUM_NONE, HNS3_L3_TYPE_PARSE_FAIL, 0 } { ptype, 0, CHECKSUM_NONE, HNS3_L3_TYPE_PARSE_FAIL, 0, \
PKT_HASH_TYPE_NONE }
static const struct hns3_rx_ptype hns3_rx_ptype_tbl[] = { static const struct hns3_rx_ptype hns3_rx_ptype_tbl[] = {
HNS3_RX_PTYPE_UNUSED_ENTRY(0), HNS3_RX_PTYPE_UNUSED_ENTRY(0),
HNS3_RX_PTYPE_ENTRY(1, 0, COMPLETE, ARP), HNS3_RX_PTYPE_ENTRY(1, 0, COMPLETE, ARP, PKT_HASH_TYPE_NONE),
HNS3_RX_PTYPE_ENTRY(2, 0, COMPLETE, RARP), HNS3_RX_PTYPE_ENTRY(2, 0, COMPLETE, RARP, PKT_HASH_TYPE_NONE),
HNS3_RX_PTYPE_ENTRY(3, 0, COMPLETE, LLDP), HNS3_RX_PTYPE_ENTRY(3, 0, COMPLETE, LLDP, PKT_HASH_TYPE_NONE),
HNS3_RX_PTYPE_ENTRY(4, 0, COMPLETE, PARSE_FAIL), HNS3_RX_PTYPE_ENTRY(4, 0, COMPLETE, PARSE_FAIL, PKT_HASH_TYPE_NONE),
HNS3_RX_PTYPE_ENTRY(5, 0, COMPLETE, PARSE_FAIL), HNS3_RX_PTYPE_ENTRY(5, 0, COMPLETE, PARSE_FAIL, PKT_HASH_TYPE_NONE),
HNS3_RX_PTYPE_ENTRY(6, 0, COMPLETE, PARSE_FAIL), HNS3_RX_PTYPE_ENTRY(6, 0, COMPLETE, PARSE_FAIL, PKT_HASH_TYPE_NONE),
HNS3_RX_PTYPE_ENTRY(7, 0, COMPLETE, CNM), HNS3_RX_PTYPE_ENTRY(7, 0, COMPLETE, CNM, PKT_HASH_TYPE_NONE),
HNS3_RX_PTYPE_ENTRY(8, 0, NONE, PARSE_FAIL), HNS3_RX_PTYPE_ENTRY(8, 0, NONE, PARSE_FAIL, PKT_HASH_TYPE_NONE),
HNS3_RX_PTYPE_UNUSED_ENTRY(9), HNS3_RX_PTYPE_UNUSED_ENTRY(9),
HNS3_RX_PTYPE_UNUSED_ENTRY(10), HNS3_RX_PTYPE_UNUSED_ENTRY(10),
HNS3_RX_PTYPE_UNUSED_ENTRY(11), HNS3_RX_PTYPE_UNUSED_ENTRY(11),
...@@ -137,36 +139,36 @@ static const struct hns3_rx_ptype hns3_rx_ptype_tbl[] = { ...@@ -137,36 +139,36 @@ static const struct hns3_rx_ptype hns3_rx_ptype_tbl[] = {
HNS3_RX_PTYPE_UNUSED_ENTRY(13), HNS3_RX_PTYPE_UNUSED_ENTRY(13),
HNS3_RX_PTYPE_UNUSED_ENTRY(14), HNS3_RX_PTYPE_UNUSED_ENTRY(14),
HNS3_RX_PTYPE_UNUSED_ENTRY(15), HNS3_RX_PTYPE_UNUSED_ENTRY(15),
HNS3_RX_PTYPE_ENTRY(16, 0, COMPLETE, PARSE_FAIL), HNS3_RX_PTYPE_ENTRY(16, 0, COMPLETE, PARSE_FAIL, PKT_HASH_TYPE_NONE),
HNS3_RX_PTYPE_ENTRY(17, 0, COMPLETE, IPV4), HNS3_RX_PTYPE_ENTRY(17, 0, COMPLETE, IPV4, PKT_HASH_TYPE_NONE),
HNS3_RX_PTYPE_ENTRY(18, 0, COMPLETE, IPV4), HNS3_RX_PTYPE_ENTRY(18, 0, COMPLETE, IPV4, PKT_HASH_TYPE_NONE),
HNS3_RX_PTYPE_ENTRY(19, 0, UNNECESSARY, IPV4), HNS3_RX_PTYPE_ENTRY(19, 0, UNNECESSARY, IPV4, PKT_HASH_TYPE_L4),
HNS3_RX_PTYPE_ENTRY(20, 0, UNNECESSARY, IPV4), HNS3_RX_PTYPE_ENTRY(20, 0, UNNECESSARY, IPV4, PKT_HASH_TYPE_L4),
HNS3_RX_PTYPE_ENTRY(21, 0, NONE, IPV4), HNS3_RX_PTYPE_ENTRY(21, 0, NONE, IPV4, PKT_HASH_TYPE_NONE),
HNS3_RX_PTYPE_ENTRY(22, 0, UNNECESSARY, IPV4), HNS3_RX_PTYPE_ENTRY(22, 0, UNNECESSARY, IPV4, PKT_HASH_TYPE_L4),
HNS3_RX_PTYPE_ENTRY(23, 0, NONE, IPV4), HNS3_RX_PTYPE_ENTRY(23, 0, NONE, IPV4, PKT_HASH_TYPE_L3),
HNS3_RX_PTYPE_ENTRY(24, 0, NONE, IPV4), HNS3_RX_PTYPE_ENTRY(24, 0, NONE, IPV4, PKT_HASH_TYPE_L3),
HNS3_RX_PTYPE_ENTRY(25, 0, UNNECESSARY, IPV4), HNS3_RX_PTYPE_ENTRY(25, 0, UNNECESSARY, IPV4, PKT_HASH_TYPE_L4),
HNS3_RX_PTYPE_UNUSED_ENTRY(26), HNS3_RX_PTYPE_UNUSED_ENTRY(26),
HNS3_RX_PTYPE_UNUSED_ENTRY(27), HNS3_RX_PTYPE_UNUSED_ENTRY(27),
HNS3_RX_PTYPE_UNUSED_ENTRY(28), HNS3_RX_PTYPE_UNUSED_ENTRY(28),
HNS3_RX_PTYPE_ENTRY(29, 0, COMPLETE, PARSE_FAIL), HNS3_RX_PTYPE_ENTRY(29, 0, COMPLETE, PARSE_FAIL, PKT_HASH_TYPE_NONE),
HNS3_RX_PTYPE_ENTRY(30, 0, COMPLETE, PARSE_FAIL), HNS3_RX_PTYPE_ENTRY(30, 0, COMPLETE, PARSE_FAIL, PKT_HASH_TYPE_NONE),
HNS3_RX_PTYPE_ENTRY(31, 0, COMPLETE, IPV4), HNS3_RX_PTYPE_ENTRY(31, 0, COMPLETE, IPV4, PKT_HASH_TYPE_L3),
HNS3_RX_PTYPE_ENTRY(32, 0, COMPLETE, IPV4), HNS3_RX_PTYPE_ENTRY(32, 0, COMPLETE, IPV4, PKT_HASH_TYPE_L3),
HNS3_RX_PTYPE_ENTRY(33, 1, UNNECESSARY, IPV4), HNS3_RX_PTYPE_ENTRY(33, 1, UNNECESSARY, IPV4, PKT_HASH_TYPE_L4),
HNS3_RX_PTYPE_ENTRY(34, 1, UNNECESSARY, IPV4), HNS3_RX_PTYPE_ENTRY(34, 1, UNNECESSARY, IPV4, PKT_HASH_TYPE_L4),
HNS3_RX_PTYPE_ENTRY(35, 1, UNNECESSARY, IPV4), HNS3_RX_PTYPE_ENTRY(35, 1, UNNECESSARY, IPV4, PKT_HASH_TYPE_L4),
HNS3_RX_PTYPE_ENTRY(36, 0, COMPLETE, IPV4), HNS3_RX_PTYPE_ENTRY(36, 0, COMPLETE, IPV4, PKT_HASH_TYPE_L3),
HNS3_RX_PTYPE_ENTRY(37, 0, COMPLETE, IPV4), HNS3_RX_PTYPE_ENTRY(37, 0, COMPLETE, IPV4, PKT_HASH_TYPE_L3),
HNS3_RX_PTYPE_UNUSED_ENTRY(38), HNS3_RX_PTYPE_UNUSED_ENTRY(38),
HNS3_RX_PTYPE_ENTRY(39, 0, COMPLETE, IPV6), HNS3_RX_PTYPE_ENTRY(39, 0, COMPLETE, IPV6, PKT_HASH_TYPE_L3),
HNS3_RX_PTYPE_ENTRY(40, 0, COMPLETE, IPV6), HNS3_RX_PTYPE_ENTRY(40, 0, COMPLETE, IPV6, PKT_HASH_TYPE_L3),
HNS3_RX_PTYPE_ENTRY(41, 1, UNNECESSARY, IPV6), HNS3_RX_PTYPE_ENTRY(41, 1, UNNECESSARY, IPV6, PKT_HASH_TYPE_L4),
HNS3_RX_PTYPE_ENTRY(42, 1, UNNECESSARY, IPV6), HNS3_RX_PTYPE_ENTRY(42, 1, UNNECESSARY, IPV6, PKT_HASH_TYPE_L4),
HNS3_RX_PTYPE_ENTRY(43, 1, UNNECESSARY, IPV6), HNS3_RX_PTYPE_ENTRY(43, 1, UNNECESSARY, IPV6, PKT_HASH_TYPE_L4),
HNS3_RX_PTYPE_ENTRY(44, 0, COMPLETE, IPV6), HNS3_RX_PTYPE_ENTRY(44, 0, COMPLETE, IPV6, PKT_HASH_TYPE_L3),
HNS3_RX_PTYPE_ENTRY(45, 0, COMPLETE, IPV6), HNS3_RX_PTYPE_ENTRY(45, 0, COMPLETE, IPV6, PKT_HASH_TYPE_L3),
HNS3_RX_PTYPE_UNUSED_ENTRY(46), HNS3_RX_PTYPE_UNUSED_ENTRY(46),
HNS3_RX_PTYPE_UNUSED_ENTRY(47), HNS3_RX_PTYPE_UNUSED_ENTRY(47),
HNS3_RX_PTYPE_UNUSED_ENTRY(48), HNS3_RX_PTYPE_UNUSED_ENTRY(48),
...@@ -232,35 +234,35 @@ static const struct hns3_rx_ptype hns3_rx_ptype_tbl[] = { ...@@ -232,35 +234,35 @@ static const struct hns3_rx_ptype hns3_rx_ptype_tbl[] = {
HNS3_RX_PTYPE_UNUSED_ENTRY(108), HNS3_RX_PTYPE_UNUSED_ENTRY(108),
HNS3_RX_PTYPE_UNUSED_ENTRY(109), HNS3_RX_PTYPE_UNUSED_ENTRY(109),
HNS3_RX_PTYPE_UNUSED_ENTRY(110), HNS3_RX_PTYPE_UNUSED_ENTRY(110),
HNS3_RX_PTYPE_ENTRY(111, 0, COMPLETE, IPV6), HNS3_RX_PTYPE_ENTRY(111, 0, COMPLETE, IPV6, PKT_HASH_TYPE_L3),
HNS3_RX_PTYPE_ENTRY(112, 0, COMPLETE, IPV6), HNS3_RX_PTYPE_ENTRY(112, 0, COMPLETE, IPV6, PKT_HASH_TYPE_L3),
HNS3_RX_PTYPE_ENTRY(113, 0, UNNECESSARY, IPV6), HNS3_RX_PTYPE_ENTRY(113, 0, UNNECESSARY, IPV6, PKT_HASH_TYPE_L4),
HNS3_RX_PTYPE_ENTRY(114, 0, UNNECESSARY, IPV6), HNS3_RX_PTYPE_ENTRY(114, 0, UNNECESSARY, IPV6, PKT_HASH_TYPE_L4),
HNS3_RX_PTYPE_ENTRY(115, 0, NONE, IPV6), HNS3_RX_PTYPE_ENTRY(115, 0, NONE, IPV6, PKT_HASH_TYPE_L3),
HNS3_RX_PTYPE_ENTRY(116, 0, UNNECESSARY, IPV6), HNS3_RX_PTYPE_ENTRY(116, 0, UNNECESSARY, IPV6, PKT_HASH_TYPE_L4),
HNS3_RX_PTYPE_ENTRY(117, 0, NONE, IPV6), HNS3_RX_PTYPE_ENTRY(117, 0, NONE, IPV6, PKT_HASH_TYPE_L3),
HNS3_RX_PTYPE_ENTRY(118, 0, NONE, IPV6), HNS3_RX_PTYPE_ENTRY(118, 0, NONE, IPV6, PKT_HASH_TYPE_L3),
HNS3_RX_PTYPE_ENTRY(119, 0, UNNECESSARY, IPV6), HNS3_RX_PTYPE_ENTRY(119, 0, UNNECESSARY, IPV6, PKT_HASH_TYPE_L4),
HNS3_RX_PTYPE_UNUSED_ENTRY(120), HNS3_RX_PTYPE_UNUSED_ENTRY(120),
HNS3_RX_PTYPE_UNUSED_ENTRY(121), HNS3_RX_PTYPE_UNUSED_ENTRY(121),
HNS3_RX_PTYPE_UNUSED_ENTRY(122), HNS3_RX_PTYPE_UNUSED_ENTRY(122),
HNS3_RX_PTYPE_ENTRY(123, 0, COMPLETE, PARSE_FAIL), HNS3_RX_PTYPE_ENTRY(123, 0, COMPLETE, PARSE_FAIL, PKT_HASH_TYPE_NONE),
HNS3_RX_PTYPE_ENTRY(124, 0, COMPLETE, PARSE_FAIL), HNS3_RX_PTYPE_ENTRY(124, 0, COMPLETE, PARSE_FAIL, PKT_HASH_TYPE_NONE),
HNS3_RX_PTYPE_ENTRY(125, 0, COMPLETE, IPV4), HNS3_RX_PTYPE_ENTRY(125, 0, COMPLETE, IPV4, PKT_HASH_TYPE_L3),
HNS3_RX_PTYPE_ENTRY(126, 0, COMPLETE, IPV4), HNS3_RX_PTYPE_ENTRY(126, 0, COMPLETE, IPV4, PKT_HASH_TYPE_L3),
HNS3_RX_PTYPE_ENTRY(127, 1, UNNECESSARY, IPV4), HNS3_RX_PTYPE_ENTRY(127, 1, UNNECESSARY, IPV4, PKT_HASH_TYPE_L4),
HNS3_RX_PTYPE_ENTRY(128, 1, UNNECESSARY, IPV4), HNS3_RX_PTYPE_ENTRY(128, 1, UNNECESSARY, IPV4, PKT_HASH_TYPE_L4),
HNS3_RX_PTYPE_ENTRY(129, 1, UNNECESSARY, IPV4), HNS3_RX_PTYPE_ENTRY(129, 1, UNNECESSARY, IPV4, PKT_HASH_TYPE_L4),
HNS3_RX_PTYPE_ENTRY(130, 0, COMPLETE, IPV4), HNS3_RX_PTYPE_ENTRY(130, 0, COMPLETE, IPV4, PKT_HASH_TYPE_L3),
HNS3_RX_PTYPE_ENTRY(131, 0, COMPLETE, IPV4), HNS3_RX_PTYPE_ENTRY(131, 0, COMPLETE, IPV4, PKT_HASH_TYPE_L3),
HNS3_RX_PTYPE_UNUSED_ENTRY(132), HNS3_RX_PTYPE_UNUSED_ENTRY(132),
HNS3_RX_PTYPE_ENTRY(133, 0, COMPLETE, IPV6), HNS3_RX_PTYPE_ENTRY(133, 0, COMPLETE, IPV6, PKT_HASH_TYPE_L3),
HNS3_RX_PTYPE_ENTRY(134, 0, COMPLETE, IPV6), HNS3_RX_PTYPE_ENTRY(134, 0, COMPLETE, IPV6, PKT_HASH_TYPE_L3),
HNS3_RX_PTYPE_ENTRY(135, 1, UNNECESSARY, IPV6), HNS3_RX_PTYPE_ENTRY(135, 1, UNNECESSARY, IPV6, PKT_HASH_TYPE_L4),
HNS3_RX_PTYPE_ENTRY(136, 1, UNNECESSARY, IPV6), HNS3_RX_PTYPE_ENTRY(136, 1, UNNECESSARY, IPV6, PKT_HASH_TYPE_L4),
HNS3_RX_PTYPE_ENTRY(137, 1, UNNECESSARY, IPV6), HNS3_RX_PTYPE_ENTRY(137, 1, UNNECESSARY, IPV6, PKT_HASH_TYPE_L4),
HNS3_RX_PTYPE_ENTRY(138, 0, COMPLETE, IPV6), HNS3_RX_PTYPE_ENTRY(138, 0, COMPLETE, IPV6, PKT_HASH_TYPE_L3),
HNS3_RX_PTYPE_ENTRY(139, 0, COMPLETE, IPV6), HNS3_RX_PTYPE_ENTRY(139, 0, COMPLETE, IPV6, PKT_HASH_TYPE_L3),
HNS3_RX_PTYPE_UNUSED_ENTRY(140), HNS3_RX_PTYPE_UNUSED_ENTRY(140),
HNS3_RX_PTYPE_UNUSED_ENTRY(141), HNS3_RX_PTYPE_UNUSED_ENTRY(141),
HNS3_RX_PTYPE_UNUSED_ENTRY(142), HNS3_RX_PTYPE_UNUSED_ENTRY(142),
...@@ -3856,8 +3858,8 @@ static void hns3_nic_reuse_page(struct sk_buff *skb, int i, ...@@ -3856,8 +3858,8 @@ static void hns3_nic_reuse_page(struct sk_buff *skb, int i,
desc_cb->reuse_flag = 1; desc_cb->reuse_flag = 1;
} else if (frag_size <= ring->rx_copybreak) { } else if (frag_size <= ring->rx_copybreak) {
ret = hns3_handle_rx_copybreak(skb, i, ring, pull_len, desc_cb); ret = hns3_handle_rx_copybreak(skb, i, ring, pull_len, desc_cb);
if (ret) if (!ret)
goto out; return;
} }
out: out:
...@@ -4251,15 +4253,35 @@ static int hns3_set_gro_and_checksum(struct hns3_enet_ring *ring, ...@@ -4251,15 +4253,35 @@ static int hns3_set_gro_and_checksum(struct hns3_enet_ring *ring,
} }
static void hns3_set_rx_skb_rss_type(struct hns3_enet_ring *ring, static void hns3_set_rx_skb_rss_type(struct hns3_enet_ring *ring,
struct sk_buff *skb, u32 rss_hash) struct sk_buff *skb, u32 rss_hash,
u32 l234info, u32 ol_info)
{ {
struct hnae3_handle *handle = ring->tqp->handle; enum pkt_hash_types rss_type = PKT_HASH_TYPE_NONE;
enum pkt_hash_types rss_type; struct net_device *netdev = ring_to_netdev(ring);
struct hns3_nic_priv *priv = netdev_priv(netdev);
if (rss_hash) if (test_bit(HNS3_NIC_STATE_RXD_ADV_LAYOUT_ENABLE, &priv->state)) {
rss_type = handle->kinfo.rss_type; u32 ptype = hnae3_get_field(ol_info, HNS3_RXD_PTYPE_M,
else HNS3_RXD_PTYPE_S);
rss_type = PKT_HASH_TYPE_NONE;
rss_type = hns3_rx_ptype_tbl[ptype].hash_type;
} else {
int l3_type = hnae3_get_field(l234info, HNS3_RXD_L3ID_M,
HNS3_RXD_L3ID_S);
int l4_type = hnae3_get_field(l234info, HNS3_RXD_L4ID_M,
HNS3_RXD_L4ID_S);
if (l3_type == HNS3_L3_TYPE_IPV4 ||
l3_type == HNS3_L3_TYPE_IPV6) {
if (l4_type == HNS3_L4_TYPE_UDP ||
l4_type == HNS3_L4_TYPE_TCP ||
l4_type == HNS3_L4_TYPE_SCTP)
rss_type = PKT_HASH_TYPE_L4;
else if (l4_type == HNS3_L4_TYPE_IGMP ||
l4_type == HNS3_L4_TYPE_ICMP)
rss_type = PKT_HASH_TYPE_L3;
}
}
skb_set_hash(skb, rss_hash, rss_type); skb_set_hash(skb, rss_hash, rss_type);
} }
...@@ -4362,7 +4384,8 @@ static int hns3_handle_bdinfo(struct hns3_enet_ring *ring, struct sk_buff *skb) ...@@ -4362,7 +4384,8 @@ static int hns3_handle_bdinfo(struct hns3_enet_ring *ring, struct sk_buff *skb)
ring->tqp_vector->rx_group.total_bytes += len; ring->tqp_vector->rx_group.total_bytes += len;
hns3_set_rx_skb_rss_type(ring, skb, le32_to_cpu(desc->rx.rss_hash)); hns3_set_rx_skb_rss_type(ring, skb, le32_to_cpu(desc->rx.rss_hash),
l234info, ol_info);
return 0; return 0;
} }
......
...@@ -414,6 +414,7 @@ struct hns3_rx_ptype { ...@@ -414,6 +414,7 @@ struct hns3_rx_ptype {
u32 ip_summed : 2; u32 ip_summed : 2;
u32 l3_type : 4; u32 l3_type : 4;
u32 valid : 1; u32 valid : 1;
u32 hash_type: 3;
}; };
struct ring_stats { struct ring_stats {
......
...@@ -3331,6 +3331,7 @@ static int hclge_update_tp_port_info(struct hclge_dev *hdev) ...@@ -3331,6 +3331,7 @@ static int hclge_update_tp_port_info(struct hclge_dev *hdev)
hdev->hw.mac.autoneg = cmd.base.autoneg; hdev->hw.mac.autoneg = cmd.base.autoneg;
hdev->hw.mac.speed = cmd.base.speed; hdev->hw.mac.speed = cmd.base.speed;
hdev->hw.mac.duplex = cmd.base.duplex; hdev->hw.mac.duplex = cmd.base.duplex;
linkmode_copy(hdev->hw.mac.advertising, cmd.link_modes.advertising);
return 0; return 0;
} }
...@@ -4974,7 +4975,6 @@ static int hclge_set_rss_tuple(struct hnae3_handle *handle, ...@@ -4974,7 +4975,6 @@ static int hclge_set_rss_tuple(struct hnae3_handle *handle,
return ret; return ret;
} }
hclge_comm_get_rss_type(&vport->nic, &hdev->rss_cfg.rss_tuple_sets);
return 0; return 0;
} }
...@@ -12305,9 +12305,12 @@ static int hclge_init_ae_dev(struct hnae3_ae_dev *ae_dev) ...@@ -12305,9 +12305,12 @@ static int hclge_init_ae_dev(struct hnae3_ae_dev *ae_dev)
if (ret) if (ret)
goto err_msi_irq_uninit; goto err_msi_irq_uninit;
if (hdev->hw.mac.media_type == HNAE3_MEDIA_TYPE_COPPER && if (hdev->hw.mac.media_type == HNAE3_MEDIA_TYPE_COPPER) {
!hnae3_dev_phy_imp_supported(hdev)) { if (hnae3_dev_phy_imp_supported(hdev))
ret = hclge_mac_mdio_config(hdev); ret = hclge_update_tp_port_info(hdev);
else
ret = hclge_mac_mdio_config(hdev);
if (ret) if (ret)
goto err_msi_irq_uninit; goto err_msi_irq_uninit;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册