1 // SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause) 2 /* Copyright 2017-2019 NXP */ 3 4 #include <linux/module.h> 5 #include <linux/fsl/enetc_mdio.h> 6 #include <linux/of_mdio.h> 7 #include <linux/of_net.h> 8 #include "enetc_pf.h" 9 10 #define ENETC_DRV_NAME_STR "ENETC PF driver" 11 static const char enetc_drv_name[] = ENETC_DRV_NAME_STR; 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 bool enetc_si_vlan_promisc_is_on(struct enetc_pf *pf, int si_idx) 55 { 56 return pf->vlan_promisc_simap & BIT(si_idx); 57 } 58 59 static bool enetc_vlan_filter_is_on(struct enetc_pf *pf) 60 { 61 int i; 62 63 for_each_set_bit(i, pf->active_vlans, VLAN_N_VID) 64 return true; 65 66 return false; 67 } 68 69 static void enetc_enable_si_vlan_promisc(struct enetc_pf *pf, int si_idx) 70 { 71 pf->vlan_promisc_simap |= BIT(si_idx); 72 enetc_set_vlan_promisc(&pf->si->hw, pf->vlan_promisc_simap); 73 } 74 75 static void enetc_disable_si_vlan_promisc(struct enetc_pf *pf, int si_idx) 76 { 77 pf->vlan_promisc_simap &= ~BIT(si_idx); 78 enetc_set_vlan_promisc(&pf->si->hw, pf->vlan_promisc_simap); 79 } 80 81 static void enetc_set_isol_vlan(struct enetc_hw *hw, int si, u16 vlan, u8 qos) 82 { 83 u32 val = 0; 84 85 if (vlan) 86 val = ENETC_PSIVLAN_EN | ENETC_PSIVLAN_SET_QOS(qos) | vlan; 87 88 enetc_port_wr(hw, ENETC_PSIVLANR(si), val); 89 } 90 91 static int enetc_mac_addr_hash_idx(const u8 *addr) 92 { 93 u64 fold = __swab64(ether_addr_to_u64(addr)) >> 16; 94 u64 mask = 0; 95 int res = 0; 96 int i; 97 98 for (i = 0; i < 8; i++) 99 mask |= BIT_ULL(i * 6); 100 101 for (i = 0; i < 6; i++) 102 res |= (hweight64(fold & (mask << i)) & 0x1) << i; 103 104 return res; 105 } 106 107 static void enetc_reset_mac_addr_filter(struct enetc_mac_filter *filter) 108 { 109 filter->mac_addr_cnt = 0; 110 111 bitmap_zero(filter->mac_hash_table, 112 ENETC_MADDR_HASH_TBL_SZ); 113 } 114 115 static void enetc_add_mac_addr_em_filter(struct enetc_mac_filter *filter, 116 const unsigned char *addr) 117 { 118 /* add exact match addr */ 119 ether_addr_copy(filter->mac_addr, addr); 120 filter->mac_addr_cnt++; 121 } 122 123 static void enetc_add_mac_addr_ht_filter(struct enetc_mac_filter *filter, 124 const unsigned char *addr) 125 { 126 int idx = enetc_mac_addr_hash_idx(addr); 127 128 /* add hash table entry */ 129 __set_bit(idx, filter->mac_hash_table); 130 filter->mac_addr_cnt++; 131 } 132 133 static void enetc_clear_mac_ht_flt(struct enetc_si *si, int si_idx, int type) 134 { 135 bool err = si->errata & ENETC_ERR_UCMCSWP; 136 137 if (type == UC) { 138 enetc_port_wr(&si->hw, ENETC_PSIUMHFR0(si_idx, err), 0); 139 enetc_port_wr(&si->hw, ENETC_PSIUMHFR1(si_idx), 0); 140 } else { /* MC */ 141 enetc_port_wr(&si->hw, ENETC_PSIMMHFR0(si_idx, err), 0); 142 enetc_port_wr(&si->hw, ENETC_PSIMMHFR1(si_idx), 0); 143 } 144 } 145 146 static void enetc_set_mac_ht_flt(struct enetc_si *si, int si_idx, int type, 147 u32 *hash) 148 { 149 bool err = si->errata & ENETC_ERR_UCMCSWP; 150 151 if (type == UC) { 152 enetc_port_wr(&si->hw, ENETC_PSIUMHFR0(si_idx, err), *hash); 153 enetc_port_wr(&si->hw, ENETC_PSIUMHFR1(si_idx), *(hash + 1)); 154 } else { /* MC */ 155 enetc_port_wr(&si->hw, ENETC_PSIMMHFR0(si_idx, err), *hash); 156 enetc_port_wr(&si->hw, ENETC_PSIMMHFR1(si_idx), *(hash + 1)); 157 } 158 } 159 160 static void enetc_sync_mac_filters(struct enetc_pf *pf) 161 { 162 struct enetc_mac_filter *f = pf->mac_filter; 163 struct enetc_si *si = pf->si; 164 int i, pos; 165 166 pos = EMETC_MAC_ADDR_FILT_RES; 167 168 for (i = 0; i < MADDR_TYPE; i++, f++) { 169 bool em = (f->mac_addr_cnt == 1) && (i == UC); 170 bool clear = !f->mac_addr_cnt; 171 172 if (clear) { 173 if (i == UC) 174 enetc_clear_mac_flt_entry(si, pos); 175 176 enetc_clear_mac_ht_flt(si, 0, i); 177 continue; 178 } 179 180 /* exact match filter */ 181 if (em) { 182 int err; 183 184 enetc_clear_mac_ht_flt(si, 0, UC); 185 186 err = enetc_set_mac_flt_entry(si, pos, f->mac_addr, 187 BIT(0)); 188 if (!err) 189 continue; 190 191 /* fallback to HT filtering */ 192 dev_warn(&si->pdev->dev, "fallback to HT filt (%d)\n", 193 err); 194 } 195 196 /* hash table filter, clear EM filter for UC entries */ 197 if (i == UC) 198 enetc_clear_mac_flt_entry(si, pos); 199 200 enetc_set_mac_ht_flt(si, 0, i, (u32 *)f->mac_hash_table); 201 } 202 } 203 204 static void enetc_pf_set_rx_mode(struct net_device *ndev) 205 { 206 struct enetc_ndev_priv *priv = netdev_priv(ndev); 207 struct enetc_pf *pf = enetc_si_priv(priv->si); 208 struct enetc_hw *hw = &priv->si->hw; 209 bool uprom = false, mprom = false; 210 struct enetc_mac_filter *filter; 211 struct netdev_hw_addr *ha; 212 u32 psipmr = 0; 213 bool em; 214 215 if (ndev->flags & IFF_PROMISC) { 216 /* enable promisc mode for SI0 (PF) */ 217 psipmr = ENETC_PSIPMR_SET_UP(0) | ENETC_PSIPMR_SET_MP(0); 218 uprom = true; 219 mprom = true; 220 /* enable VLAN promisc mode for SI0 */ 221 if (!enetc_si_vlan_promisc_is_on(pf, 0)) 222 enetc_enable_si_vlan_promisc(pf, 0); 223 224 } else if (ndev->flags & IFF_ALLMULTI) { 225 /* enable multi cast promisc mode for SI0 (PF) */ 226 psipmr = ENETC_PSIPMR_SET_MP(0); 227 mprom = true; 228 } 229 230 /* first 2 filter entries belong to PF */ 231 if (!uprom) { 232 /* Update unicast filters */ 233 filter = &pf->mac_filter[UC]; 234 enetc_reset_mac_addr_filter(filter); 235 236 em = (netdev_uc_count(ndev) == 1); 237 netdev_for_each_uc_addr(ha, ndev) { 238 if (em) { 239 enetc_add_mac_addr_em_filter(filter, ha->addr); 240 break; 241 } 242 243 enetc_add_mac_addr_ht_filter(filter, ha->addr); 244 } 245 } 246 247 if (!mprom) { 248 /* Update multicast filters */ 249 filter = &pf->mac_filter[MC]; 250 enetc_reset_mac_addr_filter(filter); 251 252 netdev_for_each_mc_addr(ha, ndev) { 253 if (!is_multicast_ether_addr(ha->addr)) 254 continue; 255 256 enetc_add_mac_addr_ht_filter(filter, ha->addr); 257 } 258 } 259 260 if (!uprom || !mprom) 261 /* update PF entries */ 262 enetc_sync_mac_filters(pf); 263 264 psipmr |= enetc_port_rd(hw, ENETC_PSIPMR) & 265 ~(ENETC_PSIPMR_SET_UP(0) | ENETC_PSIPMR_SET_MP(0)); 266 enetc_port_wr(hw, ENETC_PSIPMR, psipmr); 267 } 268 269 static void enetc_set_vlan_ht_filter(struct enetc_hw *hw, int si_idx, 270 u32 *hash) 271 { 272 enetc_port_wr(hw, ENETC_PSIVHFR0(si_idx), *hash); 273 enetc_port_wr(hw, ENETC_PSIVHFR1(si_idx), *(hash + 1)); 274 } 275 276 static int enetc_vid_hash_idx(unsigned int vid) 277 { 278 int res = 0; 279 int i; 280 281 for (i = 0; i < 6; i++) 282 res |= (hweight8(vid & (BIT(i) | BIT(i + 6))) & 0x1) << i; 283 284 return res; 285 } 286 287 static void enetc_sync_vlan_ht_filter(struct enetc_pf *pf, bool rehash) 288 { 289 int i; 290 291 if (rehash) { 292 bitmap_zero(pf->vlan_ht_filter, ENETC_VLAN_HT_SIZE); 293 294 for_each_set_bit(i, pf->active_vlans, VLAN_N_VID) { 295 int hidx = enetc_vid_hash_idx(i); 296 297 __set_bit(hidx, pf->vlan_ht_filter); 298 } 299 } 300 301 enetc_set_vlan_ht_filter(&pf->si->hw, 0, (u32 *)pf->vlan_ht_filter); 302 } 303 304 static int enetc_vlan_rx_add_vid(struct net_device *ndev, __be16 prot, u16 vid) 305 { 306 struct enetc_ndev_priv *priv = netdev_priv(ndev); 307 struct enetc_pf *pf = enetc_si_priv(priv->si); 308 int idx; 309 310 if (enetc_si_vlan_promisc_is_on(pf, 0)) 311 enetc_disable_si_vlan_promisc(pf, 0); 312 313 __set_bit(vid, pf->active_vlans); 314 315 idx = enetc_vid_hash_idx(vid); 316 if (!__test_and_set_bit(idx, pf->vlan_ht_filter)) 317 enetc_sync_vlan_ht_filter(pf, false); 318 319 return 0; 320 } 321 322 static int enetc_vlan_rx_del_vid(struct net_device *ndev, __be16 prot, u16 vid) 323 { 324 struct enetc_ndev_priv *priv = netdev_priv(ndev); 325 struct enetc_pf *pf = enetc_si_priv(priv->si); 326 327 __clear_bit(vid, pf->active_vlans); 328 enetc_sync_vlan_ht_filter(pf, true); 329 330 if (!enetc_vlan_filter_is_on(pf)) 331 enetc_enable_si_vlan_promisc(pf, 0); 332 333 return 0; 334 } 335 336 static void enetc_set_loopback(struct net_device *ndev, bool en) 337 { 338 struct enetc_ndev_priv *priv = netdev_priv(ndev); 339 struct enetc_hw *hw = &priv->si->hw; 340 u32 reg; 341 342 reg = enetc_port_rd(hw, ENETC_PM0_IF_MODE); 343 if (reg & ENETC_PMO_IFM_RG) { 344 /* RGMII mode */ 345 reg = (reg & ~ENETC_PM0_IFM_RLP) | 346 (en ? ENETC_PM0_IFM_RLP : 0); 347 enetc_port_wr(hw, ENETC_PM0_IF_MODE, reg); 348 } else { 349 /* assume SGMII mode */ 350 reg = enetc_port_rd(hw, ENETC_PM0_CMD_CFG); 351 reg = (reg & ~ENETC_PM0_CMD_XGLP) | 352 (en ? ENETC_PM0_CMD_XGLP : 0); 353 reg = (reg & ~ENETC_PM0_CMD_PHY_TX_EN) | 354 (en ? ENETC_PM0_CMD_PHY_TX_EN : 0); 355 enetc_port_wr(hw, ENETC_PM0_CMD_CFG, reg); 356 enetc_port_wr(hw, ENETC_PM1_CMD_CFG, reg); 357 } 358 } 359 360 static int enetc_pf_set_vf_mac(struct net_device *ndev, int vf, u8 *mac) 361 { 362 struct enetc_ndev_priv *priv = netdev_priv(ndev); 363 struct enetc_pf *pf = enetc_si_priv(priv->si); 364 struct enetc_vf_state *vf_state; 365 366 if (vf >= pf->total_vfs) 367 return -EINVAL; 368 369 if (!is_valid_ether_addr(mac)) 370 return -EADDRNOTAVAIL; 371 372 vf_state = &pf->vf_state[vf]; 373 vf_state->flags |= ENETC_VF_FLAG_PF_SET_MAC; 374 enetc_pf_set_primary_mac_addr(&priv->si->hw, vf + 1, mac); 375 return 0; 376 } 377 378 static int enetc_pf_set_vf_vlan(struct net_device *ndev, int vf, u16 vlan, 379 u8 qos, __be16 proto) 380 { 381 struct enetc_ndev_priv *priv = netdev_priv(ndev); 382 struct enetc_pf *pf = enetc_si_priv(priv->si); 383 384 if (priv->si->errata & ENETC_ERR_VLAN_ISOL) 385 return -EOPNOTSUPP; 386 387 if (vf >= pf->total_vfs) 388 return -EINVAL; 389 390 if (proto != htons(ETH_P_8021Q)) 391 /* only C-tags supported for now */ 392 return -EPROTONOSUPPORT; 393 394 enetc_set_isol_vlan(&priv->si->hw, vf + 1, vlan, qos); 395 return 0; 396 } 397 398 static int enetc_pf_set_vf_spoofchk(struct net_device *ndev, int vf, bool en) 399 { 400 struct enetc_ndev_priv *priv = netdev_priv(ndev); 401 struct enetc_pf *pf = enetc_si_priv(priv->si); 402 u32 cfgr; 403 404 if (vf >= pf->total_vfs) 405 return -EINVAL; 406 407 cfgr = enetc_port_rd(&priv->si->hw, ENETC_PSICFGR0(vf + 1)); 408 cfgr = (cfgr & ~ENETC_PSICFGR0_ASE) | (en ? ENETC_PSICFGR0_ASE : 0); 409 enetc_port_wr(&priv->si->hw, ENETC_PSICFGR0(vf + 1), cfgr); 410 411 return 0; 412 } 413 414 static void enetc_port_setup_primary_mac_address(struct enetc_si *si) 415 { 416 unsigned char mac_addr[MAX_ADDR_LEN]; 417 struct enetc_pf *pf = enetc_si_priv(si); 418 struct enetc_hw *hw = &si->hw; 419 int i; 420 421 /* check MAC addresses for PF and all VFs, if any is 0 set it ro rand */ 422 for (i = 0; i < pf->total_vfs + 1; i++) { 423 enetc_pf_get_primary_mac_addr(hw, i, mac_addr); 424 if (!is_zero_ether_addr(mac_addr)) 425 continue; 426 eth_random_addr(mac_addr); 427 dev_info(&si->pdev->dev, "no MAC address specified for SI%d, using %pM\n", 428 i, mac_addr); 429 enetc_pf_set_primary_mac_addr(hw, i, mac_addr); 430 } 431 } 432 433 static void enetc_port_assign_rfs_entries(struct enetc_si *si) 434 { 435 struct enetc_pf *pf = enetc_si_priv(si); 436 struct enetc_hw *hw = &si->hw; 437 int num_entries, vf_entries, i; 438 u32 val; 439 440 /* split RFS entries between functions */ 441 val = enetc_port_rd(hw, ENETC_PRFSCAPR); 442 num_entries = ENETC_PRFSCAPR_GET_NUM_RFS(val); 443 vf_entries = num_entries / (pf->total_vfs + 1); 444 445 for (i = 0; i < pf->total_vfs; i++) 446 enetc_port_wr(hw, ENETC_PSIRFSCFGR(i + 1), vf_entries); 447 enetc_port_wr(hw, ENETC_PSIRFSCFGR(0), 448 num_entries - vf_entries * pf->total_vfs); 449 450 /* enable RFS on port */ 451 enetc_port_wr(hw, ENETC_PRFSMR, ENETC_PRFSMR_RFSE); 452 } 453 454 static void enetc_port_si_configure(struct enetc_si *si) 455 { 456 struct enetc_pf *pf = enetc_si_priv(si); 457 struct enetc_hw *hw = &si->hw; 458 int num_rings, i; 459 u32 val; 460 461 val = enetc_port_rd(hw, ENETC_PCAPR0); 462 num_rings = min(ENETC_PCAPR0_RXBDR(val), ENETC_PCAPR0_TXBDR(val)); 463 464 val = ENETC_PSICFGR0_SET_TXBDR(ENETC_PF_NUM_RINGS); 465 val |= ENETC_PSICFGR0_SET_RXBDR(ENETC_PF_NUM_RINGS); 466 467 if (unlikely(num_rings < ENETC_PF_NUM_RINGS)) { 468 val = ENETC_PSICFGR0_SET_TXBDR(num_rings); 469 val |= ENETC_PSICFGR0_SET_RXBDR(num_rings); 470 471 dev_warn(&si->pdev->dev, "Found %d rings, expected %d!\n", 472 num_rings, ENETC_PF_NUM_RINGS); 473 474 num_rings = 0; 475 } 476 477 /* Add default one-time settings for SI0 (PF) */ 478 val |= ENETC_PSICFGR0_SIVC(ENETC_VLAN_TYPE_C | ENETC_VLAN_TYPE_S); 479 480 enetc_port_wr(hw, ENETC_PSICFGR0(0), val); 481 482 if (num_rings) 483 num_rings -= ENETC_PF_NUM_RINGS; 484 485 /* Configure the SIs for each available VF */ 486 val = ENETC_PSICFGR0_SIVC(ENETC_VLAN_TYPE_C | ENETC_VLAN_TYPE_S); 487 val |= ENETC_PSICFGR0_VTE | ENETC_PSICFGR0_SIVIE; 488 489 if (num_rings) { 490 num_rings /= pf->total_vfs; 491 val |= ENETC_PSICFGR0_SET_TXBDR(num_rings); 492 val |= ENETC_PSICFGR0_SET_RXBDR(num_rings); 493 } 494 495 for (i = 0; i < pf->total_vfs; i++) 496 enetc_port_wr(hw, ENETC_PSICFGR0(i + 1), val); 497 498 /* Port level VLAN settings */ 499 val = ENETC_PVCLCTR_OVTPIDL(ENETC_VLAN_TYPE_C | ENETC_VLAN_TYPE_S); 500 enetc_port_wr(hw, ENETC_PVCLCTR, val); 501 /* use outer tag for VLAN filtering */ 502 enetc_port_wr(hw, ENETC_PSIVLANFMR, ENETC_PSIVLANFMR_VS); 503 } 504 505 static void enetc_configure_port_mac(struct enetc_hw *hw) 506 { 507 enetc_port_wr(hw, ENETC_PM0_MAXFRM, 508 ENETC_SET_MAXFRM(ENETC_RX_MAXFRM_SIZE)); 509 510 enetc_port_wr(hw, ENETC_PTCMSDUR(0), ENETC_MAC_MAXFRM_SIZE); 511 enetc_port_wr(hw, ENETC_PTXMBAR, 2 * ENETC_MAC_MAXFRM_SIZE); 512 513 enetc_port_wr(hw, ENETC_PM0_CMD_CFG, ENETC_PM0_CMD_PHY_TX_EN | 514 ENETC_PM0_CMD_TXP | ENETC_PM0_PROMISC | 515 ENETC_PM0_TX_EN | ENETC_PM0_RX_EN); 516 517 enetc_port_wr(hw, ENETC_PM1_CMD_CFG, ENETC_PM0_CMD_PHY_TX_EN | 518 ENETC_PM0_CMD_TXP | ENETC_PM0_PROMISC | 519 ENETC_PM0_TX_EN | ENETC_PM0_RX_EN); 520 /* set auto-speed for RGMII */ 521 if (enetc_port_rd(hw, ENETC_PM0_IF_MODE) & ENETC_PMO_IFM_RG) 522 enetc_port_wr(hw, ENETC_PM0_IF_MODE, ENETC_PM0_IFM_RGAUTO); 523 if (enetc_global_rd(hw, ENETC_G_EPFBLPR(1)) == ENETC_G_EPFBLPR1_XGMII) 524 enetc_port_wr(hw, ENETC_PM0_IF_MODE, ENETC_PM0_IFM_XGMII); 525 } 526 527 static void enetc_configure_port_pmac(struct enetc_hw *hw) 528 { 529 u32 temp; 530 531 /* Set pMAC step lock */ 532 temp = enetc_port_rd(hw, ENETC_PFPMR); 533 enetc_port_wr(hw, ENETC_PFPMR, 534 temp | ENETC_PFPMR_PMACE | ENETC_PFPMR_MWLM); 535 536 temp = enetc_port_rd(hw, ENETC_MMCSR); 537 enetc_port_wr(hw, ENETC_MMCSR, temp | ENETC_MMCSR_ME); 538 } 539 540 static void enetc_configure_port(struct enetc_pf *pf) 541 { 542 u8 hash_key[ENETC_RSSHASH_KEY_SIZE]; 543 struct enetc_hw *hw = &pf->si->hw; 544 545 enetc_configure_port_pmac(hw); 546 547 enetc_configure_port_mac(hw); 548 549 enetc_port_si_configure(pf->si); 550 551 /* set up hash key */ 552 get_random_bytes(hash_key, ENETC_RSSHASH_KEY_SIZE); 553 enetc_set_rss_key(hw, hash_key); 554 555 /* split up RFS entries */ 556 enetc_port_assign_rfs_entries(pf->si); 557 558 /* fix-up primary MAC addresses, if not set already */ 559 enetc_port_setup_primary_mac_address(pf->si); 560 561 /* enforce VLAN promisc mode for all SIs */ 562 pf->vlan_promisc_simap = ENETC_VLAN_PROMISC_MAP_ALL; 563 enetc_set_vlan_promisc(hw, pf->vlan_promisc_simap); 564 565 enetc_port_wr(hw, ENETC_PSIPMR, 0); 566 567 /* enable port */ 568 enetc_port_wr(hw, ENETC_PMR, ENETC_PMR_EN); 569 } 570 571 /* Messaging */ 572 static u16 enetc_msg_pf_set_vf_primary_mac_addr(struct enetc_pf *pf, 573 int vf_id) 574 { 575 struct enetc_vf_state *vf_state = &pf->vf_state[vf_id]; 576 struct enetc_msg_swbd *msg = &pf->rxmsg[vf_id]; 577 struct enetc_msg_cmd_set_primary_mac *cmd; 578 struct device *dev = &pf->si->pdev->dev; 579 u16 cmd_id; 580 char *addr; 581 582 cmd = (struct enetc_msg_cmd_set_primary_mac *)msg->vaddr; 583 cmd_id = cmd->header.id; 584 if (cmd_id != ENETC_MSG_CMD_MNG_ADD) 585 return ENETC_MSG_CMD_STATUS_FAIL; 586 587 addr = cmd->mac.sa_data; 588 if (vf_state->flags & ENETC_VF_FLAG_PF_SET_MAC) 589 dev_warn(dev, "Attempt to override PF set mac addr for VF%d\n", 590 vf_id); 591 else 592 enetc_pf_set_primary_mac_addr(&pf->si->hw, vf_id + 1, addr); 593 594 return ENETC_MSG_CMD_STATUS_OK; 595 } 596 597 void enetc_msg_handle_rxmsg(struct enetc_pf *pf, int vf_id, u16 *status) 598 { 599 struct enetc_msg_swbd *msg = &pf->rxmsg[vf_id]; 600 struct device *dev = &pf->si->pdev->dev; 601 struct enetc_msg_cmd_header *cmd_hdr; 602 u16 cmd_type; 603 604 *status = ENETC_MSG_CMD_STATUS_OK; 605 cmd_hdr = (struct enetc_msg_cmd_header *)msg->vaddr; 606 cmd_type = cmd_hdr->type; 607 608 switch (cmd_type) { 609 case ENETC_MSG_CMD_MNG_MAC: 610 *status = enetc_msg_pf_set_vf_primary_mac_addr(pf, vf_id); 611 break; 612 default: 613 dev_err(dev, "command not supported (cmd_type: 0x%x)\n", 614 cmd_type); 615 } 616 } 617 618 #ifdef CONFIG_PCI_IOV 619 static int enetc_sriov_configure(struct pci_dev *pdev, int num_vfs) 620 { 621 struct enetc_si *si = pci_get_drvdata(pdev); 622 struct enetc_pf *pf = enetc_si_priv(si); 623 int err; 624 625 if (!num_vfs) { 626 enetc_msg_psi_free(pf); 627 kfree(pf->vf_state); 628 pf->num_vfs = 0; 629 pci_disable_sriov(pdev); 630 } else { 631 pf->num_vfs = num_vfs; 632 633 pf->vf_state = kcalloc(num_vfs, sizeof(struct enetc_vf_state), 634 GFP_KERNEL); 635 if (!pf->vf_state) { 636 pf->num_vfs = 0; 637 return -ENOMEM; 638 } 639 640 err = enetc_msg_psi_init(pf); 641 if (err) { 642 dev_err(&pdev->dev, "enetc_msg_psi_init (%d)\n", err); 643 goto err_msg_psi; 644 } 645 646 err = pci_enable_sriov(pdev, num_vfs); 647 if (err) { 648 dev_err(&pdev->dev, "pci_enable_sriov err %d\n", err); 649 goto err_en_sriov; 650 } 651 } 652 653 return num_vfs; 654 655 err_en_sriov: 656 enetc_msg_psi_free(pf); 657 err_msg_psi: 658 kfree(pf->vf_state); 659 pf->num_vfs = 0; 660 661 return err; 662 } 663 #else 664 #define enetc_sriov_configure(pdev, num_vfs) (void)0 665 #endif 666 667 static int enetc_pf_set_features(struct net_device *ndev, 668 netdev_features_t features) 669 { 670 netdev_features_t changed = ndev->features ^ features; 671 struct enetc_ndev_priv *priv = netdev_priv(ndev); 672 673 if (changed & NETIF_F_HW_VLAN_CTAG_RX) 674 enetc_enable_rxvlan(&priv->si->hw, 0, 675 !!(features & NETIF_F_HW_VLAN_CTAG_RX)); 676 677 if (changed & NETIF_F_HW_VLAN_CTAG_TX) 678 enetc_enable_txvlan(&priv->si->hw, 0, 679 !!(features & NETIF_F_HW_VLAN_CTAG_TX)); 680 681 if (changed & NETIF_F_LOOPBACK) 682 enetc_set_loopback(ndev, !!(features & NETIF_F_LOOPBACK)); 683 684 return enetc_set_features(ndev, features); 685 } 686 687 static const struct net_device_ops enetc_ndev_ops = { 688 .ndo_open = enetc_open, 689 .ndo_stop = enetc_close, 690 .ndo_start_xmit = enetc_xmit, 691 .ndo_get_stats = enetc_get_stats, 692 .ndo_set_mac_address = enetc_pf_set_mac_addr, 693 .ndo_set_rx_mode = enetc_pf_set_rx_mode, 694 .ndo_vlan_rx_add_vid = enetc_vlan_rx_add_vid, 695 .ndo_vlan_rx_kill_vid = enetc_vlan_rx_del_vid, 696 .ndo_set_vf_mac = enetc_pf_set_vf_mac, 697 .ndo_set_vf_vlan = enetc_pf_set_vf_vlan, 698 .ndo_set_vf_spoofchk = enetc_pf_set_vf_spoofchk, 699 .ndo_set_features = enetc_pf_set_features, 700 .ndo_do_ioctl = enetc_ioctl, 701 .ndo_setup_tc = enetc_setup_tc, 702 }; 703 704 static void enetc_pf_netdev_setup(struct enetc_si *si, struct net_device *ndev, 705 const struct net_device_ops *ndev_ops) 706 { 707 struct enetc_ndev_priv *priv = netdev_priv(ndev); 708 709 SET_NETDEV_DEV(ndev, &si->pdev->dev); 710 priv->ndev = ndev; 711 priv->si = si; 712 priv->dev = &si->pdev->dev; 713 si->ndev = ndev; 714 715 priv->msg_enable = (NETIF_MSG_WOL << 1) - 1; 716 ndev->netdev_ops = ndev_ops; 717 enetc_set_ethtool_ops(ndev); 718 ndev->watchdog_timeo = 5 * HZ; 719 ndev->max_mtu = ENETC_MAX_MTU; 720 721 ndev->hw_features = NETIF_F_SG | NETIF_F_RXCSUM | NETIF_F_HW_CSUM | 722 NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_CTAG_RX | 723 NETIF_F_LOOPBACK; 724 ndev->features = NETIF_F_HIGHDMA | NETIF_F_SG | 725 NETIF_F_RXCSUM | NETIF_F_HW_CSUM | 726 NETIF_F_HW_VLAN_CTAG_TX | 727 NETIF_F_HW_VLAN_CTAG_RX | 728 NETIF_F_HW_VLAN_CTAG_FILTER; 729 730 if (si->num_rss) 731 ndev->hw_features |= NETIF_F_RXHASH; 732 733 if (si->errata & ENETC_ERR_TXCSUM) { 734 ndev->hw_features &= ~NETIF_F_HW_CSUM; 735 ndev->features &= ~NETIF_F_HW_CSUM; 736 } 737 738 ndev->priv_flags |= IFF_UNICAST_FLT; 739 740 if (si->hw_features & ENETC_SI_F_QBV) 741 priv->active_offloads |= ENETC_F_QBV; 742 743 /* pick up primary MAC address from SI */ 744 enetc_get_primary_mac_addr(&si->hw, ndev->dev_addr); 745 } 746 747 static int enetc_mdio_probe(struct enetc_pf *pf) 748 { 749 struct device *dev = &pf->si->pdev->dev; 750 struct enetc_mdio_priv *mdio_priv; 751 struct device_node *np; 752 struct mii_bus *bus; 753 int err; 754 755 bus = devm_mdiobus_alloc_size(dev, sizeof(*mdio_priv)); 756 if (!bus) 757 return -ENOMEM; 758 759 bus->name = "Freescale ENETC MDIO Bus"; 760 bus->read = enetc_mdio_read; 761 bus->write = enetc_mdio_write; 762 bus->parent = dev; 763 mdio_priv = bus->priv; 764 mdio_priv->hw = &pf->si->hw; 765 mdio_priv->mdio_base = ENETC_EMDIO_BASE; 766 snprintf(bus->id, MII_BUS_ID_SIZE, "%s", dev_name(dev)); 767 768 np = of_get_child_by_name(dev->of_node, "mdio"); 769 if (!np) { 770 dev_err(dev, "MDIO node missing\n"); 771 return -EINVAL; 772 } 773 774 err = of_mdiobus_register(bus, np); 775 if (err) { 776 of_node_put(np); 777 dev_err(dev, "cannot register MDIO bus\n"); 778 return err; 779 } 780 781 of_node_put(np); 782 pf->mdio = bus; 783 784 return 0; 785 } 786 787 static void enetc_mdio_remove(struct enetc_pf *pf) 788 { 789 if (pf->mdio) 790 mdiobus_unregister(pf->mdio); 791 } 792 793 static int enetc_of_get_phy(struct enetc_ndev_priv *priv) 794 { 795 struct enetc_pf *pf = enetc_si_priv(priv->si); 796 struct device_node *np = priv->dev->of_node; 797 struct device_node *mdio_np; 798 int err; 799 800 priv->phy_node = of_parse_phandle(np, "phy-handle", 0); 801 if (!priv->phy_node) { 802 if (!of_phy_is_fixed_link(np)) { 803 dev_err(priv->dev, "PHY not specified\n"); 804 return -ENODEV; 805 } 806 807 err = of_phy_register_fixed_link(np); 808 if (err < 0) { 809 dev_err(priv->dev, "fixed link registration failed\n"); 810 return err; 811 } 812 813 priv->phy_node = of_node_get(np); 814 } 815 816 mdio_np = of_get_child_by_name(np, "mdio"); 817 if (mdio_np) { 818 of_node_put(mdio_np); 819 err = enetc_mdio_probe(pf); 820 if (err) { 821 of_node_put(priv->phy_node); 822 return err; 823 } 824 } 825 826 err = of_get_phy_mode(np, &priv->if_mode); 827 if (err) { 828 dev_err(priv->dev, "missing phy type\n"); 829 of_node_put(priv->phy_node); 830 if (of_phy_is_fixed_link(np)) 831 of_phy_deregister_fixed_link(np); 832 else 833 enetc_mdio_remove(pf); 834 835 return -EINVAL; 836 } 837 838 return 0; 839 } 840 841 static void enetc_of_put_phy(struct enetc_ndev_priv *priv) 842 { 843 struct device_node *np = priv->dev->of_node; 844 845 if (np && of_phy_is_fixed_link(np)) 846 of_phy_deregister_fixed_link(np); 847 if (priv->phy_node) 848 of_node_put(priv->phy_node); 849 } 850 851 static int enetc_pf_probe(struct pci_dev *pdev, 852 const struct pci_device_id *ent) 853 { 854 struct enetc_ndev_priv *priv; 855 struct net_device *ndev; 856 struct enetc_si *si; 857 struct enetc_pf *pf; 858 int err; 859 860 if (pdev->dev.of_node && !of_device_is_available(pdev->dev.of_node)) { 861 dev_info(&pdev->dev, "device is disabled, skipping\n"); 862 return -ENODEV; 863 } 864 865 err = enetc_pci_probe(pdev, KBUILD_MODNAME, sizeof(*pf)); 866 if (err) { 867 dev_err(&pdev->dev, "PCI probing failed\n"); 868 return err; 869 } 870 871 si = pci_get_drvdata(pdev); 872 if (!si->hw.port || !si->hw.global) { 873 err = -ENODEV; 874 dev_err(&pdev->dev, "could not map PF space, probing a VF?\n"); 875 goto err_map_pf_space; 876 } 877 878 pf = enetc_si_priv(si); 879 pf->si = si; 880 pf->total_vfs = pci_sriov_get_totalvfs(pdev); 881 882 enetc_configure_port(pf); 883 884 enetc_get_si_caps(si); 885 886 ndev = alloc_etherdev_mq(sizeof(*priv), ENETC_MAX_NUM_TXQS); 887 if (!ndev) { 888 err = -ENOMEM; 889 dev_err(&pdev->dev, "netdev creation failed\n"); 890 goto err_alloc_netdev; 891 } 892 893 enetc_pf_netdev_setup(si, ndev, &enetc_ndev_ops); 894 895 priv = netdev_priv(ndev); 896 897 enetc_init_si_rings_params(priv); 898 899 err = enetc_alloc_si_resources(priv); 900 if (err) { 901 dev_err(&pdev->dev, "SI resource alloc failed\n"); 902 goto err_alloc_si_res; 903 } 904 905 err = enetc_alloc_msix(priv); 906 if (err) { 907 dev_err(&pdev->dev, "MSIX alloc failed\n"); 908 goto err_alloc_msix; 909 } 910 911 err = enetc_of_get_phy(priv); 912 if (err) 913 dev_warn(&pdev->dev, "Fallback to PHY-less operation\n"); 914 915 err = register_netdev(ndev); 916 if (err) 917 goto err_reg_netdev; 918 919 netif_carrier_off(ndev); 920 921 return 0; 922 923 err_reg_netdev: 924 enetc_of_put_phy(priv); 925 enetc_free_msix(priv); 926 err_alloc_msix: 927 enetc_free_si_resources(priv); 928 err_alloc_si_res: 929 si->ndev = NULL; 930 free_netdev(ndev); 931 err_alloc_netdev: 932 err_map_pf_space: 933 enetc_pci_remove(pdev); 934 935 return err; 936 } 937 938 static void enetc_pf_remove(struct pci_dev *pdev) 939 { 940 struct enetc_si *si = pci_get_drvdata(pdev); 941 struct enetc_pf *pf = enetc_si_priv(si); 942 struct enetc_ndev_priv *priv; 943 944 if (pf->num_vfs) 945 enetc_sriov_configure(pdev, 0); 946 947 priv = netdev_priv(si->ndev); 948 unregister_netdev(si->ndev); 949 950 enetc_mdio_remove(pf); 951 enetc_of_put_phy(priv); 952 953 enetc_free_msix(priv); 954 955 enetc_free_si_resources(priv); 956 957 free_netdev(si->ndev); 958 959 enetc_pci_remove(pdev); 960 } 961 962 static const struct pci_device_id enetc_pf_id_table[] = { 963 { PCI_DEVICE(PCI_VENDOR_ID_FREESCALE, ENETC_DEV_ID_PF) }, 964 { 0, } /* End of table. */ 965 }; 966 MODULE_DEVICE_TABLE(pci, enetc_pf_id_table); 967 968 static struct pci_driver enetc_pf_driver = { 969 .name = KBUILD_MODNAME, 970 .id_table = enetc_pf_id_table, 971 .probe = enetc_pf_probe, 972 .remove = enetc_pf_remove, 973 #ifdef CONFIG_PCI_IOV 974 .sriov_configure = enetc_sriov_configure, 975 #endif 976 }; 977 module_pci_driver(enetc_pf_driver); 978 979 MODULE_DESCRIPTION(ENETC_DRV_NAME_STR); 980 MODULE_LICENSE("Dual BSD/GPL"); 981