]> asedeno.scripts.mit.edu Git - linux.git/blob - drivers/net/ethernet/broadcom/bnxt/bnxt.c
c779f9cf8822f329a06caebcb2636c92f5dd8748
[linux.git] / drivers / net / ethernet / broadcom / bnxt / bnxt.c
1 /* Broadcom NetXtreme-C/E network driver.
2  *
3  * Copyright (c) 2014-2016 Broadcom Corporation
4  * Copyright (c) 2016-2019 Broadcom Limited
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation.
9  */
10
11 #include <linux/module.h>
12
13 #include <linux/stringify.h>
14 #include <linux/kernel.h>
15 #include <linux/timer.h>
16 #include <linux/errno.h>
17 #include <linux/ioport.h>
18 #include <linux/slab.h>
19 #include <linux/vmalloc.h>
20 #include <linux/interrupt.h>
21 #include <linux/pci.h>
22 #include <linux/netdevice.h>
23 #include <linux/etherdevice.h>
24 #include <linux/skbuff.h>
25 #include <linux/dma-mapping.h>
26 #include <linux/bitops.h>
27 #include <linux/io.h>
28 #include <linux/irq.h>
29 #include <linux/delay.h>
30 #include <asm/byteorder.h>
31 #include <asm/page.h>
32 #include <linux/time.h>
33 #include <linux/mii.h>
34 #include <linux/mdio.h>
35 #include <linux/if.h>
36 #include <linux/if_vlan.h>
37 #include <linux/if_bridge.h>
38 #include <linux/rtc.h>
39 #include <linux/bpf.h>
40 #include <net/ip.h>
41 #include <net/tcp.h>
42 #include <net/udp.h>
43 #include <net/checksum.h>
44 #include <net/ip6_checksum.h>
45 #include <net/udp_tunnel.h>
46 #include <linux/workqueue.h>
47 #include <linux/prefetch.h>
48 #include <linux/cache.h>
49 #include <linux/log2.h>
50 #include <linux/aer.h>
51 #include <linux/bitmap.h>
52 #include <linux/cpu_rmap.h>
53 #include <linux/cpumask.h>
54 #include <net/pkt_cls.h>
55 #include <linux/hwmon.h>
56 #include <linux/hwmon-sysfs.h>
57 #include <net/page_pool.h>
58
59 #include "bnxt_hsi.h"
60 #include "bnxt.h"
61 #include "bnxt_ulp.h"
62 #include "bnxt_sriov.h"
63 #include "bnxt_ethtool.h"
64 #include "bnxt_dcb.h"
65 #include "bnxt_xdp.h"
66 #include "bnxt_vfr.h"
67 #include "bnxt_tc.h"
68 #include "bnxt_devlink.h"
69 #include "bnxt_debugfs.h"
70
71 #define BNXT_TX_TIMEOUT         (5 * HZ)
72
73 static const char version[] =
74         "Broadcom NetXtreme-C/E driver " DRV_MODULE_NAME " v" DRV_MODULE_VERSION "\n";
75
76 MODULE_LICENSE("GPL");
77 MODULE_DESCRIPTION("Broadcom BCM573xx network driver");
78 MODULE_VERSION(DRV_MODULE_VERSION);
79
80 #define BNXT_RX_OFFSET (NET_SKB_PAD + NET_IP_ALIGN)
81 #define BNXT_RX_DMA_OFFSET NET_SKB_PAD
82 #define BNXT_RX_COPY_THRESH 256
83
84 #define BNXT_TX_PUSH_THRESH 164
85
86 enum board_idx {
87         BCM57301,
88         BCM57302,
89         BCM57304,
90         BCM57417_NPAR,
91         BCM58700,
92         BCM57311,
93         BCM57312,
94         BCM57402,
95         BCM57404,
96         BCM57406,
97         BCM57402_NPAR,
98         BCM57407,
99         BCM57412,
100         BCM57414,
101         BCM57416,
102         BCM57417,
103         BCM57412_NPAR,
104         BCM57314,
105         BCM57417_SFP,
106         BCM57416_SFP,
107         BCM57404_NPAR,
108         BCM57406_NPAR,
109         BCM57407_SFP,
110         BCM57407_NPAR,
111         BCM57414_NPAR,
112         BCM57416_NPAR,
113         BCM57452,
114         BCM57454,
115         BCM5745x_NPAR,
116         BCM57508,
117         BCM57504,
118         BCM57502,
119         BCM57508_NPAR,
120         BCM57504_NPAR,
121         BCM57502_NPAR,
122         BCM58802,
123         BCM58804,
124         BCM58808,
125         NETXTREME_E_VF,
126         NETXTREME_C_VF,
127         NETXTREME_S_VF,
128         NETXTREME_E_P5_VF,
129 };
130
131 /* indexed by enum above */
132 static const struct {
133         char *name;
134 } board_info[] = {
135         [BCM57301] = { "Broadcom BCM57301 NetXtreme-C 10Gb Ethernet" },
136         [BCM57302] = { "Broadcom BCM57302 NetXtreme-C 10Gb/25Gb Ethernet" },
137         [BCM57304] = { "Broadcom BCM57304 NetXtreme-C 10Gb/25Gb/40Gb/50Gb Ethernet" },
138         [BCM57417_NPAR] = { "Broadcom BCM57417 NetXtreme-E Ethernet Partition" },
139         [BCM58700] = { "Broadcom BCM58700 Nitro 1Gb/2.5Gb/10Gb Ethernet" },
140         [BCM57311] = { "Broadcom BCM57311 NetXtreme-C 10Gb Ethernet" },
141         [BCM57312] = { "Broadcom BCM57312 NetXtreme-C 10Gb/25Gb Ethernet" },
142         [BCM57402] = { "Broadcom BCM57402 NetXtreme-E 10Gb Ethernet" },
143         [BCM57404] = { "Broadcom BCM57404 NetXtreme-E 10Gb/25Gb Ethernet" },
144         [BCM57406] = { "Broadcom BCM57406 NetXtreme-E 10GBase-T Ethernet" },
145         [BCM57402_NPAR] = { "Broadcom BCM57402 NetXtreme-E Ethernet Partition" },
146         [BCM57407] = { "Broadcom BCM57407 NetXtreme-E 10GBase-T Ethernet" },
147         [BCM57412] = { "Broadcom BCM57412 NetXtreme-E 10Gb Ethernet" },
148         [BCM57414] = { "Broadcom BCM57414 NetXtreme-E 10Gb/25Gb Ethernet" },
149         [BCM57416] = { "Broadcom BCM57416 NetXtreme-E 10GBase-T Ethernet" },
150         [BCM57417] = { "Broadcom BCM57417 NetXtreme-E 10GBase-T Ethernet" },
151         [BCM57412_NPAR] = { "Broadcom BCM57412 NetXtreme-E Ethernet Partition" },
152         [BCM57314] = { "Broadcom BCM57314 NetXtreme-C 10Gb/25Gb/40Gb/50Gb Ethernet" },
153         [BCM57417_SFP] = { "Broadcom BCM57417 NetXtreme-E 10Gb/25Gb Ethernet" },
154         [BCM57416_SFP] = { "Broadcom BCM57416 NetXtreme-E 10Gb Ethernet" },
155         [BCM57404_NPAR] = { "Broadcom BCM57404 NetXtreme-E Ethernet Partition" },
156         [BCM57406_NPAR] = { "Broadcom BCM57406 NetXtreme-E Ethernet Partition" },
157         [BCM57407_SFP] = { "Broadcom BCM57407 NetXtreme-E 25Gb Ethernet" },
158         [BCM57407_NPAR] = { "Broadcom BCM57407 NetXtreme-E Ethernet Partition" },
159         [BCM57414_NPAR] = { "Broadcom BCM57414 NetXtreme-E Ethernet Partition" },
160         [BCM57416_NPAR] = { "Broadcom BCM57416 NetXtreme-E Ethernet Partition" },
161         [BCM57452] = { "Broadcom BCM57452 NetXtreme-E 10Gb/25Gb/40Gb/50Gb Ethernet" },
162         [BCM57454] = { "Broadcom BCM57454 NetXtreme-E 10Gb/25Gb/40Gb/50Gb/100Gb Ethernet" },
163         [BCM5745x_NPAR] = { "Broadcom BCM5745x NetXtreme-E Ethernet Partition" },
164         [BCM57508] = { "Broadcom BCM57508 NetXtreme-E 10Gb/25Gb/50Gb/100Gb/200Gb Ethernet" },
165         [BCM57504] = { "Broadcom BCM57504 NetXtreme-E 10Gb/25Gb/50Gb/100Gb/200Gb Ethernet" },
166         [BCM57502] = { "Broadcom BCM57502 NetXtreme-E 10Gb/25Gb/50Gb Ethernet" },
167         [BCM57508_NPAR] = { "Broadcom BCM57508 NetXtreme-E Ethernet Partition" },
168         [BCM57504_NPAR] = { "Broadcom BCM57504 NetXtreme-E Ethernet Partition" },
169         [BCM57502_NPAR] = { "Broadcom BCM57502 NetXtreme-E Ethernet Partition" },
170         [BCM58802] = { "Broadcom BCM58802 NetXtreme-S 10Gb/25Gb/40Gb/50Gb Ethernet" },
171         [BCM58804] = { "Broadcom BCM58804 NetXtreme-S 10Gb/25Gb/40Gb/50Gb/100Gb Ethernet" },
172         [BCM58808] = { "Broadcom BCM58808 NetXtreme-S 10Gb/25Gb/40Gb/50Gb/100Gb Ethernet" },
173         [NETXTREME_E_VF] = { "Broadcom NetXtreme-E Ethernet Virtual Function" },
174         [NETXTREME_C_VF] = { "Broadcom NetXtreme-C Ethernet Virtual Function" },
175         [NETXTREME_S_VF] = { "Broadcom NetXtreme-S Ethernet Virtual Function" },
176         [NETXTREME_E_P5_VF] = { "Broadcom BCM5750X NetXtreme-E Ethernet Virtual Function" },
177 };
178
179 static const struct pci_device_id bnxt_pci_tbl[] = {
180         { PCI_VDEVICE(BROADCOM, 0x1604), .driver_data = BCM5745x_NPAR },
181         { PCI_VDEVICE(BROADCOM, 0x1605), .driver_data = BCM5745x_NPAR },
182         { PCI_VDEVICE(BROADCOM, 0x1614), .driver_data = BCM57454 },
183         { PCI_VDEVICE(BROADCOM, 0x16c0), .driver_data = BCM57417_NPAR },
184         { PCI_VDEVICE(BROADCOM, 0x16c8), .driver_data = BCM57301 },
185         { PCI_VDEVICE(BROADCOM, 0x16c9), .driver_data = BCM57302 },
186         { PCI_VDEVICE(BROADCOM, 0x16ca), .driver_data = BCM57304 },
187         { PCI_VDEVICE(BROADCOM, 0x16cc), .driver_data = BCM57417_NPAR },
188         { PCI_VDEVICE(BROADCOM, 0x16cd), .driver_data = BCM58700 },
189         { PCI_VDEVICE(BROADCOM, 0x16ce), .driver_data = BCM57311 },
190         { PCI_VDEVICE(BROADCOM, 0x16cf), .driver_data = BCM57312 },
191         { PCI_VDEVICE(BROADCOM, 0x16d0), .driver_data = BCM57402 },
192         { PCI_VDEVICE(BROADCOM, 0x16d1), .driver_data = BCM57404 },
193         { PCI_VDEVICE(BROADCOM, 0x16d2), .driver_data = BCM57406 },
194         { PCI_VDEVICE(BROADCOM, 0x16d4), .driver_data = BCM57402_NPAR },
195         { PCI_VDEVICE(BROADCOM, 0x16d5), .driver_data = BCM57407 },
196         { PCI_VDEVICE(BROADCOM, 0x16d6), .driver_data = BCM57412 },
197         { PCI_VDEVICE(BROADCOM, 0x16d7), .driver_data = BCM57414 },
198         { PCI_VDEVICE(BROADCOM, 0x16d8), .driver_data = BCM57416 },
199         { PCI_VDEVICE(BROADCOM, 0x16d9), .driver_data = BCM57417 },
200         { PCI_VDEVICE(BROADCOM, 0x16de), .driver_data = BCM57412_NPAR },
201         { PCI_VDEVICE(BROADCOM, 0x16df), .driver_data = BCM57314 },
202         { PCI_VDEVICE(BROADCOM, 0x16e2), .driver_data = BCM57417_SFP },
203         { PCI_VDEVICE(BROADCOM, 0x16e3), .driver_data = BCM57416_SFP },
204         { PCI_VDEVICE(BROADCOM, 0x16e7), .driver_data = BCM57404_NPAR },
205         { PCI_VDEVICE(BROADCOM, 0x16e8), .driver_data = BCM57406_NPAR },
206         { PCI_VDEVICE(BROADCOM, 0x16e9), .driver_data = BCM57407_SFP },
207         { PCI_VDEVICE(BROADCOM, 0x16ea), .driver_data = BCM57407_NPAR },
208         { PCI_VDEVICE(BROADCOM, 0x16eb), .driver_data = BCM57412_NPAR },
209         { PCI_VDEVICE(BROADCOM, 0x16ec), .driver_data = BCM57414_NPAR },
210         { PCI_VDEVICE(BROADCOM, 0x16ed), .driver_data = BCM57414_NPAR },
211         { PCI_VDEVICE(BROADCOM, 0x16ee), .driver_data = BCM57416_NPAR },
212         { PCI_VDEVICE(BROADCOM, 0x16ef), .driver_data = BCM57416_NPAR },
213         { PCI_VDEVICE(BROADCOM, 0x16f0), .driver_data = BCM58808 },
214         { PCI_VDEVICE(BROADCOM, 0x16f1), .driver_data = BCM57452 },
215         { PCI_VDEVICE(BROADCOM, 0x1750), .driver_data = BCM57508 },
216         { PCI_VDEVICE(BROADCOM, 0x1751), .driver_data = BCM57504 },
217         { PCI_VDEVICE(BROADCOM, 0x1752), .driver_data = BCM57502 },
218         { PCI_VDEVICE(BROADCOM, 0x1800), .driver_data = BCM57508_NPAR },
219         { PCI_VDEVICE(BROADCOM, 0x1801), .driver_data = BCM57504_NPAR },
220         { PCI_VDEVICE(BROADCOM, 0x1802), .driver_data = BCM57502_NPAR },
221         { PCI_VDEVICE(BROADCOM, 0x1803), .driver_data = BCM57508_NPAR },
222         { PCI_VDEVICE(BROADCOM, 0x1804), .driver_data = BCM57504_NPAR },
223         { PCI_VDEVICE(BROADCOM, 0x1805), .driver_data = BCM57502_NPAR },
224         { PCI_VDEVICE(BROADCOM, 0xd802), .driver_data = BCM58802 },
225         { PCI_VDEVICE(BROADCOM, 0xd804), .driver_data = BCM58804 },
226 #ifdef CONFIG_BNXT_SRIOV
227         { PCI_VDEVICE(BROADCOM, 0x1606), .driver_data = NETXTREME_E_VF },
228         { PCI_VDEVICE(BROADCOM, 0x1609), .driver_data = NETXTREME_E_VF },
229         { PCI_VDEVICE(BROADCOM, 0x16c1), .driver_data = NETXTREME_E_VF },
230         { PCI_VDEVICE(BROADCOM, 0x16cb), .driver_data = NETXTREME_C_VF },
231         { PCI_VDEVICE(BROADCOM, 0x16d3), .driver_data = NETXTREME_E_VF },
232         { PCI_VDEVICE(BROADCOM, 0x16dc), .driver_data = NETXTREME_E_VF },
233         { PCI_VDEVICE(BROADCOM, 0x16e1), .driver_data = NETXTREME_C_VF },
234         { PCI_VDEVICE(BROADCOM, 0x16e5), .driver_data = NETXTREME_C_VF },
235         { PCI_VDEVICE(BROADCOM, 0x1806), .driver_data = NETXTREME_E_P5_VF },
236         { PCI_VDEVICE(BROADCOM, 0x1807), .driver_data = NETXTREME_E_P5_VF },
237         { PCI_VDEVICE(BROADCOM, 0xd800), .driver_data = NETXTREME_S_VF },
238 #endif
239         { 0 }
240 };
241
242 MODULE_DEVICE_TABLE(pci, bnxt_pci_tbl);
243
244 static const u16 bnxt_vf_req_snif[] = {
245         HWRM_FUNC_CFG,
246         HWRM_FUNC_VF_CFG,
247         HWRM_PORT_PHY_QCFG,
248         HWRM_CFA_L2_FILTER_ALLOC,
249 };
250
251 static const u16 bnxt_async_events_arr[] = {
252         ASYNC_EVENT_CMPL_EVENT_ID_LINK_STATUS_CHANGE,
253         ASYNC_EVENT_CMPL_EVENT_ID_LINK_SPEED_CHANGE,
254         ASYNC_EVENT_CMPL_EVENT_ID_PF_DRVR_UNLOAD,
255         ASYNC_EVENT_CMPL_EVENT_ID_PORT_CONN_NOT_ALLOWED,
256         ASYNC_EVENT_CMPL_EVENT_ID_VF_CFG_CHANGE,
257         ASYNC_EVENT_CMPL_EVENT_ID_LINK_SPEED_CFG_CHANGE,
258         ASYNC_EVENT_CMPL_EVENT_ID_PORT_PHY_CFG_CHANGE,
259         ASYNC_EVENT_CMPL_EVENT_ID_RESET_NOTIFY,
260         ASYNC_EVENT_CMPL_EVENT_ID_ERROR_RECOVERY,
261 };
262
263 static struct workqueue_struct *bnxt_pf_wq;
264
265 static bool bnxt_vf_pciid(enum board_idx idx)
266 {
267         return (idx == NETXTREME_C_VF || idx == NETXTREME_E_VF ||
268                 idx == NETXTREME_S_VF || idx == NETXTREME_E_P5_VF);
269 }
270
271 #define DB_CP_REARM_FLAGS       (DB_KEY_CP | DB_IDX_VALID)
272 #define DB_CP_FLAGS             (DB_KEY_CP | DB_IDX_VALID | DB_IRQ_DIS)
273 #define DB_CP_IRQ_DIS_FLAGS     (DB_KEY_CP | DB_IRQ_DIS)
274
275 #define BNXT_CP_DB_IRQ_DIS(db)                                          \
276                 writel(DB_CP_IRQ_DIS_FLAGS, db)
277
278 #define BNXT_DB_CQ(db, idx)                                             \
279         writel(DB_CP_FLAGS | RING_CMP(idx), (db)->doorbell)
280
281 #define BNXT_DB_NQ_P5(db, idx)                                          \
282         writeq((db)->db_key64 | DBR_TYPE_NQ | RING_CMP(idx), (db)->doorbell)
283
284 #define BNXT_DB_CQ_ARM(db, idx)                                         \
285         writel(DB_CP_REARM_FLAGS | RING_CMP(idx), (db)->doorbell)
286
287 #define BNXT_DB_NQ_ARM_P5(db, idx)                                      \
288         writeq((db)->db_key64 | DBR_TYPE_NQ_ARM | RING_CMP(idx), (db)->doorbell)
289
290 static void bnxt_db_nq(struct bnxt *bp, struct bnxt_db_info *db, u32 idx)
291 {
292         if (bp->flags & BNXT_FLAG_CHIP_P5)
293                 BNXT_DB_NQ_P5(db, idx);
294         else
295                 BNXT_DB_CQ(db, idx);
296 }
297
298 static void bnxt_db_nq_arm(struct bnxt *bp, struct bnxt_db_info *db, u32 idx)
299 {
300         if (bp->flags & BNXT_FLAG_CHIP_P5)
301                 BNXT_DB_NQ_ARM_P5(db, idx);
302         else
303                 BNXT_DB_CQ_ARM(db, idx);
304 }
305
306 static void bnxt_db_cq(struct bnxt *bp, struct bnxt_db_info *db, u32 idx)
307 {
308         if (bp->flags & BNXT_FLAG_CHIP_P5)
309                 writeq(db->db_key64 | DBR_TYPE_CQ_ARMALL | RING_CMP(idx),
310                        db->doorbell);
311         else
312                 BNXT_DB_CQ(db, idx);
313 }
314
315 const u16 bnxt_lhint_arr[] = {
316         TX_BD_FLAGS_LHINT_512_AND_SMALLER,
317         TX_BD_FLAGS_LHINT_512_TO_1023,
318         TX_BD_FLAGS_LHINT_1024_TO_2047,
319         TX_BD_FLAGS_LHINT_1024_TO_2047,
320         TX_BD_FLAGS_LHINT_2048_AND_LARGER,
321         TX_BD_FLAGS_LHINT_2048_AND_LARGER,
322         TX_BD_FLAGS_LHINT_2048_AND_LARGER,
323         TX_BD_FLAGS_LHINT_2048_AND_LARGER,
324         TX_BD_FLAGS_LHINT_2048_AND_LARGER,
325         TX_BD_FLAGS_LHINT_2048_AND_LARGER,
326         TX_BD_FLAGS_LHINT_2048_AND_LARGER,
327         TX_BD_FLAGS_LHINT_2048_AND_LARGER,
328         TX_BD_FLAGS_LHINT_2048_AND_LARGER,
329         TX_BD_FLAGS_LHINT_2048_AND_LARGER,
330         TX_BD_FLAGS_LHINT_2048_AND_LARGER,
331         TX_BD_FLAGS_LHINT_2048_AND_LARGER,
332         TX_BD_FLAGS_LHINT_2048_AND_LARGER,
333         TX_BD_FLAGS_LHINT_2048_AND_LARGER,
334         TX_BD_FLAGS_LHINT_2048_AND_LARGER,
335 };
336
337 static u16 bnxt_xmit_get_cfa_action(struct sk_buff *skb)
338 {
339         struct metadata_dst *md_dst = skb_metadata_dst(skb);
340
341         if (!md_dst || md_dst->type != METADATA_HW_PORT_MUX)
342                 return 0;
343
344         return md_dst->u.port_info.port_id;
345 }
346
347 static netdev_tx_t bnxt_start_xmit(struct sk_buff *skb, struct net_device *dev)
348 {
349         struct bnxt *bp = netdev_priv(dev);
350         struct tx_bd *txbd;
351         struct tx_bd_ext *txbd1;
352         struct netdev_queue *txq;
353         int i;
354         dma_addr_t mapping;
355         unsigned int length, pad = 0;
356         u32 len, free_size, vlan_tag_flags, cfa_action, flags;
357         u16 prod, last_frag;
358         struct pci_dev *pdev = bp->pdev;
359         struct bnxt_tx_ring_info *txr;
360         struct bnxt_sw_tx_bd *tx_buf;
361
362         i = skb_get_queue_mapping(skb);
363         if (unlikely(i >= bp->tx_nr_rings)) {
364                 dev_kfree_skb_any(skb);
365                 return NETDEV_TX_OK;
366         }
367
368         txq = netdev_get_tx_queue(dev, i);
369         txr = &bp->tx_ring[bp->tx_ring_map[i]];
370         prod = txr->tx_prod;
371
372         free_size = bnxt_tx_avail(bp, txr);
373         if (unlikely(free_size < skb_shinfo(skb)->nr_frags + 2)) {
374                 netif_tx_stop_queue(txq);
375                 return NETDEV_TX_BUSY;
376         }
377
378         length = skb->len;
379         len = skb_headlen(skb);
380         last_frag = skb_shinfo(skb)->nr_frags;
381
382         txbd = &txr->tx_desc_ring[TX_RING(prod)][TX_IDX(prod)];
383
384         txbd->tx_bd_opaque = prod;
385
386         tx_buf = &txr->tx_buf_ring[prod];
387         tx_buf->skb = skb;
388         tx_buf->nr_frags = last_frag;
389
390         vlan_tag_flags = 0;
391         cfa_action = bnxt_xmit_get_cfa_action(skb);
392         if (skb_vlan_tag_present(skb)) {
393                 vlan_tag_flags = TX_BD_CFA_META_KEY_VLAN |
394                                  skb_vlan_tag_get(skb);
395                 /* Currently supports 8021Q, 8021AD vlan offloads
396                  * QINQ1, QINQ2, QINQ3 vlan headers are deprecated
397                  */
398                 if (skb->vlan_proto == htons(ETH_P_8021Q))
399                         vlan_tag_flags |= 1 << TX_BD_CFA_META_TPID_SHIFT;
400         }
401
402         if (free_size == bp->tx_ring_size && length <= bp->tx_push_thresh) {
403                 struct tx_push_buffer *tx_push_buf = txr->tx_push;
404                 struct tx_push_bd *tx_push = &tx_push_buf->push_bd;
405                 struct tx_bd_ext *tx_push1 = &tx_push->txbd2;
406                 void __iomem *db = txr->tx_db.doorbell;
407                 void *pdata = tx_push_buf->data;
408                 u64 *end;
409                 int j, push_len;
410
411                 /* Set COAL_NOW to be ready quickly for the next push */
412                 tx_push->tx_bd_len_flags_type =
413                         cpu_to_le32((length << TX_BD_LEN_SHIFT) |
414                                         TX_BD_TYPE_LONG_TX_BD |
415                                         TX_BD_FLAGS_LHINT_512_AND_SMALLER |
416                                         TX_BD_FLAGS_COAL_NOW |
417                                         TX_BD_FLAGS_PACKET_END |
418                                         (2 << TX_BD_FLAGS_BD_CNT_SHIFT));
419
420                 if (skb->ip_summed == CHECKSUM_PARTIAL)
421                         tx_push1->tx_bd_hsize_lflags =
422                                         cpu_to_le32(TX_BD_FLAGS_TCP_UDP_CHKSUM);
423                 else
424                         tx_push1->tx_bd_hsize_lflags = 0;
425
426                 tx_push1->tx_bd_cfa_meta = cpu_to_le32(vlan_tag_flags);
427                 tx_push1->tx_bd_cfa_action =
428                         cpu_to_le32(cfa_action << TX_BD_CFA_ACTION_SHIFT);
429
430                 end = pdata + length;
431                 end = PTR_ALIGN(end, 8) - 1;
432                 *end = 0;
433
434                 skb_copy_from_linear_data(skb, pdata, len);
435                 pdata += len;
436                 for (j = 0; j < last_frag; j++) {
437                         skb_frag_t *frag = &skb_shinfo(skb)->frags[j];
438                         void *fptr;
439
440                         fptr = skb_frag_address_safe(frag);
441                         if (!fptr)
442                                 goto normal_tx;
443
444                         memcpy(pdata, fptr, skb_frag_size(frag));
445                         pdata += skb_frag_size(frag);
446                 }
447
448                 txbd->tx_bd_len_flags_type = tx_push->tx_bd_len_flags_type;
449                 txbd->tx_bd_haddr = txr->data_mapping;
450                 prod = NEXT_TX(prod);
451                 txbd = &txr->tx_desc_ring[TX_RING(prod)][TX_IDX(prod)];
452                 memcpy(txbd, tx_push1, sizeof(*txbd));
453                 prod = NEXT_TX(prod);
454                 tx_push->doorbell =
455                         cpu_to_le32(DB_KEY_TX_PUSH | DB_LONG_TX_PUSH | prod);
456                 txr->tx_prod = prod;
457
458                 tx_buf->is_push = 1;
459                 netdev_tx_sent_queue(txq, skb->len);
460                 wmb();  /* Sync is_push and byte queue before pushing data */
461
462                 push_len = (length + sizeof(*tx_push) + 7) / 8;
463                 if (push_len > 16) {
464                         __iowrite64_copy(db, tx_push_buf, 16);
465                         __iowrite32_copy(db + 4, tx_push_buf + 1,
466                                          (push_len - 16) << 1);
467                 } else {
468                         __iowrite64_copy(db, tx_push_buf, push_len);
469                 }
470
471                 goto tx_done;
472         }
473
474 normal_tx:
475         if (length < BNXT_MIN_PKT_SIZE) {
476                 pad = BNXT_MIN_PKT_SIZE - length;
477                 if (skb_pad(skb, pad)) {
478                         /* SKB already freed. */
479                         tx_buf->skb = NULL;
480                         return NETDEV_TX_OK;
481                 }
482                 length = BNXT_MIN_PKT_SIZE;
483         }
484
485         mapping = dma_map_single(&pdev->dev, skb->data, len, DMA_TO_DEVICE);
486
487         if (unlikely(dma_mapping_error(&pdev->dev, mapping))) {
488                 dev_kfree_skb_any(skb);
489                 tx_buf->skb = NULL;
490                 return NETDEV_TX_OK;
491         }
492
493         dma_unmap_addr_set(tx_buf, mapping, mapping);
494         flags = (len << TX_BD_LEN_SHIFT) | TX_BD_TYPE_LONG_TX_BD |
495                 ((last_frag + 2) << TX_BD_FLAGS_BD_CNT_SHIFT);
496
497         txbd->tx_bd_haddr = cpu_to_le64(mapping);
498
499         prod = NEXT_TX(prod);
500         txbd1 = (struct tx_bd_ext *)
501                 &txr->tx_desc_ring[TX_RING(prod)][TX_IDX(prod)];
502
503         txbd1->tx_bd_hsize_lflags = 0;
504         if (skb_is_gso(skb)) {
505                 u32 hdr_len;
506
507                 if (skb->encapsulation)
508                         hdr_len = skb_inner_network_offset(skb) +
509                                 skb_inner_network_header_len(skb) +
510                                 inner_tcp_hdrlen(skb);
511                 else
512                         hdr_len = skb_transport_offset(skb) +
513                                 tcp_hdrlen(skb);
514
515                 txbd1->tx_bd_hsize_lflags = cpu_to_le32(TX_BD_FLAGS_LSO |
516                                         TX_BD_FLAGS_T_IPID |
517                                         (hdr_len << (TX_BD_HSIZE_SHIFT - 1)));
518                 length = skb_shinfo(skb)->gso_size;
519                 txbd1->tx_bd_mss = cpu_to_le32(length);
520                 length += hdr_len;
521         } else if (skb->ip_summed == CHECKSUM_PARTIAL) {
522                 txbd1->tx_bd_hsize_lflags =
523                         cpu_to_le32(TX_BD_FLAGS_TCP_UDP_CHKSUM);
524                 txbd1->tx_bd_mss = 0;
525         }
526
527         length >>= 9;
528         if (unlikely(length >= ARRAY_SIZE(bnxt_lhint_arr))) {
529                 dev_warn_ratelimited(&pdev->dev, "Dropped oversize %d bytes TX packet.\n",
530                                      skb->len);
531                 i = 0;
532                 goto tx_dma_error;
533         }
534         flags |= bnxt_lhint_arr[length];
535         txbd->tx_bd_len_flags_type = cpu_to_le32(flags);
536
537         txbd1->tx_bd_cfa_meta = cpu_to_le32(vlan_tag_flags);
538         txbd1->tx_bd_cfa_action =
539                         cpu_to_le32(cfa_action << TX_BD_CFA_ACTION_SHIFT);
540         for (i = 0; i < last_frag; i++) {
541                 skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
542
543                 prod = NEXT_TX(prod);
544                 txbd = &txr->tx_desc_ring[TX_RING(prod)][TX_IDX(prod)];
545
546                 len = skb_frag_size(frag);
547                 mapping = skb_frag_dma_map(&pdev->dev, frag, 0, len,
548                                            DMA_TO_DEVICE);
549
550                 if (unlikely(dma_mapping_error(&pdev->dev, mapping)))
551                         goto tx_dma_error;
552
553                 tx_buf = &txr->tx_buf_ring[prod];
554                 dma_unmap_addr_set(tx_buf, mapping, mapping);
555
556                 txbd->tx_bd_haddr = cpu_to_le64(mapping);
557
558                 flags = len << TX_BD_LEN_SHIFT;
559                 txbd->tx_bd_len_flags_type = cpu_to_le32(flags);
560         }
561
562         flags &= ~TX_BD_LEN;
563         txbd->tx_bd_len_flags_type =
564                 cpu_to_le32(((len + pad) << TX_BD_LEN_SHIFT) | flags |
565                             TX_BD_FLAGS_PACKET_END);
566
567         netdev_tx_sent_queue(txq, skb->len);
568
569         /* Sync BD data before updating doorbell */
570         wmb();
571
572         prod = NEXT_TX(prod);
573         txr->tx_prod = prod;
574
575         if (!netdev_xmit_more() || netif_xmit_stopped(txq))
576                 bnxt_db_write(bp, &txr->tx_db, prod);
577
578 tx_done:
579
580         if (unlikely(bnxt_tx_avail(bp, txr) <= MAX_SKB_FRAGS + 1)) {
581                 if (netdev_xmit_more() && !tx_buf->is_push)
582                         bnxt_db_write(bp, &txr->tx_db, prod);
583
584                 netif_tx_stop_queue(txq);
585
586                 /* netif_tx_stop_queue() must be done before checking
587                  * tx index in bnxt_tx_avail() below, because in
588                  * bnxt_tx_int(), we update tx index before checking for
589                  * netif_tx_queue_stopped().
590                  */
591                 smp_mb();
592                 if (bnxt_tx_avail(bp, txr) > bp->tx_wake_thresh)
593                         netif_tx_wake_queue(txq);
594         }
595         return NETDEV_TX_OK;
596
597 tx_dma_error:
598         last_frag = i;
599
600         /* start back at beginning and unmap skb */
601         prod = txr->tx_prod;
602         tx_buf = &txr->tx_buf_ring[prod];
603         tx_buf->skb = NULL;
604         dma_unmap_single(&pdev->dev, dma_unmap_addr(tx_buf, mapping),
605                          skb_headlen(skb), PCI_DMA_TODEVICE);
606         prod = NEXT_TX(prod);
607
608         /* unmap remaining mapped pages */
609         for (i = 0; i < last_frag; i++) {
610                 prod = NEXT_TX(prod);
611                 tx_buf = &txr->tx_buf_ring[prod];
612                 dma_unmap_page(&pdev->dev, dma_unmap_addr(tx_buf, mapping),
613                                skb_frag_size(&skb_shinfo(skb)->frags[i]),
614                                PCI_DMA_TODEVICE);
615         }
616
617         dev_kfree_skb_any(skb);
618         return NETDEV_TX_OK;
619 }
620
621 static void bnxt_tx_int(struct bnxt *bp, struct bnxt_napi *bnapi, int nr_pkts)
622 {
623         struct bnxt_tx_ring_info *txr = bnapi->tx_ring;
624         struct netdev_queue *txq = netdev_get_tx_queue(bp->dev, txr->txq_index);
625         u16 cons = txr->tx_cons;
626         struct pci_dev *pdev = bp->pdev;
627         int i;
628         unsigned int tx_bytes = 0;
629
630         for (i = 0; i < nr_pkts; i++) {
631                 struct bnxt_sw_tx_bd *tx_buf;
632                 struct sk_buff *skb;
633                 int j, last;
634
635                 tx_buf = &txr->tx_buf_ring[cons];
636                 cons = NEXT_TX(cons);
637                 skb = tx_buf->skb;
638                 tx_buf->skb = NULL;
639
640                 if (tx_buf->is_push) {
641                         tx_buf->is_push = 0;
642                         goto next_tx_int;
643                 }
644
645                 dma_unmap_single(&pdev->dev, dma_unmap_addr(tx_buf, mapping),
646                                  skb_headlen(skb), PCI_DMA_TODEVICE);
647                 last = tx_buf->nr_frags;
648
649                 for (j = 0; j < last; j++) {
650                         cons = NEXT_TX(cons);
651                         tx_buf = &txr->tx_buf_ring[cons];
652                         dma_unmap_page(
653                                 &pdev->dev,
654                                 dma_unmap_addr(tx_buf, mapping),
655                                 skb_frag_size(&skb_shinfo(skb)->frags[j]),
656                                 PCI_DMA_TODEVICE);
657                 }
658
659 next_tx_int:
660                 cons = NEXT_TX(cons);
661
662                 tx_bytes += skb->len;
663                 dev_kfree_skb_any(skb);
664         }
665
666         netdev_tx_completed_queue(txq, nr_pkts, tx_bytes);
667         txr->tx_cons = cons;
668
669         /* Need to make the tx_cons update visible to bnxt_start_xmit()
670          * before checking for netif_tx_queue_stopped().  Without the
671          * memory barrier, there is a small possibility that bnxt_start_xmit()
672          * will miss it and cause the queue to be stopped forever.
673          */
674         smp_mb();
675
676         if (unlikely(netif_tx_queue_stopped(txq)) &&
677             (bnxt_tx_avail(bp, txr) > bp->tx_wake_thresh)) {
678                 __netif_tx_lock(txq, smp_processor_id());
679                 if (netif_tx_queue_stopped(txq) &&
680                     bnxt_tx_avail(bp, txr) > bp->tx_wake_thresh &&
681                     txr->dev_state != BNXT_DEV_STATE_CLOSING)
682                         netif_tx_wake_queue(txq);
683                 __netif_tx_unlock(txq);
684         }
685 }
686
687 static struct page *__bnxt_alloc_rx_page(struct bnxt *bp, dma_addr_t *mapping,
688                                          struct bnxt_rx_ring_info *rxr,
689                                          gfp_t gfp)
690 {
691         struct device *dev = &bp->pdev->dev;
692         struct page *page;
693
694         page = page_pool_dev_alloc_pages(rxr->page_pool);
695         if (!page)
696                 return NULL;
697
698         *mapping = dma_map_page_attrs(dev, page, 0, PAGE_SIZE, bp->rx_dir,
699                                       DMA_ATTR_WEAK_ORDERING);
700         if (dma_mapping_error(dev, *mapping)) {
701                 page_pool_recycle_direct(rxr->page_pool, page);
702                 return NULL;
703         }
704         *mapping += bp->rx_dma_offset;
705         return page;
706 }
707
708 static inline u8 *__bnxt_alloc_rx_data(struct bnxt *bp, dma_addr_t *mapping,
709                                        gfp_t gfp)
710 {
711         u8 *data;
712         struct pci_dev *pdev = bp->pdev;
713
714         data = kmalloc(bp->rx_buf_size, gfp);
715         if (!data)
716                 return NULL;
717
718         *mapping = dma_map_single_attrs(&pdev->dev, data + bp->rx_dma_offset,
719                                         bp->rx_buf_use_size, bp->rx_dir,
720                                         DMA_ATTR_WEAK_ORDERING);
721
722         if (dma_mapping_error(&pdev->dev, *mapping)) {
723                 kfree(data);
724                 data = NULL;
725         }
726         return data;
727 }
728
729 int bnxt_alloc_rx_data(struct bnxt *bp, struct bnxt_rx_ring_info *rxr,
730                        u16 prod, gfp_t gfp)
731 {
732         struct rx_bd *rxbd = &rxr->rx_desc_ring[RX_RING(prod)][RX_IDX(prod)];
733         struct bnxt_sw_rx_bd *rx_buf = &rxr->rx_buf_ring[prod];
734         dma_addr_t mapping;
735
736         if (BNXT_RX_PAGE_MODE(bp)) {
737                 struct page *page =
738                         __bnxt_alloc_rx_page(bp, &mapping, rxr, gfp);
739
740                 if (!page)
741                         return -ENOMEM;
742
743                 rx_buf->data = page;
744                 rx_buf->data_ptr = page_address(page) + bp->rx_offset;
745         } else {
746                 u8 *data = __bnxt_alloc_rx_data(bp, &mapping, gfp);
747
748                 if (!data)
749                         return -ENOMEM;
750
751                 rx_buf->data = data;
752                 rx_buf->data_ptr = data + bp->rx_offset;
753         }
754         rx_buf->mapping = mapping;
755
756         rxbd->rx_bd_haddr = cpu_to_le64(mapping);
757         return 0;
758 }
759
760 void bnxt_reuse_rx_data(struct bnxt_rx_ring_info *rxr, u16 cons, void *data)
761 {
762         u16 prod = rxr->rx_prod;
763         struct bnxt_sw_rx_bd *cons_rx_buf, *prod_rx_buf;
764         struct rx_bd *cons_bd, *prod_bd;
765
766         prod_rx_buf = &rxr->rx_buf_ring[prod];
767         cons_rx_buf = &rxr->rx_buf_ring[cons];
768
769         prod_rx_buf->data = data;
770         prod_rx_buf->data_ptr = cons_rx_buf->data_ptr;
771
772         prod_rx_buf->mapping = cons_rx_buf->mapping;
773
774         prod_bd = &rxr->rx_desc_ring[RX_RING(prod)][RX_IDX(prod)];
775         cons_bd = &rxr->rx_desc_ring[RX_RING(cons)][RX_IDX(cons)];
776
777         prod_bd->rx_bd_haddr = cons_bd->rx_bd_haddr;
778 }
779
780 static inline u16 bnxt_find_next_agg_idx(struct bnxt_rx_ring_info *rxr, u16 idx)
781 {
782         u16 next, max = rxr->rx_agg_bmap_size;
783
784         next = find_next_zero_bit(rxr->rx_agg_bmap, max, idx);
785         if (next >= max)
786                 next = find_first_zero_bit(rxr->rx_agg_bmap, max);
787         return next;
788 }
789
790 static inline int bnxt_alloc_rx_page(struct bnxt *bp,
791                                      struct bnxt_rx_ring_info *rxr,
792                                      u16 prod, gfp_t gfp)
793 {
794         struct rx_bd *rxbd =
795                 &rxr->rx_agg_desc_ring[RX_RING(prod)][RX_IDX(prod)];
796         struct bnxt_sw_rx_agg_bd *rx_agg_buf;
797         struct pci_dev *pdev = bp->pdev;
798         struct page *page;
799         dma_addr_t mapping;
800         u16 sw_prod = rxr->rx_sw_agg_prod;
801         unsigned int offset = 0;
802
803         if (PAGE_SIZE > BNXT_RX_PAGE_SIZE) {
804                 page = rxr->rx_page;
805                 if (!page) {
806                         page = alloc_page(gfp);
807                         if (!page)
808                                 return -ENOMEM;
809                         rxr->rx_page = page;
810                         rxr->rx_page_offset = 0;
811                 }
812                 offset = rxr->rx_page_offset;
813                 rxr->rx_page_offset += BNXT_RX_PAGE_SIZE;
814                 if (rxr->rx_page_offset == PAGE_SIZE)
815                         rxr->rx_page = NULL;
816                 else
817                         get_page(page);
818         } else {
819                 page = alloc_page(gfp);
820                 if (!page)
821                         return -ENOMEM;
822         }
823
824         mapping = dma_map_page_attrs(&pdev->dev, page, offset,
825                                      BNXT_RX_PAGE_SIZE, PCI_DMA_FROMDEVICE,
826                                      DMA_ATTR_WEAK_ORDERING);
827         if (dma_mapping_error(&pdev->dev, mapping)) {
828                 __free_page(page);
829                 return -EIO;
830         }
831
832         if (unlikely(test_bit(sw_prod, rxr->rx_agg_bmap)))
833                 sw_prod = bnxt_find_next_agg_idx(rxr, sw_prod);
834
835         __set_bit(sw_prod, rxr->rx_agg_bmap);
836         rx_agg_buf = &rxr->rx_agg_ring[sw_prod];
837         rxr->rx_sw_agg_prod = NEXT_RX_AGG(sw_prod);
838
839         rx_agg_buf->page = page;
840         rx_agg_buf->offset = offset;
841         rx_agg_buf->mapping = mapping;
842         rxbd->rx_bd_haddr = cpu_to_le64(mapping);
843         rxbd->rx_bd_opaque = sw_prod;
844         return 0;
845 }
846
847 static struct rx_agg_cmp *bnxt_get_agg(struct bnxt *bp,
848                                        struct bnxt_cp_ring_info *cpr,
849                                        u16 cp_cons, u16 curr)
850 {
851         struct rx_agg_cmp *agg;
852
853         cp_cons = RING_CMP(ADV_RAW_CMP(cp_cons, curr));
854         agg = (struct rx_agg_cmp *)
855                 &cpr->cp_desc_ring[CP_RING(cp_cons)][CP_IDX(cp_cons)];
856         return agg;
857 }
858
859 static struct rx_agg_cmp *bnxt_get_tpa_agg_p5(struct bnxt *bp,
860                                               struct bnxt_rx_ring_info *rxr,
861                                               u16 agg_id, u16 curr)
862 {
863         struct bnxt_tpa_info *tpa_info = &rxr->rx_tpa[agg_id];
864
865         return &tpa_info->agg_arr[curr];
866 }
867
868 static void bnxt_reuse_rx_agg_bufs(struct bnxt_cp_ring_info *cpr, u16 idx,
869                                    u16 start, u32 agg_bufs, bool tpa)
870 {
871         struct bnxt_napi *bnapi = cpr->bnapi;
872         struct bnxt *bp = bnapi->bp;
873         struct bnxt_rx_ring_info *rxr = bnapi->rx_ring;
874         u16 prod = rxr->rx_agg_prod;
875         u16 sw_prod = rxr->rx_sw_agg_prod;
876         bool p5_tpa = false;
877         u32 i;
878
879         if ((bp->flags & BNXT_FLAG_CHIP_P5) && tpa)
880                 p5_tpa = true;
881
882         for (i = 0; i < agg_bufs; i++) {
883                 u16 cons;
884                 struct rx_agg_cmp *agg;
885                 struct bnxt_sw_rx_agg_bd *cons_rx_buf, *prod_rx_buf;
886                 struct rx_bd *prod_bd;
887                 struct page *page;
888
889                 if (p5_tpa)
890                         agg = bnxt_get_tpa_agg_p5(bp, rxr, idx, start + i);
891                 else
892                         agg = bnxt_get_agg(bp, cpr, idx, start + i);
893                 cons = agg->rx_agg_cmp_opaque;
894                 __clear_bit(cons, rxr->rx_agg_bmap);
895
896                 if (unlikely(test_bit(sw_prod, rxr->rx_agg_bmap)))
897                         sw_prod = bnxt_find_next_agg_idx(rxr, sw_prod);
898
899                 __set_bit(sw_prod, rxr->rx_agg_bmap);
900                 prod_rx_buf = &rxr->rx_agg_ring[sw_prod];
901                 cons_rx_buf = &rxr->rx_agg_ring[cons];
902
903                 /* It is possible for sw_prod to be equal to cons, so
904                  * set cons_rx_buf->page to NULL first.
905                  */
906                 page = cons_rx_buf->page;
907                 cons_rx_buf->page = NULL;
908                 prod_rx_buf->page = page;
909                 prod_rx_buf->offset = cons_rx_buf->offset;
910
911                 prod_rx_buf->mapping = cons_rx_buf->mapping;
912
913                 prod_bd = &rxr->rx_agg_desc_ring[RX_RING(prod)][RX_IDX(prod)];
914
915                 prod_bd->rx_bd_haddr = cpu_to_le64(cons_rx_buf->mapping);
916                 prod_bd->rx_bd_opaque = sw_prod;
917
918                 prod = NEXT_RX_AGG(prod);
919                 sw_prod = NEXT_RX_AGG(sw_prod);
920         }
921         rxr->rx_agg_prod = prod;
922         rxr->rx_sw_agg_prod = sw_prod;
923 }
924
925 static struct sk_buff *bnxt_rx_page_skb(struct bnxt *bp,
926                                         struct bnxt_rx_ring_info *rxr,
927                                         u16 cons, void *data, u8 *data_ptr,
928                                         dma_addr_t dma_addr,
929                                         unsigned int offset_and_len)
930 {
931         unsigned int payload = offset_and_len >> 16;
932         unsigned int len = offset_and_len & 0xffff;
933         skb_frag_t *frag;
934         struct page *page = data;
935         u16 prod = rxr->rx_prod;
936         struct sk_buff *skb;
937         int off, err;
938
939         err = bnxt_alloc_rx_data(bp, rxr, prod, GFP_ATOMIC);
940         if (unlikely(err)) {
941                 bnxt_reuse_rx_data(rxr, cons, data);
942                 return NULL;
943         }
944         dma_addr -= bp->rx_dma_offset;
945         dma_unmap_page_attrs(&bp->pdev->dev, dma_addr, PAGE_SIZE, bp->rx_dir,
946                              DMA_ATTR_WEAK_ORDERING);
947
948         if (unlikely(!payload))
949                 payload = eth_get_headlen(bp->dev, data_ptr, len);
950
951         skb = napi_alloc_skb(&rxr->bnapi->napi, payload);
952         if (!skb) {
953                 __free_page(page);
954                 return NULL;
955         }
956
957         off = (void *)data_ptr - page_address(page);
958         skb_add_rx_frag(skb, 0, page, off, len, PAGE_SIZE);
959         memcpy(skb->data - NET_IP_ALIGN, data_ptr - NET_IP_ALIGN,
960                payload + NET_IP_ALIGN);
961
962         frag = &skb_shinfo(skb)->frags[0];
963         skb_frag_size_sub(frag, payload);
964         skb_frag_off_add(frag, payload);
965         skb->data_len -= payload;
966         skb->tail += payload;
967
968         return skb;
969 }
970
971 static struct sk_buff *bnxt_rx_skb(struct bnxt *bp,
972                                    struct bnxt_rx_ring_info *rxr, u16 cons,
973                                    void *data, u8 *data_ptr,
974                                    dma_addr_t dma_addr,
975                                    unsigned int offset_and_len)
976 {
977         u16 prod = rxr->rx_prod;
978         struct sk_buff *skb;
979         int err;
980
981         err = bnxt_alloc_rx_data(bp, rxr, prod, GFP_ATOMIC);
982         if (unlikely(err)) {
983                 bnxt_reuse_rx_data(rxr, cons, data);
984                 return NULL;
985         }
986
987         skb = build_skb(data, 0);
988         dma_unmap_single_attrs(&bp->pdev->dev, dma_addr, bp->rx_buf_use_size,
989                                bp->rx_dir, DMA_ATTR_WEAK_ORDERING);
990         if (!skb) {
991                 kfree(data);
992                 return NULL;
993         }
994
995         skb_reserve(skb, bp->rx_offset);
996         skb_put(skb, offset_and_len & 0xffff);
997         return skb;
998 }
999
1000 static struct sk_buff *bnxt_rx_pages(struct bnxt *bp,
1001                                      struct bnxt_cp_ring_info *cpr,
1002                                      struct sk_buff *skb, u16 idx,
1003                                      u32 agg_bufs, bool tpa)
1004 {
1005         struct bnxt_napi *bnapi = cpr->bnapi;
1006         struct pci_dev *pdev = bp->pdev;
1007         struct bnxt_rx_ring_info *rxr = bnapi->rx_ring;
1008         u16 prod = rxr->rx_agg_prod;
1009         bool p5_tpa = false;
1010         u32 i;
1011
1012         if ((bp->flags & BNXT_FLAG_CHIP_P5) && tpa)
1013                 p5_tpa = true;
1014
1015         for (i = 0; i < agg_bufs; i++) {
1016                 u16 cons, frag_len;
1017                 struct rx_agg_cmp *agg;
1018                 struct bnxt_sw_rx_agg_bd *cons_rx_buf;
1019                 struct page *page;
1020                 dma_addr_t mapping;
1021
1022                 if (p5_tpa)
1023                         agg = bnxt_get_tpa_agg_p5(bp, rxr, idx, i);
1024                 else
1025                         agg = bnxt_get_agg(bp, cpr, idx, i);
1026                 cons = agg->rx_agg_cmp_opaque;
1027                 frag_len = (le32_to_cpu(agg->rx_agg_cmp_len_flags_type) &
1028                             RX_AGG_CMP_LEN) >> RX_AGG_CMP_LEN_SHIFT;
1029
1030                 cons_rx_buf = &rxr->rx_agg_ring[cons];
1031                 skb_fill_page_desc(skb, i, cons_rx_buf->page,
1032                                    cons_rx_buf->offset, frag_len);
1033                 __clear_bit(cons, rxr->rx_agg_bmap);
1034
1035                 /* It is possible for bnxt_alloc_rx_page() to allocate
1036                  * a sw_prod index that equals the cons index, so we
1037                  * need to clear the cons entry now.
1038                  */
1039                 mapping = cons_rx_buf->mapping;
1040                 page = cons_rx_buf->page;
1041                 cons_rx_buf->page = NULL;
1042
1043                 if (bnxt_alloc_rx_page(bp, rxr, prod, GFP_ATOMIC) != 0) {
1044                         struct skb_shared_info *shinfo;
1045                         unsigned int nr_frags;
1046
1047                         shinfo = skb_shinfo(skb);
1048                         nr_frags = --shinfo->nr_frags;
1049                         __skb_frag_set_page(&shinfo->frags[nr_frags], NULL);
1050
1051                         dev_kfree_skb(skb);
1052
1053                         cons_rx_buf->page = page;
1054
1055                         /* Update prod since possibly some pages have been
1056                          * allocated already.
1057                          */
1058                         rxr->rx_agg_prod = prod;
1059                         bnxt_reuse_rx_agg_bufs(cpr, idx, i, agg_bufs - i, tpa);
1060                         return NULL;
1061                 }
1062
1063                 dma_unmap_page_attrs(&pdev->dev, mapping, BNXT_RX_PAGE_SIZE,
1064                                      PCI_DMA_FROMDEVICE,
1065                                      DMA_ATTR_WEAK_ORDERING);
1066
1067                 skb->data_len += frag_len;
1068                 skb->len += frag_len;
1069                 skb->truesize += PAGE_SIZE;
1070
1071                 prod = NEXT_RX_AGG(prod);
1072         }
1073         rxr->rx_agg_prod = prod;
1074         return skb;
1075 }
1076
1077 static int bnxt_agg_bufs_valid(struct bnxt *bp, struct bnxt_cp_ring_info *cpr,
1078                                u8 agg_bufs, u32 *raw_cons)
1079 {
1080         u16 last;
1081         struct rx_agg_cmp *agg;
1082
1083         *raw_cons = ADV_RAW_CMP(*raw_cons, agg_bufs);
1084         last = RING_CMP(*raw_cons);
1085         agg = (struct rx_agg_cmp *)
1086                 &cpr->cp_desc_ring[CP_RING(last)][CP_IDX(last)];
1087         return RX_AGG_CMP_VALID(agg, *raw_cons);
1088 }
1089
1090 static inline struct sk_buff *bnxt_copy_skb(struct bnxt_napi *bnapi, u8 *data,
1091                                             unsigned int len,
1092                                             dma_addr_t mapping)
1093 {
1094         struct bnxt *bp = bnapi->bp;
1095         struct pci_dev *pdev = bp->pdev;
1096         struct sk_buff *skb;
1097
1098         skb = napi_alloc_skb(&bnapi->napi, len);
1099         if (!skb)
1100                 return NULL;
1101
1102         dma_sync_single_for_cpu(&pdev->dev, mapping, bp->rx_copy_thresh,
1103                                 bp->rx_dir);
1104
1105         memcpy(skb->data - NET_IP_ALIGN, data - NET_IP_ALIGN,
1106                len + NET_IP_ALIGN);
1107
1108         dma_sync_single_for_device(&pdev->dev, mapping, bp->rx_copy_thresh,
1109                                    bp->rx_dir);
1110
1111         skb_put(skb, len);
1112         return skb;
1113 }
1114
1115 static int bnxt_discard_rx(struct bnxt *bp, struct bnxt_cp_ring_info *cpr,
1116                            u32 *raw_cons, void *cmp)
1117 {
1118         struct rx_cmp *rxcmp = cmp;
1119         u32 tmp_raw_cons = *raw_cons;
1120         u8 cmp_type, agg_bufs = 0;
1121
1122         cmp_type = RX_CMP_TYPE(rxcmp);
1123
1124         if (cmp_type == CMP_TYPE_RX_L2_CMP) {
1125                 agg_bufs = (le32_to_cpu(rxcmp->rx_cmp_misc_v1) &
1126                             RX_CMP_AGG_BUFS) >>
1127                            RX_CMP_AGG_BUFS_SHIFT;
1128         } else if (cmp_type == CMP_TYPE_RX_L2_TPA_END_CMP) {
1129                 struct rx_tpa_end_cmp *tpa_end = cmp;
1130
1131                 if (bp->flags & BNXT_FLAG_CHIP_P5)
1132                         return 0;
1133
1134                 agg_bufs = TPA_END_AGG_BUFS(tpa_end);
1135         }
1136
1137         if (agg_bufs) {
1138                 if (!bnxt_agg_bufs_valid(bp, cpr, agg_bufs, &tmp_raw_cons))
1139                         return -EBUSY;
1140         }
1141         *raw_cons = tmp_raw_cons;
1142         return 0;
1143 }
1144
1145 static void bnxt_queue_fw_reset_work(struct bnxt *bp, unsigned long delay)
1146 {
1147         if (BNXT_PF(bp))
1148                 queue_delayed_work(bnxt_pf_wq, &bp->fw_reset_task, delay);
1149         else
1150                 schedule_delayed_work(&bp->fw_reset_task, delay);
1151 }
1152
1153 static void bnxt_queue_sp_work(struct bnxt *bp)
1154 {
1155         if (BNXT_PF(bp))
1156                 queue_work(bnxt_pf_wq, &bp->sp_task);
1157         else
1158                 schedule_work(&bp->sp_task);
1159 }
1160
1161 static void bnxt_cancel_sp_work(struct bnxt *bp)
1162 {
1163         if (BNXT_PF(bp))
1164                 flush_workqueue(bnxt_pf_wq);
1165         else
1166                 cancel_work_sync(&bp->sp_task);
1167 }
1168
1169 static void bnxt_sched_reset(struct bnxt *bp, struct bnxt_rx_ring_info *rxr)
1170 {
1171         if (!rxr->bnapi->in_reset) {
1172                 rxr->bnapi->in_reset = true;
1173                 set_bit(BNXT_RESET_TASK_SP_EVENT, &bp->sp_event);
1174                 bnxt_queue_sp_work(bp);
1175         }
1176         rxr->rx_next_cons = 0xffff;
1177 }
1178
1179 static u16 bnxt_alloc_agg_idx(struct bnxt_rx_ring_info *rxr, u16 agg_id)
1180 {
1181         struct bnxt_tpa_idx_map *map = rxr->rx_tpa_idx_map;
1182         u16 idx = agg_id & MAX_TPA_P5_MASK;
1183
1184         if (test_bit(idx, map->agg_idx_bmap))
1185                 idx = find_first_zero_bit(map->agg_idx_bmap,
1186                                           BNXT_AGG_IDX_BMAP_SIZE);
1187         __set_bit(idx, map->agg_idx_bmap);
1188         map->agg_id_tbl[agg_id] = idx;
1189         return idx;
1190 }
1191
1192 static void bnxt_free_agg_idx(struct bnxt_rx_ring_info *rxr, u16 idx)
1193 {
1194         struct bnxt_tpa_idx_map *map = rxr->rx_tpa_idx_map;
1195
1196         __clear_bit(idx, map->agg_idx_bmap);
1197 }
1198
1199 static u16 bnxt_lookup_agg_idx(struct bnxt_rx_ring_info *rxr, u16 agg_id)
1200 {
1201         struct bnxt_tpa_idx_map *map = rxr->rx_tpa_idx_map;
1202
1203         return map->agg_id_tbl[agg_id];
1204 }
1205
1206 static void bnxt_tpa_start(struct bnxt *bp, struct bnxt_rx_ring_info *rxr,
1207                            struct rx_tpa_start_cmp *tpa_start,
1208                            struct rx_tpa_start_cmp_ext *tpa_start1)
1209 {
1210         struct bnxt_sw_rx_bd *cons_rx_buf, *prod_rx_buf;
1211         struct bnxt_tpa_info *tpa_info;
1212         u16 cons, prod, agg_id;
1213         struct rx_bd *prod_bd;
1214         dma_addr_t mapping;
1215
1216         if (bp->flags & BNXT_FLAG_CHIP_P5) {
1217                 agg_id = TPA_START_AGG_ID_P5(tpa_start);
1218                 agg_id = bnxt_alloc_agg_idx(rxr, agg_id);
1219         } else {
1220                 agg_id = TPA_START_AGG_ID(tpa_start);
1221         }
1222         cons = tpa_start->rx_tpa_start_cmp_opaque;
1223         prod = rxr->rx_prod;
1224         cons_rx_buf = &rxr->rx_buf_ring[cons];
1225         prod_rx_buf = &rxr->rx_buf_ring[prod];
1226         tpa_info = &rxr->rx_tpa[agg_id];
1227
1228         if (unlikely(cons != rxr->rx_next_cons ||
1229                      TPA_START_ERROR(tpa_start))) {
1230                 netdev_warn(bp->dev, "TPA cons %x, expected cons %x, error code %x\n",
1231                             cons, rxr->rx_next_cons,
1232                             TPA_START_ERROR_CODE(tpa_start1));
1233                 bnxt_sched_reset(bp, rxr);
1234                 return;
1235         }
1236         /* Store cfa_code in tpa_info to use in tpa_end
1237          * completion processing.
1238          */
1239         tpa_info->cfa_code = TPA_START_CFA_CODE(tpa_start1);
1240         prod_rx_buf->data = tpa_info->data;
1241         prod_rx_buf->data_ptr = tpa_info->data_ptr;
1242
1243         mapping = tpa_info->mapping;
1244         prod_rx_buf->mapping = mapping;
1245
1246         prod_bd = &rxr->rx_desc_ring[RX_RING(prod)][RX_IDX(prod)];
1247
1248         prod_bd->rx_bd_haddr = cpu_to_le64(mapping);
1249
1250         tpa_info->data = cons_rx_buf->data;
1251         tpa_info->data_ptr = cons_rx_buf->data_ptr;
1252         cons_rx_buf->data = NULL;
1253         tpa_info->mapping = cons_rx_buf->mapping;
1254
1255         tpa_info->len =
1256                 le32_to_cpu(tpa_start->rx_tpa_start_cmp_len_flags_type) >>
1257                                 RX_TPA_START_CMP_LEN_SHIFT;
1258         if (likely(TPA_START_HASH_VALID(tpa_start))) {
1259                 u32 hash_type = TPA_START_HASH_TYPE(tpa_start);
1260
1261                 tpa_info->hash_type = PKT_HASH_TYPE_L4;
1262                 tpa_info->gso_type = SKB_GSO_TCPV4;
1263                 /* RSS profiles 1 and 3 with extract code 0 for inner 4-tuple */
1264                 if (hash_type == 3 || TPA_START_IS_IPV6(tpa_start1))
1265                         tpa_info->gso_type = SKB_GSO_TCPV6;
1266                 tpa_info->rss_hash =
1267                         le32_to_cpu(tpa_start->rx_tpa_start_cmp_rss_hash);
1268         } else {
1269                 tpa_info->hash_type = PKT_HASH_TYPE_NONE;
1270                 tpa_info->gso_type = 0;
1271                 if (netif_msg_rx_err(bp))
1272                         netdev_warn(bp->dev, "TPA packet without valid hash\n");
1273         }
1274         tpa_info->flags2 = le32_to_cpu(tpa_start1->rx_tpa_start_cmp_flags2);
1275         tpa_info->metadata = le32_to_cpu(tpa_start1->rx_tpa_start_cmp_metadata);
1276         tpa_info->hdr_info = le32_to_cpu(tpa_start1->rx_tpa_start_cmp_hdr_info);
1277         tpa_info->agg_count = 0;
1278
1279         rxr->rx_prod = NEXT_RX(prod);
1280         cons = NEXT_RX(cons);
1281         rxr->rx_next_cons = NEXT_RX(cons);
1282         cons_rx_buf = &rxr->rx_buf_ring[cons];
1283
1284         bnxt_reuse_rx_data(rxr, cons, cons_rx_buf->data);
1285         rxr->rx_prod = NEXT_RX(rxr->rx_prod);
1286         cons_rx_buf->data = NULL;
1287 }
1288
1289 static void bnxt_abort_tpa(struct bnxt_cp_ring_info *cpr, u16 idx, u32 agg_bufs)
1290 {
1291         if (agg_bufs)
1292                 bnxt_reuse_rx_agg_bufs(cpr, idx, 0, agg_bufs, true);
1293 }
1294
1295 #ifdef CONFIG_INET
1296 static void bnxt_gro_tunnel(struct sk_buff *skb, __be16 ip_proto)
1297 {
1298         struct udphdr *uh = NULL;
1299
1300         if (ip_proto == htons(ETH_P_IP)) {
1301                 struct iphdr *iph = (struct iphdr *)skb->data;
1302
1303                 if (iph->protocol == IPPROTO_UDP)
1304                         uh = (struct udphdr *)(iph + 1);
1305         } else {
1306                 struct ipv6hdr *iph = (struct ipv6hdr *)skb->data;
1307
1308                 if (iph->nexthdr == IPPROTO_UDP)
1309                         uh = (struct udphdr *)(iph + 1);
1310         }
1311         if (uh) {
1312                 if (uh->check)
1313                         skb_shinfo(skb)->gso_type |= SKB_GSO_UDP_TUNNEL_CSUM;
1314                 else
1315                         skb_shinfo(skb)->gso_type |= SKB_GSO_UDP_TUNNEL;
1316         }
1317 }
1318 #endif
1319
1320 static struct sk_buff *bnxt_gro_func_5731x(struct bnxt_tpa_info *tpa_info,
1321                                            int payload_off, int tcp_ts,
1322                                            struct sk_buff *skb)
1323 {
1324 #ifdef CONFIG_INET
1325         struct tcphdr *th;
1326         int len, nw_off;
1327         u16 outer_ip_off, inner_ip_off, inner_mac_off;
1328         u32 hdr_info = tpa_info->hdr_info;
1329         bool loopback = false;
1330
1331         inner_ip_off = BNXT_TPA_INNER_L3_OFF(hdr_info);
1332         inner_mac_off = BNXT_TPA_INNER_L2_OFF(hdr_info);
1333         outer_ip_off = BNXT_TPA_OUTER_L3_OFF(hdr_info);
1334
1335         /* If the packet is an internal loopback packet, the offsets will
1336          * have an extra 4 bytes.
1337          */
1338         if (inner_mac_off == 4) {
1339                 loopback = true;
1340         } else if (inner_mac_off > 4) {
1341                 __be16 proto = *((__be16 *)(skb->data + inner_ip_off -
1342                                             ETH_HLEN - 2));
1343
1344                 /* We only support inner iPv4/ipv6.  If we don't see the
1345                  * correct protocol ID, it must be a loopback packet where
1346                  * the offsets are off by 4.
1347                  */
1348                 if (proto != htons(ETH_P_IP) && proto != htons(ETH_P_IPV6))
1349                         loopback = true;
1350         }
1351         if (loopback) {
1352                 /* internal loopback packet, subtract all offsets by 4 */
1353                 inner_ip_off -= 4;
1354                 inner_mac_off -= 4;
1355                 outer_ip_off -= 4;
1356         }
1357
1358         nw_off = inner_ip_off - ETH_HLEN;
1359         skb_set_network_header(skb, nw_off);
1360         if (tpa_info->flags2 & RX_TPA_START_CMP_FLAGS2_IP_TYPE) {
1361                 struct ipv6hdr *iph = ipv6_hdr(skb);
1362
1363                 skb_set_transport_header(skb, nw_off + sizeof(struct ipv6hdr));
1364                 len = skb->len - skb_transport_offset(skb);
1365                 th = tcp_hdr(skb);
1366                 th->check = ~tcp_v6_check(len, &iph->saddr, &iph->daddr, 0);
1367         } else {
1368                 struct iphdr *iph = ip_hdr(skb);
1369
1370                 skb_set_transport_header(skb, nw_off + sizeof(struct iphdr));
1371                 len = skb->len - skb_transport_offset(skb);
1372                 th = tcp_hdr(skb);
1373                 th->check = ~tcp_v4_check(len, iph->saddr, iph->daddr, 0);
1374         }
1375
1376         if (inner_mac_off) { /* tunnel */
1377                 __be16 proto = *((__be16 *)(skb->data + outer_ip_off -
1378                                             ETH_HLEN - 2));
1379
1380                 bnxt_gro_tunnel(skb, proto);
1381         }
1382 #endif
1383         return skb;
1384 }
1385
1386 static struct sk_buff *bnxt_gro_func_5750x(struct bnxt_tpa_info *tpa_info,
1387                                            int payload_off, int tcp_ts,
1388                                            struct sk_buff *skb)
1389 {
1390 #ifdef CONFIG_INET
1391         u16 outer_ip_off, inner_ip_off, inner_mac_off;
1392         u32 hdr_info = tpa_info->hdr_info;
1393         int iphdr_len, nw_off;
1394
1395         inner_ip_off = BNXT_TPA_INNER_L3_OFF(hdr_info);
1396         inner_mac_off = BNXT_TPA_INNER_L2_OFF(hdr_info);
1397         outer_ip_off = BNXT_TPA_OUTER_L3_OFF(hdr_info);
1398
1399         nw_off = inner_ip_off - ETH_HLEN;
1400         skb_set_network_header(skb, nw_off);
1401         iphdr_len = (tpa_info->flags2 & RX_TPA_START_CMP_FLAGS2_IP_TYPE) ?
1402                      sizeof(struct ipv6hdr) : sizeof(struct iphdr);
1403         skb_set_transport_header(skb, nw_off + iphdr_len);
1404
1405         if (inner_mac_off) { /* tunnel */
1406                 __be16 proto = *((__be16 *)(skb->data + outer_ip_off -
1407                                             ETH_HLEN - 2));
1408
1409                 bnxt_gro_tunnel(skb, proto);
1410         }
1411 #endif
1412         return skb;
1413 }
1414
1415 #define BNXT_IPV4_HDR_SIZE      (sizeof(struct iphdr) + sizeof(struct tcphdr))
1416 #define BNXT_IPV6_HDR_SIZE      (sizeof(struct ipv6hdr) + sizeof(struct tcphdr))
1417
1418 static struct sk_buff *bnxt_gro_func_5730x(struct bnxt_tpa_info *tpa_info,
1419                                            int payload_off, int tcp_ts,
1420                                            struct sk_buff *skb)
1421 {
1422 #ifdef CONFIG_INET
1423         struct tcphdr *th;
1424         int len, nw_off, tcp_opt_len = 0;
1425
1426         if (tcp_ts)
1427                 tcp_opt_len = 12;
1428
1429         if (tpa_info->gso_type == SKB_GSO_TCPV4) {
1430                 struct iphdr *iph;
1431
1432                 nw_off = payload_off - BNXT_IPV4_HDR_SIZE - tcp_opt_len -
1433                          ETH_HLEN;
1434                 skb_set_network_header(skb, nw_off);
1435                 iph = ip_hdr(skb);
1436                 skb_set_transport_header(skb, nw_off + sizeof(struct iphdr));
1437                 len = skb->len - skb_transport_offset(skb);
1438                 th = tcp_hdr(skb);
1439                 th->check = ~tcp_v4_check(len, iph->saddr, iph->daddr, 0);
1440         } else if (tpa_info->gso_type == SKB_GSO_TCPV6) {
1441                 struct ipv6hdr *iph;
1442
1443                 nw_off = payload_off - BNXT_IPV6_HDR_SIZE - tcp_opt_len -
1444                          ETH_HLEN;
1445                 skb_set_network_header(skb, nw_off);
1446                 iph = ipv6_hdr(skb);
1447                 skb_set_transport_header(skb, nw_off + sizeof(struct ipv6hdr));
1448                 len = skb->len - skb_transport_offset(skb);
1449                 th = tcp_hdr(skb);
1450                 th->check = ~tcp_v6_check(len, &iph->saddr, &iph->daddr, 0);
1451         } else {
1452                 dev_kfree_skb_any(skb);
1453                 return NULL;
1454         }
1455
1456         if (nw_off) /* tunnel */
1457                 bnxt_gro_tunnel(skb, skb->protocol);
1458 #endif
1459         return skb;
1460 }
1461
1462 static inline struct sk_buff *bnxt_gro_skb(struct bnxt *bp,
1463                                            struct bnxt_tpa_info *tpa_info,
1464                                            struct rx_tpa_end_cmp *tpa_end,
1465                                            struct rx_tpa_end_cmp_ext *tpa_end1,
1466                                            struct sk_buff *skb)
1467 {
1468 #ifdef CONFIG_INET
1469         int payload_off;
1470         u16 segs;
1471
1472         segs = TPA_END_TPA_SEGS(tpa_end);
1473         if (segs == 1)
1474                 return skb;
1475
1476         NAPI_GRO_CB(skb)->count = segs;
1477         skb_shinfo(skb)->gso_size =
1478                 le32_to_cpu(tpa_end1->rx_tpa_end_cmp_seg_len);
1479         skb_shinfo(skb)->gso_type = tpa_info->gso_type;
1480         if (bp->flags & BNXT_FLAG_CHIP_P5)
1481                 payload_off = TPA_END_PAYLOAD_OFF_P5(tpa_end1);
1482         else
1483                 payload_off = TPA_END_PAYLOAD_OFF(tpa_end);
1484         skb = bp->gro_func(tpa_info, payload_off, TPA_END_GRO_TS(tpa_end), skb);
1485         if (likely(skb))
1486                 tcp_gro_complete(skb);
1487 #endif
1488         return skb;
1489 }
1490
1491 /* Given the cfa_code of a received packet determine which
1492  * netdev (vf-rep or PF) the packet is destined to.
1493  */
1494 static struct net_device *bnxt_get_pkt_dev(struct bnxt *bp, u16 cfa_code)
1495 {
1496         struct net_device *dev = bnxt_get_vf_rep(bp, cfa_code);
1497
1498         /* if vf-rep dev is NULL, the must belongs to the PF */
1499         return dev ? dev : bp->dev;
1500 }
1501
1502 static inline struct sk_buff *bnxt_tpa_end(struct bnxt *bp,
1503                                            struct bnxt_cp_ring_info *cpr,
1504                                            u32 *raw_cons,
1505                                            struct rx_tpa_end_cmp *tpa_end,
1506                                            struct rx_tpa_end_cmp_ext *tpa_end1,
1507                                            u8 *event)
1508 {
1509         struct bnxt_napi *bnapi = cpr->bnapi;
1510         struct bnxt_rx_ring_info *rxr = bnapi->rx_ring;
1511         u8 *data_ptr, agg_bufs;
1512         unsigned int len;
1513         struct bnxt_tpa_info *tpa_info;
1514         dma_addr_t mapping;
1515         struct sk_buff *skb;
1516         u16 idx = 0, agg_id;
1517         void *data;
1518         bool gro;
1519
1520         if (unlikely(bnapi->in_reset)) {
1521                 int rc = bnxt_discard_rx(bp, cpr, raw_cons, tpa_end);
1522
1523                 if (rc < 0)
1524                         return ERR_PTR(-EBUSY);
1525                 return NULL;
1526         }
1527
1528         if (bp->flags & BNXT_FLAG_CHIP_P5) {
1529                 agg_id = TPA_END_AGG_ID_P5(tpa_end);
1530                 agg_id = bnxt_lookup_agg_idx(rxr, agg_id);
1531                 agg_bufs = TPA_END_AGG_BUFS_P5(tpa_end1);
1532                 tpa_info = &rxr->rx_tpa[agg_id];
1533                 if (unlikely(agg_bufs != tpa_info->agg_count)) {
1534                         netdev_warn(bp->dev, "TPA end agg_buf %d != expected agg_bufs %d\n",
1535                                     agg_bufs, tpa_info->agg_count);
1536                         agg_bufs = tpa_info->agg_count;
1537                 }
1538                 tpa_info->agg_count = 0;
1539                 *event |= BNXT_AGG_EVENT;
1540                 bnxt_free_agg_idx(rxr, agg_id);
1541                 idx = agg_id;
1542                 gro = !!(bp->flags & BNXT_FLAG_GRO);
1543         } else {
1544                 agg_id = TPA_END_AGG_ID(tpa_end);
1545                 agg_bufs = TPA_END_AGG_BUFS(tpa_end);
1546                 tpa_info = &rxr->rx_tpa[agg_id];
1547                 idx = RING_CMP(*raw_cons);
1548                 if (agg_bufs) {
1549                         if (!bnxt_agg_bufs_valid(bp, cpr, agg_bufs, raw_cons))
1550                                 return ERR_PTR(-EBUSY);
1551
1552                         *event |= BNXT_AGG_EVENT;
1553                         idx = NEXT_CMP(idx);
1554                 }
1555                 gro = !!TPA_END_GRO(tpa_end);
1556         }
1557         data = tpa_info->data;
1558         data_ptr = tpa_info->data_ptr;
1559         prefetch(data_ptr);
1560         len = tpa_info->len;
1561         mapping = tpa_info->mapping;
1562
1563         if (unlikely(agg_bufs > MAX_SKB_FRAGS || TPA_END_ERRORS(tpa_end1))) {
1564                 bnxt_abort_tpa(cpr, idx, agg_bufs);
1565                 if (agg_bufs > MAX_SKB_FRAGS)
1566                         netdev_warn(bp->dev, "TPA frags %d exceeded MAX_SKB_FRAGS %d\n",
1567                                     agg_bufs, (int)MAX_SKB_FRAGS);
1568                 return NULL;
1569         }
1570
1571         if (len <= bp->rx_copy_thresh) {
1572                 skb = bnxt_copy_skb(bnapi, data_ptr, len, mapping);
1573                 if (!skb) {
1574                         bnxt_abort_tpa(cpr, idx, agg_bufs);
1575                         return NULL;
1576                 }
1577         } else {
1578                 u8 *new_data;
1579                 dma_addr_t new_mapping;
1580
1581                 new_data = __bnxt_alloc_rx_data(bp, &new_mapping, GFP_ATOMIC);
1582                 if (!new_data) {
1583                         bnxt_abort_tpa(cpr, idx, agg_bufs);
1584                         return NULL;
1585                 }
1586
1587                 tpa_info->data = new_data;
1588                 tpa_info->data_ptr = new_data + bp->rx_offset;
1589                 tpa_info->mapping = new_mapping;
1590
1591                 skb = build_skb(data, 0);
1592                 dma_unmap_single_attrs(&bp->pdev->dev, mapping,
1593                                        bp->rx_buf_use_size, bp->rx_dir,
1594                                        DMA_ATTR_WEAK_ORDERING);
1595
1596                 if (!skb) {
1597                         kfree(data);
1598                         bnxt_abort_tpa(cpr, idx, agg_bufs);
1599                         return NULL;
1600                 }
1601                 skb_reserve(skb, bp->rx_offset);
1602                 skb_put(skb, len);
1603         }
1604
1605         if (agg_bufs) {
1606                 skb = bnxt_rx_pages(bp, cpr, skb, idx, agg_bufs, true);
1607                 if (!skb) {
1608                         /* Page reuse already handled by bnxt_rx_pages(). */
1609                         return NULL;
1610                 }
1611         }
1612
1613         skb->protocol =
1614                 eth_type_trans(skb, bnxt_get_pkt_dev(bp, tpa_info->cfa_code));
1615
1616         if (tpa_info->hash_type != PKT_HASH_TYPE_NONE)
1617                 skb_set_hash(skb, tpa_info->rss_hash, tpa_info->hash_type);
1618
1619         if ((tpa_info->flags2 & RX_CMP_FLAGS2_META_FORMAT_VLAN) &&
1620             (skb->dev->features & NETIF_F_HW_VLAN_CTAG_RX)) {
1621                 u16 vlan_proto = tpa_info->metadata >>
1622                         RX_CMP_FLAGS2_METADATA_TPID_SFT;
1623                 u16 vtag = tpa_info->metadata & RX_CMP_FLAGS2_METADATA_TCI_MASK;
1624
1625                 __vlan_hwaccel_put_tag(skb, htons(vlan_proto), vtag);
1626         }
1627
1628         skb_checksum_none_assert(skb);
1629         if (likely(tpa_info->flags2 & RX_TPA_START_CMP_FLAGS2_L4_CS_CALC)) {
1630                 skb->ip_summed = CHECKSUM_UNNECESSARY;
1631                 skb->csum_level =
1632                         (tpa_info->flags2 & RX_CMP_FLAGS2_T_L4_CS_CALC) >> 3;
1633         }
1634
1635         if (gro)
1636                 skb = bnxt_gro_skb(bp, tpa_info, tpa_end, tpa_end1, skb);
1637
1638         return skb;
1639 }
1640
1641 static void bnxt_tpa_agg(struct bnxt *bp, struct bnxt_rx_ring_info *rxr,
1642                          struct rx_agg_cmp *rx_agg)
1643 {
1644         u16 agg_id = TPA_AGG_AGG_ID(rx_agg);
1645         struct bnxt_tpa_info *tpa_info;
1646
1647         agg_id = bnxt_lookup_agg_idx(rxr, agg_id);
1648         tpa_info = &rxr->rx_tpa[agg_id];
1649         BUG_ON(tpa_info->agg_count >= MAX_SKB_FRAGS);
1650         tpa_info->agg_arr[tpa_info->agg_count++] = *rx_agg;
1651 }
1652
1653 static void bnxt_deliver_skb(struct bnxt *bp, struct bnxt_napi *bnapi,
1654                              struct sk_buff *skb)
1655 {
1656         if (skb->dev != bp->dev) {
1657                 /* this packet belongs to a vf-rep */
1658                 bnxt_vf_rep_rx(bp, skb);
1659                 return;
1660         }
1661         skb_record_rx_queue(skb, bnapi->index);
1662         napi_gro_receive(&bnapi->napi, skb);
1663 }
1664
1665 /* returns the following:
1666  * 1       - 1 packet successfully received
1667  * 0       - successful TPA_START, packet not completed yet
1668  * -EBUSY  - completion ring does not have all the agg buffers yet
1669  * -ENOMEM - packet aborted due to out of memory
1670  * -EIO    - packet aborted due to hw error indicated in BD
1671  */
1672 static int bnxt_rx_pkt(struct bnxt *bp, struct bnxt_cp_ring_info *cpr,
1673                        u32 *raw_cons, u8 *event)
1674 {
1675         struct bnxt_napi *bnapi = cpr->bnapi;
1676         struct bnxt_rx_ring_info *rxr = bnapi->rx_ring;
1677         struct net_device *dev = bp->dev;
1678         struct rx_cmp *rxcmp;
1679         struct rx_cmp_ext *rxcmp1;
1680         u32 tmp_raw_cons = *raw_cons;
1681         u16 cfa_code, cons, prod, cp_cons = RING_CMP(tmp_raw_cons);
1682         struct bnxt_sw_rx_bd *rx_buf;
1683         unsigned int len;
1684         u8 *data_ptr, agg_bufs, cmp_type;
1685         dma_addr_t dma_addr;
1686         struct sk_buff *skb;
1687         void *data;
1688         int rc = 0;
1689         u32 misc;
1690
1691         rxcmp = (struct rx_cmp *)
1692                         &cpr->cp_desc_ring[CP_RING(cp_cons)][CP_IDX(cp_cons)];
1693
1694         cmp_type = RX_CMP_TYPE(rxcmp);
1695
1696         if (cmp_type == CMP_TYPE_RX_TPA_AGG_CMP) {
1697                 bnxt_tpa_agg(bp, rxr, (struct rx_agg_cmp *)rxcmp);
1698                 goto next_rx_no_prod_no_len;
1699         }
1700
1701         tmp_raw_cons = NEXT_RAW_CMP(tmp_raw_cons);
1702         cp_cons = RING_CMP(tmp_raw_cons);
1703         rxcmp1 = (struct rx_cmp_ext *)
1704                         &cpr->cp_desc_ring[CP_RING(cp_cons)][CP_IDX(cp_cons)];
1705
1706         if (!RX_CMP_VALID(rxcmp1, tmp_raw_cons))
1707                 return -EBUSY;
1708
1709         prod = rxr->rx_prod;
1710
1711         if (cmp_type == CMP_TYPE_RX_L2_TPA_START_CMP) {
1712                 bnxt_tpa_start(bp, rxr, (struct rx_tpa_start_cmp *)rxcmp,
1713                                (struct rx_tpa_start_cmp_ext *)rxcmp1);
1714
1715                 *event |= BNXT_RX_EVENT;
1716                 goto next_rx_no_prod_no_len;
1717
1718         } else if (cmp_type == CMP_TYPE_RX_L2_TPA_END_CMP) {
1719                 skb = bnxt_tpa_end(bp, cpr, &tmp_raw_cons,
1720                                    (struct rx_tpa_end_cmp *)rxcmp,
1721                                    (struct rx_tpa_end_cmp_ext *)rxcmp1, event);
1722
1723                 if (IS_ERR(skb))
1724                         return -EBUSY;
1725
1726                 rc = -ENOMEM;
1727                 if (likely(skb)) {
1728                         bnxt_deliver_skb(bp, bnapi, skb);
1729                         rc = 1;
1730                 }
1731                 *event |= BNXT_RX_EVENT;
1732                 goto next_rx_no_prod_no_len;
1733         }
1734
1735         cons = rxcmp->rx_cmp_opaque;
1736         if (unlikely(cons != rxr->rx_next_cons)) {
1737                 int rc1 = bnxt_discard_rx(bp, cpr, raw_cons, rxcmp);
1738
1739                 netdev_warn(bp->dev, "RX cons %x != expected cons %x\n",
1740                             cons, rxr->rx_next_cons);
1741                 bnxt_sched_reset(bp, rxr);
1742                 return rc1;
1743         }
1744         rx_buf = &rxr->rx_buf_ring[cons];
1745         data = rx_buf->data;
1746         data_ptr = rx_buf->data_ptr;
1747         prefetch(data_ptr);
1748
1749         misc = le32_to_cpu(rxcmp->rx_cmp_misc_v1);
1750         agg_bufs = (misc & RX_CMP_AGG_BUFS) >> RX_CMP_AGG_BUFS_SHIFT;
1751
1752         if (agg_bufs) {
1753                 if (!bnxt_agg_bufs_valid(bp, cpr, agg_bufs, &tmp_raw_cons))
1754                         return -EBUSY;
1755
1756                 cp_cons = NEXT_CMP(cp_cons);
1757                 *event |= BNXT_AGG_EVENT;
1758         }
1759         *event |= BNXT_RX_EVENT;
1760
1761         rx_buf->data = NULL;
1762         if (rxcmp1->rx_cmp_cfa_code_errors_v2 & RX_CMP_L2_ERRORS) {
1763                 u32 rx_err = le32_to_cpu(rxcmp1->rx_cmp_cfa_code_errors_v2);
1764
1765                 bnxt_reuse_rx_data(rxr, cons, data);
1766                 if (agg_bufs)
1767                         bnxt_reuse_rx_agg_bufs(cpr, cp_cons, 0, agg_bufs,
1768                                                false);
1769
1770                 rc = -EIO;
1771                 if (rx_err & RX_CMPL_ERRORS_BUFFER_ERROR_MASK) {
1772                         bnapi->cp_ring.rx_buf_errors++;
1773                         if (!(bp->flags & BNXT_FLAG_CHIP_P5)) {
1774                                 netdev_warn(bp->dev, "RX buffer error %x\n",
1775                                             rx_err);
1776                                 bnxt_sched_reset(bp, rxr);
1777                         }
1778                 }
1779                 goto next_rx_no_len;
1780         }
1781
1782         len = le32_to_cpu(rxcmp->rx_cmp_len_flags_type) >> RX_CMP_LEN_SHIFT;
1783         dma_addr = rx_buf->mapping;
1784
1785         if (bnxt_rx_xdp(bp, rxr, cons, data, &data_ptr, &len, event)) {
1786                 rc = 1;
1787                 goto next_rx;
1788         }
1789
1790         if (len <= bp->rx_copy_thresh) {
1791                 skb = bnxt_copy_skb(bnapi, data_ptr, len, dma_addr);
1792                 bnxt_reuse_rx_data(rxr, cons, data);
1793                 if (!skb) {
1794                         if (agg_bufs)
1795                                 bnxt_reuse_rx_agg_bufs(cpr, cp_cons, 0,
1796                                                        agg_bufs, false);
1797                         rc = -ENOMEM;
1798                         goto next_rx;
1799                 }
1800         } else {
1801                 u32 payload;
1802
1803                 if (rx_buf->data_ptr == data_ptr)
1804                         payload = misc & RX_CMP_PAYLOAD_OFFSET;
1805                 else
1806                         payload = 0;
1807                 skb = bp->rx_skb_func(bp, rxr, cons, data, data_ptr, dma_addr,
1808                                       payload | len);
1809                 if (!skb) {
1810                         rc = -ENOMEM;
1811                         goto next_rx;
1812                 }
1813         }
1814
1815         if (agg_bufs) {
1816                 skb = bnxt_rx_pages(bp, cpr, skb, cp_cons, agg_bufs, false);
1817                 if (!skb) {
1818                         rc = -ENOMEM;
1819                         goto next_rx;
1820                 }
1821         }
1822
1823         if (RX_CMP_HASH_VALID(rxcmp)) {
1824                 u32 hash_type = RX_CMP_HASH_TYPE(rxcmp);
1825                 enum pkt_hash_types type = PKT_HASH_TYPE_L4;
1826
1827                 /* RSS profiles 1 and 3 with extract code 0 for inner 4-tuple */
1828                 if (hash_type != 1 && hash_type != 3)
1829                         type = PKT_HASH_TYPE_L3;
1830                 skb_set_hash(skb, le32_to_cpu(rxcmp->rx_cmp_rss_hash), type);
1831         }
1832
1833         cfa_code = RX_CMP_CFA_CODE(rxcmp1);
1834         skb->protocol = eth_type_trans(skb, bnxt_get_pkt_dev(bp, cfa_code));
1835
1836         if ((rxcmp1->rx_cmp_flags2 &
1837              cpu_to_le32(RX_CMP_FLAGS2_META_FORMAT_VLAN)) &&
1838             (skb->dev->features & NETIF_F_HW_VLAN_CTAG_RX)) {
1839                 u32 meta_data = le32_to_cpu(rxcmp1->rx_cmp_meta_data);
1840                 u16 vtag = meta_data & RX_CMP_FLAGS2_METADATA_TCI_MASK;
1841                 u16 vlan_proto = meta_data >> RX_CMP_FLAGS2_METADATA_TPID_SFT;
1842
1843                 __vlan_hwaccel_put_tag(skb, htons(vlan_proto), vtag);
1844         }
1845
1846         skb_checksum_none_assert(skb);
1847         if (RX_CMP_L4_CS_OK(rxcmp1)) {
1848                 if (dev->features & NETIF_F_RXCSUM) {
1849                         skb->ip_summed = CHECKSUM_UNNECESSARY;
1850                         skb->csum_level = RX_CMP_ENCAP(rxcmp1);
1851                 }
1852         } else {
1853                 if (rxcmp1->rx_cmp_cfa_code_errors_v2 & RX_CMP_L4_CS_ERR_BITS) {
1854                         if (dev->features & NETIF_F_RXCSUM)
1855                                 bnapi->cp_ring.rx_l4_csum_errors++;
1856                 }
1857         }
1858
1859         bnxt_deliver_skb(bp, bnapi, skb);
1860         rc = 1;
1861
1862 next_rx:
1863         cpr->rx_packets += 1;
1864         cpr->rx_bytes += len;
1865
1866 next_rx_no_len:
1867         rxr->rx_prod = NEXT_RX(prod);
1868         rxr->rx_next_cons = NEXT_RX(cons);
1869
1870 next_rx_no_prod_no_len:
1871         *raw_cons = tmp_raw_cons;
1872
1873         return rc;
1874 }
1875
1876 /* In netpoll mode, if we are using a combined completion ring, we need to
1877  * discard the rx packets and recycle the buffers.
1878  */
1879 static int bnxt_force_rx_discard(struct bnxt *bp,
1880                                  struct bnxt_cp_ring_info *cpr,
1881                                  u32 *raw_cons, u8 *event)
1882 {
1883         u32 tmp_raw_cons = *raw_cons;
1884         struct rx_cmp_ext *rxcmp1;
1885         struct rx_cmp *rxcmp;
1886         u16 cp_cons;
1887         u8 cmp_type;
1888
1889         cp_cons = RING_CMP(tmp_raw_cons);
1890         rxcmp = (struct rx_cmp *)
1891                         &cpr->cp_desc_ring[CP_RING(cp_cons)][CP_IDX(cp_cons)];
1892
1893         tmp_raw_cons = NEXT_RAW_CMP(tmp_raw_cons);
1894         cp_cons = RING_CMP(tmp_raw_cons);
1895         rxcmp1 = (struct rx_cmp_ext *)
1896                         &cpr->cp_desc_ring[CP_RING(cp_cons)][CP_IDX(cp_cons)];
1897
1898         if (!RX_CMP_VALID(rxcmp1, tmp_raw_cons))
1899                 return -EBUSY;
1900
1901         cmp_type = RX_CMP_TYPE(rxcmp);
1902         if (cmp_type == CMP_TYPE_RX_L2_CMP) {
1903                 rxcmp1->rx_cmp_cfa_code_errors_v2 |=
1904                         cpu_to_le32(RX_CMPL_ERRORS_CRC_ERROR);
1905         } else if (cmp_type == CMP_TYPE_RX_L2_TPA_END_CMP) {
1906                 struct rx_tpa_end_cmp_ext *tpa_end1;
1907
1908                 tpa_end1 = (struct rx_tpa_end_cmp_ext *)rxcmp1;
1909                 tpa_end1->rx_tpa_end_cmp_errors_v2 |=
1910                         cpu_to_le32(RX_TPA_END_CMP_ERRORS);
1911         }
1912         return bnxt_rx_pkt(bp, cpr, raw_cons, event);
1913 }
1914
1915 u32 bnxt_fw_health_readl(struct bnxt *bp, int reg_idx)
1916 {
1917         struct bnxt_fw_health *fw_health = bp->fw_health;
1918         u32 reg = fw_health->regs[reg_idx];
1919         u32 reg_type, reg_off, val = 0;
1920
1921         reg_type = BNXT_FW_HEALTH_REG_TYPE(reg);
1922         reg_off = BNXT_FW_HEALTH_REG_OFF(reg);
1923         switch (reg_type) {
1924         case BNXT_FW_HEALTH_REG_TYPE_CFG:
1925                 pci_read_config_dword(bp->pdev, reg_off, &val);
1926                 break;
1927         case BNXT_FW_HEALTH_REG_TYPE_GRC:
1928                 reg_off = fw_health->mapped_regs[reg_idx];
1929                 /* fall through */
1930         case BNXT_FW_HEALTH_REG_TYPE_BAR0:
1931                 val = readl(bp->bar0 + reg_off);
1932                 break;
1933         case BNXT_FW_HEALTH_REG_TYPE_BAR1:
1934                 val = readl(bp->bar1 + reg_off);
1935                 break;
1936         }
1937         if (reg_idx == BNXT_FW_RESET_INPROG_REG)
1938                 val &= fw_health->fw_reset_inprog_reg_mask;
1939         return val;
1940 }
1941
1942 #define BNXT_GET_EVENT_PORT(data)       \
1943         ((data) &                       \
1944          ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_EVENT_DATA1_PORT_ID_MASK)
1945
1946 static int bnxt_async_event_process(struct bnxt *bp,
1947                                     struct hwrm_async_event_cmpl *cmpl)
1948 {
1949         u16 event_id = le16_to_cpu(cmpl->event_id);
1950
1951         /* TODO CHIMP_FW: Define event id's for link change, error etc */
1952         switch (event_id) {
1953         case ASYNC_EVENT_CMPL_EVENT_ID_LINK_SPEED_CFG_CHANGE: {
1954                 u32 data1 = le32_to_cpu(cmpl->event_data1);
1955                 struct bnxt_link_info *link_info = &bp->link_info;
1956
1957                 if (BNXT_VF(bp))
1958                         goto async_event_process_exit;
1959
1960                 /* print unsupported speed warning in forced speed mode only */
1961                 if (!(link_info->autoneg & BNXT_AUTONEG_SPEED) &&
1962                     (data1 & 0x20000)) {
1963                         u16 fw_speed = link_info->force_link_speed;
1964                         u32 speed = bnxt_fw_to_ethtool_speed(fw_speed);
1965
1966                         if (speed != SPEED_UNKNOWN)
1967                                 netdev_warn(bp->dev, "Link speed %d no longer supported\n",
1968                                             speed);
1969                 }
1970                 set_bit(BNXT_LINK_SPEED_CHNG_SP_EVENT, &bp->sp_event);
1971         }
1972         /* fall through */
1973         case ASYNC_EVENT_CMPL_EVENT_ID_LINK_SPEED_CHANGE:
1974         case ASYNC_EVENT_CMPL_EVENT_ID_PORT_PHY_CFG_CHANGE:
1975                 set_bit(BNXT_LINK_CFG_CHANGE_SP_EVENT, &bp->sp_event);
1976                 /* fall through */
1977         case ASYNC_EVENT_CMPL_EVENT_ID_LINK_STATUS_CHANGE:
1978                 set_bit(BNXT_LINK_CHNG_SP_EVENT, &bp->sp_event);
1979                 break;
1980         case ASYNC_EVENT_CMPL_EVENT_ID_PF_DRVR_UNLOAD:
1981                 set_bit(BNXT_HWRM_PF_UNLOAD_SP_EVENT, &bp->sp_event);
1982                 break;
1983         case ASYNC_EVENT_CMPL_EVENT_ID_PORT_CONN_NOT_ALLOWED: {
1984                 u32 data1 = le32_to_cpu(cmpl->event_data1);
1985                 u16 port_id = BNXT_GET_EVENT_PORT(data1);
1986
1987                 if (BNXT_VF(bp))
1988                         break;
1989
1990                 if (bp->pf.port_id != port_id)
1991                         break;
1992
1993                 set_bit(BNXT_HWRM_PORT_MODULE_SP_EVENT, &bp->sp_event);
1994                 break;
1995         }
1996         case ASYNC_EVENT_CMPL_EVENT_ID_VF_CFG_CHANGE:
1997                 if (BNXT_PF(bp))
1998                         goto async_event_process_exit;
1999                 set_bit(BNXT_RESET_TASK_SILENT_SP_EVENT, &bp->sp_event);
2000                 break;
2001         case ASYNC_EVENT_CMPL_EVENT_ID_RESET_NOTIFY: {
2002                 u32 data1 = le32_to_cpu(cmpl->event_data1);
2003
2004                 if (!bp->fw_health)
2005                         goto async_event_process_exit;
2006
2007                 bp->fw_reset_timestamp = jiffies;
2008                 bp->fw_reset_min_dsecs = cmpl->timestamp_lo;
2009                 if (!bp->fw_reset_min_dsecs)
2010                         bp->fw_reset_min_dsecs = BNXT_DFLT_FW_RST_MIN_DSECS;
2011                 bp->fw_reset_max_dsecs = le16_to_cpu(cmpl->timestamp_hi);
2012                 if (!bp->fw_reset_max_dsecs)
2013                         bp->fw_reset_max_dsecs = BNXT_DFLT_FW_RST_MAX_DSECS;
2014                 if (EVENT_DATA1_RESET_NOTIFY_FATAL(data1)) {
2015                         netdev_warn(bp->dev, "Firmware fatal reset event received\n");
2016                         set_bit(BNXT_STATE_FW_FATAL_COND, &bp->state);
2017                 } else {
2018                         netdev_warn(bp->dev, "Firmware non-fatal reset event received, max wait time %d msec\n",
2019                                     bp->fw_reset_max_dsecs * 100);
2020                 }
2021                 set_bit(BNXT_FW_RESET_NOTIFY_SP_EVENT, &bp->sp_event);
2022                 break;
2023         }
2024         case ASYNC_EVENT_CMPL_EVENT_ID_ERROR_RECOVERY: {
2025                 struct bnxt_fw_health *fw_health = bp->fw_health;
2026                 u32 data1 = le32_to_cpu(cmpl->event_data1);
2027
2028                 if (!fw_health)
2029                         goto async_event_process_exit;
2030
2031                 fw_health->enabled = EVENT_DATA1_RECOVERY_ENABLED(data1);
2032                 fw_health->master = EVENT_DATA1_RECOVERY_MASTER_FUNC(data1);
2033                 if (!fw_health->enabled)
2034                         break;
2035
2036                 if (netif_msg_drv(bp))
2037                         netdev_info(bp->dev, "Error recovery info: error recovery[%d], master[%d], reset count[0x%x], health status: 0x%x\n",
2038                                     fw_health->enabled, fw_health->master,
2039                                     bnxt_fw_health_readl(bp,
2040                                                          BNXT_FW_RESET_CNT_REG),
2041                                     bnxt_fw_health_readl(bp,
2042                                                          BNXT_FW_HEALTH_REG));
2043                 fw_health->tmr_multiplier =
2044                         DIV_ROUND_UP(fw_health->polling_dsecs * HZ,
2045                                      bp->current_interval * 10);
2046                 fw_health->tmr_counter = fw_health->tmr_multiplier;
2047                 fw_health->last_fw_heartbeat =
2048                         bnxt_fw_health_readl(bp, BNXT_FW_HEARTBEAT_REG);
2049                 fw_health->last_fw_reset_cnt =
2050                         bnxt_fw_health_readl(bp, BNXT_FW_RESET_CNT_REG);
2051                 goto async_event_process_exit;
2052         }
2053         default:
2054                 goto async_event_process_exit;
2055         }
2056         bnxt_queue_sp_work(bp);
2057 async_event_process_exit:
2058         bnxt_ulp_async_events(bp, cmpl);
2059         return 0;
2060 }
2061
2062 static int bnxt_hwrm_handler(struct bnxt *bp, struct tx_cmp *txcmp)
2063 {
2064         u16 cmpl_type = TX_CMP_TYPE(txcmp), vf_id, seq_id;
2065         struct hwrm_cmpl *h_cmpl = (struct hwrm_cmpl *)txcmp;
2066         struct hwrm_fwd_req_cmpl *fwd_req_cmpl =
2067                                 (struct hwrm_fwd_req_cmpl *)txcmp;
2068
2069         switch (cmpl_type) {
2070         case CMPL_BASE_TYPE_HWRM_DONE:
2071                 seq_id = le16_to_cpu(h_cmpl->sequence_id);
2072                 if (seq_id == bp->hwrm_intr_seq_id)
2073                         bp->hwrm_intr_seq_id = (u16)~bp->hwrm_intr_seq_id;
2074                 else
2075                         netdev_err(bp->dev, "Invalid hwrm seq id %d\n", seq_id);
2076                 break;
2077
2078         case CMPL_BASE_TYPE_HWRM_FWD_REQ:
2079                 vf_id = le16_to_cpu(fwd_req_cmpl->source_id);
2080
2081                 if ((vf_id < bp->pf.first_vf_id) ||
2082                     (vf_id >= bp->pf.first_vf_id + bp->pf.active_vfs)) {
2083                         netdev_err(bp->dev, "Msg contains invalid VF id %x\n",
2084                                    vf_id);
2085                         return -EINVAL;
2086                 }
2087
2088                 set_bit(vf_id - bp->pf.first_vf_id, bp->pf.vf_event_bmap);
2089                 set_bit(BNXT_HWRM_EXEC_FWD_REQ_SP_EVENT, &bp->sp_event);
2090                 bnxt_queue_sp_work(bp);
2091                 break;
2092
2093         case CMPL_BASE_TYPE_HWRM_ASYNC_EVENT:
2094                 bnxt_async_event_process(bp,
2095                                          (struct hwrm_async_event_cmpl *)txcmp);
2096
2097         default:
2098                 break;
2099         }
2100
2101         return 0;
2102 }
2103
2104 static irqreturn_t bnxt_msix(int irq, void *dev_instance)
2105 {
2106         struct bnxt_napi *bnapi = dev_instance;
2107         struct bnxt *bp = bnapi->bp;
2108         struct bnxt_cp_ring_info *cpr = &bnapi->cp_ring;
2109         u32 cons = RING_CMP(cpr->cp_raw_cons);
2110
2111         cpr->event_ctr++;
2112         prefetch(&cpr->cp_desc_ring[CP_RING(cons)][CP_IDX(cons)]);
2113         napi_schedule(&bnapi->napi);
2114         return IRQ_HANDLED;
2115 }
2116
2117 static inline int bnxt_has_work(struct bnxt *bp, struct bnxt_cp_ring_info *cpr)
2118 {
2119         u32 raw_cons = cpr->cp_raw_cons;
2120         u16 cons = RING_CMP(raw_cons);
2121         struct tx_cmp *txcmp;
2122
2123         txcmp = &cpr->cp_desc_ring[CP_RING(cons)][CP_IDX(cons)];
2124
2125         return TX_CMP_VALID(txcmp, raw_cons);
2126 }
2127
2128 static irqreturn_t bnxt_inta(int irq, void *dev_instance)
2129 {
2130         struct bnxt_napi *bnapi = dev_instance;
2131         struct bnxt *bp = bnapi->bp;
2132         struct bnxt_cp_ring_info *cpr = &bnapi->cp_ring;
2133         u32 cons = RING_CMP(cpr->cp_raw_cons);
2134         u32 int_status;
2135
2136         prefetch(&cpr->cp_desc_ring[CP_RING(cons)][CP_IDX(cons)]);
2137
2138         if (!bnxt_has_work(bp, cpr)) {
2139                 int_status = readl(bp->bar0 + BNXT_CAG_REG_LEGACY_INT_STATUS);
2140                 /* return if erroneous interrupt */
2141                 if (!(int_status & (0x10000 << cpr->cp_ring_struct.fw_ring_id)))
2142                         return IRQ_NONE;
2143         }
2144
2145         /* disable ring IRQ */
2146         BNXT_CP_DB_IRQ_DIS(cpr->cp_db.doorbell);
2147
2148         /* Return here if interrupt is shared and is disabled. */
2149         if (unlikely(atomic_read(&bp->intr_sem) != 0))
2150                 return IRQ_HANDLED;
2151
2152         napi_schedule(&bnapi->napi);
2153         return IRQ_HANDLED;
2154 }
2155
2156 static int __bnxt_poll_work(struct bnxt *bp, struct bnxt_cp_ring_info *cpr,
2157                             int budget)
2158 {
2159         struct bnxt_napi *bnapi = cpr->bnapi;
2160         u32 raw_cons = cpr->cp_raw_cons;
2161         u32 cons;
2162         int tx_pkts = 0;
2163         int rx_pkts = 0;
2164         u8 event = 0;
2165         struct tx_cmp *txcmp;
2166
2167         cpr->has_more_work = 0;
2168         while (1) {
2169                 int rc;
2170
2171                 cons = RING_CMP(raw_cons);
2172                 txcmp = &cpr->cp_desc_ring[CP_RING(cons)][CP_IDX(cons)];
2173
2174                 if (!TX_CMP_VALID(txcmp, raw_cons))
2175                         break;
2176
2177                 /* The valid test of the entry must be done first before
2178                  * reading any further.
2179                  */
2180                 dma_rmb();
2181                 cpr->had_work_done = 1;
2182                 if (TX_CMP_TYPE(txcmp) == CMP_TYPE_TX_L2_CMP) {
2183                         tx_pkts++;
2184                         /* return full budget so NAPI will complete. */
2185                         if (unlikely(tx_pkts > bp->tx_wake_thresh)) {
2186                                 rx_pkts = budget;
2187                                 raw_cons = NEXT_RAW_CMP(raw_cons);
2188                                 if (budget)
2189                                         cpr->has_more_work = 1;
2190                                 break;
2191                         }
2192                 } else if ((TX_CMP_TYPE(txcmp) & 0x30) == 0x10) {
2193                         if (likely(budget))
2194                                 rc = bnxt_rx_pkt(bp, cpr, &raw_cons, &event);
2195                         else
2196                                 rc = bnxt_force_rx_discard(bp, cpr, &raw_cons,
2197                                                            &event);
2198                         if (likely(rc >= 0))
2199                                 rx_pkts += rc;
2200                         /* Increment rx_pkts when rc is -ENOMEM to count towards
2201                          * the NAPI budget.  Otherwise, we may potentially loop
2202                          * here forever if we consistently cannot allocate
2203                          * buffers.
2204                          */
2205                         else if (rc == -ENOMEM && budget)
2206                                 rx_pkts++;
2207                         else if (rc == -EBUSY)  /* partial completion */
2208                                 break;
2209                 } else if (unlikely((TX_CMP_TYPE(txcmp) ==
2210                                      CMPL_BASE_TYPE_HWRM_DONE) ||
2211                                     (TX_CMP_TYPE(txcmp) ==
2212                                      CMPL_BASE_TYPE_HWRM_FWD_REQ) ||
2213                                     (TX_CMP_TYPE(txcmp) ==
2214                                      CMPL_BASE_TYPE_HWRM_ASYNC_EVENT))) {
2215                         bnxt_hwrm_handler(bp, txcmp);
2216                 }
2217                 raw_cons = NEXT_RAW_CMP(raw_cons);
2218
2219                 if (rx_pkts && rx_pkts == budget) {
2220                         cpr->has_more_work = 1;
2221                         break;
2222                 }
2223         }
2224
2225         if (event & BNXT_REDIRECT_EVENT)
2226                 xdp_do_flush_map();
2227
2228         if (event & BNXT_TX_EVENT) {
2229                 struct bnxt_tx_ring_info *txr = bnapi->tx_ring;
2230                 u16 prod = txr->tx_prod;
2231
2232                 /* Sync BD data before updating doorbell */
2233                 wmb();
2234
2235                 bnxt_db_write_relaxed(bp, &txr->tx_db, prod);
2236         }
2237
2238         cpr->cp_raw_cons = raw_cons;
2239         bnapi->tx_pkts += tx_pkts;
2240         bnapi->events |= event;
2241         return rx_pkts;
2242 }
2243
2244 static void __bnxt_poll_work_done(struct bnxt *bp, struct bnxt_napi *bnapi)
2245 {
2246         if (bnapi->tx_pkts) {
2247                 bnapi->tx_int(bp, bnapi, bnapi->tx_pkts);
2248                 bnapi->tx_pkts = 0;
2249         }
2250
2251         if (bnapi->events & BNXT_RX_EVENT) {
2252                 struct bnxt_rx_ring_info *rxr = bnapi->rx_ring;
2253
2254                 if (bnapi->events & BNXT_AGG_EVENT)
2255                         bnxt_db_write(bp, &rxr->rx_agg_db, rxr->rx_agg_prod);
2256                 bnxt_db_write(bp, &rxr->rx_db, rxr->rx_prod);
2257         }
2258         bnapi->events = 0;
2259 }
2260
2261 static int bnxt_poll_work(struct bnxt *bp, struct bnxt_cp_ring_info *cpr,
2262                           int budget)
2263 {
2264         struct bnxt_napi *bnapi = cpr->bnapi;
2265         int rx_pkts;
2266
2267         rx_pkts = __bnxt_poll_work(bp, cpr, budget);
2268
2269         /* ACK completion ring before freeing tx ring and producing new
2270          * buffers in rx/agg rings to prevent overflowing the completion
2271          * ring.
2272          */
2273         bnxt_db_cq(bp, &cpr->cp_db, cpr->cp_raw_cons);
2274
2275         __bnxt_poll_work_done(bp, bnapi);
2276         return rx_pkts;
2277 }
2278
2279 static int bnxt_poll_nitroa0(struct napi_struct *napi, int budget)
2280 {
2281         struct bnxt_napi *bnapi = container_of(napi, struct bnxt_napi, napi);
2282         struct bnxt *bp = bnapi->bp;
2283         struct bnxt_cp_ring_info *cpr = &bnapi->cp_ring;
2284         struct bnxt_rx_ring_info *rxr = bnapi->rx_ring;
2285         struct tx_cmp *txcmp;
2286         struct rx_cmp_ext *rxcmp1;
2287         u32 cp_cons, tmp_raw_cons;
2288         u32 raw_cons = cpr->cp_raw_cons;
2289         u32 rx_pkts = 0;
2290         u8 event = 0;
2291
2292         while (1) {
2293                 int rc;
2294
2295                 cp_cons = RING_CMP(raw_cons);
2296                 txcmp = &cpr->cp_desc_ring[CP_RING(cp_cons)][CP_IDX(cp_cons)];
2297
2298                 if (!TX_CMP_VALID(txcmp, raw_cons))
2299                         break;
2300
2301                 if ((TX_CMP_TYPE(txcmp) & 0x30) == 0x10) {
2302                         tmp_raw_cons = NEXT_RAW_CMP(raw_cons);
2303                         cp_cons = RING_CMP(tmp_raw_cons);
2304                         rxcmp1 = (struct rx_cmp_ext *)
2305                           &cpr->cp_desc_ring[CP_RING(cp_cons)][CP_IDX(cp_cons)];
2306
2307                         if (!RX_CMP_VALID(rxcmp1, tmp_raw_cons))
2308                                 break;
2309
2310                         /* force an error to recycle the buffer */
2311                         rxcmp1->rx_cmp_cfa_code_errors_v2 |=
2312                                 cpu_to_le32(RX_CMPL_ERRORS_CRC_ERROR);
2313
2314                         rc = bnxt_rx_pkt(bp, cpr, &raw_cons, &event);
2315                         if (likely(rc == -EIO) && budget)
2316                                 rx_pkts++;
2317                         else if (rc == -EBUSY)  /* partial completion */
2318                                 break;
2319                 } else if (unlikely(TX_CMP_TYPE(txcmp) ==
2320                                     CMPL_BASE_TYPE_HWRM_DONE)) {
2321                         bnxt_hwrm_handler(bp, txcmp);
2322                 } else {
2323                         netdev_err(bp->dev,
2324                                    "Invalid completion received on special ring\n");
2325                 }
2326                 raw_cons = NEXT_RAW_CMP(raw_cons);
2327
2328                 if (rx_pkts == budget)
2329                         break;
2330         }
2331
2332         cpr->cp_raw_cons = raw_cons;
2333         BNXT_DB_CQ(&cpr->cp_db, cpr->cp_raw_cons);
2334         bnxt_db_write(bp, &rxr->rx_db, rxr->rx_prod);
2335
2336         if (event & BNXT_AGG_EVENT)
2337                 bnxt_db_write(bp, &rxr->rx_agg_db, rxr->rx_agg_prod);
2338
2339         if (!bnxt_has_work(bp, cpr) && rx_pkts < budget) {
2340                 napi_complete_done(napi, rx_pkts);
2341                 BNXT_DB_CQ_ARM(&cpr->cp_db, cpr->cp_raw_cons);
2342         }
2343         return rx_pkts;
2344 }
2345
2346 static int bnxt_poll(struct napi_struct *napi, int budget)
2347 {
2348         struct bnxt_napi *bnapi = container_of(napi, struct bnxt_napi, napi);
2349         struct bnxt *bp = bnapi->bp;
2350         struct bnxt_cp_ring_info *cpr = &bnapi->cp_ring;
2351         int work_done = 0;
2352
2353         while (1) {
2354                 work_done += bnxt_poll_work(bp, cpr, budget - work_done);
2355
2356                 if (work_done >= budget) {
2357                         if (!budget)
2358                                 BNXT_DB_CQ_ARM(&cpr->cp_db, cpr->cp_raw_cons);
2359                         break;
2360                 }
2361
2362                 if (!bnxt_has_work(bp, cpr)) {
2363                         if (napi_complete_done(napi, work_done))
2364                                 BNXT_DB_CQ_ARM(&cpr->cp_db, cpr->cp_raw_cons);
2365                         break;
2366                 }
2367         }
2368         if (bp->flags & BNXT_FLAG_DIM) {
2369                 struct dim_sample dim_sample = {};
2370
2371                 dim_update_sample(cpr->event_ctr,
2372                                   cpr->rx_packets,
2373                                   cpr->rx_bytes,
2374                                   &dim_sample);
2375                 net_dim(&cpr->dim, dim_sample);
2376         }
2377         return work_done;
2378 }
2379
2380 static int __bnxt_poll_cqs(struct bnxt *bp, struct bnxt_napi *bnapi, int budget)
2381 {
2382         struct bnxt_cp_ring_info *cpr = &bnapi->cp_ring;
2383         int i, work_done = 0;
2384
2385         for (i = 0; i < 2; i++) {
2386                 struct bnxt_cp_ring_info *cpr2 = cpr->cp_ring_arr[i];
2387
2388                 if (cpr2) {
2389                         work_done += __bnxt_poll_work(bp, cpr2,
2390                                                       budget - work_done);
2391                         cpr->has_more_work |= cpr2->has_more_work;
2392                 }
2393         }
2394         return work_done;
2395 }
2396
2397 static void __bnxt_poll_cqs_done(struct bnxt *bp, struct bnxt_napi *bnapi,
2398                                  u64 dbr_type, bool all)
2399 {
2400         struct bnxt_cp_ring_info *cpr = &bnapi->cp_ring;
2401         int i;
2402
2403         for (i = 0; i < 2; i++) {
2404                 struct bnxt_cp_ring_info *cpr2 = cpr->cp_ring_arr[i];
2405                 struct bnxt_db_info *db;
2406
2407                 if (cpr2 && (all || cpr2->had_work_done)) {
2408                         db = &cpr2->cp_db;
2409                         writeq(db->db_key64 | dbr_type |
2410                                RING_CMP(cpr2->cp_raw_cons), db->doorbell);
2411                         cpr2->had_work_done = 0;
2412                 }
2413         }
2414         __bnxt_poll_work_done(bp, bnapi);
2415 }
2416
2417 static int bnxt_poll_p5(struct napi_struct *napi, int budget)
2418 {
2419         struct bnxt_napi *bnapi = container_of(napi, struct bnxt_napi, napi);
2420         struct bnxt_cp_ring_info *cpr = &bnapi->cp_ring;
2421         u32 raw_cons = cpr->cp_raw_cons;
2422         struct bnxt *bp = bnapi->bp;
2423         struct nqe_cn *nqcmp;
2424         int work_done = 0;
2425         u32 cons;
2426
2427         if (cpr->has_more_work) {
2428                 cpr->has_more_work = 0;
2429                 work_done = __bnxt_poll_cqs(bp, bnapi, budget);
2430                 if (cpr->has_more_work) {
2431                         __bnxt_poll_cqs_done(bp, bnapi, DBR_TYPE_CQ, false);
2432                         return work_done;
2433                 }
2434                 __bnxt_poll_cqs_done(bp, bnapi, DBR_TYPE_CQ_ARMALL, true);
2435                 if (napi_complete_done(napi, work_done))
2436                         BNXT_DB_NQ_ARM_P5(&cpr->cp_db, cpr->cp_raw_cons);
2437                 return work_done;
2438         }
2439         while (1) {
2440                 cons = RING_CMP(raw_cons);
2441                 nqcmp = &cpr->nq_desc_ring[CP_RING(cons)][CP_IDX(cons)];
2442
2443                 if (!NQ_CMP_VALID(nqcmp, raw_cons)) {
2444                         __bnxt_poll_cqs_done(bp, bnapi, DBR_TYPE_CQ_ARMALL,
2445                                              false);
2446                         cpr->cp_raw_cons = raw_cons;
2447                         if (napi_complete_done(napi, work_done))
2448                                 BNXT_DB_NQ_ARM_P5(&cpr->cp_db,
2449                                                   cpr->cp_raw_cons);
2450                         return work_done;
2451                 }
2452
2453                 /* The valid test of the entry must be done first before
2454                  * reading any further.
2455                  */
2456                 dma_rmb();
2457
2458                 if (nqcmp->type == cpu_to_le16(NQ_CN_TYPE_CQ_NOTIFICATION)) {
2459                         u32 idx = le32_to_cpu(nqcmp->cq_handle_low);
2460                         struct bnxt_cp_ring_info *cpr2;
2461
2462                         cpr2 = cpr->cp_ring_arr[idx];
2463                         work_done += __bnxt_poll_work(bp, cpr2,
2464                                                       budget - work_done);
2465                         cpr->has_more_work = cpr2->has_more_work;
2466                 } else {
2467                         bnxt_hwrm_handler(bp, (struct tx_cmp *)nqcmp);
2468                 }
2469                 raw_cons = NEXT_RAW_CMP(raw_cons);
2470                 if (cpr->has_more_work)
2471                         break;
2472         }
2473         __bnxt_poll_cqs_done(bp, bnapi, DBR_TYPE_CQ, true);
2474         cpr->cp_raw_cons = raw_cons;
2475         return work_done;
2476 }
2477
2478 static void bnxt_free_tx_skbs(struct bnxt *bp)
2479 {
2480         int i, max_idx;
2481         struct pci_dev *pdev = bp->pdev;
2482
2483         if (!bp->tx_ring)
2484                 return;
2485
2486         max_idx = bp->tx_nr_pages * TX_DESC_CNT;
2487         for (i = 0; i < bp->tx_nr_rings; i++) {
2488                 struct bnxt_tx_ring_info *txr = &bp->tx_ring[i];
2489                 int j;
2490
2491                 for (j = 0; j < max_idx;) {
2492                         struct bnxt_sw_tx_bd *tx_buf = &txr->tx_buf_ring[j];
2493                         struct sk_buff *skb;
2494                         int k, last;
2495
2496                         if (i < bp->tx_nr_rings_xdp &&
2497                             tx_buf->action == XDP_REDIRECT) {
2498                                 dma_unmap_single(&pdev->dev,
2499                                         dma_unmap_addr(tx_buf, mapping),
2500                                         dma_unmap_len(tx_buf, len),
2501                                         PCI_DMA_TODEVICE);
2502                                 xdp_return_frame(tx_buf->xdpf);
2503                                 tx_buf->action = 0;
2504                                 tx_buf->xdpf = NULL;
2505                                 j++;
2506                                 continue;
2507                         }
2508
2509                         skb = tx_buf->skb;
2510                         if (!skb) {
2511                                 j++;
2512                                 continue;
2513                         }
2514
2515                         tx_buf->skb = NULL;
2516
2517                         if (tx_buf->is_push) {
2518                                 dev_kfree_skb(skb);
2519                                 j += 2;
2520                                 continue;
2521                         }
2522
2523                         dma_unmap_single(&pdev->dev,
2524                                          dma_unmap_addr(tx_buf, mapping),
2525                                          skb_headlen(skb),
2526                                          PCI_DMA_TODEVICE);
2527
2528                         last = tx_buf->nr_frags;
2529                         j += 2;
2530                         for (k = 0; k < last; k++, j++) {
2531                                 int ring_idx = j & bp->tx_ring_mask;
2532                                 skb_frag_t *frag = &skb_shinfo(skb)->frags[k];
2533
2534                                 tx_buf = &txr->tx_buf_ring[ring_idx];
2535                                 dma_unmap_page(
2536                                         &pdev->dev,
2537                                         dma_unmap_addr(tx_buf, mapping),
2538                                         skb_frag_size(frag), PCI_DMA_TODEVICE);
2539                         }
2540                         dev_kfree_skb(skb);
2541                 }
2542                 netdev_tx_reset_queue(netdev_get_tx_queue(bp->dev, i));
2543         }
2544 }
2545
2546 static void bnxt_free_rx_skbs(struct bnxt *bp)
2547 {
2548         int i, max_idx, max_agg_idx;
2549         struct pci_dev *pdev = bp->pdev;
2550
2551         if (!bp->rx_ring)
2552                 return;
2553
2554         max_idx = bp->rx_nr_pages * RX_DESC_CNT;
2555         max_agg_idx = bp->rx_agg_nr_pages * RX_DESC_CNT;
2556         for (i = 0; i < bp->rx_nr_rings; i++) {
2557                 struct bnxt_rx_ring_info *rxr = &bp->rx_ring[i];
2558                 struct bnxt_tpa_idx_map *map;
2559                 int j;
2560
2561                 if (rxr->rx_tpa) {
2562                         for (j = 0; j < bp->max_tpa; j++) {
2563                                 struct bnxt_tpa_info *tpa_info =
2564                                                         &rxr->rx_tpa[j];
2565                                 u8 *data = tpa_info->data;
2566
2567                                 if (!data)
2568                                         continue;
2569
2570                                 dma_unmap_single_attrs(&pdev->dev,
2571                                                        tpa_info->mapping,
2572                                                        bp->rx_buf_use_size,
2573                                                        bp->rx_dir,
2574                                                        DMA_ATTR_WEAK_ORDERING);
2575
2576                                 tpa_info->data = NULL;
2577
2578                                 kfree(data);
2579                         }
2580                 }
2581
2582                 for (j = 0; j < max_idx; j++) {
2583                         struct bnxt_sw_rx_bd *rx_buf = &rxr->rx_buf_ring[j];
2584                         dma_addr_t mapping = rx_buf->mapping;
2585                         void *data = rx_buf->data;
2586
2587                         if (!data)
2588                                 continue;
2589
2590                         rx_buf->data = NULL;
2591
2592                         if (BNXT_RX_PAGE_MODE(bp)) {
2593                                 mapping -= bp->rx_dma_offset;
2594                                 dma_unmap_page_attrs(&pdev->dev, mapping,
2595                                                      PAGE_SIZE, bp->rx_dir,
2596                                                      DMA_ATTR_WEAK_ORDERING);
2597                                 page_pool_recycle_direct(rxr->page_pool, data);
2598                         } else {
2599                                 dma_unmap_single_attrs(&pdev->dev, mapping,
2600                                                        bp->rx_buf_use_size,
2601                                                        bp->rx_dir,
2602                                                        DMA_ATTR_WEAK_ORDERING);
2603                                 kfree(data);
2604                         }
2605                 }
2606
2607                 for (j = 0; j < max_agg_idx; j++) {
2608                         struct bnxt_sw_rx_agg_bd *rx_agg_buf =
2609                                 &rxr->rx_agg_ring[j];
2610                         struct page *page = rx_agg_buf->page;
2611
2612                         if (!page)
2613                                 continue;
2614
2615                         dma_unmap_page_attrs(&pdev->dev, rx_agg_buf->mapping,
2616                                              BNXT_RX_PAGE_SIZE,
2617                                              PCI_DMA_FROMDEVICE,
2618                                              DMA_ATTR_WEAK_ORDERING);
2619
2620                         rx_agg_buf->page = NULL;
2621                         __clear_bit(j, rxr->rx_agg_bmap);
2622
2623                         __free_page(page);
2624                 }
2625                 if (rxr->rx_page) {
2626                         __free_page(rxr->rx_page);
2627                         rxr->rx_page = NULL;
2628                 }
2629                 map = rxr->rx_tpa_idx_map;
2630                 if (map)
2631                         memset(map->agg_idx_bmap, 0, sizeof(map->agg_idx_bmap));
2632         }
2633 }
2634
2635 static void bnxt_free_skbs(struct bnxt *bp)
2636 {
2637         bnxt_free_tx_skbs(bp);
2638         bnxt_free_rx_skbs(bp);
2639 }
2640
2641 static void bnxt_free_ring(struct bnxt *bp, struct bnxt_ring_mem_info *rmem)
2642 {
2643         struct pci_dev *pdev = bp->pdev;
2644         int i;
2645
2646         for (i = 0; i < rmem->nr_pages; i++) {
2647                 if (!rmem->pg_arr[i])
2648                         continue;
2649
2650                 dma_free_coherent(&pdev->dev, rmem->page_size,
2651                                   rmem->pg_arr[i], rmem->dma_arr[i]);
2652
2653                 rmem->pg_arr[i] = NULL;
2654         }
2655         if (rmem->pg_tbl) {
2656                 size_t pg_tbl_size = rmem->nr_pages * 8;
2657
2658                 if (rmem->flags & BNXT_RMEM_USE_FULL_PAGE_FLAG)
2659                         pg_tbl_size = rmem->page_size;
2660                 dma_free_coherent(&pdev->dev, pg_tbl_size,
2661                                   rmem->pg_tbl, rmem->pg_tbl_map);
2662                 rmem->pg_tbl = NULL;
2663         }
2664         if (rmem->vmem_size && *rmem->vmem) {
2665                 vfree(*rmem->vmem);
2666                 *rmem->vmem = NULL;
2667         }
2668 }
2669
2670 static int bnxt_alloc_ring(struct bnxt *bp, struct bnxt_ring_mem_info *rmem)
2671 {
2672         struct pci_dev *pdev = bp->pdev;
2673         u64 valid_bit = 0;
2674         int i;
2675
2676         if (rmem->flags & (BNXT_RMEM_VALID_PTE_FLAG | BNXT_RMEM_RING_PTE_FLAG))
2677                 valid_bit = PTU_PTE_VALID;
2678         if ((rmem->nr_pages > 1 || rmem->depth > 0) && !rmem->pg_tbl) {
2679                 size_t pg_tbl_size = rmem->nr_pages * 8;
2680
2681                 if (rmem->flags & BNXT_RMEM_USE_FULL_PAGE_FLAG)
2682                         pg_tbl_size = rmem->page_size;
2683                 rmem->pg_tbl = dma_alloc_coherent(&pdev->dev, pg_tbl_size,
2684                                                   &rmem->pg_tbl_map,
2685                                                   GFP_KERNEL);
2686                 if (!rmem->pg_tbl)
2687                         return -ENOMEM;
2688         }
2689
2690         for (i = 0; i < rmem->nr_pages; i++) {
2691                 u64 extra_bits = valid_bit;
2692
2693                 rmem->pg_arr[i] = dma_alloc_coherent(&pdev->dev,
2694                                                      rmem->page_size,
2695                                                      &rmem->dma_arr[i],
2696                                                      GFP_KERNEL);
2697                 if (!rmem->pg_arr[i])
2698                         return -ENOMEM;
2699
2700                 if (rmem->init_val)
2701                         memset(rmem->pg_arr[i], rmem->init_val,
2702                                rmem->page_size);
2703                 if (rmem->nr_pages > 1 || rmem->depth > 0) {
2704                         if (i == rmem->nr_pages - 2 &&
2705                             (rmem->flags & BNXT_RMEM_RING_PTE_FLAG))
2706                                 extra_bits |= PTU_PTE_NEXT_TO_LAST;
2707                         else if (i == rmem->nr_pages - 1 &&
2708                                  (rmem->flags & BNXT_RMEM_RING_PTE_FLAG))
2709                                 extra_bits |= PTU_PTE_LAST;
2710                         rmem->pg_tbl[i] =
2711                                 cpu_to_le64(rmem->dma_arr[i] | extra_bits);
2712                 }
2713         }
2714
2715         if (rmem->vmem_size) {
2716                 *rmem->vmem = vzalloc(rmem->vmem_size);
2717                 if (!(*rmem->vmem))
2718                         return -ENOMEM;
2719         }
2720         return 0;
2721 }
2722
2723 static void bnxt_free_tpa_info(struct bnxt *bp)
2724 {
2725         int i;
2726
2727         for (i = 0; i < bp->rx_nr_rings; i++) {
2728                 struct bnxt_rx_ring_info *rxr = &bp->rx_ring[i];
2729
2730                 kfree(rxr->rx_tpa_idx_map);
2731                 rxr->rx_tpa_idx_map = NULL;
2732                 if (rxr->rx_tpa) {
2733                         kfree(rxr->rx_tpa[0].agg_arr);
2734                         rxr->rx_tpa[0].agg_arr = NULL;
2735                 }
2736                 kfree(rxr->rx_tpa);
2737                 rxr->rx_tpa = NULL;
2738         }
2739 }
2740
2741 static int bnxt_alloc_tpa_info(struct bnxt *bp)
2742 {
2743         int i, j, total_aggs = 0;
2744
2745         bp->max_tpa = MAX_TPA;
2746         if (bp->flags & BNXT_FLAG_CHIP_P5) {
2747                 if (!bp->max_tpa_v2)
2748                         return 0;
2749                 bp->max_tpa = max_t(u16, bp->max_tpa_v2, MAX_TPA_P5);
2750                 total_aggs = bp->max_tpa * MAX_SKB_FRAGS;
2751         }
2752
2753         for (i = 0; i < bp->rx_nr_rings; i++) {
2754                 struct bnxt_rx_ring_info *rxr = &bp->rx_ring[i];
2755                 struct rx_agg_cmp *agg;
2756
2757                 rxr->rx_tpa = kcalloc(bp->max_tpa, sizeof(struct bnxt_tpa_info),
2758                                       GFP_KERNEL);
2759                 if (!rxr->rx_tpa)
2760                         return -ENOMEM;
2761
2762                 if (!(bp->flags & BNXT_FLAG_CHIP_P5))
2763                         continue;
2764                 agg = kcalloc(total_aggs, sizeof(*agg), GFP_KERNEL);
2765                 rxr->rx_tpa[0].agg_arr = agg;
2766                 if (!agg)
2767                         return -ENOMEM;
2768                 for (j = 1; j < bp->max_tpa; j++)
2769                         rxr->rx_tpa[j].agg_arr = agg + j * MAX_SKB_FRAGS;
2770                 rxr->rx_tpa_idx_map = kzalloc(sizeof(*rxr->rx_tpa_idx_map),
2771                                               GFP_KERNEL);
2772                 if (!rxr->rx_tpa_idx_map)
2773                         return -ENOMEM;
2774         }
2775         return 0;
2776 }
2777
2778 static void bnxt_free_rx_rings(struct bnxt *bp)
2779 {
2780         int i;
2781
2782         if (!bp->rx_ring)
2783                 return;
2784
2785         bnxt_free_tpa_info(bp);
2786         for (i = 0; i < bp->rx_nr_rings; i++) {
2787                 struct bnxt_rx_ring_info *rxr = &bp->rx_ring[i];
2788                 struct bnxt_ring_struct *ring;
2789
2790                 if (rxr->xdp_prog)
2791                         bpf_prog_put(rxr->xdp_prog);
2792
2793                 if (xdp_rxq_info_is_reg(&rxr->xdp_rxq))
2794                         xdp_rxq_info_unreg(&rxr->xdp_rxq);
2795
2796                 page_pool_destroy(rxr->page_pool);
2797                 rxr->page_pool = NULL;
2798
2799                 kfree(rxr->rx_agg_bmap);
2800                 rxr->rx_agg_bmap = NULL;
2801
2802                 ring = &rxr->rx_ring_struct;
2803                 bnxt_free_ring(bp, &ring->ring_mem);
2804
2805                 ring = &rxr->rx_agg_ring_struct;
2806                 bnxt_free_ring(bp, &ring->ring_mem);
2807         }
2808 }
2809
2810 static int bnxt_alloc_rx_page_pool(struct bnxt *bp,
2811                                    struct bnxt_rx_ring_info *rxr)
2812 {
2813         struct page_pool_params pp = { 0 };
2814
2815         pp.pool_size = bp->rx_ring_size;
2816         pp.nid = dev_to_node(&bp->pdev->dev);
2817         pp.dev = &bp->pdev->dev;
2818         pp.dma_dir = DMA_BIDIRECTIONAL;
2819
2820         rxr->page_pool = page_pool_create(&pp);
2821         if (IS_ERR(rxr->page_pool)) {
2822                 int err = PTR_ERR(rxr->page_pool);
2823
2824                 rxr->page_pool = NULL;
2825                 return err;
2826         }
2827         return 0;
2828 }
2829
2830 static int bnxt_alloc_rx_rings(struct bnxt *bp)
2831 {
2832         int i, rc = 0, agg_rings = 0;
2833
2834         if (!bp->rx_ring)
2835                 return -ENOMEM;
2836
2837         if (bp->flags & BNXT_FLAG_AGG_RINGS)
2838                 agg_rings = 1;
2839
2840         for (i = 0; i < bp->rx_nr_rings; i++) {
2841                 struct bnxt_rx_ring_info *rxr = &bp->rx_ring[i];
2842                 struct bnxt_ring_struct *ring;
2843
2844                 ring = &rxr->rx_ring_struct;
2845
2846                 rc = bnxt_alloc_rx_page_pool(bp, rxr);
2847                 if (rc)
2848                         return rc;
2849
2850                 rc = xdp_rxq_info_reg(&rxr->xdp_rxq, bp->dev, i);
2851                 if (rc < 0)
2852                         return rc;
2853
2854                 rc = xdp_rxq_info_reg_mem_model(&rxr->xdp_rxq,
2855                                                 MEM_TYPE_PAGE_POOL,
2856                                                 rxr->page_pool);
2857                 if (rc) {
2858                         xdp_rxq_info_unreg(&rxr->xdp_rxq);
2859                         return rc;
2860                 }
2861
2862                 rc = bnxt_alloc_ring(bp, &ring->ring_mem);
2863                 if (rc)
2864                         return rc;
2865
2866                 ring->grp_idx = i;
2867                 if (agg_rings) {
2868                         u16 mem_size;
2869
2870                         ring = &rxr->rx_agg_ring_struct;
2871                         rc = bnxt_alloc_ring(bp, &ring->ring_mem);
2872                         if (rc)
2873                                 return rc;
2874
2875                         ring->grp_idx = i;
2876                         rxr->rx_agg_bmap_size = bp->rx_agg_ring_mask + 1;
2877                         mem_size = rxr->rx_agg_bmap_size / 8;
2878                         rxr->rx_agg_bmap = kzalloc(mem_size, GFP_KERNEL);
2879                         if (!rxr->rx_agg_bmap)
2880                                 return -ENOMEM;
2881                 }
2882         }
2883         if (bp->flags & BNXT_FLAG_TPA)
2884                 rc = bnxt_alloc_tpa_info(bp);
2885         return rc;
2886 }
2887
2888 static void bnxt_free_tx_rings(struct bnxt *bp)
2889 {
2890         int i;
2891         struct pci_dev *pdev = bp->pdev;
2892
2893         if (!bp->tx_ring)
2894                 return;
2895
2896         for (i = 0; i < bp->tx_nr_rings; i++) {
2897                 struct bnxt_tx_ring_info *txr = &bp->tx_ring[i];
2898                 struct bnxt_ring_struct *ring;
2899
2900                 if (txr->tx_push) {
2901                         dma_free_coherent(&pdev->dev, bp->tx_push_size,
2902                                           txr->tx_push, txr->tx_push_mapping);
2903                         txr->tx_push = NULL;
2904                 }
2905
2906                 ring = &txr->tx_ring_struct;
2907
2908                 bnxt_free_ring(bp, &ring->ring_mem);
2909         }
2910 }
2911
2912 static int bnxt_alloc_tx_rings(struct bnxt *bp)
2913 {
2914         int i, j, rc;
2915         struct pci_dev *pdev = bp->pdev;
2916
2917         bp->tx_push_size = 0;
2918         if (bp->tx_push_thresh) {
2919                 int push_size;
2920
2921                 push_size  = L1_CACHE_ALIGN(sizeof(struct tx_push_bd) +
2922                                         bp->tx_push_thresh);
2923
2924                 if (push_size > 256) {
2925                         push_size = 0;
2926                         bp->tx_push_thresh = 0;
2927                 }
2928
2929                 bp->tx_push_size = push_size;
2930         }
2931
2932         for (i = 0, j = 0; i < bp->tx_nr_rings; i++) {
2933                 struct bnxt_tx_ring_info *txr = &bp->tx_ring[i];
2934                 struct bnxt_ring_struct *ring;
2935                 u8 qidx;
2936
2937                 ring = &txr->tx_ring_struct;
2938
2939                 rc = bnxt_alloc_ring(bp, &ring->ring_mem);
2940                 if (rc)
2941                         return rc;
2942
2943                 ring->grp_idx = txr->bnapi->index;
2944                 if (bp->tx_push_size) {
2945                         dma_addr_t mapping;
2946
2947                         /* One pre-allocated DMA buffer to backup
2948                          * TX push operation
2949                          */
2950                         txr->tx_push = dma_alloc_coherent(&pdev->dev,
2951                                                 bp->tx_push_size,
2952                                                 &txr->tx_push_mapping,
2953                                                 GFP_KERNEL);
2954
2955                         if (!txr->tx_push)
2956                                 return -ENOMEM;
2957
2958                         mapping = txr->tx_push_mapping +
2959                                 sizeof(struct tx_push_bd);
2960                         txr->data_mapping = cpu_to_le64(mapping);
2961                 }
2962                 qidx = bp->tc_to_qidx[j];
2963                 ring->queue_id = bp->q_info[qidx].queue_id;
2964                 if (i < bp->tx_nr_rings_xdp)
2965                         continue;
2966                 if (i % bp->tx_nr_rings_per_tc == (bp->tx_nr_rings_per_tc - 1))
2967                         j++;
2968         }
2969         return 0;
2970 }
2971
2972 static void bnxt_free_cp_rings(struct bnxt *bp)
2973 {
2974         int i;
2975
2976         if (!bp->bnapi)
2977                 return;
2978
2979         for (i = 0; i < bp->cp_nr_rings; i++) {
2980                 struct bnxt_napi *bnapi = bp->bnapi[i];
2981                 struct bnxt_cp_ring_info *cpr;
2982                 struct bnxt_ring_struct *ring;
2983                 int j;
2984
2985                 if (!bnapi)
2986                         continue;
2987
2988                 cpr = &bnapi->cp_ring;
2989                 ring = &cpr->cp_ring_struct;
2990
2991                 bnxt_free_ring(bp, &ring->ring_mem);
2992
2993                 for (j = 0; j < 2; j++) {
2994                         struct bnxt_cp_ring_info *cpr2 = cpr->cp_ring_arr[j];
2995
2996                         if (cpr2) {
2997                                 ring = &cpr2->cp_ring_struct;
2998                                 bnxt_free_ring(bp, &ring->ring_mem);
2999                                 kfree(cpr2);
3000                                 cpr->cp_ring_arr[j] = NULL;
3001                         }
3002                 }
3003         }
3004 }
3005
3006 static struct bnxt_cp_ring_info *bnxt_alloc_cp_sub_ring(struct bnxt *bp)
3007 {
3008         struct bnxt_ring_mem_info *rmem;
3009         struct bnxt_ring_struct *ring;
3010         struct bnxt_cp_ring_info *cpr;
3011         int rc;
3012
3013         cpr = kzalloc(sizeof(*cpr), GFP_KERNEL);
3014         if (!cpr)
3015                 return NULL;
3016
3017         ring = &cpr->cp_ring_struct;
3018         rmem = &ring->ring_mem;
3019         rmem->nr_pages = bp->cp_nr_pages;
3020         rmem->page_size = HW_CMPD_RING_SIZE;
3021         rmem->pg_arr = (void **)cpr->cp_desc_ring;
3022         rmem->dma_arr = cpr->cp_desc_mapping;
3023         rmem->flags = BNXT_RMEM_RING_PTE_FLAG;
3024         rc = bnxt_alloc_ring(bp, rmem);
3025         if (rc) {
3026                 bnxt_free_ring(bp, rmem);
3027                 kfree(cpr);
3028                 cpr = NULL;
3029         }
3030         return cpr;
3031 }
3032
3033 static int bnxt_alloc_cp_rings(struct bnxt *bp)
3034 {
3035         bool sh = !!(bp->flags & BNXT_FLAG_SHARED_RINGS);
3036         int i, rc, ulp_base_vec, ulp_msix;
3037
3038         ulp_msix = bnxt_get_ulp_msix_num(bp);
3039         ulp_base_vec = bnxt_get_ulp_msix_base(bp);
3040         for (i = 0; i < bp->cp_nr_rings; i++) {
3041                 struct bnxt_napi *bnapi = bp->bnapi[i];
3042                 struct bnxt_cp_ring_info *cpr;
3043                 struct bnxt_ring_struct *ring;
3044
3045                 if (!bnapi)
3046                         continue;
3047
3048                 cpr = &bnapi->cp_ring;
3049                 cpr->bnapi = bnapi;
3050                 ring = &cpr->cp_ring_struct;
3051
3052                 rc = bnxt_alloc_ring(bp, &ring->ring_mem);
3053                 if (rc)
3054                         return rc;
3055
3056                 if (ulp_msix && i >= ulp_base_vec)
3057                         ring->map_idx = i + ulp_msix;
3058                 else
3059                         ring->map_idx = i;
3060
3061                 if (!(bp->flags & BNXT_FLAG_CHIP_P5))
3062                         continue;
3063
3064                 if (i < bp->rx_nr_rings) {
3065                         struct bnxt_cp_ring_info *cpr2 =
3066                                 bnxt_alloc_cp_sub_ring(bp);
3067
3068                         cpr->cp_ring_arr[BNXT_RX_HDL] = cpr2;
3069                         if (!cpr2)
3070                                 return -ENOMEM;
3071                         cpr2->bnapi = bnapi;
3072                 }
3073                 if ((sh && i < bp->tx_nr_rings) ||
3074                     (!sh && i >= bp->rx_nr_rings)) {
3075                         struct bnxt_cp_ring_info *cpr2 =
3076                                 bnxt_alloc_cp_sub_ring(bp);
3077
3078                         cpr->cp_ring_arr[BNXT_TX_HDL] = cpr2;
3079                         if (!cpr2)
3080                                 return -ENOMEM;
3081                         cpr2->bnapi = bnapi;
3082                 }
3083         }
3084         return 0;
3085 }
3086
3087 static void bnxt_init_ring_struct(struct bnxt *bp)
3088 {
3089         int i;
3090
3091         for (i = 0; i < bp->cp_nr_rings; i++) {
3092                 struct bnxt_napi *bnapi = bp->bnapi[i];
3093                 struct bnxt_ring_mem_info *rmem;
3094                 struct bnxt_cp_ring_info *cpr;
3095                 struct bnxt_rx_ring_info *rxr;
3096                 struct bnxt_tx_ring_info *txr;
3097                 struct bnxt_ring_struct *ring;
3098
3099                 if (!bnapi)
3100                         continue;
3101
3102                 cpr = &bnapi->cp_ring;
3103                 ring = &cpr->cp_ring_struct;
3104                 rmem = &ring->ring_mem;
3105                 rmem->nr_pages = bp->cp_nr_pages;
3106                 rmem->page_size = HW_CMPD_RING_SIZE;
3107                 rmem->pg_arr = (void **)cpr->cp_desc_ring;
3108                 rmem->dma_arr = cpr->cp_desc_mapping;
3109                 rmem->vmem_size = 0;
3110
3111                 rxr = bnapi->rx_ring;
3112                 if (!rxr)
3113                         goto skip_rx;
3114
3115                 ring = &rxr->rx_ring_struct;
3116                 rmem = &ring->ring_mem;
3117                 rmem->nr_pages = bp->rx_nr_pages;
3118                 rmem->page_size = HW_RXBD_RING_SIZE;
3119                 rmem->pg_arr = (void **)rxr->rx_desc_ring;
3120                 rmem->dma_arr = rxr->rx_desc_mapping;
3121                 rmem->vmem_size = SW_RXBD_RING_SIZE * bp->rx_nr_pages;
3122                 rmem->vmem = (void **)&rxr->rx_buf_ring;
3123
3124                 ring = &rxr->rx_agg_ring_struct;
3125                 rmem = &ring->ring_mem;
3126                 rmem->nr_pages = bp->rx_agg_nr_pages;
3127                 rmem->page_size = HW_RXBD_RING_SIZE;
3128                 rmem->pg_arr = (void **)rxr->rx_agg_desc_ring;
3129                 rmem->dma_arr = rxr->rx_agg_desc_mapping;
3130                 rmem->vmem_size = SW_RXBD_AGG_RING_SIZE * bp->rx_agg_nr_pages;
3131                 rmem->vmem = (void **)&rxr->rx_agg_ring;
3132
3133 skip_rx:
3134                 txr = bnapi->tx_ring;
3135                 if (!txr)
3136                         continue;
3137
3138                 ring = &txr->tx_ring_struct;
3139                 rmem = &ring->ring_mem;
3140                 rmem->nr_pages = bp->tx_nr_pages;
3141                 rmem->page_size = HW_RXBD_RING_SIZE;
3142                 rmem->pg_arr = (void **)txr->tx_desc_ring;
3143                 rmem->dma_arr = txr->tx_desc_mapping;
3144                 rmem->vmem_size = SW_TXBD_RING_SIZE * bp->tx_nr_pages;
3145                 rmem->vmem = (void **)&txr->tx_buf_ring;
3146         }
3147 }
3148
3149 static void bnxt_init_rxbd_pages(struct bnxt_ring_struct *ring, u32 type)
3150 {
3151         int i;
3152         u32 prod;
3153         struct rx_bd **rx_buf_ring;
3154
3155         rx_buf_ring = (struct rx_bd **)ring->ring_mem.pg_arr;
3156         for (i = 0, prod = 0; i < ring->ring_mem.nr_pages; i++) {
3157                 int j;
3158                 struct rx_bd *rxbd;
3159
3160                 rxbd = rx_buf_ring[i];
3161                 if (!rxbd)
3162                         continue;
3163
3164                 for (j = 0; j < RX_DESC_CNT; j++, rxbd++, prod++) {
3165                         rxbd->rx_bd_len_flags_type = cpu_to_le32(type);
3166                         rxbd->rx_bd_opaque = prod;
3167                 }
3168         }
3169 }
3170
3171 static int bnxt_init_one_rx_ring(struct bnxt *bp, int ring_nr)
3172 {
3173         struct net_device *dev = bp->dev;
3174         struct bnxt_rx_ring_info *rxr;
3175         struct bnxt_ring_struct *ring;
3176         u32 prod, type;
3177         int i;
3178
3179         type = (bp->rx_buf_use_size << RX_BD_LEN_SHIFT) |
3180                 RX_BD_TYPE_RX_PACKET_BD | RX_BD_FLAGS_EOP;
3181
3182         if (NET_IP_ALIGN == 2)
3183                 type |= RX_BD_FLAGS_SOP;
3184
3185         rxr = &bp->rx_ring[ring_nr];
3186         ring = &rxr->rx_ring_struct;
3187         bnxt_init_rxbd_pages(ring, type);
3188
3189         if (BNXT_RX_PAGE_MODE(bp) && bp->xdp_prog) {
3190                 bpf_prog_add(bp->xdp_prog, 1);
3191                 rxr->xdp_prog = bp->xdp_prog;
3192         }
3193         prod = rxr->rx_prod;
3194         for (i = 0; i < bp->rx_ring_size; i++) {
3195                 if (bnxt_alloc_rx_data(bp, rxr, prod, GFP_KERNEL) != 0) {
3196                         netdev_warn(dev, "init'ed rx ring %d with %d/%d skbs only\n",
3197                                     ring_nr, i, bp->rx_ring_size);
3198                         break;
3199                 }
3200                 prod = NEXT_RX(prod);
3201         }
3202         rxr->rx_prod = prod;
3203         ring->fw_ring_id = INVALID_HW_RING_ID;
3204
3205         ring = &rxr->rx_agg_ring_struct;
3206         ring->fw_ring_id = INVALID_HW_RING_ID;
3207
3208         if (!(bp->flags & BNXT_FLAG_AGG_RINGS))
3209                 return 0;
3210
3211         type = ((u32)BNXT_RX_PAGE_SIZE << RX_BD_LEN_SHIFT) |
3212                 RX_BD_TYPE_RX_AGG_BD | RX_BD_FLAGS_SOP;
3213
3214         bnxt_init_rxbd_pages(ring, type);
3215
3216         prod = rxr->rx_agg_prod;
3217         for (i = 0; i < bp->rx_agg_ring_size; i++) {
3218                 if (bnxt_alloc_rx_page(bp, rxr, prod, GFP_KERNEL) != 0) {
3219                         netdev_warn(dev, "init'ed rx ring %d with %d/%d pages only\n",
3220                                     ring_nr, i, bp->rx_ring_size);
3221                         break;
3222                 }
3223                 prod = NEXT_RX_AGG(prod);
3224         }
3225         rxr->rx_agg_prod = prod;
3226
3227         if (bp->flags & BNXT_FLAG_TPA) {
3228                 if (rxr->rx_tpa) {
3229                         u8 *data;
3230                         dma_addr_t mapping;
3231
3232                         for (i = 0; i < bp->max_tpa; i++) {
3233                                 data = __bnxt_alloc_rx_data(bp, &mapping,
3234                                                             GFP_KERNEL);
3235                                 if (!data)
3236                                         return -ENOMEM;
3237
3238                                 rxr->rx_tpa[i].data = data;
3239                                 rxr->rx_tpa[i].data_ptr = data + bp->rx_offset;
3240                                 rxr->rx_tpa[i].mapping = mapping;
3241                         }
3242                 } else {
3243                         netdev_err(bp->dev, "No resource allocated for LRO/GRO\n");
3244                         return -ENOMEM;
3245                 }
3246         }
3247
3248         return 0;
3249 }
3250
3251 static void bnxt_init_cp_rings(struct bnxt *bp)
3252 {
3253         int i, j;
3254
3255         for (i = 0; i < bp->cp_nr_rings; i++) {
3256                 struct bnxt_cp_ring_info *cpr = &bp->bnapi[i]->cp_ring;
3257                 struct bnxt_ring_struct *ring = &cpr->cp_ring_struct;
3258
3259                 ring->fw_ring_id = INVALID_HW_RING_ID;
3260                 cpr->rx_ring_coal.coal_ticks = bp->rx_coal.coal_ticks;
3261                 cpr->rx_ring_coal.coal_bufs = bp->rx_coal.coal_bufs;
3262                 for (j = 0; j < 2; j++) {
3263                         struct bnxt_cp_ring_info *cpr2 = cpr->cp_ring_arr[j];
3264
3265                         if (!cpr2)
3266                                 continue;
3267
3268                         ring = &cpr2->cp_ring_struct;
3269                         ring->fw_ring_id = INVALID_HW_RING_ID;
3270                         cpr2->rx_ring_coal.coal_ticks = bp->rx_coal.coal_ticks;
3271                         cpr2->rx_ring_coal.coal_bufs = bp->rx_coal.coal_bufs;
3272                 }
3273         }
3274 }
3275
3276 static int bnxt_init_rx_rings(struct bnxt *bp)
3277 {
3278         int i, rc = 0;
3279
3280         if (BNXT_RX_PAGE_MODE(bp)) {
3281                 bp->rx_offset = NET_IP_ALIGN + XDP_PACKET_HEADROOM;
3282                 bp->rx_dma_offset = XDP_PACKET_HEADROOM;
3283         } else {
3284                 bp->rx_offset = BNXT_RX_OFFSET;
3285                 bp->rx_dma_offset = BNXT_RX_DMA_OFFSET;
3286         }
3287
3288         for (i = 0; i < bp->rx_nr_rings; i++) {
3289                 rc = bnxt_init_one_rx_ring(bp, i);
3290                 if (rc)
3291                         break;
3292         }
3293
3294         return rc;
3295 }
3296
3297 static int bnxt_init_tx_rings(struct bnxt *bp)
3298 {
3299         u16 i;
3300
3301         bp->tx_wake_thresh = max_t(int, bp->tx_ring_size / 2,
3302                                    MAX_SKB_FRAGS + 1);
3303
3304         for (i = 0; i < bp->tx_nr_rings; i++) {
3305                 struct bnxt_tx_ring_info *txr = &bp->tx_ring[i];
3306                 struct bnxt_ring_struct *ring = &txr->tx_ring_struct;
3307
3308                 ring->fw_ring_id = INVALID_HW_RING_ID;
3309         }
3310
3311         return 0;
3312 }
3313
3314 static void bnxt_free_ring_grps(struct bnxt *bp)
3315 {
3316         kfree(bp->grp_info);
3317         bp->grp_info = NULL;
3318 }
3319
3320 static int bnxt_init_ring_grps(struct bnxt *bp, bool irq_re_init)
3321 {
3322         int i;
3323
3324         if (irq_re_init) {
3325                 bp->grp_info = kcalloc(bp->cp_nr_rings,
3326                                        sizeof(struct bnxt_ring_grp_info),
3327                                        GFP_KERNEL);
3328                 if (!bp->grp_info)
3329                         return -ENOMEM;
3330         }
3331         for (i = 0; i < bp->cp_nr_rings; i++) {
3332                 if (irq_re_init)
3333                         bp->grp_info[i].fw_stats_ctx = INVALID_HW_RING_ID;
3334                 bp->grp_info[i].fw_grp_id = INVALID_HW_RING_ID;
3335                 bp->grp_info[i].rx_fw_ring_id = INVALID_HW_RING_ID;
3336                 bp->grp_info[i].agg_fw_ring_id = INVALID_HW_RING_ID;
3337                 bp->grp_info[i].cp_fw_ring_id = INVALID_HW_RING_ID;
3338         }
3339         return 0;
3340 }
3341
3342 static void bnxt_free_vnics(struct bnxt *bp)
3343 {
3344         kfree(bp->vnic_info);
3345         bp->vnic_info = NULL;
3346         bp->nr_vnics = 0;
3347 }
3348
3349 static int bnxt_alloc_vnics(struct bnxt *bp)
3350 {
3351         int num_vnics = 1;
3352
3353 #ifdef CONFIG_RFS_ACCEL
3354         if ((bp->flags & (BNXT_FLAG_RFS | BNXT_FLAG_CHIP_P5)) == BNXT_FLAG_RFS)
3355                 num_vnics += bp->rx_nr_rings;
3356 #endif
3357
3358         if (BNXT_CHIP_TYPE_NITRO_A0(bp))
3359                 num_vnics++;
3360
3361         bp->vnic_info = kcalloc(num_vnics, sizeof(struct bnxt_vnic_info),
3362                                 GFP_KERNEL);
3363         if (!bp->vnic_info)
3364                 return -ENOMEM;
3365
3366         bp->nr_vnics = num_vnics;
3367         return 0;
3368 }
3369
3370 static void bnxt_init_vnics(struct bnxt *bp)
3371 {
3372         int i;
3373
3374         for (i = 0; i < bp->nr_vnics; i++) {
3375                 struct bnxt_vnic_info *vnic = &bp->vnic_info[i];
3376                 int j;
3377
3378                 vnic->fw_vnic_id = INVALID_HW_RING_ID;
3379                 for (j = 0; j < BNXT_MAX_CTX_PER_VNIC; j++)
3380                         vnic->fw_rss_cos_lb_ctx[j] = INVALID_HW_RING_ID;
3381
3382                 vnic->fw_l2_ctx_id = INVALID_HW_RING_ID;
3383
3384                 if (bp->vnic_info[i].rss_hash_key) {
3385                         if (i == 0)
3386                                 prandom_bytes(vnic->rss_hash_key,
3387                                               HW_HASH_KEY_SIZE);
3388                         else
3389                                 memcpy(vnic->rss_hash_key,
3390                                        bp->vnic_info[0].rss_hash_key,
3391                                        HW_HASH_KEY_SIZE);
3392                 }
3393         }
3394 }
3395
3396 static int bnxt_calc_nr_ring_pages(u32 ring_size, int desc_per_pg)
3397 {
3398         int pages;
3399
3400         pages = ring_size / desc_per_pg;
3401
3402         if (!pages)
3403                 return 1;
3404
3405         pages++;
3406
3407         while (pages & (pages - 1))
3408                 pages++;
3409
3410         return pages;
3411 }
3412
3413 void bnxt_set_tpa_flags(struct bnxt *bp)
3414 {
3415         bp->flags &= ~BNXT_FLAG_TPA;
3416         if (bp->flags & BNXT_FLAG_NO_AGG_RINGS)
3417                 return;
3418         if (bp->dev->features & NETIF_F_LRO)
3419                 bp->flags |= BNXT_FLAG_LRO;
3420         else if (bp->dev->features & NETIF_F_GRO_HW)
3421                 bp->flags |= BNXT_FLAG_GRO;
3422 }
3423
3424 /* bp->rx_ring_size, bp->tx_ring_size, dev->mtu, BNXT_FLAG_{G|L}RO flags must
3425  * be set on entry.
3426  */
3427 void bnxt_set_ring_params(struct bnxt *bp)
3428 {
3429         u32 ring_size, rx_size, rx_space;
3430         u32 agg_factor = 0, agg_ring_size = 0;
3431
3432         /* 8 for CRC and VLAN */
3433         rx_size = SKB_DATA_ALIGN(bp->dev->mtu + ETH_HLEN + NET_IP_ALIGN + 8);
3434
3435         rx_space = rx_size + NET_SKB_PAD +
3436                 SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
3437
3438         bp->rx_copy_thresh = BNXT_RX_COPY_THRESH;
3439         ring_size = bp->rx_ring_size;
3440         bp->rx_agg_ring_size = 0;
3441         bp->rx_agg_nr_pages = 0;
3442
3443         if (bp->flags & BNXT_FLAG_TPA)
3444                 agg_factor = min_t(u32, 4, 65536 / BNXT_RX_PAGE_SIZE);
3445
3446         bp->flags &= ~BNXT_FLAG_JUMBO;
3447         if (rx_space > PAGE_SIZE && !(bp->flags & BNXT_FLAG_NO_AGG_RINGS)) {
3448                 u32 jumbo_factor;
3449
3450                 bp->flags |= BNXT_FLAG_JUMBO;
3451                 jumbo_factor = PAGE_ALIGN(bp->dev->mtu - 40) >> PAGE_SHIFT;
3452                 if (jumbo_factor > agg_factor)
3453                         agg_factor = jumbo_factor;
3454         }
3455         agg_ring_size = ring_size * agg_factor;
3456
3457         if (agg_ring_size) {
3458                 bp->rx_agg_nr_pages = bnxt_calc_nr_ring_pages(agg_ring_size,
3459                                                         RX_DESC_CNT);
3460                 if (bp->rx_agg_nr_pages > MAX_RX_AGG_PAGES) {
3461                         u32 tmp = agg_ring_size;
3462
3463                         bp->rx_agg_nr_pages = MAX_RX_AGG_PAGES;
3464                         agg_ring_size = MAX_RX_AGG_PAGES * RX_DESC_CNT - 1;
3465                         netdev_warn(bp->dev, "rx agg ring size %d reduced to %d.\n",
3466                                     tmp, agg_ring_size);
3467                 }
3468                 bp->rx_agg_ring_size = agg_ring_size;
3469                 bp->rx_agg_ring_mask = (bp->rx_agg_nr_pages * RX_DESC_CNT) - 1;
3470                 rx_size = SKB_DATA_ALIGN(BNXT_RX_COPY_THRESH + NET_IP_ALIGN);
3471                 rx_space = rx_size + NET_SKB_PAD +
3472                         SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
3473         }
3474
3475         bp->rx_buf_use_size = rx_size;
3476         bp->rx_buf_size = rx_space;
3477
3478         bp->rx_nr_pages = bnxt_calc_nr_ring_pages(ring_size, RX_DESC_CNT);
3479         bp->rx_ring_mask = (bp->rx_nr_pages * RX_DESC_CNT) - 1;
3480
3481         ring_size = bp->tx_ring_size;
3482         bp->tx_nr_pages = bnxt_calc_nr_ring_pages(ring_size, TX_DESC_CNT);
3483         bp->tx_ring_mask = (bp->tx_nr_pages * TX_DESC_CNT) - 1;
3484
3485         ring_size = bp->rx_ring_size * (2 + agg_factor) + bp->tx_ring_size;
3486         bp->cp_ring_size = ring_size;
3487
3488         bp->cp_nr_pages = bnxt_calc_nr_ring_pages(ring_size, CP_DESC_CNT);
3489         if (bp->cp_nr_pages > MAX_CP_PAGES) {
3490                 bp->cp_nr_pages = MAX_CP_PAGES;
3491                 bp->cp_ring_size = MAX_CP_PAGES * CP_DESC_CNT - 1;
3492                 netdev_warn(bp->dev, "completion ring size %d reduced to %d.\n",
3493                             ring_size, bp->cp_ring_size);
3494         }
3495         bp->cp_bit = bp->cp_nr_pages * CP_DESC_CNT;
3496         bp->cp_ring_mask = bp->cp_bit - 1;
3497 }
3498
3499 /* Changing allocation mode of RX rings.
3500  * TODO: Update when extending xdp_rxq_info to support allocation modes.
3501  */
3502 int bnxt_set_rx_skb_mode(struct bnxt *bp, bool page_mode)
3503 {
3504         if (page_mode) {
3505                 if (bp->dev->mtu > BNXT_MAX_PAGE_MODE_MTU)
3506                         return -EOPNOTSUPP;
3507                 bp->dev->max_mtu =
3508                         min_t(u16, bp->max_mtu, BNXT_MAX_PAGE_MODE_MTU);
3509                 bp->flags &= ~BNXT_FLAG_AGG_RINGS;
3510                 bp->flags |= BNXT_FLAG_NO_AGG_RINGS | BNXT_FLAG_RX_PAGE_MODE;
3511                 bp->rx_dir = DMA_BIDIRECTIONAL;
3512                 bp->rx_skb_func = bnxt_rx_page_skb;
3513                 /* Disable LRO or GRO_HW */
3514                 netdev_update_features(bp->dev);
3515         } else {
3516                 bp->dev->max_mtu = bp->max_mtu;
3517                 bp->flags &= ~BNXT_FLAG_RX_PAGE_MODE;
3518                 bp->rx_dir = DMA_FROM_DEVICE;
3519                 bp->rx_skb_func = bnxt_rx_skb;
3520         }
3521         return 0;
3522 }
3523
3524 static void bnxt_free_vnic_attributes(struct bnxt *bp)
3525 {
3526         int i;
3527         struct bnxt_vnic_info *vnic;
3528         struct pci_dev *pdev = bp->pdev;
3529
3530         if (!bp->vnic_info)
3531                 return;
3532
3533         for (i = 0; i < bp->nr_vnics; i++) {
3534                 vnic = &bp->vnic_info[i];
3535
3536                 kfree(vnic->fw_grp_ids);
3537                 vnic->fw_grp_ids = NULL;
3538
3539                 kfree(vnic->uc_list);
3540                 vnic->uc_list = NULL;
3541
3542                 if (vnic->mc_list) {
3543                         dma_free_coherent(&pdev->dev, vnic->mc_list_size,
3544                                           vnic->mc_list, vnic->mc_list_mapping);
3545                         vnic->mc_list = NULL;
3546                 }
3547
3548                 if (vnic->rss_table) {
3549                         dma_free_coherent(&pdev->dev, PAGE_SIZE,
3550                                           vnic->rss_table,
3551                                           vnic->rss_table_dma_addr);
3552                         vnic->rss_table = NULL;
3553                 }
3554
3555                 vnic->rss_hash_key = NULL;
3556                 vnic->flags = 0;
3557         }
3558 }
3559
3560 static int bnxt_alloc_vnic_attributes(struct bnxt *bp)
3561 {
3562         int i, rc = 0, size;
3563         struct bnxt_vnic_info *vnic;
3564         struct pci_dev *pdev = bp->pdev;
3565         int max_rings;
3566
3567         for (i = 0; i < bp->nr_vnics; i++) {
3568                 vnic = &bp->vnic_info[i];
3569
3570                 if (vnic->flags & BNXT_VNIC_UCAST_FLAG) {
3571                         int mem_size = (BNXT_MAX_UC_ADDRS - 1) * ETH_ALEN;
3572
3573                         if (mem_size > 0) {
3574                                 vnic->uc_list = kmalloc(mem_size, GFP_KERNEL);
3575                                 if (!vnic->uc_list) {
3576                                         rc = -ENOMEM;
3577                                         goto out;
3578                                 }
3579                         }
3580                 }
3581
3582                 if (vnic->flags & BNXT_VNIC_MCAST_FLAG) {
3583                         vnic->mc_list_size = BNXT_MAX_MC_ADDRS * ETH_ALEN;
3584                         vnic->mc_list =
3585                                 dma_alloc_coherent(&pdev->dev,
3586                                                    vnic->mc_list_size,
3587                                                    &vnic->mc_list_mapping,
3588                                                    GFP_KERNEL);
3589                         if (!vnic->mc_list) {
3590                                 rc = -ENOMEM;
3591                                 goto out;
3592                         }
3593                 }
3594
3595                 if (bp->flags & BNXT_FLAG_CHIP_P5)
3596                         goto vnic_skip_grps;
3597
3598                 if (vnic->flags & BNXT_VNIC_RSS_FLAG)
3599                         max_rings = bp->rx_nr_rings;
3600                 else
3601                         max_rings = 1;
3602
3603                 vnic->fw_grp_ids = kcalloc(max_rings, sizeof(u16), GFP_KERNEL);
3604                 if (!vnic->fw_grp_ids) {
3605                         rc = -ENOMEM;
3606                         goto out;
3607                 }
3608 vnic_skip_grps:
3609                 if ((bp->flags & BNXT_FLAG_NEW_RSS_CAP) &&
3610                     !(vnic->flags & BNXT_VNIC_RSS_FLAG))
3611                         continue;
3612
3613                 /* Allocate rss table and hash key */
3614                 vnic->rss_table = dma_alloc_coherent(&pdev->dev, PAGE_SIZE,
3615                                                      &vnic->rss_table_dma_addr,
3616                                                      GFP_KERNEL);
3617                 if (!vnic->rss_table) {
3618                         rc = -ENOMEM;
3619                         goto out;
3620                 }
3621
3622                 size = L1_CACHE_ALIGN(HW_HASH_INDEX_SIZE * sizeof(u16));
3623
3624                 vnic->rss_hash_key = ((void *)vnic->rss_table) + size;
3625                 vnic->rss_hash_key_dma_addr = vnic->rss_table_dma_addr + size;
3626         }
3627         return 0;
3628
3629 out:
3630         return rc;
3631 }
3632
3633 static void bnxt_free_hwrm_resources(struct bnxt *bp)
3634 {
3635         struct pci_dev *pdev = bp->pdev;
3636
3637         if (bp->hwrm_cmd_resp_addr) {
3638                 dma_free_coherent(&pdev->dev, PAGE_SIZE, bp->hwrm_cmd_resp_addr,
3639                                   bp->hwrm_cmd_resp_dma_addr);
3640                 bp->hwrm_cmd_resp_addr = NULL;
3641         }
3642
3643         if (bp->hwrm_cmd_kong_resp_addr) {
3644                 dma_free_coherent(&pdev->dev, PAGE_SIZE,
3645                                   bp->hwrm_cmd_kong_resp_addr,
3646                                   bp->hwrm_cmd_kong_resp_dma_addr);
3647                 bp->hwrm_cmd_kong_resp_addr = NULL;
3648         }
3649 }
3650
3651 static int bnxt_alloc_kong_hwrm_resources(struct bnxt *bp)
3652 {
3653         struct pci_dev *pdev = bp->pdev;
3654
3655         if (bp->hwrm_cmd_kong_resp_addr)
3656                 return 0;
3657
3658         bp->hwrm_cmd_kong_resp_addr =
3659                 dma_alloc_coherent(&pdev->dev, PAGE_SIZE,
3660                                    &bp->hwrm_cmd_kong_resp_dma_addr,
3661                                    GFP_KERNEL);
3662         if (!bp->hwrm_cmd_kong_resp_addr)
3663                 return -ENOMEM;
3664
3665         return 0;
3666 }
3667
3668 static int bnxt_alloc_hwrm_resources(struct bnxt *bp)
3669 {
3670         struct pci_dev *pdev = bp->pdev;
3671
3672         bp->hwrm_cmd_resp_addr = dma_alloc_coherent(&pdev->dev, PAGE_SIZE,
3673                                                    &bp->hwrm_cmd_resp_dma_addr,
3674                                                    GFP_KERNEL);
3675         if (!bp->hwrm_cmd_resp_addr)
3676                 return -ENOMEM;
3677
3678         return 0;
3679 }
3680
3681 static void bnxt_free_hwrm_short_cmd_req(struct bnxt *bp)
3682 {
3683         if (bp->hwrm_short_cmd_req_addr) {
3684                 struct pci_dev *pdev = bp->pdev;
3685
3686                 dma_free_coherent(&pdev->dev, bp->hwrm_max_ext_req_len,
3687                                   bp->hwrm_short_cmd_req_addr,
3688                                   bp->hwrm_short_cmd_req_dma_addr);
3689                 bp->hwrm_short_cmd_req_addr = NULL;
3690         }
3691 }
3692
3693 static int bnxt_alloc_hwrm_short_cmd_req(struct bnxt *bp)
3694 {
3695         struct pci_dev *pdev = bp->pdev;
3696
3697         if (bp->hwrm_short_cmd_req_addr)
3698                 return 0;
3699
3700         bp->hwrm_short_cmd_req_addr =
3701                 dma_alloc_coherent(&pdev->dev, bp->hwrm_max_ext_req_len,
3702                                    &bp->hwrm_short_cmd_req_dma_addr,
3703                                    GFP_KERNEL);
3704         if (!bp->hwrm_short_cmd_req_addr)
3705                 return -ENOMEM;
3706
3707         return 0;
3708 }
3709
3710 static void bnxt_free_port_stats(struct bnxt *bp)
3711 {
3712         struct pci_dev *pdev = bp->pdev;
3713
3714         bp->flags &= ~BNXT_FLAG_PORT_STATS;
3715         bp->flags &= ~BNXT_FLAG_PORT_STATS_EXT;
3716
3717         if (bp->hw_rx_port_stats) {
3718                 dma_free_coherent(&pdev->dev, bp->hw_port_stats_size,
3719                                   bp->hw_rx_port_stats,
3720                                   bp->hw_rx_port_stats_map);
3721                 bp->hw_rx_port_stats = NULL;
3722         }
3723
3724         if (bp->hw_tx_port_stats_ext) {
3725                 dma_free_coherent(&pdev->dev, sizeof(struct tx_port_stats_ext),
3726                                   bp->hw_tx_port_stats_ext,
3727                                   bp->hw_tx_port_stats_ext_map);
3728                 bp->hw_tx_port_stats_ext = NULL;
3729         }
3730
3731         if (bp->hw_rx_port_stats_ext) {
3732                 dma_free_coherent(&pdev->dev, sizeof(struct rx_port_stats_ext),
3733                                   bp->hw_rx_port_stats_ext,
3734                                   bp->hw_rx_port_stats_ext_map);
3735                 bp->hw_rx_port_stats_ext = NULL;
3736         }
3737
3738         if (bp->hw_pcie_stats) {
3739                 dma_free_coherent(&pdev->dev, sizeof(struct pcie_ctx_hw_stats),
3740                                   bp->hw_pcie_stats, bp->hw_pcie_stats_map);
3741                 bp->hw_pcie_stats = NULL;
3742         }
3743 }
3744
3745 static void bnxt_free_ring_stats(struct bnxt *bp)
3746 {
3747         struct pci_dev *pdev = bp->pdev;
3748         int size, i;
3749
3750         if (!bp->bnapi)
3751                 return;
3752
3753         size = bp->hw_ring_stats_size;
3754
3755         for (i = 0; i < bp->cp_nr_rings; i++) {
3756                 struct bnxt_napi *bnapi = bp->bnapi[i];
3757                 struct bnxt_cp_ring_info *cpr = &bnapi->cp_ring;
3758
3759                 if (cpr->hw_stats) {
3760                         dma_free_coherent(&pdev->dev, size, cpr->hw_stats,
3761                                           cpr->hw_stats_map);
3762                         cpr->hw_stats = NULL;
3763                 }
3764         }
3765 }
3766
3767 static int bnxt_alloc_stats(struct bnxt *bp)
3768 {
3769         u32 size, i;
3770         struct pci_dev *pdev = bp->pdev;
3771
3772         size = bp->hw_ring_stats_size;
3773
3774         for (i = 0; i < bp->cp_nr_rings; i++) {
3775                 struct bnxt_napi *bnapi = bp->bnapi[i];
3776                 struct bnxt_cp_ring_info *cpr = &bnapi->cp_ring;
3777
3778                 cpr->hw_stats = dma_alloc_coherent(&pdev->dev, size,
3779                                                    &cpr->hw_stats_map,
3780                                                    GFP_KERNEL);
3781                 if (!cpr->hw_stats)
3782                         return -ENOMEM;
3783
3784                 cpr->hw_stats_ctx_id = INVALID_STATS_CTX_ID;
3785         }
3786
3787         if (BNXT_VF(bp) || bp->chip_num == CHIP_NUM_58700)
3788                 return 0;
3789
3790         if (bp->hw_rx_port_stats)
3791                 goto alloc_ext_stats;
3792
3793         bp->hw_port_stats_size = sizeof(struct rx_port_stats) +
3794                                  sizeof(struct tx_port_stats) + 1024;
3795
3796         bp->hw_rx_port_stats =
3797                 dma_alloc_coherent(&pdev->dev, bp->hw_port_stats_size,
3798                                    &bp->hw_rx_port_stats_map,
3799                                    GFP_KERNEL);
3800         if (!bp->hw_rx_port_stats)
3801                 return -ENOMEM;
3802
3803         bp->hw_tx_port_stats = (void *)(bp->hw_rx_port_stats + 1) + 512;
3804         bp->hw_tx_port_stats_map = bp->hw_rx_port_stats_map +
3805                                    sizeof(struct rx_port_stats) + 512;
3806         bp->flags |= BNXT_FLAG_PORT_STATS;
3807
3808 alloc_ext_stats:
3809         /* Display extended statistics only if FW supports it */
3810         if (bp->hwrm_spec_code < 0x10804 || bp->hwrm_spec_code == 0x10900)
3811                 if (!(bp->fw_cap & BNXT_FW_CAP_EXT_STATS_SUPPORTED))
3812                         return 0;
3813
3814         if (bp->hw_rx_port_stats_ext)
3815                 goto alloc_tx_ext_stats;
3816
3817         bp->hw_rx_port_stats_ext =
3818                 dma_alloc_coherent(&pdev->dev, sizeof(struct rx_port_stats_ext),
3819                                    &bp->hw_rx_port_stats_ext_map, GFP_KERNEL);
3820         if (!bp->hw_rx_port_stats_ext)
3821                 return 0;
3822
3823 alloc_tx_ext_stats:
3824         if (bp->hw_tx_port_stats_ext)
3825                 goto alloc_pcie_stats;
3826
3827         if (bp->hwrm_spec_code >= 0x10902 ||
3828             (bp->fw_cap & BNXT_FW_CAP_EXT_STATS_SUPPORTED)) {
3829                 bp->hw_tx_port_stats_ext =
3830                         dma_alloc_coherent(&pdev->dev,
3831                                            sizeof(struct tx_port_stats_ext),
3832                                            &bp->hw_tx_port_stats_ext_map,
3833                                            GFP_KERNEL);
3834         }
3835         bp->flags |= BNXT_FLAG_PORT_STATS_EXT;
3836
3837 alloc_pcie_stats:
3838         if (bp->hw_pcie_stats ||
3839             !(bp->fw_cap & BNXT_FW_CAP_PCIE_STATS_SUPPORTED))
3840                 return 0;
3841
3842         bp->hw_pcie_stats =
3843                 dma_alloc_coherent(&pdev->dev, sizeof(struct pcie_ctx_hw_stats),
3844                                    &bp->hw_pcie_stats_map, GFP_KERNEL);
3845         if (!bp->hw_pcie_stats)
3846                 return 0;
3847
3848         bp->flags |= BNXT_FLAG_PCIE_STATS;
3849         return 0;
3850 }
3851
3852 static void bnxt_clear_ring_indices(struct bnxt *bp)
3853 {
3854         int i;
3855
3856         if (!bp->bnapi)
3857                 return;
3858
3859         for (i = 0; i < bp->cp_nr_rings; i++) {
3860                 struct bnxt_napi *bnapi = bp->bnapi[i];
3861                 struct bnxt_cp_ring_info *cpr;
3862                 struct bnxt_rx_ring_info *rxr;
3863                 struct bnxt_tx_ring_info *txr;
3864
3865                 if (!bnapi)
3866                         continue;
3867
3868                 cpr = &bnapi->cp_ring;
3869                 cpr->cp_raw_cons = 0;
3870
3871                 txr = bnapi->tx_ring;
3872                 if (txr) {
3873                         txr->tx_prod = 0;
3874                         txr->tx_cons = 0;
3875                 }
3876
3877                 rxr = bnapi->rx_ring;
3878                 if (rxr) {
3879                         rxr->rx_prod = 0;
3880                         rxr->rx_agg_prod = 0;
3881                         rxr->rx_sw_agg_prod = 0;
3882                         rxr->rx_next_cons = 0;
3883                 }
3884         }
3885 }
3886
3887 static void bnxt_free_ntp_fltrs(struct bnxt *bp, bool irq_reinit)
3888 {
3889 #ifdef CONFIG_RFS_ACCEL
3890         int i;
3891
3892         /* Under rtnl_lock and all our NAPIs have been disabled.  It's
3893          * safe to delete the hash table.
3894          */
3895         for (i = 0; i < BNXT_NTP_FLTR_HASH_SIZE; i++) {
3896                 struct hlist_head *head;
3897                 struct hlist_node *tmp;
3898                 struct bnxt_ntuple_filter *fltr;
3899
3900                 head = &bp->ntp_fltr_hash_tbl[i];
3901                 hlist_for_each_entry_safe(fltr, tmp, head, hash) {
3902                         hlist_del(&fltr->hash);
3903                         kfree(fltr);
3904                 }
3905         }
3906         if (irq_reinit) {
3907                 kfree(bp->ntp_fltr_bmap);
3908                 bp->ntp_fltr_bmap = NULL;
3909         }
3910         bp->ntp_fltr_count = 0;
3911 #endif
3912 }
3913
3914 static int bnxt_alloc_ntp_fltrs(struct bnxt *bp)
3915 {
3916 #ifdef CONFIG_RFS_ACCEL
3917         int i, rc = 0;
3918
3919         if (!(bp->flags & BNXT_FLAG_RFS))
3920                 return 0;
3921
3922         for (i = 0; i < BNXT_NTP_FLTR_HASH_SIZE; i++)
3923                 INIT_HLIST_HEAD(&bp->ntp_fltr_hash_tbl[i]);
3924
3925         bp->ntp_fltr_count = 0;
3926         bp->ntp_fltr_bmap = kcalloc(BITS_TO_LONGS(BNXT_NTP_FLTR_MAX_FLTR),
3927                                     sizeof(long),
3928                                     GFP_KERNEL);
3929
3930         if (!bp->ntp_fltr_bmap)
3931                 rc = -ENOMEM;
3932
3933         return rc;
3934 #else
3935         return 0;
3936 #endif
3937 }
3938
3939 static void bnxt_free_mem(struct bnxt *bp, bool irq_re_init)
3940 {
3941         bnxt_free_vnic_attributes(bp);
3942         bnxt_free_tx_rings(bp);
3943         bnxt_free_rx_rings(bp);
3944         bnxt_free_cp_rings(bp);
3945         bnxt_free_ntp_fltrs(bp, irq_re_init);
3946         if (irq_re_init) {
3947                 bnxt_free_ring_stats(bp);
3948                 bnxt_free_ring_grps(bp);
3949                 bnxt_free_vnics(bp);
3950                 kfree(bp->tx_ring_map);
3951                 bp->tx_ring_map = NULL;
3952                 kfree(bp->tx_ring);
3953                 bp->tx_ring = NULL;
3954                 kfree(bp->rx_ring);
3955                 bp->rx_ring = NULL;
3956                 kfree(bp->bnapi);
3957                 bp->bnapi = NULL;
3958         } else {
3959                 bnxt_clear_ring_indices(bp);
3960         }
3961 }
3962
3963 static int bnxt_alloc_mem(struct bnxt *bp, bool irq_re_init)
3964 {
3965         int i, j, rc, size, arr_size;
3966         void *bnapi;
3967
3968         if (irq_re_init) {
3969                 /* Allocate bnapi mem pointer array and mem block for
3970                  * all queues
3971                  */
3972                 arr_size = L1_CACHE_ALIGN(sizeof(struct bnxt_napi *) *
3973                                 bp->cp_nr_rings);
3974                 size = L1_CACHE_ALIGN(sizeof(struct bnxt_napi));
3975                 bnapi = kzalloc(arr_size + size * bp->cp_nr_rings, GFP_KERNEL);
3976                 if (!bnapi)
3977                         return -ENOMEM;
3978
3979                 bp->bnapi = bnapi;
3980                 bnapi += arr_size;
3981                 for (i = 0; i < bp->cp_nr_rings; i++, bnapi += size) {
3982                         bp->bnapi[i] = bnapi;
3983                         bp->bnapi[i]->index = i;
3984                         bp->bnapi[i]->bp = bp;
3985                         if (bp->flags & BNXT_FLAG_CHIP_P5) {
3986                                 struct bnxt_cp_ring_info *cpr =
3987                                         &bp->bnapi[i]->cp_ring;
3988
3989                                 cpr->cp_ring_struct.ring_mem.flags =
3990                                         BNXT_RMEM_RING_PTE_FLAG;
3991                         }
3992                 }
3993
3994                 bp->rx_ring = kcalloc(bp->rx_nr_rings,
3995                                       sizeof(struct bnxt_rx_ring_info),
3996                                       GFP_KERNEL);
3997                 if (!bp->rx_ring)
3998                         return -ENOMEM;
3999
4000                 for (i = 0; i < bp->rx_nr_rings; i++) {
4001                         struct bnxt_rx_ring_info *rxr = &bp->rx_ring[i];
4002
4003                         if (bp->flags & BNXT_FLAG_CHIP_P5) {
4004                                 rxr->rx_ring_struct.ring_mem.flags =
4005                                         BNXT_RMEM_RING_PTE_FLAG;
4006                                 rxr->rx_agg_ring_struct.ring_mem.flags =
4007                                         BNXT_RMEM_RING_PTE_FLAG;
4008                         }
4009                         rxr->bnapi = bp->bnapi[i];
4010                         bp->bnapi[i]->rx_ring = &bp->rx_ring[i];
4011                 }
4012
4013                 bp->tx_ring = kcalloc(bp->tx_nr_rings,
4014                                       sizeof(struct bnxt_tx_ring_info),
4015                                       GFP_KERNEL);
4016                 if (!bp->tx_ring)
4017                         return -ENOMEM;
4018
4019                 bp->tx_ring_map = kcalloc(bp->tx_nr_rings, sizeof(u16),
4020                                           GFP_KERNEL);
4021
4022                 if (!bp->tx_ring_map)
4023                         return -ENOMEM;
4024
4025                 if (bp->flags & BNXT_FLAG_SHARED_RINGS)
4026                         j = 0;
4027                 else
4028                         j = bp->rx_nr_rings;
4029
4030                 for (i = 0; i < bp->tx_nr_rings; i++, j++) {
4031                         struct bnxt_tx_ring_info *txr = &bp->tx_ring[i];
4032
4033                         if (bp->flags & BNXT_FLAG_CHIP_P5)
4034                                 txr->tx_ring_struct.ring_mem.flags =
4035                                         BNXT_RMEM_RING_PTE_FLAG;
4036                         txr->bnapi = bp->bnapi[j];
4037                         bp->bnapi[j]->tx_ring = txr;
4038                         bp->tx_ring_map[i] = bp->tx_nr_rings_xdp + i;
4039                         if (i >= bp->tx_nr_rings_xdp) {
4040                                 txr->txq_index = i - bp->tx_nr_rings_xdp;
4041                                 bp->bnapi[j]->tx_int = bnxt_tx_int;
4042                         } else {
4043                                 bp->bnapi[j]->flags |= BNXT_NAPI_FLAG_XDP;
4044                                 bp->bnapi[j]->tx_int = bnxt_tx_int_xdp;
4045                         }
4046                 }
4047
4048                 rc = bnxt_alloc_stats(bp);
4049                 if (rc)
4050                         goto alloc_mem_err;
4051
4052                 rc = bnxt_alloc_ntp_fltrs(bp);
4053                 if (rc)
4054                         goto alloc_mem_err;
4055
4056                 rc = bnxt_alloc_vnics(bp);
4057                 if (rc)
4058                         goto alloc_mem_err;
4059         }
4060
4061         bnxt_init_ring_struct(bp);
4062
4063         rc = bnxt_alloc_rx_rings(bp);
4064         if (rc)
4065                 goto alloc_mem_err;
4066
4067         rc = bnxt_alloc_tx_rings(bp);
4068         if (rc)
4069                 goto alloc_mem_err;
4070
4071         rc = bnxt_alloc_cp_rings(bp);
4072         if (rc)
4073                 goto alloc_mem_err;
4074
4075         bp->vnic_info[0].flags |= BNXT_VNIC_RSS_FLAG | BNXT_VNIC_MCAST_FLAG |
4076                                   BNXT_VNIC_UCAST_FLAG;
4077         rc = bnxt_alloc_vnic_attributes(bp);
4078         if (rc)
4079                 goto alloc_mem_err;
4080         return 0;
4081
4082 alloc_mem_err:
4083         bnxt_free_mem(bp, true);
4084         return rc;
4085 }
4086
4087 static void bnxt_disable_int(struct bnxt *bp)
4088 {
4089         int i;
4090
4091         if (!bp->bnapi)
4092                 return;
4093
4094         for (i = 0; i < bp->cp_nr_rings; i++) {
4095                 struct bnxt_napi *bnapi = bp->bnapi[i];
4096                 struct bnxt_cp_ring_info *cpr = &bnapi->cp_ring;
4097                 struct bnxt_ring_struct *ring = &cpr->cp_ring_struct;
4098
4099                 if (ring->fw_ring_id != INVALID_HW_RING_ID)
4100                         bnxt_db_nq(bp, &cpr->cp_db, cpr->cp_raw_cons);
4101         }
4102 }
4103
4104 static int bnxt_cp_num_to_irq_num(struct bnxt *bp, int n)
4105 {
4106         struct bnxt_napi *bnapi = bp->bnapi[n];
4107         struct bnxt_cp_ring_info *cpr;
4108
4109         cpr = &bnapi->cp_ring;
4110         return cpr->cp_ring_struct.map_idx;
4111 }
4112
4113 static void bnxt_disable_int_sync(struct bnxt *bp)
4114 {
4115         int i;
4116
4117         atomic_inc(&bp->intr_sem);
4118
4119         bnxt_disable_int(bp);
4120         for (i = 0; i < bp->cp_nr_rings; i++) {
4121                 int map_idx = bnxt_cp_num_to_irq_num(bp, i);
4122
4123                 synchronize_irq(bp->irq_tbl[map_idx].vector);
4124         }
4125 }
4126
4127 static void bnxt_enable_int(struct bnxt *bp)
4128 {
4129         int i;
4130
4131         atomic_set(&bp->intr_sem, 0);
4132         for (i = 0; i < bp->cp_nr_rings; i++) {
4133                 struct bnxt_napi *bnapi = bp->bnapi[i];
4134                 struct bnxt_cp_ring_info *cpr = &bnapi->cp_ring;
4135
4136                 bnxt_db_nq_arm(bp, &cpr->cp_db, cpr->cp_raw_cons);
4137         }
4138 }
4139
4140 void bnxt_hwrm_cmd_hdr_init(struct bnxt *bp, void *request, u16 req_type,
4141                             u16 cmpl_ring, u16 target_id)
4142 {
4143         struct input *req = request;
4144
4145         req->req_type = cpu_to_le16(req_type);
4146         req->cmpl_ring = cpu_to_le16(cmpl_ring);
4147         req->target_id = cpu_to_le16(target_id);
4148         if (bnxt_kong_hwrm_message(bp, req))
4149                 req->resp_addr = cpu_to_le64(bp->hwrm_cmd_kong_resp_dma_addr);
4150         else
4151                 req->resp_addr = cpu_to_le64(bp->hwrm_cmd_resp_dma_addr);
4152 }
4153
4154 static int bnxt_hwrm_to_stderr(u32 hwrm_err)
4155 {
4156         switch (hwrm_err) {
4157         case HWRM_ERR_CODE_SUCCESS:
4158                 return 0;
4159         case HWRM_ERR_CODE_RESOURCE_ACCESS_DENIED:
4160                 return -EACCES;
4161         case HWRM_ERR_CODE_RESOURCE_ALLOC_ERROR:
4162                 return -ENOSPC;
4163         case HWRM_ERR_CODE_INVALID_PARAMS:
4164         case HWRM_ERR_CODE_INVALID_FLAGS:
4165         case HWRM_ERR_CODE_INVALID_ENABLES:
4166         case HWRM_ERR_CODE_UNSUPPORTED_TLV:
4167         case HWRM_ERR_CODE_UNSUPPORTED_OPTION_ERR:
4168                 return -EINVAL;
4169         case HWRM_ERR_CODE_NO_BUFFER:
4170                 return -ENOMEM;
4171         case HWRM_ERR_CODE_HOT_RESET_PROGRESS:
4172                 return -EAGAIN;
4173         case HWRM_ERR_CODE_CMD_NOT_SUPPORTED:
4174                 return -EOPNOTSUPP;
4175         default:
4176                 return -EIO;
4177         }
4178 }
4179
4180 static int bnxt_hwrm_do_send_msg(struct bnxt *bp, void *msg, u32 msg_len,
4181                                  int timeout, bool silent)
4182 {
4183         int i, intr_process, rc, tmo_count;
4184         struct input *req = msg;
4185         u32 *data = msg;
4186         __le32 *resp_len;
4187         u8 *valid;
4188         u16 cp_ring_id, len = 0;
4189         struct hwrm_err_output *resp = bp->hwrm_cmd_resp_addr;
4190         u16 max_req_len = BNXT_HWRM_MAX_REQ_LEN;
4191         struct hwrm_short_input short_input = {0};
4192         u32 doorbell_offset = BNXT_GRCPF_REG_CHIMP_COMM_TRIGGER;
4193         u8 *resp_addr = (u8 *)bp->hwrm_cmd_resp_addr;
4194         u32 bar_offset = BNXT_GRCPF_REG_CHIMP_COMM;
4195         u16 dst = BNXT_HWRM_CHNL_CHIMP;
4196
4197         if (test_bit(BNXT_STATE_FW_FATAL_COND, &bp->state))
4198                 return -EBUSY;
4199
4200         if (msg_len > BNXT_HWRM_MAX_REQ_LEN) {
4201                 if (msg_len > bp->hwrm_max_ext_req_len ||
4202                     !bp->hwrm_short_cmd_req_addr)
4203                         return -EINVAL;
4204         }
4205
4206         if (bnxt_hwrm_kong_chnl(bp, req)) {
4207                 dst = BNXT_HWRM_CHNL_KONG;
4208                 bar_offset = BNXT_GRCPF_REG_KONG_COMM;
4209                 doorbell_offset = BNXT_GRCPF_REG_KONG_COMM_TRIGGER;
4210                 resp = bp->hwrm_cmd_kong_resp_addr;
4211                 resp_addr = (u8 *)bp->hwrm_cmd_kong_resp_addr;
4212         }
4213
4214         memset(resp, 0, PAGE_SIZE);
4215         cp_ring_id = le16_to_cpu(req->cmpl_ring);
4216         intr_process = (cp_ring_id == INVALID_HW_RING_ID) ? 0 : 1;
4217
4218         req->seq_id = cpu_to_le16(bnxt_get_hwrm_seq_id(bp, dst));
4219         /* currently supports only one outstanding message */
4220         if (intr_process)
4221                 bp->hwrm_intr_seq_id = le16_to_cpu(req->seq_id);
4222
4223         if ((bp->fw_cap & BNXT_FW_CAP_SHORT_CMD) ||
4224             msg_len > BNXT_HWRM_MAX_REQ_LEN) {
4225                 void *short_cmd_req = bp->hwrm_short_cmd_req_addr;
4226                 u16 max_msg_len;
4227
4228                 /* Set boundary for maximum extended request length for short
4229                  * cmd format. If passed up from device use the max supported
4230                  * internal req length.
4231                  */
4232                 max_msg_len = bp->hwrm_max_ext_req_len;
4233
4234                 memcpy(short_cmd_req, req, msg_len);
4235                 if (msg_len < max_msg_len)
4236                         memset(short_cmd_req + msg_len, 0,
4237                                max_msg_len - msg_len);
4238
4239                 short_input.req_type = req->req_type;
4240                 short_input.signature =
4241                                 cpu_to_le16(SHORT_REQ_SIGNATURE_SHORT_CMD);
4242                 short_input.size = cpu_to_le16(msg_len);
4243                 short_input.req_addr =
4244                         cpu_to_le64(bp->hwrm_short_cmd_req_dma_addr);
4245
4246                 data = (u32 *)&short_input;
4247                 msg_len = sizeof(short_input);
4248
4249                 /* Sync memory write before updating doorbell */
4250                 wmb();
4251
4252                 max_req_len = BNXT_HWRM_SHORT_REQ_LEN;
4253         }
4254
4255         /* Write request msg to hwrm channel */
4256         __iowrite32_copy(bp->bar0 + bar_offset, data, msg_len / 4);
4257
4258         for (i = msg_len; i < max_req_len; i += 4)
4259                 writel(0, bp->bar0 + bar_offset + i);
4260
4261         /* Ring channel doorbell */
4262         writel(1, bp->bar0 + doorbell_offset);
4263
4264         if (!pci_is_enabled(bp->pdev))
4265                 return 0;
4266
4267         if (!timeout)
4268                 timeout = DFLT_HWRM_CMD_TIMEOUT;
4269         /* convert timeout to usec */
4270         timeout *= 1000;
4271
4272         i = 0;
4273         /* Short timeout for the first few iterations:
4274          * number of loops = number of loops for short timeout +
4275          * number of loops for standard timeout.
4276          */
4277         tmo_count = HWRM_SHORT_TIMEOUT_COUNTER;
4278         timeout = timeout - HWRM_SHORT_MIN_TIMEOUT * HWRM_SHORT_TIMEOUT_COUNTER;
4279         tmo_count += DIV_ROUND_UP(timeout, HWRM_MIN_TIMEOUT);
4280         resp_len = (__le32 *)(resp_addr + HWRM_RESP_LEN_OFFSET);
4281
4282         if (intr_process) {
4283                 u16 seq_id = bp->hwrm_intr_seq_id;
4284
4285                 /* Wait until hwrm response cmpl interrupt is processed */
4286                 while (bp->hwrm_intr_seq_id != (u16)~seq_id &&
4287                        i++ < tmo_count) {
4288                         /* Abort the wait for completion if the FW health
4289                          * check has failed.
4290                          */
4291                         if (test_bit(BNXT_STATE_FW_FATAL_COND, &bp->state))
4292                                 return -EBUSY;
4293                         /* on first few passes, just barely sleep */
4294                         if (i < HWRM_SHORT_TIMEOUT_COUNTER)
4295                                 usleep_range(HWRM_SHORT_MIN_TIMEOUT,
4296                                              HWRM_SHORT_MAX_TIMEOUT);
4297                         else
4298                                 usleep_range(HWRM_MIN_TIMEOUT,
4299                                              HWRM_MAX_TIMEOUT);
4300                 }
4301
4302                 if (bp->hwrm_intr_seq_id != (u16)~seq_id) {
4303                         if (!silent)
4304                                 netdev_err(bp->dev, "Resp cmpl intr err msg: 0x%x\n",
4305                                            le16_to_cpu(req->req_type));
4306                         return -EBUSY;
4307                 }
4308                 len = (le32_to_cpu(*resp_len) & HWRM_RESP_LEN_MASK) >>
4309                       HWRM_RESP_LEN_SFT;
4310                 valid = resp_addr + len - 1;
4311         } else {
4312                 int j;
4313
4314                 /* Check if response len is updated */
4315                 for (i = 0; i < tmo_count; i++) {
4316                         /* Abort the wait for completion if the FW health
4317                          * check has failed.
4318                          */
4319                         if (test_bit(BNXT_STATE_FW_FATAL_COND, &bp->state))
4320                                 return -EBUSY;
4321                         len = (le32_to_cpu(*resp_len) & HWRM_RESP_LEN_MASK) >>
4322                               HWRM_RESP_LEN_SFT;
4323                         if (len)
4324                                 break;
4325                         /* on first few passes, just barely sleep */
4326                         if (i < HWRM_SHORT_TIMEOUT_COUNTER)
4327                                 usleep_range(HWRM_SHORT_MIN_TIMEOUT,
4328                                              HWRM_SHORT_MAX_TIMEOUT);
4329                         else
4330                                 usleep_range(HWRM_MIN_TIMEOUT,
4331                                              HWRM_MAX_TIMEOUT);
4332                 }
4333
4334                 if (i >= tmo_count) {
4335                         if (!silent)
4336                                 netdev_err(bp->dev, "Error (timeout: %d) msg {0x%x 0x%x} len:%d\n",
4337                                            HWRM_TOTAL_TIMEOUT(i),
4338                                            le16_to_cpu(req->req_type),
4339                                            le16_to_cpu(req->seq_id), len);
4340                         return -EBUSY;
4341                 }
4342
4343                 /* Last byte of resp contains valid bit */
4344                 valid = resp_addr + len - 1;
4345                 for (j = 0; j < HWRM_VALID_BIT_DELAY_USEC; j++) {
4346                         /* make sure we read from updated DMA memory */
4347                         dma_rmb();
4348                         if (*valid)
4349                                 break;
4350                         usleep_range(1, 5);
4351                 }
4352
4353                 if (j >= HWRM_VALID_BIT_DELAY_USEC) {
4354                         if (!silent)
4355                                 netdev_err(bp->dev, "Error (timeout: %d) msg {0x%x 0x%x} len:%d v:%d\n",
4356                                            HWRM_TOTAL_TIMEOUT(i),
4357                                            le16_to_cpu(req->req_type),
4358                                            le16_to_cpu(req->seq_id), len,
4359                                            *valid);
4360                         return -EBUSY;
4361                 }
4362         }
4363
4364         /* Zero valid bit for compatibility.  Valid bit in an older spec
4365          * may become a new field in a newer spec.  We must make sure that
4366          * a new field not implemented by old spec will read zero.
4367          */
4368         *valid = 0;
4369         rc = le16_to_cpu(resp->error_code);
4370         if (rc && !silent)
4371                 netdev_err(bp->dev, "hwrm req_type 0x%x seq id 0x%x error 0x%x\n",
4372                            le16_to_cpu(resp->req_type),
4373                            le16_to_cpu(resp->seq_id), rc);
4374         return bnxt_hwrm_to_stderr(rc);
4375 }
4376
4377 int _hwrm_send_message(struct bnxt *bp, void *msg, u32 msg_len, int timeout)
4378 {
4379         return bnxt_hwrm_do_send_msg(bp, msg, msg_len, timeout, false);
4380 }
4381
4382 int _hwrm_send_message_silent(struct bnxt *bp, void *msg, u32 msg_len,
4383                               int timeout)
4384 {
4385         return bnxt_hwrm_do_send_msg(bp, msg, msg_len, timeout, true);
4386 }
4387
4388 int hwrm_send_message(struct bnxt *bp, void *msg, u32 msg_len, int timeout)
4389 {
4390         int rc;
4391
4392         mutex_lock(&bp->hwrm_cmd_lock);
4393         rc = _hwrm_send_message(bp, msg, msg_len, timeout);
4394         mutex_unlock(&bp->hwrm_cmd_lock);
4395         return rc;
4396 }
4397
4398 int hwrm_send_message_silent(struct bnxt *bp, void *msg, u32 msg_len,
4399                              int timeout)
4400 {
4401         int rc;
4402
4403         mutex_lock(&bp->hwrm_cmd_lock);
4404         rc = bnxt_hwrm_do_send_msg(bp, msg, msg_len, timeout, true);
4405         mutex_unlock(&bp->hwrm_cmd_lock);
4406         return rc;
4407 }
4408
4409 int bnxt_hwrm_func_drv_rgtr(struct bnxt *bp, unsigned long *bmap, int bmap_size,
4410                             bool async_only)
4411 {
4412         struct hwrm_func_drv_rgtr_output *resp = bp->hwrm_cmd_resp_addr;
4413         struct hwrm_func_drv_rgtr_input req = {0};
4414         DECLARE_BITMAP(async_events_bmap, 256);
4415         u32 *events = (u32 *)async_events_bmap;
4416         u32 flags;
4417         int rc, i;
4418
4419         bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_FUNC_DRV_RGTR, -1, -1);
4420
4421         req.enables =
4422                 cpu_to_le32(FUNC_DRV_RGTR_REQ_ENABLES_OS_TYPE |
4423                             FUNC_DRV_RGTR_REQ_ENABLES_VER |
4424                             FUNC_DRV_RGTR_REQ_ENABLES_ASYNC_EVENT_FWD);
4425
4426         req.os_type = cpu_to_le16(FUNC_DRV_RGTR_REQ_OS_TYPE_LINUX);
4427         flags = FUNC_DRV_RGTR_REQ_FLAGS_16BIT_VER_MODE;
4428         if (bp->fw_cap & BNXT_FW_CAP_HOT_RESET)
4429                 flags |= FUNC_DRV_RGTR_REQ_FLAGS_HOT_RESET_SUPPORT;
4430         if (bp->fw_cap & BNXT_FW_CAP_ERROR_RECOVERY)
4431                 flags |= FUNC_DRV_RGTR_REQ_FLAGS_ERROR_RECOVERY_SUPPORT |
4432                          FUNC_DRV_RGTR_REQ_FLAGS_MASTER_SUPPORT;
4433         req.flags = cpu_to_le32(flags);
4434         req.ver_maj_8b = DRV_VER_MAJ;
4435         req.ver_min_8b = DRV_VER_MIN;
4436         req.ver_upd_8b = DRV_VER_UPD;
4437         req.ver_maj = cpu_to_le16(DRV_VER_MAJ);
4438         req.ver_min = cpu_to_le16(DRV_VER_MIN);
4439         req.ver_upd = cpu_to_le16(DRV_VER_UPD);
4440
4441         if (BNXT_PF(bp)) {
4442                 u32 data[8];
4443                 int i;
4444
4445                 memset(data, 0, sizeof(data));
4446                 for (i = 0; i < ARRAY_SIZE(bnxt_vf_req_snif); i++) {
4447                         u16 cmd = bnxt_vf_req_snif[i];
4448                         unsigned int bit, idx;
4449
4450                         idx = cmd / 32;
4451                         bit = cmd % 32;
4452                         data[idx] |= 1 << bit;
4453                 }
4454
4455                 for (i = 0; i < 8; i++)
4456                         req.vf_req_fwd[i] = cpu_to_le32(data[i]);
4457
4458                 req.enables |=
4459                         cpu_to_le32(FUNC_DRV_RGTR_REQ_ENABLES_VF_REQ_FWD);
4460         }
4461
4462         if (bp->fw_cap & BNXT_FW_CAP_OVS_64BIT_HANDLE)
4463                 req.flags |= cpu_to_le32(
4464                         FUNC_DRV_RGTR_REQ_FLAGS_FLOW_HANDLE_64BIT_MODE);
4465
4466         memset(async_events_bmap, 0, sizeof(async_events_bmap));
4467         for (i = 0; i < ARRAY_SIZE(bnxt_async_events_arr); i++) {
4468                 u16 event_id = bnxt_async_events_arr[i];
4469
4470                 if (event_id == ASYNC_EVENT_CMPL_EVENT_ID_ERROR_RECOVERY &&
4471                     !(bp->fw_cap & BNXT_FW_CAP_ERROR_RECOVERY))
4472                         continue;
4473                 __set_bit(bnxt_async_events_arr[i], async_events_bmap);
4474         }
4475         if (bmap && bmap_size) {
4476                 for (i = 0; i < bmap_size; i++) {
4477                         if (test_bit(i, bmap))
4478                                 __set_bit(i, async_events_bmap);
4479                 }
4480         }
4481         for (i = 0; i < 8; i++)
4482                 req.async_event_fwd[i] |= cpu_to_le32(events[i]);
4483
4484         if (async_only)
4485                 req.enables =
4486                         cpu_to_le32(FUNC_DRV_RGTR_REQ_ENABLES_ASYNC_EVENT_FWD);
4487
4488         mutex_lock(&bp->hwrm_cmd_lock);
4489         rc = _hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
4490         if (!rc) {
4491                 set_bit(BNXT_STATE_DRV_REGISTERED, &bp->state);
4492                 if (resp->flags &
4493                     cpu_to_le32(FUNC_DRV_RGTR_RESP_FLAGS_IF_CHANGE_SUPPORTED))
4494                         bp->fw_cap |= BNXT_FW_CAP_IF_CHANGE;
4495         }
4496         mutex_unlock(&bp->hwrm_cmd_lock);
4497         return rc;
4498 }
4499
4500 static int bnxt_hwrm_func_drv_unrgtr(struct bnxt *bp)
4501 {
4502         struct hwrm_func_drv_unrgtr_input req = {0};
4503
4504         if (!test_and_clear_bit(BNXT_STATE_DRV_REGISTERED, &bp->state))
4505                 return 0;
4506
4507         bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_FUNC_DRV_UNRGTR, -1, -1);
4508         return hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
4509 }
4510
4511 static int bnxt_hwrm_tunnel_dst_port_free(struct bnxt *bp, u8 tunnel_type)
4512 {
4513         u32 rc = 0;
4514         struct hwrm_tunnel_dst_port_free_input req = {0};
4515
4516         bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_TUNNEL_DST_PORT_FREE, -1, -1);
4517         req.tunnel_type = tunnel_type;
4518
4519         switch (tunnel_type) {
4520         case TUNNEL_DST_PORT_FREE_REQ_TUNNEL_TYPE_VXLAN:
4521                 req.tunnel_dst_port_id = bp->vxlan_fw_dst_port_id;
4522                 break;
4523         case TUNNEL_DST_PORT_FREE_REQ_TUNNEL_TYPE_GENEVE:
4524                 req.tunnel_dst_port_id = bp->nge_fw_dst_port_id;
4525                 break;
4526         default:
4527                 break;
4528         }
4529
4530         rc = hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
4531         if (rc)
4532                 netdev_err(bp->dev, "hwrm_tunnel_dst_port_free failed. rc:%d\n",
4533                            rc);
4534         return rc;
4535 }
4536
4537 static int bnxt_hwrm_tunnel_dst_port_alloc(struct bnxt *bp, __be16 port,
4538                                            u8 tunnel_type)
4539 {
4540         u32 rc = 0;
4541         struct hwrm_tunnel_dst_port_alloc_input req = {0};
4542         struct hwrm_tunnel_dst_port_alloc_output *resp = bp->hwrm_cmd_resp_addr;
4543
4544         bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_TUNNEL_DST_PORT_ALLOC, -1, -1);
4545
4546         req.tunnel_type = tunnel_type;
4547         req.tunnel_dst_port_val = port;
4548
4549         mutex_lock(&bp->hwrm_cmd_lock);
4550         rc = _hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
4551         if (rc) {
4552                 netdev_err(bp->dev, "hwrm_tunnel_dst_port_alloc failed. rc:%d\n",
4553                            rc);
4554                 goto err_out;
4555         }
4556
4557         switch (tunnel_type) {
4558         case TUNNEL_DST_PORT_ALLOC_REQ_TUNNEL_TYPE_VXLAN:
4559                 bp->vxlan_fw_dst_port_id = resp->tunnel_dst_port_id;
4560                 break;
4561         case TUNNEL_DST_PORT_ALLOC_REQ_TUNNEL_TYPE_GENEVE:
4562                 bp->nge_fw_dst_port_id = resp->tunnel_dst_port_id;
4563                 break;
4564         default:
4565                 break;
4566         }
4567
4568 err_out:
4569         mutex_unlock(&bp->hwrm_cmd_lock);
4570         return rc;
4571 }
4572
4573 static int bnxt_hwrm_cfa_l2_set_rx_mask(struct bnxt *bp, u16 vnic_id)
4574 {
4575         struct hwrm_cfa_l2_set_rx_mask_input req = {0};
4576         struct bnxt_vnic_info *vnic = &bp->vnic_info[vnic_id];
4577
4578         bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_CFA_L2_SET_RX_MASK, -1, -1);
4579         req.vnic_id = cpu_to_le32(vnic->fw_vnic_id);
4580
4581         req.num_mc_entries = cpu_to_le32(vnic->mc_list_count);
4582         req.mc_tbl_addr = cpu_to_le64(vnic->mc_list_mapping);
4583         req.mask = cpu_to_le32(vnic->rx_mask);
4584         return hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
4585 }
4586
4587 #ifdef CONFIG_RFS_ACCEL
4588 static int bnxt_hwrm_cfa_ntuple_filter_free(struct bnxt *bp,
4589                                             struct bnxt_ntuple_filter *fltr)
4590 {
4591         struct hwrm_cfa_ntuple_filter_free_input req = {0};
4592
4593         bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_CFA_NTUPLE_FILTER_FREE, -1, -1);
4594         req.ntuple_filter_id = fltr->filter_id;
4595         return hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
4596 }
4597
4598 #define BNXT_NTP_FLTR_FLAGS                                     \
4599         (CFA_NTUPLE_FILTER_ALLOC_REQ_ENABLES_L2_FILTER_ID |     \
4600          CFA_NTUPLE_FILTER_ALLOC_REQ_ENABLES_ETHERTYPE |        \
4601          CFA_NTUPLE_FILTER_ALLOC_REQ_ENABLES_SRC_MACADDR |      \
4602          CFA_NTUPLE_FILTER_ALLOC_REQ_ENABLES_IPADDR_TYPE |      \
4603          CFA_NTUPLE_FILTER_ALLOC_REQ_ENABLES_SRC_IPADDR |       \
4604          CFA_NTUPLE_FILTER_ALLOC_REQ_ENABLES_SRC_IPADDR_MASK |  \
4605          CFA_NTUPLE_FILTER_ALLOC_REQ_ENABLES_DST_IPADDR |       \
4606          CFA_NTUPLE_FILTER_ALLOC_REQ_ENABLES_DST_IPADDR_MASK |  \
4607          CFA_NTUPLE_FILTER_ALLOC_REQ_ENABLES_IP_PROTOCOL |      \
4608          CFA_NTUPLE_FILTER_ALLOC_REQ_ENABLES_SRC_PORT |         \
4609          CFA_NTUPLE_FILTER_ALLOC_REQ_ENABLES_SRC_PORT_MASK |    \
4610          CFA_NTUPLE_FILTER_ALLOC_REQ_ENABLES_DST_PORT |         \
4611          CFA_NTUPLE_FILTER_ALLOC_REQ_ENABLES_DST_PORT_MASK |    \
4612          CFA_NTUPLE_FILTER_ALLOC_REQ_ENABLES_DST_ID)
4613
4614 #define BNXT_NTP_TUNNEL_FLTR_FLAG                               \
4615                 CFA_NTUPLE_FILTER_ALLOC_REQ_ENABLES_TUNNEL_TYPE
4616
4617 static int bnxt_hwrm_cfa_ntuple_filter_alloc(struct bnxt *bp,
4618                                              struct bnxt_ntuple_filter *fltr)
4619 {
4620         struct hwrm_cfa_ntuple_filter_alloc_input req = {0};
4621         struct hwrm_cfa_ntuple_filter_alloc_output *resp;
4622         struct flow_keys *keys = &fltr->fkeys;
4623         struct bnxt_vnic_info *vnic;
4624         u32 flags = 0;
4625         int rc = 0;
4626
4627         bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_CFA_NTUPLE_FILTER_ALLOC, -1, -1);
4628         req.l2_filter_id = bp->vnic_info[0].fw_l2_filter_id[fltr->l2_fltr_idx];
4629
4630         if (bp->fw_cap & BNXT_FW_CAP_CFA_RFS_RING_TBL_IDX_V2) {
4631                 flags = CFA_NTUPLE_FILTER_ALLOC_REQ_FLAGS_DEST_RFS_RING_IDX;
4632                 req.dst_id = cpu_to_le16(fltr->rxq);
4633         } else {
4634                 vnic = &bp->vnic_info[fltr->rxq + 1];
4635                 req.dst_id = cpu_to_le16(vnic->fw_vnic_id);
4636         }
4637         req.flags = cpu_to_le32(flags);
4638         req.enables = cpu_to_le32(BNXT_NTP_FLTR_FLAGS);
4639
4640         req.ethertype = htons(ETH_P_IP);
4641         memcpy(req.src_macaddr, fltr->src_mac_addr, ETH_ALEN);
4642         req.ip_addr_type = CFA_NTUPLE_FILTER_ALLOC_REQ_IP_ADDR_TYPE_IPV4;
4643         req.ip_protocol = keys->basic.ip_proto;
4644
4645         if (keys->basic.n_proto == htons(ETH_P_IPV6)) {
4646                 int i;
4647
4648                 req.ethertype = htons(ETH_P_IPV6);
4649                 req.ip_addr_type =
4650                         CFA_NTUPLE_FILTER_ALLOC_REQ_IP_ADDR_TYPE_IPV6;
4651                 *(struct in6_addr *)&req.src_ipaddr[0] =
4652                         keys->addrs.v6addrs.src;
4653                 *(struct in6_addr *)&req.dst_ipaddr[0] =
4654                         keys->addrs.v6addrs.dst;
4655                 for (i = 0; i < 4; i++) {
4656                         req.src_ipaddr_mask[i] = cpu_to_be32(0xffffffff);
4657                         req.dst_ipaddr_mask[i] = cpu_to_be32(0xffffffff);
4658                 }
4659         } else {
4660                 req.src_ipaddr[0] = keys->addrs.v4addrs.src;
4661                 req.src_ipaddr_mask[0] = cpu_to_be32(0xffffffff);
4662                 req.dst_ipaddr[0] = keys->addrs.v4addrs.dst;
4663                 req.dst_ipaddr_mask[0] = cpu_to_be32(0xffffffff);
4664         }
4665         if (keys->control.flags & FLOW_DIS_ENCAPSULATION) {
4666                 req.enables |= cpu_to_le32(BNXT_NTP_TUNNEL_FLTR_FLAG);
4667                 req.tunnel_type =
4668                         CFA_NTUPLE_FILTER_ALLOC_REQ_TUNNEL_TYPE_ANYTUNNEL;
4669         }
4670
4671         req.src_port = keys->ports.src;
4672         req.src_port_mask = cpu_to_be16(0xffff);
4673         req.dst_port = keys->ports.dst;
4674         req.dst_port_mask = cpu_to_be16(0xffff);
4675
4676         mutex_lock(&bp->hwrm_cmd_lock);
4677         rc = _hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
4678         if (!rc) {
4679                 resp = bnxt_get_hwrm_resp_addr(bp, &req);
4680                 fltr->filter_id = resp->ntuple_filter_id;
4681         }
4682         mutex_unlock(&bp->hwrm_cmd_lock);
4683         return rc;
4684 }
4685 #endif
4686
4687 static int bnxt_hwrm_set_vnic_filter(struct bnxt *bp, u16 vnic_id, u16 idx,
4688                                      u8 *mac_addr)
4689 {
4690         u32 rc = 0;
4691         struct hwrm_cfa_l2_filter_alloc_input req = {0};
4692         struct hwrm_cfa_l2_filter_alloc_output *resp = bp->hwrm_cmd_resp_addr;
4693
4694         bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_CFA_L2_FILTER_ALLOC, -1, -1);
4695         req.flags = cpu_to_le32(CFA_L2_FILTER_ALLOC_REQ_FLAGS_PATH_RX);
4696         if (!BNXT_CHIP_TYPE_NITRO_A0(bp))
4697                 req.flags |=
4698                         cpu_to_le32(CFA_L2_FILTER_ALLOC_REQ_FLAGS_OUTERMOST);
4699         req.dst_id = cpu_to_le16(bp->vnic_info[vnic_id].fw_vnic_id);
4700         req.enables =
4701                 cpu_to_le32(CFA_L2_FILTER_ALLOC_REQ_ENABLES_L2_ADDR |
4702                             CFA_L2_FILTER_ALLOC_REQ_ENABLES_DST_ID |
4703                             CFA_L2_FILTER_ALLOC_REQ_ENABLES_L2_ADDR_MASK);
4704         memcpy(req.l2_addr, mac_addr, ETH_ALEN);
4705         req.l2_addr_mask[0] = 0xff;
4706         req.l2_addr_mask[1] = 0xff;
4707         req.l2_addr_mask[2] = 0xff;
4708         req.l2_addr_mask[3] = 0xff;
4709         req.l2_addr_mask[4] = 0xff;
4710         req.l2_addr_mask[5] = 0xff;
4711
4712         mutex_lock(&bp->hwrm_cmd_lock);
4713         rc = _hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
4714         if (!rc)
4715                 bp->vnic_info[vnic_id].fw_l2_filter_id[idx] =
4716                                                         resp->l2_filter_id;
4717         mutex_unlock(&bp->hwrm_cmd_lock);
4718         return rc;
4719 }
4720
4721 static int bnxt_hwrm_clear_vnic_filter(struct bnxt *bp)
4722 {
4723         u16 i, j, num_of_vnics = 1; /* only vnic 0 supported */
4724         int rc = 0;
4725
4726         /* Any associated ntuple filters will also be cleared by firmware. */
4727         mutex_lock(&bp->hwrm_cmd_lock);
4728         for (i = 0; i < num_of_vnics; i++) {
4729                 struct bnxt_vnic_info *vnic = &bp->vnic_info[i];
4730
4731                 for (j = 0; j < vnic->uc_filter_count; j++) {
4732                         struct hwrm_cfa_l2_filter_free_input req = {0};
4733
4734                         bnxt_hwrm_cmd_hdr_init(bp, &req,
4735                                                HWRM_CFA_L2_FILTER_FREE, -1, -1);
4736
4737                         req.l2_filter_id = vnic->fw_l2_filter_id[j];
4738
4739                         rc = _hwrm_send_message(bp, &req, sizeof(req),
4740                                                 HWRM_CMD_TIMEOUT);
4741                 }
4742                 vnic->uc_filter_count = 0;
4743         }
4744         mutex_unlock(&bp->hwrm_cmd_lock);
4745
4746         return rc;
4747 }
4748
4749 static int bnxt_hwrm_vnic_set_tpa(struct bnxt *bp, u16 vnic_id, u32 tpa_flags)
4750 {
4751         struct bnxt_vnic_info *vnic = &bp->vnic_info[vnic_id];
4752         u16 max_aggs = VNIC_TPA_CFG_REQ_MAX_AGGS_MAX;
4753         struct hwrm_vnic_tpa_cfg_input req = {0};
4754
4755         if (vnic->fw_vnic_id == INVALID_HW_RING_ID)
4756                 return 0;
4757
4758         bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_VNIC_TPA_CFG, -1, -1);
4759
4760         if (tpa_flags) {
4761                 u16 mss = bp->dev->mtu - 40;
4762                 u32 nsegs, n, segs = 0, flags;
4763
4764                 flags = VNIC_TPA_CFG_REQ_FLAGS_TPA |
4765                         VNIC_TPA_CFG_REQ_FLAGS_ENCAP_TPA |
4766                         VNIC_TPA_CFG_REQ_FLAGS_RSC_WND_UPDATE |
4767                         VNIC_TPA_CFG_REQ_FLAGS_AGG_WITH_ECN |
4768                         VNIC_TPA_CFG_REQ_FLAGS_AGG_WITH_SAME_GRE_SEQ;
4769                 if (tpa_flags & BNXT_FLAG_GRO)
4770                         flags |= VNIC_TPA_CFG_REQ_FLAGS_GRO;
4771
4772                 req.flags = cpu_to_le32(flags);
4773
4774                 req.enables =
4775                         cpu_to_le32(VNIC_TPA_CFG_REQ_ENABLES_MAX_AGG_SEGS |
4776                                     VNIC_TPA_CFG_REQ_ENABLES_MAX_AGGS |
4777                                     VNIC_TPA_CFG_REQ_ENABLES_MIN_AGG_LEN);
4778
4779                 /* Number of segs are log2 units, and first packet is not
4780                  * included as part of this units.
4781                  */
4782                 if (mss <= BNXT_RX_PAGE_SIZE) {
4783                         n = BNXT_RX_PAGE_SIZE / mss;
4784                         nsegs = (MAX_SKB_FRAGS - 1) * n;
4785                 } else {
4786                         n = mss / BNXT_RX_PAGE_SIZE;
4787                         if (mss & (BNXT_RX_PAGE_SIZE - 1))
4788                                 n++;
4789                         nsegs = (MAX_SKB_FRAGS - n) / n;
4790                 }
4791
4792                 if (bp->flags & BNXT_FLAG_CHIP_P5) {
4793                         segs = MAX_TPA_SEGS_P5;
4794                         max_aggs = bp->max_tpa;
4795                 } else {
4796                         segs = ilog2(nsegs);
4797                 }
4798                 req.max_agg_segs = cpu_to_le16(segs);
4799                 req.max_aggs = cpu_to_le16(max_aggs);
4800
4801                 req.min_agg_len = cpu_to_le32(512);
4802         }
4803         req.vnic_id = cpu_to_le16(vnic->fw_vnic_id);
4804
4805         return hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
4806 }
4807
4808 static u16 bnxt_cp_ring_from_grp(struct bnxt *bp, struct bnxt_ring_struct *ring)
4809 {
4810         struct bnxt_ring_grp_info *grp_info;
4811
4812         grp_info = &bp->grp_info[ring->grp_idx];
4813         return grp_info->cp_fw_ring_id;
4814 }
4815
4816 static u16 bnxt_cp_ring_for_rx(struct bnxt *bp, struct bnxt_rx_ring_info *rxr)
4817 {
4818         if (bp->flags & BNXT_FLAG_CHIP_P5) {
4819                 struct bnxt_napi *bnapi = rxr->bnapi;
4820                 struct bnxt_cp_ring_info *cpr;
4821
4822                 cpr = bnapi->cp_ring.cp_ring_arr[BNXT_RX_HDL];
4823                 return cpr->cp_ring_struct.fw_ring_id;
4824         } else {
4825                 return bnxt_cp_ring_from_grp(bp, &rxr->rx_ring_struct);
4826         }
4827 }
4828
4829 static u16 bnxt_cp_ring_for_tx(struct bnxt *bp, struct bnxt_tx_ring_info *txr)
4830 {
4831         if (bp->flags & BNXT_FLAG_CHIP_P5) {
4832                 struct bnxt_napi *bnapi = txr->bnapi;
4833                 struct bnxt_cp_ring_info *cpr;
4834
4835                 cpr = bnapi->cp_ring.cp_ring_arr[BNXT_TX_HDL];
4836                 return cpr->cp_ring_struct.fw_ring_id;
4837         } else {
4838                 return bnxt_cp_ring_from_grp(bp, &txr->tx_ring_struct);
4839         }
4840 }
4841
4842 static int bnxt_hwrm_vnic_set_rss(struct bnxt *bp, u16 vnic_id, bool set_rss)
4843 {
4844         u32 i, j, max_rings;
4845         struct bnxt_vnic_info *vnic = &bp->vnic_info[vnic_id];
4846         struct hwrm_vnic_rss_cfg_input req = {0};
4847
4848         if ((bp->flags & BNXT_FLAG_CHIP_P5) ||
4849             vnic->fw_rss_cos_lb_ctx[0] == INVALID_HW_RING_ID)
4850                 return 0;
4851
4852         bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_VNIC_RSS_CFG, -1, -1);
4853         if (set_rss) {
4854                 req.hash_type = cpu_to_le32(bp->rss_hash_cfg);
4855                 req.hash_mode_flags = VNIC_RSS_CFG_REQ_HASH_MODE_FLAGS_DEFAULT;
4856                 if (vnic->flags & BNXT_VNIC_RSS_FLAG) {
4857                         if (BNXT_CHIP_TYPE_NITRO_A0(bp))
4858                                 max_rings = bp->rx_nr_rings - 1;
4859                         else
4860                                 max_rings = bp->rx_nr_rings;
4861                 } else {
4862                         max_rings = 1;
4863                 }
4864
4865                 /* Fill the RSS indirection table with ring group ids */
4866                 for (i = 0, j = 0; i < HW_HASH_INDEX_SIZE; i++, j++) {
4867                         if (j == max_rings)
4868                                 j = 0;
4869                         vnic->rss_table[i] = cpu_to_le16(vnic->fw_grp_ids[j]);
4870                 }
4871
4872                 req.ring_grp_tbl_addr = cpu_to_le64(vnic->rss_table_dma_addr);
4873                 req.hash_key_tbl_addr =
4874                         cpu_to_le64(vnic->rss_hash_key_dma_addr);
4875         }
4876         req.rss_ctx_idx = cpu_to_le16(vnic->fw_rss_cos_lb_ctx[0]);
4877         return hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
4878 }
4879
4880 static int bnxt_hwrm_vnic_set_rss_p5(struct bnxt *bp, u16 vnic_id, bool set_rss)
4881 {
4882         struct bnxt_vnic_info *vnic = &bp->vnic_info[vnic_id];
4883         u32 i, j, k, nr_ctxs, max_rings = bp->rx_nr_rings;
4884         struct bnxt_rx_ring_info *rxr = &bp->rx_ring[0];
4885         struct hwrm_vnic_rss_cfg_input req = {0};
4886
4887         bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_VNIC_RSS_CFG, -1, -1);
4888         req.vnic_id = cpu_to_le16(vnic->fw_vnic_id);
4889         if (!set_rss) {
4890                 hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
4891                 return 0;
4892         }
4893         req.hash_type = cpu_to_le32(bp->rss_hash_cfg);
4894         req.hash_mode_flags = VNIC_RSS_CFG_REQ_HASH_MODE_FLAGS_DEFAULT;
4895         req.ring_grp_tbl_addr = cpu_to_le64(vnic->rss_table_dma_addr);
4896         req.hash_key_tbl_addr = cpu_to_le64(vnic->rss_hash_key_dma_addr);
4897         nr_ctxs = DIV_ROUND_UP(bp->rx_nr_rings, 64);
4898         for (i = 0, k = 0; i < nr_ctxs; i++) {
4899                 __le16 *ring_tbl = vnic->rss_table;
4900                 int rc;
4901
4902                 req.ring_table_pair_index = i;
4903                 req.rss_ctx_idx = cpu_to_le16(vnic->fw_rss_cos_lb_ctx[i]);
4904                 for (j = 0; j < 64; j++) {
4905                         u16 ring_id;
4906
4907                         ring_id = rxr->rx_ring_struct.fw_ring_id;
4908                         *ring_tbl++ = cpu_to_le16(ring_id);
4909                         ring_id = bnxt_cp_ring_for_rx(bp, rxr);
4910                         *ring_tbl++ = cpu_to_le16(ring_id);
4911                         rxr++;
4912                         k++;
4913                         if (k == max_rings) {
4914                                 k = 0;
4915                                 rxr = &bp->rx_ring[0];
4916                         }
4917                 }
4918                 rc = hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
4919                 if (rc)
4920                         return rc;
4921         }
4922         return 0;
4923 }
4924
4925 static int bnxt_hwrm_vnic_set_hds(struct bnxt *bp, u16 vnic_id)
4926 {
4927         struct bnxt_vnic_info *vnic = &bp->vnic_info[vnic_id];
4928         struct hwrm_vnic_plcmodes_cfg_input req = {0};
4929
4930         bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_VNIC_PLCMODES_CFG, -1, -1);
4931         req.flags = cpu_to_le32(VNIC_PLCMODES_CFG_REQ_FLAGS_JUMBO_PLACEMENT |
4932                                 VNIC_PLCMODES_CFG_REQ_FLAGS_HDS_IPV4 |
4933                                 VNIC_PLCMODES_CFG_REQ_FLAGS_HDS_IPV6);
4934         req.enables =
4935                 cpu_to_le32(VNIC_PLCMODES_CFG_REQ_ENABLES_JUMBO_THRESH_VALID |
4936                             VNIC_PLCMODES_CFG_REQ_ENABLES_HDS_THRESHOLD_VALID);
4937         /* thresholds not implemented in firmware yet */
4938         req.jumbo_thresh = cpu_to_le16(bp->rx_copy_thresh);
4939         req.hds_threshold = cpu_to_le16(bp->rx_copy_thresh);
4940         req.vnic_id = cpu_to_le32(vnic->fw_vnic_id);
4941         return hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
4942 }
4943
4944 static void bnxt_hwrm_vnic_ctx_free_one(struct bnxt *bp, u16 vnic_id,
4945                                         u16 ctx_idx)
4946 {
4947         struct hwrm_vnic_rss_cos_lb_ctx_free_input req = {0};
4948
4949         bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_VNIC_RSS_COS_LB_CTX_FREE, -1, -1);
4950         req.rss_cos_lb_ctx_id =
4951                 cpu_to_le16(bp->vnic_info[vnic_id].fw_rss_cos_lb_ctx[ctx_idx]);
4952
4953         hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
4954         bp->vnic_info[vnic_id].fw_rss_cos_lb_ctx[ctx_idx] = INVALID_HW_RING_ID;
4955 }
4956
4957 static void bnxt_hwrm_vnic_ctx_free(struct bnxt *bp)
4958 {
4959         int i, j;
4960
4961         for (i = 0; i < bp->nr_vnics; i++) {
4962                 struct bnxt_vnic_info *vnic = &bp->vnic_info[i];
4963
4964                 for (j = 0; j < BNXT_MAX_CTX_PER_VNIC; j++) {
4965                         if (vnic->fw_rss_cos_lb_ctx[j] != INVALID_HW_RING_ID)
4966                                 bnxt_hwrm_vnic_ctx_free_one(bp, i, j);
4967                 }
4968         }
4969         bp->rsscos_nr_ctxs = 0;
4970 }
4971
4972 static int bnxt_hwrm_vnic_ctx_alloc(struct bnxt *bp, u16 vnic_id, u16 ctx_idx)
4973 {
4974         int rc;
4975         struct hwrm_vnic_rss_cos_lb_ctx_alloc_input req = {0};
4976         struct hwrm_vnic_rss_cos_lb_ctx_alloc_output *resp =
4977                                                 bp->hwrm_cmd_resp_addr;
4978
4979         bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_VNIC_RSS_COS_LB_CTX_ALLOC, -1,
4980                                -1);
4981
4982         mutex_lock(&bp->hwrm_cmd_lock);
4983         rc = _hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
4984         if (!rc)
4985                 bp->vnic_info[vnic_id].fw_rss_cos_lb_ctx[ctx_idx] =
4986                         le16_to_cpu(resp->rss_cos_lb_ctx_id);
4987         mutex_unlock(&bp->hwrm_cmd_lock);
4988
4989         return rc;
4990 }
4991
4992 static u32 bnxt_get_roce_vnic_mode(struct bnxt *bp)
4993 {
4994         if (bp->flags & BNXT_FLAG_ROCE_MIRROR_CAP)
4995                 return VNIC_CFG_REQ_FLAGS_ROCE_MIRRORING_CAPABLE_VNIC_MODE;
4996         return VNIC_CFG_REQ_FLAGS_ROCE_DUAL_VNIC_MODE;
4997 }
4998
4999 int bnxt_hwrm_vnic_cfg(struct bnxt *bp, u16 vnic_id)
5000 {
5001         unsigned int ring = 0, grp_idx;
5002         struct bnxt_vnic_info *vnic = &bp->vnic_info[vnic_id];
5003         struct hwrm_vnic_cfg_input req = {0};
5004         u16 def_vlan = 0;
5005
5006         bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_VNIC_CFG, -1, -1);
5007
5008         if (bp->flags & BNXT_FLAG_CHIP_P5) {
5009                 struct bnxt_rx_ring_info *rxr = &bp->rx_ring[0];
5010
5011                 req.default_rx_ring_id =
5012                         cpu_to_le16(rxr->rx_ring_struct.fw_ring_id);
5013                 req.default_cmpl_ring_id =
5014                         cpu_to_le16(bnxt_cp_ring_for_rx(bp, rxr));
5015                 req.enables =
5016                         cpu_to_le32(VNIC_CFG_REQ_ENABLES_DEFAULT_RX_RING_ID |
5017                                     VNIC_CFG_REQ_ENABLES_DEFAULT_CMPL_RING_ID);
5018                 goto vnic_mru;
5019         }
5020         req.enables = cpu_to_le32(VNIC_CFG_REQ_ENABLES_DFLT_RING_GRP);
5021         /* Only RSS support for now TBD: COS & LB */
5022         if (vnic->fw_rss_cos_lb_ctx[0] != INVALID_HW_RING_ID) {
5023                 req.rss_rule = cpu_to_le16(vnic->fw_rss_cos_lb_ctx[0]);
5024                 req.enables |= cpu_to_le32(VNIC_CFG_REQ_ENABLES_RSS_RULE |
5025                                            VNIC_CFG_REQ_ENABLES_MRU);
5026         } else if (vnic->flags & BNXT_VNIC_RFS_NEW_RSS_FLAG) {
5027                 req.rss_rule =
5028                         cpu_to_le16(bp->vnic_info[0].fw_rss_cos_lb_ctx[0]);
5029                 req.enables |= cpu_to_le32(VNIC_CFG_REQ_ENABLES_RSS_RULE |
5030                                            VNIC_CFG_REQ_ENABLES_MRU);
5031                 req.flags |= cpu_to_le32(VNIC_CFG_REQ_FLAGS_RSS_DFLT_CR_MODE);
5032         } else {
5033                 req.rss_rule = cpu_to_le16(0xffff);
5034         }
5035
5036         if (BNXT_CHIP_TYPE_NITRO_A0(bp) &&
5037             (vnic->fw_rss_cos_lb_ctx[0] != INVALID_HW_RING_ID)) {
5038                 req.cos_rule = cpu_to_le16(vnic->fw_rss_cos_lb_ctx[1]);
5039                 req.enables |= cpu_to_le32(VNIC_CFG_REQ_ENABLES_COS_RULE);
5040         } else {
5041                 req.cos_rule = cpu_to_le16(0xffff);
5042         }
5043
5044         if (vnic->flags & BNXT_VNIC_RSS_FLAG)
5045                 ring = 0;
5046         else if (vnic->flags & BNXT_VNIC_RFS_FLAG)
5047                 ring = vnic_id - 1;
5048         else if ((vnic_id == 1) && BNXT_CHIP_TYPE_NITRO_A0(bp))
5049                 ring = bp->rx_nr_rings - 1;
5050
5051         grp_idx = bp->rx_ring[ring].bnapi->index;
5052         req.dflt_ring_grp = cpu_to_le16(bp->grp_info[grp_idx].fw_grp_id);
5053         req.lb_rule = cpu_to_le16(0xffff);
5054 vnic_mru:
5055         req.mru = cpu_to_le16(bp->dev->mtu + ETH_HLEN + ETH_FCS_LEN +
5056                               VLAN_HLEN);
5057
5058         req.vnic_id = cpu_to_le16(vnic->fw_vnic_id);
5059 #ifdef CONFIG_BNXT_SRIOV
5060         if (BNXT_VF(bp))
5061                 def_vlan = bp->vf.vlan;
5062 #endif
5063         if ((bp->flags & BNXT_FLAG_STRIP_VLAN) || def_vlan)
5064                 req.flags |= cpu_to_le32(VNIC_CFG_REQ_FLAGS_VLAN_STRIP_MODE);
5065         if (!vnic_id && bnxt_ulp_registered(bp->edev, BNXT_ROCE_ULP))
5066                 req.flags |= cpu_to_le32(bnxt_get_roce_vnic_mode(bp));
5067
5068         return hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
5069 }
5070
5071 static int bnxt_hwrm_vnic_free_one(struct bnxt *bp, u16 vnic_id)
5072 {
5073         u32 rc = 0;
5074
5075         if (bp->vnic_info[vnic_id].fw_vnic_id != INVALID_HW_RING_ID) {
5076                 struct hwrm_vnic_free_input req = {0};
5077
5078                 bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_VNIC_FREE, -1, -1);
5079                 req.vnic_id =
5080                         cpu_to_le32(bp->vnic_info[vnic_id].fw_vnic_id);
5081
5082                 rc = hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
5083                 bp->vnic_info[vnic_id].fw_vnic_id = INVALID_HW_RING_ID;
5084         }
5085         return rc;
5086 }
5087
5088 static void bnxt_hwrm_vnic_free(struct bnxt *bp)
5089 {
5090         u16 i;
5091
5092         for (i = 0; i < bp->nr_vnics; i++)
5093                 bnxt_hwrm_vnic_free_one(bp, i);
5094 }
5095
5096 static int bnxt_hwrm_vnic_alloc(struct bnxt *bp, u16 vnic_id,
5097                                 unsigned int start_rx_ring_idx,
5098                                 unsigned int nr_rings)
5099 {
5100         int rc = 0;
5101         unsigned int i, j, grp_idx, end_idx = start_rx_ring_idx + nr_rings;
5102         struct hwrm_vnic_alloc_input req = {0};
5103         struct hwrm_vnic_alloc_output *resp = bp->hwrm_cmd_resp_addr;
5104         struct bnxt_vnic_info *vnic = &bp->vnic_info[vnic_id];
5105
5106         if (bp->flags & BNXT_FLAG_CHIP_P5)
5107                 goto vnic_no_ring_grps;
5108
5109         /* map ring groups to this vnic */
5110         for (i = start_rx_ring_idx, j = 0; i < end_idx; i++, j++) {
5111                 grp_idx = bp->rx_ring[i].bnapi->index;
5112                 if (bp->grp_info[grp_idx].fw_grp_id == INVALID_HW_RING_ID) {
5113                         netdev_err(bp->dev, "Not enough ring groups avail:%x req:%x\n",
5114                                    j, nr_rings);
5115                         break;
5116                 }
5117                 vnic->fw_grp_ids[j] = bp->grp_info[grp_idx].fw_grp_id;
5118         }
5119
5120 vnic_no_ring_grps:
5121         for (i = 0; i < BNXT_MAX_CTX_PER_VNIC; i++)
5122                 vnic->fw_rss_cos_lb_ctx[i] = INVALID_HW_RING_ID;
5123         if (vnic_id == 0)
5124                 req.flags = cpu_to_le32(VNIC_ALLOC_REQ_FLAGS_DEFAULT);
5125
5126         bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_VNIC_ALLOC, -1, -1);
5127
5128         mutex_lock(&bp->hwrm_cmd_lock);
5129         rc = _hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
5130         if (!rc)
5131                 vnic->fw_vnic_id = le32_to_cpu(resp->vnic_id);
5132         mutex_unlock(&bp->hwrm_cmd_lock);
5133         return rc;
5134 }
5135
5136 static int bnxt_hwrm_vnic_qcaps(struct bnxt *bp)
5137 {
5138         struct hwrm_vnic_qcaps_output *resp = bp->hwrm_cmd_resp_addr;
5139         struct hwrm_vnic_qcaps_input req = {0};
5140         int rc;
5141
5142         bp->hw_ring_stats_size = sizeof(struct ctx_hw_stats);
5143         bp->flags &= ~(BNXT_FLAG_NEW_RSS_CAP | BNXT_FLAG_ROCE_MIRROR_CAP);
5144         if (bp->hwrm_spec_code < 0x10600)
5145                 return 0;
5146
5147         bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_VNIC_QCAPS, -1, -1);
5148         mutex_lock(&bp->hwrm_cmd_lock);
5149         rc = _hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
5150         if (!rc) {
5151                 u32 flags = le32_to_cpu(resp->flags);
5152
5153                 if (!(bp->flags & BNXT_FLAG_CHIP_P5) &&
5154                     (flags & VNIC_QCAPS_RESP_FLAGS_RSS_DFLT_CR_CAP))
5155                         bp->flags |= BNXT_FLAG_NEW_RSS_CAP;
5156                 if (flags &
5157                     VNIC_QCAPS_RESP_FLAGS_ROCE_MIRRORING_CAPABLE_VNIC_CAP)
5158                         bp->flags |= BNXT_FLAG_ROCE_MIRROR_CAP;
5159                 bp->max_tpa_v2 = le16_to_cpu(resp->max_aggs_supported);
5160                 if (bp->max_tpa_v2)
5161                         bp->hw_ring_stats_size =
5162                                 sizeof(struct ctx_hw_stats_ext);
5163         }
5164         mutex_unlock(&bp->hwrm_cmd_lock);
5165         return rc;
5166 }
5167
5168 static int bnxt_hwrm_ring_grp_alloc(struct bnxt *bp)
5169 {
5170         u16 i;
5171         u32 rc = 0;
5172
5173         if (bp->flags & BNXT_FLAG_CHIP_P5)
5174                 return 0;
5175
5176         mutex_lock(&bp->hwrm_cmd_lock);
5177         for (i = 0; i < bp->rx_nr_rings; i++) {
5178                 struct hwrm_ring_grp_alloc_input req = {0};
5179                 struct hwrm_ring_grp_alloc_output *resp =
5180                                         bp->hwrm_cmd_resp_addr;
5181                 unsigned int grp_idx = bp->rx_ring[i].bnapi->index;
5182
5183                 bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_RING_GRP_ALLOC, -1, -1);
5184
5185                 req.cr = cpu_to_le16(bp->grp_info[grp_idx].cp_fw_ring_id);
5186                 req.rr = cpu_to_le16(bp->grp_info[grp_idx].rx_fw_ring_id);
5187                 req.ar = cpu_to_le16(bp->grp_info[grp_idx].agg_fw_ring_id);
5188                 req.sc = cpu_to_le16(bp->grp_info[grp_idx].fw_stats_ctx);
5189
5190                 rc = _hwrm_send_message(bp, &req, sizeof(req),
5191                                         HWRM_CMD_TIMEOUT);
5192                 if (rc)
5193                         break;
5194
5195                 bp->grp_info[grp_idx].fw_grp_id =
5196                         le32_to_cpu(resp->ring_group_id);
5197         }
5198         mutex_unlock(&bp->hwrm_cmd_lock);
5199         return rc;
5200 }
5201
5202 static int bnxt_hwrm_ring_grp_free(struct bnxt *bp)
5203 {
5204         u16 i;
5205         u32 rc = 0;
5206         struct hwrm_ring_grp_free_input req = {0};
5207
5208         if (!bp->grp_info || (bp->flags & BNXT_FLAG_CHIP_P5))
5209                 return 0;
5210
5211         bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_RING_GRP_FREE, -1, -1);
5212
5213         mutex_lock(&bp->hwrm_cmd_lock);
5214         for (i = 0; i < bp->cp_nr_rings; i++) {
5215                 if (bp->grp_info[i].fw_grp_id == INVALID_HW_RING_ID)
5216                         continue;
5217                 req.ring_group_id =
5218                         cpu_to_le32(bp->grp_info[i].fw_grp_id);
5219
5220                 rc = _hwrm_send_message(bp, &req, sizeof(req),
5221                                         HWRM_CMD_TIMEOUT);
5222                 bp->grp_info[i].fw_grp_id = INVALID_HW_RING_ID;
5223         }
5224         mutex_unlock(&bp->hwrm_cmd_lock);
5225         return rc;
5226 }
5227
5228 static int hwrm_ring_alloc_send_msg(struct bnxt *bp,
5229                                     struct bnxt_ring_struct *ring,
5230                                     u32 ring_type, u32 map_index)
5231 {
5232         int rc = 0, err = 0;
5233         struct hwrm_ring_alloc_input req = {0};
5234         struct hwrm_ring_alloc_output *resp = bp->hwrm_cmd_resp_addr;
5235         struct bnxt_ring_mem_info *rmem = &ring->ring_mem;
5236         struct bnxt_ring_grp_info *grp_info;
5237         u16 ring_id;
5238
5239         bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_RING_ALLOC, -1, -1);
5240
5241         req.enables = 0;
5242         if (rmem->nr_pages > 1) {
5243                 req.page_tbl_addr = cpu_to_le64(rmem->pg_tbl_map);
5244                 /* Page size is in log2 units */
5245                 req.page_size = BNXT_PAGE_SHIFT;
5246                 req.page_tbl_depth = 1;
5247         } else {
5248                 req.page_tbl_addr =  cpu_to_le64(rmem->dma_arr[0]);
5249         }
5250         req.fbo = 0;
5251         /* Association of ring index with doorbell index and MSIX number */
5252         req.logical_id = cpu_to_le16(map_index);
5253
5254         switch (ring_type) {
5255         case HWRM_RING_ALLOC_TX: {
5256                 struct bnxt_tx_ring_info *txr;
5257
5258                 txr = container_of(ring, struct bnxt_tx_ring_info,
5259                                    tx_ring_struct);
5260                 req.ring_type = RING_ALLOC_REQ_RING_TYPE_TX;
5261                 /* Association of transmit ring with completion ring */
5262                 grp_info = &bp->grp_info[ring->grp_idx];
5263                 req.cmpl_ring_id = cpu_to_le16(bnxt_cp_ring_for_tx(bp, txr));
5264                 req.length = cpu_to_le32(bp->tx_ring_mask + 1);
5265                 req.stat_ctx_id = cpu_to_le32(grp_info->fw_stats_ctx);
5266                 req.queue_id = cpu_to_le16(ring->queue_id);
5267                 break;
5268         }
5269         case HWRM_RING_ALLOC_RX:
5270                 req.ring_type = RING_ALLOC_REQ_RING_TYPE_RX;
5271                 req.length = cpu_to_le32(bp->rx_ring_mask + 1);
5272                 if (bp->flags & BNXT_FLAG_CHIP_P5) {
5273                         u16 flags = 0;
5274
5275                         /* Association of rx ring with stats context */
5276                         grp_info = &bp->grp_info[ring->grp_idx];
5277                         req.rx_buf_size = cpu_to_le16(bp->rx_buf_use_size);
5278                         req.stat_ctx_id = cpu_to_le32(grp_info->fw_stats_ctx);
5279                         req.enables |= cpu_to_le32(
5280                                 RING_ALLOC_REQ_ENABLES_RX_BUF_SIZE_VALID);
5281                         if (NET_IP_ALIGN == 2)
5282                                 flags = RING_ALLOC_REQ_FLAGS_RX_SOP_PAD;
5283                         req.flags = cpu_to_le16(flags);
5284                 }
5285                 break;
5286         case HWRM_RING_ALLOC_AGG:
5287                 if (bp->flags & BNXT_FLAG_CHIP_P5) {
5288                         req.ring_type = RING_ALLOC_REQ_RING_TYPE_RX_AGG;
5289                         /* Association of agg ring with rx ring */
5290                         grp_info = &bp->grp_info[ring->grp_idx];
5291                         req.rx_ring_id = cpu_to_le16(grp_info->rx_fw_ring_id);
5292                         req.rx_buf_size = cpu_to_le16(BNXT_RX_PAGE_SIZE);
5293                         req.stat_ctx_id = cpu_to_le32(grp_info->fw_stats_ctx);
5294                         req.enables |= cpu_to_le32(
5295                                 RING_ALLOC_REQ_ENABLES_RX_RING_ID_VALID |
5296                                 RING_ALLOC_REQ_ENABLES_RX_BUF_SIZE_VALID);
5297                 } else {
5298                         req.ring_type = RING_ALLOC_REQ_RING_TYPE_RX;
5299                 }
5300                 req.length = cpu_to_le32(bp->rx_agg_ring_mask + 1);
5301                 break;
5302         case HWRM_RING_ALLOC_CMPL:
5303                 req.ring_type = RING_ALLOC_REQ_RING_TYPE_L2_CMPL;
5304                 req.length = cpu_to_le32(bp->cp_ring_mask + 1);
5305                 if (bp->flags & BNXT_FLAG_CHIP_P5) {
5306                         /* Association of cp ring with nq */
5307                         grp_info = &bp->grp_info[map_index];
5308                         req.nq_ring_id = cpu_to_le16(grp_info->cp_fw_ring_id);
5309                         req.cq_handle = cpu_to_le64(ring->handle);
5310                         req.enables |= cpu_to_le32(
5311                                 RING_ALLOC_REQ_ENABLES_NQ_RING_ID_VALID);
5312                 } else if (bp->flags & BNXT_FLAG_USING_MSIX) {
5313                         req.int_mode = RING_ALLOC_REQ_INT_MODE_MSIX;
5314                 }
5315                 break;
5316         case HWRM_RING_ALLOC_NQ:
5317                 req.ring_type = RING_ALLOC_REQ_RING_TYPE_NQ;
5318                 req.length = cpu_to_le32(bp->cp_ring_mask + 1);
5319                 if (bp->flags & BNXT_FLAG_USING_MSIX)
5320                         req.int_mode = RING_ALLOC_REQ_INT_MODE_MSIX;
5321                 break;
5322         default:
5323                 netdev_err(bp->dev, "hwrm alloc invalid ring type %d\n",
5324                            ring_type);
5325                 return -1;
5326         }
5327
5328         mutex_lock(&bp->hwrm_cmd_lock);
5329         rc = _hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
5330         err = le16_to_cpu(resp->error_code);
5331         ring_id = le16_to_cpu(resp->ring_id);
5332         mutex_unlock(&bp->hwrm_cmd_lock);
5333
5334         if (rc || err) {
5335                 netdev_err(bp->dev, "hwrm_ring_alloc type %d failed. rc:%x err:%x\n",
5336                            ring_type, rc, err);
5337                 return -EIO;
5338         }
5339         ring->fw_ring_id = ring_id;
5340         return rc;
5341 }
5342
5343 static int bnxt_hwrm_set_async_event_cr(struct bnxt *bp, int idx)
5344 {
5345         int rc;
5346
5347         if (BNXT_PF(bp)) {
5348                 struct hwrm_func_cfg_input req = {0};
5349
5350                 bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_FUNC_CFG, -1, -1);
5351                 req.fid = cpu_to_le16(0xffff);
5352                 req.enables = cpu_to_le32(FUNC_CFG_REQ_ENABLES_ASYNC_EVENT_CR);
5353                 req.async_event_cr = cpu_to_le16(idx);
5354                 rc = hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
5355         } else {
5356                 struct hwrm_func_vf_cfg_input req = {0};
5357
5358                 bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_FUNC_VF_CFG, -1, -1);
5359                 req.enables =
5360                         cpu_to_le32(FUNC_VF_CFG_REQ_ENABLES_ASYNC_EVENT_CR);
5361                 req.async_event_cr = cpu_to_le16(idx);
5362                 rc = hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
5363         }
5364         return rc;
5365 }
5366
5367 static void bnxt_set_db(struct bnxt *bp, struct bnxt_db_info *db, u32 ring_type,
5368                         u32 map_idx, u32 xid)
5369 {
5370         if (bp->flags & BNXT_FLAG_CHIP_P5) {
5371                 if (BNXT_PF(bp))
5372                         db->doorbell = bp->bar1 + 0x10000;
5373                 else
5374                         db->doorbell = bp->bar1 + 0x4000;
5375                 switch (ring_type) {
5376                 case HWRM_RING_ALLOC_TX:
5377                         db->db_key64 = DBR_PATH_L2 | DBR_TYPE_SQ;
5378                         break;
5379                 case HWRM_RING_ALLOC_RX:
5380                 case HWRM_RING_ALLOC_AGG:
5381                         db->db_key64 = DBR_PATH_L2 | DBR_TYPE_SRQ;
5382                         break;
5383                 case HWRM_RING_ALLOC_CMPL:
5384                         db->db_key64 = DBR_PATH_L2;
5385                         break;
5386                 case HWRM_RING_ALLOC_NQ:
5387                         db->db_key64 = DBR_PATH_L2;
5388                         break;
5389                 }
5390                 db->db_key64 |= (u64)xid << DBR_XID_SFT;
5391         } else {
5392                 db->doorbell = bp->bar1 + map_idx * 0x80;
5393                 switch (ring_type) {
5394                 case HWRM_RING_ALLOC_TX:
5395                         db->db_key32 = DB_KEY_TX;
5396                         break;
5397                 case HWRM_RING_ALLOC_RX:
5398                 case HWRM_RING_ALLOC_AGG:
5399                         db->db_key32 = DB_KEY_RX;
5400                         break;
5401                 case HWRM_RING_ALLOC_CMPL:
5402                         db->db_key32 = DB_KEY_CP;
5403                         break;
5404                 }
5405         }
5406 }
5407
5408 static int bnxt_hwrm_ring_alloc(struct bnxt *bp)
5409 {
5410         bool agg_rings = !!(bp->flags & BNXT_FLAG_AGG_RINGS);
5411         int i, rc = 0;
5412         u32 type;
5413
5414         if (bp->flags & BNXT_FLAG_CHIP_P5)
5415                 type = HWRM_RING_ALLOC_NQ;
5416         else
5417                 type = HWRM_RING_ALLOC_CMPL;
5418         for (i = 0; i < bp->cp_nr_rings; i++) {
5419                 struct bnxt_napi *bnapi = bp->bnapi[i];
5420                 struct bnxt_cp_ring_info *cpr = &bnapi->cp_ring;
5421                 struct bnxt_ring_struct *ring = &cpr->cp_ring_struct;
5422                 u32 map_idx = ring->map_idx;
5423                 unsigned int vector;
5424
5425                 vector = bp->irq_tbl[map_idx].vector;
5426                 disable_irq_nosync(vector);
5427                 rc = hwrm_ring_alloc_send_msg(bp, ring, type, map_idx);
5428                 if (rc) {
5429                         enable_irq(vector);
5430                         goto err_out;
5431                 }
5432                 bnxt_set_db(bp, &cpr->cp_db, type, map_idx, ring->fw_ring_id);
5433                 bnxt_db_nq(bp, &cpr->cp_db, cpr->cp_raw_cons);
5434                 enable_irq(vector);
5435                 bp->grp_info[i].cp_fw_ring_id = ring->fw_ring_id;
5436
5437                 if (!i) {
5438                         rc = bnxt_hwrm_set_async_event_cr(bp, ring->fw_ring_id);
5439                         if (rc)
5440                                 netdev_warn(bp->dev, "Failed to set async event completion ring.\n");
5441                 }
5442         }
5443
5444         type = HWRM_RING_ALLOC_TX;
5445         for (i = 0; i < bp->tx_nr_rings; i++) {
5446                 struct bnxt_tx_ring_info *txr = &bp->tx_ring[i];
5447                 struct bnxt_ring_struct *ring;
5448                 u32 map_idx;
5449
5450                 if (bp->flags & BNXT_FLAG_CHIP_P5) {
5451                         struct bnxt_napi *bnapi = txr->bnapi;
5452                         struct bnxt_cp_ring_info *cpr, *cpr2;
5453                         u32 type2 = HWRM_RING_ALLOC_CMPL;
5454
5455                         cpr = &bnapi->cp_ring;
5456                         cpr2 = cpr->cp_ring_arr[BNXT_TX_HDL];
5457                         ring = &cpr2->cp_ring_struct;
5458                         ring->handle = BNXT_TX_HDL;
5459                         map_idx = bnapi->index;
5460                         rc = hwrm_ring_alloc_send_msg(bp, ring, type2, map_idx);
5461                         if (rc)
5462                                 goto err_out;
5463                         bnxt_set_db(bp, &cpr2->cp_db, type2, map_idx,
5464                                     ring->fw_ring_id);
5465                         bnxt_db_cq(bp, &cpr2->cp_db, cpr2->cp_raw_cons);
5466                 }
5467                 ring = &txr->tx_ring_struct;
5468                 map_idx = i;
5469                 rc = hwrm_ring_alloc_send_msg(bp, ring, type, map_idx);
5470                 if (rc)
5471                         goto err_out;
5472                 bnxt_set_db(bp, &txr->tx_db, type, map_idx, ring->fw_ring_id);
5473         }
5474
5475         type = HWRM_RING_ALLOC_RX;
5476         for (i = 0; i < bp->rx_nr_rings; i++) {
5477                 struct bnxt_rx_ring_info *rxr = &bp->rx_ring[i];
5478                 struct bnxt_ring_struct *ring = &rxr->rx_ring_struct;
5479                 struct bnxt_napi *bnapi = rxr->bnapi;
5480                 u32 map_idx = bnapi->index;
5481
5482                 rc = hwrm_ring_alloc_send_msg(bp, ring, type, map_idx);
5483                 if (rc)
5484                         goto err_out;
5485                 bnxt_set_db(bp, &rxr->rx_db, type, map_idx, ring->fw_ring_id);
5486                 /* If we have agg rings, post agg buffers first. */
5487                 if (!agg_rings)
5488                         bnxt_db_write(bp, &rxr->rx_db, rxr->rx_prod);
5489                 bp->grp_info[map_idx].rx_fw_ring_id = ring->fw_ring_id;
5490                 if (bp->flags & BNXT_FLAG_CHIP_P5) {
5491                         struct bnxt_cp_ring_info *cpr = &bnapi->cp_ring;
5492                         u32 type2 = HWRM_RING_ALLOC_CMPL;
5493                         struct bnxt_cp_ring_info *cpr2;
5494
5495                         cpr2 = cpr->cp_ring_arr[BNXT_RX_HDL];
5496                         ring = &cpr2->cp_ring_struct;
5497                         ring->handle = BNXT_RX_HDL;
5498                         rc = hwrm_ring_alloc_send_msg(bp, ring, type2, map_idx);
5499                         if (rc)
5500                                 goto err_out;
5501                         bnxt_set_db(bp, &cpr2->cp_db, type2, map_idx,
5502                                     ring->fw_ring_id);
5503                         bnxt_db_cq(bp, &cpr2->cp_db, cpr2->cp_raw_cons);
5504                 }
5505         }
5506
5507         if (agg_rings) {
5508                 type = HWRM_RING_ALLOC_AGG;
5509                 for (i = 0; i < bp->rx_nr_rings; i++) {
5510                         struct bnxt_rx_ring_info *rxr = &bp->rx_ring[i];
5511                         struct bnxt_ring_struct *ring =
5512                                                 &rxr->rx_agg_ring_struct;
5513                         u32 grp_idx = ring->grp_idx;
5514                         u32 map_idx = grp_idx + bp->rx_nr_rings;
5515
5516                         rc = hwrm_ring_alloc_send_msg(bp, ring, type, map_idx);
5517                         if (rc)
5518                                 goto err_out;
5519
5520                         bnxt_set_db(bp, &rxr->rx_agg_db, type, map_idx,
5521                                     ring->fw_ring_id);
5522                         bnxt_db_write(bp, &rxr->rx_agg_db, rxr->rx_agg_prod);
5523                         bnxt_db_write(bp, &rxr->rx_db, rxr->rx_prod);
5524                         bp->grp_info[grp_idx].agg_fw_ring_id = ring->fw_ring_id;
5525                 }
5526         }
5527 err_out:
5528         return rc;
5529 }
5530
5531 static int hwrm_ring_free_send_msg(struct bnxt *bp,
5532                                    struct bnxt_ring_struct *ring,
5533                                    u32 ring_type, int cmpl_ring_id)
5534 {
5535         int rc;
5536         struct hwrm_ring_free_input req = {0};
5537         struct hwrm_ring_free_output *resp = bp->hwrm_cmd_resp_addr;
5538         u16 error_code;
5539
5540         if (test_bit(BNXT_STATE_FW_FATAL_COND, &bp->state))
5541                 return 0;
5542
5543         bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_RING_FREE, cmpl_ring_id, -1);
5544         req.ring_type = ring_type;
5545         req.ring_id = cpu_to_le16(ring->fw_ring_id);
5546
5547         mutex_lock(&bp->hwrm_cmd_lock);
5548         rc = _hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
5549         error_code = le16_to_cpu(resp->error_code);
5550         mutex_unlock(&bp->hwrm_cmd_lock);
5551
5552         if (rc || error_code) {
5553                 netdev_err(bp->dev, "hwrm_ring_free type %d failed. rc:%x err:%x\n",
5554                            ring_type, rc, error_code);
5555                 return -EIO;
5556         }
5557         return 0;
5558 }
5559
5560 static void bnxt_hwrm_ring_free(struct bnxt *bp, bool close_path)
5561 {
5562         u32 type;
5563         int i;
5564
5565         if (!bp->bnapi)
5566                 return;
5567
5568         for (i = 0; i < bp->tx_nr_rings; i++) {
5569                 struct bnxt_tx_ring_info *txr = &bp->tx_ring[i];
5570                 struct bnxt_ring_struct *ring = &txr->tx_ring_struct;
5571
5572                 if (ring->fw_ring_id != INVALID_HW_RING_ID) {
5573                         u32 cmpl_ring_id = bnxt_cp_ring_for_tx(bp, txr);
5574
5575                         hwrm_ring_free_send_msg(bp, ring,
5576                                                 RING_FREE_REQ_RING_TYPE_TX,
5577                                                 close_path ? cmpl_ring_id :
5578                                                 INVALID_HW_RING_ID);
5579                         ring->fw_ring_id = INVALID_HW_RING_ID;
5580                 }
5581         }
5582
5583         for (i = 0; i < bp->rx_nr_rings; i++) {
5584                 struct bnxt_rx_ring_info *rxr = &bp->rx_ring[i];
5585                 struct bnxt_ring_struct *ring = &rxr->rx_ring_struct;
5586                 u32 grp_idx = rxr->bnapi->index;
5587
5588                 if (ring->fw_ring_id != INVALID_HW_RING_ID) {
5589                         u32 cmpl_ring_id = bnxt_cp_ring_for_rx(bp, rxr);
5590
5591                         hwrm_ring_free_send_msg(bp, ring,
5592                                                 RING_FREE_REQ_RING_TYPE_RX,
5593                                                 close_path ? cmpl_ring_id :
5594                                                 INVALID_HW_RING_ID);
5595                         ring->fw_ring_id = INVALID_HW_RING_ID;
5596                         bp->grp_info[grp_idx].rx_fw_ring_id =
5597                                 INVALID_HW_RING_ID;
5598                 }
5599         }
5600
5601         if (bp->flags & BNXT_FLAG_CHIP_P5)
5602                 type = RING_FREE_REQ_RING_TYPE_RX_AGG;
5603         else
5604                 type = RING_FREE_REQ_RING_TYPE_RX;
5605         for (i = 0; i < bp->rx_nr_rings; i++) {
5606                 struct bnxt_rx_ring_info *rxr = &bp->rx_ring[i];
5607                 struct bnxt_ring_struct *ring = &rxr->rx_agg_ring_struct;
5608                 u32 grp_idx = rxr->bnapi->index;
5609
5610                 if (ring->fw_ring_id != INVALID_HW_RING_ID) {
5611                         u32 cmpl_ring_id = bnxt_cp_ring_for_rx(bp, rxr);
5612
5613                         hwrm_ring_free_send_msg(bp, ring, type,
5614                                                 close_path ? cmpl_ring_id :
5615                                                 INVALID_HW_RING_ID);
5616                         ring->fw_ring_id = INVALID_HW_RING_ID;
5617                         bp->grp_info[grp_idx].agg_fw_ring_id =
5618                                 INVALID_HW_RING_ID;
5619                 }
5620         }
5621
5622         /* The completion rings are about to be freed.  After that the
5623          * IRQ doorbell will not work anymore.  So we need to disable
5624          * IRQ here.
5625          */
5626         bnxt_disable_int_sync(bp);
5627
5628         if (bp->flags & BNXT_FLAG_CHIP_P5)
5629                 type = RING_FREE_REQ_RING_TYPE_NQ;
5630         else
5631                 type = RING_FREE_REQ_RING_TYPE_L2_CMPL;
5632         for (i = 0; i < bp->cp_nr_rings; i++) {
5633                 struct bnxt_napi *bnapi = bp->bnapi[i];
5634                 struct bnxt_cp_ring_info *cpr = &bnapi->cp_ring;
5635                 struct bnxt_ring_struct *ring;
5636                 int j;
5637
5638                 for (j = 0; j < 2; j++) {
5639                         struct bnxt_cp_ring_info *cpr2 = cpr->cp_ring_arr[j];
5640
5641                         if (cpr2) {
5642                                 ring = &cpr2->cp_ring_struct;
5643                                 if (ring->fw_ring_id == INVALID_HW_RING_ID)
5644                                         continue;
5645                                 hwrm_ring_free_send_msg(bp, ring,
5646                                         RING_FREE_REQ_RING_TYPE_L2_CMPL,
5647                                         INVALID_HW_RING_ID);
5648                                 ring->fw_ring_id = INVALID_HW_RING_ID;
5649                         }
5650                 }
5651                 ring = &cpr->cp_ring_struct;
5652                 if (ring->fw_ring_id != INVALID_HW_RING_ID) {
5653                         hwrm_ring_free_send_msg(bp, ring, type,
5654                                                 INVALID_HW_RING_ID);
5655                         ring->fw_ring_id = INVALID_HW_RING_ID;
5656                         bp->grp_info[i].cp_fw_ring_id = INVALID_HW_RING_ID;
5657                 }
5658         }
5659 }
5660
5661 static int bnxt_trim_rings(struct bnxt *bp, int *rx, int *tx, int max,
5662                            bool shared);
5663
5664 static int bnxt_hwrm_get_rings(struct bnxt *bp)
5665 {
5666         struct hwrm_func_qcfg_output *resp = bp->hwrm_cmd_resp_addr;
5667         struct bnxt_hw_resc *hw_resc = &bp->hw_resc;
5668         struct hwrm_func_qcfg_input req = {0};
5669         int rc;
5670
5671         if (bp->hwrm_spec_code < 0x10601)
5672                 return 0;
5673
5674         bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_FUNC_QCFG, -1, -1);
5675         req.fid = cpu_to_le16(0xffff);
5676         mutex_lock(&bp->hwrm_cmd_lock);
5677         rc = _hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
5678         if (rc) {
5679                 mutex_unlock(&bp->hwrm_cmd_lock);
5680                 return rc;
5681         }
5682
5683         hw_resc->resv_tx_rings = le16_to_cpu(resp->alloc_tx_rings);
5684         if (BNXT_NEW_RM(bp)) {
5685                 u16 cp, stats;
5686
5687                 hw_resc->resv_rx_rings = le16_to_cpu(resp->alloc_rx_rings);
5688                 hw_resc->resv_hw_ring_grps =
5689                         le32_to_cpu(resp->alloc_hw_ring_grps);
5690                 hw_resc->resv_vnics = le16_to_cpu(resp->alloc_vnics);
5691                 cp = le16_to_cpu(resp->alloc_cmpl_rings);
5692                 stats = le16_to_cpu(resp->alloc_stat_ctx);
5693                 hw_resc->resv_irqs = cp;
5694                 if (bp->flags & BNXT_FLAG_CHIP_P5) {
5695                         int rx = hw_resc->resv_rx_rings;
5696                         int tx = hw_resc->resv_tx_rings;
5697
5698                         if (bp->flags & BNXT_FLAG_AGG_RINGS)
5699                                 rx >>= 1;
5700                         if (cp < (rx + tx)) {
5701                                 bnxt_trim_rings(bp, &rx, &tx, cp, false);
5702                                 if (bp->flags & BNXT_FLAG_AGG_RINGS)
5703                                         rx <<= 1;
5704                                 hw_resc->resv_rx_rings = rx;
5705                                 hw_resc->resv_tx_rings = tx;
5706                         }
5707                         hw_resc->resv_irqs = le16_to_cpu(resp->alloc_msix);
5708                         hw_resc->resv_hw_ring_grps = rx;
5709                 }
5710                 hw_resc->resv_cp_rings = cp;
5711                 hw_resc->resv_stat_ctxs = stats;
5712         }
5713         mutex_unlock(&bp->hwrm_cmd_lock);
5714         return 0;
5715 }
5716
5717 /* Caller must hold bp->hwrm_cmd_lock */
5718 int __bnxt_hwrm_get_tx_rings(struct bnxt *bp, u16 fid, int *tx_rings)
5719 {
5720         struct hwrm_func_qcfg_output *resp = bp->hwrm_cmd_resp_addr;
5721         struct hwrm_func_qcfg_input req = {0};
5722         int rc;
5723
5724         if (bp->hwrm_spec_code < 0x10601)
5725                 return 0;
5726
5727         bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_FUNC_QCFG, -1, -1);
5728         req.fid = cpu_to_le16(fid);
5729         rc = _hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
5730         if (!rc)
5731                 *tx_rings = le16_to_cpu(resp->alloc_tx_rings);
5732
5733         return rc;
5734 }
5735
5736 static bool bnxt_rfs_supported(struct bnxt *bp);
5737
5738 static void
5739 __bnxt_hwrm_reserve_pf_rings(struct bnxt *bp, struct hwrm_func_cfg_input *req,
5740                              int tx_rings, int rx_rings, int ring_grps,
5741                              int cp_rings, int stats, int vnics)
5742 {
5743         u32 enables = 0;
5744
5745         bnxt_hwrm_cmd_hdr_init(bp, req, HWRM_FUNC_CFG, -1, -1);
5746         req->fid = cpu_to_le16(0xffff);
5747         enables |= tx_rings ? FUNC_CFG_REQ_ENABLES_NUM_TX_RINGS : 0;
5748         req->num_tx_rings = cpu_to_le16(tx_rings);
5749         if (BNXT_NEW_RM(bp)) {
5750                 enables |= rx_rings ? FUNC_CFG_REQ_ENABLES_NUM_RX_RINGS : 0;
5751                 enables |= stats ? FUNC_CFG_REQ_ENABLES_NUM_STAT_CTXS : 0;
5752                 if (bp->flags & BNXT_FLAG_CHIP_P5) {
5753                         enables |= cp_rings ? FUNC_CFG_REQ_ENABLES_NUM_MSIX : 0;
5754                         enables |= tx_rings + ring_grps ?
5755                                    FUNC_CFG_REQ_ENABLES_NUM_CMPL_RINGS : 0;
5756                         enables |= rx_rings ?
5757                                 FUNC_CFG_REQ_ENABLES_NUM_RSSCOS_CTXS : 0;
5758                 } else {
5759                         enables |= cp_rings ?
5760                                    FUNC_CFG_REQ_ENABLES_NUM_CMPL_RINGS : 0;
5761                         enables |= ring_grps ?
5762                                    FUNC_CFG_REQ_ENABLES_NUM_HW_RING_GRPS |
5763                                    FUNC_CFG_REQ_ENABLES_NUM_RSSCOS_CTXS : 0;
5764                 }
5765                 enables |= vnics ? FUNC_CFG_REQ_ENABLES_NUM_VNICS : 0;
5766
5767                 req->num_rx_rings = cpu_to_le16(rx_rings);
5768                 if (bp->flags & BNXT_FLAG_CHIP_P5) {
5769                         req->num_cmpl_rings = cpu_to_le16(tx_rings + ring_grps);
5770                         req->num_msix = cpu_to_le16(cp_rings);
5771                         req->num_rsscos_ctxs =
5772                                 cpu_to_le16(DIV_ROUND_UP(ring_grps, 64));
5773                 } else {
5774                         req->num_cmpl_rings = cpu_to_le16(cp_rings);
5775                         req->num_hw_ring_grps = cpu_to_le16(ring_grps);
5776                         req->num_rsscos_ctxs = cpu_to_le16(1);
5777                         if (!(bp->flags & BNXT_FLAG_NEW_RSS_CAP) &&
5778                             bnxt_rfs_supported(bp))
5779                                 req->num_rsscos_ctxs =
5780                                         cpu_to_le16(ring_grps + 1);
5781                 }
5782                 req->num_stat_ctxs = cpu_to_le16(stats);
5783                 req->num_vnics = cpu_to_le16(vnics);
5784         }
5785         req->enables = cpu_to_le32(enables);
5786 }
5787
5788 static void
5789 __bnxt_hwrm_reserve_vf_rings(struct bnxt *bp,
5790                              struct hwrm_func_vf_cfg_input *req, int tx_rings,
5791                              int rx_rings, int ring_grps, int cp_rings,
5792                              int stats, int vnics)
5793 {
5794         u32 enables = 0;
5795
5796         bnxt_hwrm_cmd_hdr_init(bp, req, HWRM_FUNC_VF_CFG, -1, -1);
5797         enables |= tx_rings ? FUNC_VF_CFG_REQ_ENABLES_NUM_TX_RINGS : 0;
5798         enables |= rx_rings ? FUNC_VF_CFG_REQ_ENABLES_NUM_RX_RINGS |
5799                               FUNC_VF_CFG_REQ_ENABLES_NUM_RSSCOS_CTXS : 0;
5800         enables |= stats ? FUNC_VF_CFG_REQ_ENABLES_NUM_STAT_CTXS : 0;
5801         if (bp->flags & BNXT_FLAG_CHIP_P5) {
5802                 enables |= tx_rings + ring_grps ?
5803                            FUNC_VF_CFG_REQ_ENABLES_NUM_CMPL_RINGS : 0;
5804         } else {
5805                 enables |= cp_rings ?
5806                            FUNC_VF_CFG_REQ_ENABLES_NUM_CMPL_RINGS : 0;
5807                 enables |= ring_grps ?
5808                            FUNC_VF_CFG_REQ_ENABLES_NUM_HW_RING_GRPS : 0;
5809         }
5810         enables |= vnics ? FUNC_VF_CFG_REQ_ENABLES_NUM_VNICS : 0;
5811         enables |= FUNC_VF_CFG_REQ_ENABLES_NUM_L2_CTXS;
5812
5813         req->num_l2_ctxs = cpu_to_le16(BNXT_VF_MAX_L2_CTX);
5814         req->num_tx_rings = cpu_to_le16(tx_rings);
5815         req->num_rx_rings = cpu_to_le16(rx_rings);
5816         if (bp->flags & BNXT_FLAG_CHIP_P5) {
5817                 req->num_cmpl_rings = cpu_to_le16(tx_rings + ring_grps);
5818                 req->num_rsscos_ctxs = cpu_to_le16(DIV_ROUND_UP(ring_grps, 64));
5819         } else {
5820                 req->num_cmpl_rings = cpu_to_le16(cp_rings);
5821                 req->num_hw_ring_grps = cpu_to_le16(ring_grps);
5822                 req->num_rsscos_ctxs = cpu_to_le16(BNXT_VF_MAX_RSS_CTX);
5823         }
5824         req->num_stat_ctxs = cpu_to_le16(stats);
5825         req->num_vnics = cpu_to_le16(vnics);
5826
5827         req->enables = cpu_to_le32(enables);
5828 }
5829
5830 static int
5831 bnxt_hwrm_reserve_pf_rings(struct bnxt *bp, int tx_rings, int rx_rings,
5832                            int ring_grps, int cp_rings, int stats, int vnics)
5833 {
5834         struct hwrm_func_cfg_input req = {0};
5835         int rc;
5836
5837         __bnxt_hwrm_reserve_pf_rings(bp, &req, tx_rings, rx_rings, ring_grps,
5838                                      cp_rings, stats, vnics);
5839         if (!req.enables)
5840                 return 0;
5841
5842         rc = hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
5843         if (rc)
5844                 return rc;
5845
5846         if (bp->hwrm_spec_code < 0x10601)
5847                 bp->hw_resc.resv_tx_rings = tx_rings;
5848
5849         rc = bnxt_hwrm_get_rings(bp);
5850         return rc;
5851 }
5852
5853 static int
5854 bnxt_hwrm_reserve_vf_rings(struct bnxt *bp, int tx_rings, int rx_rings,
5855                            int ring_grps, int cp_rings, int stats, int vnics)
5856 {
5857         struct hwrm_func_vf_cfg_input req = {0};
5858         int rc;
5859
5860         if (!BNXT_NEW_RM(bp)) {
5861                 bp->hw_resc.resv_tx_rings = tx_rings;
5862                 return 0;
5863         }
5864
5865         __bnxt_hwrm_reserve_vf_rings(bp, &req, tx_rings, rx_rings, ring_grps,
5866                                      cp_rings, stats, vnics);
5867         rc = hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
5868         if (rc)
5869                 return rc;
5870
5871         rc = bnxt_hwrm_get_rings(bp);
5872         return rc;
5873 }
5874
5875 static int bnxt_hwrm_reserve_rings(struct bnxt *bp, int tx, int rx, int grp,
5876                                    int cp, int stat, int vnic)
5877 {
5878         if (BNXT_PF(bp))
5879                 return bnxt_hwrm_reserve_pf_rings(bp, tx, rx, grp, cp, stat,
5880                                                   vnic);
5881         else
5882                 return bnxt_hwrm_reserve_vf_rings(bp, tx, rx, grp, cp, stat,
5883                                                   vnic);
5884 }
5885
5886 int bnxt_nq_rings_in_use(struct bnxt *bp)
5887 {
5888         int cp = bp->cp_nr_rings;
5889         int ulp_msix, ulp_base;
5890
5891         ulp_msix = bnxt_get_ulp_msix_num(bp);
5892         if (ulp_msix) {
5893                 ulp_base = bnxt_get_ulp_msix_base(bp);
5894                 cp += ulp_msix;
5895                 if ((ulp_base + ulp_msix) > cp)
5896                         cp = ulp_base + ulp_msix;
5897         }
5898         return cp;
5899 }
5900
5901 static int bnxt_cp_rings_in_use(struct bnxt *bp)
5902 {
5903         int cp;
5904
5905         if (!(bp->flags & BNXT_FLAG_CHIP_P5))
5906                 return bnxt_nq_rings_in_use(bp);
5907
5908         cp = bp->tx_nr_rings + bp->rx_nr_rings;
5909         return cp;
5910 }
5911
5912 static int bnxt_get_func_stat_ctxs(struct bnxt *bp)
5913 {
5914         int ulp_stat = bnxt_get_ulp_stat_ctxs(bp);
5915         int cp = bp->cp_nr_rings;
5916
5917         if (!ulp_stat)
5918                 return cp;
5919
5920         if (bnxt_nq_rings_in_use(bp) > cp + bnxt_get_ulp_msix_num(bp))
5921                 return bnxt_get_ulp_msix_base(bp) + ulp_stat;
5922
5923         return cp + ulp_stat;
5924 }
5925
5926 static bool bnxt_need_reserve_rings(struct bnxt *bp)
5927 {
5928         struct bnxt_hw_resc *hw_resc = &bp->hw_resc;
5929         int cp = bnxt_cp_rings_in_use(bp);
5930         int nq = bnxt_nq_rings_in_use(bp);
5931         int rx = bp->rx_nr_rings, stat;
5932         int vnic = 1, grp = rx;
5933
5934         if (bp->hwrm_spec_code < 0x10601)
5935                 return false;
5936
5937         if (hw_resc->resv_tx_rings != bp->tx_nr_rings)
5938                 return true;
5939
5940         if ((bp->flags & BNXT_FLAG_RFS) && !(bp->flags & BNXT_FLAG_CHIP_P5))
5941                 vnic = rx + 1;
5942         if (bp->flags & BNXT_FLAG_AGG_RINGS)
5943                 rx <<= 1;
5944         stat = bnxt_get_func_stat_ctxs(bp);
5945         if (BNXT_NEW_RM(bp) &&
5946             (hw_resc->resv_rx_rings != rx || hw_resc->resv_cp_rings != cp ||
5947              hw_resc->resv_vnics != vnic || hw_resc->resv_stat_ctxs != stat ||
5948              (hw_resc->resv_hw_ring_grps != grp &&
5949               !(bp->flags & BNXT_FLAG_CHIP_P5))))
5950                 return true;
5951         if ((bp->flags & BNXT_FLAG_CHIP_P5) && BNXT_PF(bp) &&
5952             hw_resc->resv_irqs != nq)
5953                 return true;
5954         return false;
5955 }
5956
5957 static int __bnxt_reserve_rings(struct bnxt *bp)
5958 {
5959         struct bnxt_hw_resc *hw_resc = &bp->hw_resc;
5960         int cp = bnxt_nq_rings_in_use(bp);
5961         int tx = bp->tx_nr_rings;
5962         int rx = bp->rx_nr_rings;
5963         int grp, rx_rings, rc;
5964         int vnic = 1, stat;
5965         bool sh = false;
5966
5967         if (!bnxt_need_reserve_rings(bp))
5968                 return 0;
5969
5970         if (bp->flags & BNXT_FLAG_SHARED_RINGS)
5971                 sh = true;
5972         if ((bp->flags & BNXT_FLAG_RFS) && !(bp->flags & BNXT_FLAG_CHIP_P5))
5973                 vnic = rx + 1;
5974         if (bp->flags & BNXT_FLAG_AGG_RINGS)
5975                 rx <<= 1;
5976         grp = bp->rx_nr_rings;
5977         stat = bnxt_get_func_stat_ctxs(bp);
5978
5979         rc = bnxt_hwrm_reserve_rings(bp, tx, rx, grp, cp, stat, vnic);
5980         if (rc)
5981                 return rc;
5982
5983         tx = hw_resc->resv_tx_rings;
5984         if (BNXT_NEW_RM(bp)) {
5985                 rx = hw_resc->resv_rx_rings;
5986                 cp = hw_resc->resv_irqs;
5987                 grp = hw_resc->resv_hw_ring_grps;
5988                 vnic = hw_resc->resv_vnics;
5989                 stat = hw_resc->resv_stat_ctxs;
5990         }
5991
5992         rx_rings = rx;
5993         if (bp->flags & BNXT_FLAG_AGG_RINGS) {
5994                 if (rx >= 2) {
5995                         rx_rings = rx >> 1;
5996                 } else {
5997                         if (netif_running(bp->dev))
5998                                 return -ENOMEM;
5999
6000                         bp->flags &= ~BNXT_FLAG_AGG_RINGS;
6001                         bp->flags |= BNXT_FLAG_NO_AGG_RINGS;
6002                         bp->dev->hw_features &= ~NETIF_F_LRO;
6003                         bp->dev->features &= ~NETIF_F_LRO;
6004                         bnxt_set_ring_params(bp);
6005                 }
6006         }
6007         rx_rings = min_t(int, rx_rings, grp);
6008         cp = min_t(int, cp, bp->cp_nr_rings);
6009         if (stat > bnxt_get_ulp_stat_ctxs(bp))
6010                 stat -= bnxt_get_ulp_stat_ctxs(bp);
6011         cp = min_t(int, cp, stat);
6012         rc = bnxt_trim_rings(bp, &rx_rings, &tx, cp, sh);
6013         if (bp->flags & BNXT_FLAG_AGG_RINGS)
6014                 rx = rx_rings << 1;
6015         cp = sh ? max_t(int, tx, rx_rings) : tx + rx_rings;
6016         bp->tx_nr_rings = tx;
6017         bp->rx_nr_rings = rx_rings;
6018         bp->cp_nr_rings = cp;
6019
6020         if (!tx || !rx || !cp || !grp || !vnic || !stat)
6021                 return -ENOMEM;
6022
6023         return rc;
6024 }
6025
6026 static int bnxt_hwrm_check_vf_rings(struct bnxt *bp, int tx_rings, int rx_rings,
6027                                     int ring_grps, int cp_rings, int stats,
6028                                     int vnics)
6029 {
6030         struct hwrm_func_vf_cfg_input req = {0};
6031         u32 flags;
6032         int rc;
6033
6034         if (!BNXT_NEW_RM(bp))
6035                 return 0;
6036
6037         __bnxt_hwrm_reserve_vf_rings(bp, &req, tx_rings, rx_rings, ring_grps,
6038                                      cp_rings, stats, vnics);
6039         flags = FUNC_VF_CFG_REQ_FLAGS_TX_ASSETS_TEST |
6040                 FUNC_VF_CFG_REQ_FLAGS_RX_ASSETS_TEST |
6041                 FUNC_VF_CFG_REQ_FLAGS_CMPL_ASSETS_TEST |
6042                 FUNC_VF_CFG_REQ_FLAGS_STAT_CTX_ASSETS_TEST |
6043                 FUNC_VF_CFG_REQ_FLAGS_VNIC_ASSETS_TEST |
6044                 FUNC_VF_CFG_REQ_FLAGS_RSSCOS_CTX_ASSETS_TEST;
6045         if (!(bp->flags & BNXT_FLAG_CHIP_P5))
6046                 flags |= FUNC_VF_CFG_REQ_FLAGS_RING_GRP_ASSETS_TEST;
6047
6048         req.flags = cpu_to_le32(flags);
6049         rc = hwrm_send_message_silent(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
6050         return rc;
6051 }
6052
6053 static int bnxt_hwrm_check_pf_rings(struct bnxt *bp, int tx_rings, int rx_rings,
6054                                     int ring_grps, int cp_rings, int stats,
6055                                     int vnics)
6056 {
6057         struct hwrm_func_cfg_input req = {0};
6058         u32 flags;
6059         int rc;
6060
6061         __bnxt_hwrm_reserve_pf_rings(bp, &req, tx_rings, rx_rings, ring_grps,
6062                                      cp_rings, stats, vnics);
6063         flags = FUNC_CFG_REQ_FLAGS_TX_ASSETS_TEST;
6064         if (BNXT_NEW_RM(bp)) {
6065                 flags |= FUNC_CFG_REQ_FLAGS_RX_ASSETS_TEST |
6066                          FUNC_CFG_REQ_FLAGS_CMPL_ASSETS_TEST |
6067                          FUNC_CFG_REQ_FLAGS_STAT_CTX_ASSETS_TEST |
6068                          FUNC_CFG_REQ_FLAGS_VNIC_ASSETS_TEST;
6069                 if (bp->flags & BNXT_FLAG_CHIP_P5)
6070                         flags |= FUNC_CFG_REQ_FLAGS_RSSCOS_CTX_ASSETS_TEST |
6071                                  FUNC_CFG_REQ_FLAGS_NQ_ASSETS_TEST;
6072                 else
6073                         flags |= FUNC_CFG_REQ_FLAGS_RING_GRP_ASSETS_TEST;
6074         }
6075
6076         req.flags = cpu_to_le32(flags);
6077         rc = hwrm_send_message_silent(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
6078         return rc;
6079 }
6080
6081 static int bnxt_hwrm_check_rings(struct bnxt *bp, int tx_rings, int rx_rings,
6082                                  int ring_grps, int cp_rings, int stats,
6083                                  int vnics)
6084 {
6085         if (bp->hwrm_spec_code < 0x10801)
6086                 return 0;
6087
6088         if (BNXT_PF(bp))
6089                 return bnxt_hwrm_check_pf_rings(bp, tx_rings, rx_rings,
6090                                                 ring_grps, cp_rings, stats,
6091                                                 vnics);
6092
6093         return bnxt_hwrm_check_vf_rings(bp, tx_rings, rx_rings, ring_grps,
6094                                         cp_rings, stats, vnics);
6095 }
6096
6097 static void bnxt_hwrm_coal_params_qcaps(struct bnxt *bp)
6098 {
6099         struct hwrm_ring_aggint_qcaps_output *resp = bp->hwrm_cmd_resp_addr;
6100         struct bnxt_coal_cap *coal_cap = &bp->coal_cap;
6101         struct hwrm_ring_aggint_qcaps_input req = {0};
6102         int rc;
6103
6104         coal_cap->cmpl_params = BNXT_LEGACY_COAL_CMPL_PARAMS;
6105         coal_cap->num_cmpl_dma_aggr_max = 63;
6106         coal_cap->num_cmpl_dma_aggr_during_int_max = 63;
6107         coal_cap->cmpl_aggr_dma_tmr_max = 65535;
6108         coal_cap->cmpl_aggr_dma_tmr_during_int_max = 65535;
6109         coal_cap->int_lat_tmr_min_max = 65535;
6110         coal_cap->int_lat_tmr_max_max = 65535;
6111         coal_cap->num_cmpl_aggr_int_max = 65535;
6112         coal_cap->timer_units = 80;
6113
6114         if (bp->hwrm_spec_code < 0x10902)
6115                 return;
6116
6117         bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_RING_AGGINT_QCAPS, -1, -1);
6118         mutex_lock(&bp->hwrm_cmd_lock);
6119         rc = _hwrm_send_message_silent(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
6120         if (!rc) {
6121                 coal_cap->cmpl_params = le32_to_cpu(resp->cmpl_params);
6122                 coal_cap->nq_params = le32_to_cpu(resp->nq_params);
6123                 coal_cap->num_cmpl_dma_aggr_max =
6124                         le16_to_cpu(resp->num_cmpl_dma_aggr_max);
6125                 coal_cap->num_cmpl_dma_aggr_during_int_max =
6126                         le16_to_cpu(resp->num_cmpl_dma_aggr_during_int_max);
6127                 coal_cap->cmpl_aggr_dma_tmr_max =
6128                         le16_to_cpu(resp->cmpl_aggr_dma_tmr_max);
6129                 coal_cap->cmpl_aggr_dma_tmr_during_int_max =
6130                         le16_to_cpu(resp->cmpl_aggr_dma_tmr_during_int_max);
6131                 coal_cap->int_lat_tmr_min_max =
6132                         le16_to_cpu(resp->int_lat_tmr_min_max);
6133                 coal_cap->int_lat_tmr_max_max =
6134                         le16_to_cpu(resp->int_lat_tmr_max_max);
6135                 coal_cap->num_cmpl_aggr_int_max =
6136                         le16_to_cpu(resp->num_cmpl_aggr_int_max);
6137                 coal_cap->timer_units = le16_to_cpu(resp->timer_units);
6138         }
6139         mutex_unlock(&bp->hwrm_cmd_lock);
6140 }
6141
6142 static u16 bnxt_usec_to_coal_tmr(struct bnxt *bp, u16 usec)
6143 {
6144         struct bnxt_coal_cap *coal_cap = &bp->coal_cap;
6145
6146         return usec * 1000 / coal_cap->timer_units;
6147 }
6148
6149 static void bnxt_hwrm_set_coal_params(struct bnxt *bp,
6150         struct bnxt_coal *hw_coal,
6151         struct hwrm_ring_cmpl_ring_cfg_aggint_params_input *req)
6152 {
6153         struct bnxt_coal_cap *coal_cap = &bp->coal_cap;
6154         u32 cmpl_params = coal_cap->cmpl_params;
6155         u16 val, tmr, max, flags = 0;
6156
6157         max = hw_coal->bufs_per_record * 128;
6158         if (hw_coal->budget)
6159                 max = hw_coal->bufs_per_record * hw_coal->budget;
6160         max = min_t(u16, max, coal_cap->num_cmpl_aggr_int_max);
6161
6162         val = clamp_t(u16, hw_coal->coal_bufs, 1, max);
6163         req->num_cmpl_aggr_int = cpu_to_le16(val);
6164
6165         val = min_t(u16, val, coal_cap->num_cmpl_dma_aggr_max);
6166         req->num_cmpl_dma_aggr = cpu_to_le16(val);
6167
6168         val = clamp_t(u16, hw_coal->coal_bufs_irq, 1,
6169                       coal_cap->num_cmpl_dma_aggr_during_int_max);
6170         req->num_cmpl_dma_aggr_during_int = cpu_to_le16(val);
6171
6172         tmr = bnxt_usec_to_coal_tmr(bp, hw_coal->coal_ticks);
6173         tmr = clamp_t(u16, tmr, 1, coal_cap->int_lat_tmr_max_max);
6174         req->int_lat_tmr_max = cpu_to_le16(tmr);
6175
6176         /* min timer set to 1/2 of interrupt timer */
6177         if (cmpl_params & RING_AGGINT_QCAPS_RESP_CMPL_PARAMS_INT_LAT_TMR_MIN) {
6178                 val = tmr / 2;
6179                 val = clamp_t(u16, val, 1, coal_cap->int_lat_tmr_min_max);
6180                 req->int_lat_tmr_min = cpu_to_le16(val);
6181                 req->enables |= cpu_to_le16(BNXT_COAL_CMPL_MIN_TMR_ENABLE);
6182         }
6183
6184         /* buf timer set to 1/4 of interrupt timer */
6185         val = clamp_t(u16, tmr / 4, 1, coal_cap->cmpl_aggr_dma_tmr_max);
6186         req->cmpl_aggr_dma_tmr = cpu_to_le16(val);
6187
6188         if (cmpl_params &
6189             RING_AGGINT_QCAPS_RESP_CMPL_PARAMS_NUM_CMPL_DMA_AGGR_DURING_INT) {
6190                 tmr = bnxt_usec_to_coal_tmr(bp, hw_coal->coal_ticks_irq);
6191                 val = clamp_t(u16, tmr, 1,
6192                               coal_cap->cmpl_aggr_dma_tmr_during_int_max);
6193                 req->cmpl_aggr_dma_tmr_during_int = cpu_to_le16(val);
6194                 req->enables |=
6195                         cpu_to_le16(BNXT_COAL_CMPL_AGGR_TMR_DURING_INT_ENABLE);
6196         }
6197
6198         if (cmpl_params & RING_AGGINT_QCAPS_RESP_CMPL_PARAMS_TIMER_RESET)
6199                 flags |= RING_CMPL_RING_CFG_AGGINT_PARAMS_REQ_FLAGS_TIMER_RESET;
6200         if ((cmpl_params & RING_AGGINT_QCAPS_RESP_CMPL_PARAMS_RING_IDLE) &&
6201             hw_coal->idle_thresh && hw_coal->coal_ticks < hw_coal->idle_thresh)
6202                 flags |= RING_CMPL_RING_CFG_AGGINT_PARAMS_REQ_FLAGS_RING_IDLE;
6203         req->flags = cpu_to_le16(flags);
6204         req->enables |= cpu_to_le16(BNXT_COAL_CMPL_ENABLES);
6205 }
6206
6207 /* Caller holds bp->hwrm_cmd_lock */
6208 static int __bnxt_hwrm_set_coal_nq(struct bnxt *bp, struct bnxt_napi *bnapi,
6209                                    struct bnxt_coal *hw_coal)
6210 {
6211         struct hwrm_ring_cmpl_ring_cfg_aggint_params_input req = {0};
6212         struct bnxt_cp_ring_info *cpr = &bnapi->cp_ring;
6213         struct bnxt_coal_cap *coal_cap = &bp->coal_cap;
6214         u32 nq_params = coal_cap->nq_params;
6215         u16 tmr;
6216
6217         if (!(nq_params & RING_AGGINT_QCAPS_RESP_NQ_PARAMS_INT_LAT_TMR_MIN))
6218                 return 0;
6219
6220         bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_RING_CMPL_RING_CFG_AGGINT_PARAMS,
6221                                -1, -1);
6222         req.ring_id = cpu_to_le16(cpr->cp_ring_struct.fw_ring_id);
6223         req.flags =
6224                 cpu_to_le16(RING_CMPL_RING_CFG_AGGINT_PARAMS_REQ_FLAGS_IS_NQ);
6225
6226         tmr = bnxt_usec_to_coal_tmr(bp, hw_coal->coal_ticks) / 2;
6227         tmr = clamp_t(u16, tmr, 1, coal_cap->int_lat_tmr_min_max);
6228         req.int_lat_tmr_min = cpu_to_le16(tmr);
6229         req.enables |= cpu_to_le16(BNXT_COAL_CMPL_MIN_TMR_ENABLE);
6230         return _hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
6231 }
6232
6233 int bnxt_hwrm_set_ring_coal(struct bnxt *bp, struct bnxt_napi *bnapi)
6234 {
6235         struct hwrm_ring_cmpl_ring_cfg_aggint_params_input req_rx = {0};
6236         struct bnxt_cp_ring_info *cpr = &bnapi->cp_ring;
6237         struct bnxt_coal coal;
6238
6239         /* Tick values in micro seconds.
6240          * 1 coal_buf x bufs_per_record = 1 completion record.
6241          */
6242         memcpy(&coal, &bp->rx_coal, sizeof(struct bnxt_coal));
6243
6244         coal.coal_ticks = cpr->rx_ring_coal.coal_ticks;
6245         coal.coal_bufs = cpr->rx_ring_coal.coal_bufs;
6246
6247         if (!bnapi->rx_ring)
6248                 return -ENODEV;
6249
6250         bnxt_hwrm_cmd_hdr_init(bp, &req_rx,
6251                                HWRM_RING_CMPL_RING_CFG_AGGINT_PARAMS, -1, -1);
6252
6253         bnxt_hwrm_set_coal_params(bp, &coal, &req_rx);
6254
6255         req_rx.ring_id = cpu_to_le16(bnxt_cp_ring_for_rx(bp, bnapi->rx_ring));
6256
6257         return hwrm_send_message(bp, &req_rx, sizeof(req_rx),
6258                                  HWRM_CMD_TIMEOUT);
6259 }
6260
6261 int bnxt_hwrm_set_coal(struct bnxt *bp)
6262 {
6263         int i, rc = 0;
6264         struct hwrm_ring_cmpl_ring_cfg_aggint_params_input req_rx = {0},
6265                                                            req_tx = {0}, *req;
6266
6267         bnxt_hwrm_cmd_hdr_init(bp, &req_rx,
6268                                HWRM_RING_CMPL_RING_CFG_AGGINT_PARAMS, -1, -1);
6269         bnxt_hwrm_cmd_hdr_init(bp, &req_tx,
6270                                HWRM_RING_CMPL_RING_CFG_AGGINT_PARAMS, -1, -1);
6271
6272         bnxt_hwrm_set_coal_params(bp, &bp->rx_coal, &req_rx);
6273         bnxt_hwrm_set_coal_params(bp, &bp->tx_coal, &req_tx);
6274
6275         mutex_lock(&bp->hwrm_cmd_lock);
6276         for (i = 0; i < bp->cp_nr_rings; i++) {
6277                 struct bnxt_napi *bnapi = bp->bnapi[i];
6278                 struct bnxt_coal *hw_coal;
6279                 u16 ring_id;
6280
6281                 req = &req_rx;
6282                 if (!bnapi->rx_ring) {
6283                         ring_id = bnxt_cp_ring_for_tx(bp, bnapi->tx_ring);
6284                         req = &req_tx;
6285                 } else {
6286                         ring_id = bnxt_cp_ring_for_rx(bp, bnapi->rx_ring);
6287                 }
6288                 req->ring_id = cpu_to_le16(ring_id);
6289
6290                 rc = _hwrm_send_message(bp, req, sizeof(*req),
6291                                         HWRM_CMD_TIMEOUT);
6292                 if (rc)
6293                         break;
6294
6295                 if (!(bp->flags & BNXT_FLAG_CHIP_P5))
6296                         continue;
6297
6298                 if (bnapi->rx_ring && bnapi->tx_ring) {
6299                         req = &req_tx;
6300                         ring_id = bnxt_cp_ring_for_tx(bp, bnapi->tx_ring);
6301                         req->ring_id = cpu_to_le16(ring_id);
6302                         rc = _hwrm_send_message(bp, req, sizeof(*req),
6303                                                 HWRM_CMD_TIMEOUT);
6304                         if (rc)
6305                                 break;
6306                 }
6307                 if (bnapi->rx_ring)
6308                         hw_coal = &bp->rx_coal;
6309                 else
6310                         hw_coal = &bp->tx_coal;
6311                 __bnxt_hwrm_set_coal_nq(bp, bnapi, hw_coal);
6312         }
6313         mutex_unlock(&bp->hwrm_cmd_lock);
6314         return rc;
6315 }
6316
6317 static int bnxt_hwrm_stat_ctx_free(struct bnxt *bp)
6318 {
6319         int rc = 0, i;
6320         struct hwrm_stat_ctx_free_input req = {0};
6321
6322         if (!bp->bnapi)
6323                 return 0;
6324
6325         if (BNXT_CHIP_TYPE_NITRO_A0(bp))
6326                 return 0;
6327
6328         bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_STAT_CTX_FREE, -1, -1);
6329
6330         mutex_lock(&bp->hwrm_cmd_lock);
6331         for (i = 0; i < bp->cp_nr_rings; i++) {
6332                 struct bnxt_napi *bnapi = bp->bnapi[i];
6333                 struct bnxt_cp_ring_info *cpr = &bnapi->cp_ring;
6334
6335                 if (cpr->hw_stats_ctx_id != INVALID_STATS_CTX_ID) {
6336                         req.stat_ctx_id = cpu_to_le32(cpr->hw_stats_ctx_id);
6337
6338                         rc = _hwrm_send_message(bp, &req, sizeof(req),
6339                                                 HWRM_CMD_TIMEOUT);
6340
6341                         cpr->hw_stats_ctx_id = INVALID_STATS_CTX_ID;
6342                 }
6343         }
6344         mutex_unlock(&bp->hwrm_cmd_lock);
6345         return rc;
6346 }
6347
6348 static int bnxt_hwrm_stat_ctx_alloc(struct bnxt *bp)
6349 {
6350         int rc = 0, i;
6351         struct hwrm_stat_ctx_alloc_input req = {0};
6352         struct hwrm_stat_ctx_alloc_output *resp = bp->hwrm_cmd_resp_addr;
6353
6354         if (BNXT_CHIP_TYPE_NITRO_A0(bp))
6355                 return 0;
6356
6357         bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_STAT_CTX_ALLOC, -1, -1);
6358
6359         req.stats_dma_length = cpu_to_le16(bp->hw_ring_stats_size);
6360         req.update_period_ms = cpu_to_le32(bp->stats_coal_ticks / 1000);
6361
6362         mutex_lock(&bp->hwrm_cmd_lock);
6363         for (i = 0; i < bp->cp_nr_rings; i++) {
6364                 struct bnxt_napi *bnapi = bp->bnapi[i];
6365                 struct bnxt_cp_ring_info *cpr = &bnapi->cp_ring;
6366
6367                 req.stats_dma_addr = cpu_to_le64(cpr->hw_stats_map);
6368
6369                 rc = _hwrm_send_message(bp, &req, sizeof(req),
6370                                         HWRM_CMD_TIMEOUT);
6371                 if (rc)
6372                         break;
6373
6374                 cpr->hw_stats_ctx_id = le32_to_cpu(resp->stat_ctx_id);
6375
6376                 bp->grp_info[i].fw_stats_ctx = cpr->hw_stats_ctx_id;
6377         }
6378         mutex_unlock(&bp->hwrm_cmd_lock);
6379         return rc;
6380 }
6381
6382 static int bnxt_hwrm_func_qcfg(struct bnxt *bp)
6383 {
6384         struct hwrm_func_qcfg_input req = {0};
6385         struct hwrm_func_qcfg_output *resp = bp->hwrm_cmd_resp_addr;
6386         u16 flags;
6387         int rc;
6388
6389         bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_FUNC_QCFG, -1, -1);
6390         req.fid = cpu_to_le16(0xffff);
6391         mutex_lock(&bp->hwrm_cmd_lock);
6392         rc = _hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
6393         if (rc)
6394                 goto func_qcfg_exit;
6395
6396 #ifdef CONFIG_BNXT_SRIOV
6397         if (BNXT_VF(bp)) {
6398                 struct bnxt_vf_info *vf = &bp->vf;
6399
6400                 vf->vlan = le16_to_cpu(resp->vlan) & VLAN_VID_MASK;
6401         } else {
6402                 bp->pf.registered_vfs = le16_to_cpu(resp->registered_vfs);
6403         }
6404 #endif
6405         flags = le16_to_cpu(resp->flags);
6406         if (flags & (FUNC_QCFG_RESP_FLAGS_FW_DCBX_AGENT_ENABLED |
6407                      FUNC_QCFG_RESP_FLAGS_FW_LLDP_AGENT_ENABLED)) {
6408                 bp->fw_cap |= BNXT_FW_CAP_LLDP_AGENT;
6409                 if (flags & FUNC_QCFG_RESP_FLAGS_FW_DCBX_AGENT_ENABLED)
6410                         bp->fw_cap |= BNXT_FW_CAP_DCBX_AGENT;
6411         }
6412         if (BNXT_PF(bp) && (flags & FUNC_QCFG_RESP_FLAGS_MULTI_HOST))
6413                 bp->flags |= BNXT_FLAG_MULTI_HOST;
6414
6415         switch (resp->port_partition_type) {
6416         case FUNC_QCFG_RESP_PORT_PARTITION_TYPE_NPAR1_0:
6417         case FUNC_QCFG_RESP_PORT_PARTITION_TYPE_NPAR1_5:
6418         case FUNC_QCFG_RESP_PORT_PARTITION_TYPE_NPAR2_0:
6419                 bp->port_partition_type = resp->port_partition_type;
6420                 break;
6421         }
6422         if (bp->hwrm_spec_code < 0x10707 ||
6423             resp->evb_mode == FUNC_QCFG_RESP_EVB_MODE_VEB)
6424                 bp->br_mode = BRIDGE_MODE_VEB;
6425         else if (resp->evb_mode == FUNC_QCFG_RESP_EVB_MODE_VEPA)
6426                 bp->br_mode = BRIDGE_MODE_VEPA;
6427         else
6428                 bp->br_mode = BRIDGE_MODE_UNDEF;
6429
6430         bp->max_mtu = le16_to_cpu(resp->max_mtu_configured);
6431         if (!bp->max_mtu)
6432                 bp->max_mtu = BNXT_MAX_MTU;
6433
6434 func_qcfg_exit:
6435         mutex_unlock(&bp->hwrm_cmd_lock);
6436         return rc;
6437 }
6438
6439 static int bnxt_hwrm_func_backing_store_qcaps(struct bnxt *bp)
6440 {
6441         struct hwrm_func_backing_store_qcaps_input req = {0};
6442         struct hwrm_func_backing_store_qcaps_output *resp =
6443                 bp->hwrm_cmd_resp_addr;
6444         int rc;
6445
6446         if (bp->hwrm_spec_code < 0x10902 || BNXT_VF(bp) || bp->ctx)
6447                 return 0;
6448
6449         bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_FUNC_BACKING_STORE_QCAPS, -1, -1);
6450         mutex_lock(&bp->hwrm_cmd_lock);
6451         rc = _hwrm_send_message_silent(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
6452         if (!rc) {
6453                 struct bnxt_ctx_pg_info *ctx_pg;
6454                 struct bnxt_ctx_mem_info *ctx;
6455                 int i;
6456
6457                 ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
6458                 if (!ctx) {
6459                         rc = -ENOMEM;
6460                         goto ctx_err;
6461                 }
6462                 ctx_pg = kzalloc(sizeof(*ctx_pg) * (bp->max_q + 1), GFP_KERNEL);
6463                 if (!ctx_pg) {
6464                         kfree(ctx);
6465                         rc = -ENOMEM;
6466                         goto ctx_err;
6467                 }
6468                 for (i = 0; i < bp->max_q + 1; i++, ctx_pg++)
6469                         ctx->tqm_mem[i] = ctx_pg;
6470
6471                 bp->ctx = ctx;
6472                 ctx->qp_max_entries = le32_to_cpu(resp->qp_max_entries);
6473                 ctx->qp_min_qp1_entries = le16_to_cpu(resp->qp_min_qp1_entries);
6474                 ctx->qp_max_l2_entries = le16_to_cpu(resp->qp_max_l2_entries);
6475                 ctx->qp_entry_size = le16_to_cpu(resp->qp_entry_size);
6476                 ctx->srq_max_l2_entries = le16_to_cpu(resp->srq_max_l2_entries);
6477                 ctx->srq_max_entries = le32_to_cpu(resp->srq_max_entries);
6478                 ctx->srq_entry_size = le16_to_cpu(resp->srq_entry_size);
6479                 ctx->cq_max_l2_entries = le16_to_cpu(resp->cq_max_l2_entries);
6480                 ctx->cq_max_entries = le32_to_cpu(resp->cq_max_entries);
6481                 ctx->cq_entry_size = le16_to_cpu(resp->cq_entry_size);
6482                 ctx->vnic_max_vnic_entries =
6483                         le16_to_cpu(resp->vnic_max_vnic_entries);
6484                 ctx->vnic_max_ring_table_entries =
6485                         le16_to_cpu(resp->vnic_max_ring_table_entries);
6486                 ctx->vnic_entry_size = le16_to_cpu(resp->vnic_entry_size);
6487                 ctx->stat_max_entries = le32_to_cpu(resp->stat_max_entries);
6488                 ctx->stat_entry_size = le16_to_cpu(resp->stat_entry_size);
6489                 ctx->tqm_entry_size = le16_to_cpu(resp->tqm_entry_size);
6490                 ctx->tqm_min_entries_per_ring =
6491                         le32_to_cpu(resp->tqm_min_entries_per_ring);
6492                 ctx->tqm_max_entries_per_ring =
6493                         le32_to_cpu(resp->tqm_max_entries_per_ring);
6494                 ctx->tqm_entries_multiple = resp->tqm_entries_multiple;
6495                 if (!ctx->tqm_entries_multiple)
6496                         ctx->tqm_entries_multiple = 1;
6497                 ctx->mrav_max_entries = le32_to_cpu(resp->mrav_max_entries);
6498                 ctx->mrav_entry_size = le16_to_cpu(resp->mrav_entry_size);
6499                 ctx->mrav_num_entries_units =
6500                         le16_to_cpu(resp->mrav_num_entries_units);
6501                 ctx->tim_entry_size = le16_to_cpu(resp->tim_entry_size);
6502                 ctx->tim_max_entries = le32_to_cpu(resp->tim_max_entries);
6503                 ctx->ctx_kind_initializer = resp->ctx_kind_initializer;
6504         } else {
6505                 rc = 0;
6506         }
6507 ctx_err:
6508         mutex_unlock(&bp->hwrm_cmd_lock);
6509         return rc;
6510 }
6511
6512 static void bnxt_hwrm_set_pg_attr(struct bnxt_ring_mem_info *rmem, u8 *pg_attr,
6513                                   __le64 *pg_dir)
6514 {
6515         u8 pg_size = 0;
6516
6517         if (BNXT_PAGE_SHIFT == 13)
6518                 pg_size = 1 << 4;
6519         else if (BNXT_PAGE_SIZE == 16)
6520                 pg_size = 2 << 4;
6521
6522         *pg_attr = pg_size;
6523         if (rmem->depth >= 1) {
6524                 if (rmem->depth == 2)
6525                         *pg_attr |= 2;
6526                 else
6527                         *pg_attr |= 1;
6528                 *pg_dir = cpu_to_le64(rmem->pg_tbl_map);
6529         } else {
6530                 *pg_dir = cpu_to_le64(rmem->dma_arr[0]);
6531         }
6532 }
6533
6534 #define FUNC_BACKING_STORE_CFG_REQ_DFLT_ENABLES                 \
6535         (FUNC_BACKING_STORE_CFG_REQ_ENABLES_QP |                \
6536          FUNC_BACKING_STORE_CFG_REQ_ENABLES_SRQ |               \
6537          FUNC_BACKING_STORE_CFG_REQ_ENABLES_CQ |                \
6538          FUNC_BACKING_STORE_CFG_REQ_ENABLES_VNIC |              \
6539          FUNC_BACKING_STORE_CFG_REQ_ENABLES_STAT)
6540
6541 static int bnxt_hwrm_func_backing_store_cfg(struct bnxt *bp, u32 enables)
6542 {
6543         struct hwrm_func_backing_store_cfg_input req = {0};
6544         struct bnxt_ctx_mem_info *ctx = bp->ctx;
6545         struct bnxt_ctx_pg_info *ctx_pg;
6546         __le32 *num_entries;
6547         __le64 *pg_dir;
6548         u32 flags = 0;
6549         u8 *pg_attr;
6550         int i, rc;
6551         u32 ena;
6552
6553         if (!ctx)
6554                 return 0;
6555
6556         bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_FUNC_BACKING_STORE_CFG, -1, -1);
6557         req.enables = cpu_to_le32(enables);
6558
6559         if (enables & FUNC_BACKING_STORE_CFG_REQ_ENABLES_QP) {
6560                 ctx_pg = &ctx->qp_mem;
6561                 req.qp_num_entries = cpu_to_le32(ctx_pg->entries);
6562                 req.qp_num_qp1_entries = cpu_to_le16(ctx->qp_min_qp1_entries);
6563                 req.qp_num_l2_entries = cpu_to_le16(ctx->qp_max_l2_entries);
6564                 req.qp_entry_size = cpu_to_le16(ctx->qp_entry_size);
6565                 bnxt_hwrm_set_pg_attr(&ctx_pg->ring_mem,
6566                                       &req.qpc_pg_size_qpc_lvl,
6567                                       &req.qpc_page_dir);
6568         }
6569         if (enables & FUNC_BACKING_STORE_CFG_REQ_ENABLES_SRQ) {
6570                 ctx_pg = &ctx->srq_mem;
6571                 req.srq_num_entries = cpu_to_le32(ctx_pg->entries);
6572                 req.srq_num_l2_entries = cpu_to_le16(ctx->srq_max_l2_entries);
6573                 req.srq_entry_size = cpu_to_le16(ctx->srq_entry_size);
6574                 bnxt_hwrm_set_pg_attr(&ctx_pg->ring_mem,
6575                                       &req.srq_pg_size_srq_lvl,
6576                                       &req.srq_page_dir);
6577         }
6578         if (enables & FUNC_BACKING_STORE_CFG_REQ_ENABLES_CQ) {
6579                 ctx_pg = &ctx->cq_mem;
6580                 req.cq_num_entries = cpu_to_le32(ctx_pg->entries);
6581                 req.cq_num_l2_entries = cpu_to_le16(ctx->cq_max_l2_entries);
6582                 req.cq_entry_size = cpu_to_le16(ctx->cq_entry_size);
6583                 bnxt_hwrm_set_pg_attr(&ctx_pg->ring_mem, &req.cq_pg_size_cq_lvl,
6584                                       &req.cq_page_dir);
6585         }
6586         if (enables & FUNC_BACKING_STORE_CFG_REQ_ENABLES_VNIC) {
6587                 ctx_pg = &ctx->vnic_mem;
6588                 req.vnic_num_vnic_entries =
6589                         cpu_to_le16(ctx->vnic_max_vnic_entries);
6590                 req.vnic_num_ring_table_entries =
6591                         cpu_to_le16(ctx->vnic_max_ring_table_entries);
6592                 req.vnic_entry_size = cpu_to_le16(ctx->vnic_entry_size);
6593                 bnxt_hwrm_set_pg_attr(&ctx_pg->ring_mem,
6594                                       &req.vnic_pg_size_vnic_lvl,
6595                                       &req.vnic_page_dir);
6596         }
6597         if (enables & FUNC_BACKING_STORE_CFG_REQ_ENABLES_STAT) {
6598                 ctx_pg = &ctx->stat_mem;
6599                 req.stat_num_entries = cpu_to_le32(ctx->stat_max_entries);
6600                 req.stat_entry_size = cpu_to_le16(ctx->stat_entry_size);
6601                 bnxt_hwrm_set_pg_attr(&ctx_pg->ring_mem,
6602                                       &req.stat_pg_size_stat_lvl,
6603                                       &req.stat_page_dir);
6604         }
6605         if (enables & FUNC_BACKING_STORE_CFG_REQ_ENABLES_MRAV) {
6606                 ctx_pg = &ctx->mrav_mem;
6607                 req.mrav_num_entries = cpu_to_le32(ctx_pg->entries);
6608                 if (ctx->mrav_num_entries_units)
6609                         flags |=
6610                         FUNC_BACKING_STORE_CFG_REQ_FLAGS_MRAV_RESERVATION_SPLIT;
6611                 req.mrav_entry_size = cpu_to_le16(ctx->mrav_entry_size);
6612                 bnxt_hwrm_set_pg_attr(&ctx_pg->ring_mem,
6613                                       &req.mrav_pg_size_mrav_lvl,
6614                                       &req.mrav_page_dir);
6615         }
6616         if (enables & FUNC_BACKING_STORE_CFG_REQ_ENABLES_TIM) {
6617                 ctx_pg = &ctx->tim_mem;
6618                 req.tim_num_entries = cpu_to_le32(ctx_pg->entries);
6619                 req.tim_entry_size = cpu_to_le16(ctx->tim_entry_size);
6620                 bnxt_hwrm_set_pg_attr(&ctx_pg->ring_mem,
6621                                       &req.tim_pg_size_tim_lvl,
6622                                       &req.tim_page_dir);
6623         }
6624         for (i = 0, num_entries = &req.tqm_sp_num_entries,
6625              pg_attr = &req.tqm_sp_pg_size_tqm_sp_lvl,
6626              pg_dir = &req.tqm_sp_page_dir,
6627              ena = FUNC_BACKING_STORE_CFG_REQ_ENABLES_TQM_SP;
6628              i < 9; i++, num_entries++, pg_attr++, pg_dir++, ena <<= 1) {
6629                 if (!(enables & ena))
6630                         continue;
6631
6632                 req.tqm_entry_size = cpu_to_le16(ctx->tqm_entry_size);
6633                 ctx_pg = ctx->tqm_mem[i];
6634                 *num_entries = cpu_to_le32(ctx_pg->entries);
6635                 bnxt_hwrm_set_pg_attr(&ctx_pg->ring_mem, pg_attr, pg_dir);
6636         }
6637         req.flags = cpu_to_le32(flags);
6638         rc = hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
6639         return rc;
6640 }
6641
6642 static int bnxt_alloc_ctx_mem_blk(struct bnxt *bp,
6643                                   struct bnxt_ctx_pg_info *ctx_pg)
6644 {
6645         struct bnxt_ring_mem_info *rmem = &ctx_pg->ring_mem;
6646
6647         rmem->page_size = BNXT_PAGE_SIZE;
6648         rmem->pg_arr = ctx_pg->ctx_pg_arr;
6649         rmem->dma_arr = ctx_pg->ctx_dma_arr;
6650         rmem->flags = BNXT_RMEM_VALID_PTE_FLAG;
6651         if (rmem->depth >= 1)
6652                 rmem->flags |= BNXT_RMEM_USE_FULL_PAGE_FLAG;
6653         return bnxt_alloc_ring(bp, rmem);
6654 }
6655
6656 static int bnxt_alloc_ctx_pg_tbls(struct bnxt *bp,
6657                                   struct bnxt_ctx_pg_info *ctx_pg, u32 mem_size,
6658                                   u8 depth, bool use_init_val)
6659 {
6660         struct bnxt_ring_mem_info *rmem = &ctx_pg->ring_mem;
6661         int rc;
6662
6663         if (!mem_size)
6664                 return 0;
6665
6666         ctx_pg->nr_pages = DIV_ROUND_UP(mem_size, BNXT_PAGE_SIZE);
6667         if (ctx_pg->nr_pages > MAX_CTX_TOTAL_PAGES) {
6668                 ctx_pg->nr_pages = 0;
6669                 return -EINVAL;
6670         }
6671         if (ctx_pg->nr_pages > MAX_CTX_PAGES || depth > 1) {
6672                 int nr_tbls, i;
6673
6674                 rmem->depth = 2;
6675                 ctx_pg->ctx_pg_tbl = kcalloc(MAX_CTX_PAGES, sizeof(ctx_pg),
6676                                              GFP_KERNEL);
6677                 if (!ctx_pg->ctx_pg_tbl)
6678                         return -ENOMEM;
6679                 nr_tbls = DIV_ROUND_UP(ctx_pg->nr_pages, MAX_CTX_PAGES);
6680                 rmem->nr_pages = nr_tbls;
6681                 rc = bnxt_alloc_ctx_mem_blk(bp, ctx_pg);
6682                 if (rc)
6683                         return rc;
6684                 for (i = 0; i < nr_tbls; i++) {
6685                         struct bnxt_ctx_pg_info *pg_tbl;
6686
6687                         pg_tbl = kzalloc(sizeof(*pg_tbl), GFP_KERNEL);
6688                         if (!pg_tbl)
6689                                 return -ENOMEM;
6690                         ctx_pg->ctx_pg_tbl[i] = pg_tbl;
6691                         rmem = &pg_tbl->ring_mem;
6692                         rmem->pg_tbl = ctx_pg->ctx_pg_arr[i];
6693                         rmem->pg_tbl_map = ctx_pg->ctx_dma_arr[i];
6694                         rmem->depth = 1;
6695                         rmem->nr_pages = MAX_CTX_PAGES;
6696                         if (use_init_val)
6697                                 rmem->init_val = bp->ctx->ctx_kind_initializer;
6698                         if (i == (nr_tbls - 1)) {
6699                                 int rem = ctx_pg->nr_pages % MAX_CTX_PAGES;
6700
6701                                 if (rem)
6702                                         rmem->nr_pages = rem;
6703                         }
6704                         rc = bnxt_alloc_ctx_mem_blk(bp, pg_tbl);
6705                         if (rc)
6706                                 break;
6707                 }
6708         } else {
6709                 rmem->nr_pages = DIV_ROUND_UP(mem_size, BNXT_PAGE_SIZE);
6710                 if (rmem->nr_pages > 1 || depth)
6711                         rmem->depth = 1;
6712                 if (use_init_val)
6713                         rmem->init_val = bp->ctx->ctx_kind_initializer;
6714                 rc = bnxt_alloc_ctx_mem_blk(bp, ctx_pg);
6715         }
6716         return rc;
6717 }
6718
6719 static void bnxt_free_ctx_pg_tbls(struct bnxt *bp,
6720                                   struct bnxt_ctx_pg_info *ctx_pg)
6721 {
6722         struct bnxt_ring_mem_info *rmem = &ctx_pg->ring_mem;
6723
6724         if (rmem->depth > 1 || ctx_pg->nr_pages > MAX_CTX_PAGES ||
6725             ctx_pg->ctx_pg_tbl) {
6726                 int i, nr_tbls = rmem->nr_pages;
6727
6728                 for (i = 0; i < nr_tbls; i++) {
6729                         struct bnxt_ctx_pg_info *pg_tbl;
6730                         struct bnxt_ring_mem_info *rmem2;
6731
6732                         pg_tbl = ctx_pg->ctx_pg_tbl[i];
6733                         if (!pg_tbl)
6734                                 continue;
6735                         rmem2 = &pg_tbl->ring_mem;
6736                         bnxt_free_ring(bp, rmem2);
6737                         ctx_pg->ctx_pg_arr[i] = NULL;
6738                         kfree(pg_tbl);
6739                         ctx_pg->ctx_pg_tbl[i] = NULL;
6740                 }
6741                 kfree(ctx_pg->ctx_pg_tbl);
6742                 ctx_pg->ctx_pg_tbl = NULL;
6743         }
6744         bnxt_free_ring(bp, rmem);
6745         ctx_pg->nr_pages = 0;
6746 }
6747
6748 static void bnxt_free_ctx_mem(struct bnxt *bp)
6749 {
6750         struct bnxt_ctx_mem_info *ctx = bp->ctx;
6751         int i;
6752
6753         if (!ctx)
6754                 return;
6755
6756         if (ctx->tqm_mem[0]) {
6757                 for (i = 0; i < bp->max_q + 1; i++)
6758                         bnxt_free_ctx_pg_tbls(bp, ctx->tqm_mem[i]);
6759                 kfree(ctx->tqm_mem[0]);
6760                 ctx->tqm_mem[0] = NULL;
6761         }
6762
6763         bnxt_free_ctx_pg_tbls(bp, &ctx->tim_mem);
6764         bnxt_free_ctx_pg_tbls(bp, &ctx->mrav_mem);
6765         bnxt_free_ctx_pg_tbls(bp, &ctx->stat_mem);
6766         bnxt_free_ctx_pg_tbls(bp, &ctx->vnic_mem);
6767         bnxt_free_ctx_pg_tbls(bp, &ctx->cq_mem);
6768         bnxt_free_ctx_pg_tbls(bp, &ctx->srq_mem);
6769         bnxt_free_ctx_pg_tbls(bp, &ctx->qp_mem);
6770         ctx->flags &= ~BNXT_CTX_FLAG_INITED;
6771 }
6772
6773 static int bnxt_alloc_ctx_mem(struct bnxt *bp)
6774 {
6775         struct bnxt_ctx_pg_info *ctx_pg;
6776         struct bnxt_ctx_mem_info *ctx;
6777         u32 mem_size, ena, entries;
6778         u32 num_mr, num_ah;
6779         u32 extra_srqs = 0;
6780         u32 extra_qps = 0;
6781         u8 pg_lvl = 1;
6782         int i, rc;
6783
6784         rc = bnxt_hwrm_func_backing_store_qcaps(bp);
6785         if (rc) {
6786                 netdev_err(bp->dev, "Failed querying context mem capability, rc = %d.\n",
6787                            rc);
6788                 return rc;
6789         }
6790         ctx = bp->ctx;
6791         if (!ctx || (ctx->flags & BNXT_CTX_FLAG_INITED))
6792                 return 0;
6793
6794         if ((bp->flags & BNXT_FLAG_ROCE_CAP) && !is_kdump_kernel()) {
6795                 pg_lvl = 2;
6796                 extra_qps = 65536;
6797                 extra_srqs = 8192;
6798         }
6799
6800         ctx_pg = &ctx->qp_mem;
6801         ctx_pg->entries = ctx->qp_min_qp1_entries + ctx->qp_max_l2_entries +
6802                           extra_qps;
6803         mem_size = ctx->qp_entry_size * ctx_pg->entries;
6804         rc = bnxt_alloc_ctx_pg_tbls(bp, ctx_pg, mem_size, pg_lvl, true);
6805         if (rc)
6806                 return rc;
6807
6808         ctx_pg = &ctx->srq_mem;
6809         ctx_pg->entries = ctx->srq_max_l2_entries + extra_srqs;
6810         mem_size = ctx->srq_entry_size * ctx_pg->entries;
6811         rc = bnxt_alloc_ctx_pg_tbls(bp, ctx_pg, mem_size, pg_lvl, true);
6812         if (rc)
6813                 return rc;
6814
6815         ctx_pg = &ctx->cq_mem;
6816         ctx_pg->entries = ctx->cq_max_l2_entries + extra_qps * 2;
6817         mem_size = ctx->cq_entry_size * ctx_pg->entries;
6818         rc = bnxt_alloc_ctx_pg_tbls(bp, ctx_pg, mem_size, pg_lvl, true);
6819         if (rc)
6820                 return rc;
6821
6822         ctx_pg = &ctx->vnic_mem;
6823         ctx_pg->entries = ctx->vnic_max_vnic_entries +
6824                           ctx->vnic_max_ring_table_entries;
6825         mem_size = ctx->vnic_entry_size * ctx_pg->entries;
6826         rc = bnxt_alloc_ctx_pg_tbls(bp, ctx_pg, mem_size, 1, true);
6827         if (rc)
6828                 return rc;
6829
6830         ctx_pg = &ctx->stat_mem;
6831         ctx_pg->entries = ctx->stat_max_entries;
6832         mem_size = ctx->stat_entry_size * ctx_pg->entries;
6833         rc = bnxt_alloc_ctx_pg_tbls(bp, ctx_pg, mem_size, 1, true);
6834         if (rc)
6835                 return rc;
6836
6837         ena = 0;
6838         if (!(bp->flags & BNXT_FLAG_ROCE_CAP))
6839                 goto skip_rdma;
6840
6841         ctx_pg = &ctx->mrav_mem;
6842         /* 128K extra is needed to accommodate static AH context
6843          * allocation by f/w.
6844          */
6845         num_mr = 1024 * 256;
6846         num_ah = 1024 * 128;
6847         ctx_pg->entries = num_mr + num_ah;
6848         mem_size = ctx->mrav_entry_size * ctx_pg->entries;
6849         rc = bnxt_alloc_ctx_pg_tbls(bp, ctx_pg, mem_size, 2, true);
6850         if (rc)
6851                 return rc;
6852         ena = FUNC_BACKING_STORE_CFG_REQ_ENABLES_MRAV;
6853         if (ctx->mrav_num_entries_units)
6854                 ctx_pg->entries =
6855                         ((num_mr / ctx->mrav_num_entries_units) << 16) |
6856                          (num_ah / ctx->mrav_num_entries_units);
6857
6858         ctx_pg = &ctx->tim_mem;
6859         ctx_pg->entries = ctx->qp_mem.entries;
6860         mem_size = ctx->tim_entry_size * ctx_pg->entries;
6861         rc = bnxt_alloc_ctx_pg_tbls(bp, ctx_pg, mem_size, 1, false);
6862         if (rc)
6863                 return rc;
6864         ena |= FUNC_BACKING_STORE_CFG_REQ_ENABLES_TIM;
6865
6866 skip_rdma:
6867         entries = ctx->qp_max_l2_entries + extra_qps;
6868         entries = roundup(entries, ctx->tqm_entries_multiple);
6869         entries = clamp_t(u32, entries, ctx->tqm_min_entries_per_ring,
6870                           ctx->tqm_max_entries_per_ring);
6871         for (i = 0; i < bp->max_q + 1; i++) {
6872                 ctx_pg = ctx->tqm_mem[i];
6873                 ctx_pg->entries = entries;
6874                 mem_size = ctx->tqm_entry_size * entries;
6875                 rc = bnxt_alloc_ctx_pg_tbls(bp, ctx_pg, mem_size, 1, false);
6876                 if (rc)
6877                         return rc;
6878                 ena |= FUNC_BACKING_STORE_CFG_REQ_ENABLES_TQM_SP << i;
6879         }
6880         ena |= FUNC_BACKING_STORE_CFG_REQ_DFLT_ENABLES;
6881         rc = bnxt_hwrm_func_backing_store_cfg(bp, ena);
6882         if (rc)
6883                 netdev_err(bp->dev, "Failed configuring context mem, rc = %d.\n",
6884                            rc);
6885         else
6886                 ctx->flags |= BNXT_CTX_FLAG_INITED;
6887
6888         return 0;
6889 }
6890
6891 int bnxt_hwrm_func_resc_qcaps(struct bnxt *bp, bool all)
6892 {
6893         struct hwrm_func_resource_qcaps_output *resp = bp->hwrm_cmd_resp_addr;
6894         struct hwrm_func_resource_qcaps_input req = {0};
6895         struct bnxt_hw_resc *hw_resc = &bp->hw_resc;
6896         int rc;
6897
6898         bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_FUNC_RESOURCE_QCAPS, -1, -1);
6899         req.fid = cpu_to_le16(0xffff);
6900
6901         mutex_lock(&bp->hwrm_cmd_lock);
6902         rc = _hwrm_send_message_silent(bp, &req, sizeof(req),
6903                                        HWRM_CMD_TIMEOUT);
6904         if (rc)
6905                 goto hwrm_func_resc_qcaps_exit;
6906
6907         hw_resc->max_tx_sch_inputs = le16_to_cpu(resp->max_tx_scheduler_inputs);
6908         if (!all)
6909                 goto hwrm_func_resc_qcaps_exit;
6910
6911         hw_resc->min_rsscos_ctxs = le16_to_cpu(resp->min_rsscos_ctx);
6912         hw_resc->max_rsscos_ctxs = le16_to_cpu(resp->max_rsscos_ctx);
6913         hw_resc->min_cp_rings = le16_to_cpu(resp->min_cmpl_rings);
6914         hw_resc->max_cp_rings = le16_to_cpu(resp->max_cmpl_rings);
6915         hw_resc->min_tx_rings = le16_to_cpu(resp->min_tx_rings);
6916         hw_resc->max_tx_rings = le16_to_cpu(resp->max_tx_rings);
6917         hw_resc->min_rx_rings = le16_to_cpu(resp->min_rx_rings);
6918         hw_resc->max_rx_rings = le16_to_cpu(resp->max_rx_rings);
6919         hw_resc->min_hw_ring_grps = le16_to_cpu(resp->min_hw_ring_grps);
6920         hw_resc->max_hw_ring_grps = le16_to_cpu(resp->max_hw_ring_grps);
6921         hw_resc->min_l2_ctxs = le16_to_cpu(resp->min_l2_ctxs);
6922         hw_resc->max_l2_ctxs = le16_to_cpu(resp->max_l2_ctxs);
6923         hw_resc->min_vnics = le16_to_cpu(resp->min_vnics);
6924         hw_resc->max_vnics = le16_to_cpu(resp->max_vnics);
6925         hw_resc->min_stat_ctxs = le16_to_cpu(resp->min_stat_ctx);
6926         hw_resc->max_stat_ctxs = le16_to_cpu(resp->max_stat_ctx);
6927
6928         if (bp->flags & BNXT_FLAG_CHIP_P5) {
6929                 u16 max_msix = le16_to_cpu(resp->max_msix);
6930
6931                 hw_resc->max_nqs = max_msix;
6932                 hw_resc->max_hw_ring_grps = hw_resc->max_rx_rings;
6933         }
6934
6935         if (BNXT_PF(bp)) {
6936                 struct bnxt_pf_info *pf = &bp->pf;
6937
6938                 pf->vf_resv_strategy =
6939                         le16_to_cpu(resp->vf_reservation_strategy);
6940                 if (pf->vf_resv_strategy > BNXT_VF_RESV_STRATEGY_MINIMAL_STATIC)
6941                         pf->vf_resv_strategy = BNXT_VF_RESV_STRATEGY_MAXIMAL;
6942         }
6943 hwrm_func_resc_qcaps_exit:
6944         mutex_unlock(&bp->hwrm_cmd_lock);
6945         return rc;
6946 }
6947
6948 static int __bnxt_hwrm_func_qcaps(struct bnxt *bp)
6949 {
6950         int rc = 0;
6951         struct hwrm_func_qcaps_input req = {0};
6952         struct hwrm_func_qcaps_output *resp = bp->hwrm_cmd_resp_addr;
6953         struct bnxt_hw_resc *hw_resc = &bp->hw_resc;
6954         u32 flags;
6955
6956         bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_FUNC_QCAPS, -1, -1);
6957         req.fid = cpu_to_le16(0xffff);
6958
6959         mutex_lock(&bp->hwrm_cmd_lock);
6960         rc = _hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
6961         if (rc)
6962                 goto hwrm_func_qcaps_exit;
6963
6964         flags = le32_to_cpu(resp->flags);
6965         if (flags & FUNC_QCAPS_RESP_FLAGS_ROCE_V1_SUPPORTED)
6966                 bp->flags |= BNXT_FLAG_ROCEV1_CAP;
6967         if (flags & FUNC_QCAPS_RESP_FLAGS_ROCE_V2_SUPPORTED)
6968                 bp->flags |= BNXT_FLAG_ROCEV2_CAP;
6969         if (flags & FUNC_QCAPS_RESP_FLAGS_PCIE_STATS_SUPPORTED)
6970                 bp->fw_cap |= BNXT_FW_CAP_PCIE_STATS_SUPPORTED;
6971         if (flags & FUNC_QCAPS_RESP_FLAGS_HOT_RESET_CAPABLE)
6972                 bp->fw_cap |= BNXT_FW_CAP_HOT_RESET;
6973         if (flags & FUNC_QCAPS_RESP_FLAGS_EXT_STATS_SUPPORTED)
6974                 bp->fw_cap |= BNXT_FW_CAP_EXT_STATS_SUPPORTED;
6975         if (flags &  FUNC_QCAPS_RESP_FLAGS_ERROR_RECOVERY_CAPABLE)
6976                 bp->fw_cap |= BNXT_FW_CAP_ERROR_RECOVERY;
6977         if (flags & FUNC_QCAPS_RESP_FLAGS_ERR_RECOVER_RELOAD)
6978                 bp->fw_cap |= BNXT_FW_CAP_ERR_RECOVER_RELOAD;
6979
6980         bp->tx_push_thresh = 0;
6981         if (flags & FUNC_QCAPS_RESP_FLAGS_PUSH_MODE_SUPPORTED)
6982                 bp->tx_push_thresh = BNXT_TX_PUSH_THRESH;
6983
6984         hw_resc->max_rsscos_ctxs = le16_to_cpu(resp->max_rsscos_ctx);
6985         hw_resc->max_cp_rings = le16_to_cpu(resp->max_cmpl_rings);
6986         hw_resc->max_tx_rings = le16_to_cpu(resp->max_tx_rings);
6987         hw_resc->max_rx_rings = le16_to_cpu(resp->max_rx_rings);
6988         hw_resc->max_hw_ring_grps = le32_to_cpu(resp->max_hw_ring_grps);
6989         if (!hw_resc->max_hw_ring_grps)
6990                 hw_resc->max_hw_ring_grps = hw_resc->max_tx_rings;
6991         hw_resc->max_l2_ctxs = le16_to_cpu(resp->max_l2_ctxs);
6992         hw_resc->max_vnics = le16_to_cpu(resp->max_vnics);
6993         hw_resc->max_stat_ctxs = le16_to_cpu(resp->max_stat_ctx);
6994
6995         if (BNXT_PF(bp)) {
6996                 struct bnxt_pf_info *pf = &bp->pf;
6997
6998                 pf->fw_fid = le16_to_cpu(resp->fid);
6999                 pf->port_id = le16_to_cpu(resp->port_id);
7000                 bp->dev->dev_port = pf->port_id;
7001                 memcpy(pf->mac_addr, resp->mac_address, ETH_ALEN);
7002                 pf->first_vf_id = le16_to_cpu(resp->first_vf_id);
7003                 pf->max_vfs = le16_to_cpu(resp->max_vfs);
7004                 pf->max_encap_records = le32_to_cpu(resp->max_encap_records);
7005                 pf->max_decap_records = le32_to_cpu(resp->max_decap_records);
7006                 pf->max_tx_em_flows = le32_to_cpu(resp->max_tx_em_flows);
7007                 pf->max_tx_wm_flows = le32_to_cpu(resp->max_tx_wm_flows);
7008                 pf->max_rx_em_flows = le32_to_cpu(resp->max_rx_em_flows);
7009                 pf->max_rx_wm_flows = le32_to_cpu(resp->max_rx_wm_flows);
7010                 bp->flags &= ~BNXT_FLAG_WOL_CAP;
7011                 if (flags & FUNC_QCAPS_RESP_FLAGS_WOL_MAGICPKT_SUPPORTED)
7012                         bp->flags |= BNXT_FLAG_WOL_CAP;
7013         } else {
7014 #ifdef CONFIG_BNXT_SRIOV
7015                 struct bnxt_vf_info *vf = &bp->vf;
7016
7017                 vf->fw_fid = le16_to_cpu(resp->fid);
7018                 memcpy(vf->mac_addr, resp->mac_address, ETH_ALEN);
7019 #endif
7020         }
7021
7022 hwrm_func_qcaps_exit:
7023         mutex_unlock(&bp->hwrm_cmd_lock);
7024         return rc;
7025 }
7026
7027 static int bnxt_hwrm_queue_qportcfg(struct bnxt *bp);
7028
7029 static int bnxt_hwrm_func_qcaps(struct bnxt *bp)
7030 {
7031         int rc;
7032
7033         rc = __bnxt_hwrm_func_qcaps(bp);
7034         if (rc)
7035                 return rc;
7036         rc = bnxt_hwrm_queue_qportcfg(bp);
7037         if (rc) {
7038                 netdev_err(bp->dev, "hwrm query qportcfg failure rc: %d\n", rc);
7039                 return rc;
7040         }
7041         if (bp->hwrm_spec_code >= 0x10803) {
7042                 rc = bnxt_alloc_ctx_mem(bp);
7043                 if (rc)
7044                         return rc;
7045                 rc = bnxt_hwrm_func_resc_qcaps(bp, true);
7046                 if (!rc)
7047                         bp->fw_cap |= BNXT_FW_CAP_NEW_RM;
7048         }
7049         return 0;
7050 }
7051
7052 static int bnxt_hwrm_cfa_adv_flow_mgnt_qcaps(struct bnxt *bp)
7053 {
7054         struct hwrm_cfa_adv_flow_mgnt_qcaps_input req = {0};
7055         struct hwrm_cfa_adv_flow_mgnt_qcaps_output *resp;
7056         int rc = 0;
7057         u32 flags;
7058
7059         if (!(bp->fw_cap & BNXT_FW_CAP_CFA_ADV_FLOW))
7060                 return 0;
7061
7062         resp = bp->hwrm_cmd_resp_addr;
7063         bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_CFA_ADV_FLOW_MGNT_QCAPS, -1, -1);
7064
7065         mutex_lock(&bp->hwrm_cmd_lock);
7066         rc = _hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
7067         if (rc)
7068                 goto hwrm_cfa_adv_qcaps_exit;
7069
7070         flags = le32_to_cpu(resp->flags);
7071         if (flags &
7072             CFA_ADV_FLOW_MGNT_QCAPS_RESP_FLAGS_RFS_RING_TBL_IDX_V2_SUPPORTED)
7073                 bp->fw_cap |= BNXT_FW_CAP_CFA_RFS_RING_TBL_IDX_V2;
7074
7075 hwrm_cfa_adv_qcaps_exit:
7076         mutex_unlock(&bp->hwrm_cmd_lock);
7077         return rc;
7078 }
7079
7080 static int bnxt_map_fw_health_regs(struct bnxt *bp)
7081 {
7082         struct bnxt_fw_health *fw_health = bp->fw_health;
7083         u32 reg_base = 0xffffffff;
7084         int i;
7085
7086         /* Only pre-map the monitoring GRC registers using window 3 */
7087         for (i = 0; i < 4; i++) {
7088                 u32 reg = fw_health->regs[i];
7089
7090                 if (BNXT_FW_HEALTH_REG_TYPE(reg) != BNXT_FW_HEALTH_REG_TYPE_GRC)
7091                         continue;
7092                 if (reg_base == 0xffffffff)
7093                         reg_base = reg & BNXT_GRC_BASE_MASK;
7094                 if ((reg & BNXT_GRC_BASE_MASK) != reg_base)
7095                         return -ERANGE;
7096                 fw_health->mapped_regs[i] = BNXT_FW_HEALTH_WIN_BASE +
7097                                             (reg & BNXT_GRC_OFFSET_MASK);
7098         }
7099         if (reg_base == 0xffffffff)
7100                 return 0;
7101
7102         writel(reg_base, bp->bar0 + BNXT_GRCPF_REG_WINDOW_BASE_OUT +
7103                          BNXT_FW_HEALTH_WIN_MAP_OFF);
7104         return 0;
7105 }
7106
7107 static int bnxt_hwrm_error_recovery_qcfg(struct bnxt *bp)
7108 {
7109         struct hwrm_error_recovery_qcfg_output *resp = bp->hwrm_cmd_resp_addr;
7110         struct bnxt_fw_health *fw_health = bp->fw_health;
7111         struct hwrm_error_recovery_qcfg_input req = {0};
7112         int rc, i;
7113
7114         if (!(bp->fw_cap & BNXT_FW_CAP_ERROR_RECOVERY))
7115                 return 0;
7116
7117         bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_ERROR_RECOVERY_QCFG, -1, -1);
7118         mutex_lock(&bp->hwrm_cmd_lock);
7119         rc = _hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
7120         if (rc)
7121                 goto err_recovery_out;
7122         fw_health->flags = le32_to_cpu(resp->flags);
7123         if ((fw_health->flags & ERROR_RECOVERY_QCFG_RESP_FLAGS_CO_CPU) &&
7124             !(bp->fw_cap & BNXT_FW_CAP_KONG_MB_CHNL)) {
7125                 rc = -EINVAL;
7126                 goto err_recovery_out;
7127         }
7128         fw_health->polling_dsecs = le32_to_cpu(resp->driver_polling_freq);
7129         fw_health->master_func_wait_dsecs =
7130                 le32_to_cpu(resp->master_func_wait_period);
7131         fw_health->normal_func_wait_dsecs =
7132                 le32_to_cpu(resp->normal_func_wait_period);
7133         fw_health->post_reset_wait_dsecs =
7134                 le32_to_cpu(resp->master_func_wait_period_after_reset);
7135         fw_health->post_reset_max_wait_dsecs =
7136                 le32_to_cpu(resp->max_bailout_time_after_reset);
7137         fw_health->regs[BNXT_FW_HEALTH_REG] =
7138                 le32_to_cpu(resp->fw_health_status_reg);
7139         fw_health->regs[BNXT_FW_HEARTBEAT_REG] =
7140                 le32_to_cpu(resp->fw_heartbeat_reg);
7141         fw_health->regs[BNXT_FW_RESET_CNT_REG] =
7142                 le32_to_cpu(resp->fw_reset_cnt_reg);
7143         fw_health->regs[BNXT_FW_RESET_INPROG_REG] =
7144                 le32_to_cpu(resp->reset_inprogress_reg);
7145         fw_health->fw_reset_inprog_reg_mask =
7146                 le32_to_cpu(resp->reset_inprogress_reg_mask);
7147         fw_health->fw_reset_seq_cnt = resp->reg_array_cnt;
7148         if (fw_health->fw_reset_seq_cnt >= 16) {
7149                 rc = -EINVAL;
7150                 goto err_recovery_out;
7151         }
7152         for (i = 0; i < fw_health->fw_reset_seq_cnt; i++) {
7153                 fw_health->fw_reset_seq_regs[i] =
7154                         le32_to_cpu(resp->reset_reg[i]);
7155                 fw_health->fw_reset_seq_vals[i] =
7156                         le32_to_cpu(resp->reset_reg_val[i]);
7157                 fw_health->fw_reset_seq_delay_msec[i] =
7158                         resp->delay_after_reset[i];
7159         }
7160 err_recovery_out:
7161         mutex_unlock(&bp->hwrm_cmd_lock);
7162         if (!rc)
7163                 rc = bnxt_map_fw_health_regs(bp);
7164         if (rc)
7165                 bp->fw_cap &= ~BNXT_FW_CAP_ERROR_RECOVERY;
7166         return rc;
7167 }
7168
7169 static int bnxt_hwrm_func_reset(struct bnxt *bp)
7170 {
7171         struct hwrm_func_reset_input req = {0};
7172
7173         bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_FUNC_RESET, -1, -1);
7174         req.enables = 0;
7175
7176         return hwrm_send_message(bp, &req, sizeof(req), HWRM_RESET_TIMEOUT);
7177 }
7178
7179 static int bnxt_hwrm_queue_qportcfg(struct bnxt *bp)
7180 {
7181         int rc = 0;
7182         struct hwrm_queue_qportcfg_input req = {0};
7183         struct hwrm_queue_qportcfg_output *resp = bp->hwrm_cmd_resp_addr;
7184         u8 i, j, *qptr;
7185         bool no_rdma;
7186
7187         bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_QUEUE_QPORTCFG, -1, -1);
7188
7189         mutex_lock(&bp->hwrm_cmd_lock);
7190         rc = _hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
7191         if (rc)
7192                 goto qportcfg_exit;
7193
7194         if (!resp->max_configurable_queues) {
7195                 rc = -EINVAL;
7196                 goto qportcfg_exit;
7197         }
7198         bp->max_tc = resp->max_configurable_queues;
7199         bp->max_lltc = resp->max_configurable_lossless_queues;
7200         if (bp->max_tc > BNXT_MAX_QUEUE)
7201                 bp->max_tc = BNXT_MAX_QUEUE;
7202
7203         no_rdma = !(bp->flags & BNXT_FLAG_ROCE_CAP);
7204         qptr = &resp->queue_id0;
7205         for (i = 0, j = 0; i < bp->max_tc; i++) {
7206                 bp->q_info[j].queue_id = *qptr;
7207                 bp->q_ids[i] = *qptr++;
7208                 bp->q_info[j].queue_profile = *qptr++;
7209                 bp->tc_to_qidx[j] = j;
7210                 if (!BNXT_CNPQ(bp->q_info[j].queue_profile) ||
7211                     (no_rdma && BNXT_PF(bp)))
7212                         j++;
7213         }
7214         bp->max_q = bp->max_tc;
7215         bp->max_tc = max_t(u8, j, 1);
7216
7217         if (resp->queue_cfg_info & QUEUE_QPORTCFG_RESP_QUEUE_CFG_INFO_ASYM_CFG)
7218                 bp->max_tc = 1;
7219
7220         if (bp->max_lltc > bp->max_tc)
7221                 bp->max_lltc = bp->max_tc;
7222
7223 qportcfg_exit:
7224         mutex_unlock(&bp->hwrm_cmd_lock);
7225         return rc;
7226 }
7227
7228 static int __bnxt_hwrm_ver_get(struct bnxt *bp, bool silent)
7229 {
7230         struct hwrm_ver_get_input req = {0};
7231         int rc;
7232
7233         bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_VER_GET, -1, -1);
7234         req.hwrm_intf_maj = HWRM_VERSION_MAJOR;
7235         req.hwrm_intf_min = HWRM_VERSION_MINOR;
7236         req.hwrm_intf_upd = HWRM_VERSION_UPDATE;
7237
7238         rc = bnxt_hwrm_do_send_msg(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT,
7239                                    silent);
7240         return rc;
7241 }
7242
7243 static int bnxt_hwrm_ver_get(struct bnxt *bp)
7244 {
7245         struct hwrm_ver_get_output *resp = bp->hwrm_cmd_resp_addr;
7246         u32 dev_caps_cfg;
7247         int rc;
7248
7249         bp->hwrm_max_req_len = HWRM_MAX_REQ_LEN;
7250         mutex_lock(&bp->hwrm_cmd_lock);
7251         rc = __bnxt_hwrm_ver_get(bp, false);
7252         if (rc)
7253                 goto hwrm_ver_get_exit;
7254
7255         memcpy(&bp->ver_resp, resp, sizeof(struct hwrm_ver_get_output));
7256
7257         bp->hwrm_spec_code = resp->hwrm_intf_maj_8b << 16 |
7258                              resp->hwrm_intf_min_8b << 8 |
7259                              resp->hwrm_intf_upd_8b;
7260         if (resp->hwrm_intf_maj_8b < 1) {
7261                 netdev_warn(bp->dev, "HWRM interface %d.%d.%d is older than 1.0.0.\n",
7262                             resp->hwrm_intf_maj_8b, resp->hwrm_intf_min_8b,
7263                             resp->hwrm_intf_upd_8b);
7264                 netdev_warn(bp->dev, "Please update firmware with HWRM interface 1.0.0 or newer.\n");
7265         }
7266         snprintf(bp->fw_ver_str, BC_HWRM_STR_LEN, "%d.%d.%d.%d",
7267                  resp->hwrm_fw_maj_8b, resp->hwrm_fw_min_8b,
7268                  resp->hwrm_fw_bld_8b, resp->hwrm_fw_rsvd_8b);
7269
7270         if (strlen(resp->active_pkg_name)) {
7271                 int fw_ver_len = strlen(bp->fw_ver_str);
7272
7273                 snprintf(bp->fw_ver_str + fw_ver_len,
7274                          FW_VER_STR_LEN - fw_ver_len - 1, "/pkg %s",
7275                          resp->active_pkg_name);
7276                 bp->fw_cap |= BNXT_FW_CAP_PKG_VER;
7277         }
7278
7279         bp->hwrm_cmd_timeout = le16_to_cpu(resp->def_req_timeout);
7280         if (!bp->hwrm_cmd_timeout)
7281                 bp->hwrm_cmd_timeout = DFLT_HWRM_CMD_TIMEOUT;
7282
7283         if (resp->hwrm_intf_maj_8b >= 1) {
7284                 bp->hwrm_max_req_len = le16_to_cpu(resp->max_req_win_len);
7285                 bp->hwrm_max_ext_req_len = le16_to_cpu(resp->max_ext_req_len);
7286         }
7287         if (bp->hwrm_max_ext_req_len < HWRM_MAX_REQ_LEN)
7288                 bp->hwrm_max_ext_req_len = HWRM_MAX_REQ_LEN;
7289
7290         bp->chip_num = le16_to_cpu(resp->chip_num);
7291         if (bp->chip_num == CHIP_NUM_58700 && !resp->chip_rev &&
7292             !resp->chip_metal)
7293                 bp->flags |= BNXT_FLAG_CHIP_NITRO_A0;
7294
7295         dev_caps_cfg = le32_to_cpu(resp->dev_caps_cfg);
7296         if ((dev_caps_cfg & VER_GET_RESP_DEV_CAPS_CFG_SHORT_CMD_SUPPORTED) &&
7297             (dev_caps_cfg & VER_GET_RESP_DEV_CAPS_CFG_SHORT_CMD_REQUIRED))
7298                 bp->fw_cap |= BNXT_FW_CAP_SHORT_CMD;
7299
7300         if (dev_caps_cfg & VER_GET_RESP_DEV_CAPS_CFG_KONG_MB_CHNL_SUPPORTED)
7301                 bp->fw_cap |= BNXT_FW_CAP_KONG_MB_CHNL;
7302
7303         if (dev_caps_cfg &
7304             VER_GET_RESP_DEV_CAPS_CFG_FLOW_HANDLE_64BIT_SUPPORTED)
7305                 bp->fw_cap |= BNXT_FW_CAP_OVS_64BIT_HANDLE;
7306
7307         if (dev_caps_cfg &
7308             VER_GET_RESP_DEV_CAPS_CFG_TRUSTED_VF_SUPPORTED)
7309                 bp->fw_cap |= BNXT_FW_CAP_TRUSTED_VF;
7310
7311         if (dev_caps_cfg &
7312             VER_GET_RESP_DEV_CAPS_CFG_CFA_ADV_FLOW_MGNT_SUPPORTED)
7313                 bp->fw_cap |= BNXT_FW_CAP_CFA_ADV_FLOW;
7314
7315 hwrm_ver_get_exit:
7316         mutex_unlock(&bp->hwrm_cmd_lock);
7317         return rc;
7318 }
7319
7320 int bnxt_hwrm_fw_set_time(struct bnxt *bp)
7321 {
7322         struct hwrm_fw_set_time_input req = {0};
7323         struct tm tm;
7324         time64_t now = ktime_get_real_seconds();
7325
7326         if ((BNXT_VF(bp) && bp->hwrm_spec_code < 0x10901) ||
7327             bp->hwrm_spec_code < 0x10400)
7328                 return -EOPNOTSUPP;
7329
7330         time64_to_tm(now, 0, &tm);
7331         bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_FW_SET_TIME, -1, -1);
7332         req.year = cpu_to_le16(1900 + tm.tm_year);
7333         req.month = 1 + tm.tm_mon;
7334         req.day = tm.tm_mday;
7335         req.hour = tm.tm_hour;
7336         req.minute = tm.tm_min;
7337         req.second = tm.tm_sec;
7338         return hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
7339 }
7340
7341 static int bnxt_hwrm_port_qstats(struct bnxt *bp)
7342 {
7343         int rc;
7344         struct bnxt_pf_info *pf = &bp->pf;
7345         struct hwrm_port_qstats_input req = {0};
7346
7347         if (!(bp->flags & BNXT_FLAG_PORT_STATS))
7348                 return 0;
7349
7350         bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_PORT_QSTATS, -1, -1);
7351         req.port_id = cpu_to_le16(pf->port_id);
7352         req.tx_stat_host_addr = cpu_to_le64(bp->hw_tx_port_stats_map);
7353         req.rx_stat_host_addr = cpu_to_le64(bp->hw_rx_port_stats_map);
7354         rc = hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
7355         return rc;
7356 }
7357
7358 static int bnxt_hwrm_port_qstats_ext(struct bnxt *bp)
7359 {
7360         struct hwrm_port_qstats_ext_output *resp = bp->hwrm_cmd_resp_addr;
7361         struct hwrm_queue_pri2cos_qcfg_input req2 = {0};
7362         struct hwrm_port_qstats_ext_input req = {0};
7363         struct bnxt_pf_info *pf = &bp->pf;
7364         u32 tx_stat_size;
7365         int rc;
7366
7367         if (!(bp->flags & BNXT_FLAG_PORT_STATS_EXT))
7368                 return 0;
7369
7370         bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_PORT_QSTATS_EXT, -1, -1);
7371         req.port_id = cpu_to_le16(pf->port_id);
7372         req.rx_stat_size = cpu_to_le16(sizeof(struct rx_port_stats_ext));
7373         req.rx_stat_host_addr = cpu_to_le64(bp->hw_rx_port_stats_ext_map);
7374         tx_stat_size = bp->hw_tx_port_stats_ext ?
7375                        sizeof(*bp->hw_tx_port_stats_ext) : 0;
7376         req.tx_stat_size = cpu_to_le16(tx_stat_size);
7377         req.tx_stat_host_addr = cpu_to_le64(bp->hw_tx_port_stats_ext_map);
7378         mutex_lock(&bp->hwrm_cmd_lock);
7379         rc = _hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
7380         if (!rc) {
7381                 bp->fw_rx_stats_ext_size = le16_to_cpu(resp->rx_stat_size) / 8;
7382                 bp->fw_tx_stats_ext_size = tx_stat_size ?
7383                         le16_to_cpu(resp->tx_stat_size) / 8 : 0;
7384         } else {
7385                 bp->fw_rx_stats_ext_size = 0;
7386                 bp->fw_tx_stats_ext_size = 0;
7387         }
7388         if (bp->fw_tx_stats_ext_size <=
7389             offsetof(struct tx_port_stats_ext, pfc_pri0_tx_duration_us) / 8) {
7390                 mutex_unlock(&bp->hwrm_cmd_lock);
7391                 bp->pri2cos_valid = 0;
7392                 return rc;
7393         }
7394
7395         bnxt_hwrm_cmd_hdr_init(bp, &req2, HWRM_QUEUE_PRI2COS_QCFG, -1, -1);
7396         req2.flags = cpu_to_le32(QUEUE_PRI2COS_QCFG_REQ_FLAGS_IVLAN);
7397
7398         rc = _hwrm_send_message(bp, &req2, sizeof(req2), HWRM_CMD_TIMEOUT);
7399         if (!rc) {
7400                 struct hwrm_queue_pri2cos_qcfg_output *resp2;
7401                 u8 *pri2cos;
7402                 int i, j;
7403
7404                 resp2 = bp->hwrm_cmd_resp_addr;
7405                 pri2cos = &resp2->pri0_cos_queue_id;
7406                 for (i = 0; i < 8; i++) {
7407                         u8 queue_id = pri2cos[i];
7408
7409                         for (j = 0; j < bp->max_q; j++) {
7410                                 if (bp->q_ids[j] == queue_id)
7411                                         bp->pri2cos[i] = j;
7412                         }
7413                 }
7414                 bp->pri2cos_valid = 1;
7415         }
7416         mutex_unlock(&bp->hwrm_cmd_lock);
7417         return rc;
7418 }
7419
7420 static int bnxt_hwrm_pcie_qstats(struct bnxt *bp)
7421 {
7422         struct hwrm_pcie_qstats_input req = {0};
7423
7424         if (!(bp->flags & BNXT_FLAG_PCIE_STATS))
7425                 return 0;
7426
7427         bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_PCIE_QSTATS, -1, -1);
7428         req.pcie_stat_size = cpu_to_le16(sizeof(struct pcie_ctx_hw_stats));
7429         req.pcie_stat_host_addr = cpu_to_le64(bp->hw_pcie_stats_map);
7430         return hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
7431 }
7432
7433 static void bnxt_hwrm_free_tunnel_ports(struct bnxt *bp)
7434 {
7435         if (bp->vxlan_port_cnt) {
7436                 bnxt_hwrm_tunnel_dst_port_free(
7437                         bp, TUNNEL_DST_PORT_FREE_REQ_TUNNEL_TYPE_VXLAN);
7438         }
7439         bp->vxlan_port_cnt = 0;
7440         if (bp->nge_port_cnt) {
7441                 bnxt_hwrm_tunnel_dst_port_free(
7442                         bp, TUNNEL_DST_PORT_FREE_REQ_TUNNEL_TYPE_GENEVE);
7443         }
7444         bp->nge_port_cnt = 0;
7445 }
7446
7447 static int bnxt_set_tpa(struct bnxt *bp, bool set_tpa)
7448 {
7449         int rc, i;
7450         u32 tpa_flags = 0;
7451
7452         if (set_tpa)
7453                 tpa_flags = bp->flags & BNXT_FLAG_TPA;
7454         else if (test_bit(BNXT_STATE_FW_FATAL_COND, &bp->state))
7455                 return 0;
7456         for (i = 0; i < bp->nr_vnics; i++) {
7457                 rc = bnxt_hwrm_vnic_set_tpa(bp, i, tpa_flags);
7458                 if (rc) {
7459                         netdev_err(bp->dev, "hwrm vnic set tpa failure rc for vnic %d: %x\n",
7460                                    i, rc);
7461                         return rc;
7462                 }
7463         }
7464         return 0;
7465 }
7466
7467 static void bnxt_hwrm_clear_vnic_rss(struct bnxt *bp)
7468 {
7469         int i;
7470
7471         for (i = 0; i < bp->nr_vnics; i++)
7472                 bnxt_hwrm_vnic_set_rss(bp, i, false);
7473 }
7474
7475 static void bnxt_clear_vnic(struct bnxt *bp)
7476 {
7477         if (!bp->vnic_info)
7478                 return;
7479
7480         bnxt_hwrm_clear_vnic_filter(bp);
7481         if (!(bp->flags & BNXT_FLAG_CHIP_P5)) {
7482                 /* clear all RSS setting before free vnic ctx */
7483                 bnxt_hwrm_clear_vnic_rss(bp);
7484                 bnxt_hwrm_vnic_ctx_free(bp);
7485         }
7486         /* before free the vnic, undo the vnic tpa settings */
7487         if (bp->flags & BNXT_FLAG_TPA)
7488                 bnxt_set_tpa(bp, false);
7489         bnxt_hwrm_vnic_free(bp);
7490         if (bp->flags & BNXT_FLAG_CHIP_P5)
7491                 bnxt_hwrm_vnic_ctx_free(bp);
7492 }
7493
7494 static void bnxt_hwrm_resource_free(struct bnxt *bp, bool close_path,
7495                                     bool irq_re_init)
7496 {
7497         bnxt_clear_vnic(bp);
7498         bnxt_hwrm_ring_free(bp, close_path);
7499         bnxt_hwrm_ring_grp_free(bp);
7500         if (irq_re_init) {
7501                 bnxt_hwrm_stat_ctx_free(bp);
7502                 bnxt_hwrm_free_tunnel_ports(bp);
7503         }
7504 }
7505
7506 static int bnxt_hwrm_set_br_mode(struct bnxt *bp, u16 br_mode)
7507 {
7508         struct hwrm_func_cfg_input req = {0};
7509         int rc;
7510
7511         bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_FUNC_CFG, -1, -1);
7512         req.fid = cpu_to_le16(0xffff);
7513         req.enables = cpu_to_le32(FUNC_CFG_REQ_ENABLES_EVB_MODE);
7514         if (br_mode == BRIDGE_MODE_VEB)
7515                 req.evb_mode = FUNC_CFG_REQ_EVB_MODE_VEB;
7516         else if (br_mode == BRIDGE_MODE_VEPA)
7517                 req.evb_mode = FUNC_CFG_REQ_EVB_MODE_VEPA;
7518         else
7519                 return -EINVAL;
7520         rc = hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
7521         return rc;
7522 }
7523
7524 static int bnxt_hwrm_set_cache_line_size(struct bnxt *bp, int size)
7525 {
7526         struct hwrm_func_cfg_input req = {0};
7527         int rc;
7528
7529         if (BNXT_VF(bp) || bp->hwrm_spec_code < 0x10803)
7530                 return 0;
7531
7532         bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_FUNC_CFG, -1, -1);
7533         req.fid = cpu_to_le16(0xffff);
7534         req.enables = cpu_to_le32(FUNC_CFG_REQ_ENABLES_CACHE_LINESIZE);
7535         req.options = FUNC_CFG_REQ_OPTIONS_CACHE_LINESIZE_SIZE_64;
7536         if (size == 128)
7537                 req.options = FUNC_CFG_REQ_OPTIONS_CACHE_LINESIZE_SIZE_128;
7538
7539         rc = hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
7540         return rc;
7541 }
7542
7543 static int __bnxt_setup_vnic(struct bnxt *bp, u16 vnic_id)
7544 {
7545         struct bnxt_vnic_info *vnic = &bp->vnic_info[vnic_id];
7546         int rc;
7547
7548         if (vnic->flags & BNXT_VNIC_RFS_NEW_RSS_FLAG)
7549                 goto skip_rss_ctx;
7550
7551         /* allocate context for vnic */
7552         rc = bnxt_hwrm_vnic_ctx_alloc(bp, vnic_id, 0);
7553         if (rc) {
7554                 netdev_err(bp->dev, "hwrm vnic %d alloc failure rc: %x\n",
7555                            vnic_id, rc);
7556                 goto vnic_setup_err;
7557         }
7558         bp->rsscos_nr_ctxs++;
7559
7560         if (BNXT_CHIP_TYPE_NITRO_A0(bp)) {
7561                 rc = bnxt_hwrm_vnic_ctx_alloc(bp, vnic_id, 1);
7562                 if (rc) {
7563                         netdev_err(bp->dev, "hwrm vnic %d cos ctx alloc failure rc: %x\n",
7564                                    vnic_id, rc);
7565                         goto vnic_setup_err;
7566                 }
7567                 bp->rsscos_nr_ctxs++;
7568         }
7569
7570 skip_rss_ctx:
7571         /* configure default vnic, ring grp */
7572         rc = bnxt_hwrm_vnic_cfg(bp, vnic_id);
7573         if (rc) {
7574                 netdev_err(bp->dev, "hwrm vnic %d cfg failure rc: %x\n",
7575                            vnic_id, rc);
7576                 goto vnic_setup_err;
7577         }
7578
7579         /* Enable RSS hashing on vnic */
7580         rc = bnxt_hwrm_vnic_set_rss(bp, vnic_id, true);
7581         if (rc) {
7582                 netdev_err(bp->dev, "hwrm vnic %d set rss failure rc: %x\n",
7583                            vnic_id, rc);
7584                 goto vnic_setup_err;
7585         }
7586
7587         if (bp->flags & BNXT_FLAG_AGG_RINGS) {
7588                 rc = bnxt_hwrm_vnic_set_hds(bp, vnic_id);
7589                 if (rc) {
7590                         netdev_err(bp->dev, "hwrm vnic %d set hds failure rc: %x\n",
7591                                    vnic_id, rc);
7592                 }
7593         }
7594
7595 vnic_setup_err:
7596         return rc;
7597 }
7598
7599 static int __bnxt_setup_vnic_p5(struct bnxt *bp, u16 vnic_id)
7600 {
7601         int rc, i, nr_ctxs;
7602
7603         nr_ctxs = DIV_ROUND_UP(bp->rx_nr_rings, 64);
7604         for (i = 0; i < nr_ctxs; i++) {
7605                 rc = bnxt_hwrm_vnic_ctx_alloc(bp, vnic_id, i);
7606                 if (rc) {
7607                         netdev_err(bp->dev, "hwrm vnic %d ctx %d alloc failure rc: %x\n",
7608                                    vnic_id, i, rc);
7609                         break;
7610                 }
7611                 bp->rsscos_nr_ctxs++;
7612         }
7613         if (i < nr_ctxs)
7614                 return -ENOMEM;
7615
7616         rc = bnxt_hwrm_vnic_set_rss_p5(bp, vnic_id, true);
7617         if (rc) {
7618                 netdev_err(bp->dev, "hwrm vnic %d set rss failure rc: %d\n",
7619                            vnic_id, rc);
7620                 return rc;
7621         }
7622         rc = bnxt_hwrm_vnic_cfg(bp, vnic_id);
7623         if (rc) {
7624                 netdev_err(bp->dev, "hwrm vnic %d cfg failure rc: %x\n",
7625                            vnic_id, rc);
7626                 return rc;
7627         }
7628         if (bp->flags & BNXT_FLAG_AGG_RINGS) {
7629                 rc = bnxt_hwrm_vnic_set_hds(bp, vnic_id);
7630                 if (rc) {
7631                         netdev_err(bp->dev, "hwrm vnic %d set hds failure rc: %x\n",
7632                                    vnic_id, rc);
7633                 }
7634         }
7635         return rc;
7636 }
7637
7638 static int bnxt_setup_vnic(struct bnxt *bp, u16 vnic_id)
7639 {
7640         if (bp->flags & BNXT_FLAG_CHIP_P5)
7641                 return __bnxt_setup_vnic_p5(bp, vnic_id);
7642         else
7643                 return __bnxt_setup_vnic(bp, vnic_id);
7644 }
7645
7646 static int bnxt_alloc_rfs_vnics(struct bnxt *bp)
7647 {
7648 #ifdef CONFIG_RFS_ACCEL
7649         int i, rc = 0;
7650
7651         if (bp->flags & BNXT_FLAG_CHIP_P5)
7652                 return 0;
7653
7654         for (i = 0; i < bp->rx_nr_rings; i++) {
7655                 struct bnxt_vnic_info *vnic;
7656                 u16 vnic_id = i + 1;
7657                 u16 ring_id = i;
7658
7659                 if (vnic_id >= bp->nr_vnics)
7660                         break;
7661
7662                 vnic = &bp->vnic_info[vnic_id];
7663                 vnic->flags |= BNXT_VNIC_RFS_FLAG;
7664                 if (bp->flags & BNXT_FLAG_NEW_RSS_CAP)
7665                         vnic->flags |= BNXT_VNIC_RFS_NEW_RSS_FLAG;
7666                 rc = bnxt_hwrm_vnic_alloc(bp, vnic_id, ring_id, 1);
7667                 if (rc) {
7668                         netdev_err(bp->dev, "hwrm vnic %d alloc failure rc: %x\n",
7669                                    vnic_id, rc);
7670                         break;
7671                 }
7672                 rc = bnxt_setup_vnic(bp, vnic_id);
7673                 if (rc)
7674                         break;
7675         }
7676         return rc;
7677 #else
7678         return 0;
7679 #endif
7680 }
7681
7682 /* Allow PF and VF with default VLAN to be in promiscuous mode */
7683 static bool bnxt_promisc_ok(struct bnxt *bp)
7684 {
7685 #ifdef CONFIG_BNXT_SRIOV
7686         if (BNXT_VF(bp) && !bp->vf.vlan)
7687                 return false;
7688 #endif
7689         return true;
7690 }
7691
7692 static int bnxt_setup_nitroa0_vnic(struct bnxt *bp)
7693 {
7694         unsigned int rc = 0;
7695
7696         rc = bnxt_hwrm_vnic_alloc(bp, 1, bp->rx_nr_rings - 1, 1);
7697         if (rc) {
7698                 netdev_err(bp->dev, "Cannot allocate special vnic for NS2 A0: %x\n",
7699                            rc);
7700                 return rc;
7701         }
7702
7703         rc = bnxt_hwrm_vnic_cfg(bp, 1);
7704         if (rc) {
7705                 netdev_err(bp->dev, "Cannot allocate special vnic for NS2 A0: %x\n",
7706                            rc);
7707                 return rc;
7708         }
7709         return rc;
7710 }
7711
7712 static int bnxt_cfg_rx_mode(struct bnxt *);
7713 static bool bnxt_mc_list_updated(struct bnxt *, u32 *);
7714
7715 static int bnxt_init_chip(struct bnxt *bp, bool irq_re_init)
7716 {
7717         struct bnxt_vnic_info *vnic = &bp->vnic_info[0];
7718         int rc = 0;
7719         unsigned int rx_nr_rings = bp->rx_nr_rings;
7720
7721         if (irq_re_init) {
7722                 rc = bnxt_hwrm_stat_ctx_alloc(bp);
7723                 if (rc) {
7724                         netdev_err(bp->dev, "hwrm stat ctx alloc failure rc: %x\n",
7725                                    rc);
7726                         goto err_out;
7727                 }
7728         }
7729
7730         rc = bnxt_hwrm_ring_alloc(bp);
7731         if (rc) {
7732                 netdev_err(bp->dev, "hwrm ring alloc failure rc: %x\n", rc);
7733                 goto err_out;
7734         }
7735
7736         rc = bnxt_hwrm_ring_grp_alloc(bp);
7737         if (rc) {
7738                 netdev_err(bp->dev, "hwrm_ring_grp alloc failure: %x\n", rc);
7739                 goto err_out;
7740         }
7741
7742         if (BNXT_CHIP_TYPE_NITRO_A0(bp))
7743                 rx_nr_rings--;
7744
7745         /* default vnic 0 */
7746         rc = bnxt_hwrm_vnic_alloc(bp, 0, 0, rx_nr_rings);
7747         if (rc) {
7748                 netdev_err(bp->dev, "hwrm vnic alloc failure rc: %x\n", rc);
7749                 goto err_out;
7750         }
7751
7752         rc = bnxt_setup_vnic(bp, 0);
7753         if (rc)
7754                 goto err_out;
7755
7756         if (bp->flags & BNXT_FLAG_RFS) {
7757                 rc = bnxt_alloc_rfs_vnics(bp);
7758                 if (rc)
7759                         goto err_out;
7760         }
7761
7762         if (bp->flags & BNXT_FLAG_TPA) {
7763                 rc = bnxt_set_tpa(bp, true);
7764                 if (rc)
7765                         goto err_out;
7766         }
7767
7768         if (BNXT_VF(bp))
7769                 bnxt_update_vf_mac(bp);
7770
7771         /* Filter for default vnic 0 */
7772         rc = bnxt_hwrm_set_vnic_filter(bp, 0, 0, bp->dev->dev_addr);
7773         if (rc) {
7774                 netdev_err(bp->dev, "HWRM vnic filter failure rc: %x\n", rc);
7775                 goto err_out;
7776         }
7777         vnic->uc_filter_count = 1;
7778
7779         vnic->rx_mask = 0;
7780         if (bp->dev->flags & IFF_BROADCAST)
7781                 vnic->rx_mask |= CFA_L2_SET_RX_MASK_REQ_MASK_BCAST;
7782
7783         if ((bp->dev->flags & IFF_PROMISC) && bnxt_promisc_ok(bp))
7784                 vnic->rx_mask |= CFA_L2_SET_RX_MASK_REQ_MASK_PROMISCUOUS;
7785
7786         if (bp->dev->flags & IFF_ALLMULTI) {
7787                 vnic->rx_mask |= CFA_L2_SET_RX_MASK_REQ_MASK_ALL_MCAST;
7788                 vnic->mc_list_count = 0;
7789         } else {
7790                 u32 mask = 0;
7791
7792                 bnxt_mc_list_updated(bp, &mask);
7793                 vnic->rx_mask |= mask;
7794         }
7795
7796         rc = bnxt_cfg_rx_mode(bp);
7797         if (rc)
7798                 goto err_out;
7799
7800         rc = bnxt_hwrm_set_coal(bp);
7801         if (rc)
7802                 netdev_warn(bp->dev, "HWRM set coalescing failure rc: %x\n",
7803                                 rc);
7804
7805         if (BNXT_CHIP_TYPE_NITRO_A0(bp)) {
7806                 rc = bnxt_setup_nitroa0_vnic(bp);
7807                 if (rc)
7808                         netdev_err(bp->dev, "Special vnic setup failure for NS2 A0 rc: %x\n",
7809                                    rc);
7810         }
7811
7812         if (BNXT_VF(bp)) {
7813                 bnxt_hwrm_func_qcfg(bp);
7814                 netdev_update_features(bp->dev);
7815         }
7816
7817         return 0;
7818
7819 err_out:
7820         bnxt_hwrm_resource_free(bp, 0, true);
7821
7822         return rc;
7823 }
7824
7825 static int bnxt_shutdown_nic(struct bnxt *bp, bool irq_re_init)
7826 {
7827         bnxt_hwrm_resource_free(bp, 1, irq_re_init);
7828         return 0;
7829 }
7830
7831 static int bnxt_init_nic(struct bnxt *bp, bool irq_re_init)
7832 {
7833         bnxt_init_cp_rings(bp);
7834         bnxt_init_rx_rings(bp);
7835         bnxt_init_tx_rings(bp);
7836         bnxt_init_ring_grps(bp, irq_re_init);
7837         bnxt_init_vnics(bp);
7838
7839         return bnxt_init_chip(bp, irq_re_init);
7840 }
7841
7842 static int bnxt_set_real_num_queues(struct bnxt *bp)
7843 {
7844         int rc;
7845         struct net_device *dev = bp->dev;
7846
7847         rc = netif_set_real_num_tx_queues(dev, bp->tx_nr_rings -
7848                                           bp->tx_nr_rings_xdp);
7849         if (rc)
7850                 return rc;
7851
7852         rc = netif_set_real_num_rx_queues(dev, bp->rx_nr_rings);
7853         if (rc)
7854                 return rc;
7855
7856 #ifdef CONFIG_RFS_ACCEL
7857         if (bp->flags & BNXT_FLAG_RFS)
7858                 dev->rx_cpu_rmap = alloc_irq_cpu_rmap(bp->rx_nr_rings);
7859 #endif
7860
7861         return rc;
7862 }
7863
7864 static int bnxt_trim_rings(struct bnxt *bp, int *rx, int *tx, int max,
7865                            bool shared)
7866 {
7867         int _rx = *rx, _tx = *tx;
7868
7869         if (shared) {
7870                 *rx = min_t(int, _rx, max);
7871                 *tx = min_t(int, _tx, max);
7872         } else {
7873                 if (max < 2)
7874                         return -ENOMEM;
7875
7876                 while (_rx + _tx > max) {
7877                         if (_rx > _tx && _rx > 1)
7878                                 _rx--;
7879                         else if (_tx > 1)
7880                                 _tx--;
7881                 }
7882                 *rx = _rx;
7883                 *tx = _tx;
7884         }
7885         return 0;
7886 }
7887
7888 static void bnxt_setup_msix(struct bnxt *bp)
7889 {
7890         const int len = sizeof(bp->irq_tbl[0].name);
7891         struct net_device *dev = bp->dev;
7892         int tcs, i;
7893
7894         tcs = netdev_get_num_tc(dev);
7895         if (tcs > 1) {
7896                 int i, off, count;
7897
7898                 for (i = 0; i < tcs; i++) {
7899                         count = bp->tx_nr_rings_per_tc;
7900                         off = i * count;
7901                         netdev_set_tc_queue(dev, i, count, off);
7902                 }
7903         }
7904
7905         for (i = 0; i < bp->cp_nr_rings; i++) {
7906                 int map_idx = bnxt_cp_num_to_irq_num(bp, i);
7907                 char *attr;
7908
7909                 if (bp->flags & BNXT_FLAG_SHARED_RINGS)
7910                         attr = "TxRx";
7911                 else if (i < bp->rx_nr_rings)
7912                         attr = "rx";
7913                 else
7914                         attr = "tx";
7915
7916                 snprintf(bp->irq_tbl[map_idx].name, len, "%s-%s-%d", dev->name,
7917                          attr, i);
7918                 bp->irq_tbl[map_idx].handler = bnxt_msix;
7919         }
7920 }
7921
7922 static void bnxt_setup_inta(struct bnxt *bp)
7923 {
7924         const int len = sizeof(bp->irq_tbl[0].name);
7925
7926         if (netdev_get_num_tc(bp->dev))
7927                 netdev_reset_tc(bp->dev);
7928
7929         snprintf(bp->irq_tbl[0].name, len, "%s-%s-%d", bp->dev->name, "TxRx",
7930                  0);
7931         bp->irq_tbl[0].handler = bnxt_inta;
7932 }
7933
7934 static int bnxt_setup_int_mode(struct bnxt *bp)
7935 {
7936         int rc;
7937
7938         if (bp->flags & BNXT_FLAG_USING_MSIX)
7939                 bnxt_setup_msix(bp);
7940         else
7941                 bnxt_setup_inta(bp);
7942
7943         rc = bnxt_set_real_num_queues(bp);
7944         return rc;
7945 }
7946
7947 #ifdef CONFIG_RFS_ACCEL
7948 static unsigned int bnxt_get_max_func_rss_ctxs(struct bnxt *bp)
7949 {
7950         return bp->hw_resc.max_rsscos_ctxs;
7951 }
7952
7953 static unsigned int bnxt_get_max_func_vnics(struct bnxt *bp)
7954 {
7955         return bp->hw_resc.max_vnics;
7956 }
7957 #endif
7958
7959 unsigned int bnxt_get_max_func_stat_ctxs(struct bnxt *bp)
7960 {
7961         return bp->hw_resc.max_stat_ctxs;
7962 }
7963
7964 unsigned int bnxt_get_max_func_cp_rings(struct bnxt *bp)
7965 {
7966         return bp->hw_resc.max_cp_rings;
7967 }
7968
7969 static unsigned int bnxt_get_max_func_cp_rings_for_en(struct bnxt *bp)
7970 {
7971         unsigned int cp = bp->hw_resc.max_cp_rings;
7972
7973         if (!(bp->flags & BNXT_FLAG_CHIP_P5))
7974                 cp -= bnxt_get_ulp_msix_num(bp);
7975
7976         return cp;
7977 }
7978
7979 static unsigned int bnxt_get_max_func_irqs(struct bnxt *bp)
7980 {
7981         struct bnxt_hw_resc *hw_resc = &bp->hw_resc;
7982
7983         if (bp->flags & BNXT_FLAG_CHIP_P5)
7984                 return min_t(unsigned int, hw_resc->max_irqs, hw_resc->max_nqs);
7985
7986         return min_t(unsigned int, hw_resc->max_irqs, hw_resc->max_cp_rings);
7987 }
7988
7989 static void bnxt_set_max_func_irqs(struct bnxt *bp, unsigned int max_irqs)
7990 {
7991         bp->hw_resc.max_irqs = max_irqs;
7992 }
7993
7994 unsigned int bnxt_get_avail_cp_rings_for_en(struct bnxt *bp)
7995 {
7996         unsigned int cp;
7997
7998         cp = bnxt_get_max_func_cp_rings_for_en(bp);
7999         if (bp->flags & BNXT_FLAG_CHIP_P5)
8000                 return cp - bp->rx_nr_rings - bp->tx_nr_rings;
8001         else
8002                 return cp - bp->cp_nr_rings;
8003 }
8004
8005 unsigned int bnxt_get_avail_stat_ctxs_for_en(struct bnxt *bp)
8006 {
8007         return bnxt_get_max_func_stat_ctxs(bp) - bnxt_get_func_stat_ctxs(bp);
8008 }
8009
8010 int bnxt_get_avail_msix(struct bnxt *bp, int num)
8011 {
8012         int max_cp = bnxt_get_max_func_cp_rings(bp);
8013         int max_irq = bnxt_get_max_func_irqs(bp);
8014         int total_req = bp->cp_nr_rings + num;
8015         int max_idx, avail_msix;
8016
8017         max_idx = bp->total_irqs;
8018         if (!(bp->flags & BNXT_FLAG_CHIP_P5))
8019                 max_idx = min_t(int, bp->total_irqs, max_cp);
8020         avail_msix = max_idx - bp->cp_nr_rings;
8021         if (!BNXT_NEW_RM(bp) || avail_msix >= num)
8022                 return avail_msix;
8023
8024         if (max_irq < total_req) {
8025                 num = max_irq - bp->cp_nr_rings;
8026                 if (num <= 0)
8027                         return 0;
8028         }
8029         return num;
8030 }
8031
8032 static int bnxt_get_num_msix(struct bnxt *bp)
8033 {
8034         if (!BNXT_NEW_RM(bp))
8035                 return bnxt_get_max_func_irqs(bp);
8036
8037         return bnxt_nq_rings_in_use(bp);
8038 }
8039
8040 static int bnxt_init_msix(struct bnxt *bp)
8041 {
8042         int i, total_vecs, max, rc = 0, min = 1, ulp_msix;
8043         struct msix_entry *msix_ent;
8044
8045         total_vecs = bnxt_get_num_msix(bp);
8046         max = bnxt_get_max_func_irqs(bp);
8047         if (total_vecs > max)
8048                 total_vecs = max;
8049
8050         if (!total_vecs)
8051                 return 0;
8052
8053         msix_ent = kcalloc(total_vecs, sizeof(struct msix_entry), GFP_KERNEL);
8054         if (!msix_ent)
8055                 return -ENOMEM;
8056
8057         for (i = 0; i < total_vecs; i++) {
8058                 msix_ent[i].entry = i;
8059                 msix_ent[i].vector = 0;
8060         }
8061
8062         if (!(bp->flags & BNXT_FLAG_SHARED_RINGS))
8063                 min = 2;
8064
8065         total_vecs = pci_enable_msix_range(bp->pdev, msix_ent, min, total_vecs);
8066         ulp_msix = bnxt_get_ulp_msix_num(bp);
8067         if (total_vecs < 0 || total_vecs < ulp_msix) {
8068                 rc = -ENODEV;
8069                 goto msix_setup_exit;
8070         }
8071
8072         bp->irq_tbl = kcalloc(total_vecs, sizeof(struct bnxt_irq), GFP_KERNEL);
8073         if (bp->irq_tbl) {
8074                 for (i = 0; i < total_vecs; i++)
8075                         bp->irq_tbl[i].vector = msix_ent[i].vector;
8076
8077                 bp->total_irqs = total_vecs;
8078                 /* Trim rings based upon num of vectors allocated */
8079                 rc = bnxt_trim_rings(bp, &bp->rx_nr_rings, &bp->tx_nr_rings,
8080                                      total_vecs - ulp_msix, min == 1);
8081                 if (rc)
8082                         goto msix_setup_exit;
8083
8084                 bp->cp_nr_rings = (min == 1) ?
8085                                   max_t(int, bp->tx_nr_rings, bp->rx_nr_rings) :
8086                                   bp->tx_nr_rings + bp->rx_nr_rings;
8087
8088         } else {
8089                 rc = -ENOMEM;
8090                 goto msix_setup_exit;
8091         }
8092         bp->flags |= BNXT_FLAG_USING_MSIX;
8093         kfree(msix_ent);
8094         return 0;
8095
8096 msix_setup_exit:
8097         netdev_err(bp->dev, "bnxt_init_msix err: %x\n", rc);
8098         kfree(bp->irq_tbl);
8099         bp->irq_tbl = NULL;
8100         pci_disable_msix(bp->pdev);
8101         kfree(msix_ent);
8102         return rc;
8103 }
8104
8105 static int bnxt_init_inta(struct bnxt *bp)
8106 {
8107         bp->irq_tbl = kcalloc(1, sizeof(struct bnxt_irq), GFP_KERNEL);
8108         if (!bp->irq_tbl)
8109                 return -ENOMEM;
8110
8111         bp->total_irqs = 1;
8112         bp->rx_nr_rings = 1;
8113         bp->tx_nr_rings = 1;
8114         bp->cp_nr_rings = 1;
8115         bp->flags |= BNXT_FLAG_SHARED_RINGS;
8116         bp->irq_tbl[0].vector = bp->pdev->irq;
8117         return 0;
8118 }
8119
8120 static int bnxt_init_int_mode(struct bnxt *bp)
8121 {
8122         int rc = 0;
8123
8124         if (bp->flags & BNXT_FLAG_MSIX_CAP)
8125                 rc = bnxt_init_msix(bp);
8126
8127         if (!(bp->flags & BNXT_FLAG_USING_MSIX) && BNXT_PF(bp)) {
8128                 /* fallback to INTA */
8129                 rc = bnxt_init_inta(bp);
8130         }
8131         return rc;
8132 }
8133
8134 static void bnxt_clear_int_mode(struct bnxt *bp)
8135 {
8136         if (bp->flags & BNXT_FLAG_USING_MSIX)
8137                 pci_disable_msix(bp->pdev);
8138
8139         kfree(bp->irq_tbl);
8140         bp->irq_tbl = NULL;
8141         bp->flags &= ~BNXT_FLAG_USING_MSIX;
8142 }
8143
8144 int bnxt_reserve_rings(struct bnxt *bp, bool irq_re_init)
8145 {
8146         int tcs = netdev_get_num_tc(bp->dev);
8147         bool irq_cleared = false;
8148         int rc;
8149
8150         if (!bnxt_need_reserve_rings(bp))
8151                 return 0;
8152
8153         if (irq_re_init && BNXT_NEW_RM(bp) &&
8154             bnxt_get_num_msix(bp) != bp->total_irqs) {
8155                 bnxt_ulp_irq_stop(bp);
8156                 bnxt_clear_int_mode(bp);
8157                 irq_cleared = true;
8158         }
8159         rc = __bnxt_reserve_rings(bp);
8160         if (irq_cleared) {
8161                 if (!rc)
8162                         rc = bnxt_init_int_mode(bp);
8163                 bnxt_ulp_irq_restart(bp, rc);
8164         }
8165         if (rc) {
8166                 netdev_err(bp->dev, "ring reservation/IRQ init failure rc: %d\n", rc);
8167                 return rc;
8168         }
8169         if (tcs && (bp->tx_nr_rings_per_tc * tcs != bp->tx_nr_rings)) {
8170                 netdev_err(bp->dev, "tx ring reservation failure\n");
8171                 netdev_reset_tc(bp->dev);
8172                 bp->tx_nr_rings_per_tc = bp->tx_nr_rings;
8173                 return -ENOMEM;
8174         }
8175         return 0;
8176 }
8177
8178 static void bnxt_free_irq(struct bnxt *bp)
8179 {
8180         struct bnxt_irq *irq;
8181         int i;
8182
8183 #ifdef CONFIG_RFS_ACCEL
8184         free_irq_cpu_rmap(bp->dev->rx_cpu_rmap);
8185         bp->dev->rx_cpu_rmap = NULL;
8186 #endif
8187         if (!bp->irq_tbl || !bp->bnapi)
8188                 return;
8189
8190         for (i = 0; i < bp->cp_nr_rings; i++) {
8191                 int map_idx = bnxt_cp_num_to_irq_num(bp, i);
8192
8193                 irq = &bp->irq_tbl[map_idx];
8194                 if (irq->requested) {
8195                         if (irq->have_cpumask) {
8196                                 irq_set_affinity_hint(irq->vector, NULL);
8197                                 free_cpumask_var(irq->cpu_mask);
8198                                 irq->have_cpumask = 0;
8199                         }
8200                         free_irq(irq->vector, bp->bnapi[i]);
8201                 }
8202
8203                 irq->requested = 0;
8204         }
8205 }
8206
8207 static int bnxt_request_irq(struct bnxt *bp)
8208 {
8209         int i, j, rc = 0;
8210         unsigned long flags = 0;
8211 #ifdef CONFIG_RFS_ACCEL
8212         struct cpu_rmap *rmap;
8213 #endif
8214
8215         rc = bnxt_setup_int_mode(bp);
8216         if (rc) {
8217                 netdev_err(bp->dev, "bnxt_setup_int_mode err: %x\n",
8218                            rc);
8219                 return rc;
8220         }
8221 #ifdef CONFIG_RFS_ACCEL
8222         rmap = bp->dev->rx_cpu_rmap;
8223 #endif
8224         if (!(bp->flags & BNXT_FLAG_USING_MSIX))
8225                 flags = IRQF_SHARED;
8226
8227         for (i = 0, j = 0; i < bp->cp_nr_rings; i++) {
8228                 int map_idx = bnxt_cp_num_to_irq_num(bp, i);
8229                 struct bnxt_irq *irq = &bp->irq_tbl[map_idx];
8230
8231 #ifdef CONFIG_RFS_ACCEL
8232                 if (rmap && bp->bnapi[i]->rx_ring) {
8233                         rc = irq_cpu_rmap_add(rmap, irq->vector);
8234                         if (rc)
8235                                 netdev_warn(bp->dev, "failed adding irq rmap for ring %d\n",
8236                                             j);
8237                         j++;
8238                 }
8239 #endif
8240                 rc = request_irq(irq->vector, irq->handler, flags, irq->name,
8241                                  bp->bnapi[i]);
8242                 if (rc)
8243                         break;
8244
8245                 irq->requested = 1;
8246
8247                 if (zalloc_cpumask_var(&irq->cpu_mask, GFP_KERNEL)) {
8248                         int numa_node = dev_to_node(&bp->pdev->dev);
8249
8250                         irq->have_cpumask = 1;
8251                         cpumask_set_cpu(cpumask_local_spread(i, numa_node),
8252                                         irq->cpu_mask);
8253                         rc = irq_set_affinity_hint(irq->vector, irq->cpu_mask);
8254                         if (rc) {
8255                                 netdev_warn(bp->dev,
8256                                             "Set affinity failed, IRQ = %d\n",
8257                                             irq->vector);
8258                                 break;
8259                         }
8260                 }
8261         }
8262         return rc;
8263 }
8264
8265 static void bnxt_del_napi(struct bnxt *bp)
8266 {
8267         int i;
8268
8269         if (!bp->bnapi)
8270                 return;
8271
8272         for (i = 0; i < bp->cp_nr_rings; i++) {
8273                 struct bnxt_napi *bnapi = bp->bnapi[i];
8274
8275                 napi_hash_del(&bnapi->napi);
8276                 netif_napi_del(&bnapi->napi);
8277         }
8278         /* We called napi_hash_del() before netif_napi_del(), we need
8279          * to respect an RCU grace period before freeing napi structures.
8280          */
8281         synchronize_net();
8282 }
8283
8284 static void bnxt_init_napi(struct bnxt *bp)
8285 {
8286         int i;
8287         unsigned int cp_nr_rings = bp->cp_nr_rings;
8288         struct bnxt_napi *bnapi;
8289
8290         if (bp->flags & BNXT_FLAG_USING_MSIX) {
8291                 int (*poll_fn)(struct napi_struct *, int) = bnxt_poll;
8292
8293                 if (bp->flags & BNXT_FLAG_CHIP_P5)
8294                         poll_fn = bnxt_poll_p5;
8295                 else if (BNXT_CHIP_TYPE_NITRO_A0(bp))
8296                         cp_nr_rings--;
8297                 for (i = 0; i < cp_nr_rings; i++) {
8298                         bnapi = bp->bnapi[i];
8299                         netif_napi_add(bp->dev, &bnapi->napi, poll_fn, 64);
8300                 }
8301                 if (BNXT_CHIP_TYPE_NITRO_A0(bp)) {
8302                         bnapi = bp->bnapi[cp_nr_rings];
8303                         netif_napi_add(bp->dev, &bnapi->napi,
8304                                        bnxt_poll_nitroa0, 64);
8305                 }
8306         } else {
8307                 bnapi = bp->bnapi[0];
8308                 netif_napi_add(bp->dev, &bnapi->napi, bnxt_poll, 64);
8309         }
8310 }
8311
8312 static void bnxt_disable_napi(struct bnxt *bp)
8313 {
8314         int i;
8315
8316         if (!bp->bnapi)
8317                 return;
8318
8319         for (i = 0; i < bp->cp_nr_rings; i++) {
8320                 struct bnxt_cp_ring_info *cpr = &bp->bnapi[i]->cp_ring;
8321
8322                 if (bp->bnapi[i]->rx_ring)
8323                         cancel_work_sync(&cpr->dim.work);
8324
8325                 napi_disable(&bp->bnapi[i]->napi);
8326         }
8327 }
8328
8329 static void bnxt_enable_napi(struct bnxt *bp)
8330 {
8331         int i;
8332
8333         for (i = 0; i < bp->cp_nr_rings; i++) {
8334                 struct bnxt_cp_ring_info *cpr = &bp->bnapi[i]->cp_ring;
8335                 bp->bnapi[i]->in_reset = false;
8336
8337                 if (bp->bnapi[i]->rx_ring) {
8338                         INIT_WORK(&cpr->dim.work, bnxt_dim_work);
8339                         cpr->dim.mode = DIM_CQ_PERIOD_MODE_START_FROM_EQE;
8340                 }
8341                 napi_enable(&bp->bnapi[i]->napi);
8342         }
8343 }
8344
8345 void bnxt_tx_disable(struct bnxt *bp)
8346 {
8347         int i;
8348         struct bnxt_tx_ring_info *txr;
8349
8350         if (bp->tx_ring) {
8351                 for (i = 0; i < bp->tx_nr_rings; i++) {
8352                         txr = &bp->tx_ring[i];
8353                         txr->dev_state = BNXT_DEV_STATE_CLOSING;
8354                 }
8355         }
8356         /* Stop all TX queues */
8357         netif_tx_disable(bp->dev);
8358         netif_carrier_off(bp->dev);
8359 }
8360
8361 void bnxt_tx_enable(struct bnxt *bp)
8362 {
8363         int i;
8364         struct bnxt_tx_ring_info *txr;
8365
8366         for (i = 0; i < bp->tx_nr_rings; i++) {
8367                 txr = &bp->tx_ring[i];
8368                 txr->dev_state = 0;
8369         }
8370         netif_tx_wake_all_queues(bp->dev);
8371         if (bp->link_info.link_up)
8372                 netif_carrier_on(bp->dev);
8373 }
8374
8375 static void bnxt_report_link(struct bnxt *bp)
8376 {
8377         if (bp->link_info.link_up) {
8378                 const char *duplex;
8379                 const char *flow_ctrl;
8380                 u32 speed;
8381                 u16 fec;
8382
8383                 netif_carrier_on(bp->dev);
8384                 if (bp->link_info.duplex == BNXT_LINK_DUPLEX_FULL)
8385                         duplex = "full";
8386                 else
8387                         duplex = "half";
8388                 if (bp->link_info.pause == BNXT_LINK_PAUSE_BOTH)
8389                         flow_ctrl = "ON - receive & transmit";
8390                 else if (bp->link_info.pause == BNXT_LINK_PAUSE_TX)
8391                         flow_ctrl = "ON - transmit";
8392                 else if (bp->link_info.pause == BNXT_LINK_PAUSE_RX)
8393                         flow_ctrl = "ON - receive";
8394                 else
8395                         flow_ctrl = "none";
8396                 speed = bnxt_fw_to_ethtool_speed(bp->link_info.link_speed);
8397                 netdev_info(bp->dev, "NIC Link is Up, %u Mbps %s duplex, Flow control: %s\n",
8398                             speed, duplex, flow_ctrl);
8399                 if (bp->flags & BNXT_FLAG_EEE_CAP)
8400                         netdev_info(bp->dev, "EEE is %s\n",
8401                                     bp->eee.eee_active ? "active" :
8402                                                          "not active");
8403                 fec = bp->link_info.fec_cfg;
8404                 if (!(fec & PORT_PHY_QCFG_RESP_FEC_CFG_FEC_NONE_SUPPORTED))
8405                         netdev_info(bp->dev, "FEC autoneg %s encodings: %s\n",
8406                                     (fec & BNXT_FEC_AUTONEG) ? "on" : "off",
8407                                     (fec & BNXT_FEC_ENC_BASE_R) ? "BaseR" :
8408                                      (fec & BNXT_FEC_ENC_RS) ? "RS" : "None");
8409         } else {
8410                 netif_carrier_off(bp->dev);
8411                 netdev_err(bp->dev, "NIC Link is Down\n");
8412         }
8413 }
8414
8415 static int bnxt_hwrm_phy_qcaps(struct bnxt *bp)
8416 {
8417         int rc = 0;
8418         struct hwrm_port_phy_qcaps_input req = {0};
8419         struct hwrm_port_phy_qcaps_output *resp = bp->hwrm_cmd_resp_addr;
8420         struct bnxt_link_info *link_info = &bp->link_info;
8421
8422         bp->flags &= ~BNXT_FLAG_EEE_CAP;
8423         if (bp->test_info)
8424                 bp->test_info->flags &= ~(BNXT_TEST_FL_EXT_LPBK |
8425                                           BNXT_TEST_FL_AN_PHY_LPBK);
8426         if (bp->hwrm_spec_code < 0x10201)
8427                 return 0;
8428
8429         bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_PORT_PHY_QCAPS, -1, -1);
8430
8431         mutex_lock(&bp->hwrm_cmd_lock);
8432         rc = _hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
8433         if (rc)
8434                 goto hwrm_phy_qcaps_exit;
8435
8436         if (resp->flags & PORT_PHY_QCAPS_RESP_FLAGS_EEE_SUPPORTED) {
8437                 struct ethtool_eee *eee = &bp->eee;
8438                 u16 fw_speeds = le16_to_cpu(resp->supported_speeds_eee_mode);
8439
8440                 bp->flags |= BNXT_FLAG_EEE_CAP;
8441                 eee->supported = _bnxt_fw_to_ethtool_adv_spds(fw_speeds, 0);
8442                 bp->lpi_tmr_lo = le32_to_cpu(resp->tx_lpi_timer_low) &
8443                                  PORT_PHY_QCAPS_RESP_TX_LPI_TIMER_LOW_MASK;
8444                 bp->lpi_tmr_hi = le32_to_cpu(resp->valid_tx_lpi_timer_high) &
8445                                  PORT_PHY_QCAPS_RESP_TX_LPI_TIMER_HIGH_MASK;
8446         }
8447         if (resp->flags & PORT_PHY_QCAPS_RESP_FLAGS_EXTERNAL_LPBK_SUPPORTED) {
8448                 if (bp->test_info)
8449                         bp->test_info->flags |= BNXT_TEST_FL_EXT_LPBK;
8450         }
8451         if (resp->flags & PORT_PHY_QCAPS_RESP_FLAGS_AUTONEG_LPBK_SUPPORTED) {
8452                 if (bp->test_info)
8453                         bp->test_info->flags |= BNXT_TEST_FL_AN_PHY_LPBK;
8454         }
8455         if (resp->flags & PORT_PHY_QCAPS_RESP_FLAGS_SHARED_PHY_CFG_SUPPORTED) {
8456                 if (BNXT_PF(bp))
8457                         bp->fw_cap |= BNXT_FW_CAP_SHARED_PORT_CFG;
8458         }
8459         if (resp->supported_speeds_auto_mode)
8460                 link_info->support_auto_speeds =
8461                         le16_to_cpu(resp->supported_speeds_auto_mode);
8462
8463         bp->port_count = resp->port_cnt;
8464
8465 hwrm_phy_qcaps_exit:
8466         mutex_unlock(&bp->hwrm_cmd_lock);
8467         return rc;
8468 }
8469
8470 static int bnxt_update_link(struct bnxt *bp, bool chng_link_state)
8471 {
8472         int rc = 0;
8473         struct bnxt_link_info *link_info = &bp->link_info;
8474         struct hwrm_port_phy_qcfg_input req = {0};
8475         struct hwrm_port_phy_qcfg_output *resp = bp->hwrm_cmd_resp_addr;
8476         u8 link_up = link_info->link_up;
8477         u16 diff;
8478
8479         bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_PORT_PHY_QCFG, -1, -1);
8480
8481         mutex_lock(&bp->hwrm_cmd_lock);
8482         rc = _hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
8483         if (rc) {
8484                 mutex_unlock(&bp->hwrm_cmd_lock);
8485                 return rc;
8486         }
8487
8488         memcpy(&link_info->phy_qcfg_resp, resp, sizeof(*resp));
8489         link_info->phy_link_status = resp->link;
8490         link_info->duplex = resp->duplex_cfg;
8491         if (bp->hwrm_spec_code >= 0x10800)
8492                 link_info->duplex = resp->duplex_state;
8493         link_info->pause = resp->pause;
8494         link_info->auto_mode = resp->auto_mode;
8495         link_info->auto_pause_setting = resp->auto_pause;
8496         link_info->lp_pause = resp->link_partner_adv_pause;
8497         link_info->force_pause_setting = resp->force_pause;
8498         link_info->duplex_setting = resp->duplex_cfg;
8499         if (link_info->phy_link_status == BNXT_LINK_LINK)
8500                 link_info->link_speed = le16_to_cpu(resp->link_speed);
8501         else
8502                 link_info->link_speed = 0;
8503         link_info->force_link_speed = le16_to_cpu(resp->force_link_speed);
8504         link_info->support_speeds = le16_to_cpu(resp->support_speeds);
8505         link_info->auto_link_speeds = le16_to_cpu(resp->auto_link_speed_mask);
8506         link_info->lp_auto_link_speeds =
8507                 le16_to_cpu(resp->link_partner_adv_speeds);
8508         link_info->preemphasis = le32_to_cpu(resp->preemphasis);
8509         link_info->phy_ver[0] = resp->phy_maj;
8510         link_info->phy_ver[1] = resp->phy_min;
8511         link_info->phy_ver[2] = resp->phy_bld;
8512         link_info->media_type = resp->media_type;
8513         link_info->phy_type = resp->phy_type;
8514         link_info->transceiver = resp->xcvr_pkg_type;
8515         link_info->phy_addr = resp->eee_config_phy_addr &
8516                               PORT_PHY_QCFG_RESP_PHY_ADDR_MASK;
8517         link_info->module_status = resp->module_status;
8518
8519         if (bp->flags & BNXT_FLAG_EEE_CAP) {
8520                 struct ethtool_eee *eee = &bp->eee;
8521                 u16 fw_speeds;
8522
8523                 eee->eee_active = 0;
8524                 if (resp->eee_config_phy_addr &
8525                     PORT_PHY_QCFG_RESP_EEE_CONFIG_EEE_ACTIVE) {
8526                         eee->eee_active = 1;
8527                         fw_speeds = le16_to_cpu(
8528                                 resp->link_partner_adv_eee_link_speed_mask);
8529                         eee->lp_advertised =
8530                                 _bnxt_fw_to_ethtool_adv_spds(fw_speeds, 0);
8531                 }
8532
8533                 /* Pull initial EEE config */
8534                 if (!chng_link_state) {
8535                         if (resp->eee_config_phy_addr &
8536                             PORT_PHY_QCFG_RESP_EEE_CONFIG_EEE_ENABLED)
8537                                 eee->eee_enabled = 1;
8538
8539                         fw_speeds = le16_to_cpu(resp->adv_eee_link_speed_mask);
8540                         eee->advertised =
8541                                 _bnxt_fw_to_ethtool_adv_spds(fw_speeds, 0);
8542
8543                         if (resp->eee_config_phy_addr &
8544                             PORT_PHY_QCFG_RESP_EEE_CONFIG_EEE_TX_LPI) {
8545                                 __le32 tmr;
8546
8547                                 eee->tx_lpi_enabled = 1;
8548                                 tmr = resp->xcvr_identifier_type_tx_lpi_timer;
8549                                 eee->tx_lpi_timer = le32_to_cpu(tmr) &
8550                                         PORT_PHY_QCFG_RESP_TX_LPI_TIMER_MASK;
8551                         }
8552                 }
8553         }
8554
8555         link_info->fec_cfg = PORT_PHY_QCFG_RESP_FEC_CFG_FEC_NONE_SUPPORTED;
8556         if (bp->hwrm_spec_code >= 0x10504)
8557                 link_info->fec_cfg = le16_to_cpu(resp->fec_cfg);
8558
8559         /* TODO: need to add more logic to report VF link */
8560         if (chng_link_state) {
8561                 if (link_info->phy_link_status == BNXT_LINK_LINK)
8562                         link_info->link_up = 1;
8563                 else
8564                         link_info->link_up = 0;
8565                 if (link_up != link_info->link_up)
8566                         bnxt_report_link(bp);
8567         } else {
8568                 /* alwasy link down if not require to update link state */
8569                 link_info->link_up = 0;
8570         }
8571         mutex_unlock(&bp->hwrm_cmd_lock);
8572
8573         if (!BNXT_PHY_CFG_ABLE(bp))
8574                 return 0;
8575
8576         diff = link_info->support_auto_speeds ^ link_info->advertising;
8577         if ((link_info->support_auto_speeds | diff) !=
8578             link_info->support_auto_speeds) {
8579                 /* An advertised speed is no longer supported, so we need to
8580                  * update the advertisement settings.  Caller holds RTNL
8581                  * so we can modify link settings.
8582                  */
8583                 link_info->advertising = link_info->support_auto_speeds;
8584                 if (link_info->autoneg & BNXT_AUTONEG_SPEED)
8585                         bnxt_hwrm_set_link_setting(bp, true, false);
8586         }
8587         return 0;
8588 }
8589
8590 static void bnxt_get_port_module_status(struct bnxt *bp)
8591 {
8592         struct bnxt_link_info *link_info = &bp->link_info;
8593         struct hwrm_port_phy_qcfg_output *resp = &link_info->phy_qcfg_resp;
8594         u8 module_status;
8595
8596         if (bnxt_update_link(bp, true))
8597                 return;
8598
8599         module_status = link_info->module_status;
8600         switch (module_status) {
8601         case PORT_PHY_QCFG_RESP_MODULE_STATUS_DISABLETX:
8602         case PORT_PHY_QCFG_RESP_MODULE_STATUS_PWRDOWN:
8603         case PORT_PHY_QCFG_RESP_MODULE_STATUS_WARNINGMSG:
8604                 netdev_warn(bp->dev, "Unqualified SFP+ module detected on port %d\n",
8605                             bp->pf.port_id);
8606                 if (bp->hwrm_spec_code >= 0x10201) {
8607                         netdev_warn(bp->dev, "Module part number %s\n",
8608                                     resp->phy_vendor_partnumber);
8609                 }
8610                 if (module_status == PORT_PHY_QCFG_RESP_MODULE_STATUS_DISABLETX)
8611                         netdev_warn(bp->dev, "TX is disabled\n");
8612                 if (module_status == PORT_PHY_QCFG_RESP_MODULE_STATUS_PWRDOWN)
8613                         netdev_warn(bp->dev, "SFP+ module is shutdown\n");
8614         }
8615 }
8616
8617 static void
8618 bnxt_hwrm_set_pause_common(struct bnxt *bp, struct hwrm_port_phy_cfg_input *req)
8619 {
8620         if (bp->link_info.autoneg & BNXT_AUTONEG_FLOW_CTRL) {
8621                 if (bp->hwrm_spec_code >= 0x10201)
8622                         req->auto_pause =
8623                                 PORT_PHY_CFG_REQ_AUTO_PAUSE_AUTONEG_PAUSE;
8624                 if (bp->link_info.req_flow_ctrl & BNXT_LINK_PAUSE_RX)
8625                         req->auto_pause |= PORT_PHY_CFG_REQ_AUTO_PAUSE_RX;
8626                 if (bp->link_info.req_flow_ctrl & BNXT_LINK_PAUSE_TX)
8627                         req->auto_pause |= PORT_PHY_CFG_REQ_AUTO_PAUSE_TX;
8628                 req->enables |=
8629                         cpu_to_le32(PORT_PHY_CFG_REQ_ENABLES_AUTO_PAUSE);
8630         } else {
8631                 if (bp->link_info.req_flow_ctrl & BNXT_LINK_PAUSE_RX)
8632                         req->force_pause |= PORT_PHY_CFG_REQ_FORCE_PAUSE_RX;
8633                 if (bp->link_info.req_flow_ctrl & BNXT_LINK_PAUSE_TX)
8634                         req->force_pause |= PORT_PHY_CFG_REQ_FORCE_PAUSE_TX;
8635                 req->enables |=
8636                         cpu_to_le32(PORT_PHY_CFG_REQ_ENABLES_FORCE_PAUSE);
8637                 if (bp->hwrm_spec_code >= 0x10201) {
8638                         req->auto_pause = req->force_pause;
8639                         req->enables |= cpu_to_le32(
8640                                 PORT_PHY_CFG_REQ_ENABLES_AUTO_PAUSE);
8641                 }
8642         }
8643 }
8644
8645 static void bnxt_hwrm_set_link_common(struct bnxt *bp,
8646                                       struct hwrm_port_phy_cfg_input *req)
8647 {
8648         u8 autoneg = bp->link_info.autoneg;
8649         u16 fw_link_speed = bp->link_info.req_link_speed;
8650         u16 advertising = bp->link_info.advertising;
8651
8652         if (autoneg & BNXT_AUTONEG_SPEED) {
8653                 req->auto_mode |=
8654                         PORT_PHY_CFG_REQ_AUTO_MODE_SPEED_MASK;
8655
8656                 req->enables |= cpu_to_le32(
8657                         PORT_PHY_CFG_REQ_ENABLES_AUTO_LINK_SPEED_MASK);
8658                 req->auto_link_speed_mask = cpu_to_le16(advertising);
8659
8660                 req->enables |= cpu_to_le32(PORT_PHY_CFG_REQ_ENABLES_AUTO_MODE);
8661                 req->flags |=
8662                         cpu_to_le32(PORT_PHY_CFG_REQ_FLAGS_RESTART_AUTONEG);
8663         } else {
8664                 req->force_link_speed = cpu_to_le16(fw_link_speed);
8665                 req->flags |= cpu_to_le32(PORT_PHY_CFG_REQ_FLAGS_FORCE);
8666         }
8667
8668         /* tell chimp that the setting takes effect immediately */
8669         req->flags |= cpu_to_le32(PORT_PHY_CFG_REQ_FLAGS_RESET_PHY);
8670 }
8671
8672 int bnxt_hwrm_set_pause(struct bnxt *bp)
8673 {
8674         struct hwrm_port_phy_cfg_input req = {0};
8675         int rc;
8676
8677         bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_PORT_PHY_CFG, -1, -1);
8678         bnxt_hwrm_set_pause_common(bp, &req);
8679
8680         if ((bp->link_info.autoneg & BNXT_AUTONEG_FLOW_CTRL) ||
8681             bp->link_info.force_link_chng)
8682                 bnxt_hwrm_set_link_common(bp, &req);
8683
8684         mutex_lock(&bp->hwrm_cmd_lock);
8685         rc = _hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
8686         if (!rc && !(bp->link_info.autoneg & BNXT_AUTONEG_FLOW_CTRL)) {
8687                 /* since changing of pause setting doesn't trigger any link
8688                  * change event, the driver needs to update the current pause
8689                  * result upon successfully return of the phy_cfg command
8690                  */
8691                 bp->link_info.pause =
8692                 bp->link_info.force_pause_setting = bp->link_info.req_flow_ctrl;
8693                 bp->link_info.auto_pause_setting = 0;
8694                 if (!bp->link_info.force_link_chng)
8695                         bnxt_report_link(bp);
8696         }
8697         bp->link_info.force_link_chng = false;
8698         mutex_unlock(&bp->hwrm_cmd_lock);
8699         return rc;
8700 }
8701
8702 static void bnxt_hwrm_set_eee(struct bnxt *bp,
8703                               struct hwrm_port_phy_cfg_input *req)
8704 {
8705         struct ethtool_eee *eee = &bp->eee;
8706
8707         if (eee->eee_enabled) {
8708                 u16 eee_speeds;
8709                 u32 flags = PORT_PHY_CFG_REQ_FLAGS_EEE_ENABLE;
8710
8711                 if (eee->tx_lpi_enabled)
8712                         flags |= PORT_PHY_CFG_REQ_FLAGS_EEE_TX_LPI_ENABLE;
8713                 else
8714                         flags |= PORT_PHY_CFG_REQ_FLAGS_EEE_TX_LPI_DISABLE;
8715
8716                 req->flags |= cpu_to_le32(flags);
8717                 eee_speeds = bnxt_get_fw_auto_link_speeds(eee->advertised);
8718                 req->eee_link_speed_mask = cpu_to_le16(eee_speeds);
8719                 req->tx_lpi_timer = cpu_to_le32(eee->tx_lpi_timer);
8720         } else {
8721                 req->flags |= cpu_to_le32(PORT_PHY_CFG_REQ_FLAGS_EEE_DISABLE);
8722         }
8723 }
8724
8725 int bnxt_hwrm_set_link_setting(struct bnxt *bp, bool set_pause, bool set_eee)
8726 {
8727         struct hwrm_port_phy_cfg_input req = {0};
8728
8729         bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_PORT_PHY_CFG, -1, -1);
8730         if (set_pause)
8731                 bnxt_hwrm_set_pause_common(bp, &req);
8732
8733         bnxt_hwrm_set_link_common(bp, &req);
8734
8735         if (set_eee)
8736                 bnxt_hwrm_set_eee(bp, &req);
8737         return hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
8738 }
8739
8740 static int bnxt_hwrm_shutdown_link(struct bnxt *bp)
8741 {
8742         struct hwrm_port_phy_cfg_input req = {0};
8743
8744         if (!BNXT_SINGLE_PF(bp))
8745                 return 0;
8746
8747         if (pci_num_vf(bp->pdev))
8748                 return 0;
8749
8750         bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_PORT_PHY_CFG, -1, -1);
8751         req.flags = cpu_to_le32(PORT_PHY_CFG_REQ_FLAGS_FORCE_LINK_DWN);
8752         return hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
8753 }
8754
8755 static int bnxt_fw_init_one(struct bnxt *bp);
8756
8757 static int bnxt_hwrm_if_change(struct bnxt *bp, bool up)
8758 {
8759         struct hwrm_func_drv_if_change_output *resp = bp->hwrm_cmd_resp_addr;
8760         struct hwrm_func_drv_if_change_input req = {0};
8761         bool resc_reinit = false, fw_reset = false;
8762         u32 flags = 0;
8763         int rc;
8764
8765         if (!(bp->fw_cap & BNXT_FW_CAP_IF_CHANGE))
8766                 return 0;
8767
8768         bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_FUNC_DRV_IF_CHANGE, -1, -1);
8769         if (up)
8770                 req.flags = cpu_to_le32(FUNC_DRV_IF_CHANGE_REQ_FLAGS_UP);
8771         mutex_lock(&bp->hwrm_cmd_lock);
8772         rc = _hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
8773         if (!rc)
8774                 flags = le32_to_cpu(resp->flags);
8775         mutex_unlock(&bp->hwrm_cmd_lock);
8776         if (rc)
8777                 return rc;
8778
8779         if (!up)
8780                 return 0;
8781
8782         if (flags & FUNC_DRV_IF_CHANGE_RESP_FLAGS_RESC_CHANGE)
8783                 resc_reinit = true;
8784         if (flags & FUNC_DRV_IF_CHANGE_RESP_FLAGS_HOT_FW_RESET_DONE)
8785                 fw_reset = true;
8786
8787         if (test_bit(BNXT_STATE_IN_FW_RESET, &bp->state) && !fw_reset) {
8788                 netdev_err(bp->dev, "RESET_DONE not set during FW reset.\n");
8789                 return -ENODEV;
8790         }
8791         if (resc_reinit || fw_reset) {
8792                 if (fw_reset) {
8793                         if (!test_bit(BNXT_STATE_IN_FW_RESET, &bp->state))
8794                                 bnxt_ulp_stop(bp);
8795                         bnxt_free_ctx_mem(bp);
8796                         kfree(bp->ctx);
8797                         bp->ctx = NULL;
8798                         rc = bnxt_fw_init_one(bp);
8799                         if (rc) {
8800                                 set_bit(BNXT_STATE_ABORT_ERR, &bp->state);
8801                                 return rc;
8802                         }
8803                         bnxt_clear_int_mode(bp);
8804                         rc = bnxt_init_int_mode(bp);
8805                         if (rc) {
8806                                 netdev_err(bp->dev, "init int mode failed\n");
8807                                 return rc;
8808                         }
8809                         set_bit(BNXT_STATE_FW_RESET_DET, &bp->state);
8810                 }
8811                 if (BNXT_NEW_RM(bp)) {
8812                         struct bnxt_hw_resc *hw_resc = &bp->hw_resc;
8813
8814                         rc = bnxt_hwrm_func_resc_qcaps(bp, true);
8815                         hw_resc->resv_cp_rings = 0;
8816                         hw_resc->resv_stat_ctxs = 0;
8817                         hw_resc->resv_irqs = 0;
8818                         hw_resc->resv_tx_rings = 0;
8819                         hw_resc->resv_rx_rings = 0;
8820                         hw_resc->resv_hw_ring_grps = 0;
8821                         hw_resc->resv_vnics = 0;
8822                         if (!fw_reset) {
8823                                 bp->tx_nr_rings = 0;
8824                                 bp->rx_nr_rings = 0;
8825                         }
8826                 }
8827         }
8828         return 0;
8829 }
8830
8831 static int bnxt_hwrm_port_led_qcaps(struct bnxt *bp)
8832 {
8833         struct hwrm_port_led_qcaps_output *resp = bp->hwrm_cmd_resp_addr;
8834         struct hwrm_port_led_qcaps_input req = {0};
8835         struct bnxt_pf_info *pf = &bp->pf;
8836         int rc;
8837
8838         bp->num_leds = 0;
8839         if (BNXT_VF(bp) || bp->hwrm_spec_code < 0x10601)
8840                 return 0;
8841
8842         bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_PORT_LED_QCAPS, -1, -1);
8843         req.port_id = cpu_to_le16(pf->port_id);
8844         mutex_lock(&bp->hwrm_cmd_lock);
8845         rc = _hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
8846         if (rc) {
8847                 mutex_unlock(&bp->hwrm_cmd_lock);
8848                 return rc;
8849         }
8850         if (resp->num_leds > 0 && resp->num_leds < BNXT_MAX_LED) {
8851                 int i;
8852
8853                 bp->num_leds = resp->num_leds;
8854                 memcpy(bp->leds, &resp->led0_id, sizeof(bp->leds[0]) *
8855                                                  bp->num_leds);
8856                 for (i = 0; i < bp->num_leds; i++) {
8857                         struct bnxt_led_info *led = &bp->leds[i];
8858                         __le16 caps = led->led_state_caps;
8859
8860                         if (!led->led_group_id ||
8861                             !BNXT_LED_ALT_BLINK_CAP(caps)) {
8862                                 bp->num_leds = 0;
8863                                 break;
8864                         }
8865                 }
8866         }
8867         mutex_unlock(&bp->hwrm_cmd_lock);
8868         return 0;
8869 }
8870
8871 int bnxt_hwrm_alloc_wol_fltr(struct bnxt *bp)
8872 {
8873         struct hwrm_wol_filter_alloc_input req = {0};
8874         struct hwrm_wol_filter_alloc_output *resp = bp->hwrm_cmd_resp_addr;
8875         int rc;
8876
8877         bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_WOL_FILTER_ALLOC, -1, -1);
8878         req.port_id = cpu_to_le16(bp->pf.port_id);
8879         req.wol_type = WOL_FILTER_ALLOC_REQ_WOL_TYPE_MAGICPKT;
8880         req.enables = cpu_to_le32(WOL_FILTER_ALLOC_REQ_ENABLES_MAC_ADDRESS);
8881         memcpy(req.mac_address, bp->dev->dev_addr, ETH_ALEN);
8882         mutex_lock(&bp->hwrm_cmd_lock);
8883         rc = _hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
8884         if (!rc)
8885                 bp->wol_filter_id = resp->wol_filter_id;
8886         mutex_unlock(&bp->hwrm_cmd_lock);
8887         return rc;
8888 }
8889
8890 int bnxt_hwrm_free_wol_fltr(struct bnxt *bp)
8891 {
8892         struct hwrm_wol_filter_free_input req = {0};
8893         int rc;
8894
8895         bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_WOL_FILTER_FREE, -1, -1);
8896         req.port_id = cpu_to_le16(bp->pf.port_id);
8897         req.enables = cpu_to_le32(WOL_FILTER_FREE_REQ_ENABLES_WOL_FILTER_ID);
8898         req.wol_filter_id = bp->wol_filter_id;
8899         rc = hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
8900         return rc;
8901 }
8902
8903 static u16 bnxt_hwrm_get_wol_fltrs(struct bnxt *bp, u16 handle)
8904 {
8905         struct hwrm_wol_filter_qcfg_input req = {0};
8906         struct hwrm_wol_filter_qcfg_output *resp = bp->hwrm_cmd_resp_addr;
8907         u16 next_handle = 0;
8908         int rc;
8909
8910         bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_WOL_FILTER_QCFG, -1, -1);
8911         req.port_id = cpu_to_le16(bp->pf.port_id);
8912         req.handle = cpu_to_le16(handle);
8913         mutex_lock(&bp->hwrm_cmd_lock);
8914         rc = _hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
8915         if (!rc) {
8916                 next_handle = le16_to_cpu(resp->next_handle);
8917                 if (next_handle != 0) {
8918                         if (resp->wol_type ==
8919                             WOL_FILTER_ALLOC_REQ_WOL_TYPE_MAGICPKT) {
8920                                 bp->wol = 1;
8921                                 bp->wol_filter_id = resp->wol_filter_id;
8922                         }
8923                 }
8924         }
8925         mutex_unlock(&bp->hwrm_cmd_lock);
8926         return next_handle;
8927 }
8928
8929 static void bnxt_get_wol_settings(struct bnxt *bp)
8930 {
8931         u16 handle = 0;
8932
8933         bp->wol = 0;
8934         if (!BNXT_PF(bp) || !(bp->flags & BNXT_FLAG_WOL_CAP))
8935                 return;
8936
8937         do {
8938                 handle = bnxt_hwrm_get_wol_fltrs(bp, handle);
8939         } while (handle && handle != 0xffff);
8940 }
8941
8942 #ifdef CONFIG_BNXT_HWMON
8943 static ssize_t bnxt_show_temp(struct device *dev,
8944                               struct device_attribute *devattr, char *buf)
8945 {
8946         struct hwrm_temp_monitor_query_input req = {0};
8947         struct hwrm_temp_monitor_query_output *resp;
8948         struct bnxt *bp = dev_get_drvdata(dev);
8949         u32 temp = 0;
8950
8951         resp = bp->hwrm_cmd_resp_addr;
8952         bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_TEMP_MONITOR_QUERY, -1, -1);
8953         mutex_lock(&bp->hwrm_cmd_lock);
8954         if (!_hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT))
8955                 temp = resp->temp * 1000; /* display millidegree */
8956         mutex_unlock(&bp->hwrm_cmd_lock);
8957
8958         return sprintf(buf, "%u\n", temp);
8959 }
8960 static SENSOR_DEVICE_ATTR(temp1_input, 0444, bnxt_show_temp, NULL, 0);
8961
8962 static struct attribute *bnxt_attrs[] = {
8963         &sensor_dev_attr_temp1_input.dev_attr.attr,
8964         NULL
8965 };
8966 ATTRIBUTE_GROUPS(bnxt);
8967
8968 static void bnxt_hwmon_close(struct bnxt *bp)
8969 {
8970         if (bp->hwmon_dev) {
8971                 hwmon_device_unregister(bp->hwmon_dev);
8972                 bp->hwmon_dev = NULL;
8973         }
8974 }
8975
8976 static void bnxt_hwmon_open(struct bnxt *bp)
8977 {
8978         struct pci_dev *pdev = bp->pdev;
8979
8980         if (bp->hwmon_dev)
8981                 return;
8982
8983         bp->hwmon_dev = hwmon_device_register_with_groups(&pdev->dev,
8984                                                           DRV_MODULE_NAME, bp,
8985                                                           bnxt_groups);
8986         if (IS_ERR(bp->hwmon_dev)) {
8987                 bp->hwmon_dev = NULL;
8988                 dev_warn(&pdev->dev, "Cannot register hwmon device\n");
8989         }
8990 }
8991 #else
8992 static void bnxt_hwmon_close(struct bnxt *bp)
8993 {
8994 }
8995
8996 static void bnxt_hwmon_open(struct bnxt *bp)
8997 {
8998 }
8999 #endif
9000
9001 static bool bnxt_eee_config_ok(struct bnxt *bp)
9002 {
9003         struct ethtool_eee *eee = &bp->eee;
9004         struct bnxt_link_info *link_info = &bp->link_info;
9005
9006         if (!(bp->flags & BNXT_FLAG_EEE_CAP))
9007                 return true;
9008
9009         if (eee->eee_enabled) {
9010                 u32 advertising =
9011                         _bnxt_fw_to_ethtool_adv_spds(link_info->advertising, 0);
9012
9013                 if (!(link_info->autoneg & BNXT_AUTONEG_SPEED)) {
9014                         eee->eee_enabled = 0;
9015                         return false;
9016                 }
9017                 if (eee->advertised & ~advertising) {
9018                         eee->advertised = advertising & eee->supported;
9019                         return false;
9020                 }
9021         }
9022         return true;
9023 }
9024
9025 static int bnxt_update_phy_setting(struct bnxt *bp)
9026 {
9027         int rc;
9028         bool update_link = false;
9029         bool update_pause = false;
9030         bool update_eee = false;
9031         struct bnxt_link_info *link_info = &bp->link_info;
9032
9033         rc = bnxt_update_link(bp, true);
9034         if (rc) {
9035                 netdev_err(bp->dev, "failed to update link (rc: %x)\n",
9036                            rc);
9037                 return rc;
9038         }
9039         if (!BNXT_SINGLE_PF(bp))
9040                 return 0;
9041
9042         if ((link_info->autoneg & BNXT_AUTONEG_FLOW_CTRL) &&
9043             (link_info->auto_pause_setting & BNXT_LINK_PAUSE_BOTH) !=
9044             link_info->req_flow_ctrl)
9045                 update_pause = true;
9046         if (!(link_info->autoneg & BNXT_AUTONEG_FLOW_CTRL) &&
9047             link_info->force_pause_setting != link_info->req_flow_ctrl)
9048                 update_pause = true;
9049         if (!(link_info->autoneg & BNXT_AUTONEG_SPEED)) {
9050                 if (BNXT_AUTO_MODE(link_info->auto_mode))
9051                         update_link = true;
9052                 if (link_info->req_link_speed != link_info->force_link_speed)
9053                         update_link = true;
9054                 if (link_info->req_duplex != link_info->duplex_setting)
9055                         update_link = true;
9056         } else {
9057                 if (link_info->auto_mode == BNXT_LINK_AUTO_NONE)
9058                         update_link = true;
9059                 if (link_info->advertising != link_info->auto_link_speeds)
9060                         update_link = true;
9061         }
9062
9063         /* The last close may have shutdown the link, so need to call
9064          * PHY_CFG to bring it back up.
9065          */
9066         if (!netif_carrier_ok(bp->dev))
9067                 update_link = true;
9068
9069         if (!bnxt_eee_config_ok(bp))
9070                 update_eee = true;
9071
9072         if (update_link)
9073                 rc = bnxt_hwrm_set_link_setting(bp, update_pause, update_eee);
9074         else if (update_pause)
9075                 rc = bnxt_hwrm_set_pause(bp);
9076         if (rc) {
9077                 netdev_err(bp->dev, "failed to update phy setting (rc: %x)\n",
9078                            rc);
9079                 return rc;
9080         }
9081
9082         return rc;
9083 }
9084
9085 /* Common routine to pre-map certain register block to different GRC window.
9086  * A PF has 16 4K windows and a VF has 4 4K windows. However, only 15 windows
9087  * in PF and 3 windows in VF that can be customized to map in different
9088  * register blocks.
9089  */
9090 static void bnxt_preset_reg_win(struct bnxt *bp)
9091 {
9092         if (BNXT_PF(bp)) {
9093                 /* CAG registers map to GRC window #4 */
9094                 writel(BNXT_CAG_REG_BASE,
9095                        bp->bar0 + BNXT_GRCPF_REG_WINDOW_BASE_OUT + 12);
9096         }
9097 }
9098
9099 static int bnxt_init_dflt_ring_mode(struct bnxt *bp);
9100
9101 static int __bnxt_open_nic(struct bnxt *bp, bool irq_re_init, bool link_re_init)
9102 {
9103         int rc = 0;
9104
9105         bnxt_preset_reg_win(bp);
9106         netif_carrier_off(bp->dev);
9107         if (irq_re_init) {
9108                 /* Reserve rings now if none were reserved at driver probe. */
9109                 rc = bnxt_init_dflt_ring_mode(bp);
9110                 if (rc) {
9111                         netdev_err(bp->dev, "Failed to reserve default rings at open\n");
9112                         return rc;
9113                 }
9114         }
9115         rc = bnxt_reserve_rings(bp, irq_re_init);
9116         if (rc)
9117                 return rc;
9118         if ((bp->flags & BNXT_FLAG_RFS) &&
9119             !(bp->flags & BNXT_FLAG_USING_MSIX)) {
9120                 /* disable RFS if falling back to INTA */
9121                 bp->dev->hw_features &= ~NETIF_F_NTUPLE;
9122                 bp->flags &= ~BNXT_FLAG_RFS;
9123         }
9124
9125         rc = bnxt_alloc_mem(bp, irq_re_init);
9126         if (rc) {
9127                 netdev_err(bp->dev, "bnxt_alloc_mem err: %x\n", rc);
9128                 goto open_err_free_mem;
9129         }
9130
9131         if (irq_re_init) {
9132                 bnxt_init_napi(bp);
9133                 rc = bnxt_request_irq(bp);
9134                 if (rc) {
9135                         netdev_err(bp->dev, "bnxt_request_irq err: %x\n", rc);
9136                         goto open_err_irq;
9137                 }
9138         }
9139
9140         bnxt_enable_napi(bp);
9141         bnxt_debug_dev_init(bp);
9142
9143         rc = bnxt_init_nic(bp, irq_re_init);
9144         if (rc) {
9145                 netdev_err(bp->dev, "bnxt_init_nic err: %x\n", rc);
9146                 goto open_err;
9147         }
9148
9149         if (link_re_init) {
9150                 mutex_lock(&bp->link_lock);
9151                 rc = bnxt_update_phy_setting(bp);
9152                 mutex_unlock(&bp->link_lock);
9153                 if (rc) {
9154                         netdev_warn(bp->dev, "failed to update phy settings\n");
9155                         if (BNXT_SINGLE_PF(bp)) {
9156                                 bp->link_info.phy_retry = true;
9157                                 bp->link_info.phy_retry_expires =
9158                                         jiffies + 5 * HZ;
9159                         }
9160                 }
9161         }
9162
9163         if (irq_re_init)
9164                 udp_tunnel_get_rx_info(bp->dev);
9165
9166         set_bit(BNXT_STATE_OPEN, &bp->state);
9167         bnxt_enable_int(bp);
9168         /* Enable TX queues */
9169         bnxt_tx_enable(bp);
9170         mod_timer(&bp->timer, jiffies + bp->current_interval);
9171         /* Poll link status and check for SFP+ module status */
9172         bnxt_get_port_module_status(bp);
9173
9174         /* VF-reps may need to be re-opened after the PF is re-opened */
9175         if (BNXT_PF(bp))
9176                 bnxt_vf_reps_open(bp);
9177         return 0;
9178
9179 open_err:
9180         bnxt_debug_dev_exit(bp);
9181         bnxt_disable_napi(bp);
9182
9183 open_err_irq:
9184         bnxt_del_napi(bp);
9185
9186 open_err_free_mem:
9187         bnxt_free_skbs(bp);
9188         bnxt_free_irq(bp);
9189         bnxt_free_mem(bp, true);
9190         return rc;
9191 }
9192
9193 /* rtnl_lock held */
9194 int bnxt_open_nic(struct bnxt *bp, bool irq_re_init, bool link_re_init)
9195 {
9196         int rc = 0;
9197
9198         rc = __bnxt_open_nic(bp, irq_re_init, link_re_init);
9199         if (rc) {
9200                 netdev_err(bp->dev, "nic open fail (rc: %x)\n", rc);
9201                 dev_close(bp->dev);
9202         }
9203         return rc;
9204 }
9205
9206 /* rtnl_lock held, open the NIC half way by allocating all resources, but
9207  * NAPI, IRQ, and TX are not enabled.  This is mainly used for offline
9208  * self tests.
9209  */
9210 int bnxt_half_open_nic(struct bnxt *bp)
9211 {
9212         int rc = 0;
9213
9214         rc = bnxt_alloc_mem(bp, false);
9215         if (rc) {
9216                 netdev_err(bp->dev, "bnxt_alloc_mem err: %x\n", rc);
9217                 goto half_open_err;
9218         }
9219         rc = bnxt_init_nic(bp, false);
9220         if (rc) {
9221                 netdev_err(bp->dev, "bnxt_init_nic err: %x\n", rc);
9222                 goto half_open_err;
9223         }
9224         return 0;
9225
9226 half_open_err:
9227         bnxt_free_skbs(bp);
9228         bnxt_free_mem(bp, false);
9229         dev_close(bp->dev);
9230         return rc;
9231 }
9232
9233 /* rtnl_lock held, this call can only be made after a previous successful
9234  * call to bnxt_half_open_nic().
9235  */
9236 void bnxt_half_close_nic(struct bnxt *bp)
9237 {
9238         bnxt_hwrm_resource_free(bp, false, false);
9239         bnxt_free_skbs(bp);
9240         bnxt_free_mem(bp, false);
9241 }
9242
9243 static int bnxt_open(struct net_device *dev)
9244 {
9245         struct bnxt *bp = netdev_priv(dev);
9246         int rc;
9247
9248         if (test_bit(BNXT_STATE_ABORT_ERR, &bp->state)) {
9249                 netdev_err(bp->dev, "A previous firmware reset did not complete, aborting\n");
9250                 return -ENODEV;
9251         }
9252
9253         rc = bnxt_hwrm_if_change(bp, true);
9254         if (rc)
9255                 return rc;
9256         rc = __bnxt_open_nic(bp, true, true);
9257         if (rc) {
9258                 bnxt_hwrm_if_change(bp, false);
9259         } else {
9260                 if (test_and_clear_bit(BNXT_STATE_FW_RESET_DET, &bp->state)) {
9261                         if (BNXT_PF(bp)) {
9262                                 struct bnxt_pf_info *pf = &bp->pf;
9263                                 int n = pf->active_vfs;
9264
9265                                 if (n)
9266                                         bnxt_cfg_hw_sriov(bp, &n, true);
9267                         }
9268                         if (!test_bit(BNXT_STATE_IN_FW_RESET, &bp->state))
9269                                 bnxt_ulp_start(bp, 0);
9270                 }
9271                 bnxt_hwmon_open(bp);
9272         }
9273
9274         return rc;
9275 }
9276
9277 static bool bnxt_drv_busy(struct bnxt *bp)
9278 {
9279         return (test_bit(BNXT_STATE_IN_SP_TASK, &bp->state) ||
9280                 test_bit(BNXT_STATE_READ_STATS, &bp->state));
9281 }
9282
9283 static void bnxt_get_ring_stats(struct bnxt *bp,
9284                                 struct rtnl_link_stats64 *stats);
9285
9286 static void __bnxt_close_nic(struct bnxt *bp, bool irq_re_init,
9287                              bool link_re_init)
9288 {
9289         /* Close the VF-reps before closing PF */
9290         if (BNXT_PF(bp))
9291                 bnxt_vf_reps_close(bp);
9292
9293         /* Change device state to avoid TX queue wake up's */
9294         bnxt_tx_disable(bp);
9295
9296         clear_bit(BNXT_STATE_OPEN, &bp->state);
9297         smp_mb__after_atomic();
9298         while (bnxt_drv_busy(bp))
9299                 msleep(20);
9300
9301         /* Flush rings and and disable interrupts */
9302         bnxt_shutdown_nic(bp, irq_re_init);
9303
9304         /* TODO CHIMP_FW: Link/PHY related cleanup if (link_re_init) */
9305
9306         bnxt_debug_dev_exit(bp);
9307         bnxt_disable_napi(bp);
9308         del_timer_sync(&bp->timer);
9309         if (test_bit(BNXT_STATE_IN_FW_RESET, &bp->state) &&
9310             pci_is_enabled(bp->pdev))
9311                 pci_disable_device(bp->pdev);
9312
9313         bnxt_free_skbs(bp);
9314
9315         /* Save ring stats before shutdown */
9316         if (bp->bnapi)
9317                 bnxt_get_ring_stats(bp, &bp->net_stats_prev);
9318         if (irq_re_init) {
9319                 bnxt_free_irq(bp);
9320                 bnxt_del_napi(bp);
9321         }
9322         bnxt_free_mem(bp, irq_re_init);
9323 }
9324
9325 int bnxt_close_nic(struct bnxt *bp, bool irq_re_init, bool link_re_init)
9326 {
9327         int rc = 0;
9328
9329         if (test_bit(BNXT_STATE_IN_FW_RESET, &bp->state)) {
9330                 /* If we get here, it means firmware reset is in progress
9331                  * while we are trying to close.  We can safely proceed with
9332                  * the close because we are holding rtnl_lock().  Some firmware
9333                  * messages may fail as we proceed to close.  We set the
9334                  * ABORT_ERR flag here so that the FW reset thread will later
9335                  * abort when it gets the rtnl_lock() and sees the flag.
9336                  */
9337                 netdev_warn(bp->dev, "FW reset in progress during close, FW reset will be aborted\n");
9338                 set_bit(BNXT_STATE_ABORT_ERR, &bp->state);
9339         }
9340
9341 #ifdef CONFIG_BNXT_SRIOV
9342         if (bp->sriov_cfg) {
9343                 rc = wait_event_interruptible_timeout(bp->sriov_cfg_wait,
9344                                                       !bp->sriov_cfg,
9345                                                       BNXT_SRIOV_CFG_WAIT_TMO);
9346                 if (rc)
9347                         netdev_warn(bp->dev, "timeout waiting for SRIOV config operation to complete!\n");
9348         }
9349 #endif
9350         __bnxt_close_nic(bp, irq_re_init, link_re_init);
9351         return rc;
9352 }
9353
9354 static int bnxt_close(struct net_device *dev)
9355 {
9356         struct bnxt *bp = netdev_priv(dev);
9357
9358         bnxt_hwmon_close(bp);
9359         bnxt_close_nic(bp, true, true);
9360         bnxt_hwrm_shutdown_link(bp);
9361         bnxt_hwrm_if_change(bp, false);
9362         return 0;
9363 }
9364
9365 static int bnxt_hwrm_port_phy_read(struct bnxt *bp, u16 phy_addr, u16 reg,
9366                                    u16 *val)
9367 {
9368         struct hwrm_port_phy_mdio_read_output *resp = bp->hwrm_cmd_resp_addr;
9369         struct hwrm_port_phy_mdio_read_input req = {0};
9370         int rc;
9371
9372         if (bp->hwrm_spec_code < 0x10a00)
9373                 return -EOPNOTSUPP;
9374
9375         bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_PORT_PHY_MDIO_READ, -1, -1);
9376         req.port_id = cpu_to_le16(bp->pf.port_id);
9377         req.phy_addr = phy_addr;
9378         req.reg_addr = cpu_to_le16(reg & 0x1f);
9379         if (mdio_phy_id_is_c45(phy_addr)) {
9380                 req.cl45_mdio = 1;
9381                 req.phy_addr = mdio_phy_id_prtad(phy_addr);
9382                 req.dev_addr = mdio_phy_id_devad(phy_addr);
9383                 req.reg_addr = cpu_to_le16(reg);
9384         }
9385
9386         mutex_lock(&bp->hwrm_cmd_lock);
9387         rc = _hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
9388         if (!rc)
9389                 *val = le16_to_cpu(resp->reg_data);
9390         mutex_unlock(&bp->hwrm_cmd_lock);
9391         return rc;
9392 }
9393
9394 static int bnxt_hwrm_port_phy_write(struct bnxt *bp, u16 phy_addr, u16 reg,
9395                                     u16 val)
9396 {
9397         struct hwrm_port_phy_mdio_write_input req = {0};
9398
9399         if (bp->hwrm_spec_code < 0x10a00)
9400                 return -EOPNOTSUPP;
9401
9402         bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_PORT_PHY_MDIO_WRITE, -1, -1);
9403         req.port_id = cpu_to_le16(bp->pf.port_id);
9404         req.phy_addr = phy_addr;
9405         req.reg_addr = cpu_to_le16(reg & 0x1f);
9406         if (mdio_phy_id_is_c45(phy_addr)) {
9407                 req.cl45_mdio = 1;
9408                 req.phy_addr = mdio_phy_id_prtad(phy_addr);
9409                 req.dev_addr = mdio_phy_id_devad(phy_addr);
9410                 req.reg_addr = cpu_to_le16(reg);
9411         }
9412         req.reg_data = cpu_to_le16(val);
9413
9414         return hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
9415 }
9416
9417 /* rtnl_lock held */
9418 static int bnxt_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
9419 {
9420         struct mii_ioctl_data *mdio = if_mii(ifr);
9421         struct bnxt *bp = netdev_priv(dev);
9422         int rc;
9423
9424         switch (cmd) {
9425         case SIOCGMIIPHY:
9426                 mdio->phy_id = bp->link_info.phy_addr;
9427
9428                 /* fallthru */
9429         case SIOCGMIIREG: {
9430                 u16 mii_regval = 0;
9431
9432                 if (!netif_running(dev))
9433                         return -EAGAIN;
9434
9435                 rc = bnxt_hwrm_port_phy_read(bp, mdio->phy_id, mdio->reg_num,
9436                                              &mii_regval);
9437                 mdio->val_out = mii_regval;
9438                 return rc;
9439         }
9440
9441         case SIOCSMIIREG:
9442                 if (!netif_running(dev))
9443                         return -EAGAIN;
9444
9445                 return bnxt_hwrm_port_phy_write(bp, mdio->phy_id, mdio->reg_num,
9446                                                 mdio->val_in);
9447
9448         default:
9449                 /* do nothing */
9450                 break;
9451         }
9452         return -EOPNOTSUPP;
9453 }
9454
9455 static void bnxt_get_ring_stats(struct bnxt *bp,
9456                                 struct rtnl_link_stats64 *stats)
9457 {
9458         int i;
9459
9460
9461         for (i = 0; i < bp->cp_nr_rings; i++) {
9462                 struct bnxt_napi *bnapi = bp->bnapi[i];
9463                 struct bnxt_cp_ring_info *cpr = &bnapi->cp_ring;
9464                 struct ctx_hw_stats *hw_stats = cpr->hw_stats;
9465
9466                 stats->rx_packets += le64_to_cpu(hw_stats->rx_ucast_pkts);
9467                 stats->rx_packets += le64_to_cpu(hw_stats->rx_mcast_pkts);
9468                 stats->rx_packets += le64_to_cpu(hw_stats->rx_bcast_pkts);
9469
9470                 stats->tx_packets += le64_to_cpu(hw_stats->tx_ucast_pkts);
9471                 stats->tx_packets += le64_to_cpu(hw_stats->tx_mcast_pkts);
9472                 stats->tx_packets += le64_to_cpu(hw_stats->tx_bcast_pkts);
9473
9474                 stats->rx_bytes += le64_to_cpu(hw_stats->rx_ucast_bytes);
9475                 stats->rx_bytes += le64_to_cpu(hw_stats->rx_mcast_bytes);
9476                 stats->rx_bytes += le64_to_cpu(hw_stats->rx_bcast_bytes);
9477
9478                 stats->tx_bytes += le64_to_cpu(hw_stats->tx_ucast_bytes);
9479                 stats->tx_bytes += le64_to_cpu(hw_stats->tx_mcast_bytes);
9480                 stats->tx_bytes += le64_to_cpu(hw_stats->tx_bcast_bytes);
9481
9482                 stats->rx_missed_errors +=
9483                         le64_to_cpu(hw_stats->rx_discard_pkts);
9484
9485                 stats->multicast += le64_to_cpu(hw_stats->rx_mcast_pkts);
9486
9487                 stats->tx_dropped += le64_to_cpu(hw_stats->tx_drop_pkts);
9488         }
9489 }
9490
9491 static void bnxt_add_prev_stats(struct bnxt *bp,
9492                                 struct rtnl_link_stats64 *stats)
9493 {
9494         struct rtnl_link_stats64 *prev_stats = &bp->net_stats_prev;
9495
9496         stats->rx_packets += prev_stats->rx_packets;
9497         stats->tx_packets += prev_stats->tx_packets;
9498         stats->rx_bytes += prev_stats->rx_bytes;
9499         stats->tx_bytes += prev_stats->tx_bytes;
9500         stats->rx_missed_errors += prev_stats->rx_missed_errors;
9501         stats->multicast += prev_stats->multicast;
9502         stats->tx_dropped += prev_stats->tx_dropped;
9503 }
9504
9505 static void
9506 bnxt_get_stats64(struct net_device *dev, struct rtnl_link_stats64 *stats)
9507 {
9508         struct bnxt *bp = netdev_priv(dev);
9509
9510         set_bit(BNXT_STATE_READ_STATS, &bp->state);
9511         /* Make sure bnxt_close_nic() sees that we are reading stats before
9512          * we check the BNXT_STATE_OPEN flag.
9513          */
9514         smp_mb__after_atomic();
9515         if (!test_bit(BNXT_STATE_OPEN, &bp->state)) {
9516                 clear_bit(BNXT_STATE_READ_STATS, &bp->state);
9517                 *stats = bp->net_stats_prev;
9518                 return;
9519         }
9520
9521         bnxt_get_ring_stats(bp, stats);
9522         bnxt_add_prev_stats(bp, stats);
9523
9524         if (bp->flags & BNXT_FLAG_PORT_STATS) {
9525                 struct rx_port_stats *rx = bp->hw_rx_port_stats;
9526                 struct tx_port_stats *tx = bp->hw_tx_port_stats;
9527
9528                 stats->rx_crc_errors = le64_to_cpu(rx->rx_fcs_err_frames);
9529                 stats->rx_frame_errors = le64_to_cpu(rx->rx_align_err_frames);
9530                 stats->rx_length_errors = le64_to_cpu(rx->rx_undrsz_frames) +
9531                                           le64_to_cpu(rx->rx_ovrsz_frames) +
9532                                           le64_to_cpu(rx->rx_runt_frames);
9533                 stats->rx_errors = le64_to_cpu(rx->rx_false_carrier_frames) +
9534                                    le64_to_cpu(rx->rx_jbr_frames);
9535                 stats->collisions = le64_to_cpu(tx->tx_total_collisions);
9536                 stats->tx_fifo_errors = le64_to_cpu(tx->tx_fifo_underruns);
9537                 stats->tx_errors = le64_to_cpu(tx->tx_err);
9538         }
9539         clear_bit(BNXT_STATE_READ_STATS, &bp->state);
9540 }
9541
9542 static bool bnxt_mc_list_updated(struct bnxt *bp, u32 *rx_mask)
9543 {
9544         struct net_device *dev = bp->dev;
9545         struct bnxt_vnic_info *vnic = &bp->vnic_info[0];
9546         struct netdev_hw_addr *ha;
9547         u8 *haddr;
9548         int mc_count = 0;
9549         bool update = false;
9550         int off = 0;
9551
9552         netdev_for_each_mc_addr(ha, dev) {
9553                 if (mc_count >= BNXT_MAX_MC_ADDRS) {
9554                         *rx_mask |= CFA_L2_SET_RX_MASK_REQ_MASK_ALL_MCAST;
9555                         vnic->mc_list_count = 0;
9556                         return false;
9557                 }
9558                 haddr = ha->addr;
9559                 if (!ether_addr_equal(haddr, vnic->mc_list + off)) {
9560                         memcpy(vnic->mc_list + off, haddr, ETH_ALEN);
9561                         update = true;
9562                 }
9563                 off += ETH_ALEN;
9564                 mc_count++;
9565         }
9566         if (mc_count)
9567                 *rx_mask |= CFA_L2_SET_RX_MASK_REQ_MASK_MCAST;
9568
9569         if (mc_count != vnic->mc_list_count) {
9570                 vnic->mc_list_count = mc_count;
9571                 update = true;
9572         }
9573         return update;
9574 }
9575
9576 static bool bnxt_uc_list_updated(struct bnxt *bp)
9577 {
9578         struct net_device *dev = bp->dev;
9579         struct bnxt_vnic_info *vnic = &bp->vnic_info[0];
9580         struct netdev_hw_addr *ha;
9581         int off = 0;
9582
9583         if (netdev_uc_count(dev) != (vnic->uc_filter_count - 1))
9584                 return true;
9585
9586         netdev_for_each_uc_addr(ha, dev) {
9587                 if (!ether_addr_equal(ha->addr, vnic->uc_list + off))
9588                         return true;
9589
9590                 off += ETH_ALEN;
9591         }
9592         return false;
9593 }
9594
9595 static void bnxt_set_rx_mode(struct net_device *dev)
9596 {
9597         struct bnxt *bp = netdev_priv(dev);
9598         struct bnxt_vnic_info *vnic;
9599         bool mc_update = false;
9600         bool uc_update;
9601         u32 mask;
9602
9603         if (!test_bit(BNXT_STATE_OPEN, &bp->state))
9604                 return;
9605
9606         vnic = &bp->vnic_info[0];
9607         mask = vnic->rx_mask;
9608         mask &= ~(CFA_L2_SET_RX_MASK_REQ_MASK_PROMISCUOUS |
9609                   CFA_L2_SET_RX_MASK_REQ_MASK_MCAST |
9610                   CFA_L2_SET_RX_MASK_REQ_MASK_ALL_MCAST |
9611                   CFA_L2_SET_RX_MASK_REQ_MASK_BCAST);
9612
9613         if ((dev->flags & IFF_PROMISC) && bnxt_promisc_ok(bp))
9614                 mask |= CFA_L2_SET_RX_MASK_REQ_MASK_PROMISCUOUS;
9615
9616         uc_update = bnxt_uc_list_updated(bp);
9617
9618         if (dev->flags & IFF_BROADCAST)
9619                 mask |= CFA_L2_SET_RX_MASK_REQ_MASK_BCAST;
9620         if (dev->flags & IFF_ALLMULTI) {
9621                 mask |= CFA_L2_SET_RX_MASK_REQ_MASK_ALL_MCAST;
9622                 vnic->mc_list_count = 0;
9623         } else {
9624                 mc_update = bnxt_mc_list_updated(bp, &mask);
9625         }
9626
9627         if (mask != vnic->rx_mask || uc_update || mc_update) {
9628                 vnic->rx_mask = mask;
9629
9630                 set_bit(BNXT_RX_MASK_SP_EVENT, &bp->sp_event);
9631                 bnxt_queue_sp_work(bp);
9632         }
9633 }
9634
9635 static int bnxt_cfg_rx_mode(struct bnxt *bp)
9636 {
9637         struct net_device *dev = bp->dev;
9638         struct bnxt_vnic_info *vnic = &bp->vnic_info[0];
9639         struct netdev_hw_addr *ha;
9640         int i, off = 0, rc;
9641         bool uc_update;
9642
9643         netif_addr_lock_bh(dev);
9644         uc_update = bnxt_uc_list_updated(bp);
9645         netif_addr_unlock_bh(dev);
9646
9647         if (!uc_update)
9648                 goto skip_uc;
9649
9650         mutex_lock(&bp->hwrm_cmd_lock);
9651         for (i = 1; i < vnic->uc_filter_count; i++) {
9652                 struct hwrm_cfa_l2_filter_free_input req = {0};
9653
9654                 bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_CFA_L2_FILTER_FREE, -1,
9655                                        -1);
9656
9657                 req.l2_filter_id = vnic->fw_l2_filter_id[i];
9658
9659                 rc = _hwrm_send_message(bp, &req, sizeof(req),
9660                                         HWRM_CMD_TIMEOUT);
9661         }
9662         mutex_unlock(&bp->hwrm_cmd_lock);
9663
9664         vnic->uc_filter_count = 1;
9665
9666         netif_addr_lock_bh(dev);
9667         if (netdev_uc_count(dev) > (BNXT_MAX_UC_ADDRS - 1)) {
9668                 vnic->rx_mask |= CFA_L2_SET_RX_MASK_REQ_MASK_PROMISCUOUS;
9669         } else {
9670                 netdev_for_each_uc_addr(ha, dev) {
9671                         memcpy(vnic->uc_list + off, ha->addr, ETH_ALEN);
9672                         off += ETH_ALEN;
9673                         vnic->uc_filter_count++;
9674                 }
9675         }
9676         netif_addr_unlock_bh(dev);
9677
9678         for (i = 1, off = 0; i < vnic->uc_filter_count; i++, off += ETH_ALEN) {
9679                 rc = bnxt_hwrm_set_vnic_filter(bp, 0, i, vnic->uc_list + off);
9680                 if (rc) {
9681                         netdev_err(bp->dev, "HWRM vnic filter failure rc: %x\n",
9682                                    rc);
9683                         vnic->uc_filter_count = i;
9684                         return rc;
9685                 }
9686         }
9687
9688 skip_uc:
9689         rc = bnxt_hwrm_cfa_l2_set_rx_mask(bp, 0);
9690         if (rc && vnic->mc_list_count) {
9691                 netdev_info(bp->dev, "Failed setting MC filters rc: %d, turning on ALL_MCAST mode\n",
9692                             rc);
9693                 vnic->rx_mask |= CFA_L2_SET_RX_MASK_REQ_MASK_ALL_MCAST;
9694                 vnic->mc_list_count = 0;
9695                 rc = bnxt_hwrm_cfa_l2_set_rx_mask(bp, 0);
9696         }
9697         if (rc)
9698                 netdev_err(bp->dev, "HWRM cfa l2 rx mask failure rc: %d\n",
9699                            rc);
9700
9701         return rc;
9702 }
9703
9704 static bool bnxt_can_reserve_rings(struct bnxt *bp)
9705 {
9706 #ifdef CONFIG_BNXT_SRIOV
9707         if (BNXT_NEW_RM(bp) && BNXT_VF(bp)) {
9708                 struct bnxt_hw_resc *hw_resc = &bp->hw_resc;
9709
9710                 /* No minimum rings were provisioned by the PF.  Don't
9711                  * reserve rings by default when device is down.
9712                  */
9713                 if (hw_resc->min_tx_rings || hw_resc->resv_tx_rings)
9714                         return true;
9715
9716                 if (!netif_running(bp->dev))
9717                         return false;
9718         }
9719 #endif
9720         return true;
9721 }
9722
9723 /* If the chip and firmware supports RFS */
9724 static bool bnxt_rfs_supported(struct bnxt *bp)
9725 {
9726         if (bp->flags & BNXT_FLAG_CHIP_P5) {
9727                 if (bp->fw_cap & BNXT_FW_CAP_CFA_RFS_RING_TBL_IDX_V2)
9728                         return true;
9729                 return false;
9730         }
9731         if (BNXT_PF(bp) && !BNXT_CHIP_TYPE_NITRO_A0(bp))
9732                 return true;
9733         if (bp->flags & BNXT_FLAG_NEW_RSS_CAP)
9734                 return true;
9735         return false;
9736 }
9737
9738 /* If runtime conditions support RFS */
9739 static bool bnxt_rfs_capable(struct bnxt *bp)
9740 {
9741 #ifdef CONFIG_RFS_ACCEL
9742         int vnics, max_vnics, max_rss_ctxs;
9743
9744         if (bp->flags & BNXT_FLAG_CHIP_P5)
9745                 return bnxt_rfs_supported(bp);
9746         if (!(bp->flags & BNXT_FLAG_MSIX_CAP) || !bnxt_can_reserve_rings(bp))
9747                 return false;
9748
9749         vnics = 1 + bp->rx_nr_rings;
9750         max_vnics = bnxt_get_max_func_vnics(bp);
9751         max_rss_ctxs = bnxt_get_max_func_rss_ctxs(bp);
9752
9753         /* RSS contexts not a limiting factor */
9754         if (bp->flags & BNXT_FLAG_NEW_RSS_CAP)
9755                 max_rss_ctxs = max_vnics;
9756         if (vnics > max_vnics || vnics > max_rss_ctxs) {
9757                 if (bp->rx_nr_rings > 1)
9758                         netdev_warn(bp->dev,
9759                                     "Not enough resources to support NTUPLE filters, enough resources for up to %d rx rings\n",
9760                                     min(max_rss_ctxs - 1, max_vnics - 1));
9761                 return false;
9762         }
9763
9764         if (!BNXT_NEW_RM(bp))
9765                 return true;
9766
9767         if (vnics == bp->hw_resc.resv_vnics)
9768                 return true;
9769
9770         bnxt_hwrm_reserve_rings(bp, 0, 0, 0, 0, 0, vnics);
9771         if (vnics <= bp->hw_resc.resv_vnics)
9772                 return true;
9773
9774         netdev_warn(bp->dev, "Unable to reserve resources to support NTUPLE filters.\n");
9775         bnxt_hwrm_reserve_rings(bp, 0, 0, 0, 0, 0, 1);
9776         return false;
9777 #else
9778         return false;
9779 #endif
9780 }
9781
9782 static netdev_features_t bnxt_fix_features(struct net_device *dev,
9783                                            netdev_features_t features)
9784 {
9785         struct bnxt *bp = netdev_priv(dev);
9786
9787         if ((features & NETIF_F_NTUPLE) && !bnxt_rfs_capable(bp))
9788                 features &= ~NETIF_F_NTUPLE;
9789
9790         if (bp->flags & BNXT_FLAG_NO_AGG_RINGS)
9791                 features &= ~(NETIF_F_LRO | NETIF_F_GRO_HW);
9792
9793         if (!(features & NETIF_F_GRO))
9794                 features &= ~NETIF_F_GRO_HW;
9795
9796         if (features & NETIF_F_GRO_HW)
9797                 features &= ~NETIF_F_LRO;
9798
9799         /* Both CTAG and STAG VLAN accelaration on the RX side have to be
9800          * turned on or off together.
9801          */
9802         if ((features & (NETIF_F_HW_VLAN_CTAG_RX | NETIF_F_HW_VLAN_STAG_RX)) !=
9803             (NETIF_F_HW_VLAN_CTAG_RX | NETIF_F_HW_VLAN_STAG_RX)) {
9804                 if (dev->features & NETIF_F_HW_VLAN_CTAG_RX)
9805                         features &= ~(NETIF_F_HW_VLAN_CTAG_RX |
9806                                       NETIF_F_HW_VLAN_STAG_RX);
9807                 else
9808                         features |= NETIF_F_HW_VLAN_CTAG_RX |
9809                                     NETIF_F_HW_VLAN_STAG_RX;
9810         }
9811 #ifdef CONFIG_BNXT_SRIOV
9812         if (BNXT_VF(bp)) {
9813                 if (bp->vf.vlan) {
9814                         features &= ~(NETIF_F_HW_VLAN_CTAG_RX |
9815                                       NETIF_F_HW_VLAN_STAG_RX);
9816                 }
9817         }
9818 #endif
9819         return features;
9820 }
9821
9822 static int bnxt_set_features(struct net_device *dev, netdev_features_t features)
9823 {
9824         struct bnxt *bp = netdev_priv(dev);
9825         u32 flags = bp->flags;
9826         u32 changes;
9827         int rc = 0;
9828         bool re_init = false;
9829         bool update_tpa = false;
9830
9831         flags &= ~BNXT_FLAG_ALL_CONFIG_FEATS;
9832         if (features & NETIF_F_GRO_HW)
9833                 flags |= BNXT_FLAG_GRO;
9834         else if (features & NETIF_F_LRO)
9835                 flags |= BNXT_FLAG_LRO;
9836
9837         if (bp->flags & BNXT_FLAG_NO_AGG_RINGS)
9838                 flags &= ~BNXT_FLAG_TPA;
9839
9840         if (features & NETIF_F_HW_VLAN_CTAG_RX)
9841                 flags |= BNXT_FLAG_STRIP_VLAN;
9842
9843         if (features & NETIF_F_NTUPLE)
9844                 flags |= BNXT_FLAG_RFS;
9845
9846         changes = flags ^ bp->flags;
9847         if (changes & BNXT_FLAG_TPA) {
9848                 update_tpa = true;
9849                 if ((bp->flags & BNXT_FLAG_TPA) == 0 ||
9850                     (flags & BNXT_FLAG_TPA) == 0 ||
9851                     (bp->flags & BNXT_FLAG_CHIP_P5))
9852                         re_init = true;
9853         }
9854
9855         if (changes & ~BNXT_FLAG_TPA)
9856                 re_init = true;
9857
9858         if (flags != bp->flags) {
9859                 u32 old_flags = bp->flags;
9860
9861                 if (!test_bit(BNXT_STATE_OPEN, &bp->state)) {
9862                         bp->flags = flags;
9863                         if (update_tpa)
9864                                 bnxt_set_ring_params(bp);
9865                         return rc;
9866                 }
9867
9868                 if (re_init) {
9869                         bnxt_close_nic(bp, false, false);
9870                         bp->flags = flags;
9871                         if (update_tpa)
9872                                 bnxt_set_ring_params(bp);
9873
9874                         return bnxt_open_nic(bp, false, false);
9875                 }
9876                 if (update_tpa) {
9877                         bp->flags = flags;
9878                         rc = bnxt_set_tpa(bp,
9879                                           (flags & BNXT_FLAG_TPA) ?
9880                                           true : false);
9881                         if (rc)
9882                                 bp->flags = old_flags;
9883                 }
9884         }
9885         return rc;
9886 }
9887
9888 static int bnxt_dbg_hwrm_ring_info_get(struct bnxt *bp, u8 ring_type,
9889                                        u32 ring_id, u32 *prod, u32 *cons)
9890 {
9891         struct hwrm_dbg_ring_info_get_output *resp = bp->hwrm_cmd_resp_addr;
9892         struct hwrm_dbg_ring_info_get_input req = {0};
9893         int rc;
9894
9895         bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_DBG_RING_INFO_GET, -1, -1);
9896         req.ring_type = ring_type;
9897         req.fw_ring_id = cpu_to_le32(ring_id);
9898         mutex_lock(&bp->hwrm_cmd_lock);
9899         rc = _hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
9900         if (!rc) {
9901                 *prod = le32_to_cpu(resp->producer_index);
9902                 *cons = le32_to_cpu(resp->consumer_index);
9903         }
9904         mutex_unlock(&bp->hwrm_cmd_lock);
9905         return rc;
9906 }
9907
9908 static void bnxt_dump_tx_sw_state(struct bnxt_napi *bnapi)
9909 {
9910         struct bnxt_tx_ring_info *txr = bnapi->tx_ring;
9911         int i = bnapi->index;
9912
9913         if (!txr)
9914                 return;
9915
9916         netdev_info(bnapi->bp->dev, "[%d]: tx{fw_ring: %d prod: %x cons: %x}\n",
9917                     i, txr->tx_ring_struct.fw_ring_id, txr->tx_prod,
9918                     txr->tx_cons);
9919 }
9920
9921 static void bnxt_dump_rx_sw_state(struct bnxt_napi *bnapi)
9922 {
9923         struct bnxt_rx_ring_info *rxr = bnapi->rx_ring;
9924         int i = bnapi->index;
9925
9926         if (!rxr)
9927                 return;
9928
9929         netdev_info(bnapi->bp->dev, "[%d]: rx{fw_ring: %d prod: %x} rx_agg{fw_ring: %d agg_prod: %x sw_agg_prod: %x}\n",
9930                     i, rxr->rx_ring_struct.fw_ring_id, rxr->rx_prod,
9931                     rxr->rx_agg_ring_struct.fw_ring_id, rxr->rx_agg_prod,
9932                     rxr->rx_sw_agg_prod);
9933 }
9934
9935 static void bnxt_dump_cp_sw_state(struct bnxt_napi *bnapi)
9936 {
9937         struct bnxt_cp_ring_info *cpr = &bnapi->cp_ring;
9938         int i = bnapi->index;
9939
9940         netdev_info(bnapi->bp->dev, "[%d]: cp{fw_ring: %d raw_cons: %x}\n",
9941                     i, cpr->cp_ring_struct.fw_ring_id, cpr->cp_raw_cons);
9942 }
9943
9944 static void bnxt_dbg_dump_states(struct bnxt *bp)
9945 {
9946         int i;
9947         struct bnxt_napi *bnapi;
9948
9949         for (i = 0; i < bp->cp_nr_rings; i++) {
9950                 bnapi = bp->bnapi[i];
9951                 if (netif_msg_drv(bp)) {
9952                         bnxt_dump_tx_sw_state(bnapi);
9953                         bnxt_dump_rx_sw_state(bnapi);
9954                         bnxt_dump_cp_sw_state(bnapi);
9955                 }
9956         }
9957 }
9958
9959 static void bnxt_reset_task(struct bnxt *bp, bool silent)
9960 {
9961         if (!silent)
9962                 bnxt_dbg_dump_states(bp);
9963         if (netif_running(bp->dev)) {
9964                 int rc;
9965
9966                 if (silent) {
9967                         bnxt_close_nic(bp, false, false);
9968                         bnxt_open_nic(bp, false, false);
9969                 } else {
9970                         bnxt_ulp_stop(bp);
9971                         bnxt_close_nic(bp, true, false);
9972                         rc = bnxt_open_nic(bp, true, false);
9973                         bnxt_ulp_start(bp, rc);
9974                 }
9975         }
9976 }
9977
9978 static void bnxt_tx_timeout(struct net_device *dev)
9979 {
9980         struct bnxt *bp = netdev_priv(dev);
9981
9982         netdev_err(bp->dev,  "TX timeout detected, starting reset task!\n");
9983         set_bit(BNXT_RESET_TASK_SP_EVENT, &bp->sp_event);
9984         bnxt_queue_sp_work(bp);
9985 }
9986
9987 static void bnxt_fw_health_check(struct bnxt *bp)
9988 {
9989         struct bnxt_fw_health *fw_health = bp->fw_health;
9990         u32 val;
9991
9992         if (!fw_health->enabled || test_bit(BNXT_STATE_IN_FW_RESET, &bp->state))
9993                 return;
9994
9995         if (fw_health->tmr_counter) {
9996                 fw_health->tmr_counter--;
9997                 return;
9998         }
9999
10000         val = bnxt_fw_health_readl(bp, BNXT_FW_HEARTBEAT_REG);
10001         if (val == fw_health->last_fw_heartbeat)
10002                 goto fw_reset;
10003
10004         fw_health->last_fw_heartbeat = val;
10005
10006         val = bnxt_fw_health_readl(bp, BNXT_FW_RESET_CNT_REG);
10007         if (val != fw_health->last_fw_reset_cnt)
10008                 goto fw_reset;
10009
10010         fw_health->tmr_counter = fw_health->tmr_multiplier;
10011         return;
10012
10013 fw_reset:
10014         set_bit(BNXT_FW_EXCEPTION_SP_EVENT, &bp->sp_event);
10015         bnxt_queue_sp_work(bp);
10016 }
10017
10018 static void bnxt_timer(struct timer_list *t)
10019 {
10020         struct bnxt *bp = from_timer(bp, t, timer);
10021         struct net_device *dev = bp->dev;
10022
10023         if (!netif_running(dev))
10024                 return;
10025
10026         if (atomic_read(&bp->intr_sem) != 0)
10027                 goto bnxt_restart_timer;
10028
10029         if (bp->fw_cap & BNXT_FW_CAP_ERROR_RECOVERY)
10030                 bnxt_fw_health_check(bp);
10031
10032         if (bp->link_info.link_up && (bp->flags & BNXT_FLAG_PORT_STATS) &&
10033             bp->stats_coal_ticks) {
10034                 set_bit(BNXT_PERIODIC_STATS_SP_EVENT, &bp->sp_event);
10035                 bnxt_queue_sp_work(bp);
10036         }
10037
10038         if (bnxt_tc_flower_enabled(bp)) {
10039                 set_bit(BNXT_FLOW_STATS_SP_EVENT, &bp->sp_event);
10040                 bnxt_queue_sp_work(bp);
10041         }
10042
10043         if (bp->link_info.phy_retry) {
10044                 if (time_after(jiffies, bp->link_info.phy_retry_expires)) {
10045                         bp->link_info.phy_retry = false;
10046                         netdev_warn(bp->dev, "failed to update phy settings after maximum retries.\n");
10047                 } else {
10048                         set_bit(BNXT_UPDATE_PHY_SP_EVENT, &bp->sp_event);
10049                         bnxt_queue_sp_work(bp);
10050                 }
10051         }
10052
10053         if ((bp->flags & BNXT_FLAG_CHIP_P5) && netif_carrier_ok(dev)) {
10054                 set_bit(BNXT_RING_COAL_NOW_SP_EVENT, &bp->sp_event);
10055                 bnxt_queue_sp_work(bp);
10056         }
10057 bnxt_restart_timer:
10058         mod_timer(&bp->timer, jiffies + bp->current_interval);
10059 }
10060
10061 static void bnxt_rtnl_lock_sp(struct bnxt *bp)
10062 {
10063         /* We are called from bnxt_sp_task which has BNXT_STATE_IN_SP_TASK
10064          * set.  If the device is being closed, bnxt_close() may be holding
10065          * rtnl() and waiting for BNXT_STATE_IN_SP_TASK to clear.  So we
10066          * must clear BNXT_STATE_IN_SP_TASK before holding rtnl().
10067          */
10068         clear_bit(BNXT_STATE_IN_SP_TASK, &bp->state);
10069         rtnl_lock();
10070 }
10071
10072 static void bnxt_rtnl_unlock_sp(struct bnxt *bp)
10073 {
10074         set_bit(BNXT_STATE_IN_SP_TASK, &bp->state);
10075         rtnl_unlock();
10076 }
10077
10078 /* Only called from bnxt_sp_task() */
10079 static void bnxt_reset(struct bnxt *bp, bool silent)
10080 {
10081         bnxt_rtnl_lock_sp(bp);
10082         if (test_bit(BNXT_STATE_OPEN, &bp->state))
10083                 bnxt_reset_task(bp, silent);
10084         bnxt_rtnl_unlock_sp(bp);
10085 }
10086
10087 static void bnxt_fw_reset_close(struct bnxt *bp)
10088 {
10089         bnxt_ulp_stop(bp);
10090         __bnxt_close_nic(bp, true, false);
10091         bnxt_clear_int_mode(bp);
10092         bnxt_hwrm_func_drv_unrgtr(bp);
10093         bnxt_free_ctx_mem(bp);
10094         kfree(bp->ctx);
10095         bp->ctx = NULL;
10096 }
10097
10098 static bool is_bnxt_fw_ok(struct bnxt *bp)
10099 {
10100         struct bnxt_fw_health *fw_health = bp->fw_health;
10101         bool no_heartbeat = false, has_reset = false;
10102         u32 val;
10103
10104         val = bnxt_fw_health_readl(bp, BNXT_FW_HEARTBEAT_REG);
10105         if (val == fw_health->last_fw_heartbeat)
10106                 no_heartbeat = true;
10107
10108         val = bnxt_fw_health_readl(bp, BNXT_FW_RESET_CNT_REG);
10109         if (val != fw_health->last_fw_reset_cnt)
10110                 has_reset = true;
10111
10112         if (!no_heartbeat && has_reset)
10113                 return true;
10114
10115         return false;
10116 }
10117
10118 /* rtnl_lock is acquired before calling this function */
10119 static void bnxt_force_fw_reset(struct bnxt *bp)
10120 {
10121         struct bnxt_fw_health *fw_health = bp->fw_health;
10122         u32 wait_dsecs;
10123
10124         if (!test_bit(BNXT_STATE_OPEN, &bp->state) ||
10125             test_bit(BNXT_STATE_IN_FW_RESET, &bp->state))
10126                 return;
10127
10128         set_bit(BNXT_STATE_IN_FW_RESET, &bp->state);
10129         bnxt_fw_reset_close(bp);
10130         wait_dsecs = fw_health->master_func_wait_dsecs;
10131         if (fw_health->master) {
10132                 if (fw_health->flags & ERROR_RECOVERY_QCFG_RESP_FLAGS_CO_CPU)
10133                         wait_dsecs = 0;
10134                 bp->fw_reset_state = BNXT_FW_RESET_STATE_RESET_FW;
10135         } else {
10136                 bp->fw_reset_timestamp = jiffies + wait_dsecs * HZ / 10;
10137                 wait_dsecs = fw_health->normal_func_wait_dsecs;
10138                 bp->fw_reset_state = BNXT_FW_RESET_STATE_ENABLE_DEV;
10139         }
10140
10141         bp->fw_reset_min_dsecs = fw_health->post_reset_wait_dsecs;
10142         bp->fw_reset_max_dsecs = fw_health->post_reset_max_wait_dsecs;
10143         bnxt_queue_fw_reset_work(bp, wait_dsecs * HZ / 10);
10144 }
10145
10146 void bnxt_fw_exception(struct bnxt *bp)
10147 {
10148         netdev_warn(bp->dev, "Detected firmware fatal condition, initiating reset\n");
10149         set_bit(BNXT_STATE_FW_FATAL_COND, &bp->state);
10150         bnxt_rtnl_lock_sp(bp);
10151         bnxt_force_fw_reset(bp);
10152         bnxt_rtnl_unlock_sp(bp);
10153 }
10154
10155 /* Returns the number of registered VFs, or 1 if VF configuration is pending, or
10156  * < 0 on error.
10157  */
10158 static int bnxt_get_registered_vfs(struct bnxt *bp)
10159 {
10160 #ifdef CONFIG_BNXT_SRIOV
10161         int rc;
10162
10163         if (!BNXT_PF(bp))
10164                 return 0;
10165
10166         rc = bnxt_hwrm_func_qcfg(bp);
10167         if (rc) {
10168                 netdev_err(bp->dev, "func_qcfg cmd failed, rc = %d\n", rc);
10169                 return rc;
10170         }
10171         if (bp->pf.registered_vfs)
10172                 return bp->pf.registered_vfs;
10173         if (bp->sriov_cfg)
10174                 return 1;
10175 #endif
10176         return 0;
10177 }
10178
10179 void bnxt_fw_reset(struct bnxt *bp)
10180 {
10181         bnxt_rtnl_lock_sp(bp);
10182         if (test_bit(BNXT_STATE_OPEN, &bp->state) &&
10183             !test_bit(BNXT_STATE_IN_FW_RESET, &bp->state)) {
10184                 int n = 0, tmo;
10185
10186                 set_bit(BNXT_STATE_IN_FW_RESET, &bp->state);
10187                 if (bp->pf.active_vfs &&
10188                     !test_bit(BNXT_STATE_FW_FATAL_COND, &bp->state))
10189                         n = bnxt_get_registered_vfs(bp);
10190                 if (n < 0) {
10191                         netdev_err(bp->dev, "Firmware reset aborted, rc = %d\n",
10192                                    n);
10193                         clear_bit(BNXT_STATE_IN_FW_RESET, &bp->state);
10194                         dev_close(bp->dev);
10195                         goto fw_reset_exit;
10196                 } else if (n > 0) {
10197                         u16 vf_tmo_dsecs = n * 10;
10198
10199                         if (bp->fw_reset_max_dsecs < vf_tmo_dsecs)
10200                                 bp->fw_reset_max_dsecs = vf_tmo_dsecs;
10201                         bp->fw_reset_state =
10202                                 BNXT_FW_RESET_STATE_POLL_VF;
10203                         bnxt_queue_fw_reset_work(bp, HZ / 10);
10204                         goto fw_reset_exit;
10205                 }
10206                 bnxt_fw_reset_close(bp);
10207                 if (bp->fw_cap & BNXT_FW_CAP_ERR_RECOVER_RELOAD) {
10208                         bp->fw_reset_state = BNXT_FW_RESET_STATE_POLL_FW_DOWN;
10209                         tmo = HZ / 10;
10210                 } else {
10211                         bp->fw_reset_state = BNXT_FW_RESET_STATE_ENABLE_DEV;
10212                         tmo = bp->fw_reset_min_dsecs * HZ / 10;
10213                 }
10214                 bnxt_queue_fw_reset_work(bp, tmo);
10215         }
10216 fw_reset_exit:
10217         bnxt_rtnl_unlock_sp(bp);
10218 }
10219
10220 static void bnxt_chk_missed_irq(struct bnxt *bp)
10221 {
10222         int i;
10223
10224         if (!(bp->flags & BNXT_FLAG_CHIP_P5))
10225                 return;
10226
10227         for (i = 0; i < bp->cp_nr_rings; i++) {
10228                 struct bnxt_napi *bnapi = bp->bnapi[i];
10229                 struct bnxt_cp_ring_info *cpr;
10230                 u32 fw_ring_id;
10231                 int j;
10232
10233                 if (!bnapi)
10234                         continue;
10235
10236                 cpr = &bnapi->cp_ring;
10237                 for (j = 0; j < 2; j++) {
10238                         struct bnxt_cp_ring_info *cpr2 = cpr->cp_ring_arr[j];
10239                         u32 val[2];
10240
10241                         if (!cpr2 || cpr2->has_more_work ||
10242                             !bnxt_has_work(bp, cpr2))
10243                                 continue;
10244
10245                         if (cpr2->cp_raw_cons != cpr2->last_cp_raw_cons) {
10246                                 cpr2->last_cp_raw_cons = cpr2->cp_raw_cons;
10247                                 continue;
10248                         }
10249                         fw_ring_id = cpr2->cp_ring_struct.fw_ring_id;
10250                         bnxt_dbg_hwrm_ring_info_get(bp,
10251                                 DBG_RING_INFO_GET_REQ_RING_TYPE_L2_CMPL,
10252                                 fw_ring_id, &val[0], &val[1]);
10253                         cpr->missed_irqs++;
10254                 }
10255         }
10256 }
10257
10258 static void bnxt_cfg_ntp_filters(struct bnxt *);
10259
10260 static void bnxt_init_ethtool_link_settings(struct bnxt *bp)
10261 {
10262         struct bnxt_link_info *link_info = &bp->link_info;
10263
10264         if (BNXT_AUTO_MODE(link_info->auto_mode)) {
10265                 link_info->autoneg = BNXT_AUTONEG_SPEED;
10266                 if (bp->hwrm_spec_code >= 0x10201) {
10267                         if (link_info->auto_pause_setting &
10268                             PORT_PHY_CFG_REQ_AUTO_PAUSE_AUTONEG_PAUSE)
10269                                 link_info->autoneg |= BNXT_AUTONEG_FLOW_CTRL;
10270                 } else {
10271                         link_info->autoneg |= BNXT_AUTONEG_FLOW_CTRL;
10272                 }
10273                 link_info->advertising = link_info->auto_link_speeds;
10274         } else {
10275                 link_info->req_link_speed = link_info->force_link_speed;
10276                 link_info->req_duplex = link_info->duplex_setting;
10277         }
10278         if (link_info->autoneg & BNXT_AUTONEG_FLOW_CTRL)
10279                 link_info->req_flow_ctrl =
10280                         link_info->auto_pause_setting & BNXT_LINK_PAUSE_BOTH;
10281         else
10282                 link_info->req_flow_ctrl = link_info->force_pause_setting;
10283 }
10284
10285 static void bnxt_sp_task(struct work_struct *work)
10286 {
10287         struct bnxt *bp = container_of(work, struct bnxt, sp_task);
10288
10289         set_bit(BNXT_STATE_IN_SP_TASK, &bp->state);
10290         smp_mb__after_atomic();
10291         if (!test_bit(BNXT_STATE_OPEN, &bp->state)) {
10292                 clear_bit(BNXT_STATE_IN_SP_TASK, &bp->state);
10293                 return;
10294         }
10295
10296         if (test_and_clear_bit(BNXT_RX_MASK_SP_EVENT, &bp->sp_event))
10297                 bnxt_cfg_rx_mode(bp);
10298
10299         if (test_and_clear_bit(BNXT_RX_NTP_FLTR_SP_EVENT, &bp->sp_event))
10300                 bnxt_cfg_ntp_filters(bp);
10301         if (test_and_clear_bit(BNXT_HWRM_EXEC_FWD_REQ_SP_EVENT, &bp->sp_event))
10302                 bnxt_hwrm_exec_fwd_req(bp);
10303         if (test_and_clear_bit(BNXT_VXLAN_ADD_PORT_SP_EVENT, &bp->sp_event)) {
10304                 bnxt_hwrm_tunnel_dst_port_alloc(
10305                         bp, bp->vxlan_port,
10306                         TUNNEL_DST_PORT_FREE_REQ_TUNNEL_TYPE_VXLAN);
10307         }
10308         if (test_and_clear_bit(BNXT_VXLAN_DEL_PORT_SP_EVENT, &bp->sp_event)) {
10309                 bnxt_hwrm_tunnel_dst_port_free(
10310                         bp, TUNNEL_DST_PORT_FREE_REQ_TUNNEL_TYPE_VXLAN);
10311         }
10312         if (test_and_clear_bit(BNXT_GENEVE_ADD_PORT_SP_EVENT, &bp->sp_event)) {
10313                 bnxt_hwrm_tunnel_dst_port_alloc(
10314                         bp, bp->nge_port,
10315                         TUNNEL_DST_PORT_FREE_REQ_TUNNEL_TYPE_GENEVE);
10316         }
10317         if (test_and_clear_bit(BNXT_GENEVE_DEL_PORT_SP_EVENT, &bp->sp_event)) {
10318                 bnxt_hwrm_tunnel_dst_port_free(
10319                         bp, TUNNEL_DST_PORT_FREE_REQ_TUNNEL_TYPE_GENEVE);
10320         }
10321         if (test_and_clear_bit(BNXT_PERIODIC_STATS_SP_EVENT, &bp->sp_event)) {
10322                 bnxt_hwrm_port_qstats(bp);
10323                 bnxt_hwrm_port_qstats_ext(bp);
10324                 bnxt_hwrm_pcie_qstats(bp);
10325         }
10326
10327         if (test_and_clear_bit(BNXT_LINK_CHNG_SP_EVENT, &bp->sp_event)) {
10328                 int rc;
10329
10330                 mutex_lock(&bp->link_lock);
10331                 if (test_and_clear_bit(BNXT_LINK_SPEED_CHNG_SP_EVENT,
10332                                        &bp->sp_event))
10333                         bnxt_hwrm_phy_qcaps(bp);
10334
10335                 if (test_and_clear_bit(BNXT_LINK_CFG_CHANGE_SP_EVENT,
10336                                        &bp->sp_event))
10337                         bnxt_init_ethtool_link_settings(bp);
10338
10339                 rc = bnxt_update_link(bp, true);
10340                 mutex_unlock(&bp->link_lock);
10341                 if (rc)
10342                         netdev_err(bp->dev, "SP task can't update link (rc: %x)\n",
10343                                    rc);
10344         }
10345         if (test_and_clear_bit(BNXT_UPDATE_PHY_SP_EVENT, &bp->sp_event)) {
10346                 int rc;
10347
10348                 mutex_lock(&bp->link_lock);
10349                 rc = bnxt_update_phy_setting(bp);
10350                 mutex_unlock(&bp->link_lock);
10351                 if (rc) {
10352                         netdev_warn(bp->dev, "update phy settings retry failed\n");
10353                 } else {
10354                         bp->link_info.phy_retry = false;
10355                         netdev_info(bp->dev, "update phy settings retry succeeded\n");
10356                 }
10357         }
10358         if (test_and_clear_bit(BNXT_HWRM_PORT_MODULE_SP_EVENT, &bp->sp_event)) {
10359                 mutex_lock(&bp->link_lock);
10360                 bnxt_get_port_module_status(bp);
10361                 mutex_unlock(&bp->link_lock);
10362         }
10363
10364         if (test_and_clear_bit(BNXT_FLOW_STATS_SP_EVENT, &bp->sp_event))
10365                 bnxt_tc_flow_stats_work(bp);
10366
10367         if (test_and_clear_bit(BNXT_RING_COAL_NOW_SP_EVENT, &bp->sp_event))
10368                 bnxt_chk_missed_irq(bp);
10369
10370         /* These functions below will clear BNXT_STATE_IN_SP_TASK.  They
10371          * must be the last functions to be called before exiting.
10372          */
10373         if (test_and_clear_bit(BNXT_RESET_TASK_SP_EVENT, &bp->sp_event))
10374                 bnxt_reset(bp, false);
10375
10376         if (test_and_clear_bit(BNXT_RESET_TASK_SILENT_SP_EVENT, &bp->sp_event))
10377                 bnxt_reset(bp, true);
10378
10379         if (test_and_clear_bit(BNXT_FW_RESET_NOTIFY_SP_EVENT, &bp->sp_event))
10380                 bnxt_devlink_health_report(bp, BNXT_FW_RESET_NOTIFY_SP_EVENT);
10381
10382         if (test_and_clear_bit(BNXT_FW_EXCEPTION_SP_EVENT, &bp->sp_event)) {
10383                 if (!is_bnxt_fw_ok(bp))
10384                         bnxt_devlink_health_report(bp,
10385                                                    BNXT_FW_EXCEPTION_SP_EVENT);
10386         }
10387
10388         smp_mb__before_atomic();
10389         clear_bit(BNXT_STATE_IN_SP_TASK, &bp->state);
10390 }
10391
10392 /* Under rtnl_lock */
10393 int bnxt_check_rings(struct bnxt *bp, int tx, int rx, bool sh, int tcs,
10394                      int tx_xdp)
10395 {
10396         int max_rx, max_tx, tx_sets = 1;
10397         int tx_rings_needed, stats;
10398         int rx_rings = rx;
10399         int cp, vnics, rc;
10400
10401         if (tcs)
10402                 tx_sets = tcs;
10403
10404         rc = bnxt_get_max_rings(bp, &max_rx, &max_tx, sh);
10405         if (rc)
10406                 return rc;
10407
10408         if (max_rx < rx)
10409                 return -ENOMEM;
10410
10411         tx_rings_needed = tx * tx_sets + tx_xdp;
10412         if (max_tx < tx_rings_needed)
10413                 return -ENOMEM;
10414
10415         vnics = 1;
10416         if ((bp->flags & (BNXT_FLAG_RFS | BNXT_FLAG_CHIP_P5)) == BNXT_FLAG_RFS)
10417                 vnics += rx_rings;
10418
10419         if (bp->flags & BNXT_FLAG_AGG_RINGS)
10420                 rx_rings <<= 1;
10421         cp = sh ? max_t(int, tx_rings_needed, rx) : tx_rings_needed + rx;
10422         stats = cp;
10423         if (BNXT_NEW_RM(bp)) {
10424                 cp += bnxt_get_ulp_msix_num(bp);
10425                 stats += bnxt_get_ulp_stat_ctxs(bp);
10426         }
10427         return bnxt_hwrm_check_rings(bp, tx_rings_needed, rx_rings, rx, cp,
10428                                      stats, vnics);
10429 }
10430
10431 static void bnxt_unmap_bars(struct bnxt *bp, struct pci_dev *pdev)
10432 {
10433         if (bp->bar2) {
10434                 pci_iounmap(pdev, bp->bar2);
10435                 bp->bar2 = NULL;
10436         }
10437
10438         if (bp->bar1) {
10439                 pci_iounmap(pdev, bp->bar1);
10440                 bp->bar1 = NULL;
10441         }
10442
10443         if (bp->bar0) {
10444                 pci_iounmap(pdev, bp->bar0);
10445                 bp->bar0 = NULL;
10446         }
10447 }
10448
10449 static void bnxt_cleanup_pci(struct bnxt *bp)
10450 {
10451         bnxt_unmap_bars(bp, bp->pdev);
10452         pci_release_regions(bp->pdev);
10453         if (pci_is_enabled(bp->pdev))
10454                 pci_disable_device(bp->pdev);
10455 }
10456
10457 static void bnxt_init_dflt_coal(struct bnxt *bp)
10458 {
10459         struct bnxt_coal *coal;
10460
10461         /* Tick values in micro seconds.
10462          * 1 coal_buf x bufs_per_record = 1 completion record.
10463          */
10464         coal = &bp->rx_coal;
10465         coal->coal_ticks = 10;
10466         coal->coal_bufs = 30;
10467         coal->coal_ticks_irq = 1;
10468         coal->coal_bufs_irq = 2;
10469         coal->idle_thresh = 50;
10470         coal->bufs_per_record = 2;
10471         coal->budget = 64;              /* NAPI budget */
10472
10473         coal = &bp->tx_coal;
10474         coal->coal_ticks = 28;
10475         coal->coal_bufs = 30;
10476         coal->coal_ticks_irq = 2;
10477         coal->coal_bufs_irq = 2;
10478         coal->bufs_per_record = 1;
10479
10480         bp->stats_coal_ticks = BNXT_DEF_STATS_COAL_TICKS;
10481 }
10482
10483 static void bnxt_alloc_fw_health(struct bnxt *bp)
10484 {
10485         if (bp->fw_health)
10486                 return;
10487
10488         if (!(bp->fw_cap & BNXT_FW_CAP_HOT_RESET) &&
10489             !(bp->fw_cap & BNXT_FW_CAP_ERROR_RECOVERY))
10490                 return;
10491
10492         bp->fw_health = kzalloc(sizeof(*bp->fw_health), GFP_KERNEL);
10493         if (!bp->fw_health) {
10494                 netdev_warn(bp->dev, "Failed to allocate fw_health\n");
10495                 bp->fw_cap &= ~BNXT_FW_CAP_HOT_RESET;
10496                 bp->fw_cap &= ~BNXT_FW_CAP_ERROR_RECOVERY;
10497         }
10498 }
10499
10500 static int bnxt_fw_init_one_p1(struct bnxt *bp)
10501 {
10502         int rc;
10503
10504         bp->fw_cap = 0;
10505         rc = bnxt_hwrm_ver_get(bp);
10506         if (rc)
10507                 return rc;
10508
10509         if (bp->fw_cap & BNXT_FW_CAP_KONG_MB_CHNL) {
10510                 rc = bnxt_alloc_kong_hwrm_resources(bp);
10511                 if (rc)
10512                         bp->fw_cap &= ~BNXT_FW_CAP_KONG_MB_CHNL;
10513         }
10514
10515         if ((bp->fw_cap & BNXT_FW_CAP_SHORT_CMD) ||
10516             bp->hwrm_max_ext_req_len > BNXT_HWRM_MAX_REQ_LEN) {
10517                 rc = bnxt_alloc_hwrm_short_cmd_req(bp);
10518                 if (rc)
10519                         return rc;
10520         }
10521         rc = bnxt_hwrm_func_reset(bp);
10522         if (rc)
10523                 return -ENODEV;
10524
10525         bnxt_hwrm_fw_set_time(bp);
10526         return 0;
10527 }
10528
10529 static int bnxt_fw_init_one_p2(struct bnxt *bp)
10530 {
10531         int rc;
10532
10533         /* Get the MAX capabilities for this function */
10534         rc = bnxt_hwrm_func_qcaps(bp);
10535         if (rc) {
10536                 netdev_err(bp->dev, "hwrm query capability failure rc: %x\n",
10537                            rc);
10538                 return -ENODEV;
10539         }
10540
10541         rc = bnxt_hwrm_cfa_adv_flow_mgnt_qcaps(bp);
10542         if (rc)
10543                 netdev_warn(bp->dev, "hwrm query adv flow mgnt failure rc: %d\n",
10544                             rc);
10545
10546         bnxt_alloc_fw_health(bp);
10547         rc = bnxt_hwrm_error_recovery_qcfg(bp);
10548         if (rc)
10549                 netdev_warn(bp->dev, "hwrm query error recovery failure rc: %d\n",
10550                             rc);
10551
10552         rc = bnxt_hwrm_func_drv_rgtr(bp, NULL, 0, false);
10553         if (rc)
10554                 return -ENODEV;
10555
10556         bnxt_hwrm_func_qcfg(bp);
10557         bnxt_hwrm_vnic_qcaps(bp);
10558         bnxt_hwrm_port_led_qcaps(bp);
10559         bnxt_ethtool_init(bp);
10560         bnxt_dcb_init(bp);
10561         return 0;
10562 }
10563
10564 static void bnxt_set_dflt_rss_hash_type(struct bnxt *bp)
10565 {
10566         bp->flags &= ~BNXT_FLAG_UDP_RSS_CAP;
10567         bp->rss_hash_cfg = VNIC_RSS_CFG_REQ_HASH_TYPE_IPV4 |
10568                            VNIC_RSS_CFG_REQ_HASH_TYPE_TCP_IPV4 |
10569                            VNIC_RSS_CFG_REQ_HASH_TYPE_IPV6 |
10570                            VNIC_RSS_CFG_REQ_HASH_TYPE_TCP_IPV6;
10571         if (BNXT_CHIP_P4(bp) && bp->hwrm_spec_code >= 0x10501) {
10572                 bp->flags |= BNXT_FLAG_UDP_RSS_CAP;
10573                 bp->rss_hash_cfg |= VNIC_RSS_CFG_REQ_HASH_TYPE_UDP_IPV4 |
10574                                     VNIC_RSS_CFG_REQ_HASH_TYPE_UDP_IPV6;
10575         }
10576 }
10577
10578 static void bnxt_set_dflt_rfs(struct bnxt *bp)
10579 {
10580         struct net_device *dev = bp->dev;
10581
10582         dev->hw_features &= ~NETIF_F_NTUPLE;
10583         dev->features &= ~NETIF_F_NTUPLE;
10584         bp->flags &= ~BNXT_FLAG_RFS;
10585         if (bnxt_rfs_supported(bp)) {
10586                 dev->hw_features |= NETIF_F_NTUPLE;
10587                 if (bnxt_rfs_capable(bp)) {
10588                         bp->flags |= BNXT_FLAG_RFS;
10589                         dev->features |= NETIF_F_NTUPLE;
10590                 }
10591         }
10592 }
10593
10594 static void bnxt_fw_init_one_p3(struct bnxt *bp)
10595 {
10596         struct pci_dev *pdev = bp->pdev;
10597
10598         bnxt_set_dflt_rss_hash_type(bp);
10599         bnxt_set_dflt_rfs(bp);
10600
10601         bnxt_get_wol_settings(bp);
10602         if (bp->flags & BNXT_FLAG_WOL_CAP)
10603                 device_set_wakeup_enable(&pdev->dev, bp->wol);
10604         else
10605                 device_set_wakeup_capable(&pdev->dev, false);
10606
10607         bnxt_hwrm_set_cache_line_size(bp, cache_line_size());
10608         bnxt_hwrm_coal_params_qcaps(bp);
10609 }
10610
10611 static int bnxt_fw_init_one(struct bnxt *bp)
10612 {
10613         int rc;
10614
10615         rc = bnxt_fw_init_one_p1(bp);
10616         if (rc) {
10617                 netdev_err(bp->dev, "Firmware init phase 1 failed\n");
10618                 return rc;
10619         }
10620         rc = bnxt_fw_init_one_p2(bp);
10621         if (rc) {
10622                 netdev_err(bp->dev, "Firmware init phase 2 failed\n");
10623                 return rc;
10624         }
10625         rc = bnxt_approve_mac(bp, bp->dev->dev_addr, false);
10626         if (rc)
10627                 return rc;
10628
10629         /* In case fw capabilities have changed, destroy the unneeded
10630          * reporters and create newly capable ones.
10631          */
10632         bnxt_dl_fw_reporters_destroy(bp, false);
10633         bnxt_dl_fw_reporters_create(bp);
10634         bnxt_fw_init_one_p3(bp);
10635         return 0;
10636 }
10637
10638 static void bnxt_fw_reset_writel(struct bnxt *bp, int reg_idx)
10639 {
10640         struct bnxt_fw_health *fw_health = bp->fw_health;
10641         u32 reg = fw_health->fw_reset_seq_regs[reg_idx];
10642         u32 val = fw_health->fw_reset_seq_vals[reg_idx];
10643         u32 reg_type, reg_off, delay_msecs;
10644
10645         delay_msecs = fw_health->fw_reset_seq_delay_msec[reg_idx];
10646         reg_type = BNXT_FW_HEALTH_REG_TYPE(reg);
10647         reg_off = BNXT_FW_HEALTH_REG_OFF(reg);
10648         switch (reg_type) {
10649         case BNXT_FW_HEALTH_REG_TYPE_CFG:
10650                 pci_write_config_dword(bp->pdev, reg_off, val);
10651                 break;
10652         case BNXT_FW_HEALTH_REG_TYPE_GRC:
10653                 writel(reg_off & BNXT_GRC_BASE_MASK,
10654                        bp->bar0 + BNXT_GRCPF_REG_WINDOW_BASE_OUT + 4);
10655                 reg_off = (reg_off & BNXT_GRC_OFFSET_MASK) + 0x2000;
10656                 /* fall through */
10657         case BNXT_FW_HEALTH_REG_TYPE_BAR0:
10658                 writel(val, bp->bar0 + reg_off);
10659                 break;
10660         case BNXT_FW_HEALTH_REG_TYPE_BAR1:
10661                 writel(val, bp->bar1 + reg_off);
10662                 break;
10663         }
10664         if (delay_msecs) {
10665                 pci_read_config_dword(bp->pdev, 0, &val);
10666                 msleep(delay_msecs);
10667         }
10668 }
10669
10670 static void bnxt_reset_all(struct bnxt *bp)
10671 {
10672         struct bnxt_fw_health *fw_health = bp->fw_health;
10673         int i, rc;
10674
10675         if (bp->fw_cap & BNXT_FW_CAP_ERR_RECOVER_RELOAD) {
10676 #ifdef CONFIG_TEE_BNXT_FW
10677                 rc = tee_bnxt_fw_load();
10678                 if (rc)
10679                         netdev_err(bp->dev, "Unable to reset FW rc=%d\n", rc);
10680                 bp->fw_reset_timestamp = jiffies;
10681 #endif
10682                 return;
10683         }
10684
10685         if (fw_health->flags & ERROR_RECOVERY_QCFG_RESP_FLAGS_HOST) {
10686                 for (i = 0; i < fw_health->fw_reset_seq_cnt; i++)
10687                         bnxt_fw_reset_writel(bp, i);
10688         } else if (fw_health->flags & ERROR_RECOVERY_QCFG_RESP_FLAGS_CO_CPU) {
10689                 struct hwrm_fw_reset_input req = {0};
10690
10691                 bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_FW_RESET, -1, -1);
10692                 req.resp_addr = cpu_to_le64(bp->hwrm_cmd_kong_resp_dma_addr);
10693                 req.embedded_proc_type = FW_RESET_REQ_EMBEDDED_PROC_TYPE_CHIP;
10694                 req.selfrst_status = FW_RESET_REQ_SELFRST_STATUS_SELFRSTASAP;
10695                 req.flags = FW_RESET_REQ_FLAGS_RESET_GRACEFUL;
10696                 rc = hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
10697                 if (rc)
10698                         netdev_warn(bp->dev, "Unable to reset FW rc=%d\n", rc);
10699         }
10700         bp->fw_reset_timestamp = jiffies;
10701 }
10702
10703 static void bnxt_fw_reset_task(struct work_struct *work)
10704 {
10705         struct bnxt *bp = container_of(work, struct bnxt, fw_reset_task.work);
10706         int rc;
10707
10708         if (!test_bit(BNXT_STATE_IN_FW_RESET, &bp->state)) {
10709                 netdev_err(bp->dev, "bnxt_fw_reset_task() called when not in fw reset mode!\n");
10710                 return;
10711         }
10712
10713         switch (bp->fw_reset_state) {
10714         case BNXT_FW_RESET_STATE_POLL_VF: {
10715                 int n = bnxt_get_registered_vfs(bp);
10716                 int tmo;
10717
10718                 if (n < 0) {
10719                         netdev_err(bp->dev, "Firmware reset aborted, subsequent func_qcfg cmd failed, rc = %d, %d msecs since reset timestamp\n",
10720                                    n, jiffies_to_msecs(jiffies -
10721                                    bp->fw_reset_timestamp));
10722                         goto fw_reset_abort;
10723                 } else if (n > 0) {
10724                         if (time_after(jiffies, bp->fw_reset_timestamp +
10725                                        (bp->fw_reset_max_dsecs * HZ / 10))) {
10726                                 clear_bit(BNXT_STATE_IN_FW_RESET, &bp->state);
10727                                 bp->fw_reset_state = 0;
10728                                 netdev_err(bp->dev, "Firmware reset aborted, bnxt_get_registered_vfs() returns %d\n",
10729                                            n);
10730                                 return;
10731                         }
10732                         bnxt_queue_fw_reset_work(bp, HZ / 10);
10733                         return;
10734                 }
10735                 bp->fw_reset_timestamp = jiffies;
10736                 rtnl_lock();
10737                 bnxt_fw_reset_close(bp);
10738                 if (bp->fw_cap & BNXT_FW_CAP_ERR_RECOVER_RELOAD) {
10739                         bp->fw_reset_state = BNXT_FW_RESET_STATE_POLL_FW_DOWN;
10740                         tmo = HZ / 10;
10741                 } else {
10742                         bp->fw_reset_state = BNXT_FW_RESET_STATE_ENABLE_DEV;
10743                         tmo = bp->fw_reset_min_dsecs * HZ / 10;
10744                 }
10745                 rtnl_unlock();
10746                 bnxt_queue_fw_reset_work(bp, tmo);
10747                 return;
10748         }
10749         case BNXT_FW_RESET_STATE_POLL_FW_DOWN: {
10750                 u32 val;
10751
10752                 val = bnxt_fw_health_readl(bp, BNXT_FW_HEALTH_REG);
10753                 if (!(val & BNXT_FW_STATUS_SHUTDOWN) &&
10754                     !time_after(jiffies, bp->fw_reset_timestamp +
10755                     (bp->fw_reset_max_dsecs * HZ / 10))) {
10756                         bnxt_queue_fw_reset_work(bp, HZ / 5);
10757                         return;
10758                 }
10759
10760                 if (!bp->fw_health->master) {
10761                         u32 wait_dsecs = bp->fw_health->normal_func_wait_dsecs;
10762
10763                         bp->fw_reset_state = BNXT_FW_RESET_STATE_ENABLE_DEV;
10764                         bnxt_queue_fw_reset_work(bp, wait_dsecs * HZ / 10);
10765                         return;
10766                 }
10767                 bp->fw_reset_state = BNXT_FW_RESET_STATE_RESET_FW;
10768         }
10769         /* fall through */
10770         case BNXT_FW_RESET_STATE_RESET_FW:
10771                 bnxt_reset_all(bp);
10772                 bp->fw_reset_state = BNXT_FW_RESET_STATE_ENABLE_DEV;
10773                 bnxt_queue_fw_reset_work(bp, bp->fw_reset_min_dsecs * HZ / 10);
10774                 return;
10775         case BNXT_FW_RESET_STATE_ENABLE_DEV:
10776                 if (test_bit(BNXT_STATE_FW_FATAL_COND, &bp->state)) {
10777                         u32 val;
10778
10779                         val = bnxt_fw_health_readl(bp,
10780                                                    BNXT_FW_RESET_INPROG_REG);
10781                         if (val)
10782                                 netdev_warn(bp->dev, "FW reset inprog %x after min wait time.\n",
10783                                             val);
10784                 }
10785                 clear_bit(BNXT_STATE_FW_FATAL_COND, &bp->state);
10786                 if (pci_enable_device(bp->pdev)) {
10787                         netdev_err(bp->dev, "Cannot re-enable PCI device\n");
10788                         goto fw_reset_abort;
10789                 }
10790                 pci_set_master(bp->pdev);
10791                 bp->fw_reset_state = BNXT_FW_RESET_STATE_POLL_FW;
10792                 /* fall through */
10793         case BNXT_FW_RESET_STATE_POLL_FW:
10794                 bp->hwrm_cmd_timeout = SHORT_HWRM_CMD_TIMEOUT;
10795                 rc = __bnxt_hwrm_ver_get(bp, true);
10796                 if (rc) {
10797                         if (time_after(jiffies, bp->fw_reset_timestamp +
10798                                        (bp->fw_reset_max_dsecs * HZ / 10))) {
10799                                 netdev_err(bp->dev, "Firmware reset aborted\n");
10800                                 goto fw_reset_abort;
10801                         }
10802                         bnxt_queue_fw_reset_work(bp, HZ / 5);
10803                         return;
10804                 }
10805                 bp->hwrm_cmd_timeout = DFLT_HWRM_CMD_TIMEOUT;
10806                 bp->fw_reset_state = BNXT_FW_RESET_STATE_OPENING;
10807                 /* fall through */
10808         case BNXT_FW_RESET_STATE_OPENING:
10809                 while (!rtnl_trylock()) {
10810                         bnxt_queue_fw_reset_work(bp, HZ / 10);
10811                         return;
10812                 }
10813                 rc = bnxt_open(bp->dev);
10814                 if (rc) {
10815                         netdev_err(bp->dev, "bnxt_open_nic() failed\n");
10816                         clear_bit(BNXT_STATE_IN_FW_RESET, &bp->state);
10817                         dev_close(bp->dev);
10818                 }
10819
10820                 bp->fw_reset_state = 0;
10821                 /* Make sure fw_reset_state is 0 before clearing the flag */
10822                 smp_mb__before_atomic();
10823                 clear_bit(BNXT_STATE_IN_FW_RESET, &bp->state);
10824                 bnxt_ulp_start(bp, rc);
10825                 bnxt_dl_health_status_update(bp, true);
10826                 rtnl_unlock();
10827                 break;
10828         }
10829         return;
10830
10831 fw_reset_abort:
10832         clear_bit(BNXT_STATE_IN_FW_RESET, &bp->state);
10833         if (bp->fw_reset_state != BNXT_FW_RESET_STATE_POLL_VF)
10834                 bnxt_dl_health_status_update(bp, false);
10835         bp->fw_reset_state = 0;
10836         rtnl_lock();
10837         dev_close(bp->dev);
10838         rtnl_unlock();
10839 }
10840
10841 static int bnxt_init_board(struct pci_dev *pdev, struct net_device *dev)
10842 {
10843         int rc;
10844         struct bnxt *bp = netdev_priv(dev);
10845
10846         SET_NETDEV_DEV(dev, &pdev->dev);
10847
10848         /* enable device (incl. PCI PM wakeup), and bus-mastering */
10849         rc = pci_enable_device(pdev);
10850         if (rc) {
10851                 dev_err(&pdev->dev, "Cannot enable PCI device, aborting\n");
10852                 goto init_err;
10853         }
10854
10855         if (!(pci_resource_flags(pdev, 0) & IORESOURCE_MEM)) {
10856                 dev_err(&pdev->dev,
10857                         "Cannot find PCI device base address, aborting\n");
10858                 rc = -ENODEV;
10859                 goto init_err_disable;
10860         }
10861
10862         rc = pci_request_regions(pdev, DRV_MODULE_NAME);
10863         if (rc) {
10864                 dev_err(&pdev->dev, "Cannot obtain PCI resources, aborting\n");
10865                 goto init_err_disable;
10866         }
10867
10868         if (dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64)) != 0 &&
10869             dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32)) != 0) {
10870                 dev_err(&pdev->dev, "System does not support DMA, aborting\n");
10871                 goto init_err_disable;
10872         }
10873
10874         pci_set_master(pdev);
10875
10876         bp->dev = dev;
10877         bp->pdev = pdev;
10878
10879         bp->bar0 = pci_ioremap_bar(pdev, 0);
10880         if (!bp->bar0) {
10881                 dev_err(&pdev->dev, "Cannot map device registers, aborting\n");
10882                 rc = -ENOMEM;
10883                 goto init_err_release;
10884         }
10885
10886         bp->bar1 = pci_ioremap_bar(pdev, 2);
10887         if (!bp->bar1) {
10888                 dev_err(&pdev->dev, "Cannot map doorbell registers, aborting\n");
10889                 rc = -ENOMEM;
10890                 goto init_err_release;
10891         }
10892
10893         bp->bar2 = pci_ioremap_bar(pdev, 4);
10894         if (!bp->bar2) {
10895                 dev_err(&pdev->dev, "Cannot map bar4 registers, aborting\n");
10896                 rc = -ENOMEM;
10897                 goto init_err_release;
10898         }
10899
10900         pci_enable_pcie_error_reporting(pdev);
10901
10902         INIT_WORK(&bp->sp_task, bnxt_sp_task);
10903         INIT_DELAYED_WORK(&bp->fw_reset_task, bnxt_fw_reset_task);
10904
10905         spin_lock_init(&bp->ntp_fltr_lock);
10906 #if BITS_PER_LONG == 32
10907         spin_lock_init(&bp->db_lock);
10908 #endif
10909
10910         bp->rx_ring_size = BNXT_DEFAULT_RX_RING_SIZE;
10911         bp->tx_ring_size = BNXT_DEFAULT_TX_RING_SIZE;
10912
10913         bnxt_init_dflt_coal(bp);
10914
10915         timer_setup(&bp->timer, bnxt_timer, 0);
10916         bp->current_interval = BNXT_TIMER_INTERVAL;
10917
10918         clear_bit(BNXT_STATE_OPEN, &bp->state);
10919         return 0;
10920
10921 init_err_release:
10922         bnxt_unmap_bars(bp, pdev);
10923         pci_release_regions(pdev);
10924
10925 init_err_disable:
10926         pci_disable_device(pdev);
10927
10928 init_err:
10929         return rc;
10930 }
10931
10932 /* rtnl_lock held */
10933 static int bnxt_change_mac_addr(struct net_device *dev, void *p)
10934 {
10935         struct sockaddr *addr = p;
10936         struct bnxt *bp = netdev_priv(dev);
10937         int rc = 0;
10938
10939         if (!is_valid_ether_addr(addr->sa_data))
10940                 return -EADDRNOTAVAIL;
10941
10942         if (ether_addr_equal(addr->sa_data, dev->dev_addr))
10943                 return 0;
10944
10945         rc = bnxt_approve_mac(bp, addr->sa_data, true);
10946         if (rc)
10947                 return rc;
10948
10949         memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
10950         if (netif_running(dev)) {
10951                 bnxt_close_nic(bp, false, false);
10952                 rc = bnxt_open_nic(bp, false, false);
10953         }
10954
10955         return rc;
10956 }
10957
10958 /* rtnl_lock held */
10959 static int bnxt_change_mtu(struct net_device *dev, int new_mtu)
10960 {
10961         struct bnxt *bp = netdev_priv(dev);
10962
10963         if (netif_running(dev))
10964                 bnxt_close_nic(bp, false, false);
10965
10966         dev->mtu = new_mtu;
10967         bnxt_set_ring_params(bp);
10968
10969         if (netif_running(dev))
10970                 return bnxt_open_nic(bp, false, false);
10971
10972         return 0;
10973 }
10974
10975 int bnxt_setup_mq_tc(struct net_device *dev, u8 tc)
10976 {
10977         struct bnxt *bp = netdev_priv(dev);
10978         bool sh = false;
10979         int rc;
10980
10981         if (tc > bp->max_tc) {
10982                 netdev_err(dev, "Too many traffic classes requested: %d. Max supported is %d.\n",
10983                            tc, bp->max_tc);
10984                 return -EINVAL;
10985         }
10986
10987         if (netdev_get_num_tc(dev) == tc)
10988                 return 0;
10989
10990         if (bp->flags & BNXT_FLAG_SHARED_RINGS)
10991                 sh = true;
10992
10993         rc = bnxt_check_rings(bp, bp->tx_nr_rings_per_tc, bp->rx_nr_rings,
10994                               sh, tc, bp->tx_nr_rings_xdp);
10995         if (rc)
10996                 return rc;
10997
10998         /* Needs to close the device and do hw resource re-allocations */
10999         if (netif_running(bp->dev))
11000                 bnxt_close_nic(bp, true, false);
11001
11002         if (tc) {
11003                 bp->tx_nr_rings = bp->tx_nr_rings_per_tc * tc;
11004                 netdev_set_num_tc(dev, tc);
11005         } else {
11006                 bp->tx_nr_rings = bp->tx_nr_rings_per_tc;
11007                 netdev_reset_tc(dev);
11008         }
11009         bp->tx_nr_rings += bp->tx_nr_rings_xdp;
11010         bp->cp_nr_rings = sh ? max_t(int, bp->tx_nr_rings, bp->rx_nr_rings) :
11011                                bp->tx_nr_rings + bp->rx_nr_rings;
11012
11013         if (netif_running(bp->dev))
11014                 return bnxt_open_nic(bp, true, false);
11015
11016         return 0;
11017 }
11018
11019 static int bnxt_setup_tc_block_cb(enum tc_setup_type type, void *type_data,
11020                                   void *cb_priv)
11021 {
11022         struct bnxt *bp = cb_priv;
11023
11024         if (!bnxt_tc_flower_enabled(bp) ||
11025             !tc_cls_can_offload_and_chain0(bp->dev, type_data))
11026                 return -EOPNOTSUPP;
11027
11028         switch (type) {
11029         case TC_SETUP_CLSFLOWER:
11030                 return bnxt_tc_setup_flower(bp, bp->pf.fw_fid, type_data);
11031         default:
11032                 return -EOPNOTSUPP;
11033         }
11034 }
11035
11036 LIST_HEAD(bnxt_block_cb_list);
11037
11038 static int bnxt_setup_tc(struct net_device *dev, enum tc_setup_type type,
11039                          void *type_data)
11040 {
11041         struct bnxt *bp = netdev_priv(dev);
11042
11043         switch (type) {
11044         case TC_SETUP_BLOCK:
11045                 return flow_block_cb_setup_simple(type_data,
11046                                                   &bnxt_block_cb_list,
11047                                                   bnxt_setup_tc_block_cb,
11048                                                   bp, bp, true);
11049         case TC_SETUP_QDISC_MQPRIO: {
11050                 struct tc_mqprio_qopt *mqprio = type_data;
11051
11052                 mqprio->hw = TC_MQPRIO_HW_OFFLOAD_TCS;
11053
11054                 return bnxt_setup_mq_tc(dev, mqprio->num_tc);
11055         }
11056         default:
11057                 return -EOPNOTSUPP;
11058         }
11059 }
11060
11061 #ifdef CONFIG_RFS_ACCEL
11062 static bool bnxt_fltr_match(struct bnxt_ntuple_filter *f1,
11063                             struct bnxt_ntuple_filter *f2)
11064 {
11065         struct flow_keys *keys1 = &f1->fkeys;
11066         struct flow_keys *keys2 = &f2->fkeys;
11067
11068         if (keys1->addrs.v4addrs.src == keys2->addrs.v4addrs.src &&
11069             keys1->addrs.v4addrs.dst == keys2->addrs.v4addrs.dst &&
11070             keys1->ports.ports == keys2->ports.ports &&
11071             keys1->basic.ip_proto == keys2->basic.ip_proto &&
11072             keys1->basic.n_proto == keys2->basic.n_proto &&
11073             keys1->control.flags == keys2->control.flags &&
11074             ether_addr_equal(f1->src_mac_addr, f2->src_mac_addr) &&
11075             ether_addr_equal(f1->dst_mac_addr, f2->dst_mac_addr))
11076                 return true;
11077
11078         return false;
11079 }
11080
11081 static int bnxt_rx_flow_steer(struct net_device *dev, const struct sk_buff *skb,
11082                               u16 rxq_index, u32 flow_id)
11083 {
11084         struct bnxt *bp = netdev_priv(dev);
11085         struct bnxt_ntuple_filter *fltr, *new_fltr;
11086         struct flow_keys *fkeys;
11087         struct ethhdr *eth = (struct ethhdr *)skb_mac_header(skb);
11088         int rc = 0, idx, bit_id, l2_idx = 0;
11089         struct hlist_head *head;
11090
11091         if (!ether_addr_equal(dev->dev_addr, eth->h_dest)) {
11092                 struct bnxt_vnic_info *vnic = &bp->vnic_info[0];
11093                 int off = 0, j;
11094
11095                 netif_addr_lock_bh(dev);
11096                 for (j = 0; j < vnic->uc_filter_count; j++, off += ETH_ALEN) {
11097                         if (ether_addr_equal(eth->h_dest,
11098                                              vnic->uc_list + off)) {
11099                                 l2_idx = j + 1;
11100                                 break;
11101                         }
11102                 }
11103                 netif_addr_unlock_bh(dev);
11104                 if (!l2_idx)
11105                         return -EINVAL;
11106         }
11107         new_fltr = kzalloc(sizeof(*new_fltr), GFP_ATOMIC);
11108         if (!new_fltr)
11109                 return -ENOMEM;
11110
11111         fkeys = &new_fltr->fkeys;
11112         if (!skb_flow_dissect_flow_keys(skb, fkeys, 0)) {
11113                 rc = -EPROTONOSUPPORT;
11114                 goto err_free;
11115         }
11116
11117         if ((fkeys->basic.n_proto != htons(ETH_P_IP) &&
11118              fkeys->basic.n_proto != htons(ETH_P_IPV6)) ||
11119             ((fkeys->basic.ip_proto != IPPROTO_TCP) &&
11120              (fkeys->basic.ip_proto != IPPROTO_UDP))) {
11121                 rc = -EPROTONOSUPPORT;
11122                 goto err_free;
11123         }
11124         if (fkeys->basic.n_proto == htons(ETH_P_IPV6) &&
11125             bp->hwrm_spec_code < 0x10601) {
11126                 rc = -EPROTONOSUPPORT;
11127                 goto err_free;
11128         }
11129         if ((fkeys->control.flags & FLOW_DIS_ENCAPSULATION) &&
11130             bp->hwrm_spec_code < 0x10601) {
11131                 rc = -EPROTONOSUPPORT;
11132                 goto err_free;
11133         }
11134
11135         memcpy(new_fltr->dst_mac_addr, eth->h_dest, ETH_ALEN);
11136         memcpy(new_fltr->src_mac_addr, eth->h_source, ETH_ALEN);
11137
11138         idx = skb_get_hash_raw(skb) & BNXT_NTP_FLTR_HASH_MASK;
11139         head = &bp->ntp_fltr_hash_tbl[idx];
11140         rcu_read_lock();
11141         hlist_for_each_entry_rcu(fltr, head, hash) {
11142                 if (bnxt_fltr_match(fltr, new_fltr)) {
11143                         rcu_read_unlock();
11144                         rc = 0;
11145                         goto err_free;
11146                 }
11147         }
11148         rcu_read_unlock();
11149
11150         spin_lock_bh(&bp->ntp_fltr_lock);
11151         bit_id = bitmap_find_free_region(bp->ntp_fltr_bmap,
11152                                          BNXT_NTP_FLTR_MAX_FLTR, 0);
11153         if (bit_id < 0) {
11154                 spin_unlock_bh(&bp->ntp_fltr_lock);
11155                 rc = -ENOMEM;
11156                 goto err_free;
11157         }
11158
11159         new_fltr->sw_id = (u16)bit_id;
11160         new_fltr->flow_id = flow_id;
11161         new_fltr->l2_fltr_idx = l2_idx;
11162         new_fltr->rxq = rxq_index;
11163         hlist_add_head_rcu(&new_fltr->hash, head);
11164         bp->ntp_fltr_count++;
11165         spin_unlock_bh(&bp->ntp_fltr_lock);
11166
11167         set_bit(BNXT_RX_NTP_FLTR_SP_EVENT, &bp->sp_event);
11168         bnxt_queue_sp_work(bp);
11169
11170         return new_fltr->sw_id;
11171
11172 err_free:
11173         kfree(new_fltr);
11174         return rc;
11175 }
11176
11177 static void bnxt_cfg_ntp_filters(struct bnxt *bp)
11178 {
11179         int i;
11180
11181         for (i = 0; i < BNXT_NTP_FLTR_HASH_SIZE; i++) {
11182                 struct hlist_head *head;
11183                 struct hlist_node *tmp;
11184                 struct bnxt_ntuple_filter *fltr;
11185                 int rc;
11186
11187                 head = &bp->ntp_fltr_hash_tbl[i];
11188                 hlist_for_each_entry_safe(fltr, tmp, head, hash) {
11189                         bool del = false;
11190
11191                         if (test_bit(BNXT_FLTR_VALID, &fltr->state)) {
11192                                 if (rps_may_expire_flow(bp->dev, fltr->rxq,
11193                                                         fltr->flow_id,
11194                                                         fltr->sw_id)) {
11195                                         bnxt_hwrm_cfa_ntuple_filter_free(bp,
11196                                                                          fltr);
11197                                         del = true;
11198                                 }
11199                         } else {
11200                                 rc = bnxt_hwrm_cfa_ntuple_filter_alloc(bp,
11201                                                                        fltr);
11202                                 if (rc)
11203                                         del = true;
11204                                 else
11205                                         set_bit(BNXT_FLTR_VALID, &fltr->state);
11206                         }
11207
11208                         if (del) {
11209                                 spin_lock_bh(&bp->ntp_fltr_lock);
11210                                 hlist_del_rcu(&fltr->hash);
11211                                 bp->ntp_fltr_count--;
11212                                 spin_unlock_bh(&bp->ntp_fltr_lock);
11213                                 synchronize_rcu();
11214                                 clear_bit(fltr->sw_id, bp->ntp_fltr_bmap);
11215                                 kfree(fltr);
11216                         }
11217                 }
11218         }
11219         if (test_and_clear_bit(BNXT_HWRM_PF_UNLOAD_SP_EVENT, &bp->sp_event))
11220                 netdev_info(bp->dev, "Receive PF driver unload event!");
11221 }
11222
11223 #else
11224
11225 static void bnxt_cfg_ntp_filters(struct bnxt *bp)
11226 {
11227 }
11228
11229 #endif /* CONFIG_RFS_ACCEL */
11230
11231 static void bnxt_udp_tunnel_add(struct net_device *dev,
11232                                 struct udp_tunnel_info *ti)
11233 {
11234         struct bnxt *bp = netdev_priv(dev);
11235
11236         if (ti->sa_family != AF_INET6 && ti->sa_family != AF_INET)
11237                 return;
11238
11239         if (!netif_running(dev))
11240                 return;
11241
11242         switch (ti->type) {
11243         case UDP_TUNNEL_TYPE_VXLAN:
11244                 if (bp->vxlan_port_cnt && bp->vxlan_port != ti->port)
11245                         return;
11246
11247                 bp->vxlan_port_cnt++;
11248                 if (bp->vxlan_port_cnt == 1) {
11249                         bp->vxlan_port = ti->port;
11250                         set_bit(BNXT_VXLAN_ADD_PORT_SP_EVENT, &bp->sp_event);
11251                         bnxt_queue_sp_work(bp);
11252                 }
11253                 break;
11254         case UDP_TUNNEL_TYPE_GENEVE:
11255                 if (bp->nge_port_cnt && bp->nge_port != ti->port)
11256                         return;
11257
11258                 bp->nge_port_cnt++;
11259                 if (bp->nge_port_cnt == 1) {
11260                         bp->nge_port = ti->port;
11261                         set_bit(BNXT_GENEVE_ADD_PORT_SP_EVENT, &bp->sp_event);
11262                 }
11263                 break;
11264         default:
11265                 return;
11266         }
11267
11268         bnxt_queue_sp_work(bp);
11269 }
11270
11271 static void bnxt_udp_tunnel_del(struct net_device *dev,
11272                                 struct udp_tunnel_info *ti)
11273 {
11274         struct bnxt *bp = netdev_priv(dev);
11275
11276         if (ti->sa_family != AF_INET6 && ti->sa_family != AF_INET)
11277                 return;
11278
11279         if (!netif_running(dev))
11280                 return;
11281
11282         switch (ti->type) {
11283         case UDP_TUNNEL_TYPE_VXLAN:
11284                 if (!bp->vxlan_port_cnt || bp->vxlan_port != ti->port)
11285                         return;
11286                 bp->vxlan_port_cnt--;
11287
11288                 if (bp->vxlan_port_cnt != 0)
11289                         return;
11290
11291                 set_bit(BNXT_VXLAN_DEL_PORT_SP_EVENT, &bp->sp_event);
11292                 break;
11293         case UDP_TUNNEL_TYPE_GENEVE:
11294                 if (!bp->nge_port_cnt || bp->nge_port != ti->port)
11295                         return;
11296                 bp->nge_port_cnt--;
11297
11298                 if (bp->nge_port_cnt != 0)
11299                         return;
11300
11301                 set_bit(BNXT_GENEVE_DEL_PORT_SP_EVENT, &bp->sp_event);
11302                 break;
11303         default:
11304                 return;
11305         }
11306
11307         bnxt_queue_sp_work(bp);
11308 }
11309
11310 static int bnxt_bridge_getlink(struct sk_buff *skb, u32 pid, u32 seq,
11311                                struct net_device *dev, u32 filter_mask,
11312                                int nlflags)
11313 {
11314         struct bnxt *bp = netdev_priv(dev);
11315
11316         return ndo_dflt_bridge_getlink(skb, pid, seq, dev, bp->br_mode, 0, 0,
11317                                        nlflags, filter_mask, NULL);
11318 }
11319
11320 static int bnxt_bridge_setlink(struct net_device *dev, struct nlmsghdr *nlh,
11321                                u16 flags, struct netlink_ext_ack *extack)
11322 {
11323         struct bnxt *bp = netdev_priv(dev);
11324         struct nlattr *attr, *br_spec;
11325         int rem, rc = 0;
11326
11327         if (bp->hwrm_spec_code < 0x10708 || !BNXT_SINGLE_PF(bp))
11328                 return -EOPNOTSUPP;
11329
11330         br_spec = nlmsg_find_attr(nlh, sizeof(struct ifinfomsg), IFLA_AF_SPEC);
11331         if (!br_spec)
11332                 return -EINVAL;
11333
11334         nla_for_each_nested(attr, br_spec, rem) {
11335                 u16 mode;
11336
11337                 if (nla_type(attr) != IFLA_BRIDGE_MODE)
11338                         continue;
11339
11340                 if (nla_len(attr) < sizeof(mode))
11341                         return -EINVAL;
11342
11343                 mode = nla_get_u16(attr);
11344                 if (mode == bp->br_mode)
11345                         break;
11346
11347                 rc = bnxt_hwrm_set_br_mode(bp, mode);
11348                 if (!rc)
11349                         bp->br_mode = mode;
11350                 break;
11351         }
11352         return rc;
11353 }
11354
11355 int bnxt_get_port_parent_id(struct net_device *dev,
11356                             struct netdev_phys_item_id *ppid)
11357 {
11358         struct bnxt *bp = netdev_priv(dev);
11359
11360         if (bp->eswitch_mode != DEVLINK_ESWITCH_MODE_SWITCHDEV)
11361                 return -EOPNOTSUPP;
11362
11363         /* The PF and it's VF-reps only support the switchdev framework */
11364         if (!BNXT_PF(bp))
11365                 return -EOPNOTSUPP;
11366
11367         ppid->id_len = sizeof(bp->switch_id);
11368         memcpy(ppid->id, bp->switch_id, ppid->id_len);
11369
11370         return 0;
11371 }
11372
11373 static struct devlink_port *bnxt_get_devlink_port(struct net_device *dev)
11374 {
11375         struct bnxt *bp = netdev_priv(dev);
11376
11377         return &bp->dl_port;
11378 }
11379
11380 static const struct net_device_ops bnxt_netdev_ops = {
11381         .ndo_open               = bnxt_open,
11382         .ndo_start_xmit         = bnxt_start_xmit,
11383         .ndo_stop               = bnxt_close,
11384         .ndo_get_stats64        = bnxt_get_stats64,
11385         .ndo_set_rx_mode        = bnxt_set_rx_mode,
11386         .ndo_do_ioctl           = bnxt_ioctl,
11387         .ndo_validate_addr      = eth_validate_addr,
11388         .ndo_set_mac_address    = bnxt_change_mac_addr,
11389         .ndo_change_mtu         = bnxt_change_mtu,
11390         .ndo_fix_features       = bnxt_fix_features,
11391         .ndo_set_features       = bnxt_set_features,
11392         .ndo_tx_timeout         = bnxt_tx_timeout,
11393 #ifdef CONFIG_BNXT_SRIOV
11394         .ndo_get_vf_config      = bnxt_get_vf_config,
11395         .ndo_set_vf_mac         = bnxt_set_vf_mac,
11396         .ndo_set_vf_vlan        = bnxt_set_vf_vlan,
11397         .ndo_set_vf_rate        = bnxt_set_vf_bw,
11398         .ndo_set_vf_link_state  = bnxt_set_vf_link_state,
11399         .ndo_set_vf_spoofchk    = bnxt_set_vf_spoofchk,
11400         .ndo_set_vf_trust       = bnxt_set_vf_trust,
11401 #endif
11402         .ndo_setup_tc           = bnxt_setup_tc,
11403 #ifdef CONFIG_RFS_ACCEL
11404         .ndo_rx_flow_steer      = bnxt_rx_flow_steer,
11405 #endif
11406         .ndo_udp_tunnel_add     = bnxt_udp_tunnel_add,
11407         .ndo_udp_tunnel_del     = bnxt_udp_tunnel_del,
11408         .ndo_bpf                = bnxt_xdp,
11409         .ndo_xdp_xmit           = bnxt_xdp_xmit,
11410         .ndo_bridge_getlink     = bnxt_bridge_getlink,
11411         .ndo_bridge_setlink     = bnxt_bridge_setlink,
11412         .ndo_get_devlink_port   = bnxt_get_devlink_port,
11413 };
11414
11415 static void bnxt_remove_one(struct pci_dev *pdev)
11416 {
11417         struct net_device *dev = pci_get_drvdata(pdev);
11418         struct bnxt *bp = netdev_priv(dev);
11419
11420         if (BNXT_PF(bp))
11421                 bnxt_sriov_disable(bp);
11422
11423         bnxt_dl_fw_reporters_destroy(bp, true);
11424         bnxt_dl_unregister(bp);
11425         pci_disable_pcie_error_reporting(pdev);
11426         unregister_netdev(dev);
11427         bnxt_shutdown_tc(bp);
11428         bnxt_cancel_sp_work(bp);
11429         bp->sp_event = 0;
11430
11431         bnxt_clear_int_mode(bp);
11432         bnxt_hwrm_func_drv_unrgtr(bp);
11433         bnxt_free_hwrm_resources(bp);
11434         bnxt_free_hwrm_short_cmd_req(bp);
11435         bnxt_ethtool_free(bp);
11436         bnxt_dcb_free(bp);
11437         kfree(bp->edev);
11438         bp->edev = NULL;
11439         kfree(bp->fw_health);
11440         bp->fw_health = NULL;
11441         bnxt_cleanup_pci(bp);
11442         bnxt_free_ctx_mem(bp);
11443         kfree(bp->ctx);
11444         bp->ctx = NULL;
11445         bnxt_free_port_stats(bp);
11446         free_netdev(dev);
11447 }
11448
11449 static int bnxt_probe_phy(struct bnxt *bp, bool fw_dflt)
11450 {
11451         int rc = 0;
11452         struct bnxt_link_info *link_info = &bp->link_info;
11453
11454         rc = bnxt_hwrm_phy_qcaps(bp);
11455         if (rc) {
11456                 netdev_err(bp->dev, "Probe phy can't get phy capabilities (rc: %x)\n",
11457                            rc);
11458                 return rc;
11459         }
11460         rc = bnxt_update_link(bp, false);
11461         if (rc) {
11462                 netdev_err(bp->dev, "Probe phy can't update link (rc: %x)\n",
11463                            rc);
11464                 return rc;
11465         }
11466
11467         /* Older firmware does not have supported_auto_speeds, so assume
11468          * that all supported speeds can be autonegotiated.
11469          */
11470         if (link_info->auto_link_speeds && !link_info->support_auto_speeds)
11471                 link_info->support_auto_speeds = link_info->support_speeds;
11472
11473         if (!fw_dflt)
11474                 return 0;
11475
11476         bnxt_init_ethtool_link_settings(bp);
11477         return 0;
11478 }
11479
11480 static int bnxt_get_max_irq(struct pci_dev *pdev)
11481 {
11482         u16 ctrl;
11483
11484         if (!pdev->msix_cap)
11485                 return 1;
11486
11487         pci_read_config_word(pdev, pdev->msix_cap + PCI_MSIX_FLAGS, &ctrl);
11488         return (ctrl & PCI_MSIX_FLAGS_QSIZE) + 1;
11489 }
11490
11491 static void _bnxt_get_max_rings(struct bnxt *bp, int *max_rx, int *max_tx,
11492                                 int *max_cp)
11493 {
11494         struct bnxt_hw_resc *hw_resc = &bp->hw_resc;
11495         int max_ring_grps = 0, max_irq;
11496
11497         *max_tx = hw_resc->max_tx_rings;
11498         *max_rx = hw_resc->max_rx_rings;
11499         *max_cp = bnxt_get_max_func_cp_rings_for_en(bp);
11500         max_irq = min_t(int, bnxt_get_max_func_irqs(bp) -
11501                         bnxt_get_ulp_msix_num(bp),
11502                         hw_resc->max_stat_ctxs - bnxt_get_ulp_stat_ctxs(bp));
11503         if (!(bp->flags & BNXT_FLAG_CHIP_P5))
11504                 *max_cp = min_t(int, *max_cp, max_irq);
11505         max_ring_grps = hw_resc->max_hw_ring_grps;
11506         if (BNXT_CHIP_TYPE_NITRO_A0(bp) && BNXT_PF(bp)) {
11507                 *max_cp -= 1;
11508                 *max_rx -= 2;
11509         }
11510         if (bp->flags & BNXT_FLAG_AGG_RINGS)
11511                 *max_rx >>= 1;
11512         if (bp->flags & BNXT_FLAG_CHIP_P5) {
11513                 bnxt_trim_rings(bp, max_rx, max_tx, *max_cp, false);
11514                 /* On P5 chips, max_cp output param should be available NQs */
11515                 *max_cp = max_irq;
11516         }
11517         *max_rx = min_t(int, *max_rx, max_ring_grps);
11518 }
11519
11520 int bnxt_get_max_rings(struct bnxt *bp, int *max_rx, int *max_tx, bool shared)
11521 {
11522         int rx, tx, cp;
11523
11524         _bnxt_get_max_rings(bp, &rx, &tx, &cp);
11525         *max_rx = rx;
11526         *max_tx = tx;
11527         if (!rx || !tx || !cp)
11528                 return -ENOMEM;
11529
11530         return bnxt_trim_rings(bp, max_rx, max_tx, cp, shared);
11531 }
11532
11533 static int bnxt_get_dflt_rings(struct bnxt *bp, int *max_rx, int *max_tx,
11534                                bool shared)
11535 {
11536         int rc;
11537
11538         rc = bnxt_get_max_rings(bp, max_rx, max_tx, shared);
11539         if (rc && (bp->flags & BNXT_FLAG_AGG_RINGS)) {
11540                 /* Not enough rings, try disabling agg rings. */
11541                 bp->flags &= ~BNXT_FLAG_AGG_RINGS;
11542                 rc = bnxt_get_max_rings(bp, max_rx, max_tx, shared);
11543                 if (rc) {
11544                         /* set BNXT_FLAG_AGG_RINGS back for consistency */
11545                         bp->flags |= BNXT_FLAG_AGG_RINGS;
11546                         return rc;
11547                 }
11548                 bp->flags |= BNXT_FLAG_NO_AGG_RINGS;
11549                 bp->dev->hw_features &= ~(NETIF_F_LRO | NETIF_F_GRO_HW);
11550                 bp->dev->features &= ~(NETIF_F_LRO | NETIF_F_GRO_HW);
11551                 bnxt_set_ring_params(bp);
11552         }
11553
11554         if (bp->flags & BNXT_FLAG_ROCE_CAP) {
11555                 int max_cp, max_stat, max_irq;
11556
11557                 /* Reserve minimum resources for RoCE */
11558                 max_cp = bnxt_get_max_func_cp_rings(bp);
11559                 max_stat = bnxt_get_max_func_stat_ctxs(bp);
11560                 max_irq = bnxt_get_max_func_irqs(bp);
11561                 if (max_cp <= BNXT_MIN_ROCE_CP_RINGS ||
11562                     max_irq <= BNXT_MIN_ROCE_CP_RINGS ||
11563                     max_stat <= BNXT_MIN_ROCE_STAT_CTXS)
11564                         return 0;
11565
11566                 max_cp -= BNXT_MIN_ROCE_CP_RINGS;
11567                 max_irq -= BNXT_MIN_ROCE_CP_RINGS;
11568                 max_stat -= BNXT_MIN_ROCE_STAT_CTXS;
11569                 max_cp = min_t(int, max_cp, max_irq);
11570                 max_cp = min_t(int, max_cp, max_stat);
11571                 rc = bnxt_trim_rings(bp, max_rx, max_tx, max_cp, shared);
11572                 if (rc)
11573                         rc = 0;
11574         }
11575         return rc;
11576 }
11577
11578 /* In initial default shared ring setting, each shared ring must have a
11579  * RX/TX ring pair.
11580  */
11581 static void bnxt_trim_dflt_sh_rings(struct bnxt *bp)
11582 {
11583         bp->cp_nr_rings = min_t(int, bp->tx_nr_rings_per_tc, bp->rx_nr_rings);
11584         bp->rx_nr_rings = bp->cp_nr_rings;
11585         bp->tx_nr_rings_per_tc = bp->cp_nr_rings;
11586         bp->tx_nr_rings = bp->tx_nr_rings_per_tc;
11587 }
11588
11589 static int bnxt_set_dflt_rings(struct bnxt *bp, bool sh)
11590 {
11591         int dflt_rings, max_rx_rings, max_tx_rings, rc;
11592
11593         if (!bnxt_can_reserve_rings(bp))
11594                 return 0;
11595
11596         if (sh)
11597                 bp->flags |= BNXT_FLAG_SHARED_RINGS;
11598         dflt_rings = is_kdump_kernel() ? 1 : netif_get_num_default_rss_queues();
11599         /* Reduce default rings on multi-port cards so that total default
11600          * rings do not exceed CPU count.
11601          */
11602         if (bp->port_count > 1) {
11603                 int max_rings =
11604                         max_t(int, num_online_cpus() / bp->port_count, 1);
11605
11606                 dflt_rings = min_t(int, dflt_rings, max_rings);
11607         }
11608         rc = bnxt_get_dflt_rings(bp, &max_rx_rings, &max_tx_rings, sh);
11609         if (rc)
11610                 return rc;
11611         bp->rx_nr_rings = min_t(int, dflt_rings, max_rx_rings);
11612         bp->tx_nr_rings_per_tc = min_t(int, dflt_rings, max_tx_rings);
11613         if (sh)
11614                 bnxt_trim_dflt_sh_rings(bp);
11615         else
11616                 bp->cp_nr_rings = bp->tx_nr_rings_per_tc + bp->rx_nr_rings;
11617         bp->tx_nr_rings = bp->tx_nr_rings_per_tc;
11618
11619         rc = __bnxt_reserve_rings(bp);
11620         if (rc)
11621                 netdev_warn(bp->dev, "Unable to reserve tx rings\n");
11622         bp->tx_nr_rings_per_tc = bp->tx_nr_rings;
11623         if (sh)
11624                 bnxt_trim_dflt_sh_rings(bp);
11625
11626         /* Rings may have been trimmed, re-reserve the trimmed rings. */
11627         if (bnxt_need_reserve_rings(bp)) {
11628                 rc = __bnxt_reserve_rings(bp);
11629                 if (rc)
11630                         netdev_warn(bp->dev, "2nd rings reservation failed.\n");
11631                 bp->tx_nr_rings_per_tc = bp->tx_nr_rings;
11632         }
11633         if (BNXT_CHIP_TYPE_NITRO_A0(bp)) {
11634                 bp->rx_nr_rings++;
11635                 bp->cp_nr_rings++;
11636         }
11637         return rc;
11638 }
11639
11640 static int bnxt_init_dflt_ring_mode(struct bnxt *bp)
11641 {
11642         int rc;
11643
11644         if (bp->tx_nr_rings)
11645                 return 0;
11646
11647         bnxt_ulp_irq_stop(bp);
11648         bnxt_clear_int_mode(bp);
11649         rc = bnxt_set_dflt_rings(bp, true);
11650         if (rc) {
11651                 netdev_err(bp->dev, "Not enough rings available.\n");
11652                 goto init_dflt_ring_err;
11653         }
11654         rc = bnxt_init_int_mode(bp);
11655         if (rc)
11656                 goto init_dflt_ring_err;
11657
11658         bp->tx_nr_rings_per_tc = bp->tx_nr_rings;
11659         if (bnxt_rfs_supported(bp) && bnxt_rfs_capable(bp)) {
11660                 bp->flags |= BNXT_FLAG_RFS;
11661                 bp->dev->features |= NETIF_F_NTUPLE;
11662         }
11663 init_dflt_ring_err:
11664         bnxt_ulp_irq_restart(bp, rc);
11665         return rc;
11666 }
11667
11668 int bnxt_restore_pf_fw_resources(struct bnxt *bp)
11669 {
11670         int rc;
11671
11672         ASSERT_RTNL();
11673         bnxt_hwrm_func_qcaps(bp);
11674
11675         if (netif_running(bp->dev))
11676                 __bnxt_close_nic(bp, true, false);
11677
11678         bnxt_ulp_irq_stop(bp);
11679         bnxt_clear_int_mode(bp);
11680         rc = bnxt_init_int_mode(bp);
11681         bnxt_ulp_irq_restart(bp, rc);
11682
11683         if (netif_running(bp->dev)) {
11684                 if (rc)
11685                         dev_close(bp->dev);
11686                 else
11687                         rc = bnxt_open_nic(bp, true, false);
11688         }
11689
11690         return rc;
11691 }
11692
11693 static int bnxt_init_mac_addr(struct bnxt *bp)
11694 {
11695         int rc = 0;
11696
11697         if (BNXT_PF(bp)) {
11698                 memcpy(bp->dev->dev_addr, bp->pf.mac_addr, ETH_ALEN);
11699         } else {
11700 #ifdef CONFIG_BNXT_SRIOV
11701                 struct bnxt_vf_info *vf = &bp->vf;
11702                 bool strict_approval = true;
11703
11704                 if (is_valid_ether_addr(vf->mac_addr)) {
11705                         /* overwrite netdev dev_addr with admin VF MAC */
11706                         memcpy(bp->dev->dev_addr, vf->mac_addr, ETH_ALEN);
11707                         /* Older PF driver or firmware may not approve this
11708                          * correctly.
11709                          */
11710                         strict_approval = false;
11711                 } else {
11712                         eth_hw_addr_random(bp->dev);
11713                 }
11714                 rc = bnxt_approve_mac(bp, bp->dev->dev_addr, strict_approval);
11715 #endif
11716         }
11717         return rc;
11718 }
11719
11720 static int bnxt_pcie_dsn_get(struct bnxt *bp, u8 dsn[])
11721 {
11722         struct pci_dev *pdev = bp->pdev;
11723         int pos = pci_find_ext_capability(pdev, PCI_EXT_CAP_ID_DSN);
11724         u32 dw;
11725
11726         if (!pos) {
11727                 netdev_info(bp->dev, "Unable do read adapter's DSN");
11728                 return -EOPNOTSUPP;
11729         }
11730
11731         /* DSN (two dw) is at an offset of 4 from the cap pos */
11732         pos += 4;
11733         pci_read_config_dword(pdev, pos, &dw);
11734         put_unaligned_le32(dw, &dsn[0]);
11735         pci_read_config_dword(pdev, pos + 4, &dw);
11736         put_unaligned_le32(dw, &dsn[4]);
11737         return 0;
11738 }
11739
11740 static int bnxt_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
11741 {
11742         static int version_printed;
11743         struct net_device *dev;
11744         struct bnxt *bp;
11745         int rc, max_irqs;
11746
11747         if (pci_is_bridge(pdev))
11748                 return -ENODEV;
11749
11750         if (version_printed++ == 0)
11751                 pr_info("%s", version);
11752
11753         max_irqs = bnxt_get_max_irq(pdev);
11754         dev = alloc_etherdev_mq(sizeof(*bp), max_irqs);
11755         if (!dev)
11756                 return -ENOMEM;
11757
11758         bp = netdev_priv(dev);
11759         bnxt_set_max_func_irqs(bp, max_irqs);
11760
11761         if (bnxt_vf_pciid(ent->driver_data))
11762                 bp->flags |= BNXT_FLAG_VF;
11763
11764         if (pdev->msix_cap)
11765                 bp->flags |= BNXT_FLAG_MSIX_CAP;
11766
11767         rc = bnxt_init_board(pdev, dev);
11768         if (rc < 0)
11769                 goto init_err_free;
11770
11771         dev->netdev_ops = &bnxt_netdev_ops;
11772         dev->watchdog_timeo = BNXT_TX_TIMEOUT;
11773         dev->ethtool_ops = &bnxt_ethtool_ops;
11774         pci_set_drvdata(pdev, dev);
11775
11776         rc = bnxt_alloc_hwrm_resources(bp);
11777         if (rc)
11778                 goto init_err_pci_clean;
11779
11780         mutex_init(&bp->hwrm_cmd_lock);
11781         mutex_init(&bp->link_lock);
11782
11783         rc = bnxt_fw_init_one_p1(bp);
11784         if (rc)
11785                 goto init_err_pci_clean;
11786
11787         if (BNXT_CHIP_P5(bp))
11788                 bp->flags |= BNXT_FLAG_CHIP_P5;
11789
11790         rc = bnxt_fw_init_one_p2(bp);
11791         if (rc)
11792                 goto init_err_pci_clean;
11793
11794         dev->hw_features = NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM | NETIF_F_SG |
11795                            NETIF_F_TSO | NETIF_F_TSO6 |
11796                            NETIF_F_GSO_UDP_TUNNEL | NETIF_F_GSO_GRE |
11797                            NETIF_F_GSO_IPXIP4 |
11798                            NETIF_F_GSO_UDP_TUNNEL_CSUM | NETIF_F_GSO_GRE_CSUM |
11799                            NETIF_F_GSO_PARTIAL | NETIF_F_RXHASH |
11800                            NETIF_F_RXCSUM | NETIF_F_GRO;
11801
11802         if (BNXT_SUPPORTS_TPA(bp))
11803                 dev->hw_features |= NETIF_F_LRO;
11804
11805         dev->hw_enc_features =
11806                         NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM | NETIF_F_SG |
11807                         NETIF_F_TSO | NETIF_F_TSO6 |
11808                         NETIF_F_GSO_UDP_TUNNEL | NETIF_F_GSO_GRE |
11809                         NETIF_F_GSO_UDP_TUNNEL_CSUM | NETIF_F_GSO_GRE_CSUM |
11810                         NETIF_F_GSO_IPXIP4 | NETIF_F_GSO_PARTIAL;
11811         dev->gso_partial_features = NETIF_F_GSO_UDP_TUNNEL_CSUM |
11812                                     NETIF_F_GSO_GRE_CSUM;
11813         dev->vlan_features = dev->hw_features | NETIF_F_HIGHDMA;
11814         dev->hw_features |= NETIF_F_HW_VLAN_CTAG_RX | NETIF_F_HW_VLAN_CTAG_TX |
11815                             NETIF_F_HW_VLAN_STAG_RX | NETIF_F_HW_VLAN_STAG_TX;
11816         if (BNXT_SUPPORTS_TPA(bp))
11817                 dev->hw_features |= NETIF_F_GRO_HW;
11818         dev->features |= dev->hw_features | NETIF_F_HIGHDMA;
11819         if (dev->features & NETIF_F_GRO_HW)
11820                 dev->features &= ~NETIF_F_LRO;
11821         dev->priv_flags |= IFF_UNICAST_FLT;
11822
11823 #ifdef CONFIG_BNXT_SRIOV
11824         init_waitqueue_head(&bp->sriov_cfg_wait);
11825         mutex_init(&bp->sriov_lock);
11826 #endif
11827         if (BNXT_SUPPORTS_TPA(bp)) {
11828                 bp->gro_func = bnxt_gro_func_5730x;
11829                 if (BNXT_CHIP_P4(bp))
11830                         bp->gro_func = bnxt_gro_func_5731x;
11831                 else if (BNXT_CHIP_P5(bp))
11832                         bp->gro_func = bnxt_gro_func_5750x;
11833         }
11834         if (!BNXT_CHIP_P4_PLUS(bp))
11835                 bp->flags |= BNXT_FLAG_DOUBLE_DB;
11836
11837         bp->ulp_probe = bnxt_ulp_probe;
11838
11839         rc = bnxt_init_mac_addr(bp);
11840         if (rc) {
11841                 dev_err(&pdev->dev, "Unable to initialize mac address.\n");
11842                 rc = -EADDRNOTAVAIL;
11843                 goto init_err_pci_clean;
11844         }
11845
11846         if (BNXT_PF(bp)) {
11847                 /* Read the adapter's DSN to use as the eswitch switch_id */
11848                 rc = bnxt_pcie_dsn_get(bp, bp->switch_id);
11849                 if (rc)
11850                         goto init_err_pci_clean;
11851         }
11852
11853         /* MTU range: 60 - FW defined max */
11854         dev->min_mtu = ETH_ZLEN;
11855         dev->max_mtu = bp->max_mtu;
11856
11857         rc = bnxt_probe_phy(bp, true);
11858         if (rc)
11859                 goto init_err_pci_clean;
11860
11861         bnxt_set_rx_skb_mode(bp, false);
11862         bnxt_set_tpa_flags(bp);
11863         bnxt_set_ring_params(bp);
11864         rc = bnxt_set_dflt_rings(bp, true);
11865         if (rc) {
11866                 netdev_err(bp->dev, "Not enough rings available.\n");
11867                 rc = -ENOMEM;
11868                 goto init_err_pci_clean;
11869         }
11870
11871         bnxt_fw_init_one_p3(bp);
11872
11873         if (dev->hw_features & NETIF_F_HW_VLAN_CTAG_RX)
11874                 bp->flags |= BNXT_FLAG_STRIP_VLAN;
11875
11876         rc = bnxt_init_int_mode(bp);
11877         if (rc)
11878                 goto init_err_pci_clean;
11879
11880         /* No TC has been set yet and rings may have been trimmed due to
11881          * limited MSIX, so we re-initialize the TX rings per TC.
11882          */
11883         bp->tx_nr_rings_per_tc = bp->tx_nr_rings;
11884
11885         if (BNXT_PF(bp)) {
11886                 if (!bnxt_pf_wq) {
11887                         bnxt_pf_wq =
11888                                 create_singlethread_workqueue("bnxt_pf_wq");
11889                         if (!bnxt_pf_wq) {
11890                                 dev_err(&pdev->dev, "Unable to create workqueue.\n");
11891                                 goto init_err_pci_clean;
11892                         }
11893                 }
11894                 bnxt_init_tc(bp);
11895         }
11896
11897         rc = register_netdev(dev);
11898         if (rc)
11899                 goto init_err_cleanup_tc;
11900
11901         bnxt_dl_register(bp);
11902         bnxt_dl_fw_reporters_create(bp);
11903
11904         netdev_info(dev, "%s found at mem %lx, node addr %pM\n",
11905                     board_info[ent->driver_data].name,
11906                     (long)pci_resource_start(pdev, 0), dev->dev_addr);
11907         pcie_print_link_status(pdev);
11908
11909         return 0;
11910
11911 init_err_cleanup_tc:
11912         bnxt_shutdown_tc(bp);
11913         bnxt_clear_int_mode(bp);
11914
11915 init_err_pci_clean:
11916         bnxt_hwrm_func_drv_unrgtr(bp);
11917         bnxt_free_hwrm_short_cmd_req(bp);
11918         bnxt_free_hwrm_resources(bp);
11919         bnxt_free_ctx_mem(bp);
11920         kfree(bp->ctx);
11921         bp->ctx = NULL;
11922         kfree(bp->fw_health);
11923         bp->fw_health = NULL;
11924         bnxt_cleanup_pci(bp);
11925
11926 init_err_free:
11927         free_netdev(dev);
11928         return rc;
11929 }
11930
11931 static void bnxt_shutdown(struct pci_dev *pdev)
11932 {
11933         struct net_device *dev = pci_get_drvdata(pdev);
11934         struct bnxt *bp;
11935
11936         if (!dev)
11937                 return;
11938
11939         rtnl_lock();
11940         bp = netdev_priv(dev);
11941         if (!bp)
11942                 goto shutdown_exit;
11943
11944         if (netif_running(dev))
11945                 dev_close(dev);
11946
11947         bnxt_ulp_shutdown(bp);
11948
11949         if (system_state == SYSTEM_POWER_OFF) {
11950                 bnxt_clear_int_mode(bp);
11951                 pci_disable_device(pdev);
11952                 pci_wake_from_d3(pdev, bp->wol);
11953                 pci_set_power_state(pdev, PCI_D3hot);
11954         }
11955
11956 shutdown_exit:
11957         rtnl_unlock();
11958 }
11959
11960 #ifdef CONFIG_PM_SLEEP
11961 static int bnxt_suspend(struct device *device)
11962 {
11963         struct net_device *dev = dev_get_drvdata(device);
11964         struct bnxt *bp = netdev_priv(dev);
11965         int rc = 0;
11966
11967         rtnl_lock();
11968         bnxt_ulp_stop(bp);
11969         if (netif_running(dev)) {
11970                 netif_device_detach(dev);
11971                 rc = bnxt_close(dev);
11972         }
11973         bnxt_hwrm_func_drv_unrgtr(bp);
11974         pci_disable_device(bp->pdev);
11975         bnxt_free_ctx_mem(bp);
11976         kfree(bp->ctx);
11977         bp->ctx = NULL;
11978         rtnl_unlock();
11979         return rc;
11980 }
11981
11982 static int bnxt_resume(struct device *device)
11983 {
11984         struct net_device *dev = dev_get_drvdata(device);
11985         struct bnxt *bp = netdev_priv(dev);
11986         int rc = 0;
11987
11988         rtnl_lock();
11989         rc = pci_enable_device(bp->pdev);
11990         if (rc) {
11991                 netdev_err(dev, "Cannot re-enable PCI device during resume, err = %d\n",
11992                            rc);
11993                 goto resume_exit;
11994         }
11995         pci_set_master(bp->pdev);
11996         if (bnxt_hwrm_ver_get(bp)) {
11997                 rc = -ENODEV;
11998                 goto resume_exit;
11999         }
12000         rc = bnxt_hwrm_func_reset(bp);
12001         if (rc) {
12002                 rc = -EBUSY;
12003                 goto resume_exit;
12004         }
12005
12006         if (bnxt_hwrm_queue_qportcfg(bp)) {
12007                 rc = -ENODEV;
12008                 goto resume_exit;
12009         }
12010
12011         if (bp->hwrm_spec_code >= 0x10803) {
12012                 if (bnxt_alloc_ctx_mem(bp)) {
12013                         rc = -ENODEV;
12014                         goto resume_exit;
12015                 }
12016         }
12017         if (BNXT_NEW_RM(bp))
12018                 bnxt_hwrm_func_resc_qcaps(bp, false);
12019
12020         if (bnxt_hwrm_func_drv_rgtr(bp, NULL, 0, false)) {
12021                 rc = -ENODEV;
12022                 goto resume_exit;
12023         }
12024
12025         bnxt_get_wol_settings(bp);
12026         if (netif_running(dev)) {
12027                 rc = bnxt_open(dev);
12028                 if (!rc)
12029                         netif_device_attach(dev);
12030         }
12031
12032 resume_exit:
12033         bnxt_ulp_start(bp, rc);
12034         rtnl_unlock();
12035         return rc;
12036 }
12037
12038 static SIMPLE_DEV_PM_OPS(bnxt_pm_ops, bnxt_suspend, bnxt_resume);
12039 #define BNXT_PM_OPS (&bnxt_pm_ops)
12040
12041 #else
12042
12043 #define BNXT_PM_OPS NULL
12044
12045 #endif /* CONFIG_PM_SLEEP */
12046
12047 /**
12048  * bnxt_io_error_detected - called when PCI error is detected
12049  * @pdev: Pointer to PCI device
12050  * @state: The current pci connection state
12051  *
12052  * This function is called after a PCI bus error affecting
12053  * this device has been detected.
12054  */
12055 static pci_ers_result_t bnxt_io_error_detected(struct pci_dev *pdev,
12056                                                pci_channel_state_t state)
12057 {
12058         struct net_device *netdev = pci_get_drvdata(pdev);
12059         struct bnxt *bp = netdev_priv(netdev);
12060
12061         netdev_info(netdev, "PCI I/O error detected\n");
12062
12063         rtnl_lock();
12064         netif_device_detach(netdev);
12065
12066         bnxt_ulp_stop(bp);
12067
12068         if (state == pci_channel_io_perm_failure) {
12069                 rtnl_unlock();
12070                 return PCI_ERS_RESULT_DISCONNECT;
12071         }
12072
12073         if (netif_running(netdev))
12074                 bnxt_close(netdev);
12075
12076         pci_disable_device(pdev);
12077         rtnl_unlock();
12078
12079         /* Request a slot slot reset. */
12080         return PCI_ERS_RESULT_NEED_RESET;
12081 }
12082
12083 /**
12084  * bnxt_io_slot_reset - called after the pci bus has been reset.
12085  * @pdev: Pointer to PCI device
12086  *
12087  * Restart the card from scratch, as if from a cold-boot.
12088  * At this point, the card has exprienced a hard reset,
12089  * followed by fixups by BIOS, and has its config space
12090  * set up identically to what it was at cold boot.
12091  */
12092 static pci_ers_result_t bnxt_io_slot_reset(struct pci_dev *pdev)
12093 {
12094         struct net_device *netdev = pci_get_drvdata(pdev);
12095         struct bnxt *bp = netdev_priv(netdev);
12096         int err = 0;
12097         pci_ers_result_t result = PCI_ERS_RESULT_DISCONNECT;
12098
12099         netdev_info(bp->dev, "PCI Slot Reset\n");
12100
12101         rtnl_lock();
12102
12103         if (pci_enable_device(pdev)) {
12104                 dev_err(&pdev->dev,
12105                         "Cannot re-enable PCI device after reset.\n");
12106         } else {
12107                 pci_set_master(pdev);
12108
12109                 err = bnxt_hwrm_func_reset(bp);
12110                 if (!err && netif_running(netdev))
12111                         err = bnxt_open(netdev);
12112
12113                 if (!err)
12114                         result = PCI_ERS_RESULT_RECOVERED;
12115                 bnxt_ulp_start(bp, err);
12116         }
12117
12118         if (result != PCI_ERS_RESULT_RECOVERED && netif_running(netdev))
12119                 dev_close(netdev);
12120
12121         rtnl_unlock();
12122
12123         return PCI_ERS_RESULT_RECOVERED;
12124 }
12125
12126 /**
12127  * bnxt_io_resume - called when traffic can start flowing again.
12128  * @pdev: Pointer to PCI device
12129  *
12130  * This callback is called when the error recovery driver tells
12131  * us that its OK to resume normal operation.
12132  */
12133 static void bnxt_io_resume(struct pci_dev *pdev)
12134 {
12135         struct net_device *netdev = pci_get_drvdata(pdev);
12136
12137         rtnl_lock();
12138
12139         netif_device_attach(netdev);
12140
12141         rtnl_unlock();
12142 }
12143
12144 static const struct pci_error_handlers bnxt_err_handler = {
12145         .error_detected = bnxt_io_error_detected,
12146         .slot_reset     = bnxt_io_slot_reset,
12147         .resume         = bnxt_io_resume
12148 };
12149
12150 static struct pci_driver bnxt_pci_driver = {
12151         .name           = DRV_MODULE_NAME,
12152         .id_table       = bnxt_pci_tbl,
12153         .probe          = bnxt_init_one,
12154         .remove         = bnxt_remove_one,
12155         .shutdown       = bnxt_shutdown,
12156         .driver.pm      = BNXT_PM_OPS,
12157         .err_handler    = &bnxt_err_handler,
12158 #if defined(CONFIG_BNXT_SRIOV)
12159         .sriov_configure = bnxt_sriov_configure,
12160 #endif
12161 };
12162
12163 static int __init bnxt_init(void)
12164 {
12165         bnxt_debug_init();
12166         return pci_register_driver(&bnxt_pci_driver);
12167 }
12168
12169 static void __exit bnxt_exit(void)
12170 {
12171         pci_unregister_driver(&bnxt_pci_driver);
12172         if (bnxt_pf_wq)
12173                 destroy_workqueue(bnxt_pf_wq);
12174         bnxt_debug_exit();
12175 }
12176
12177 module_init(bnxt_init);
12178 module_exit(bnxt_exit);