1 // SPDX-License-Identifier: (GPL-2.0 OR MIT) 2 /* Microsemi Ocelot Switch driver 3 * 4 * This contains glue logic between the switchdev driver operations and the 5 * mscc_ocelot_switch_lib. 6 * 7 * Copyright (c) 2017, 2019 Microsemi Corporation 8 * Copyright 2020-2021 NXP 9 */ 10 11 #include <linux/dsa/ocelot.h> 12 #include <linux/if_bridge.h> 13 #include <linux/of_net.h> 14 #include <linux/phy/phy.h> 15 #include <net/pkt_cls.h> 16 #include "ocelot.h" 17 #include "ocelot_police.h" 18 #include "ocelot_vcap.h" 19 #include "ocelot_fdma.h" 20 21 #define OCELOT_MAC_QUIRKS OCELOT_QUIRK_QSGMII_PORTS_MUST_BE_UP 22 23 static struct ocelot *devlink_port_to_ocelot(struct devlink_port *dlp) 24 { 25 return devlink_priv(dlp->devlink); 26 } 27 28 static int devlink_port_to_port(struct devlink_port *dlp) 29 { 30 struct ocelot *ocelot = devlink_port_to_ocelot(dlp); 31 32 return dlp - ocelot->devlink_ports; 33 } 34 35 static int ocelot_devlink_sb_pool_get(struct devlink *dl, 36 unsigned int sb_index, u16 pool_index, 37 struct devlink_sb_pool_info *pool_info) 38 { 39 struct ocelot *ocelot = devlink_priv(dl); 40 41 return ocelot_sb_pool_get(ocelot, sb_index, pool_index, pool_info); 42 } 43 44 static int ocelot_devlink_sb_pool_set(struct devlink *dl, unsigned int sb_index, 45 u16 pool_index, u32 size, 46 enum devlink_sb_threshold_type threshold_type, 47 struct netlink_ext_ack *extack) 48 { 49 struct ocelot *ocelot = devlink_priv(dl); 50 51 return ocelot_sb_pool_set(ocelot, sb_index, pool_index, size, 52 threshold_type, extack); 53 } 54 55 static int ocelot_devlink_sb_port_pool_get(struct devlink_port *dlp, 56 unsigned int sb_index, u16 pool_index, 57 u32 *p_threshold) 58 { 59 struct ocelot *ocelot = devlink_port_to_ocelot(dlp); 60 int port = devlink_port_to_port(dlp); 61 62 return ocelot_sb_port_pool_get(ocelot, port, sb_index, pool_index, 63 p_threshold); 64 } 65 66 static int ocelot_devlink_sb_port_pool_set(struct devlink_port *dlp, 67 unsigned int sb_index, u16 pool_index, 68 u32 threshold, 69 struct netlink_ext_ack *extack) 70 { 71 struct ocelot *ocelot = devlink_port_to_ocelot(dlp); 72 int port = devlink_port_to_port(dlp); 73 74 return ocelot_sb_port_pool_set(ocelot, port, sb_index, pool_index, 75 threshold, extack); 76 } 77 78 static int 79 ocelot_devlink_sb_tc_pool_bind_get(struct devlink_port *dlp, 80 unsigned int sb_index, u16 tc_index, 81 enum devlink_sb_pool_type pool_type, 82 u16 *p_pool_index, u32 *p_threshold) 83 { 84 struct ocelot *ocelot = devlink_port_to_ocelot(dlp); 85 int port = devlink_port_to_port(dlp); 86 87 return ocelot_sb_tc_pool_bind_get(ocelot, port, sb_index, tc_index, 88 pool_type, p_pool_index, 89 p_threshold); 90 } 91 92 static int 93 ocelot_devlink_sb_tc_pool_bind_set(struct devlink_port *dlp, 94 unsigned int sb_index, u16 tc_index, 95 enum devlink_sb_pool_type pool_type, 96 u16 pool_index, u32 threshold, 97 struct netlink_ext_ack *extack) 98 { 99 struct ocelot *ocelot = devlink_port_to_ocelot(dlp); 100 int port = devlink_port_to_port(dlp); 101 102 return ocelot_sb_tc_pool_bind_set(ocelot, port, sb_index, tc_index, 103 pool_type, pool_index, threshold, 104 extack); 105 } 106 107 static int ocelot_devlink_sb_occ_snapshot(struct devlink *dl, 108 unsigned int sb_index) 109 { 110 struct ocelot *ocelot = devlink_priv(dl); 111 112 return ocelot_sb_occ_snapshot(ocelot, sb_index); 113 } 114 115 static int ocelot_devlink_sb_occ_max_clear(struct devlink *dl, 116 unsigned int sb_index) 117 { 118 struct ocelot *ocelot = devlink_priv(dl); 119 120 return ocelot_sb_occ_max_clear(ocelot, sb_index); 121 } 122 123 static int ocelot_devlink_sb_occ_port_pool_get(struct devlink_port *dlp, 124 unsigned int sb_index, 125 u16 pool_index, u32 *p_cur, 126 u32 *p_max) 127 { 128 struct ocelot *ocelot = devlink_port_to_ocelot(dlp); 129 int port = devlink_port_to_port(dlp); 130 131 return ocelot_sb_occ_port_pool_get(ocelot, port, sb_index, pool_index, 132 p_cur, p_max); 133 } 134 135 static int 136 ocelot_devlink_sb_occ_tc_port_bind_get(struct devlink_port *dlp, 137 unsigned int sb_index, u16 tc_index, 138 enum devlink_sb_pool_type pool_type, 139 u32 *p_cur, u32 *p_max) 140 { 141 struct ocelot *ocelot = devlink_port_to_ocelot(dlp); 142 int port = devlink_port_to_port(dlp); 143 144 return ocelot_sb_occ_tc_port_bind_get(ocelot, port, sb_index, 145 tc_index, pool_type, 146 p_cur, p_max); 147 } 148 149 const struct devlink_ops ocelot_devlink_ops = { 150 .sb_pool_get = ocelot_devlink_sb_pool_get, 151 .sb_pool_set = ocelot_devlink_sb_pool_set, 152 .sb_port_pool_get = ocelot_devlink_sb_port_pool_get, 153 .sb_port_pool_set = ocelot_devlink_sb_port_pool_set, 154 .sb_tc_pool_bind_get = ocelot_devlink_sb_tc_pool_bind_get, 155 .sb_tc_pool_bind_set = ocelot_devlink_sb_tc_pool_bind_set, 156 .sb_occ_snapshot = ocelot_devlink_sb_occ_snapshot, 157 .sb_occ_max_clear = ocelot_devlink_sb_occ_max_clear, 158 .sb_occ_port_pool_get = ocelot_devlink_sb_occ_port_pool_get, 159 .sb_occ_tc_port_bind_get = ocelot_devlink_sb_occ_tc_port_bind_get, 160 }; 161 162 int ocelot_port_devlink_init(struct ocelot *ocelot, int port, 163 enum devlink_port_flavour flavour) 164 { 165 struct devlink_port *dlp = &ocelot->devlink_ports[port]; 166 int id_len = sizeof(ocelot->base_mac); 167 struct devlink *dl = ocelot->devlink; 168 struct devlink_port_attrs attrs = {}; 169 170 memset(dlp, 0, sizeof(*dlp)); 171 memcpy(attrs.switch_id.id, &ocelot->base_mac, id_len); 172 attrs.switch_id.id_len = id_len; 173 attrs.phys.port_number = port; 174 attrs.flavour = flavour; 175 176 devlink_port_attrs_set(dlp, &attrs); 177 178 return devlink_port_register(dl, dlp, port); 179 } 180 181 void ocelot_port_devlink_teardown(struct ocelot *ocelot, int port) 182 { 183 struct devlink_port *dlp = &ocelot->devlink_ports[port]; 184 185 devlink_port_unregister(dlp); 186 } 187 188 static struct devlink_port *ocelot_get_devlink_port(struct net_device *dev) 189 { 190 struct ocelot_port_private *priv = netdev_priv(dev); 191 struct ocelot *ocelot = priv->port.ocelot; 192 int port = priv->chip_port; 193 194 return &ocelot->devlink_ports[port]; 195 } 196 197 int ocelot_setup_tc_cls_flower(struct ocelot_port_private *priv, 198 struct flow_cls_offload *f, 199 bool ingress) 200 { 201 struct ocelot *ocelot = priv->port.ocelot; 202 int port = priv->chip_port; 203 204 if (!ingress) 205 return -EOPNOTSUPP; 206 207 switch (f->command) { 208 case FLOW_CLS_REPLACE: 209 return ocelot_cls_flower_replace(ocelot, port, f, ingress); 210 case FLOW_CLS_DESTROY: 211 return ocelot_cls_flower_destroy(ocelot, port, f, ingress); 212 case FLOW_CLS_STATS: 213 return ocelot_cls_flower_stats(ocelot, port, f, ingress); 214 default: 215 return -EOPNOTSUPP; 216 } 217 } 218 219 static int ocelot_setup_tc_cls_matchall(struct ocelot_port_private *priv, 220 struct tc_cls_matchall_offload *f, 221 bool ingress) 222 { 223 struct netlink_ext_ack *extack = f->common.extack; 224 struct ocelot *ocelot = priv->port.ocelot; 225 struct ocelot_policer pol = { 0 }; 226 struct flow_action_entry *action; 227 int port = priv->chip_port; 228 int err; 229 230 if (!ingress) { 231 NL_SET_ERR_MSG_MOD(extack, "Only ingress is supported"); 232 return -EOPNOTSUPP; 233 } 234 235 switch (f->command) { 236 case TC_CLSMATCHALL_REPLACE: 237 if (!flow_offload_has_one_action(&f->rule->action)) { 238 NL_SET_ERR_MSG_MOD(extack, 239 "Only one action is supported"); 240 return -EOPNOTSUPP; 241 } 242 243 if (priv->tc.block_shared) { 244 NL_SET_ERR_MSG_MOD(extack, 245 "Rate limit is not supported on shared blocks"); 246 return -EOPNOTSUPP; 247 } 248 249 action = &f->rule->action.entries[0]; 250 251 if (action->id != FLOW_ACTION_POLICE) { 252 NL_SET_ERR_MSG_MOD(extack, "Unsupported action"); 253 return -EOPNOTSUPP; 254 } 255 256 if (priv->tc.police_id && priv->tc.police_id != f->cookie) { 257 NL_SET_ERR_MSG_MOD(extack, 258 "Only one policer per port is supported"); 259 return -EEXIST; 260 } 261 262 err = ocelot_policer_validate(&f->rule->action, action, 263 extack); 264 if (err) 265 return err; 266 267 pol.rate = (u32)div_u64(action->police.rate_bytes_ps, 1000) * 8; 268 pol.burst = action->police.burst; 269 270 err = ocelot_port_policer_add(ocelot, port, &pol); 271 if (err) { 272 NL_SET_ERR_MSG_MOD(extack, "Could not add policer"); 273 return err; 274 } 275 276 priv->tc.police_id = f->cookie; 277 priv->tc.offload_cnt++; 278 return 0; 279 case TC_CLSMATCHALL_DESTROY: 280 if (priv->tc.police_id != f->cookie) 281 return -ENOENT; 282 283 err = ocelot_port_policer_del(ocelot, port); 284 if (err) { 285 NL_SET_ERR_MSG_MOD(extack, 286 "Could not delete policer"); 287 return err; 288 } 289 priv->tc.police_id = 0; 290 priv->tc.offload_cnt--; 291 return 0; 292 case TC_CLSMATCHALL_STATS: 293 default: 294 return -EOPNOTSUPP; 295 } 296 } 297 298 static int ocelot_setup_tc_block_cb(enum tc_setup_type type, 299 void *type_data, 300 void *cb_priv, bool ingress) 301 { 302 struct ocelot_port_private *priv = cb_priv; 303 304 if (!tc_cls_can_offload_and_chain0(priv->dev, type_data)) 305 return -EOPNOTSUPP; 306 307 switch (type) { 308 case TC_SETUP_CLSMATCHALL: 309 return ocelot_setup_tc_cls_matchall(priv, type_data, ingress); 310 case TC_SETUP_CLSFLOWER: 311 return ocelot_setup_tc_cls_flower(priv, type_data, ingress); 312 default: 313 return -EOPNOTSUPP; 314 } 315 } 316 317 static int ocelot_setup_tc_block_cb_ig(enum tc_setup_type type, 318 void *type_data, 319 void *cb_priv) 320 { 321 return ocelot_setup_tc_block_cb(type, type_data, 322 cb_priv, true); 323 } 324 325 static int ocelot_setup_tc_block_cb_eg(enum tc_setup_type type, 326 void *type_data, 327 void *cb_priv) 328 { 329 return ocelot_setup_tc_block_cb(type, type_data, 330 cb_priv, false); 331 } 332 333 static LIST_HEAD(ocelot_block_cb_list); 334 335 static int ocelot_setup_tc_block(struct ocelot_port_private *priv, 336 struct flow_block_offload *f) 337 { 338 struct flow_block_cb *block_cb; 339 flow_setup_cb_t *cb; 340 341 if (f->binder_type == FLOW_BLOCK_BINDER_TYPE_CLSACT_INGRESS) { 342 cb = ocelot_setup_tc_block_cb_ig; 343 priv->tc.block_shared = f->block_shared; 344 } else if (f->binder_type == FLOW_BLOCK_BINDER_TYPE_CLSACT_EGRESS) { 345 cb = ocelot_setup_tc_block_cb_eg; 346 } else { 347 return -EOPNOTSUPP; 348 } 349 350 f->driver_block_list = &ocelot_block_cb_list; 351 352 switch (f->command) { 353 case FLOW_BLOCK_BIND: 354 if (flow_block_cb_is_busy(cb, priv, &ocelot_block_cb_list)) 355 return -EBUSY; 356 357 block_cb = flow_block_cb_alloc(cb, priv, priv, NULL); 358 if (IS_ERR(block_cb)) 359 return PTR_ERR(block_cb); 360 361 flow_block_cb_add(block_cb, f); 362 list_add_tail(&block_cb->driver_list, f->driver_block_list); 363 return 0; 364 case FLOW_BLOCK_UNBIND: 365 block_cb = flow_block_cb_lookup(f->block, cb, priv); 366 if (!block_cb) 367 return -ENOENT; 368 369 flow_block_cb_remove(block_cb, f); 370 list_del(&block_cb->driver_list); 371 return 0; 372 default: 373 return -EOPNOTSUPP; 374 } 375 } 376 377 static int ocelot_setup_tc(struct net_device *dev, enum tc_setup_type type, 378 void *type_data) 379 { 380 struct ocelot_port_private *priv = netdev_priv(dev); 381 382 switch (type) { 383 case TC_SETUP_BLOCK: 384 return ocelot_setup_tc_block(priv, type_data); 385 default: 386 return -EOPNOTSUPP; 387 } 388 return 0; 389 } 390 391 static int ocelot_vlan_vid_add(struct net_device *dev, u16 vid, bool pvid, 392 bool untagged) 393 { 394 struct ocelot_port_private *priv = netdev_priv(dev); 395 struct ocelot_port *ocelot_port = &priv->port; 396 struct ocelot *ocelot = ocelot_port->ocelot; 397 int port = priv->chip_port; 398 int ret; 399 400 ret = ocelot_vlan_add(ocelot, port, vid, pvid, untagged); 401 if (ret) 402 return ret; 403 404 /* Add the port MAC address to with the right VLAN information */ 405 ocelot_mact_learn(ocelot, PGID_CPU, dev->dev_addr, vid, 406 ENTRYTYPE_LOCKED); 407 408 return 0; 409 } 410 411 static int ocelot_vlan_vid_del(struct net_device *dev, u16 vid) 412 { 413 struct ocelot_port_private *priv = netdev_priv(dev); 414 struct ocelot *ocelot = priv->port.ocelot; 415 int port = priv->chip_port; 416 int ret; 417 418 /* 8021q removes VID 0 on module unload for all interfaces 419 * with VLAN filtering feature. We need to keep it to receive 420 * untagged traffic. 421 */ 422 if (vid == OCELOT_STANDALONE_PVID) 423 return 0; 424 425 ret = ocelot_vlan_del(ocelot, port, vid); 426 if (ret) 427 return ret; 428 429 /* Del the port MAC address to with the right VLAN information */ 430 ocelot_mact_forget(ocelot, dev->dev_addr, vid); 431 432 return 0; 433 } 434 435 static int ocelot_port_open(struct net_device *dev) 436 { 437 struct ocelot_port_private *priv = netdev_priv(dev); 438 439 phylink_start(priv->phylink); 440 441 return 0; 442 } 443 444 static int ocelot_port_stop(struct net_device *dev) 445 { 446 struct ocelot_port_private *priv = netdev_priv(dev); 447 448 phylink_stop(priv->phylink); 449 450 return 0; 451 } 452 453 static netdev_tx_t ocelot_port_xmit(struct sk_buff *skb, struct net_device *dev) 454 { 455 struct ocelot_port_private *priv = netdev_priv(dev); 456 struct ocelot_port *ocelot_port = &priv->port; 457 struct ocelot *ocelot = ocelot_port->ocelot; 458 int port = priv->chip_port; 459 u32 rew_op = 0; 460 461 if (!static_branch_unlikely(&ocelot_fdma_enabled) && 462 !ocelot_can_inject(ocelot, 0)) 463 return NETDEV_TX_BUSY; 464 465 /* Check if timestamping is needed */ 466 if (ocelot->ptp && (skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP)) { 467 struct sk_buff *clone = NULL; 468 469 if (ocelot_port_txtstamp_request(ocelot, port, skb, &clone)) { 470 kfree_skb(skb); 471 return NETDEV_TX_OK; 472 } 473 474 if (clone) 475 OCELOT_SKB_CB(skb)->clone = clone; 476 477 rew_op = ocelot_ptp_rew_op(skb); 478 } 479 480 if (static_branch_unlikely(&ocelot_fdma_enabled)) { 481 ocelot_fdma_inject_frame(ocelot, port, rew_op, skb, dev); 482 } else { 483 ocelot_port_inject_frame(ocelot, port, 0, rew_op, skb); 484 485 consume_skb(skb); 486 } 487 488 return NETDEV_TX_OK; 489 } 490 491 enum ocelot_action_type { 492 OCELOT_MACT_LEARN, 493 OCELOT_MACT_FORGET, 494 }; 495 496 struct ocelot_mact_work_ctx { 497 struct work_struct work; 498 struct ocelot *ocelot; 499 enum ocelot_action_type type; 500 union { 501 /* OCELOT_MACT_LEARN */ 502 struct { 503 unsigned char addr[ETH_ALEN]; 504 u16 vid; 505 enum macaccess_entry_type entry_type; 506 int pgid; 507 } learn; 508 /* OCELOT_MACT_FORGET */ 509 struct { 510 unsigned char addr[ETH_ALEN]; 511 u16 vid; 512 } forget; 513 }; 514 }; 515 516 #define ocelot_work_to_ctx(x) \ 517 container_of((x), struct ocelot_mact_work_ctx, work) 518 519 static void ocelot_mact_work(struct work_struct *work) 520 { 521 struct ocelot_mact_work_ctx *w = ocelot_work_to_ctx(work); 522 struct ocelot *ocelot = w->ocelot; 523 524 switch (w->type) { 525 case OCELOT_MACT_LEARN: 526 ocelot_mact_learn(ocelot, w->learn.pgid, w->learn.addr, 527 w->learn.vid, w->learn.entry_type); 528 break; 529 case OCELOT_MACT_FORGET: 530 ocelot_mact_forget(ocelot, w->forget.addr, w->forget.vid); 531 break; 532 default: 533 break; 534 } 535 536 kfree(w); 537 } 538 539 static int ocelot_enqueue_mact_action(struct ocelot *ocelot, 540 const struct ocelot_mact_work_ctx *ctx) 541 { 542 struct ocelot_mact_work_ctx *w = kmemdup(ctx, sizeof(*w), GFP_ATOMIC); 543 544 if (!w) 545 return -ENOMEM; 546 547 w->ocelot = ocelot; 548 INIT_WORK(&w->work, ocelot_mact_work); 549 queue_work(ocelot->owq, &w->work); 550 551 return 0; 552 } 553 554 static int ocelot_mc_unsync(struct net_device *dev, const unsigned char *addr) 555 { 556 struct ocelot_port_private *priv = netdev_priv(dev); 557 struct ocelot_port *ocelot_port = &priv->port; 558 struct ocelot *ocelot = ocelot_port->ocelot; 559 struct ocelot_mact_work_ctx w; 560 561 ether_addr_copy(w.forget.addr, addr); 562 w.forget.vid = OCELOT_STANDALONE_PVID; 563 w.type = OCELOT_MACT_FORGET; 564 565 return ocelot_enqueue_mact_action(ocelot, &w); 566 } 567 568 static int ocelot_mc_sync(struct net_device *dev, const unsigned char *addr) 569 { 570 struct ocelot_port_private *priv = netdev_priv(dev); 571 struct ocelot_port *ocelot_port = &priv->port; 572 struct ocelot *ocelot = ocelot_port->ocelot; 573 struct ocelot_mact_work_ctx w; 574 575 ether_addr_copy(w.learn.addr, addr); 576 w.learn.vid = OCELOT_STANDALONE_PVID; 577 w.learn.pgid = PGID_CPU; 578 w.learn.entry_type = ENTRYTYPE_LOCKED; 579 w.type = OCELOT_MACT_LEARN; 580 581 return ocelot_enqueue_mact_action(ocelot, &w); 582 } 583 584 static void ocelot_set_rx_mode(struct net_device *dev) 585 { 586 struct ocelot_port_private *priv = netdev_priv(dev); 587 struct ocelot *ocelot = priv->port.ocelot; 588 u32 val; 589 int i; 590 591 /* This doesn't handle promiscuous mode because the bridge core is 592 * setting IFF_PROMISC on all slave interfaces and all frames would be 593 * forwarded to the CPU port. 594 */ 595 val = GENMASK(ocelot->num_phys_ports - 1, 0); 596 for_each_nonreserved_multicast_dest_pgid(ocelot, i) 597 ocelot_write_rix(ocelot, val, ANA_PGID_PGID, i); 598 599 __dev_mc_sync(dev, ocelot_mc_sync, ocelot_mc_unsync); 600 } 601 602 static int ocelot_port_set_mac_address(struct net_device *dev, void *p) 603 { 604 struct ocelot_port_private *priv = netdev_priv(dev); 605 struct ocelot_port *ocelot_port = &priv->port; 606 struct ocelot *ocelot = ocelot_port->ocelot; 607 const struct sockaddr *addr = p; 608 609 /* Learn the new net device MAC address in the mac table. */ 610 ocelot_mact_learn(ocelot, PGID_CPU, addr->sa_data, 611 OCELOT_STANDALONE_PVID, ENTRYTYPE_LOCKED); 612 /* Then forget the previous one. */ 613 ocelot_mact_forget(ocelot, dev->dev_addr, OCELOT_STANDALONE_PVID); 614 615 eth_hw_addr_set(dev, addr->sa_data); 616 return 0; 617 } 618 619 static void ocelot_get_stats64(struct net_device *dev, 620 struct rtnl_link_stats64 *stats) 621 { 622 struct ocelot_port_private *priv = netdev_priv(dev); 623 struct ocelot *ocelot = priv->port.ocelot; 624 int port = priv->chip_port; 625 626 /* Configure the port to read the stats from */ 627 ocelot_write(ocelot, SYS_STAT_CFG_STAT_VIEW(port), 628 SYS_STAT_CFG); 629 630 /* Get Rx stats */ 631 stats->rx_bytes = ocelot_read(ocelot, SYS_COUNT_RX_OCTETS); 632 stats->rx_packets = ocelot_read(ocelot, SYS_COUNT_RX_SHORTS) + 633 ocelot_read(ocelot, SYS_COUNT_RX_FRAGMENTS) + 634 ocelot_read(ocelot, SYS_COUNT_RX_JABBERS) + 635 ocelot_read(ocelot, SYS_COUNT_RX_LONGS) + 636 ocelot_read(ocelot, SYS_COUNT_RX_64) + 637 ocelot_read(ocelot, SYS_COUNT_RX_65_127) + 638 ocelot_read(ocelot, SYS_COUNT_RX_128_255) + 639 ocelot_read(ocelot, SYS_COUNT_RX_256_1023) + 640 ocelot_read(ocelot, SYS_COUNT_RX_1024_1526) + 641 ocelot_read(ocelot, SYS_COUNT_RX_1527_MAX); 642 stats->multicast = ocelot_read(ocelot, SYS_COUNT_RX_MULTICAST); 643 stats->rx_dropped = dev->stats.rx_dropped; 644 645 /* Get Tx stats */ 646 stats->tx_bytes = ocelot_read(ocelot, SYS_COUNT_TX_OCTETS); 647 stats->tx_packets = ocelot_read(ocelot, SYS_COUNT_TX_64) + 648 ocelot_read(ocelot, SYS_COUNT_TX_65_127) + 649 ocelot_read(ocelot, SYS_COUNT_TX_128_511) + 650 ocelot_read(ocelot, SYS_COUNT_TX_512_1023) + 651 ocelot_read(ocelot, SYS_COUNT_TX_1024_1526) + 652 ocelot_read(ocelot, SYS_COUNT_TX_1527_MAX); 653 stats->tx_dropped = ocelot_read(ocelot, SYS_COUNT_TX_DROPS) + 654 ocelot_read(ocelot, SYS_COUNT_TX_AGING); 655 stats->collisions = ocelot_read(ocelot, SYS_COUNT_TX_COLLISION); 656 } 657 658 static int ocelot_port_fdb_add(struct ndmsg *ndm, struct nlattr *tb[], 659 struct net_device *dev, 660 const unsigned char *addr, 661 u16 vid, u16 flags, 662 struct netlink_ext_ack *extack) 663 { 664 struct ocelot_port_private *priv = netdev_priv(dev); 665 struct ocelot_port *ocelot_port = &priv->port; 666 struct ocelot *ocelot = ocelot_port->ocelot; 667 int port = priv->chip_port; 668 669 return ocelot_fdb_add(ocelot, port, addr, vid, ocelot_port->bridge); 670 } 671 672 static int ocelot_port_fdb_del(struct ndmsg *ndm, struct nlattr *tb[], 673 struct net_device *dev, 674 const unsigned char *addr, u16 vid) 675 { 676 struct ocelot_port_private *priv = netdev_priv(dev); 677 struct ocelot_port *ocelot_port = &priv->port; 678 struct ocelot *ocelot = ocelot_port->ocelot; 679 int port = priv->chip_port; 680 681 return ocelot_fdb_del(ocelot, port, addr, vid, ocelot_port->bridge); 682 } 683 684 static int ocelot_port_fdb_dump(struct sk_buff *skb, 685 struct netlink_callback *cb, 686 struct net_device *dev, 687 struct net_device *filter_dev, int *idx) 688 { 689 struct ocelot_port_private *priv = netdev_priv(dev); 690 struct ocelot *ocelot = priv->port.ocelot; 691 struct ocelot_dump_ctx dump = { 692 .dev = dev, 693 .skb = skb, 694 .cb = cb, 695 .idx = *idx, 696 }; 697 int port = priv->chip_port; 698 int ret; 699 700 ret = ocelot_fdb_dump(ocelot, port, ocelot_port_fdb_do_dump, &dump); 701 702 *idx = dump.idx; 703 704 return ret; 705 } 706 707 static int ocelot_vlan_rx_add_vid(struct net_device *dev, __be16 proto, 708 u16 vid) 709 { 710 return ocelot_vlan_vid_add(dev, vid, false, false); 711 } 712 713 static int ocelot_vlan_rx_kill_vid(struct net_device *dev, __be16 proto, 714 u16 vid) 715 { 716 return ocelot_vlan_vid_del(dev, vid); 717 } 718 719 static void ocelot_vlan_mode(struct ocelot *ocelot, int port, 720 netdev_features_t features) 721 { 722 u32 val; 723 724 /* Filtering */ 725 val = ocelot_read(ocelot, ANA_VLANMASK); 726 if (features & NETIF_F_HW_VLAN_CTAG_FILTER) 727 val |= BIT(port); 728 else 729 val &= ~BIT(port); 730 ocelot_write(ocelot, val, ANA_VLANMASK); 731 } 732 733 static int ocelot_set_features(struct net_device *dev, 734 netdev_features_t features) 735 { 736 netdev_features_t changed = dev->features ^ features; 737 struct ocelot_port_private *priv = netdev_priv(dev); 738 struct ocelot *ocelot = priv->port.ocelot; 739 int port = priv->chip_port; 740 741 if ((dev->features & NETIF_F_HW_TC) > (features & NETIF_F_HW_TC) && 742 priv->tc.offload_cnt) { 743 netdev_err(dev, 744 "Cannot disable HW TC offload while offloads active\n"); 745 return -EBUSY; 746 } 747 748 if (changed & NETIF_F_HW_VLAN_CTAG_FILTER) 749 ocelot_vlan_mode(ocelot, port, features); 750 751 return 0; 752 } 753 754 static int ocelot_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) 755 { 756 struct ocelot_port_private *priv = netdev_priv(dev); 757 struct ocelot *ocelot = priv->port.ocelot; 758 int port = priv->chip_port; 759 760 /* If the attached PHY device isn't capable of timestamping operations, 761 * use our own (when possible). 762 */ 763 if (!phy_has_hwtstamp(dev->phydev) && ocelot->ptp) { 764 switch (cmd) { 765 case SIOCSHWTSTAMP: 766 return ocelot_hwstamp_set(ocelot, port, ifr); 767 case SIOCGHWTSTAMP: 768 return ocelot_hwstamp_get(ocelot, port, ifr); 769 } 770 } 771 772 return phy_mii_ioctl(dev->phydev, ifr, cmd); 773 } 774 775 static int ocelot_change_mtu(struct net_device *dev, int new_mtu) 776 { 777 struct ocelot_port_private *priv = netdev_priv(dev); 778 struct ocelot_port *ocelot_port = &priv->port; 779 struct ocelot *ocelot = ocelot_port->ocelot; 780 781 ocelot_port_set_maxlen(ocelot, priv->chip_port, new_mtu); 782 WRITE_ONCE(dev->mtu, new_mtu); 783 784 return 0; 785 } 786 787 static const struct net_device_ops ocelot_port_netdev_ops = { 788 .ndo_open = ocelot_port_open, 789 .ndo_stop = ocelot_port_stop, 790 .ndo_start_xmit = ocelot_port_xmit, 791 .ndo_change_mtu = ocelot_change_mtu, 792 .ndo_set_rx_mode = ocelot_set_rx_mode, 793 .ndo_set_mac_address = ocelot_port_set_mac_address, 794 .ndo_get_stats64 = ocelot_get_stats64, 795 .ndo_fdb_add = ocelot_port_fdb_add, 796 .ndo_fdb_del = ocelot_port_fdb_del, 797 .ndo_fdb_dump = ocelot_port_fdb_dump, 798 .ndo_vlan_rx_add_vid = ocelot_vlan_rx_add_vid, 799 .ndo_vlan_rx_kill_vid = ocelot_vlan_rx_kill_vid, 800 .ndo_set_features = ocelot_set_features, 801 .ndo_setup_tc = ocelot_setup_tc, 802 .ndo_eth_ioctl = ocelot_ioctl, 803 .ndo_get_devlink_port = ocelot_get_devlink_port, 804 }; 805 806 struct net_device *ocelot_port_to_netdev(struct ocelot *ocelot, int port) 807 { 808 struct ocelot_port *ocelot_port = ocelot->ports[port]; 809 struct ocelot_port_private *priv; 810 811 if (!ocelot_port) 812 return NULL; 813 814 priv = container_of(ocelot_port, struct ocelot_port_private, port); 815 816 return priv->dev; 817 } 818 819 /* Checks if the net_device instance given to us originates from our driver */ 820 static bool ocelot_netdevice_dev_check(const struct net_device *dev) 821 { 822 return dev->netdev_ops == &ocelot_port_netdev_ops; 823 } 824 825 int ocelot_netdev_to_port(struct net_device *dev) 826 { 827 struct ocelot_port_private *priv; 828 829 if (!dev || !ocelot_netdevice_dev_check(dev)) 830 return -EINVAL; 831 832 priv = netdev_priv(dev); 833 834 return priv->chip_port; 835 } 836 837 static void ocelot_port_get_strings(struct net_device *netdev, u32 sset, 838 u8 *data) 839 { 840 struct ocelot_port_private *priv = netdev_priv(netdev); 841 struct ocelot *ocelot = priv->port.ocelot; 842 int port = priv->chip_port; 843 844 ocelot_get_strings(ocelot, port, sset, data); 845 } 846 847 static void ocelot_port_get_ethtool_stats(struct net_device *dev, 848 struct ethtool_stats *stats, 849 u64 *data) 850 { 851 struct ocelot_port_private *priv = netdev_priv(dev); 852 struct ocelot *ocelot = priv->port.ocelot; 853 int port = priv->chip_port; 854 855 ocelot_get_ethtool_stats(ocelot, port, data); 856 } 857 858 static int ocelot_port_get_sset_count(struct net_device *dev, int sset) 859 { 860 struct ocelot_port_private *priv = netdev_priv(dev); 861 struct ocelot *ocelot = priv->port.ocelot; 862 int port = priv->chip_port; 863 864 return ocelot_get_sset_count(ocelot, port, sset); 865 } 866 867 static int ocelot_port_get_ts_info(struct net_device *dev, 868 struct ethtool_ts_info *info) 869 { 870 struct ocelot_port_private *priv = netdev_priv(dev); 871 struct ocelot *ocelot = priv->port.ocelot; 872 int port = priv->chip_port; 873 874 if (!ocelot->ptp) 875 return ethtool_op_get_ts_info(dev, info); 876 877 return ocelot_get_ts_info(ocelot, port, info); 878 } 879 880 static const struct ethtool_ops ocelot_ethtool_ops = { 881 .get_strings = ocelot_port_get_strings, 882 .get_ethtool_stats = ocelot_port_get_ethtool_stats, 883 .get_sset_count = ocelot_port_get_sset_count, 884 .get_link_ksettings = phy_ethtool_get_link_ksettings, 885 .set_link_ksettings = phy_ethtool_set_link_ksettings, 886 .get_ts_info = ocelot_port_get_ts_info, 887 }; 888 889 static void ocelot_port_attr_stp_state_set(struct ocelot *ocelot, int port, 890 u8 state) 891 { 892 ocelot_bridge_stp_state_set(ocelot, port, state); 893 } 894 895 static void ocelot_port_attr_ageing_set(struct ocelot *ocelot, int port, 896 unsigned long ageing_clock_t) 897 { 898 unsigned long ageing_jiffies = clock_t_to_jiffies(ageing_clock_t); 899 u32 ageing_time = jiffies_to_msecs(ageing_jiffies); 900 901 ocelot_set_ageing_time(ocelot, ageing_time); 902 } 903 904 static void ocelot_port_attr_mc_set(struct ocelot *ocelot, int port, bool mc) 905 { 906 u32 cpu_fwd_mcast = ANA_PORT_CPU_FWD_CFG_CPU_IGMP_REDIR_ENA | 907 ANA_PORT_CPU_FWD_CFG_CPU_MLD_REDIR_ENA | 908 ANA_PORT_CPU_FWD_CFG_CPU_IPMC_CTRL_COPY_ENA; 909 u32 val = 0; 910 911 if (mc) 912 val = cpu_fwd_mcast; 913 914 ocelot_rmw_gix(ocelot, val, cpu_fwd_mcast, 915 ANA_PORT_CPU_FWD_CFG, port); 916 } 917 918 static int ocelot_port_attr_set(struct net_device *dev, const void *ctx, 919 const struct switchdev_attr *attr, 920 struct netlink_ext_ack *extack) 921 { 922 struct ocelot_port_private *priv = netdev_priv(dev); 923 struct ocelot *ocelot = priv->port.ocelot; 924 int port = priv->chip_port; 925 int err = 0; 926 927 if (ctx && ctx != priv) 928 return 0; 929 930 switch (attr->id) { 931 case SWITCHDEV_ATTR_ID_PORT_STP_STATE: 932 ocelot_port_attr_stp_state_set(ocelot, port, attr->u.stp_state); 933 break; 934 case SWITCHDEV_ATTR_ID_BRIDGE_AGEING_TIME: 935 ocelot_port_attr_ageing_set(ocelot, port, attr->u.ageing_time); 936 break; 937 case SWITCHDEV_ATTR_ID_BRIDGE_VLAN_FILTERING: 938 ocelot_port_vlan_filtering(ocelot, port, attr->u.vlan_filtering, 939 extack); 940 break; 941 case SWITCHDEV_ATTR_ID_BRIDGE_MC_DISABLED: 942 ocelot_port_attr_mc_set(ocelot, port, !attr->u.mc_disabled); 943 break; 944 case SWITCHDEV_ATTR_ID_PORT_PRE_BRIDGE_FLAGS: 945 err = ocelot_port_pre_bridge_flags(ocelot, port, 946 attr->u.brport_flags); 947 break; 948 case SWITCHDEV_ATTR_ID_PORT_BRIDGE_FLAGS: 949 ocelot_port_bridge_flags(ocelot, port, attr->u.brport_flags); 950 break; 951 default: 952 err = -EOPNOTSUPP; 953 break; 954 } 955 956 return err; 957 } 958 959 static int ocelot_vlan_vid_prepare(struct net_device *dev, u16 vid, bool pvid, 960 bool untagged, struct netlink_ext_ack *extack) 961 { 962 struct ocelot_port_private *priv = netdev_priv(dev); 963 struct ocelot_port *ocelot_port = &priv->port; 964 struct ocelot *ocelot = ocelot_port->ocelot; 965 int port = priv->chip_port; 966 967 return ocelot_vlan_prepare(ocelot, port, vid, pvid, untagged, extack); 968 } 969 970 static int ocelot_port_obj_add_vlan(struct net_device *dev, 971 const struct switchdev_obj_port_vlan *vlan, 972 struct netlink_ext_ack *extack) 973 { 974 bool untagged = vlan->flags & BRIDGE_VLAN_INFO_UNTAGGED; 975 bool pvid = vlan->flags & BRIDGE_VLAN_INFO_PVID; 976 int ret; 977 978 ret = ocelot_vlan_vid_prepare(dev, vlan->vid, pvid, untagged, extack); 979 if (ret) 980 return ret; 981 982 return ocelot_vlan_vid_add(dev, vlan->vid, pvid, untagged); 983 } 984 985 static int ocelot_port_obj_add_mdb(struct net_device *dev, 986 const struct switchdev_obj_port_mdb *mdb) 987 { 988 struct ocelot_port_private *priv = netdev_priv(dev); 989 struct ocelot_port *ocelot_port = &priv->port; 990 struct ocelot *ocelot = ocelot_port->ocelot; 991 int port = priv->chip_port; 992 993 return ocelot_port_mdb_add(ocelot, port, mdb, ocelot_port->bridge); 994 } 995 996 static int ocelot_port_obj_del_mdb(struct net_device *dev, 997 const struct switchdev_obj_port_mdb *mdb) 998 { 999 struct ocelot_port_private *priv = netdev_priv(dev); 1000 struct ocelot_port *ocelot_port = &priv->port; 1001 struct ocelot *ocelot = ocelot_port->ocelot; 1002 int port = priv->chip_port; 1003 1004 return ocelot_port_mdb_del(ocelot, port, mdb, ocelot_port->bridge); 1005 } 1006 1007 static int ocelot_port_obj_mrp_add(struct net_device *dev, 1008 const struct switchdev_obj_mrp *mrp) 1009 { 1010 struct ocelot_port_private *priv = netdev_priv(dev); 1011 struct ocelot_port *ocelot_port = &priv->port; 1012 struct ocelot *ocelot = ocelot_port->ocelot; 1013 int port = priv->chip_port; 1014 1015 return ocelot_mrp_add(ocelot, port, mrp); 1016 } 1017 1018 static int ocelot_port_obj_mrp_del(struct net_device *dev, 1019 const struct switchdev_obj_mrp *mrp) 1020 { 1021 struct ocelot_port_private *priv = netdev_priv(dev); 1022 struct ocelot_port *ocelot_port = &priv->port; 1023 struct ocelot *ocelot = ocelot_port->ocelot; 1024 int port = priv->chip_port; 1025 1026 return ocelot_mrp_del(ocelot, port, mrp); 1027 } 1028 1029 static int 1030 ocelot_port_obj_mrp_add_ring_role(struct net_device *dev, 1031 const struct switchdev_obj_ring_role_mrp *mrp) 1032 { 1033 struct ocelot_port_private *priv = netdev_priv(dev); 1034 struct ocelot_port *ocelot_port = &priv->port; 1035 struct ocelot *ocelot = ocelot_port->ocelot; 1036 int port = priv->chip_port; 1037 1038 return ocelot_mrp_add_ring_role(ocelot, port, mrp); 1039 } 1040 1041 static int 1042 ocelot_port_obj_mrp_del_ring_role(struct net_device *dev, 1043 const struct switchdev_obj_ring_role_mrp *mrp) 1044 { 1045 struct ocelot_port_private *priv = netdev_priv(dev); 1046 struct ocelot_port *ocelot_port = &priv->port; 1047 struct ocelot *ocelot = ocelot_port->ocelot; 1048 int port = priv->chip_port; 1049 1050 return ocelot_mrp_del_ring_role(ocelot, port, mrp); 1051 } 1052 1053 static int ocelot_port_obj_add(struct net_device *dev, const void *ctx, 1054 const struct switchdev_obj *obj, 1055 struct netlink_ext_ack *extack) 1056 { 1057 struct ocelot_port_private *priv = netdev_priv(dev); 1058 int ret = 0; 1059 1060 if (ctx && ctx != priv) 1061 return 0; 1062 1063 switch (obj->id) { 1064 case SWITCHDEV_OBJ_ID_PORT_VLAN: 1065 ret = ocelot_port_obj_add_vlan(dev, 1066 SWITCHDEV_OBJ_PORT_VLAN(obj), 1067 extack); 1068 break; 1069 case SWITCHDEV_OBJ_ID_PORT_MDB: 1070 ret = ocelot_port_obj_add_mdb(dev, SWITCHDEV_OBJ_PORT_MDB(obj)); 1071 break; 1072 case SWITCHDEV_OBJ_ID_MRP: 1073 ret = ocelot_port_obj_mrp_add(dev, SWITCHDEV_OBJ_MRP(obj)); 1074 break; 1075 case SWITCHDEV_OBJ_ID_RING_ROLE_MRP: 1076 ret = ocelot_port_obj_mrp_add_ring_role(dev, 1077 SWITCHDEV_OBJ_RING_ROLE_MRP(obj)); 1078 break; 1079 default: 1080 return -EOPNOTSUPP; 1081 } 1082 1083 return ret; 1084 } 1085 1086 static int ocelot_port_obj_del(struct net_device *dev, const void *ctx, 1087 const struct switchdev_obj *obj) 1088 { 1089 struct ocelot_port_private *priv = netdev_priv(dev); 1090 int ret = 0; 1091 1092 if (ctx && ctx != priv) 1093 return 0; 1094 1095 switch (obj->id) { 1096 case SWITCHDEV_OBJ_ID_PORT_VLAN: 1097 ret = ocelot_vlan_vid_del(dev, 1098 SWITCHDEV_OBJ_PORT_VLAN(obj)->vid); 1099 break; 1100 case SWITCHDEV_OBJ_ID_PORT_MDB: 1101 ret = ocelot_port_obj_del_mdb(dev, SWITCHDEV_OBJ_PORT_MDB(obj)); 1102 break; 1103 case SWITCHDEV_OBJ_ID_MRP: 1104 ret = ocelot_port_obj_mrp_del(dev, SWITCHDEV_OBJ_MRP(obj)); 1105 break; 1106 case SWITCHDEV_OBJ_ID_RING_ROLE_MRP: 1107 ret = ocelot_port_obj_mrp_del_ring_role(dev, 1108 SWITCHDEV_OBJ_RING_ROLE_MRP(obj)); 1109 break; 1110 default: 1111 return -EOPNOTSUPP; 1112 } 1113 1114 return ret; 1115 } 1116 1117 static void ocelot_inherit_brport_flags(struct ocelot *ocelot, int port, 1118 struct net_device *brport_dev) 1119 { 1120 struct switchdev_brport_flags flags = {0}; 1121 int flag; 1122 1123 flags.mask = BR_LEARNING | BR_FLOOD | BR_MCAST_FLOOD | BR_BCAST_FLOOD; 1124 1125 for_each_set_bit(flag, &flags.mask, 32) 1126 if (br_port_flag_is_set(brport_dev, BIT(flag))) 1127 flags.val |= BIT(flag); 1128 1129 ocelot_port_bridge_flags(ocelot, port, flags); 1130 } 1131 1132 static void ocelot_clear_brport_flags(struct ocelot *ocelot, int port) 1133 { 1134 struct switchdev_brport_flags flags; 1135 1136 flags.mask = BR_LEARNING | BR_FLOOD | BR_MCAST_FLOOD | BR_BCAST_FLOOD; 1137 flags.val = flags.mask & ~BR_LEARNING; 1138 1139 ocelot_port_bridge_flags(ocelot, port, flags); 1140 } 1141 1142 static int ocelot_switchdev_sync(struct ocelot *ocelot, int port, 1143 struct net_device *brport_dev, 1144 struct net_device *bridge_dev, 1145 struct netlink_ext_ack *extack) 1146 { 1147 clock_t ageing_time; 1148 u8 stp_state; 1149 1150 ocelot_inherit_brport_flags(ocelot, port, brport_dev); 1151 1152 stp_state = br_port_get_stp_state(brport_dev); 1153 ocelot_bridge_stp_state_set(ocelot, port, stp_state); 1154 1155 ageing_time = br_get_ageing_time(bridge_dev); 1156 ocelot_port_attr_ageing_set(ocelot, port, ageing_time); 1157 1158 return ocelot_port_vlan_filtering(ocelot, port, 1159 br_vlan_enabled(bridge_dev), 1160 extack); 1161 } 1162 1163 static int ocelot_switchdev_unsync(struct ocelot *ocelot, int port) 1164 { 1165 int err; 1166 1167 err = ocelot_port_vlan_filtering(ocelot, port, false, NULL); 1168 if (err) 1169 return err; 1170 1171 ocelot_clear_brport_flags(ocelot, port); 1172 1173 ocelot_bridge_stp_state_set(ocelot, port, BR_STATE_FORWARDING); 1174 1175 return 0; 1176 } 1177 1178 static int ocelot_bridge_num_get(struct ocelot *ocelot, 1179 const struct net_device *bridge_dev) 1180 { 1181 int bridge_num = ocelot_bridge_num_find(ocelot, bridge_dev); 1182 1183 if (bridge_num < 0) { 1184 /* First port that offloads this bridge */ 1185 bridge_num = find_first_zero_bit(&ocelot->bridges, 1186 ocelot->num_phys_ports); 1187 1188 set_bit(bridge_num, &ocelot->bridges); 1189 } 1190 1191 return bridge_num; 1192 } 1193 1194 static void ocelot_bridge_num_put(struct ocelot *ocelot, 1195 const struct net_device *bridge_dev, 1196 int bridge_num) 1197 { 1198 /* Check if the bridge is still in use, otherwise it is time 1199 * to clean it up so we can reuse this bridge_num later. 1200 */ 1201 if (!ocelot_bridge_num_find(ocelot, bridge_dev)) 1202 clear_bit(bridge_num, &ocelot->bridges); 1203 } 1204 1205 static int ocelot_netdevice_bridge_join(struct net_device *dev, 1206 struct net_device *brport_dev, 1207 struct net_device *bridge, 1208 struct netlink_ext_ack *extack) 1209 { 1210 struct ocelot_port_private *priv = netdev_priv(dev); 1211 struct ocelot_port *ocelot_port = &priv->port; 1212 struct ocelot *ocelot = ocelot_port->ocelot; 1213 int port = priv->chip_port; 1214 int bridge_num, err; 1215 1216 bridge_num = ocelot_bridge_num_get(ocelot, bridge); 1217 1218 err = ocelot_port_bridge_join(ocelot, port, bridge, bridge_num, 1219 extack); 1220 if (err) 1221 goto err_join; 1222 1223 err = switchdev_bridge_port_offload(brport_dev, dev, priv, 1224 &ocelot_switchdev_nb, 1225 &ocelot_switchdev_blocking_nb, 1226 false, extack); 1227 if (err) 1228 goto err_switchdev_offload; 1229 1230 err = ocelot_switchdev_sync(ocelot, port, brport_dev, bridge, extack); 1231 if (err) 1232 goto err_switchdev_sync; 1233 1234 return 0; 1235 1236 err_switchdev_sync: 1237 switchdev_bridge_port_unoffload(brport_dev, priv, 1238 &ocelot_switchdev_nb, 1239 &ocelot_switchdev_blocking_nb); 1240 err_switchdev_offload: 1241 ocelot_port_bridge_leave(ocelot, port, bridge); 1242 err_join: 1243 ocelot_bridge_num_put(ocelot, bridge, bridge_num); 1244 return err; 1245 } 1246 1247 static void ocelot_netdevice_pre_bridge_leave(struct net_device *dev, 1248 struct net_device *brport_dev) 1249 { 1250 struct ocelot_port_private *priv = netdev_priv(dev); 1251 1252 switchdev_bridge_port_unoffload(brport_dev, priv, 1253 &ocelot_switchdev_nb, 1254 &ocelot_switchdev_blocking_nb); 1255 } 1256 1257 static int ocelot_netdevice_bridge_leave(struct net_device *dev, 1258 struct net_device *brport_dev, 1259 struct net_device *bridge) 1260 { 1261 struct ocelot_port_private *priv = netdev_priv(dev); 1262 struct ocelot_port *ocelot_port = &priv->port; 1263 struct ocelot *ocelot = ocelot_port->ocelot; 1264 int bridge_num = ocelot_port->bridge_num; 1265 int port = priv->chip_port; 1266 int err; 1267 1268 err = ocelot_switchdev_unsync(ocelot, port); 1269 if (err) 1270 return err; 1271 1272 ocelot_port_bridge_leave(ocelot, port, bridge); 1273 ocelot_bridge_num_put(ocelot, bridge, bridge_num); 1274 1275 return 0; 1276 } 1277 1278 static int ocelot_netdevice_lag_join(struct net_device *dev, 1279 struct net_device *bond, 1280 struct netdev_lag_upper_info *info, 1281 struct netlink_ext_ack *extack) 1282 { 1283 struct ocelot_port_private *priv = netdev_priv(dev); 1284 struct ocelot_port *ocelot_port = &priv->port; 1285 struct ocelot *ocelot = ocelot_port->ocelot; 1286 struct net_device *bridge_dev; 1287 int port = priv->chip_port; 1288 int err; 1289 1290 err = ocelot_port_lag_join(ocelot, port, bond, info); 1291 if (err == -EOPNOTSUPP) { 1292 NL_SET_ERR_MSG_MOD(extack, "Offloading not supported"); 1293 return 0; 1294 } 1295 1296 bridge_dev = netdev_master_upper_dev_get(bond); 1297 if (!bridge_dev || !netif_is_bridge_master(bridge_dev)) 1298 return 0; 1299 1300 err = ocelot_netdevice_bridge_join(dev, bond, bridge_dev, extack); 1301 if (err) 1302 goto err_bridge_join; 1303 1304 return 0; 1305 1306 err_bridge_join: 1307 ocelot_port_lag_leave(ocelot, port, bond); 1308 return err; 1309 } 1310 1311 static void ocelot_netdevice_pre_lag_leave(struct net_device *dev, 1312 struct net_device *bond) 1313 { 1314 struct net_device *bridge_dev; 1315 1316 bridge_dev = netdev_master_upper_dev_get(bond); 1317 if (!bridge_dev || !netif_is_bridge_master(bridge_dev)) 1318 return; 1319 1320 ocelot_netdevice_pre_bridge_leave(dev, bond); 1321 } 1322 1323 static int ocelot_netdevice_lag_leave(struct net_device *dev, 1324 struct net_device *bond) 1325 { 1326 struct ocelot_port_private *priv = netdev_priv(dev); 1327 struct ocelot_port *ocelot_port = &priv->port; 1328 struct ocelot *ocelot = ocelot_port->ocelot; 1329 struct net_device *bridge_dev; 1330 int port = priv->chip_port; 1331 1332 ocelot_port_lag_leave(ocelot, port, bond); 1333 1334 bridge_dev = netdev_master_upper_dev_get(bond); 1335 if (!bridge_dev || !netif_is_bridge_master(bridge_dev)) 1336 return 0; 1337 1338 return ocelot_netdevice_bridge_leave(dev, bond, bridge_dev); 1339 } 1340 1341 static int ocelot_netdevice_changeupper(struct net_device *dev, 1342 struct net_device *brport_dev, 1343 struct netdev_notifier_changeupper_info *info) 1344 { 1345 struct netlink_ext_ack *extack; 1346 int err = 0; 1347 1348 extack = netdev_notifier_info_to_extack(&info->info); 1349 1350 if (netif_is_bridge_master(info->upper_dev)) { 1351 if (info->linking) 1352 err = ocelot_netdevice_bridge_join(dev, brport_dev, 1353 info->upper_dev, 1354 extack); 1355 else 1356 err = ocelot_netdevice_bridge_leave(dev, brport_dev, 1357 info->upper_dev); 1358 } 1359 if (netif_is_lag_master(info->upper_dev)) { 1360 if (info->linking) 1361 err = ocelot_netdevice_lag_join(dev, info->upper_dev, 1362 info->upper_info, extack); 1363 else 1364 ocelot_netdevice_lag_leave(dev, info->upper_dev); 1365 } 1366 1367 return notifier_from_errno(err); 1368 } 1369 1370 /* Treat CHANGEUPPER events on an offloaded LAG as individual CHANGEUPPER 1371 * events for the lower physical ports of the LAG. 1372 * If the LAG upper isn't offloaded, ignore its CHANGEUPPER events. 1373 * In case the LAG joined a bridge, notify that we are offloading it and can do 1374 * forwarding in hardware towards it. 1375 */ 1376 static int 1377 ocelot_netdevice_lag_changeupper(struct net_device *dev, 1378 struct netdev_notifier_changeupper_info *info) 1379 { 1380 struct net_device *lower; 1381 struct list_head *iter; 1382 int err = NOTIFY_DONE; 1383 1384 netdev_for_each_lower_dev(dev, lower, iter) { 1385 struct ocelot_port_private *priv = netdev_priv(lower); 1386 struct ocelot_port *ocelot_port = &priv->port; 1387 1388 if (ocelot_port->bond != dev) 1389 return NOTIFY_OK; 1390 1391 err = ocelot_netdevice_changeupper(lower, dev, info); 1392 if (err) 1393 return notifier_from_errno(err); 1394 } 1395 1396 return NOTIFY_DONE; 1397 } 1398 1399 static int 1400 ocelot_netdevice_prechangeupper(struct net_device *dev, 1401 struct net_device *brport_dev, 1402 struct netdev_notifier_changeupper_info *info) 1403 { 1404 if (netif_is_bridge_master(info->upper_dev) && !info->linking) 1405 ocelot_netdevice_pre_bridge_leave(dev, brport_dev); 1406 1407 if (netif_is_lag_master(info->upper_dev) && !info->linking) 1408 ocelot_netdevice_pre_lag_leave(dev, info->upper_dev); 1409 1410 return NOTIFY_DONE; 1411 } 1412 1413 static int 1414 ocelot_netdevice_lag_prechangeupper(struct net_device *dev, 1415 struct netdev_notifier_changeupper_info *info) 1416 { 1417 struct net_device *lower; 1418 struct list_head *iter; 1419 int err = NOTIFY_DONE; 1420 1421 netdev_for_each_lower_dev(dev, lower, iter) { 1422 struct ocelot_port_private *priv = netdev_priv(lower); 1423 struct ocelot_port *ocelot_port = &priv->port; 1424 1425 if (ocelot_port->bond != dev) 1426 return NOTIFY_OK; 1427 1428 err = ocelot_netdevice_prechangeupper(dev, lower, info); 1429 if (err) 1430 return err; 1431 } 1432 1433 return NOTIFY_DONE; 1434 } 1435 1436 static int 1437 ocelot_netdevice_changelowerstate(struct net_device *dev, 1438 struct netdev_lag_lower_state_info *info) 1439 { 1440 struct ocelot_port_private *priv = netdev_priv(dev); 1441 bool is_active = info->link_up && info->tx_enabled; 1442 struct ocelot_port *ocelot_port = &priv->port; 1443 struct ocelot *ocelot = ocelot_port->ocelot; 1444 int port = priv->chip_port; 1445 1446 if (!ocelot_port->bond) 1447 return NOTIFY_DONE; 1448 1449 if (ocelot_port->lag_tx_active == is_active) 1450 return NOTIFY_DONE; 1451 1452 ocelot_port_lag_change(ocelot, port, is_active); 1453 1454 return NOTIFY_OK; 1455 } 1456 1457 static int ocelot_netdevice_event(struct notifier_block *unused, 1458 unsigned long event, void *ptr) 1459 { 1460 struct net_device *dev = netdev_notifier_info_to_dev(ptr); 1461 1462 switch (event) { 1463 case NETDEV_PRECHANGEUPPER: { 1464 struct netdev_notifier_changeupper_info *info = ptr; 1465 1466 if (ocelot_netdevice_dev_check(dev)) 1467 return ocelot_netdevice_prechangeupper(dev, dev, info); 1468 1469 if (netif_is_lag_master(dev)) 1470 return ocelot_netdevice_lag_prechangeupper(dev, info); 1471 1472 break; 1473 } 1474 case NETDEV_CHANGEUPPER: { 1475 struct netdev_notifier_changeupper_info *info = ptr; 1476 1477 if (ocelot_netdevice_dev_check(dev)) 1478 return ocelot_netdevice_changeupper(dev, dev, info); 1479 1480 if (netif_is_lag_master(dev)) 1481 return ocelot_netdevice_lag_changeupper(dev, info); 1482 1483 break; 1484 } 1485 case NETDEV_CHANGELOWERSTATE: { 1486 struct netdev_notifier_changelowerstate_info *info = ptr; 1487 1488 if (!ocelot_netdevice_dev_check(dev)) 1489 break; 1490 1491 return ocelot_netdevice_changelowerstate(dev, 1492 info->lower_state_info); 1493 } 1494 default: 1495 break; 1496 } 1497 1498 return NOTIFY_DONE; 1499 } 1500 1501 struct notifier_block ocelot_netdevice_nb __read_mostly = { 1502 .notifier_call = ocelot_netdevice_event, 1503 }; 1504 1505 static int ocelot_switchdev_event(struct notifier_block *unused, 1506 unsigned long event, void *ptr) 1507 { 1508 struct net_device *dev = switchdev_notifier_info_to_dev(ptr); 1509 int err; 1510 1511 switch (event) { 1512 case SWITCHDEV_PORT_ATTR_SET: 1513 err = switchdev_handle_port_attr_set(dev, ptr, 1514 ocelot_netdevice_dev_check, 1515 ocelot_port_attr_set); 1516 return notifier_from_errno(err); 1517 } 1518 1519 return NOTIFY_DONE; 1520 } 1521 1522 struct notifier_block ocelot_switchdev_nb __read_mostly = { 1523 .notifier_call = ocelot_switchdev_event, 1524 }; 1525 1526 static int ocelot_switchdev_blocking_event(struct notifier_block *unused, 1527 unsigned long event, void *ptr) 1528 { 1529 struct net_device *dev = switchdev_notifier_info_to_dev(ptr); 1530 int err; 1531 1532 switch (event) { 1533 /* Blocking events. */ 1534 case SWITCHDEV_PORT_OBJ_ADD: 1535 err = switchdev_handle_port_obj_add(dev, ptr, 1536 ocelot_netdevice_dev_check, 1537 ocelot_port_obj_add); 1538 return notifier_from_errno(err); 1539 case SWITCHDEV_PORT_OBJ_DEL: 1540 err = switchdev_handle_port_obj_del(dev, ptr, 1541 ocelot_netdevice_dev_check, 1542 ocelot_port_obj_del); 1543 return notifier_from_errno(err); 1544 case SWITCHDEV_PORT_ATTR_SET: 1545 err = switchdev_handle_port_attr_set(dev, ptr, 1546 ocelot_netdevice_dev_check, 1547 ocelot_port_attr_set); 1548 return notifier_from_errno(err); 1549 } 1550 1551 return NOTIFY_DONE; 1552 } 1553 1554 struct notifier_block ocelot_switchdev_blocking_nb __read_mostly = { 1555 .notifier_call = ocelot_switchdev_blocking_event, 1556 }; 1557 1558 static void vsc7514_phylink_mac_config(struct phylink_config *config, 1559 unsigned int link_an_mode, 1560 const struct phylink_link_state *state) 1561 { 1562 struct net_device *ndev = to_net_dev(config->dev); 1563 struct ocelot_port_private *priv = netdev_priv(ndev); 1564 struct ocelot_port *ocelot_port = &priv->port; 1565 1566 /* Disable HDX fast control */ 1567 ocelot_port_writel(ocelot_port, DEV_PORT_MISC_HDX_FAST_DIS, 1568 DEV_PORT_MISC); 1569 1570 /* SGMII only for now */ 1571 ocelot_port_writel(ocelot_port, PCS1G_MODE_CFG_SGMII_MODE_ENA, 1572 PCS1G_MODE_CFG); 1573 ocelot_port_writel(ocelot_port, PCS1G_SD_CFG_SD_SEL, PCS1G_SD_CFG); 1574 1575 /* Enable PCS */ 1576 ocelot_port_writel(ocelot_port, PCS1G_CFG_PCS_ENA, PCS1G_CFG); 1577 1578 /* No aneg on SGMII */ 1579 ocelot_port_writel(ocelot_port, 0, PCS1G_ANEG_CFG); 1580 1581 /* No loopback */ 1582 ocelot_port_writel(ocelot_port, 0, PCS1G_LB_CFG); 1583 } 1584 1585 static void vsc7514_phylink_mac_link_down(struct phylink_config *config, 1586 unsigned int link_an_mode, 1587 phy_interface_t interface) 1588 { 1589 struct net_device *ndev = to_net_dev(config->dev); 1590 struct ocelot_port_private *priv = netdev_priv(ndev); 1591 struct ocelot *ocelot = priv->port.ocelot; 1592 int port = priv->chip_port; 1593 1594 ocelot_phylink_mac_link_down(ocelot, port, link_an_mode, interface, 1595 OCELOT_MAC_QUIRKS); 1596 } 1597 1598 static void vsc7514_phylink_mac_link_up(struct phylink_config *config, 1599 struct phy_device *phydev, 1600 unsigned int link_an_mode, 1601 phy_interface_t interface, 1602 int speed, int duplex, 1603 bool tx_pause, bool rx_pause) 1604 { 1605 struct net_device *ndev = to_net_dev(config->dev); 1606 struct ocelot_port_private *priv = netdev_priv(ndev); 1607 struct ocelot *ocelot = priv->port.ocelot; 1608 int port = priv->chip_port; 1609 1610 ocelot_phylink_mac_link_up(ocelot, port, phydev, link_an_mode, 1611 interface, speed, duplex, 1612 tx_pause, rx_pause, OCELOT_MAC_QUIRKS); 1613 } 1614 1615 static const struct phylink_mac_ops ocelot_phylink_ops = { 1616 .validate = phylink_generic_validate, 1617 .mac_config = vsc7514_phylink_mac_config, 1618 .mac_link_down = vsc7514_phylink_mac_link_down, 1619 .mac_link_up = vsc7514_phylink_mac_link_up, 1620 }; 1621 1622 static int ocelot_port_phylink_create(struct ocelot *ocelot, int port, 1623 struct device_node *portnp) 1624 { 1625 struct ocelot_port *ocelot_port = ocelot->ports[port]; 1626 struct ocelot_port_private *priv; 1627 struct device *dev = ocelot->dev; 1628 phy_interface_t phy_mode; 1629 struct phylink *phylink; 1630 int err; 1631 1632 of_get_phy_mode(portnp, &phy_mode); 1633 /* DT bindings of internal PHY ports are broken and don't 1634 * specify a phy-mode 1635 */ 1636 if (phy_mode == PHY_INTERFACE_MODE_NA) 1637 phy_mode = PHY_INTERFACE_MODE_INTERNAL; 1638 1639 if (phy_mode != PHY_INTERFACE_MODE_SGMII && 1640 phy_mode != PHY_INTERFACE_MODE_QSGMII && 1641 phy_mode != PHY_INTERFACE_MODE_INTERNAL) { 1642 dev_err(dev, "unsupported phy mode %s for port %d\n", 1643 phy_modes(phy_mode), port); 1644 return -EINVAL; 1645 } 1646 1647 /* Ensure clock signals and speed are set on all QSGMII links */ 1648 if (phy_mode == PHY_INTERFACE_MODE_QSGMII) 1649 ocelot_port_rmwl(ocelot_port, 0, 1650 DEV_CLOCK_CFG_MAC_TX_RST | 1651 DEV_CLOCK_CFG_MAC_RX_RST, 1652 DEV_CLOCK_CFG); 1653 1654 ocelot_port->phy_mode = phy_mode; 1655 1656 if (phy_mode != PHY_INTERFACE_MODE_INTERNAL) { 1657 struct phy *serdes = of_phy_get(portnp, NULL); 1658 1659 if (IS_ERR(serdes)) { 1660 err = PTR_ERR(serdes); 1661 dev_err_probe(dev, err, 1662 "missing SerDes phys for port %d\n", 1663 port); 1664 return err; 1665 } 1666 1667 err = phy_set_mode_ext(serdes, PHY_MODE_ETHERNET, phy_mode); 1668 of_phy_put(serdes); 1669 if (err) { 1670 dev_err(dev, "Could not SerDes mode on port %d: %pe\n", 1671 port, ERR_PTR(err)); 1672 return err; 1673 } 1674 } 1675 1676 priv = container_of(ocelot_port, struct ocelot_port_private, port); 1677 1678 priv->phylink_config.dev = &priv->dev->dev; 1679 priv->phylink_config.type = PHYLINK_NETDEV; 1680 priv->phylink_config.mac_capabilities = MAC_ASYM_PAUSE | MAC_SYM_PAUSE | 1681 MAC_10 | MAC_100 | MAC_1000FD | MAC_2500FD; 1682 1683 __set_bit(ocelot_port->phy_mode, 1684 priv->phylink_config.supported_interfaces); 1685 1686 phylink = phylink_create(&priv->phylink_config, 1687 of_fwnode_handle(portnp), 1688 phy_mode, &ocelot_phylink_ops); 1689 if (IS_ERR(phylink)) { 1690 err = PTR_ERR(phylink); 1691 dev_err(dev, "Could not create phylink (%pe)\n", phylink); 1692 return err; 1693 } 1694 1695 priv->phylink = phylink; 1696 1697 err = phylink_of_phy_connect(phylink, portnp, 0); 1698 if (err) { 1699 dev_err(dev, "Could not connect to PHY: %pe\n", ERR_PTR(err)); 1700 phylink_destroy(phylink); 1701 priv->phylink = NULL; 1702 return err; 1703 } 1704 1705 return 0; 1706 } 1707 1708 int ocelot_probe_port(struct ocelot *ocelot, int port, struct regmap *target, 1709 struct device_node *portnp) 1710 { 1711 struct ocelot_port_private *priv; 1712 struct ocelot_port *ocelot_port; 1713 struct net_device *dev; 1714 int err; 1715 1716 dev = alloc_etherdev(sizeof(struct ocelot_port_private)); 1717 if (!dev) 1718 return -ENOMEM; 1719 SET_NETDEV_DEV(dev, ocelot->dev); 1720 priv = netdev_priv(dev); 1721 priv->dev = dev; 1722 priv->chip_port = port; 1723 ocelot_port = &priv->port; 1724 ocelot_port->ocelot = ocelot; 1725 ocelot_port->target = target; 1726 ocelot->ports[port] = ocelot_port; 1727 1728 dev->netdev_ops = &ocelot_port_netdev_ops; 1729 dev->ethtool_ops = &ocelot_ethtool_ops; 1730 dev->max_mtu = OCELOT_JUMBO_MTU; 1731 1732 dev->hw_features |= NETIF_F_HW_VLAN_CTAG_FILTER | NETIF_F_RXFCS | 1733 NETIF_F_HW_TC; 1734 dev->features |= NETIF_F_HW_VLAN_CTAG_FILTER | NETIF_F_HW_TC; 1735 1736 err = of_get_ethdev_address(portnp, dev); 1737 if (err) 1738 eth_hw_addr_gen(dev, ocelot->base_mac, port); 1739 1740 ocelot_mact_learn(ocelot, PGID_CPU, dev->dev_addr, 1741 OCELOT_STANDALONE_PVID, ENTRYTYPE_LOCKED); 1742 1743 ocelot_init_port(ocelot, port); 1744 1745 err = ocelot_port_phylink_create(ocelot, port, portnp); 1746 if (err) 1747 goto out; 1748 1749 if (ocelot->fdma) 1750 ocelot_fdma_netdev_init(ocelot, dev); 1751 1752 err = register_netdev(dev); 1753 if (err) { 1754 dev_err(ocelot->dev, "register_netdev failed\n"); 1755 goto out_fdma_deinit; 1756 } 1757 1758 return 0; 1759 1760 out_fdma_deinit: 1761 if (ocelot->fdma) 1762 ocelot_fdma_netdev_deinit(ocelot, dev); 1763 out: 1764 ocelot->ports[port] = NULL; 1765 free_netdev(dev); 1766 1767 return err; 1768 } 1769 1770 void ocelot_release_port(struct ocelot_port *ocelot_port) 1771 { 1772 struct ocelot_port_private *priv = container_of(ocelot_port, 1773 struct ocelot_port_private, 1774 port); 1775 struct ocelot *ocelot = ocelot_port->ocelot; 1776 struct ocelot_fdma *fdma = ocelot->fdma; 1777 1778 unregister_netdev(priv->dev); 1779 1780 if (fdma) 1781 ocelot_fdma_netdev_deinit(ocelot, priv->dev); 1782 1783 if (priv->phylink) { 1784 rtnl_lock(); 1785 phylink_disconnect_phy(priv->phylink); 1786 rtnl_unlock(); 1787 1788 phylink_destroy(priv->phylink); 1789 } 1790 1791 free_netdev(priv->dev); 1792 } 1793