net: enetc: force the RGMII speed and duplex instead of operating in inband mode
[linux-2.6-microblaze.git] / drivers / net / ethernet / freescale / enetc / enetc_pf.c
1 // SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
2 /* Copyright 2017-2019 NXP */
3
4 #include <linux/mdio.h>
5 #include <linux/module.h>
6 #include <linux/fsl/enetc_mdio.h>
7 #include <linux/of_mdio.h>
8 #include <linux/of_net.h>
9 #include "enetc_pf.h"
10
11 #define ENETC_DRV_NAME_STR "ENETC PF driver"
12
13 static void enetc_pf_get_primary_mac_addr(struct enetc_hw *hw, int si, u8 *addr)
14 {
15         u32 upper = __raw_readl(hw->port + ENETC_PSIPMAR0(si));
16         u16 lower = __raw_readw(hw->port + ENETC_PSIPMAR1(si));
17
18         *(u32 *)addr = upper;
19         *(u16 *)(addr + 4) = lower;
20 }
21
22 static void enetc_pf_set_primary_mac_addr(struct enetc_hw *hw, int si,
23                                           const u8 *addr)
24 {
25         u32 upper = *(const u32 *)addr;
26         u16 lower = *(const u16 *)(addr + 4);
27
28         __raw_writel(upper, hw->port + ENETC_PSIPMAR0(si));
29         __raw_writew(lower, hw->port + ENETC_PSIPMAR1(si));
30 }
31
32 static int enetc_pf_set_mac_addr(struct net_device *ndev, void *addr)
33 {
34         struct enetc_ndev_priv *priv = netdev_priv(ndev);
35         struct sockaddr *saddr = addr;
36
37         if (!is_valid_ether_addr(saddr->sa_data))
38                 return -EADDRNOTAVAIL;
39
40         memcpy(ndev->dev_addr, saddr->sa_data, ndev->addr_len);
41         enetc_pf_set_primary_mac_addr(&priv->si->hw, 0, saddr->sa_data);
42
43         return 0;
44 }
45
46 static void enetc_set_vlan_promisc(struct enetc_hw *hw, char si_map)
47 {
48         u32 val = enetc_port_rd(hw, ENETC_PSIPVMR);
49
50         val &= ~ENETC_PSIPVMR_SET_VP(ENETC_VLAN_PROMISC_MAP_ALL);
51         enetc_port_wr(hw, ENETC_PSIPVMR, ENETC_PSIPVMR_SET_VP(si_map) | val);
52 }
53
54 static void enetc_enable_si_vlan_promisc(struct enetc_pf *pf, int si_idx)
55 {
56         pf->vlan_promisc_simap |= BIT(si_idx);
57         enetc_set_vlan_promisc(&pf->si->hw, pf->vlan_promisc_simap);
58 }
59
60 static void enetc_disable_si_vlan_promisc(struct enetc_pf *pf, int si_idx)
61 {
62         pf->vlan_promisc_simap &= ~BIT(si_idx);
63         enetc_set_vlan_promisc(&pf->si->hw, pf->vlan_promisc_simap);
64 }
65
66 static void enetc_set_isol_vlan(struct enetc_hw *hw, int si, u16 vlan, u8 qos)
67 {
68         u32 val = 0;
69
70         if (vlan)
71                 val = ENETC_PSIVLAN_EN | ENETC_PSIVLAN_SET_QOS(qos) | vlan;
72
73         enetc_port_wr(hw, ENETC_PSIVLANR(si), val);
74 }
75
76 static int enetc_mac_addr_hash_idx(const u8 *addr)
77 {
78         u64 fold = __swab64(ether_addr_to_u64(addr)) >> 16;
79         u64 mask = 0;
80         int res = 0;
81         int i;
82
83         for (i = 0; i < 8; i++)
84                 mask |= BIT_ULL(i * 6);
85
86         for (i = 0; i < 6; i++)
87                 res |= (hweight64(fold & (mask << i)) & 0x1) << i;
88
89         return res;
90 }
91
92 static void enetc_reset_mac_addr_filter(struct enetc_mac_filter *filter)
93 {
94         filter->mac_addr_cnt = 0;
95
96         bitmap_zero(filter->mac_hash_table,
97                     ENETC_MADDR_HASH_TBL_SZ);
98 }
99
100 static void enetc_add_mac_addr_em_filter(struct enetc_mac_filter *filter,
101                                          const unsigned char *addr)
102 {
103         /* add exact match addr */
104         ether_addr_copy(filter->mac_addr, addr);
105         filter->mac_addr_cnt++;
106 }
107
108 static void enetc_add_mac_addr_ht_filter(struct enetc_mac_filter *filter,
109                                          const unsigned char *addr)
110 {
111         int idx = enetc_mac_addr_hash_idx(addr);
112
113         /* add hash table entry */
114         __set_bit(idx, filter->mac_hash_table);
115         filter->mac_addr_cnt++;
116 }
117
118 static void enetc_clear_mac_ht_flt(struct enetc_si *si, int si_idx, int type)
119 {
120         bool err = si->errata & ENETC_ERR_UCMCSWP;
121
122         if (type == UC) {
123                 enetc_port_wr(&si->hw, ENETC_PSIUMHFR0(si_idx, err), 0);
124                 enetc_port_wr(&si->hw, ENETC_PSIUMHFR1(si_idx), 0);
125         } else { /* MC */
126                 enetc_port_wr(&si->hw, ENETC_PSIMMHFR0(si_idx, err), 0);
127                 enetc_port_wr(&si->hw, ENETC_PSIMMHFR1(si_idx), 0);
128         }
129 }
130
131 static void enetc_set_mac_ht_flt(struct enetc_si *si, int si_idx, int type,
132                                  u32 *hash)
133 {
134         bool err = si->errata & ENETC_ERR_UCMCSWP;
135
136         if (type == UC) {
137                 enetc_port_wr(&si->hw, ENETC_PSIUMHFR0(si_idx, err), *hash);
138                 enetc_port_wr(&si->hw, ENETC_PSIUMHFR1(si_idx), *(hash + 1));
139         } else { /* MC */
140                 enetc_port_wr(&si->hw, ENETC_PSIMMHFR0(si_idx, err), *hash);
141                 enetc_port_wr(&si->hw, ENETC_PSIMMHFR1(si_idx), *(hash + 1));
142         }
143 }
144
145 static void enetc_sync_mac_filters(struct enetc_pf *pf)
146 {
147         struct enetc_mac_filter *f = pf->mac_filter;
148         struct enetc_si *si = pf->si;
149         int i, pos;
150
151         pos = EMETC_MAC_ADDR_FILT_RES;
152
153         for (i = 0; i < MADDR_TYPE; i++, f++) {
154                 bool em = (f->mac_addr_cnt == 1) && (i == UC);
155                 bool clear = !f->mac_addr_cnt;
156
157                 if (clear) {
158                         if (i == UC)
159                                 enetc_clear_mac_flt_entry(si, pos);
160
161                         enetc_clear_mac_ht_flt(si, 0, i);
162                         continue;
163                 }
164
165                 /* exact match filter */
166                 if (em) {
167                         int err;
168
169                         enetc_clear_mac_ht_flt(si, 0, UC);
170
171                         err = enetc_set_mac_flt_entry(si, pos, f->mac_addr,
172                                                       BIT(0));
173                         if (!err)
174                                 continue;
175
176                         /* fallback to HT filtering */
177                         dev_warn(&si->pdev->dev, "fallback to HT filt (%d)\n",
178                                  err);
179                 }
180
181                 /* hash table filter, clear EM filter for UC entries */
182                 if (i == UC)
183                         enetc_clear_mac_flt_entry(si, pos);
184
185                 enetc_set_mac_ht_flt(si, 0, i, (u32 *)f->mac_hash_table);
186         }
187 }
188
189 static void enetc_pf_set_rx_mode(struct net_device *ndev)
190 {
191         struct enetc_ndev_priv *priv = netdev_priv(ndev);
192         struct enetc_pf *pf = enetc_si_priv(priv->si);
193         struct enetc_hw *hw = &priv->si->hw;
194         bool uprom = false, mprom = false;
195         struct enetc_mac_filter *filter;
196         struct netdev_hw_addr *ha;
197         u32 psipmr = 0;
198         bool em;
199
200         if (ndev->flags & IFF_PROMISC) {
201                 /* enable promisc mode for SI0 (PF) */
202                 psipmr = ENETC_PSIPMR_SET_UP(0) | ENETC_PSIPMR_SET_MP(0);
203                 uprom = true;
204                 mprom = true;
205         } else if (ndev->flags & IFF_ALLMULTI) {
206                 /* enable multi cast promisc mode for SI0 (PF) */
207                 psipmr = ENETC_PSIPMR_SET_MP(0);
208                 mprom = true;
209         }
210
211         /* first 2 filter entries belong to PF */
212         if (!uprom) {
213                 /* Update unicast filters */
214                 filter = &pf->mac_filter[UC];
215                 enetc_reset_mac_addr_filter(filter);
216
217                 em = (netdev_uc_count(ndev) == 1);
218                 netdev_for_each_uc_addr(ha, ndev) {
219                         if (em) {
220                                 enetc_add_mac_addr_em_filter(filter, ha->addr);
221                                 break;
222                         }
223
224                         enetc_add_mac_addr_ht_filter(filter, ha->addr);
225                 }
226         }
227
228         if (!mprom) {
229                 /* Update multicast filters */
230                 filter = &pf->mac_filter[MC];
231                 enetc_reset_mac_addr_filter(filter);
232
233                 netdev_for_each_mc_addr(ha, ndev) {
234                         if (!is_multicast_ether_addr(ha->addr))
235                                 continue;
236
237                         enetc_add_mac_addr_ht_filter(filter, ha->addr);
238                 }
239         }
240
241         if (!uprom || !mprom)
242                 /* update PF entries */
243                 enetc_sync_mac_filters(pf);
244
245         psipmr |= enetc_port_rd(hw, ENETC_PSIPMR) &
246                   ~(ENETC_PSIPMR_SET_UP(0) | ENETC_PSIPMR_SET_MP(0));
247         enetc_port_wr(hw, ENETC_PSIPMR, psipmr);
248 }
249
250 static void enetc_set_vlan_ht_filter(struct enetc_hw *hw, int si_idx,
251                                      u32 *hash)
252 {
253         enetc_port_wr(hw, ENETC_PSIVHFR0(si_idx), *hash);
254         enetc_port_wr(hw, ENETC_PSIVHFR1(si_idx), *(hash + 1));
255 }
256
257 static int enetc_vid_hash_idx(unsigned int vid)
258 {
259         int res = 0;
260         int i;
261
262         for (i = 0; i < 6; i++)
263                 res |= (hweight8(vid & (BIT(i) | BIT(i + 6))) & 0x1) << i;
264
265         return res;
266 }
267
268 static void enetc_sync_vlan_ht_filter(struct enetc_pf *pf, bool rehash)
269 {
270         int i;
271
272         if (rehash) {
273                 bitmap_zero(pf->vlan_ht_filter, ENETC_VLAN_HT_SIZE);
274
275                 for_each_set_bit(i, pf->active_vlans, VLAN_N_VID) {
276                         int hidx = enetc_vid_hash_idx(i);
277
278                         __set_bit(hidx, pf->vlan_ht_filter);
279                 }
280         }
281
282         enetc_set_vlan_ht_filter(&pf->si->hw, 0, (u32 *)pf->vlan_ht_filter);
283 }
284
285 static int enetc_vlan_rx_add_vid(struct net_device *ndev, __be16 prot, u16 vid)
286 {
287         struct enetc_ndev_priv *priv = netdev_priv(ndev);
288         struct enetc_pf *pf = enetc_si_priv(priv->si);
289         int idx;
290
291         __set_bit(vid, pf->active_vlans);
292
293         idx = enetc_vid_hash_idx(vid);
294         if (!__test_and_set_bit(idx, pf->vlan_ht_filter))
295                 enetc_sync_vlan_ht_filter(pf, false);
296
297         return 0;
298 }
299
300 static int enetc_vlan_rx_del_vid(struct net_device *ndev, __be16 prot, u16 vid)
301 {
302         struct enetc_ndev_priv *priv = netdev_priv(ndev);
303         struct enetc_pf *pf = enetc_si_priv(priv->si);
304
305         __clear_bit(vid, pf->active_vlans);
306         enetc_sync_vlan_ht_filter(pf, true);
307
308         return 0;
309 }
310
311 static void enetc_set_loopback(struct net_device *ndev, bool en)
312 {
313         struct enetc_ndev_priv *priv = netdev_priv(ndev);
314         struct enetc_hw *hw = &priv->si->hw;
315         u32 reg;
316
317         reg = enetc_port_rd(hw, ENETC_PM0_IF_MODE);
318         if (reg & ENETC_PM0_IFM_RG) {
319                 /* RGMII mode */
320                 reg = (reg & ~ENETC_PM0_IFM_RLP) |
321                       (en ? ENETC_PM0_IFM_RLP : 0);
322                 enetc_port_wr(hw, ENETC_PM0_IF_MODE, reg);
323         } else {
324                 /* assume SGMII mode */
325                 reg = enetc_port_rd(hw, ENETC_PM0_CMD_CFG);
326                 reg = (reg & ~ENETC_PM0_CMD_XGLP) |
327                       (en ? ENETC_PM0_CMD_XGLP : 0);
328                 reg = (reg & ~ENETC_PM0_CMD_PHY_TX_EN) |
329                       (en ? ENETC_PM0_CMD_PHY_TX_EN : 0);
330                 enetc_port_wr(hw, ENETC_PM0_CMD_CFG, reg);
331                 enetc_port_wr(hw, ENETC_PM1_CMD_CFG, reg);
332         }
333 }
334
335 static int enetc_pf_set_vf_mac(struct net_device *ndev, int vf, u8 *mac)
336 {
337         struct enetc_ndev_priv *priv = netdev_priv(ndev);
338         struct enetc_pf *pf = enetc_si_priv(priv->si);
339         struct enetc_vf_state *vf_state;
340
341         if (vf >= pf->total_vfs)
342                 return -EINVAL;
343
344         if (!is_valid_ether_addr(mac))
345                 return -EADDRNOTAVAIL;
346
347         vf_state = &pf->vf_state[vf];
348         vf_state->flags |= ENETC_VF_FLAG_PF_SET_MAC;
349         enetc_pf_set_primary_mac_addr(&priv->si->hw, vf + 1, mac);
350         return 0;
351 }
352
353 static int enetc_pf_set_vf_vlan(struct net_device *ndev, int vf, u16 vlan,
354                                 u8 qos, __be16 proto)
355 {
356         struct enetc_ndev_priv *priv = netdev_priv(ndev);
357         struct enetc_pf *pf = enetc_si_priv(priv->si);
358
359         if (priv->si->errata & ENETC_ERR_VLAN_ISOL)
360                 return -EOPNOTSUPP;
361
362         if (vf >= pf->total_vfs)
363                 return -EINVAL;
364
365         if (proto != htons(ETH_P_8021Q))
366                 /* only C-tags supported for now */
367                 return -EPROTONOSUPPORT;
368
369         enetc_set_isol_vlan(&priv->si->hw, vf + 1, vlan, qos);
370         return 0;
371 }
372
373 static int enetc_pf_set_vf_spoofchk(struct net_device *ndev, int vf, bool en)
374 {
375         struct enetc_ndev_priv *priv = netdev_priv(ndev);
376         struct enetc_pf *pf = enetc_si_priv(priv->si);
377         u32 cfgr;
378
379         if (vf >= pf->total_vfs)
380                 return -EINVAL;
381
382         cfgr = enetc_port_rd(&priv->si->hw, ENETC_PSICFGR0(vf + 1));
383         cfgr = (cfgr & ~ENETC_PSICFGR0_ASE) | (en ? ENETC_PSICFGR0_ASE : 0);
384         enetc_port_wr(&priv->si->hw, ENETC_PSICFGR0(vf + 1), cfgr);
385
386         return 0;
387 }
388
389 static void enetc_port_setup_primary_mac_address(struct enetc_si *si)
390 {
391         unsigned char mac_addr[MAX_ADDR_LEN];
392         struct enetc_pf *pf = enetc_si_priv(si);
393         struct enetc_hw *hw = &si->hw;
394         int i;
395
396         /* check MAC addresses for PF and all VFs, if any is 0 set it ro rand */
397         for (i = 0; i < pf->total_vfs + 1; i++) {
398                 enetc_pf_get_primary_mac_addr(hw, i, mac_addr);
399                 if (!is_zero_ether_addr(mac_addr))
400                         continue;
401                 eth_random_addr(mac_addr);
402                 dev_info(&si->pdev->dev, "no MAC address specified for SI%d, using %pM\n",
403                          i, mac_addr);
404                 enetc_pf_set_primary_mac_addr(hw, i, mac_addr);
405         }
406 }
407
408 static void enetc_port_assign_rfs_entries(struct enetc_si *si)
409 {
410         struct enetc_pf *pf = enetc_si_priv(si);
411         struct enetc_hw *hw = &si->hw;
412         int num_entries, vf_entries, i;
413         u32 val;
414
415         /* split RFS entries between functions */
416         val = enetc_port_rd(hw, ENETC_PRFSCAPR);
417         num_entries = ENETC_PRFSCAPR_GET_NUM_RFS(val);
418         vf_entries = num_entries / (pf->total_vfs + 1);
419
420         for (i = 0; i < pf->total_vfs; i++)
421                 enetc_port_wr(hw, ENETC_PSIRFSCFGR(i + 1), vf_entries);
422         enetc_port_wr(hw, ENETC_PSIRFSCFGR(0),
423                       num_entries - vf_entries * pf->total_vfs);
424
425         /* enable RFS on port */
426         enetc_port_wr(hw, ENETC_PRFSMR, ENETC_PRFSMR_RFSE);
427 }
428
429 static void enetc_port_si_configure(struct enetc_si *si)
430 {
431         struct enetc_pf *pf = enetc_si_priv(si);
432         struct enetc_hw *hw = &si->hw;
433         int num_rings, i;
434         u32 val;
435
436         val = enetc_port_rd(hw, ENETC_PCAPR0);
437         num_rings = min(ENETC_PCAPR0_RXBDR(val), ENETC_PCAPR0_TXBDR(val));
438
439         val = ENETC_PSICFGR0_SET_TXBDR(ENETC_PF_NUM_RINGS);
440         val |= ENETC_PSICFGR0_SET_RXBDR(ENETC_PF_NUM_RINGS);
441
442         if (unlikely(num_rings < ENETC_PF_NUM_RINGS)) {
443                 val = ENETC_PSICFGR0_SET_TXBDR(num_rings);
444                 val |= ENETC_PSICFGR0_SET_RXBDR(num_rings);
445
446                 dev_warn(&si->pdev->dev, "Found %d rings, expected %d!\n",
447                          num_rings, ENETC_PF_NUM_RINGS);
448
449                 num_rings = 0;
450         }
451
452         /* Add default one-time settings for SI0 (PF) */
453         val |= ENETC_PSICFGR0_SIVC(ENETC_VLAN_TYPE_C | ENETC_VLAN_TYPE_S);
454
455         enetc_port_wr(hw, ENETC_PSICFGR0(0), val);
456
457         if (num_rings)
458                 num_rings -= ENETC_PF_NUM_RINGS;
459
460         /* Configure the SIs for each available VF */
461         val = ENETC_PSICFGR0_SIVC(ENETC_VLAN_TYPE_C | ENETC_VLAN_TYPE_S);
462         val |= ENETC_PSICFGR0_VTE | ENETC_PSICFGR0_SIVIE;
463
464         if (num_rings) {
465                 num_rings /= pf->total_vfs;
466                 val |= ENETC_PSICFGR0_SET_TXBDR(num_rings);
467                 val |= ENETC_PSICFGR0_SET_RXBDR(num_rings);
468         }
469
470         for (i = 0; i < pf->total_vfs; i++)
471                 enetc_port_wr(hw, ENETC_PSICFGR0(i + 1), val);
472
473         /* Port level VLAN settings */
474         val = ENETC_PVCLCTR_OVTPIDL(ENETC_VLAN_TYPE_C | ENETC_VLAN_TYPE_S);
475         enetc_port_wr(hw, ENETC_PVCLCTR, val);
476         /* use outer tag for VLAN filtering */
477         enetc_port_wr(hw, ENETC_PSIVLANFMR, ENETC_PSIVLANFMR_VS);
478 }
479
480 static void enetc_configure_port_mac(struct enetc_hw *hw)
481 {
482         enetc_port_wr(hw, ENETC_PM0_MAXFRM,
483                       ENETC_SET_MAXFRM(ENETC_RX_MAXFRM_SIZE));
484
485         enetc_port_wr(hw, ENETC_PTCMSDUR(0), ENETC_MAC_MAXFRM_SIZE);
486         enetc_port_wr(hw, ENETC_PTXMBAR, 2 * ENETC_MAC_MAXFRM_SIZE);
487
488         enetc_port_wr(hw, ENETC_PM0_CMD_CFG, ENETC_PM0_CMD_PHY_TX_EN |
489                       ENETC_PM0_CMD_TXP | ENETC_PM0_PROMISC);
490
491         enetc_port_wr(hw, ENETC_PM1_CMD_CFG, ENETC_PM0_CMD_PHY_TX_EN |
492                       ENETC_PM0_CMD_TXP | ENETC_PM0_PROMISC);
493 }
494
495 static void enetc_mac_config(struct enetc_hw *hw, phy_interface_t phy_mode)
496 {
497         u32 val;
498
499         if (phy_interface_mode_is_rgmii(phy_mode)) {
500                 val = enetc_port_rd(hw, ENETC_PM0_IF_MODE);
501                 val &= ~ENETC_PM0_IFM_EN_AUTO;
502                 val &= ENETC_PM0_IFM_IFMODE_MASK;
503                 val |= ENETC_PM0_IFM_IFMODE_GMII | ENETC_PM0_IFM_RG;
504                 enetc_port_wr(hw, ENETC_PM0_IF_MODE, val);
505         }
506
507         if (phy_mode == PHY_INTERFACE_MODE_USXGMII) {
508                 val = ENETC_PM0_IFM_FULL_DPX | ENETC_PM0_IFM_IFMODE_XGMII;
509                 enetc_port_wr(hw, ENETC_PM0_IF_MODE, val);
510         }
511 }
512
513 static void enetc_mac_enable(struct enetc_hw *hw, bool en)
514 {
515         u32 val = enetc_port_rd(hw, ENETC_PM0_CMD_CFG);
516
517         val &= ~(ENETC_PM0_TX_EN | ENETC_PM0_RX_EN);
518         val |= en ? (ENETC_PM0_TX_EN | ENETC_PM0_RX_EN) : 0;
519
520         enetc_port_wr(hw, ENETC_PM0_CMD_CFG, val);
521         enetc_port_wr(hw, ENETC_PM1_CMD_CFG, val);
522 }
523
524 static void enetc_configure_port_pmac(struct enetc_hw *hw)
525 {
526         u32 temp;
527
528         /* Set pMAC step lock */
529         temp = enetc_port_rd(hw, ENETC_PFPMR);
530         enetc_port_wr(hw, ENETC_PFPMR,
531                       temp | ENETC_PFPMR_PMACE | ENETC_PFPMR_MWLM);
532
533         temp = enetc_port_rd(hw, ENETC_MMCSR);
534         enetc_port_wr(hw, ENETC_MMCSR, temp | ENETC_MMCSR_ME);
535 }
536
537 static void enetc_configure_port(struct enetc_pf *pf)
538 {
539         u8 hash_key[ENETC_RSSHASH_KEY_SIZE];
540         struct enetc_hw *hw = &pf->si->hw;
541
542         enetc_configure_port_pmac(hw);
543
544         enetc_configure_port_mac(hw);
545
546         enetc_port_si_configure(pf->si);
547
548         /* set up hash key */
549         get_random_bytes(hash_key, ENETC_RSSHASH_KEY_SIZE);
550         enetc_set_rss_key(hw, hash_key);
551
552         /* split up RFS entries */
553         enetc_port_assign_rfs_entries(pf->si);
554
555         /* fix-up primary MAC addresses, if not set already */
556         enetc_port_setup_primary_mac_address(pf->si);
557
558         /* enforce VLAN promisc mode for all SIs */
559         pf->vlan_promisc_simap = ENETC_VLAN_PROMISC_MAP_ALL;
560         enetc_set_vlan_promisc(hw, pf->vlan_promisc_simap);
561
562         enetc_port_wr(hw, ENETC_PSIPMR, 0);
563
564         /* enable port */
565         enetc_port_wr(hw, ENETC_PMR, ENETC_PMR_EN);
566 }
567
568 /* Messaging */
569 static u16 enetc_msg_pf_set_vf_primary_mac_addr(struct enetc_pf *pf,
570                                                 int vf_id)
571 {
572         struct enetc_vf_state *vf_state = &pf->vf_state[vf_id];
573         struct enetc_msg_swbd *msg = &pf->rxmsg[vf_id];
574         struct enetc_msg_cmd_set_primary_mac *cmd;
575         struct device *dev = &pf->si->pdev->dev;
576         u16 cmd_id;
577         char *addr;
578
579         cmd = (struct enetc_msg_cmd_set_primary_mac *)msg->vaddr;
580         cmd_id = cmd->header.id;
581         if (cmd_id != ENETC_MSG_CMD_MNG_ADD)
582                 return ENETC_MSG_CMD_STATUS_FAIL;
583
584         addr = cmd->mac.sa_data;
585         if (vf_state->flags & ENETC_VF_FLAG_PF_SET_MAC)
586                 dev_warn(dev, "Attempt to override PF set mac addr for VF%d\n",
587                          vf_id);
588         else
589                 enetc_pf_set_primary_mac_addr(&pf->si->hw, vf_id + 1, addr);
590
591         return ENETC_MSG_CMD_STATUS_OK;
592 }
593
594 void enetc_msg_handle_rxmsg(struct enetc_pf *pf, int vf_id, u16 *status)
595 {
596         struct enetc_msg_swbd *msg = &pf->rxmsg[vf_id];
597         struct device *dev = &pf->si->pdev->dev;
598         struct enetc_msg_cmd_header *cmd_hdr;
599         u16 cmd_type;
600
601         *status = ENETC_MSG_CMD_STATUS_OK;
602         cmd_hdr = (struct enetc_msg_cmd_header *)msg->vaddr;
603         cmd_type = cmd_hdr->type;
604
605         switch (cmd_type) {
606         case ENETC_MSG_CMD_MNG_MAC:
607                 *status = enetc_msg_pf_set_vf_primary_mac_addr(pf, vf_id);
608                 break;
609         default:
610                 dev_err(dev, "command not supported (cmd_type: 0x%x)\n",
611                         cmd_type);
612         }
613 }
614
615 #ifdef CONFIG_PCI_IOV
616 static int enetc_sriov_configure(struct pci_dev *pdev, int num_vfs)
617 {
618         struct enetc_si *si = pci_get_drvdata(pdev);
619         struct enetc_pf *pf = enetc_si_priv(si);
620         int err;
621
622         if (!num_vfs) {
623                 enetc_msg_psi_free(pf);
624                 kfree(pf->vf_state);
625                 pf->num_vfs = 0;
626                 pci_disable_sriov(pdev);
627         } else {
628                 pf->num_vfs = num_vfs;
629
630                 pf->vf_state = kcalloc(num_vfs, sizeof(struct enetc_vf_state),
631                                        GFP_KERNEL);
632                 if (!pf->vf_state) {
633                         pf->num_vfs = 0;
634                         return -ENOMEM;
635                 }
636
637                 err = enetc_msg_psi_init(pf);
638                 if (err) {
639                         dev_err(&pdev->dev, "enetc_msg_psi_init (%d)\n", err);
640                         goto err_msg_psi;
641                 }
642
643                 err = pci_enable_sriov(pdev, num_vfs);
644                 if (err) {
645                         dev_err(&pdev->dev, "pci_enable_sriov err %d\n", err);
646                         goto err_en_sriov;
647                 }
648         }
649
650         return num_vfs;
651
652 err_en_sriov:
653         enetc_msg_psi_free(pf);
654 err_msg_psi:
655         kfree(pf->vf_state);
656         pf->num_vfs = 0;
657
658         return err;
659 }
660 #else
661 #define enetc_sriov_configure(pdev, num_vfs)    (void)0
662 #endif
663
664 static int enetc_pf_set_features(struct net_device *ndev,
665                                  netdev_features_t features)
666 {
667         netdev_features_t changed = ndev->features ^ features;
668         struct enetc_ndev_priv *priv = netdev_priv(ndev);
669
670         if (changed & NETIF_F_HW_VLAN_CTAG_FILTER) {
671                 struct enetc_pf *pf = enetc_si_priv(priv->si);
672
673                 if (!!(features & NETIF_F_HW_VLAN_CTAG_FILTER))
674                         enetc_disable_si_vlan_promisc(pf, 0);
675                 else
676                         enetc_enable_si_vlan_promisc(pf, 0);
677         }
678
679         if (changed & NETIF_F_LOOPBACK)
680                 enetc_set_loopback(ndev, !!(features & NETIF_F_LOOPBACK));
681
682         return enetc_set_features(ndev, features);
683 }
684
685 static const struct net_device_ops enetc_ndev_ops = {
686         .ndo_open               = enetc_open,
687         .ndo_stop               = enetc_close,
688         .ndo_start_xmit         = enetc_xmit,
689         .ndo_get_stats          = enetc_get_stats,
690         .ndo_set_mac_address    = enetc_pf_set_mac_addr,
691         .ndo_set_rx_mode        = enetc_pf_set_rx_mode,
692         .ndo_vlan_rx_add_vid    = enetc_vlan_rx_add_vid,
693         .ndo_vlan_rx_kill_vid   = enetc_vlan_rx_del_vid,
694         .ndo_set_vf_mac         = enetc_pf_set_vf_mac,
695         .ndo_set_vf_vlan        = enetc_pf_set_vf_vlan,
696         .ndo_set_vf_spoofchk    = enetc_pf_set_vf_spoofchk,
697         .ndo_set_features       = enetc_pf_set_features,
698         .ndo_do_ioctl           = enetc_ioctl,
699         .ndo_setup_tc           = enetc_setup_tc,
700 };
701
702 static void enetc_pf_netdev_setup(struct enetc_si *si, struct net_device *ndev,
703                                   const struct net_device_ops *ndev_ops)
704 {
705         struct enetc_ndev_priv *priv = netdev_priv(ndev);
706
707         SET_NETDEV_DEV(ndev, &si->pdev->dev);
708         priv->ndev = ndev;
709         priv->si = si;
710         priv->dev = &si->pdev->dev;
711         si->ndev = ndev;
712
713         priv->msg_enable = (NETIF_MSG_WOL << 1) - 1;
714         ndev->netdev_ops = ndev_ops;
715         enetc_set_ethtool_ops(ndev);
716         ndev->watchdog_timeo = 5 * HZ;
717         ndev->max_mtu = ENETC_MAX_MTU;
718
719         ndev->hw_features = NETIF_F_SG | NETIF_F_RXCSUM |
720                             NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_CTAG_RX |
721                             NETIF_F_HW_VLAN_CTAG_FILTER | NETIF_F_LOOPBACK;
722         ndev->features = NETIF_F_HIGHDMA | NETIF_F_SG | NETIF_F_RXCSUM |
723                          NETIF_F_HW_VLAN_CTAG_TX |
724                          NETIF_F_HW_VLAN_CTAG_RX;
725
726         if (si->num_rss)
727                 ndev->hw_features |= NETIF_F_RXHASH;
728
729         ndev->priv_flags |= IFF_UNICAST_FLT;
730
731         if (si->hw_features & ENETC_SI_F_QBV)
732                 priv->active_offloads |= ENETC_F_QBV;
733
734         if (si->hw_features & ENETC_SI_F_PSFP && !enetc_psfp_enable(priv)) {
735                 priv->active_offloads |= ENETC_F_QCI;
736                 ndev->features |= NETIF_F_HW_TC;
737                 ndev->hw_features |= NETIF_F_HW_TC;
738         }
739
740         /* pick up primary MAC address from SI */
741         enetc_get_primary_mac_addr(&si->hw, ndev->dev_addr);
742 }
743
744 static int enetc_mdio_probe(struct enetc_pf *pf, struct device_node *np)
745 {
746         struct device *dev = &pf->si->pdev->dev;
747         struct enetc_mdio_priv *mdio_priv;
748         struct mii_bus *bus;
749         int err;
750
751         bus = devm_mdiobus_alloc_size(dev, sizeof(*mdio_priv));
752         if (!bus)
753                 return -ENOMEM;
754
755         bus->name = "Freescale ENETC MDIO Bus";
756         bus->read = enetc_mdio_read;
757         bus->write = enetc_mdio_write;
758         bus->parent = dev;
759         mdio_priv = bus->priv;
760         mdio_priv->hw = &pf->si->hw;
761         mdio_priv->mdio_base = ENETC_EMDIO_BASE;
762         snprintf(bus->id, MII_BUS_ID_SIZE, "%s", dev_name(dev));
763
764         err = of_mdiobus_register(bus, np);
765         if (err) {
766                 dev_err(dev, "cannot register MDIO bus\n");
767                 return err;
768         }
769
770         pf->mdio = bus;
771
772         return 0;
773 }
774
775 static void enetc_mdio_remove(struct enetc_pf *pf)
776 {
777         if (pf->mdio)
778                 mdiobus_unregister(pf->mdio);
779 }
780
781 static int enetc_imdio_create(struct enetc_pf *pf)
782 {
783         struct device *dev = &pf->si->pdev->dev;
784         struct enetc_mdio_priv *mdio_priv;
785         struct lynx_pcs *pcs_lynx;
786         struct mdio_device *pcs;
787         struct mii_bus *bus;
788         int err;
789
790         bus = mdiobus_alloc_size(sizeof(*mdio_priv));
791         if (!bus)
792                 return -ENOMEM;
793
794         bus->name = "Freescale ENETC internal MDIO Bus";
795         bus->read = enetc_mdio_read;
796         bus->write = enetc_mdio_write;
797         bus->parent = dev;
798         bus->phy_mask = ~0;
799         mdio_priv = bus->priv;
800         mdio_priv->hw = &pf->si->hw;
801         mdio_priv->mdio_base = ENETC_PM_IMDIO_BASE;
802         snprintf(bus->id, MII_BUS_ID_SIZE, "%s-imdio", dev_name(dev));
803
804         err = mdiobus_register(bus);
805         if (err) {
806                 dev_err(dev, "cannot register internal MDIO bus (%d)\n", err);
807                 goto free_mdio_bus;
808         }
809
810         pcs = mdio_device_create(bus, 0);
811         if (IS_ERR(pcs)) {
812                 err = PTR_ERR(pcs);
813                 dev_err(dev, "cannot create pcs (%d)\n", err);
814                 goto unregister_mdiobus;
815         }
816
817         pcs_lynx = lynx_pcs_create(pcs);
818         if (!pcs_lynx) {
819                 mdio_device_free(pcs);
820                 err = -ENOMEM;
821                 dev_err(dev, "cannot create lynx pcs (%d)\n", err);
822                 goto unregister_mdiobus;
823         }
824
825         pf->imdio = bus;
826         pf->pcs = pcs_lynx;
827
828         return 0;
829
830 unregister_mdiobus:
831         mdiobus_unregister(bus);
832 free_mdio_bus:
833         mdiobus_free(bus);
834         return err;
835 }
836
837 static void enetc_imdio_remove(struct enetc_pf *pf)
838 {
839         if (pf->pcs) {
840                 mdio_device_free(pf->pcs->mdio);
841                 lynx_pcs_destroy(pf->pcs);
842         }
843         if (pf->imdio) {
844                 mdiobus_unregister(pf->imdio);
845                 mdiobus_free(pf->imdio);
846         }
847 }
848
849 static bool enetc_port_has_pcs(struct enetc_pf *pf)
850 {
851         return (pf->if_mode == PHY_INTERFACE_MODE_SGMII ||
852                 pf->if_mode == PHY_INTERFACE_MODE_2500BASEX ||
853                 pf->if_mode == PHY_INTERFACE_MODE_USXGMII);
854 }
855
856 static int enetc_mdiobus_create(struct enetc_pf *pf, struct device_node *node)
857 {
858         struct device_node *mdio_np;
859         int err;
860
861         mdio_np = of_get_child_by_name(node, "mdio");
862         if (mdio_np) {
863                 err = enetc_mdio_probe(pf, mdio_np);
864
865                 of_node_put(mdio_np);
866                 if (err)
867                         return err;
868         }
869
870         if (enetc_port_has_pcs(pf)) {
871                 err = enetc_imdio_create(pf);
872                 if (err) {
873                         enetc_mdio_remove(pf);
874                         return err;
875                 }
876         }
877
878         return 0;
879 }
880
881 static void enetc_mdiobus_destroy(struct enetc_pf *pf)
882 {
883         enetc_mdio_remove(pf);
884         enetc_imdio_remove(pf);
885 }
886
887 static void enetc_pl_mac_validate(struct phylink_config *config,
888                                   unsigned long *supported,
889                                   struct phylink_link_state *state)
890 {
891         __ETHTOOL_DECLARE_LINK_MODE_MASK(mask) = { 0, };
892
893         if (state->interface != PHY_INTERFACE_MODE_NA &&
894             state->interface != PHY_INTERFACE_MODE_INTERNAL &&
895             state->interface != PHY_INTERFACE_MODE_SGMII &&
896             state->interface != PHY_INTERFACE_MODE_2500BASEX &&
897             state->interface != PHY_INTERFACE_MODE_USXGMII &&
898             !phy_interface_mode_is_rgmii(state->interface)) {
899                 bitmap_zero(supported, __ETHTOOL_LINK_MODE_MASK_NBITS);
900                 return;
901         }
902
903         phylink_set_port_modes(mask);
904         phylink_set(mask, Autoneg);
905         phylink_set(mask, Pause);
906         phylink_set(mask, Asym_Pause);
907         phylink_set(mask, 10baseT_Half);
908         phylink_set(mask, 10baseT_Full);
909         phylink_set(mask, 100baseT_Half);
910         phylink_set(mask, 100baseT_Full);
911         phylink_set(mask, 100baseT_Half);
912         phylink_set(mask, 1000baseT_Half);
913         phylink_set(mask, 1000baseT_Full);
914
915         if (state->interface == PHY_INTERFACE_MODE_INTERNAL ||
916             state->interface == PHY_INTERFACE_MODE_2500BASEX ||
917             state->interface == PHY_INTERFACE_MODE_USXGMII) {
918                 phylink_set(mask, 2500baseT_Full);
919                 phylink_set(mask, 2500baseX_Full);
920         }
921
922         bitmap_and(supported, supported, mask,
923                    __ETHTOOL_LINK_MODE_MASK_NBITS);
924         bitmap_and(state->advertising, state->advertising, mask,
925                    __ETHTOOL_LINK_MODE_MASK_NBITS);
926 }
927
928 static void enetc_pl_mac_config(struct phylink_config *config,
929                                 unsigned int mode,
930                                 const struct phylink_link_state *state)
931 {
932         struct enetc_pf *pf = phylink_to_enetc_pf(config);
933         struct enetc_ndev_priv *priv;
934
935         enetc_mac_config(&pf->si->hw, state->interface);
936
937         priv = netdev_priv(pf->si->ndev);
938         if (pf->pcs)
939                 phylink_set_pcs(priv->phylink, &pf->pcs->pcs);
940 }
941
942 static void enetc_force_rgmii_mac(struct enetc_hw *hw, int speed, int duplex)
943 {
944         u32 old_val, val;
945
946         old_val = val = enetc_port_rd(hw, ENETC_PM0_IF_MODE);
947
948         if (speed == SPEED_1000) {
949                 val &= ~ENETC_PM0_IFM_SSP_MASK;
950                 val |= ENETC_PM0_IFM_SSP_1000;
951         } else if (speed == SPEED_100) {
952                 val &= ~ENETC_PM0_IFM_SSP_MASK;
953                 val |= ENETC_PM0_IFM_SSP_100;
954         } else if (speed == SPEED_10) {
955                 val &= ~ENETC_PM0_IFM_SSP_MASK;
956                 val |= ENETC_PM0_IFM_SSP_10;
957         }
958
959         if (duplex == DUPLEX_FULL)
960                 val |= ENETC_PM0_IFM_FULL_DPX;
961         else
962                 val &= ~ENETC_PM0_IFM_FULL_DPX;
963
964         if (val == old_val)
965                 return;
966
967         enetc_port_wr(hw, ENETC_PM0_IF_MODE, val);
968 }
969
970 static void enetc_pl_mac_link_up(struct phylink_config *config,
971                                  struct phy_device *phy, unsigned int mode,
972                                  phy_interface_t interface, int speed,
973                                  int duplex, bool tx_pause, bool rx_pause)
974 {
975         struct enetc_pf *pf = phylink_to_enetc_pf(config);
976         struct enetc_ndev_priv *priv;
977
978         priv = netdev_priv(pf->si->ndev);
979         if (priv->active_offloads & ENETC_F_QBV)
980                 enetc_sched_speed_set(priv, speed);
981
982         if (!phylink_autoneg_inband(mode) &&
983             phy_interface_mode_is_rgmii(interface))
984                 enetc_force_rgmii_mac(&pf->si->hw, speed, duplex);
985
986         enetc_mac_enable(&pf->si->hw, true);
987 }
988
989 static void enetc_pl_mac_link_down(struct phylink_config *config,
990                                    unsigned int mode,
991                                    phy_interface_t interface)
992 {
993         struct enetc_pf *pf = phylink_to_enetc_pf(config);
994
995         enetc_mac_enable(&pf->si->hw, false);
996 }
997
998 static const struct phylink_mac_ops enetc_mac_phylink_ops = {
999         .validate = enetc_pl_mac_validate,
1000         .mac_config = enetc_pl_mac_config,
1001         .mac_link_up = enetc_pl_mac_link_up,
1002         .mac_link_down = enetc_pl_mac_link_down,
1003 };
1004
1005 static int enetc_phylink_create(struct enetc_ndev_priv *priv,
1006                                 struct device_node *node)
1007 {
1008         struct enetc_pf *pf = enetc_si_priv(priv->si);
1009         struct phylink *phylink;
1010         int err;
1011
1012         pf->phylink_config.dev = &priv->ndev->dev;
1013         pf->phylink_config.type = PHYLINK_NETDEV;
1014
1015         phylink = phylink_create(&pf->phylink_config, of_fwnode_handle(node),
1016                                  pf->if_mode, &enetc_mac_phylink_ops);
1017         if (IS_ERR(phylink)) {
1018                 err = PTR_ERR(phylink);
1019                 return err;
1020         }
1021
1022         priv->phylink = phylink;
1023
1024         return 0;
1025 }
1026
1027 static void enetc_phylink_destroy(struct enetc_ndev_priv *priv)
1028 {
1029         if (priv->phylink)
1030                 phylink_destroy(priv->phylink);
1031 }
1032
1033 /* Initialize the entire shared memory for the flow steering entries
1034  * of this port (PF + VFs)
1035  */
1036 static int enetc_init_port_rfs_memory(struct enetc_si *si)
1037 {
1038         struct enetc_cmd_rfse rfse = {0};
1039         struct enetc_hw *hw = &si->hw;
1040         int num_rfs, i, err = 0;
1041         u32 val;
1042
1043         val = enetc_port_rd(hw, ENETC_PRFSCAPR);
1044         num_rfs = ENETC_PRFSCAPR_GET_NUM_RFS(val);
1045
1046         for (i = 0; i < num_rfs; i++) {
1047                 err = enetc_set_fs_entry(si, &rfse, i);
1048                 if (err)
1049                         break;
1050         }
1051
1052         return err;
1053 }
1054
1055 static int enetc_init_port_rss_memory(struct enetc_si *si)
1056 {
1057         struct enetc_hw *hw = &si->hw;
1058         int num_rss, err;
1059         int *rss_table;
1060         u32 val;
1061
1062         val = enetc_port_rd(hw, ENETC_PRSSCAPR);
1063         num_rss = ENETC_PRSSCAPR_GET_NUM_RSS(val);
1064         if (!num_rss)
1065                 return 0;
1066
1067         rss_table = kcalloc(num_rss, sizeof(*rss_table), GFP_KERNEL);
1068         if (!rss_table)
1069                 return -ENOMEM;
1070
1071         err = enetc_set_rss_table(si, rss_table, num_rss);
1072
1073         kfree(rss_table);
1074
1075         return err;
1076 }
1077
1078 static void enetc_init_unused_port(struct enetc_si *si)
1079 {
1080         struct device *dev = &si->pdev->dev;
1081         struct enetc_hw *hw = &si->hw;
1082         int err;
1083
1084         si->cbd_ring.bd_count = ENETC_CBDR_DEFAULT_SIZE;
1085         err = enetc_alloc_cbdr(dev, &si->cbd_ring);
1086         if (err)
1087                 return;
1088
1089         enetc_setup_cbdr(hw, &si->cbd_ring);
1090
1091         enetc_init_port_rfs_memory(si);
1092         enetc_init_port_rss_memory(si);
1093
1094         enetc_clear_cbdr(hw);
1095         enetc_free_cbdr(dev, &si->cbd_ring);
1096 }
1097
1098 static int enetc_pf_probe(struct pci_dev *pdev,
1099                           const struct pci_device_id *ent)
1100 {
1101         struct device_node *node = pdev->dev.of_node;
1102         struct enetc_ndev_priv *priv;
1103         struct net_device *ndev;
1104         struct enetc_si *si;
1105         struct enetc_pf *pf;
1106         int err;
1107
1108         err = enetc_pci_probe(pdev, KBUILD_MODNAME, sizeof(*pf));
1109         if (err) {
1110                 dev_err(&pdev->dev, "PCI probing failed\n");
1111                 return err;
1112         }
1113
1114         si = pci_get_drvdata(pdev);
1115         if (!si->hw.port || !si->hw.global) {
1116                 err = -ENODEV;
1117                 dev_err(&pdev->dev, "could not map PF space, probing a VF?\n");
1118                 goto err_map_pf_space;
1119         }
1120
1121         if (node && !of_device_is_available(node)) {
1122                 enetc_init_unused_port(si);
1123                 dev_info(&pdev->dev, "device is disabled, skipping\n");
1124                 err = -ENODEV;
1125                 goto err_device_disabled;
1126         }
1127
1128         pf = enetc_si_priv(si);
1129         pf->si = si;
1130         pf->total_vfs = pci_sriov_get_totalvfs(pdev);
1131
1132         enetc_configure_port(pf);
1133
1134         enetc_get_si_caps(si);
1135
1136         ndev = alloc_etherdev_mq(sizeof(*priv), ENETC_MAX_NUM_TXQS);
1137         if (!ndev) {
1138                 err = -ENOMEM;
1139                 dev_err(&pdev->dev, "netdev creation failed\n");
1140                 goto err_alloc_netdev;
1141         }
1142
1143         enetc_pf_netdev_setup(si, ndev, &enetc_ndev_ops);
1144
1145         priv = netdev_priv(ndev);
1146
1147         enetc_init_si_rings_params(priv);
1148
1149         err = enetc_alloc_si_resources(priv);
1150         if (err) {
1151                 dev_err(&pdev->dev, "SI resource alloc failed\n");
1152                 goto err_alloc_si_res;
1153         }
1154
1155         err = enetc_init_port_rfs_memory(si);
1156         if (err) {
1157                 dev_err(&pdev->dev, "Failed to initialize RFS memory\n");
1158                 goto err_init_port_rfs;
1159         }
1160
1161         err = enetc_init_port_rss_memory(si);
1162         if (err) {
1163                 dev_err(&pdev->dev, "Failed to initialize RSS memory\n");
1164                 goto err_init_port_rss;
1165         }
1166
1167         err = enetc_configure_si(priv);
1168         if (err) {
1169                 dev_err(&pdev->dev, "Failed to configure SI\n");
1170                 goto err_config_si;
1171         }
1172
1173         err = enetc_alloc_msix(priv);
1174         if (err) {
1175                 dev_err(&pdev->dev, "MSIX alloc failed\n");
1176                 goto err_alloc_msix;
1177         }
1178
1179         if (!of_get_phy_mode(node, &pf->if_mode)) {
1180                 err = enetc_mdiobus_create(pf, node);
1181                 if (err)
1182                         goto err_mdiobus_create;
1183
1184                 err = enetc_phylink_create(priv, node);
1185                 if (err)
1186                         goto err_phylink_create;
1187         }
1188
1189         err = register_netdev(ndev);
1190         if (err)
1191                 goto err_reg_netdev;
1192
1193         return 0;
1194
1195 err_reg_netdev:
1196         enetc_phylink_destroy(priv);
1197 err_phylink_create:
1198         enetc_mdiobus_destroy(pf);
1199 err_mdiobus_create:
1200         enetc_free_msix(priv);
1201 err_config_si:
1202 err_init_port_rss:
1203 err_init_port_rfs:
1204 err_alloc_msix:
1205         enetc_free_si_resources(priv);
1206 err_alloc_si_res:
1207         si->ndev = NULL;
1208         free_netdev(ndev);
1209 err_alloc_netdev:
1210 err_device_disabled:
1211 err_map_pf_space:
1212         enetc_pci_remove(pdev);
1213
1214         return err;
1215 }
1216
1217 static void enetc_pf_remove(struct pci_dev *pdev)
1218 {
1219         struct enetc_si *si = pci_get_drvdata(pdev);
1220         struct enetc_pf *pf = enetc_si_priv(si);
1221         struct enetc_ndev_priv *priv;
1222
1223         priv = netdev_priv(si->ndev);
1224
1225         if (pf->num_vfs)
1226                 enetc_sriov_configure(pdev, 0);
1227
1228         unregister_netdev(si->ndev);
1229
1230         enetc_phylink_destroy(priv);
1231         enetc_mdiobus_destroy(pf);
1232
1233         enetc_free_msix(priv);
1234
1235         enetc_free_si_resources(priv);
1236
1237         free_netdev(si->ndev);
1238
1239         enetc_pci_remove(pdev);
1240 }
1241
1242 static const struct pci_device_id enetc_pf_id_table[] = {
1243         { PCI_DEVICE(PCI_VENDOR_ID_FREESCALE, ENETC_DEV_ID_PF) },
1244         { 0, } /* End of table. */
1245 };
1246 MODULE_DEVICE_TABLE(pci, enetc_pf_id_table);
1247
1248 static struct pci_driver enetc_pf_driver = {
1249         .name = KBUILD_MODNAME,
1250         .id_table = enetc_pf_id_table,
1251         .probe = enetc_pf_probe,
1252         .remove = enetc_pf_remove,
1253 #ifdef CONFIG_PCI_IOV
1254         .sriov_configure = enetc_sriov_configure,
1255 #endif
1256 };
1257 module_pci_driver(enetc_pf_driver);
1258
1259 MODULE_DESCRIPTION(ENETC_DRV_NAME_STR);
1260 MODULE_LICENSE("Dual BSD/GPL");