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