@@ -73,19 +73,28 @@ enum board_idx {
73
73
BCM57301 ,
74
74
BCM57302 ,
75
75
BCM57304 ,
76
+ BCM57417_NPAR ,
76
77
BCM58700 ,
77
78
BCM57311 ,
78
79
BCM57312 ,
79
80
BCM57402 ,
80
81
BCM57404 ,
81
82
BCM57406 ,
82
- BCM57404_NPAR ,
83
+ BCM57402_NPAR ,
84
+ BCM57407 ,
83
85
BCM57412 ,
84
86
BCM57414 ,
85
87
BCM57416 ,
86
88
BCM57417 ,
87
- BCM57414_NPAR ,
89
+ BCM57412_NPAR ,
88
90
BCM57314 ,
91
+ BCM57417_SFP ,
92
+ BCM57416_SFP ,
93
+ BCM57404_NPAR ,
94
+ BCM57406_NPAR ,
95
+ BCM57407_SFP ,
96
+ BCM57414_NPAR ,
97
+ BCM57416_NPAR ,
89
98
BCM57304_VF ,
90
99
BCM57404_VF ,
91
100
BCM57414_VF ,
@@ -99,19 +108,28 @@ static const struct {
99
108
{ "Broadcom BCM57301 NetXtreme-C Single-port 10Gb Ethernet" },
100
109
{ "Broadcom BCM57302 NetXtreme-C Dual-port 10Gb/25Gb Ethernet" },
101
110
{ "Broadcom BCM57304 NetXtreme-C Dual-port 10Gb/25Gb/40Gb/50Gb Ethernet" },
111
+ { "Broadcom BCM57417 NetXtreme-E Ethernet Partition" },
102
112
{ "Broadcom BCM58700 Nitro 4-port 1Gb/2.5Gb/10Gb Ethernet" },
103
113
{ "Broadcom BCM57311 NetXtreme-C Single-port 10Gb Ethernet" },
104
114
{ "Broadcom BCM57312 NetXtreme-C Dual-port 10Gb/25Gb Ethernet" },
105
115
{ "Broadcom BCM57402 NetXtreme-E Dual-port 10Gb Ethernet" },
106
116
{ "Broadcom BCM57404 NetXtreme-E Dual-port 10Gb/25Gb Ethernet" },
107
117
{ "Broadcom BCM57406 NetXtreme-E Dual-port 10GBase-T Ethernet" },
108
- { "Broadcom BCM57404 NetXtreme-E Ethernet Partition" },
118
+ { "Broadcom BCM57402 NetXtreme-E Ethernet Partition" },
119
+ { "Broadcom BCM57407 NetXtreme-E Dual-port 10GBase-T Ethernet" },
109
120
{ "Broadcom BCM57412 NetXtreme-E Dual-port 10Gb Ethernet" },
110
121
{ "Broadcom BCM57414 NetXtreme-E Dual-port 10Gb/25Gb Ethernet" },
111
122
{ "Broadcom BCM57416 NetXtreme-E Dual-port 10GBase-T Ethernet" },
112
123
{ "Broadcom BCM57417 NetXtreme-E Dual-port 10GBase-T Ethernet" },
113
- { "Broadcom BCM57414 NetXtreme-E Ethernet Partition" },
124
+ { "Broadcom BCM57412 NetXtreme-E Ethernet Partition" },
114
125
{ "Broadcom BCM57314 NetXtreme-C Dual-port 10Gb/25Gb/40Gb/50Gb Ethernet" },
126
+ { "Broadcom BCM57417 NetXtreme-E Dual-port 10Gb/25Gb Ethernet" },
127
+ { "Broadcom BCM57416 NetXtreme-E Dual-port 10Gb Ethernet" },
128
+ { "Broadcom BCM57404 NetXtreme-E Ethernet Partition" },
129
+ { "Broadcom BCM57406 NetXtreme-E Ethernet Partition" },
130
+ { "Broadcom BCM57407 NetXtreme-E Dual-port 25Gb Ethernet" },
131
+ { "Broadcom BCM57414 NetXtreme-E Ethernet Partition" },
132
+ { "Broadcom BCM57416 NetXtreme-E Ethernet Partition" },
115
133
{ "Broadcom BCM57304 NetXtreme-C Ethernet Virtual Function" },
116
134
{ "Broadcom BCM57404 NetXtreme-E Ethernet Virtual Function" },
117
135
{ "Broadcom BCM57414 NetXtreme-E Ethernet Virtual Function" },
@@ -122,19 +140,28 @@ static const struct pci_device_id bnxt_pci_tbl[] = {
122
140
{ PCI_VDEVICE (BROADCOM , 0x16c8 ), .driver_data = BCM57301 },
123
141
{ PCI_VDEVICE (BROADCOM , 0x16c9 ), .driver_data = BCM57302 },
124
142
{ PCI_VDEVICE (BROADCOM , 0x16ca ), .driver_data = BCM57304 },
143
+ { PCI_VDEVICE (BROADCOM , 0x16cc ), .driver_data = BCM57417_NPAR },
125
144
{ PCI_VDEVICE (BROADCOM , 0x16cd ), .driver_data = BCM58700 },
126
145
{ PCI_VDEVICE (BROADCOM , 0x16ce ), .driver_data = BCM57311 },
127
146
{ PCI_VDEVICE (BROADCOM , 0x16cf ), .driver_data = BCM57312 },
128
147
{ PCI_VDEVICE (BROADCOM , 0x16d0 ), .driver_data = BCM57402 },
129
148
{ PCI_VDEVICE (BROADCOM , 0x16d1 ), .driver_data = BCM57404 },
130
149
{ PCI_VDEVICE (BROADCOM , 0x16d2 ), .driver_data = BCM57406 },
131
- { PCI_VDEVICE (BROADCOM , 0x16d4 ), .driver_data = BCM57404_NPAR },
150
+ { PCI_VDEVICE (BROADCOM , 0x16d4 ), .driver_data = BCM57402_NPAR },
151
+ { PCI_VDEVICE (BROADCOM , 0x16d5 ), .driver_data = BCM57407 },
132
152
{ PCI_VDEVICE (BROADCOM , 0x16d6 ), .driver_data = BCM57412 },
133
153
{ PCI_VDEVICE (BROADCOM , 0x16d7 ), .driver_data = BCM57414 },
134
154
{ PCI_VDEVICE (BROADCOM , 0x16d8 ), .driver_data = BCM57416 },
135
155
{ PCI_VDEVICE (BROADCOM , 0x16d9 ), .driver_data = BCM57417 },
136
- { PCI_VDEVICE (BROADCOM , 0x16de ), .driver_data = BCM57414_NPAR },
156
+ { PCI_VDEVICE (BROADCOM , 0x16de ), .driver_data = BCM57412_NPAR },
137
157
{ PCI_VDEVICE (BROADCOM , 0x16df ), .driver_data = BCM57314 },
158
+ { PCI_VDEVICE (BROADCOM , 0x16e2 ), .driver_data = BCM57417_SFP },
159
+ { PCI_VDEVICE (BROADCOM , 0x16e3 ), .driver_data = BCM57416_SFP },
160
+ { PCI_VDEVICE (BROADCOM , 0x16e7 ), .driver_data = BCM57404_NPAR },
161
+ { PCI_VDEVICE (BROADCOM , 0x16e8 ), .driver_data = BCM57406_NPAR },
162
+ { PCI_VDEVICE (BROADCOM , 0x16e9 ), .driver_data = BCM57407_SFP },
163
+ { PCI_VDEVICE (BROADCOM , 0x16ec ), .driver_data = BCM57414_NPAR },
164
+ { PCI_VDEVICE (BROADCOM , 0x16ee ), .driver_data = BCM57416_NPAR },
138
165
#ifdef CONFIG_BNXT_SRIOV
139
166
{ PCI_VDEVICE (BROADCOM , 0x16cb ), .driver_data = BCM57304_VF },
140
167
{ PCI_VDEVICE (BROADCOM , 0x16d3 ), .driver_data = BCM57404_VF },
@@ -3240,7 +3267,7 @@ static int bnxt_hwrm_cfa_ntuple_filter_alloc(struct bnxt *bp,
3240
3267
struct bnxt_vnic_info * vnic = & bp -> vnic_info [fltr -> rxq + 1 ];
3241
3268
3242
3269
bnxt_hwrm_cmd_hdr_init (bp , & req , HWRM_CFA_NTUPLE_FILTER_ALLOC , -1 , -1 );
3243
- req .l2_filter_id = bp -> vnic_info [0 ].fw_l2_filter_id [0 ];
3270
+ req .l2_filter_id = bp -> vnic_info [0 ].fw_l2_filter_id [fltr -> l2_fltr_idx ];
3244
3271
3245
3272
req .enables = cpu_to_le32 (BNXT_NTP_FLTR_FLAGS );
3246
3273
@@ -5790,8 +5817,12 @@ static bool bnxt_rfs_capable(struct bnxt *bp)
5790
5817
return false;
5791
5818
5792
5819
vnics = 1 + bp -> rx_nr_rings ;
5793
- if (vnics > pf -> max_rsscos_ctxs || vnics > pf -> max_vnics )
5820
+ if (vnics > pf -> max_rsscos_ctxs || vnics > pf -> max_vnics ) {
5821
+ netdev_warn (bp -> dev ,
5822
+ "Not enough resources to support NTUPLE filters, enough resources for up to %d rx rings\n" ,
5823
+ min (pf -> max_rsscos_ctxs - 1 , pf -> max_vnics - 1 ));
5794
5824
return false;
5825
+ }
5795
5826
5796
5827
return true;
5797
5828
#else
@@ -5804,7 +5835,7 @@ static netdev_features_t bnxt_fix_features(struct net_device *dev,
5804
5835
{
5805
5836
struct bnxt * bp = netdev_priv (dev );
5806
5837
5807
- if (!bnxt_rfs_capable (bp ))
5838
+ if (( features & NETIF_F_NTUPLE ) && !bnxt_rfs_capable (bp ))
5808
5839
features &= ~NETIF_F_NTUPLE ;
5809
5840
5810
5841
/* Both CTAG and STAG VLAN accelaration on the RX side have to be
@@ -6299,7 +6330,8 @@ static bool bnxt_fltr_match(struct bnxt_ntuple_filter *f1,
6299
6330
keys1 -> ports .ports == keys2 -> ports .ports &&
6300
6331
keys1 -> basic .ip_proto == keys2 -> basic .ip_proto &&
6301
6332
keys1 -> basic .n_proto == keys2 -> basic .n_proto &&
6302
- ether_addr_equal (f1 -> src_mac_addr , f2 -> src_mac_addr ))
6333
+ ether_addr_equal (f1 -> src_mac_addr , f2 -> src_mac_addr ) &&
6334
+ ether_addr_equal (f1 -> dst_mac_addr , f2 -> dst_mac_addr ))
6303
6335
return true;
6304
6336
6305
6337
return false;
@@ -6312,12 +6344,28 @@ static int bnxt_rx_flow_steer(struct net_device *dev, const struct sk_buff *skb,
6312
6344
struct bnxt_ntuple_filter * fltr , * new_fltr ;
6313
6345
struct flow_keys * fkeys ;
6314
6346
struct ethhdr * eth = (struct ethhdr * )skb_mac_header (skb );
6315
- int rc = 0 , idx , bit_id ;
6347
+ int rc = 0 , idx , bit_id , l2_idx = 0 ;
6316
6348
struct hlist_head * head ;
6317
6349
6318
6350
if (skb -> encapsulation )
6319
6351
return - EPROTONOSUPPORT ;
6320
6352
6353
+ if (!ether_addr_equal (dev -> dev_addr , eth -> h_dest )) {
6354
+ struct bnxt_vnic_info * vnic = & bp -> vnic_info [0 ];
6355
+ int off = 0 , j ;
6356
+
6357
+ netif_addr_lock_bh (dev );
6358
+ for (j = 0 ; j < vnic -> uc_filter_count ; j ++ , off += ETH_ALEN ) {
6359
+ if (ether_addr_equal (eth -> h_dest ,
6360
+ vnic -> uc_list + off )) {
6361
+ l2_idx = j + 1 ;
6362
+ break ;
6363
+ }
6364
+ }
6365
+ netif_addr_unlock_bh (dev );
6366
+ if (!l2_idx )
6367
+ return - EINVAL ;
6368
+ }
6321
6369
new_fltr = kzalloc (sizeof (* new_fltr ), GFP_ATOMIC );
6322
6370
if (!new_fltr )
6323
6371
return - ENOMEM ;
@@ -6335,6 +6383,7 @@ static int bnxt_rx_flow_steer(struct net_device *dev, const struct sk_buff *skb,
6335
6383
goto err_free ;
6336
6384
}
6337
6385
6386
+ memcpy (new_fltr -> dst_mac_addr , eth -> h_dest , ETH_ALEN );
6338
6387
memcpy (new_fltr -> src_mac_addr , eth -> h_source , ETH_ALEN );
6339
6388
6340
6389
idx = skb_get_hash_raw (skb ) & BNXT_NTP_FLTR_HASH_MASK ;
@@ -6360,6 +6409,7 @@ static int bnxt_rx_flow_steer(struct net_device *dev, const struct sk_buff *skb,
6360
6409
6361
6410
new_fltr -> sw_id = (u16 )bit_id ;
6362
6411
new_fltr -> flow_id = flow_id ;
6412
+ new_fltr -> l2_fltr_idx = l2_idx ;
6363
6413
new_fltr -> rxq = rxq_index ;
6364
6414
hlist_add_head_rcu (& new_fltr -> hash , head );
6365
6415
bp -> ntp_fltr_count ++ ;
0 commit comments