1 // SPDX-License-Identifier: GPL-2.0 2 /* Copyright (c) 2018, Sensor-Technik Wiedemann GmbH 3 * Copyright (c) 2018-2019, Vladimir Oltean <olteanv@gmail.com> 4 */ 5 6 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 7 8 #include <linux/delay.h> 9 #include <linux/module.h> 10 #include <linux/printk.h> 11 #include <linux/spi/spi.h> 12 #include <linux/errno.h> 13 #include <linux/gpio/consumer.h> 14 #include <linux/phylink.h> 15 #include <linux/of.h> 16 #include <linux/of_net.h> 17 #include <linux/of_mdio.h> 18 #include <linux/of_device.h> 19 #include <linux/pcs/pcs-xpcs.h> 20 #include <linux/netdev_features.h> 21 #include <linux/netdevice.h> 22 #include <linux/if_bridge.h> 23 #include <linux/if_ether.h> 24 #include <linux/dsa/8021q.h> 25 #include "sja1105.h" 26 #include "sja1105_tas.h" 27 28 #define SJA1105_UNKNOWN_MULTICAST 0x010000000000ull 29 #define SJA1105_DEFAULT_VLAN (VLAN_N_VID - 1) 30 31 static const struct dsa_switch_ops sja1105_switch_ops; 32 33 static void sja1105_hw_reset(struct gpio_desc *gpio, unsigned int pulse_len, 34 unsigned int startup_delay) 35 { 36 gpiod_set_value_cansleep(gpio, 1); 37 /* Wait for minimum reset pulse length */ 38 msleep(pulse_len); 39 gpiod_set_value_cansleep(gpio, 0); 40 /* Wait until chip is ready after reset */ 41 msleep(startup_delay); 42 } 43 44 static void 45 sja1105_port_allow_traffic(struct sja1105_l2_forwarding_entry *l2_fwd, 46 int from, int to, bool allow) 47 { 48 if (allow) 49 l2_fwd[from].reach_port |= BIT(to); 50 else 51 l2_fwd[from].reach_port &= ~BIT(to); 52 } 53 54 static bool sja1105_can_forward(struct sja1105_l2_forwarding_entry *l2_fwd, 55 int from, int to) 56 { 57 return !!(l2_fwd[from].reach_port & BIT(to)); 58 } 59 60 static int sja1105_init_mac_settings(struct sja1105_private *priv) 61 { 62 struct sja1105_mac_config_entry default_mac = { 63 /* Enable all 8 priority queues on egress. 64 * Every queue i holds top[i] - base[i] frames. 65 * Sum of top[i] - base[i] is 511 (max hardware limit). 66 */ 67 .top = {0x3F, 0x7F, 0xBF, 0xFF, 0x13F, 0x17F, 0x1BF, 0x1FF}, 68 .base = {0x0, 0x40, 0x80, 0xC0, 0x100, 0x140, 0x180, 0x1C0}, 69 .enabled = {true, true, true, true, true, true, true, true}, 70 /* Keep standard IFG of 12 bytes on egress. */ 71 .ifg = 0, 72 /* Always put the MAC speed in automatic mode, where it can be 73 * adjusted at runtime by PHYLINK. 74 */ 75 .speed = priv->info->port_speed[SJA1105_SPEED_AUTO], 76 /* No static correction for 1-step 1588 events */ 77 .tp_delin = 0, 78 .tp_delout = 0, 79 /* Disable aging for critical TTEthernet traffic */ 80 .maxage = 0xFF, 81 /* Internal VLAN (pvid) to apply to untagged ingress */ 82 .vlanprio = 0, 83 .vlanid = 1, 84 .ing_mirr = false, 85 .egr_mirr = false, 86 /* Don't drop traffic with other EtherType than ETH_P_IP */ 87 .drpnona664 = false, 88 /* Don't drop double-tagged traffic */ 89 .drpdtag = false, 90 /* Don't drop untagged traffic */ 91 .drpuntag = false, 92 /* Don't retag 802.1p (VID 0) traffic with the pvid */ 93 .retag = false, 94 /* Disable learning and I/O on user ports by default - 95 * STP will enable it. 96 */ 97 .dyn_learn = false, 98 .egress = false, 99 .ingress = false, 100 }; 101 struct sja1105_mac_config_entry *mac; 102 struct dsa_switch *ds = priv->ds; 103 struct sja1105_table *table; 104 int i; 105 106 table = &priv->static_config.tables[BLK_IDX_MAC_CONFIG]; 107 108 /* Discard previous MAC Configuration Table */ 109 if (table->entry_count) { 110 kfree(table->entries); 111 table->entry_count = 0; 112 } 113 114 table->entries = kcalloc(table->ops->max_entry_count, 115 table->ops->unpacked_entry_size, GFP_KERNEL); 116 if (!table->entries) 117 return -ENOMEM; 118 119 table->entry_count = table->ops->max_entry_count; 120 121 mac = table->entries; 122 123 for (i = 0; i < ds->num_ports; i++) { 124 mac[i] = default_mac; 125 126 /* Let sja1105_bridge_stp_state_set() keep address learning 127 * enabled for the CPU port. 128 */ 129 if (dsa_is_cpu_port(ds, i)) 130 priv->learn_ena |= BIT(i); 131 } 132 133 return 0; 134 } 135 136 static int sja1105_init_mii_settings(struct sja1105_private *priv) 137 { 138 struct device *dev = &priv->spidev->dev; 139 struct sja1105_xmii_params_entry *mii; 140 struct dsa_switch *ds = priv->ds; 141 struct sja1105_table *table; 142 int i; 143 144 table = &priv->static_config.tables[BLK_IDX_XMII_PARAMS]; 145 146 /* Discard previous xMII Mode Parameters Table */ 147 if (table->entry_count) { 148 kfree(table->entries); 149 table->entry_count = 0; 150 } 151 152 table->entries = kcalloc(table->ops->max_entry_count, 153 table->ops->unpacked_entry_size, GFP_KERNEL); 154 if (!table->entries) 155 return -ENOMEM; 156 157 /* Override table based on PHYLINK DT bindings */ 158 table->entry_count = table->ops->max_entry_count; 159 160 mii = table->entries; 161 162 for (i = 0; i < ds->num_ports; i++) { 163 sja1105_mii_role_t role = XMII_MAC; 164 165 if (dsa_is_unused_port(priv->ds, i)) 166 continue; 167 168 switch (priv->phy_mode[i]) { 169 case PHY_INTERFACE_MODE_INTERNAL: 170 if (priv->info->internal_phy[i] == SJA1105_NO_PHY) 171 goto unsupported; 172 173 mii->xmii_mode[i] = XMII_MODE_MII; 174 if (priv->info->internal_phy[i] == SJA1105_PHY_BASE_TX) 175 mii->special[i] = true; 176 177 break; 178 case PHY_INTERFACE_MODE_REVMII: 179 role = XMII_PHY; 180 fallthrough; 181 case PHY_INTERFACE_MODE_MII: 182 if (!priv->info->supports_mii[i]) 183 goto unsupported; 184 185 mii->xmii_mode[i] = XMII_MODE_MII; 186 break; 187 case PHY_INTERFACE_MODE_REVRMII: 188 role = XMII_PHY; 189 fallthrough; 190 case PHY_INTERFACE_MODE_RMII: 191 if (!priv->info->supports_rmii[i]) 192 goto unsupported; 193 194 mii->xmii_mode[i] = XMII_MODE_RMII; 195 break; 196 case PHY_INTERFACE_MODE_RGMII: 197 case PHY_INTERFACE_MODE_RGMII_ID: 198 case PHY_INTERFACE_MODE_RGMII_RXID: 199 case PHY_INTERFACE_MODE_RGMII_TXID: 200 if (!priv->info->supports_rgmii[i]) 201 goto unsupported; 202 203 mii->xmii_mode[i] = XMII_MODE_RGMII; 204 break; 205 case PHY_INTERFACE_MODE_SGMII: 206 if (!priv->info->supports_sgmii[i]) 207 goto unsupported; 208 209 mii->xmii_mode[i] = XMII_MODE_SGMII; 210 mii->special[i] = true; 211 break; 212 case PHY_INTERFACE_MODE_2500BASEX: 213 if (!priv->info->supports_2500basex[i]) 214 goto unsupported; 215 216 mii->xmii_mode[i] = XMII_MODE_SGMII; 217 mii->special[i] = true; 218 break; 219 unsupported: 220 default: 221 dev_err(dev, "Unsupported PHY mode %s on port %d!\n", 222 phy_modes(priv->phy_mode[i]), i); 223 return -EINVAL; 224 } 225 226 mii->phy_mac[i] = role; 227 } 228 return 0; 229 } 230 231 static int sja1105_init_static_fdb(struct sja1105_private *priv) 232 { 233 struct sja1105_l2_lookup_entry *l2_lookup; 234 struct sja1105_table *table; 235 int port; 236 237 table = &priv->static_config.tables[BLK_IDX_L2_LOOKUP]; 238 239 /* We only populate the FDB table through dynamic L2 Address Lookup 240 * entries, except for a special entry at the end which is a catch-all 241 * for unknown multicast and will be used to control flooding domain. 242 */ 243 if (table->entry_count) { 244 kfree(table->entries); 245 table->entry_count = 0; 246 } 247 248 if (!priv->info->can_limit_mcast_flood) 249 return 0; 250 251 table->entries = kcalloc(1, table->ops->unpacked_entry_size, 252 GFP_KERNEL); 253 if (!table->entries) 254 return -ENOMEM; 255 256 table->entry_count = 1; 257 l2_lookup = table->entries; 258 259 /* All L2 multicast addresses have an odd first octet */ 260 l2_lookup[0].macaddr = SJA1105_UNKNOWN_MULTICAST; 261 l2_lookup[0].mask_macaddr = SJA1105_UNKNOWN_MULTICAST; 262 l2_lookup[0].lockeds = true; 263 l2_lookup[0].index = SJA1105_MAX_L2_LOOKUP_COUNT - 1; 264 265 /* Flood multicast to every port by default */ 266 for (port = 0; port < priv->ds->num_ports; port++) 267 if (!dsa_is_unused_port(priv->ds, port)) 268 l2_lookup[0].destports |= BIT(port); 269 270 return 0; 271 } 272 273 static int sja1105_init_l2_lookup_params(struct sja1105_private *priv) 274 { 275 struct sja1105_l2_lookup_params_entry default_l2_lookup_params = { 276 /* Learned FDB entries are forgotten after 300 seconds */ 277 .maxage = SJA1105_AGEING_TIME_MS(300000), 278 /* All entries within a FDB bin are available for learning */ 279 .dyn_tbsz = SJA1105ET_FDB_BIN_SIZE, 280 /* And the P/Q/R/S equivalent setting: */ 281 .start_dynspc = 0, 282 /* 2^8 + 2^5 + 2^3 + 2^2 + 2^1 + 1 in Koopman notation */ 283 .poly = 0x97, 284 /* This selects between Independent VLAN Learning (IVL) and 285 * Shared VLAN Learning (SVL) 286 */ 287 .shared_learn = true, 288 /* Don't discard management traffic based on ENFPORT - 289 * we don't perform SMAC port enforcement anyway, so 290 * what we are setting here doesn't matter. 291 */ 292 .no_enf_hostprt = false, 293 /* Don't learn SMAC for mac_fltres1 and mac_fltres0. 294 * Maybe correlate with no_linklocal_learn from bridge driver? 295 */ 296 .no_mgmt_learn = true, 297 /* P/Q/R/S only */ 298 .use_static = true, 299 /* Dynamically learned FDB entries can overwrite other (older) 300 * dynamic FDB entries 301 */ 302 .owr_dyn = true, 303 .drpnolearn = true, 304 }; 305 struct dsa_switch *ds = priv->ds; 306 int port, num_used_ports = 0; 307 struct sja1105_table *table; 308 u64 max_fdb_entries; 309 310 for (port = 0; port < ds->num_ports; port++) 311 if (!dsa_is_unused_port(ds, port)) 312 num_used_ports++; 313 314 max_fdb_entries = SJA1105_MAX_L2_LOOKUP_COUNT / num_used_ports; 315 316 for (port = 0; port < ds->num_ports; port++) { 317 if (dsa_is_unused_port(ds, port)) 318 continue; 319 320 default_l2_lookup_params.maxaddrp[port] = max_fdb_entries; 321 } 322 323 table = &priv->static_config.tables[BLK_IDX_L2_LOOKUP_PARAMS]; 324 325 if (table->entry_count) { 326 kfree(table->entries); 327 table->entry_count = 0; 328 } 329 330 table->entries = kcalloc(table->ops->max_entry_count, 331 table->ops->unpacked_entry_size, GFP_KERNEL); 332 if (!table->entries) 333 return -ENOMEM; 334 335 table->entry_count = table->ops->max_entry_count; 336 337 /* This table only has a single entry */ 338 ((struct sja1105_l2_lookup_params_entry *)table->entries)[0] = 339 default_l2_lookup_params; 340 341 return 0; 342 } 343 344 /* Set up a default VLAN for untagged traffic injected from the CPU 345 * using management routes (e.g. STP, PTP) as opposed to tag_8021q. 346 * All DT-defined ports are members of this VLAN, and there are no 347 * restrictions on forwarding (since the CPU selects the destination). 348 * Frames from this VLAN will always be transmitted as untagged, and 349 * neither the bridge nor the 8021q module cannot create this VLAN ID. 350 */ 351 static int sja1105_init_static_vlan(struct sja1105_private *priv) 352 { 353 struct sja1105_table *table; 354 struct sja1105_vlan_lookup_entry pvid = { 355 .type_entry = SJA1110_VLAN_D_TAG, 356 .ving_mirr = 0, 357 .vegr_mirr = 0, 358 .vmemb_port = 0, 359 .vlan_bc = 0, 360 .tag_port = 0, 361 .vlanid = SJA1105_DEFAULT_VLAN, 362 }; 363 struct dsa_switch *ds = priv->ds; 364 int port; 365 366 table = &priv->static_config.tables[BLK_IDX_VLAN_LOOKUP]; 367 368 if (table->entry_count) { 369 kfree(table->entries); 370 table->entry_count = 0; 371 } 372 373 table->entries = kzalloc(table->ops->unpacked_entry_size, 374 GFP_KERNEL); 375 if (!table->entries) 376 return -ENOMEM; 377 378 table->entry_count = 1; 379 380 for (port = 0; port < ds->num_ports; port++) { 381 struct sja1105_bridge_vlan *v; 382 383 if (dsa_is_unused_port(ds, port)) 384 continue; 385 386 pvid.vmemb_port |= BIT(port); 387 pvid.vlan_bc |= BIT(port); 388 pvid.tag_port &= ~BIT(port); 389 390 v = kzalloc(sizeof(*v), GFP_KERNEL); 391 if (!v) 392 return -ENOMEM; 393 394 v->port = port; 395 v->vid = SJA1105_DEFAULT_VLAN; 396 v->untagged = true; 397 if (dsa_is_cpu_port(ds, port)) 398 v->pvid = true; 399 list_add(&v->list, &priv->dsa_8021q_vlans); 400 401 v = kmemdup(v, sizeof(*v), GFP_KERNEL); 402 if (!v) 403 return -ENOMEM; 404 405 list_add(&v->list, &priv->bridge_vlans); 406 } 407 408 ((struct sja1105_vlan_lookup_entry *)table->entries)[0] = pvid; 409 return 0; 410 } 411 412 static int sja1105_init_l2_forwarding(struct sja1105_private *priv) 413 { 414 struct sja1105_l2_forwarding_entry *l2fwd; 415 struct dsa_switch *ds = priv->ds; 416 struct sja1105_table *table; 417 int i, j; 418 419 table = &priv->static_config.tables[BLK_IDX_L2_FORWARDING]; 420 421 if (table->entry_count) { 422 kfree(table->entries); 423 table->entry_count = 0; 424 } 425 426 table->entries = kcalloc(table->ops->max_entry_count, 427 table->ops->unpacked_entry_size, GFP_KERNEL); 428 if (!table->entries) 429 return -ENOMEM; 430 431 table->entry_count = table->ops->max_entry_count; 432 433 l2fwd = table->entries; 434 435 /* First 5 entries define the forwarding rules */ 436 for (i = 0; i < ds->num_ports; i++) { 437 unsigned int upstream = dsa_upstream_port(priv->ds, i); 438 439 if (dsa_is_unused_port(ds, i)) 440 continue; 441 442 for (j = 0; j < SJA1105_NUM_TC; j++) 443 l2fwd[i].vlan_pmap[j] = j; 444 445 /* All ports start up with egress flooding enabled, 446 * including the CPU port. 447 */ 448 priv->ucast_egress_floods |= BIT(i); 449 priv->bcast_egress_floods |= BIT(i); 450 451 if (i == upstream) 452 continue; 453 454 sja1105_port_allow_traffic(l2fwd, i, upstream, true); 455 sja1105_port_allow_traffic(l2fwd, upstream, i, true); 456 457 l2fwd[i].bc_domain = BIT(upstream); 458 l2fwd[i].fl_domain = BIT(upstream); 459 460 l2fwd[upstream].bc_domain |= BIT(i); 461 l2fwd[upstream].fl_domain |= BIT(i); 462 } 463 464 /* Next 8 entries define VLAN PCP mapping from ingress to egress. 465 * Create a one-to-one mapping. 466 */ 467 for (i = 0; i < SJA1105_NUM_TC; i++) { 468 for (j = 0; j < ds->num_ports; j++) { 469 if (dsa_is_unused_port(ds, j)) 470 continue; 471 472 l2fwd[ds->num_ports + i].vlan_pmap[j] = i; 473 } 474 475 l2fwd[ds->num_ports + i].type_egrpcp2outputq = true; 476 } 477 478 return 0; 479 } 480 481 static int sja1110_init_pcp_remapping(struct sja1105_private *priv) 482 { 483 struct sja1110_pcp_remapping_entry *pcp_remap; 484 struct dsa_switch *ds = priv->ds; 485 struct sja1105_table *table; 486 int port, tc; 487 488 table = &priv->static_config.tables[BLK_IDX_PCP_REMAPPING]; 489 490 /* Nothing to do for SJA1105 */ 491 if (!table->ops->max_entry_count) 492 return 0; 493 494 if (table->entry_count) { 495 kfree(table->entries); 496 table->entry_count = 0; 497 } 498 499 table->entries = kcalloc(table->ops->max_entry_count, 500 table->ops->unpacked_entry_size, GFP_KERNEL); 501 if (!table->entries) 502 return -ENOMEM; 503 504 table->entry_count = table->ops->max_entry_count; 505 506 pcp_remap = table->entries; 507 508 /* Repeat the configuration done for vlan_pmap */ 509 for (port = 0; port < ds->num_ports; port++) { 510 if (dsa_is_unused_port(ds, port)) 511 continue; 512 513 for (tc = 0; tc < SJA1105_NUM_TC; tc++) 514 pcp_remap[port].egrpcp[tc] = tc; 515 } 516 517 return 0; 518 } 519 520 static int sja1105_init_l2_forwarding_params(struct sja1105_private *priv) 521 { 522 struct sja1105_l2_forwarding_params_entry *l2fwd_params; 523 struct sja1105_table *table; 524 525 table = &priv->static_config.tables[BLK_IDX_L2_FORWARDING_PARAMS]; 526 527 if (table->entry_count) { 528 kfree(table->entries); 529 table->entry_count = 0; 530 } 531 532 table->entries = kcalloc(table->ops->max_entry_count, 533 table->ops->unpacked_entry_size, GFP_KERNEL); 534 if (!table->entries) 535 return -ENOMEM; 536 537 table->entry_count = table->ops->max_entry_count; 538 539 /* This table only has a single entry */ 540 l2fwd_params = table->entries; 541 542 /* Disallow dynamic reconfiguration of vlan_pmap */ 543 l2fwd_params->max_dynp = 0; 544 /* Use a single memory partition for all ingress queues */ 545 l2fwd_params->part_spc[0] = priv->info->max_frame_mem; 546 547 return 0; 548 } 549 550 void sja1105_frame_memory_partitioning(struct sja1105_private *priv) 551 { 552 struct sja1105_l2_forwarding_params_entry *l2_fwd_params; 553 struct sja1105_vl_forwarding_params_entry *vl_fwd_params; 554 int max_mem = priv->info->max_frame_mem; 555 struct sja1105_table *table; 556 557 /* VLAN retagging is implemented using a loopback port that consumes 558 * frame buffers. That leaves less for us. 559 */ 560 if (priv->vlan_state == SJA1105_VLAN_BEST_EFFORT) 561 max_mem -= SJA1105_FRAME_MEMORY_RETAGGING_OVERHEAD; 562 563 table = &priv->static_config.tables[BLK_IDX_L2_FORWARDING_PARAMS]; 564 l2_fwd_params = table->entries; 565 l2_fwd_params->part_spc[0] = max_mem; 566 567 /* If we have any critical-traffic virtual links, we need to reserve 568 * some frame buffer memory for them. At the moment, hardcode the value 569 * at 100 blocks of 128 bytes of memory each. This leaves 829 blocks 570 * remaining for best-effort traffic. TODO: figure out a more flexible 571 * way to perform the frame buffer partitioning. 572 */ 573 if (!priv->static_config.tables[BLK_IDX_VL_FORWARDING].entry_count) 574 return; 575 576 table = &priv->static_config.tables[BLK_IDX_VL_FORWARDING_PARAMS]; 577 vl_fwd_params = table->entries; 578 579 l2_fwd_params->part_spc[0] -= SJA1105_VL_FRAME_MEMORY; 580 vl_fwd_params->partspc[0] = SJA1105_VL_FRAME_MEMORY; 581 } 582 583 /* SJA1110 TDMACONFIGIDX values: 584 * 585 * | 100 Mbps ports | 1Gbps ports | 2.5Gbps ports | Disabled ports 586 * -----+----------------+---------------+---------------+--------------- 587 * 0 | 0, [5:10] | [1:2] | [3:4] | retag 588 * 1 |0, [5:10], retag| [1:2] | [3:4] | - 589 * 2 | 0, [5:10] | [1:3], retag | 4 | - 590 * 3 | 0, [5:10] |[1:2], 4, retag| 3 | - 591 * 4 | 0, 2, [5:10] | 1, retag | [3:4] | - 592 * 5 | 0, 1, [5:10] | 2, retag | [3:4] | - 593 * 14 | 0, [5:10] | [1:4], retag | - | - 594 * 15 | [5:10] | [0:4], retag | - | - 595 */ 596 static void sja1110_select_tdmaconfigidx(struct sja1105_private *priv) 597 { 598 struct sja1105_general_params_entry *general_params; 599 struct sja1105_table *table; 600 bool port_1_is_base_tx; 601 bool port_3_is_2500; 602 bool port_4_is_2500; 603 u64 tdmaconfigidx; 604 605 if (priv->info->device_id != SJA1110_DEVICE_ID) 606 return; 607 608 table = &priv->static_config.tables[BLK_IDX_GENERAL_PARAMS]; 609 general_params = table->entries; 610 611 /* All the settings below are "as opposed to SGMII", which is the 612 * other pinmuxing option. 613 */ 614 port_1_is_base_tx = priv->phy_mode[1] == PHY_INTERFACE_MODE_INTERNAL; 615 port_3_is_2500 = priv->phy_mode[3] == PHY_INTERFACE_MODE_2500BASEX; 616 port_4_is_2500 = priv->phy_mode[4] == PHY_INTERFACE_MODE_2500BASEX; 617 618 if (port_1_is_base_tx) 619 /* Retagging port will operate at 1 Gbps */ 620 tdmaconfigidx = 5; 621 else if (port_3_is_2500 && port_4_is_2500) 622 /* Retagging port will operate at 100 Mbps */ 623 tdmaconfigidx = 1; 624 else if (port_3_is_2500) 625 /* Retagging port will operate at 1 Gbps */ 626 tdmaconfigidx = 3; 627 else if (port_4_is_2500) 628 /* Retagging port will operate at 1 Gbps */ 629 tdmaconfigidx = 2; 630 else 631 /* Retagging port will operate at 1 Gbps */ 632 tdmaconfigidx = 14; 633 634 general_params->tdmaconfigidx = tdmaconfigidx; 635 } 636 637 static int sja1105_init_general_params(struct sja1105_private *priv) 638 { 639 struct sja1105_general_params_entry default_general_params = { 640 /* Allow dynamic changing of the mirror port */ 641 .mirr_ptacu = true, 642 .switchid = priv->ds->index, 643 /* Priority queue for link-local management frames 644 * (both ingress to and egress from CPU - PTP, STP etc) 645 */ 646 .hostprio = 7, 647 .mac_fltres1 = SJA1105_LINKLOCAL_FILTER_A, 648 .mac_flt1 = SJA1105_LINKLOCAL_FILTER_A_MASK, 649 .incl_srcpt1 = false, 650 .send_meta1 = false, 651 .mac_fltres0 = SJA1105_LINKLOCAL_FILTER_B, 652 .mac_flt0 = SJA1105_LINKLOCAL_FILTER_B_MASK, 653 .incl_srcpt0 = false, 654 .send_meta0 = false, 655 /* The destination for traffic matching mac_fltres1 and 656 * mac_fltres0 on all ports except host_port. Such traffic 657 * receieved on host_port itself would be dropped, except 658 * by installing a temporary 'management route' 659 */ 660 .host_port = priv->ds->num_ports, 661 /* Default to an invalid value */ 662 .mirr_port = priv->ds->num_ports, 663 /* No TTEthernet */ 664 .vllupformat = SJA1105_VL_FORMAT_PSFP, 665 .vlmarker = 0, 666 .vlmask = 0, 667 /* Only update correctionField for 1-step PTP (L2 transport) */ 668 .ignore2stf = 0, 669 /* Forcefully disable VLAN filtering by telling 670 * the switch that VLAN has a different EtherType. 671 */ 672 .tpid = ETH_P_SJA1105, 673 .tpid2 = ETH_P_SJA1105, 674 /* Enable the TTEthernet engine on SJA1110 */ 675 .tte_en = true, 676 /* Set up the EtherType for control packets on SJA1110 */ 677 .header_type = ETH_P_SJA1110, 678 }; 679 struct sja1105_general_params_entry *general_params; 680 struct dsa_switch *ds = priv->ds; 681 struct sja1105_table *table; 682 int port; 683 684 for (port = 0; port < ds->num_ports; port++) { 685 if (dsa_is_cpu_port(ds, port)) { 686 default_general_params.host_port = port; 687 break; 688 } 689 } 690 691 table = &priv->static_config.tables[BLK_IDX_GENERAL_PARAMS]; 692 693 if (table->entry_count) { 694 kfree(table->entries); 695 table->entry_count = 0; 696 } 697 698 table->entries = kcalloc(table->ops->max_entry_count, 699 table->ops->unpacked_entry_size, GFP_KERNEL); 700 if (!table->entries) 701 return -ENOMEM; 702 703 table->entry_count = table->ops->max_entry_count; 704 705 general_params = table->entries; 706 707 /* This table only has a single entry */ 708 general_params[0] = default_general_params; 709 710 sja1110_select_tdmaconfigidx(priv); 711 712 /* Link-local traffic received on casc_port will be forwarded 713 * to host_port without embedding the source port and device ID 714 * info in the destination MAC address, and no RX timestamps will be 715 * taken either (presumably because it is a cascaded port and a 716 * downstream SJA switch already did that). 717 * To disable the feature, we need to do different things depending on 718 * switch generation. On SJA1105 we need to set an invalid port, while 719 * on SJA1110 which support multiple cascaded ports, this field is a 720 * bitmask so it must be left zero. 721 */ 722 if (!priv->info->multiple_cascade_ports) 723 general_params->casc_port = ds->num_ports; 724 725 return 0; 726 } 727 728 static int sja1105_init_avb_params(struct sja1105_private *priv) 729 { 730 struct sja1105_avb_params_entry *avb; 731 struct sja1105_table *table; 732 733 table = &priv->static_config.tables[BLK_IDX_AVB_PARAMS]; 734 735 /* Discard previous AVB Parameters Table */ 736 if (table->entry_count) { 737 kfree(table->entries); 738 table->entry_count = 0; 739 } 740 741 table->entries = kcalloc(table->ops->max_entry_count, 742 table->ops->unpacked_entry_size, GFP_KERNEL); 743 if (!table->entries) 744 return -ENOMEM; 745 746 table->entry_count = table->ops->max_entry_count; 747 748 avb = table->entries; 749 750 /* Configure the MAC addresses for meta frames */ 751 avb->destmeta = SJA1105_META_DMAC; 752 avb->srcmeta = SJA1105_META_SMAC; 753 /* On P/Q/R/S, configure the direction of the PTP_CLK pin as input by 754 * default. This is because there might be boards with a hardware 755 * layout where enabling the pin as output might cause an electrical 756 * clash. On E/T the pin is always an output, which the board designers 757 * probably already knew, so even if there are going to be electrical 758 * issues, there's nothing we can do. 759 */ 760 avb->cas_master = false; 761 762 return 0; 763 } 764 765 /* The L2 policing table is 2-stage. The table is looked up for each frame 766 * according to the ingress port, whether it was broadcast or not, and the 767 * classified traffic class (given by VLAN PCP). This portion of the lookup is 768 * fixed, and gives access to the SHARINDX, an indirection register pointing 769 * within the policing table itself, which is used to resolve the policer that 770 * will be used for this frame. 771 * 772 * Stage 1 Stage 2 773 * +------------+--------+ +---------------------------------+ 774 * |Port 0 TC 0 |SHARINDX| | Policer 0: Rate, Burst, MTU | 775 * +------------+--------+ +---------------------------------+ 776 * |Port 0 TC 1 |SHARINDX| | Policer 1: Rate, Burst, MTU | 777 * +------------+--------+ +---------------------------------+ 778 * ... | Policer 2: Rate, Burst, MTU | 779 * +------------+--------+ +---------------------------------+ 780 * |Port 0 TC 7 |SHARINDX| | Policer 3: Rate, Burst, MTU | 781 * +------------+--------+ +---------------------------------+ 782 * |Port 1 TC 0 |SHARINDX| | Policer 4: Rate, Burst, MTU | 783 * +------------+--------+ +---------------------------------+ 784 * ... | Policer 5: Rate, Burst, MTU | 785 * +------------+--------+ +---------------------------------+ 786 * |Port 1 TC 7 |SHARINDX| | Policer 6: Rate, Burst, MTU | 787 * +------------+--------+ +---------------------------------+ 788 * ... | Policer 7: Rate, Burst, MTU | 789 * +------------+--------+ +---------------------------------+ 790 * |Port 4 TC 7 |SHARINDX| ... 791 * +------------+--------+ 792 * |Port 0 BCAST|SHARINDX| ... 793 * +------------+--------+ 794 * |Port 1 BCAST|SHARINDX| ... 795 * +------------+--------+ 796 * ... ... 797 * +------------+--------+ +---------------------------------+ 798 * |Port 4 BCAST|SHARINDX| | Policer 44: Rate, Burst, MTU | 799 * +------------+--------+ +---------------------------------+ 800 * 801 * In this driver, we shall use policers 0-4 as statically alocated port 802 * (matchall) policers. So we need to make the SHARINDX for all lookups 803 * corresponding to this ingress port (8 VLAN PCP lookups and 1 broadcast 804 * lookup) equal. 805 * The remaining policers (40) shall be dynamically allocated for flower 806 * policers, where the key is either vlan_prio or dst_mac ff:ff:ff:ff:ff:ff. 807 */ 808 #define SJA1105_RATE_MBPS(speed) (((speed) * 64000) / 1000) 809 810 static int sja1105_init_l2_policing(struct sja1105_private *priv) 811 { 812 struct sja1105_l2_policing_entry *policing; 813 struct dsa_switch *ds = priv->ds; 814 struct sja1105_table *table; 815 int port, tc; 816 817 table = &priv->static_config.tables[BLK_IDX_L2_POLICING]; 818 819 /* Discard previous L2 Policing Table */ 820 if (table->entry_count) { 821 kfree(table->entries); 822 table->entry_count = 0; 823 } 824 825 table->entries = kcalloc(table->ops->max_entry_count, 826 table->ops->unpacked_entry_size, GFP_KERNEL); 827 if (!table->entries) 828 return -ENOMEM; 829 830 table->entry_count = table->ops->max_entry_count; 831 832 policing = table->entries; 833 834 /* Setup shared indices for the matchall policers */ 835 for (port = 0; port < ds->num_ports; port++) { 836 int mcast = (ds->num_ports * (SJA1105_NUM_TC + 1)) + port; 837 int bcast = (ds->num_ports * SJA1105_NUM_TC) + port; 838 839 for (tc = 0; tc < SJA1105_NUM_TC; tc++) 840 policing[port * SJA1105_NUM_TC + tc].sharindx = port; 841 842 policing[bcast].sharindx = port; 843 /* Only SJA1110 has multicast policers */ 844 if (mcast <= table->ops->max_entry_count) 845 policing[mcast].sharindx = port; 846 } 847 848 /* Setup the matchall policer parameters */ 849 for (port = 0; port < ds->num_ports; port++) { 850 int mtu = VLAN_ETH_FRAME_LEN + ETH_FCS_LEN; 851 852 if (dsa_is_cpu_port(priv->ds, port)) 853 mtu += VLAN_HLEN; 854 855 policing[port].smax = 65535; /* Burst size in bytes */ 856 policing[port].rate = SJA1105_RATE_MBPS(1000); 857 policing[port].maxlen = mtu; 858 policing[port].partition = 0; 859 } 860 861 return 0; 862 } 863 864 static int sja1105_static_config_load(struct sja1105_private *priv) 865 { 866 int rc; 867 868 sja1105_static_config_free(&priv->static_config); 869 rc = sja1105_static_config_init(&priv->static_config, 870 priv->info->static_ops, 871 priv->info->device_id); 872 if (rc) 873 return rc; 874 875 /* Build static configuration */ 876 rc = sja1105_init_mac_settings(priv); 877 if (rc < 0) 878 return rc; 879 rc = sja1105_init_mii_settings(priv); 880 if (rc < 0) 881 return rc; 882 rc = sja1105_init_static_fdb(priv); 883 if (rc < 0) 884 return rc; 885 rc = sja1105_init_static_vlan(priv); 886 if (rc < 0) 887 return rc; 888 rc = sja1105_init_l2_lookup_params(priv); 889 if (rc < 0) 890 return rc; 891 rc = sja1105_init_l2_forwarding(priv); 892 if (rc < 0) 893 return rc; 894 rc = sja1105_init_l2_forwarding_params(priv); 895 if (rc < 0) 896 return rc; 897 rc = sja1105_init_l2_policing(priv); 898 if (rc < 0) 899 return rc; 900 rc = sja1105_init_general_params(priv); 901 if (rc < 0) 902 return rc; 903 rc = sja1105_init_avb_params(priv); 904 if (rc < 0) 905 return rc; 906 rc = sja1110_init_pcp_remapping(priv); 907 if (rc < 0) 908 return rc; 909 910 /* Send initial configuration to hardware via SPI */ 911 return sja1105_static_config_upload(priv); 912 } 913 914 static int sja1105_parse_rgmii_delays(struct sja1105_private *priv) 915 { 916 struct dsa_switch *ds = priv->ds; 917 int port; 918 919 for (port = 0; port < ds->num_ports; port++) { 920 if (!priv->fixed_link[port]) 921 continue; 922 923 if (priv->phy_mode[port] == PHY_INTERFACE_MODE_RGMII_RXID || 924 priv->phy_mode[port] == PHY_INTERFACE_MODE_RGMII_ID) 925 priv->rgmii_rx_delay[port] = true; 926 927 if (priv->phy_mode[port] == PHY_INTERFACE_MODE_RGMII_TXID || 928 priv->phy_mode[port] == PHY_INTERFACE_MODE_RGMII_ID) 929 priv->rgmii_tx_delay[port] = true; 930 931 if ((priv->rgmii_rx_delay[port] || priv->rgmii_tx_delay[port]) && 932 !priv->info->setup_rgmii_delay) 933 return -EINVAL; 934 } 935 return 0; 936 } 937 938 static int sja1105_parse_ports_node(struct sja1105_private *priv, 939 struct device_node *ports_node) 940 { 941 struct device *dev = &priv->spidev->dev; 942 struct device_node *child; 943 944 for_each_available_child_of_node(ports_node, child) { 945 struct device_node *phy_node; 946 phy_interface_t phy_mode; 947 u32 index; 948 int err; 949 950 /* Get switch port number from DT */ 951 if (of_property_read_u32(child, "reg", &index) < 0) { 952 dev_err(dev, "Port number not defined in device tree " 953 "(property \"reg\")\n"); 954 of_node_put(child); 955 return -ENODEV; 956 } 957 958 /* Get PHY mode from DT */ 959 err = of_get_phy_mode(child, &phy_mode); 960 if (err) { 961 dev_err(dev, "Failed to read phy-mode or " 962 "phy-interface-type property for port %d\n", 963 index); 964 of_node_put(child); 965 return -ENODEV; 966 } 967 968 phy_node = of_parse_phandle(child, "phy-handle", 0); 969 if (!phy_node) { 970 if (!of_phy_is_fixed_link(child)) { 971 dev_err(dev, "phy-handle or fixed-link " 972 "properties missing!\n"); 973 of_node_put(child); 974 return -ENODEV; 975 } 976 /* phy-handle is missing, but fixed-link isn't. 977 * So it's a fixed link. Default to PHY role. 978 */ 979 priv->fixed_link[index] = true; 980 } else { 981 of_node_put(phy_node); 982 } 983 984 priv->phy_mode[index] = phy_mode; 985 } 986 987 return 0; 988 } 989 990 static int sja1105_parse_dt(struct sja1105_private *priv) 991 { 992 struct device *dev = &priv->spidev->dev; 993 struct device_node *switch_node = dev->of_node; 994 struct device_node *ports_node; 995 int rc; 996 997 ports_node = of_get_child_by_name(switch_node, "ports"); 998 if (!ports_node) 999 ports_node = of_get_child_by_name(switch_node, "ethernet-ports"); 1000 if (!ports_node) { 1001 dev_err(dev, "Incorrect bindings: absent \"ports\" node\n"); 1002 return -ENODEV; 1003 } 1004 1005 rc = sja1105_parse_ports_node(priv, ports_node); 1006 of_node_put(ports_node); 1007 1008 return rc; 1009 } 1010 1011 /* Convert link speed from SJA1105 to ethtool encoding */ 1012 static int sja1105_port_speed_to_ethtool(struct sja1105_private *priv, 1013 u64 speed) 1014 { 1015 if (speed == priv->info->port_speed[SJA1105_SPEED_10MBPS]) 1016 return SPEED_10; 1017 if (speed == priv->info->port_speed[SJA1105_SPEED_100MBPS]) 1018 return SPEED_100; 1019 if (speed == priv->info->port_speed[SJA1105_SPEED_1000MBPS]) 1020 return SPEED_1000; 1021 if (speed == priv->info->port_speed[SJA1105_SPEED_2500MBPS]) 1022 return SPEED_2500; 1023 return SPEED_UNKNOWN; 1024 } 1025 1026 /* Set link speed in the MAC configuration for a specific port. */ 1027 static int sja1105_adjust_port_config(struct sja1105_private *priv, int port, 1028 int speed_mbps) 1029 { 1030 struct sja1105_mac_config_entry *mac; 1031 struct device *dev = priv->ds->dev; 1032 u64 speed; 1033 int rc; 1034 1035 /* On P/Q/R/S, one can read from the device via the MAC reconfiguration 1036 * tables. On E/T, MAC reconfig tables are not readable, only writable. 1037 * We have to *know* what the MAC looks like. For the sake of keeping 1038 * the code common, we'll use the static configuration tables as a 1039 * reasonable approximation for both E/T and P/Q/R/S. 1040 */ 1041 mac = priv->static_config.tables[BLK_IDX_MAC_CONFIG].entries; 1042 1043 switch (speed_mbps) { 1044 case SPEED_UNKNOWN: 1045 /* PHYLINK called sja1105_mac_config() to inform us about 1046 * the state->interface, but AN has not completed and the 1047 * speed is not yet valid. UM10944.pdf says that setting 1048 * SJA1105_SPEED_AUTO at runtime disables the port, so that is 1049 * ok for power consumption in case AN will never complete - 1050 * otherwise PHYLINK should come back with a new update. 1051 */ 1052 speed = priv->info->port_speed[SJA1105_SPEED_AUTO]; 1053 break; 1054 case SPEED_10: 1055 speed = priv->info->port_speed[SJA1105_SPEED_10MBPS]; 1056 break; 1057 case SPEED_100: 1058 speed = priv->info->port_speed[SJA1105_SPEED_100MBPS]; 1059 break; 1060 case SPEED_1000: 1061 speed = priv->info->port_speed[SJA1105_SPEED_1000MBPS]; 1062 break; 1063 case SPEED_2500: 1064 speed = priv->info->port_speed[SJA1105_SPEED_2500MBPS]; 1065 break; 1066 default: 1067 dev_err(dev, "Invalid speed %iMbps\n", speed_mbps); 1068 return -EINVAL; 1069 } 1070 1071 /* Overwrite SJA1105_SPEED_AUTO from the static MAC configuration 1072 * table, since this will be used for the clocking setup, and we no 1073 * longer need to store it in the static config (already told hardware 1074 * we want auto during upload phase). 1075 * Actually for the SGMII port, the MAC is fixed at 1 Gbps and 1076 * we need to configure the PCS only (if even that). 1077 */ 1078 if (priv->phy_mode[port] == PHY_INTERFACE_MODE_SGMII) 1079 mac[port].speed = priv->info->port_speed[SJA1105_SPEED_1000MBPS]; 1080 else if (priv->phy_mode[port] == PHY_INTERFACE_MODE_2500BASEX) 1081 mac[port].speed = priv->info->port_speed[SJA1105_SPEED_2500MBPS]; 1082 else 1083 mac[port].speed = speed; 1084 1085 /* Write to the dynamic reconfiguration tables */ 1086 rc = sja1105_dynamic_config_write(priv, BLK_IDX_MAC_CONFIG, port, 1087 &mac[port], true); 1088 if (rc < 0) { 1089 dev_err(dev, "Failed to write MAC config: %d\n", rc); 1090 return rc; 1091 } 1092 1093 /* Reconfigure the PLLs for the RGMII interfaces (required 125 MHz at 1094 * gigabit, 25 MHz at 100 Mbps and 2.5 MHz at 10 Mbps). For MII and 1095 * RMII no change of the clock setup is required. Actually, changing 1096 * the clock setup does interrupt the clock signal for a certain time 1097 * which causes trouble for all PHYs relying on this signal. 1098 */ 1099 if (!phy_interface_mode_is_rgmii(priv->phy_mode[port])) 1100 return 0; 1101 1102 return sja1105_clocking_setup_port(priv, port); 1103 } 1104 1105 /* The SJA1105 MAC programming model is through the static config (the xMII 1106 * Mode table cannot be dynamically reconfigured), and we have to program 1107 * that early (earlier than PHYLINK calls us, anyway). 1108 * So just error out in case the connected PHY attempts to change the initial 1109 * system interface MII protocol from what is defined in the DT, at least for 1110 * now. 1111 */ 1112 static bool sja1105_phy_mode_mismatch(struct sja1105_private *priv, int port, 1113 phy_interface_t interface) 1114 { 1115 return priv->phy_mode[port] != interface; 1116 } 1117 1118 static void sja1105_mac_config(struct dsa_switch *ds, int port, 1119 unsigned int mode, 1120 const struct phylink_link_state *state) 1121 { 1122 struct dsa_port *dp = dsa_to_port(ds, port); 1123 struct sja1105_private *priv = ds->priv; 1124 struct dw_xpcs *xpcs; 1125 1126 if (sja1105_phy_mode_mismatch(priv, port, state->interface)) { 1127 dev_err(ds->dev, "Changing PHY mode to %s not supported!\n", 1128 phy_modes(state->interface)); 1129 return; 1130 } 1131 1132 xpcs = priv->xpcs[port]; 1133 1134 if (xpcs) 1135 phylink_set_pcs(dp->pl, &xpcs->pcs); 1136 } 1137 1138 static void sja1105_mac_link_down(struct dsa_switch *ds, int port, 1139 unsigned int mode, 1140 phy_interface_t interface) 1141 { 1142 sja1105_inhibit_tx(ds->priv, BIT(port), true); 1143 } 1144 1145 static void sja1105_mac_link_up(struct dsa_switch *ds, int port, 1146 unsigned int mode, 1147 phy_interface_t interface, 1148 struct phy_device *phydev, 1149 int speed, int duplex, 1150 bool tx_pause, bool rx_pause) 1151 { 1152 struct sja1105_private *priv = ds->priv; 1153 1154 sja1105_adjust_port_config(priv, port, speed); 1155 1156 sja1105_inhibit_tx(priv, BIT(port), false); 1157 } 1158 1159 static void sja1105_phylink_validate(struct dsa_switch *ds, int port, 1160 unsigned long *supported, 1161 struct phylink_link_state *state) 1162 { 1163 /* Construct a new mask which exhaustively contains all link features 1164 * supported by the MAC, and then apply that (logical AND) to what will 1165 * be sent to the PHY for "marketing". 1166 */ 1167 __ETHTOOL_DECLARE_LINK_MODE_MASK(mask) = { 0, }; 1168 struct sja1105_private *priv = ds->priv; 1169 struct sja1105_xmii_params_entry *mii; 1170 1171 mii = priv->static_config.tables[BLK_IDX_XMII_PARAMS].entries; 1172 1173 /* include/linux/phylink.h says: 1174 * When @state->interface is %PHY_INTERFACE_MODE_NA, phylink 1175 * expects the MAC driver to return all supported link modes. 1176 */ 1177 if (state->interface != PHY_INTERFACE_MODE_NA && 1178 sja1105_phy_mode_mismatch(priv, port, state->interface)) { 1179 bitmap_zero(supported, __ETHTOOL_LINK_MODE_MASK_NBITS); 1180 return; 1181 } 1182 1183 /* The MAC does not support pause frames, and also doesn't 1184 * support half-duplex traffic modes. 1185 */ 1186 phylink_set(mask, Autoneg); 1187 phylink_set(mask, MII); 1188 phylink_set(mask, 10baseT_Full); 1189 phylink_set(mask, 100baseT_Full); 1190 phylink_set(mask, 100baseT1_Full); 1191 if (mii->xmii_mode[port] == XMII_MODE_RGMII || 1192 mii->xmii_mode[port] == XMII_MODE_SGMII) 1193 phylink_set(mask, 1000baseT_Full); 1194 if (priv->info->supports_2500basex[port]) { 1195 phylink_set(mask, 2500baseT_Full); 1196 phylink_set(mask, 2500baseX_Full); 1197 } 1198 1199 bitmap_and(supported, supported, mask, __ETHTOOL_LINK_MODE_MASK_NBITS); 1200 bitmap_and(state->advertising, state->advertising, mask, 1201 __ETHTOOL_LINK_MODE_MASK_NBITS); 1202 } 1203 1204 static int 1205 sja1105_find_static_fdb_entry(struct sja1105_private *priv, int port, 1206 const struct sja1105_l2_lookup_entry *requested) 1207 { 1208 struct sja1105_l2_lookup_entry *l2_lookup; 1209 struct sja1105_table *table; 1210 int i; 1211 1212 table = &priv->static_config.tables[BLK_IDX_L2_LOOKUP]; 1213 l2_lookup = table->entries; 1214 1215 for (i = 0; i < table->entry_count; i++) 1216 if (l2_lookup[i].macaddr == requested->macaddr && 1217 l2_lookup[i].vlanid == requested->vlanid && 1218 l2_lookup[i].destports & BIT(port)) 1219 return i; 1220 1221 return -1; 1222 } 1223 1224 /* We want FDB entries added statically through the bridge command to persist 1225 * across switch resets, which are a common thing during normal SJA1105 1226 * operation. So we have to back them up in the static configuration tables 1227 * and hence apply them on next static config upload... yay! 1228 */ 1229 static int 1230 sja1105_static_fdb_change(struct sja1105_private *priv, int port, 1231 const struct sja1105_l2_lookup_entry *requested, 1232 bool keep) 1233 { 1234 struct sja1105_l2_lookup_entry *l2_lookup; 1235 struct sja1105_table *table; 1236 int rc, match; 1237 1238 table = &priv->static_config.tables[BLK_IDX_L2_LOOKUP]; 1239 1240 match = sja1105_find_static_fdb_entry(priv, port, requested); 1241 if (match < 0) { 1242 /* Can't delete a missing entry. */ 1243 if (!keep) 1244 return 0; 1245 1246 /* No match => new entry */ 1247 rc = sja1105_table_resize(table, table->entry_count + 1); 1248 if (rc) 1249 return rc; 1250 1251 match = table->entry_count - 1; 1252 } 1253 1254 /* Assign pointer after the resize (it may be new memory) */ 1255 l2_lookup = table->entries; 1256 1257 /* We have a match. 1258 * If the job was to add this FDB entry, it's already done (mostly 1259 * anyway, since the port forwarding mask may have changed, case in 1260 * which we update it). 1261 * Otherwise we have to delete it. 1262 */ 1263 if (keep) { 1264 l2_lookup[match] = *requested; 1265 return 0; 1266 } 1267 1268 /* To remove, the strategy is to overwrite the element with 1269 * the last one, and then reduce the array size by 1 1270 */ 1271 l2_lookup[match] = l2_lookup[table->entry_count - 1]; 1272 return sja1105_table_resize(table, table->entry_count - 1); 1273 } 1274 1275 /* First-generation switches have a 4-way set associative TCAM that 1276 * holds the FDB entries. An FDB index spans from 0 to 1023 and is comprised of 1277 * a "bin" (grouping of 4 entries) and a "way" (an entry within a bin). 1278 * For the placement of a newly learnt FDB entry, the switch selects the bin 1279 * based on a hash function, and the way within that bin incrementally. 1280 */ 1281 static int sja1105et_fdb_index(int bin, int way) 1282 { 1283 return bin * SJA1105ET_FDB_BIN_SIZE + way; 1284 } 1285 1286 static int sja1105et_is_fdb_entry_in_bin(struct sja1105_private *priv, int bin, 1287 const u8 *addr, u16 vid, 1288 struct sja1105_l2_lookup_entry *match, 1289 int *last_unused) 1290 { 1291 int way; 1292 1293 for (way = 0; way < SJA1105ET_FDB_BIN_SIZE; way++) { 1294 struct sja1105_l2_lookup_entry l2_lookup = {0}; 1295 int index = sja1105et_fdb_index(bin, way); 1296 1297 /* Skip unused entries, optionally marking them 1298 * into the return value 1299 */ 1300 if (sja1105_dynamic_config_read(priv, BLK_IDX_L2_LOOKUP, 1301 index, &l2_lookup)) { 1302 if (last_unused) 1303 *last_unused = way; 1304 continue; 1305 } 1306 1307 if (l2_lookup.macaddr == ether_addr_to_u64(addr) && 1308 l2_lookup.vlanid == vid) { 1309 if (match) 1310 *match = l2_lookup; 1311 return way; 1312 } 1313 } 1314 /* Return an invalid entry index if not found */ 1315 return -1; 1316 } 1317 1318 int sja1105et_fdb_add(struct dsa_switch *ds, int port, 1319 const unsigned char *addr, u16 vid) 1320 { 1321 struct sja1105_l2_lookup_entry l2_lookup = {0}, tmp; 1322 struct sja1105_private *priv = ds->priv; 1323 struct device *dev = ds->dev; 1324 int last_unused = -1; 1325 int start, end, i; 1326 int bin, way, rc; 1327 1328 bin = sja1105et_fdb_hash(priv, addr, vid); 1329 1330 way = sja1105et_is_fdb_entry_in_bin(priv, bin, addr, vid, 1331 &l2_lookup, &last_unused); 1332 if (way >= 0) { 1333 /* We have an FDB entry. Is our port in the destination 1334 * mask? If yes, we need to do nothing. If not, we need 1335 * to rewrite the entry by adding this port to it. 1336 */ 1337 if ((l2_lookup.destports & BIT(port)) && l2_lookup.lockeds) 1338 return 0; 1339 l2_lookup.destports |= BIT(port); 1340 } else { 1341 int index = sja1105et_fdb_index(bin, way); 1342 1343 /* We don't have an FDB entry. We construct a new one and 1344 * try to find a place for it within the FDB table. 1345 */ 1346 l2_lookup.macaddr = ether_addr_to_u64(addr); 1347 l2_lookup.destports = BIT(port); 1348 l2_lookup.vlanid = vid; 1349 1350 if (last_unused >= 0) { 1351 way = last_unused; 1352 } else { 1353 /* Bin is full, need to evict somebody. 1354 * Choose victim at random. If you get these messages 1355 * often, you may need to consider changing the 1356 * distribution function: 1357 * static_config[BLK_IDX_L2_LOOKUP_PARAMS].entries->poly 1358 */ 1359 get_random_bytes(&way, sizeof(u8)); 1360 way %= SJA1105ET_FDB_BIN_SIZE; 1361 dev_warn(dev, "Warning, FDB bin %d full while adding entry for %pM. Evicting entry %u.\n", 1362 bin, addr, way); 1363 /* Evict entry */ 1364 sja1105_dynamic_config_write(priv, BLK_IDX_L2_LOOKUP, 1365 index, NULL, false); 1366 } 1367 } 1368 l2_lookup.lockeds = true; 1369 l2_lookup.index = sja1105et_fdb_index(bin, way); 1370 1371 rc = sja1105_dynamic_config_write(priv, BLK_IDX_L2_LOOKUP, 1372 l2_lookup.index, &l2_lookup, 1373 true); 1374 if (rc < 0) 1375 return rc; 1376 1377 /* Invalidate a dynamically learned entry if that exists */ 1378 start = sja1105et_fdb_index(bin, 0); 1379 end = sja1105et_fdb_index(bin, way); 1380 1381 for (i = start; i < end; i++) { 1382 rc = sja1105_dynamic_config_read(priv, BLK_IDX_L2_LOOKUP, 1383 i, &tmp); 1384 if (rc == -ENOENT) 1385 continue; 1386 if (rc) 1387 return rc; 1388 1389 if (tmp.macaddr != ether_addr_to_u64(addr) || tmp.vlanid != vid) 1390 continue; 1391 1392 rc = sja1105_dynamic_config_write(priv, BLK_IDX_L2_LOOKUP, 1393 i, NULL, false); 1394 if (rc) 1395 return rc; 1396 1397 break; 1398 } 1399 1400 return sja1105_static_fdb_change(priv, port, &l2_lookup, true); 1401 } 1402 1403 int sja1105et_fdb_del(struct dsa_switch *ds, int port, 1404 const unsigned char *addr, u16 vid) 1405 { 1406 struct sja1105_l2_lookup_entry l2_lookup = {0}; 1407 struct sja1105_private *priv = ds->priv; 1408 int index, bin, way, rc; 1409 bool keep; 1410 1411 bin = sja1105et_fdb_hash(priv, addr, vid); 1412 way = sja1105et_is_fdb_entry_in_bin(priv, bin, addr, vid, 1413 &l2_lookup, NULL); 1414 if (way < 0) 1415 return 0; 1416 index = sja1105et_fdb_index(bin, way); 1417 1418 /* We have an FDB entry. Is our port in the destination mask? If yes, 1419 * we need to remove it. If the resulting port mask becomes empty, we 1420 * need to completely evict the FDB entry. 1421 * Otherwise we just write it back. 1422 */ 1423 l2_lookup.destports &= ~BIT(port); 1424 1425 if (l2_lookup.destports) 1426 keep = true; 1427 else 1428 keep = false; 1429 1430 rc = sja1105_dynamic_config_write(priv, BLK_IDX_L2_LOOKUP, 1431 index, &l2_lookup, keep); 1432 if (rc < 0) 1433 return rc; 1434 1435 return sja1105_static_fdb_change(priv, port, &l2_lookup, keep); 1436 } 1437 1438 int sja1105pqrs_fdb_add(struct dsa_switch *ds, int port, 1439 const unsigned char *addr, u16 vid) 1440 { 1441 struct sja1105_l2_lookup_entry l2_lookup = {0}, tmp; 1442 struct sja1105_private *priv = ds->priv; 1443 int rc, i; 1444 1445 /* Search for an existing entry in the FDB table */ 1446 l2_lookup.macaddr = ether_addr_to_u64(addr); 1447 l2_lookup.vlanid = vid; 1448 l2_lookup.mask_macaddr = GENMASK_ULL(ETH_ALEN * 8 - 1, 0); 1449 l2_lookup.mask_vlanid = VLAN_VID_MASK; 1450 l2_lookup.destports = BIT(port); 1451 1452 tmp = l2_lookup; 1453 1454 rc = sja1105_dynamic_config_read(priv, BLK_IDX_L2_LOOKUP, 1455 SJA1105_SEARCH, &tmp); 1456 if (rc == 0 && tmp.index != SJA1105_MAX_L2_LOOKUP_COUNT - 1) { 1457 /* Found a static entry and this port is already in the entry's 1458 * port mask => job done 1459 */ 1460 if ((tmp.destports & BIT(port)) && tmp.lockeds) 1461 return 0; 1462 1463 l2_lookup = tmp; 1464 1465 /* l2_lookup.index is populated by the switch in case it 1466 * found something. 1467 */ 1468 l2_lookup.destports |= BIT(port); 1469 goto skip_finding_an_index; 1470 } 1471 1472 /* Not found, so try to find an unused spot in the FDB. 1473 * This is slightly inefficient because the strategy is knock-knock at 1474 * every possible position from 0 to 1023. 1475 */ 1476 for (i = 0; i < SJA1105_MAX_L2_LOOKUP_COUNT; i++) { 1477 rc = sja1105_dynamic_config_read(priv, BLK_IDX_L2_LOOKUP, 1478 i, NULL); 1479 if (rc < 0) 1480 break; 1481 } 1482 if (i == SJA1105_MAX_L2_LOOKUP_COUNT) { 1483 dev_err(ds->dev, "FDB is full, cannot add entry.\n"); 1484 return -EINVAL; 1485 } 1486 l2_lookup.index = i; 1487 1488 skip_finding_an_index: 1489 l2_lookup.lockeds = true; 1490 1491 rc = sja1105_dynamic_config_write(priv, BLK_IDX_L2_LOOKUP, 1492 l2_lookup.index, &l2_lookup, 1493 true); 1494 if (rc < 0) 1495 return rc; 1496 1497 /* The switch learns dynamic entries and looks up the FDB left to 1498 * right. It is possible that our addition was concurrent with the 1499 * dynamic learning of the same address, so now that the static entry 1500 * has been installed, we are certain that address learning for this 1501 * particular address has been turned off, so the dynamic entry either 1502 * is in the FDB at an index smaller than the static one, or isn't (it 1503 * can also be at a larger index, but in that case it is inactive 1504 * because the static FDB entry will match first, and the dynamic one 1505 * will eventually age out). Search for a dynamically learned address 1506 * prior to our static one and invalidate it. 1507 */ 1508 tmp = l2_lookup; 1509 1510 rc = sja1105_dynamic_config_read(priv, BLK_IDX_L2_LOOKUP, 1511 SJA1105_SEARCH, &tmp); 1512 if (rc < 0) { 1513 dev_err(ds->dev, 1514 "port %d failed to read back entry for %pM vid %d: %pe\n", 1515 port, addr, vid, ERR_PTR(rc)); 1516 return rc; 1517 } 1518 1519 if (tmp.index < l2_lookup.index) { 1520 rc = sja1105_dynamic_config_write(priv, BLK_IDX_L2_LOOKUP, 1521 tmp.index, NULL, false); 1522 if (rc < 0) 1523 return rc; 1524 } 1525 1526 return sja1105_static_fdb_change(priv, port, &l2_lookup, true); 1527 } 1528 1529 int sja1105pqrs_fdb_del(struct dsa_switch *ds, int port, 1530 const unsigned char *addr, u16 vid) 1531 { 1532 struct sja1105_l2_lookup_entry l2_lookup = {0}; 1533 struct sja1105_private *priv = ds->priv; 1534 bool keep; 1535 int rc; 1536 1537 l2_lookup.macaddr = ether_addr_to_u64(addr); 1538 l2_lookup.vlanid = vid; 1539 l2_lookup.mask_macaddr = GENMASK_ULL(ETH_ALEN * 8 - 1, 0); 1540 l2_lookup.mask_vlanid = VLAN_VID_MASK; 1541 l2_lookup.destports = BIT(port); 1542 1543 rc = sja1105_dynamic_config_read(priv, BLK_IDX_L2_LOOKUP, 1544 SJA1105_SEARCH, &l2_lookup); 1545 if (rc < 0) 1546 return 0; 1547 1548 l2_lookup.destports &= ~BIT(port); 1549 1550 /* Decide whether we remove just this port from the FDB entry, 1551 * or if we remove it completely. 1552 */ 1553 if (l2_lookup.destports) 1554 keep = true; 1555 else 1556 keep = false; 1557 1558 rc = sja1105_dynamic_config_write(priv, BLK_IDX_L2_LOOKUP, 1559 l2_lookup.index, &l2_lookup, keep); 1560 if (rc < 0) 1561 return rc; 1562 1563 return sja1105_static_fdb_change(priv, port, &l2_lookup, keep); 1564 } 1565 1566 static int sja1105_fdb_add(struct dsa_switch *ds, int port, 1567 const unsigned char *addr, u16 vid) 1568 { 1569 struct sja1105_private *priv = ds->priv; 1570 1571 /* dsa_8021q is in effect when the bridge's vlan_filtering isn't, 1572 * so the switch still does some VLAN processing internally. 1573 * But Shared VLAN Learning (SVL) is also active, and it will take 1574 * care of autonomous forwarding between the unique pvid's of each 1575 * port. Here we just make sure that users can't add duplicate FDB 1576 * entries when in this mode - the actual VID doesn't matter except 1577 * for what gets printed in 'bridge fdb show'. In the case of zero, 1578 * no VID gets printed at all. 1579 */ 1580 if (priv->vlan_state != SJA1105_VLAN_FILTERING_FULL) 1581 vid = 0; 1582 1583 return priv->info->fdb_add_cmd(ds, port, addr, vid); 1584 } 1585 1586 static int sja1105_fdb_del(struct dsa_switch *ds, int port, 1587 const unsigned char *addr, u16 vid) 1588 { 1589 struct sja1105_private *priv = ds->priv; 1590 1591 if (priv->vlan_state != SJA1105_VLAN_FILTERING_FULL) 1592 vid = 0; 1593 1594 return priv->info->fdb_del_cmd(ds, port, addr, vid); 1595 } 1596 1597 static int sja1105_fdb_dump(struct dsa_switch *ds, int port, 1598 dsa_fdb_dump_cb_t *cb, void *data) 1599 { 1600 struct sja1105_private *priv = ds->priv; 1601 struct device *dev = ds->dev; 1602 int i; 1603 1604 for (i = 0; i < SJA1105_MAX_L2_LOOKUP_COUNT; i++) { 1605 struct sja1105_l2_lookup_entry l2_lookup = {0}; 1606 u8 macaddr[ETH_ALEN]; 1607 int rc; 1608 1609 rc = sja1105_dynamic_config_read(priv, BLK_IDX_L2_LOOKUP, 1610 i, &l2_lookup); 1611 /* No fdb entry at i, not an issue */ 1612 if (rc == -ENOENT) 1613 continue; 1614 if (rc) { 1615 dev_err(dev, "Failed to dump FDB: %d\n", rc); 1616 return rc; 1617 } 1618 1619 /* FDB dump callback is per port. This means we have to 1620 * disregard a valid entry if it's not for this port, even if 1621 * only to revisit it later. This is inefficient because the 1622 * 1024-sized FDB table needs to be traversed 4 times through 1623 * SPI during a 'bridge fdb show' command. 1624 */ 1625 if (!(l2_lookup.destports & BIT(port))) 1626 continue; 1627 1628 /* We need to hide the FDB entry for unknown multicast */ 1629 if (l2_lookup.macaddr == SJA1105_UNKNOWN_MULTICAST && 1630 l2_lookup.mask_macaddr == SJA1105_UNKNOWN_MULTICAST) 1631 continue; 1632 1633 u64_to_ether_addr(l2_lookup.macaddr, macaddr); 1634 1635 /* We need to hide the dsa_8021q VLANs from the user. */ 1636 if (priv->vlan_state == SJA1105_VLAN_UNAWARE) 1637 l2_lookup.vlanid = 0; 1638 cb(macaddr, l2_lookup.vlanid, l2_lookup.lockeds, data); 1639 } 1640 return 0; 1641 } 1642 1643 static int sja1105_mdb_add(struct dsa_switch *ds, int port, 1644 const struct switchdev_obj_port_mdb *mdb) 1645 { 1646 return sja1105_fdb_add(ds, port, mdb->addr, mdb->vid); 1647 } 1648 1649 static int sja1105_mdb_del(struct dsa_switch *ds, int port, 1650 const struct switchdev_obj_port_mdb *mdb) 1651 { 1652 return sja1105_fdb_del(ds, port, mdb->addr, mdb->vid); 1653 } 1654 1655 /* Common function for unicast and broadcast flood configuration. 1656 * Flooding is configured between each {ingress, egress} port pair, and since 1657 * the bridge's semantics are those of "egress flooding", it means we must 1658 * enable flooding towards this port from all ingress ports that are in the 1659 * same forwarding domain. 1660 */ 1661 static int sja1105_manage_flood_domains(struct sja1105_private *priv) 1662 { 1663 struct sja1105_l2_forwarding_entry *l2_fwd; 1664 struct dsa_switch *ds = priv->ds; 1665 int from, to, rc; 1666 1667 l2_fwd = priv->static_config.tables[BLK_IDX_L2_FORWARDING].entries; 1668 1669 for (from = 0; from < ds->num_ports; from++) { 1670 u64 fl_domain = 0, bc_domain = 0; 1671 1672 for (to = 0; to < priv->ds->num_ports; to++) { 1673 if (!sja1105_can_forward(l2_fwd, from, to)) 1674 continue; 1675 1676 if (priv->ucast_egress_floods & BIT(to)) 1677 fl_domain |= BIT(to); 1678 if (priv->bcast_egress_floods & BIT(to)) 1679 bc_domain |= BIT(to); 1680 } 1681 1682 /* Nothing changed, nothing to do */ 1683 if (l2_fwd[from].fl_domain == fl_domain && 1684 l2_fwd[from].bc_domain == bc_domain) 1685 continue; 1686 1687 l2_fwd[from].fl_domain = fl_domain; 1688 l2_fwd[from].bc_domain = bc_domain; 1689 1690 rc = sja1105_dynamic_config_write(priv, BLK_IDX_L2_FORWARDING, 1691 from, &l2_fwd[from], true); 1692 if (rc < 0) 1693 return rc; 1694 } 1695 1696 return 0; 1697 } 1698 1699 static int sja1105_bridge_member(struct dsa_switch *ds, int port, 1700 struct net_device *br, bool member) 1701 { 1702 struct sja1105_l2_forwarding_entry *l2_fwd; 1703 struct sja1105_private *priv = ds->priv; 1704 int i, rc; 1705 1706 l2_fwd = priv->static_config.tables[BLK_IDX_L2_FORWARDING].entries; 1707 1708 for (i = 0; i < ds->num_ports; i++) { 1709 /* Add this port to the forwarding matrix of the 1710 * other ports in the same bridge, and viceversa. 1711 */ 1712 if (!dsa_is_user_port(ds, i)) 1713 continue; 1714 /* For the ports already under the bridge, only one thing needs 1715 * to be done, and that is to add this port to their 1716 * reachability domain. So we can perform the SPI write for 1717 * them immediately. However, for this port itself (the one 1718 * that is new to the bridge), we need to add all other ports 1719 * to its reachability domain. So we do that incrementally in 1720 * this loop, and perform the SPI write only at the end, once 1721 * the domain contains all other bridge ports. 1722 */ 1723 if (i == port) 1724 continue; 1725 if (dsa_to_port(ds, i)->bridge_dev != br) 1726 continue; 1727 sja1105_port_allow_traffic(l2_fwd, i, port, member); 1728 sja1105_port_allow_traffic(l2_fwd, port, i, member); 1729 1730 rc = sja1105_dynamic_config_write(priv, BLK_IDX_L2_FORWARDING, 1731 i, &l2_fwd[i], true); 1732 if (rc < 0) 1733 return rc; 1734 } 1735 1736 rc = sja1105_dynamic_config_write(priv, BLK_IDX_L2_FORWARDING, 1737 port, &l2_fwd[port], true); 1738 if (rc) 1739 return rc; 1740 1741 return sja1105_manage_flood_domains(priv); 1742 } 1743 1744 static void sja1105_bridge_stp_state_set(struct dsa_switch *ds, int port, 1745 u8 state) 1746 { 1747 struct sja1105_private *priv = ds->priv; 1748 struct sja1105_mac_config_entry *mac; 1749 1750 mac = priv->static_config.tables[BLK_IDX_MAC_CONFIG].entries; 1751 1752 switch (state) { 1753 case BR_STATE_DISABLED: 1754 case BR_STATE_BLOCKING: 1755 /* From UM10944 description of DRPDTAG (why put this there?): 1756 * "Management traffic flows to the port regardless of the state 1757 * of the INGRESS flag". So BPDUs are still be allowed to pass. 1758 * At the moment no difference between DISABLED and BLOCKING. 1759 */ 1760 mac[port].ingress = false; 1761 mac[port].egress = false; 1762 mac[port].dyn_learn = false; 1763 break; 1764 case BR_STATE_LISTENING: 1765 mac[port].ingress = true; 1766 mac[port].egress = false; 1767 mac[port].dyn_learn = false; 1768 break; 1769 case BR_STATE_LEARNING: 1770 mac[port].ingress = true; 1771 mac[port].egress = false; 1772 mac[port].dyn_learn = !!(priv->learn_ena & BIT(port)); 1773 break; 1774 case BR_STATE_FORWARDING: 1775 mac[port].ingress = true; 1776 mac[port].egress = true; 1777 mac[port].dyn_learn = !!(priv->learn_ena & BIT(port)); 1778 break; 1779 default: 1780 dev_err(ds->dev, "invalid STP state: %d\n", state); 1781 return; 1782 } 1783 1784 sja1105_dynamic_config_write(priv, BLK_IDX_MAC_CONFIG, port, 1785 &mac[port], true); 1786 } 1787 1788 static int sja1105_bridge_join(struct dsa_switch *ds, int port, 1789 struct net_device *br) 1790 { 1791 return sja1105_bridge_member(ds, port, br, true); 1792 } 1793 1794 static void sja1105_bridge_leave(struct dsa_switch *ds, int port, 1795 struct net_device *br) 1796 { 1797 sja1105_bridge_member(ds, port, br, false); 1798 } 1799 1800 #define BYTES_PER_KBIT (1000LL / 8) 1801 1802 static int sja1105_find_unused_cbs_shaper(struct sja1105_private *priv) 1803 { 1804 int i; 1805 1806 for (i = 0; i < priv->info->num_cbs_shapers; i++) 1807 if (!priv->cbs[i].idle_slope && !priv->cbs[i].send_slope) 1808 return i; 1809 1810 return -1; 1811 } 1812 1813 static int sja1105_delete_cbs_shaper(struct sja1105_private *priv, int port, 1814 int prio) 1815 { 1816 int i; 1817 1818 for (i = 0; i < priv->info->num_cbs_shapers; i++) { 1819 struct sja1105_cbs_entry *cbs = &priv->cbs[i]; 1820 1821 if (cbs->port == port && cbs->prio == prio) { 1822 memset(cbs, 0, sizeof(*cbs)); 1823 return sja1105_dynamic_config_write(priv, BLK_IDX_CBS, 1824 i, cbs, true); 1825 } 1826 } 1827 1828 return 0; 1829 } 1830 1831 static int sja1105_setup_tc_cbs(struct dsa_switch *ds, int port, 1832 struct tc_cbs_qopt_offload *offload) 1833 { 1834 struct sja1105_private *priv = ds->priv; 1835 struct sja1105_cbs_entry *cbs; 1836 int index; 1837 1838 if (!offload->enable) 1839 return sja1105_delete_cbs_shaper(priv, port, offload->queue); 1840 1841 index = sja1105_find_unused_cbs_shaper(priv); 1842 if (index < 0) 1843 return -ENOSPC; 1844 1845 cbs = &priv->cbs[index]; 1846 cbs->port = port; 1847 cbs->prio = offload->queue; 1848 /* locredit and sendslope are negative by definition. In hardware, 1849 * positive values must be provided, and the negative sign is implicit. 1850 */ 1851 cbs->credit_hi = offload->hicredit; 1852 cbs->credit_lo = abs(offload->locredit); 1853 /* User space is in kbits/sec, hardware in bytes/sec */ 1854 cbs->idle_slope = offload->idleslope * BYTES_PER_KBIT; 1855 cbs->send_slope = abs(offload->sendslope * BYTES_PER_KBIT); 1856 /* Convert the negative values from 64-bit 2's complement 1857 * to 32-bit 2's complement (for the case of 0x80000000 whose 1858 * negative is still negative). 1859 */ 1860 cbs->credit_lo &= GENMASK_ULL(31, 0); 1861 cbs->send_slope &= GENMASK_ULL(31, 0); 1862 1863 return sja1105_dynamic_config_write(priv, BLK_IDX_CBS, index, cbs, 1864 true); 1865 } 1866 1867 static int sja1105_reload_cbs(struct sja1105_private *priv) 1868 { 1869 int rc = 0, i; 1870 1871 /* The credit based shapers are only allocated if 1872 * CONFIG_NET_SCH_CBS is enabled. 1873 */ 1874 if (!priv->cbs) 1875 return 0; 1876 1877 for (i = 0; i < priv->info->num_cbs_shapers; i++) { 1878 struct sja1105_cbs_entry *cbs = &priv->cbs[i]; 1879 1880 if (!cbs->idle_slope && !cbs->send_slope) 1881 continue; 1882 1883 rc = sja1105_dynamic_config_write(priv, BLK_IDX_CBS, i, cbs, 1884 true); 1885 if (rc) 1886 break; 1887 } 1888 1889 return rc; 1890 } 1891 1892 static const char * const sja1105_reset_reasons[] = { 1893 [SJA1105_VLAN_FILTERING] = "VLAN filtering", 1894 [SJA1105_RX_HWTSTAMPING] = "RX timestamping", 1895 [SJA1105_AGEING_TIME] = "Ageing time", 1896 [SJA1105_SCHEDULING] = "Time-aware scheduling", 1897 [SJA1105_BEST_EFFORT_POLICING] = "Best-effort policing", 1898 [SJA1105_VIRTUAL_LINKS] = "Virtual links", 1899 }; 1900 1901 /* For situations where we need to change a setting at runtime that is only 1902 * available through the static configuration, resetting the switch in order 1903 * to upload the new static config is unavoidable. Back up the settings we 1904 * modify at runtime (currently only MAC) and restore them after uploading, 1905 * such that this operation is relatively seamless. 1906 */ 1907 int sja1105_static_config_reload(struct sja1105_private *priv, 1908 enum sja1105_reset_reason reason) 1909 { 1910 struct ptp_system_timestamp ptp_sts_before; 1911 struct ptp_system_timestamp ptp_sts_after; 1912 int speed_mbps[SJA1105_MAX_NUM_PORTS]; 1913 u16 bmcr[SJA1105_MAX_NUM_PORTS] = {0}; 1914 struct sja1105_mac_config_entry *mac; 1915 struct dsa_switch *ds = priv->ds; 1916 s64 t1, t2, t3, t4; 1917 s64 t12, t34; 1918 int rc, i; 1919 s64 now; 1920 1921 mutex_lock(&priv->mgmt_lock); 1922 1923 mac = priv->static_config.tables[BLK_IDX_MAC_CONFIG].entries; 1924 1925 /* Back up the dynamic link speed changed by sja1105_adjust_port_config 1926 * in order to temporarily restore it to SJA1105_SPEED_AUTO - which the 1927 * switch wants to see in the static config in order to allow us to 1928 * change it through the dynamic interface later. 1929 */ 1930 for (i = 0; i < ds->num_ports; i++) { 1931 u32 reg_addr = mdiobus_c45_addr(MDIO_MMD_VEND2, MDIO_CTRL1); 1932 1933 speed_mbps[i] = sja1105_port_speed_to_ethtool(priv, 1934 mac[i].speed); 1935 mac[i].speed = priv->info->port_speed[SJA1105_SPEED_AUTO]; 1936 1937 if (priv->xpcs[i]) 1938 bmcr[i] = mdiobus_read(priv->mdio_pcs, i, reg_addr); 1939 } 1940 1941 /* No PTP operations can run right now */ 1942 mutex_lock(&priv->ptp_data.lock); 1943 1944 rc = __sja1105_ptp_gettimex(ds, &now, &ptp_sts_before); 1945 if (rc < 0) { 1946 mutex_unlock(&priv->ptp_data.lock); 1947 goto out; 1948 } 1949 1950 /* Reset switch and send updated static configuration */ 1951 rc = sja1105_static_config_upload(priv); 1952 if (rc < 0) { 1953 mutex_unlock(&priv->ptp_data.lock); 1954 goto out; 1955 } 1956 1957 rc = __sja1105_ptp_settime(ds, 0, &ptp_sts_after); 1958 if (rc < 0) { 1959 mutex_unlock(&priv->ptp_data.lock); 1960 goto out; 1961 } 1962 1963 t1 = timespec64_to_ns(&ptp_sts_before.pre_ts); 1964 t2 = timespec64_to_ns(&ptp_sts_before.post_ts); 1965 t3 = timespec64_to_ns(&ptp_sts_after.pre_ts); 1966 t4 = timespec64_to_ns(&ptp_sts_after.post_ts); 1967 /* Mid point, corresponds to pre-reset PTPCLKVAL */ 1968 t12 = t1 + (t2 - t1) / 2; 1969 /* Mid point, corresponds to post-reset PTPCLKVAL, aka 0 */ 1970 t34 = t3 + (t4 - t3) / 2; 1971 /* Advance PTPCLKVAL by the time it took since its readout */ 1972 now += (t34 - t12); 1973 1974 __sja1105_ptp_adjtime(ds, now); 1975 1976 mutex_unlock(&priv->ptp_data.lock); 1977 1978 dev_info(priv->ds->dev, 1979 "Reset switch and programmed static config. Reason: %s\n", 1980 sja1105_reset_reasons[reason]); 1981 1982 /* Configure the CGU (PLLs) for MII and RMII PHYs. 1983 * For these interfaces there is no dynamic configuration 1984 * needed, since PLLs have same settings at all speeds. 1985 */ 1986 if (priv->info->clocking_setup) { 1987 rc = priv->info->clocking_setup(priv); 1988 if (rc < 0) 1989 goto out; 1990 } 1991 1992 for (i = 0; i < ds->num_ports; i++) { 1993 struct dw_xpcs *xpcs = priv->xpcs[i]; 1994 unsigned int mode; 1995 1996 rc = sja1105_adjust_port_config(priv, i, speed_mbps[i]); 1997 if (rc < 0) 1998 goto out; 1999 2000 if (!xpcs) 2001 continue; 2002 2003 if (bmcr[i] & BMCR_ANENABLE) 2004 mode = MLO_AN_INBAND; 2005 else if (priv->fixed_link[i]) 2006 mode = MLO_AN_FIXED; 2007 else 2008 mode = MLO_AN_PHY; 2009 2010 rc = xpcs_do_config(xpcs, priv->phy_mode[i], mode); 2011 if (rc < 0) 2012 goto out; 2013 2014 if (!phylink_autoneg_inband(mode)) { 2015 int speed = SPEED_UNKNOWN; 2016 2017 if (priv->phy_mode[i] == PHY_INTERFACE_MODE_2500BASEX) 2018 speed = SPEED_2500; 2019 else if (bmcr[i] & BMCR_SPEED1000) 2020 speed = SPEED_1000; 2021 else if (bmcr[i] & BMCR_SPEED100) 2022 speed = SPEED_100; 2023 else 2024 speed = SPEED_10; 2025 2026 xpcs_link_up(&xpcs->pcs, mode, priv->phy_mode[i], 2027 speed, DUPLEX_FULL); 2028 } 2029 } 2030 2031 rc = sja1105_reload_cbs(priv); 2032 if (rc < 0) 2033 goto out; 2034 out: 2035 mutex_unlock(&priv->mgmt_lock); 2036 2037 return rc; 2038 } 2039 2040 static int sja1105_pvid_apply(struct sja1105_private *priv, int port, u16 pvid) 2041 { 2042 struct sja1105_mac_config_entry *mac; 2043 2044 mac = priv->static_config.tables[BLK_IDX_MAC_CONFIG].entries; 2045 2046 mac[port].vlanid = pvid; 2047 2048 return sja1105_dynamic_config_write(priv, BLK_IDX_MAC_CONFIG, port, 2049 &mac[port], true); 2050 } 2051 2052 static int sja1105_crosschip_bridge_join(struct dsa_switch *ds, 2053 int tree_index, int sw_index, 2054 int other_port, struct net_device *br) 2055 { 2056 struct dsa_switch *other_ds = dsa_switch_find(tree_index, sw_index); 2057 struct sja1105_private *other_priv = other_ds->priv; 2058 struct sja1105_private *priv = ds->priv; 2059 int port, rc; 2060 2061 if (other_ds->ops != &sja1105_switch_ops) 2062 return 0; 2063 2064 for (port = 0; port < ds->num_ports; port++) { 2065 if (!dsa_is_user_port(ds, port)) 2066 continue; 2067 if (dsa_to_port(ds, port)->bridge_dev != br) 2068 continue; 2069 2070 rc = dsa_8021q_crosschip_bridge_join(priv->dsa_8021q_ctx, 2071 port, 2072 other_priv->dsa_8021q_ctx, 2073 other_port); 2074 if (rc) 2075 return rc; 2076 2077 rc = dsa_8021q_crosschip_bridge_join(other_priv->dsa_8021q_ctx, 2078 other_port, 2079 priv->dsa_8021q_ctx, 2080 port); 2081 if (rc) 2082 return rc; 2083 } 2084 2085 return 0; 2086 } 2087 2088 static void sja1105_crosschip_bridge_leave(struct dsa_switch *ds, 2089 int tree_index, int sw_index, 2090 int other_port, 2091 struct net_device *br) 2092 { 2093 struct dsa_switch *other_ds = dsa_switch_find(tree_index, sw_index); 2094 struct sja1105_private *other_priv = other_ds->priv; 2095 struct sja1105_private *priv = ds->priv; 2096 int port; 2097 2098 if (other_ds->ops != &sja1105_switch_ops) 2099 return; 2100 2101 for (port = 0; port < ds->num_ports; port++) { 2102 if (!dsa_is_user_port(ds, port)) 2103 continue; 2104 if (dsa_to_port(ds, port)->bridge_dev != br) 2105 continue; 2106 2107 dsa_8021q_crosschip_bridge_leave(priv->dsa_8021q_ctx, port, 2108 other_priv->dsa_8021q_ctx, 2109 other_port); 2110 2111 dsa_8021q_crosschip_bridge_leave(other_priv->dsa_8021q_ctx, 2112 other_port, 2113 priv->dsa_8021q_ctx, port); 2114 } 2115 } 2116 2117 static int sja1105_setup_8021q_tagging(struct dsa_switch *ds, bool enabled) 2118 { 2119 struct sja1105_private *priv = ds->priv; 2120 int rc; 2121 2122 rc = dsa_8021q_setup(priv->dsa_8021q_ctx, enabled); 2123 if (rc) 2124 return rc; 2125 2126 dev_info(ds->dev, "%s switch tagging\n", 2127 enabled ? "Enabled" : "Disabled"); 2128 return 0; 2129 } 2130 2131 static enum dsa_tag_protocol 2132 sja1105_get_tag_protocol(struct dsa_switch *ds, int port, 2133 enum dsa_tag_protocol mp) 2134 { 2135 struct sja1105_private *priv = ds->priv; 2136 2137 return priv->info->tag_proto; 2138 } 2139 2140 static int sja1105_find_free_subvlan(u16 *subvlan_map, bool pvid) 2141 { 2142 int subvlan; 2143 2144 if (pvid) 2145 return 0; 2146 2147 for (subvlan = 1; subvlan < DSA_8021Q_N_SUBVLAN; subvlan++) 2148 if (subvlan_map[subvlan] == VLAN_N_VID) 2149 return subvlan; 2150 2151 return -1; 2152 } 2153 2154 static int sja1105_find_subvlan(u16 *subvlan_map, u16 vid) 2155 { 2156 int subvlan; 2157 2158 for (subvlan = 0; subvlan < DSA_8021Q_N_SUBVLAN; subvlan++) 2159 if (subvlan_map[subvlan] == vid) 2160 return subvlan; 2161 2162 return -1; 2163 } 2164 2165 static int sja1105_find_committed_subvlan(struct sja1105_private *priv, 2166 int port, u16 vid) 2167 { 2168 struct sja1105_port *sp = &priv->ports[port]; 2169 2170 return sja1105_find_subvlan(sp->subvlan_map, vid); 2171 } 2172 2173 static void sja1105_init_subvlan_map(u16 *subvlan_map) 2174 { 2175 int subvlan; 2176 2177 for (subvlan = 0; subvlan < DSA_8021Q_N_SUBVLAN; subvlan++) 2178 subvlan_map[subvlan] = VLAN_N_VID; 2179 } 2180 2181 static void sja1105_commit_subvlan_map(struct sja1105_private *priv, int port, 2182 u16 *subvlan_map) 2183 { 2184 struct sja1105_port *sp = &priv->ports[port]; 2185 int subvlan; 2186 2187 for (subvlan = 0; subvlan < DSA_8021Q_N_SUBVLAN; subvlan++) 2188 sp->subvlan_map[subvlan] = subvlan_map[subvlan]; 2189 } 2190 2191 static int sja1105_is_vlan_configured(struct sja1105_private *priv, u16 vid) 2192 { 2193 struct sja1105_vlan_lookup_entry *vlan; 2194 int count, i; 2195 2196 vlan = priv->static_config.tables[BLK_IDX_VLAN_LOOKUP].entries; 2197 count = priv->static_config.tables[BLK_IDX_VLAN_LOOKUP].entry_count; 2198 2199 for (i = 0; i < count; i++) 2200 if (vlan[i].vlanid == vid) 2201 return i; 2202 2203 /* Return an invalid entry index if not found */ 2204 return -1; 2205 } 2206 2207 static int 2208 sja1105_find_retagging_entry(struct sja1105_retagging_entry *retagging, 2209 int count, int from_port, u16 from_vid, 2210 u16 to_vid) 2211 { 2212 int i; 2213 2214 for (i = 0; i < count; i++) 2215 if (retagging[i].ing_port == BIT(from_port) && 2216 retagging[i].vlan_ing == from_vid && 2217 retagging[i].vlan_egr == to_vid) 2218 return i; 2219 2220 /* Return an invalid entry index if not found */ 2221 return -1; 2222 } 2223 2224 static int sja1105_commit_vlans(struct sja1105_private *priv, 2225 struct sja1105_vlan_lookup_entry *new_vlan, 2226 struct sja1105_retagging_entry *new_retagging, 2227 int num_retagging) 2228 { 2229 struct sja1105_retagging_entry *retagging; 2230 struct sja1105_vlan_lookup_entry *vlan; 2231 struct sja1105_table *table; 2232 int num_vlans = 0; 2233 int rc, i, k = 0; 2234 2235 /* VLAN table */ 2236 table = &priv->static_config.tables[BLK_IDX_VLAN_LOOKUP]; 2237 vlan = table->entries; 2238 2239 for (i = 0; i < VLAN_N_VID; i++) { 2240 int match = sja1105_is_vlan_configured(priv, i); 2241 2242 if (new_vlan[i].vlanid != VLAN_N_VID) 2243 num_vlans++; 2244 2245 if (new_vlan[i].vlanid == VLAN_N_VID && match >= 0) { 2246 /* Was there before, no longer is. Delete */ 2247 dev_dbg(priv->ds->dev, "Deleting VLAN %d\n", i); 2248 rc = sja1105_dynamic_config_write(priv, 2249 BLK_IDX_VLAN_LOOKUP, 2250 i, &vlan[match], false); 2251 if (rc < 0) 2252 return rc; 2253 } else if (new_vlan[i].vlanid != VLAN_N_VID) { 2254 /* Nothing changed, don't do anything */ 2255 if (match >= 0 && 2256 vlan[match].vlanid == new_vlan[i].vlanid && 2257 vlan[match].tag_port == new_vlan[i].tag_port && 2258 vlan[match].vlan_bc == new_vlan[i].vlan_bc && 2259 vlan[match].vmemb_port == new_vlan[i].vmemb_port) 2260 continue; 2261 /* Update entry */ 2262 dev_dbg(priv->ds->dev, "Updating VLAN %d\n", i); 2263 rc = sja1105_dynamic_config_write(priv, 2264 BLK_IDX_VLAN_LOOKUP, 2265 i, &new_vlan[i], 2266 true); 2267 if (rc < 0) 2268 return rc; 2269 } 2270 } 2271 2272 if (table->entry_count) 2273 kfree(table->entries); 2274 2275 table->entries = kcalloc(num_vlans, table->ops->unpacked_entry_size, 2276 GFP_KERNEL); 2277 if (!table->entries) 2278 return -ENOMEM; 2279 2280 table->entry_count = num_vlans; 2281 vlan = table->entries; 2282 2283 for (i = 0; i < VLAN_N_VID; i++) { 2284 if (new_vlan[i].vlanid == VLAN_N_VID) 2285 continue; 2286 vlan[k++] = new_vlan[i]; 2287 } 2288 2289 /* VLAN Retagging Table */ 2290 table = &priv->static_config.tables[BLK_IDX_RETAGGING]; 2291 retagging = table->entries; 2292 2293 for (i = 0; i < table->entry_count; i++) { 2294 rc = sja1105_dynamic_config_write(priv, BLK_IDX_RETAGGING, 2295 i, &retagging[i], false); 2296 if (rc) 2297 return rc; 2298 } 2299 2300 if (table->entry_count) 2301 kfree(table->entries); 2302 2303 table->entries = kcalloc(num_retagging, table->ops->unpacked_entry_size, 2304 GFP_KERNEL); 2305 if (!table->entries) 2306 return -ENOMEM; 2307 2308 table->entry_count = num_retagging; 2309 retagging = table->entries; 2310 2311 for (i = 0; i < num_retagging; i++) { 2312 retagging[i] = new_retagging[i]; 2313 2314 /* Update entry */ 2315 rc = sja1105_dynamic_config_write(priv, BLK_IDX_RETAGGING, 2316 i, &retagging[i], true); 2317 if (rc < 0) 2318 return rc; 2319 } 2320 2321 return 0; 2322 } 2323 2324 struct sja1105_crosschip_vlan { 2325 struct list_head list; 2326 u16 vid; 2327 bool untagged; 2328 int port; 2329 int other_port; 2330 struct dsa_8021q_context *other_ctx; 2331 }; 2332 2333 struct sja1105_crosschip_switch { 2334 struct list_head list; 2335 struct dsa_8021q_context *other_ctx; 2336 }; 2337 2338 static int sja1105_commit_pvid(struct sja1105_private *priv) 2339 { 2340 struct sja1105_bridge_vlan *v; 2341 struct list_head *vlan_list; 2342 int rc = 0; 2343 2344 if (priv->vlan_state == SJA1105_VLAN_FILTERING_FULL) 2345 vlan_list = &priv->bridge_vlans; 2346 else 2347 vlan_list = &priv->dsa_8021q_vlans; 2348 2349 list_for_each_entry(v, vlan_list, list) { 2350 if (v->pvid) { 2351 rc = sja1105_pvid_apply(priv, v->port, v->vid); 2352 if (rc) 2353 break; 2354 } 2355 } 2356 2357 return rc; 2358 } 2359 2360 static int 2361 sja1105_build_bridge_vlans(struct sja1105_private *priv, 2362 struct sja1105_vlan_lookup_entry *new_vlan) 2363 { 2364 struct sja1105_bridge_vlan *v; 2365 2366 if (priv->vlan_state == SJA1105_VLAN_UNAWARE) 2367 return 0; 2368 2369 list_for_each_entry(v, &priv->bridge_vlans, list) { 2370 int match = v->vid; 2371 2372 new_vlan[match].vlanid = v->vid; 2373 new_vlan[match].vmemb_port |= BIT(v->port); 2374 new_vlan[match].vlan_bc |= BIT(v->port); 2375 if (!v->untagged) 2376 new_vlan[match].tag_port |= BIT(v->port); 2377 new_vlan[match].type_entry = SJA1110_VLAN_D_TAG; 2378 } 2379 2380 return 0; 2381 } 2382 2383 static int 2384 sja1105_build_dsa_8021q_vlans(struct sja1105_private *priv, 2385 struct sja1105_vlan_lookup_entry *new_vlan) 2386 { 2387 struct sja1105_bridge_vlan *v; 2388 2389 if (priv->vlan_state == SJA1105_VLAN_FILTERING_FULL) 2390 return 0; 2391 2392 list_for_each_entry(v, &priv->dsa_8021q_vlans, list) { 2393 int match = v->vid; 2394 2395 new_vlan[match].vlanid = v->vid; 2396 new_vlan[match].vmemb_port |= BIT(v->port); 2397 new_vlan[match].vlan_bc |= BIT(v->port); 2398 if (!v->untagged) 2399 new_vlan[match].tag_port |= BIT(v->port); 2400 new_vlan[match].type_entry = SJA1110_VLAN_D_TAG; 2401 } 2402 2403 return 0; 2404 } 2405 2406 static int sja1105_build_subvlans(struct sja1105_private *priv, 2407 u16 subvlan_map[][DSA_8021Q_N_SUBVLAN], 2408 struct sja1105_vlan_lookup_entry *new_vlan, 2409 struct sja1105_retagging_entry *new_retagging, 2410 int *num_retagging) 2411 { 2412 struct sja1105_bridge_vlan *v; 2413 int k = *num_retagging; 2414 2415 if (priv->vlan_state != SJA1105_VLAN_BEST_EFFORT) 2416 return 0; 2417 2418 list_for_each_entry(v, &priv->bridge_vlans, list) { 2419 int upstream = dsa_upstream_port(priv->ds, v->port); 2420 int match, subvlan; 2421 u16 rx_vid; 2422 2423 /* Only sub-VLANs on user ports need to be applied. 2424 * Bridge VLANs also include VLANs added automatically 2425 * by DSA on the CPU port. 2426 */ 2427 if (!dsa_is_user_port(priv->ds, v->port)) 2428 continue; 2429 2430 subvlan = sja1105_find_subvlan(subvlan_map[v->port], 2431 v->vid); 2432 if (subvlan < 0) { 2433 subvlan = sja1105_find_free_subvlan(subvlan_map[v->port], 2434 v->pvid); 2435 if (subvlan < 0) { 2436 dev_err(priv->ds->dev, "No more free subvlans\n"); 2437 return -ENOSPC; 2438 } 2439 } 2440 2441 rx_vid = dsa_8021q_rx_vid_subvlan(priv->ds, v->port, subvlan); 2442 2443 /* @v->vid on @v->port needs to be retagged to @rx_vid 2444 * on @upstream. Assume @v->vid on @v->port and on 2445 * @upstream was already configured by the previous 2446 * iteration over bridge_vlans. 2447 */ 2448 match = rx_vid; 2449 new_vlan[match].vlanid = rx_vid; 2450 new_vlan[match].vmemb_port |= BIT(v->port); 2451 new_vlan[match].vmemb_port |= BIT(upstream); 2452 new_vlan[match].vlan_bc |= BIT(v->port); 2453 new_vlan[match].vlan_bc |= BIT(upstream); 2454 /* The "untagged" flag is set the same as for the 2455 * original VLAN 2456 */ 2457 if (!v->untagged) 2458 new_vlan[match].tag_port |= BIT(v->port); 2459 /* But it's always tagged towards the CPU */ 2460 new_vlan[match].tag_port |= BIT(upstream); 2461 new_vlan[match].type_entry = SJA1110_VLAN_D_TAG; 2462 2463 /* The Retagging Table generates packet *clones* with 2464 * the new VLAN. This is a very odd hardware quirk 2465 * which we need to suppress by dropping the original 2466 * packet. 2467 * Deny egress of the original VLAN towards the CPU 2468 * port. This will force the switch to drop it, and 2469 * we'll see only the retagged packets. 2470 */ 2471 match = v->vid; 2472 new_vlan[match].vlan_bc &= ~BIT(upstream); 2473 2474 /* And the retagging itself */ 2475 new_retagging[k].vlan_ing = v->vid; 2476 new_retagging[k].vlan_egr = rx_vid; 2477 new_retagging[k].ing_port = BIT(v->port); 2478 new_retagging[k].egr_port = BIT(upstream); 2479 if (k++ == SJA1105_MAX_RETAGGING_COUNT) { 2480 dev_err(priv->ds->dev, "No more retagging rules\n"); 2481 return -ENOSPC; 2482 } 2483 2484 subvlan_map[v->port][subvlan] = v->vid; 2485 } 2486 2487 *num_retagging = k; 2488 2489 return 0; 2490 } 2491 2492 /* Sadly, in crosschip scenarios where the CPU port is also the link to another 2493 * switch, we should retag backwards (the dsa_8021q vid to the original vid) on 2494 * the CPU port of neighbour switches. 2495 */ 2496 static int 2497 sja1105_build_crosschip_subvlans(struct sja1105_private *priv, 2498 struct sja1105_vlan_lookup_entry *new_vlan, 2499 struct sja1105_retagging_entry *new_retagging, 2500 int *num_retagging) 2501 { 2502 struct sja1105_crosschip_vlan *tmp, *pos; 2503 struct dsa_8021q_crosschip_link *c; 2504 struct sja1105_bridge_vlan *v, *w; 2505 struct list_head crosschip_vlans; 2506 int k = *num_retagging; 2507 int rc = 0; 2508 2509 if (priv->vlan_state != SJA1105_VLAN_BEST_EFFORT) 2510 return 0; 2511 2512 INIT_LIST_HEAD(&crosschip_vlans); 2513 2514 list_for_each_entry(c, &priv->dsa_8021q_ctx->crosschip_links, list) { 2515 struct sja1105_private *other_priv = c->other_ctx->ds->priv; 2516 2517 if (other_priv->vlan_state == SJA1105_VLAN_FILTERING_FULL) 2518 continue; 2519 2520 /* Crosschip links are also added to the CPU ports. 2521 * Ignore those. 2522 */ 2523 if (!dsa_is_user_port(priv->ds, c->port)) 2524 continue; 2525 if (!dsa_is_user_port(c->other_ctx->ds, c->other_port)) 2526 continue; 2527 2528 /* Search for VLANs on the remote port */ 2529 list_for_each_entry(v, &other_priv->bridge_vlans, list) { 2530 bool already_added = false; 2531 bool we_have_it = false; 2532 2533 if (v->port != c->other_port) 2534 continue; 2535 2536 /* If @v is a pvid on @other_ds, it does not need 2537 * re-retagging, because its SVL field is 0 and we 2538 * already allow that, via the dsa_8021q crosschip 2539 * links. 2540 */ 2541 if (v->pvid) 2542 continue; 2543 2544 /* Search for the VLAN on our local port */ 2545 list_for_each_entry(w, &priv->bridge_vlans, list) { 2546 if (w->port == c->port && w->vid == v->vid) { 2547 we_have_it = true; 2548 break; 2549 } 2550 } 2551 2552 if (!we_have_it) 2553 continue; 2554 2555 list_for_each_entry(tmp, &crosschip_vlans, list) { 2556 if (tmp->vid == v->vid && 2557 tmp->untagged == v->untagged && 2558 tmp->port == c->port && 2559 tmp->other_port == v->port && 2560 tmp->other_ctx == c->other_ctx) { 2561 already_added = true; 2562 break; 2563 } 2564 } 2565 2566 if (already_added) 2567 continue; 2568 2569 tmp = kzalloc(sizeof(*tmp), GFP_KERNEL); 2570 if (!tmp) { 2571 dev_err(priv->ds->dev, "Failed to allocate memory\n"); 2572 rc = -ENOMEM; 2573 goto out; 2574 } 2575 tmp->vid = v->vid; 2576 tmp->port = c->port; 2577 tmp->other_port = v->port; 2578 tmp->other_ctx = c->other_ctx; 2579 tmp->untagged = v->untagged; 2580 list_add(&tmp->list, &crosschip_vlans); 2581 } 2582 } 2583 2584 list_for_each_entry(tmp, &crosschip_vlans, list) { 2585 struct sja1105_private *other_priv = tmp->other_ctx->ds->priv; 2586 int upstream = dsa_upstream_port(priv->ds, tmp->port); 2587 int match, subvlan; 2588 u16 rx_vid; 2589 2590 subvlan = sja1105_find_committed_subvlan(other_priv, 2591 tmp->other_port, 2592 tmp->vid); 2593 /* If this happens, it's a bug. The neighbour switch does not 2594 * have a subvlan for tmp->vid on tmp->other_port, but it 2595 * should, since we already checked for its vlan_state. 2596 */ 2597 if (WARN_ON(subvlan < 0)) { 2598 rc = -EINVAL; 2599 goto out; 2600 } 2601 2602 rx_vid = dsa_8021q_rx_vid_subvlan(tmp->other_ctx->ds, 2603 tmp->other_port, 2604 subvlan); 2605 2606 /* The @rx_vid retagged from @tmp->vid on 2607 * {@tmp->other_ds, @tmp->other_port} needs to be 2608 * re-retagged to @tmp->vid on the way back to us. 2609 * 2610 * Assume the original @tmp->vid is already configured 2611 * on this local switch, otherwise we wouldn't be 2612 * retagging its subvlan on the other switch in the 2613 * first place. We just need to add a reverse retagging 2614 * rule for @rx_vid and install @rx_vid on our ports. 2615 */ 2616 match = rx_vid; 2617 new_vlan[match].vlanid = rx_vid; 2618 new_vlan[match].vmemb_port |= BIT(tmp->port); 2619 new_vlan[match].vmemb_port |= BIT(upstream); 2620 /* The "untagged" flag is set the same as for the 2621 * original VLAN. And towards the CPU, it doesn't 2622 * really matter, because @rx_vid will only receive 2623 * traffic on that port. For consistency with other dsa_8021q 2624 * VLANs, we'll keep the CPU port tagged. 2625 */ 2626 if (!tmp->untagged) 2627 new_vlan[match].tag_port |= BIT(tmp->port); 2628 new_vlan[match].tag_port |= BIT(upstream); 2629 new_vlan[match].type_entry = SJA1110_VLAN_D_TAG; 2630 /* Deny egress of @rx_vid towards our front-panel port. 2631 * This will force the switch to drop it, and we'll see 2632 * only the re-retagged packets (having the original, 2633 * pre-initial-retagging, VLAN @tmp->vid). 2634 */ 2635 new_vlan[match].vlan_bc &= ~BIT(tmp->port); 2636 2637 /* On reverse retagging, the same ingress VLAN goes to multiple 2638 * ports. So we have an opportunity to create composite rules 2639 * to not waste the limited space in the retagging table. 2640 */ 2641 k = sja1105_find_retagging_entry(new_retagging, *num_retagging, 2642 upstream, rx_vid, tmp->vid); 2643 if (k < 0) { 2644 if (*num_retagging == SJA1105_MAX_RETAGGING_COUNT) { 2645 dev_err(priv->ds->dev, "No more retagging rules\n"); 2646 rc = -ENOSPC; 2647 goto out; 2648 } 2649 k = (*num_retagging)++; 2650 } 2651 /* And the retagging itself */ 2652 new_retagging[k].vlan_ing = rx_vid; 2653 new_retagging[k].vlan_egr = tmp->vid; 2654 new_retagging[k].ing_port = BIT(upstream); 2655 new_retagging[k].egr_port |= BIT(tmp->port); 2656 } 2657 2658 out: 2659 list_for_each_entry_safe(tmp, pos, &crosschip_vlans, list) { 2660 list_del(&tmp->list); 2661 kfree(tmp); 2662 } 2663 2664 return rc; 2665 } 2666 2667 static int sja1105_build_vlan_table(struct sja1105_private *priv, bool notify); 2668 2669 static int sja1105_notify_crosschip_switches(struct sja1105_private *priv) 2670 { 2671 struct sja1105_crosschip_switch *s, *pos; 2672 struct list_head crosschip_switches; 2673 struct dsa_8021q_crosschip_link *c; 2674 int rc = 0; 2675 2676 INIT_LIST_HEAD(&crosschip_switches); 2677 2678 list_for_each_entry(c, &priv->dsa_8021q_ctx->crosschip_links, list) { 2679 bool already_added = false; 2680 2681 list_for_each_entry(s, &crosschip_switches, list) { 2682 if (s->other_ctx == c->other_ctx) { 2683 already_added = true; 2684 break; 2685 } 2686 } 2687 2688 if (already_added) 2689 continue; 2690 2691 s = kzalloc(sizeof(*s), GFP_KERNEL); 2692 if (!s) { 2693 dev_err(priv->ds->dev, "Failed to allocate memory\n"); 2694 rc = -ENOMEM; 2695 goto out; 2696 } 2697 s->other_ctx = c->other_ctx; 2698 list_add(&s->list, &crosschip_switches); 2699 } 2700 2701 list_for_each_entry(s, &crosschip_switches, list) { 2702 struct sja1105_private *other_priv = s->other_ctx->ds->priv; 2703 2704 rc = sja1105_build_vlan_table(other_priv, false); 2705 if (rc) 2706 goto out; 2707 } 2708 2709 out: 2710 list_for_each_entry_safe(s, pos, &crosschip_switches, list) { 2711 list_del(&s->list); 2712 kfree(s); 2713 } 2714 2715 return rc; 2716 } 2717 2718 static int sja1105_build_vlan_table(struct sja1105_private *priv, bool notify) 2719 { 2720 u16 subvlan_map[SJA1105_MAX_NUM_PORTS][DSA_8021Q_N_SUBVLAN]; 2721 struct sja1105_retagging_entry *new_retagging; 2722 struct sja1105_vlan_lookup_entry *new_vlan; 2723 struct sja1105_table *table; 2724 int i, num_retagging = 0; 2725 int rc; 2726 2727 table = &priv->static_config.tables[BLK_IDX_VLAN_LOOKUP]; 2728 new_vlan = kcalloc(VLAN_N_VID, 2729 table->ops->unpacked_entry_size, GFP_KERNEL); 2730 if (!new_vlan) 2731 return -ENOMEM; 2732 2733 table = &priv->static_config.tables[BLK_IDX_VLAN_LOOKUP]; 2734 new_retagging = kcalloc(SJA1105_MAX_RETAGGING_COUNT, 2735 table->ops->unpacked_entry_size, GFP_KERNEL); 2736 if (!new_retagging) { 2737 kfree(new_vlan); 2738 return -ENOMEM; 2739 } 2740 2741 for (i = 0; i < VLAN_N_VID; i++) 2742 new_vlan[i].vlanid = VLAN_N_VID; 2743 2744 for (i = 0; i < SJA1105_MAX_RETAGGING_COUNT; i++) 2745 new_retagging[i].vlan_ing = VLAN_N_VID; 2746 2747 for (i = 0; i < priv->ds->num_ports; i++) 2748 sja1105_init_subvlan_map(subvlan_map[i]); 2749 2750 /* Bridge VLANs */ 2751 rc = sja1105_build_bridge_vlans(priv, new_vlan); 2752 if (rc) 2753 goto out; 2754 2755 /* VLANs necessary for dsa_8021q operation, given to us by tag_8021q.c: 2756 * - RX VLANs 2757 * - TX VLANs 2758 * - Crosschip links 2759 */ 2760 rc = sja1105_build_dsa_8021q_vlans(priv, new_vlan); 2761 if (rc) 2762 goto out; 2763 2764 /* Private VLANs necessary for dsa_8021q operation, which we need to 2765 * determine on our own: 2766 * - Sub-VLANs 2767 * - Sub-VLANs of crosschip switches 2768 */ 2769 rc = sja1105_build_subvlans(priv, subvlan_map, new_vlan, new_retagging, 2770 &num_retagging); 2771 if (rc) 2772 goto out; 2773 2774 rc = sja1105_build_crosschip_subvlans(priv, new_vlan, new_retagging, 2775 &num_retagging); 2776 if (rc) 2777 goto out; 2778 2779 rc = sja1105_commit_vlans(priv, new_vlan, new_retagging, num_retagging); 2780 if (rc) 2781 goto out; 2782 2783 rc = sja1105_commit_pvid(priv); 2784 if (rc) 2785 goto out; 2786 2787 for (i = 0; i < priv->ds->num_ports; i++) 2788 sja1105_commit_subvlan_map(priv, i, subvlan_map[i]); 2789 2790 if (notify) { 2791 rc = sja1105_notify_crosschip_switches(priv); 2792 if (rc) 2793 goto out; 2794 } 2795 2796 out: 2797 kfree(new_vlan); 2798 kfree(new_retagging); 2799 2800 return rc; 2801 } 2802 2803 /* The TPID setting belongs to the General Parameters table, 2804 * which can only be partially reconfigured at runtime (and not the TPID). 2805 * So a switch reset is required. 2806 */ 2807 int sja1105_vlan_filtering(struct dsa_switch *ds, int port, bool enabled, 2808 struct netlink_ext_ack *extack) 2809 { 2810 struct sja1105_l2_lookup_params_entry *l2_lookup_params; 2811 struct sja1105_general_params_entry *general_params; 2812 struct sja1105_private *priv = ds->priv; 2813 enum sja1105_vlan_state state; 2814 struct sja1105_table *table; 2815 struct sja1105_rule *rule; 2816 bool want_tagging; 2817 u16 tpid, tpid2; 2818 int rc; 2819 2820 list_for_each_entry(rule, &priv->flow_block.rules, list) { 2821 if (rule->type == SJA1105_RULE_VL) { 2822 NL_SET_ERR_MSG_MOD(extack, 2823 "Cannot change VLAN filtering with active VL rules"); 2824 return -EBUSY; 2825 } 2826 } 2827 2828 if (enabled) { 2829 /* Enable VLAN filtering. */ 2830 tpid = ETH_P_8021Q; 2831 tpid2 = ETH_P_8021AD; 2832 } else { 2833 /* Disable VLAN filtering. */ 2834 tpid = ETH_P_SJA1105; 2835 tpid2 = ETH_P_SJA1105; 2836 } 2837 2838 for (port = 0; port < ds->num_ports; port++) { 2839 struct sja1105_port *sp = &priv->ports[port]; 2840 2841 if (enabled) 2842 sp->xmit_tpid = priv->info->qinq_tpid; 2843 else 2844 sp->xmit_tpid = ETH_P_SJA1105; 2845 } 2846 2847 if (!enabled) 2848 state = SJA1105_VLAN_UNAWARE; 2849 else if (priv->best_effort_vlan_filtering) 2850 state = SJA1105_VLAN_BEST_EFFORT; 2851 else 2852 state = SJA1105_VLAN_FILTERING_FULL; 2853 2854 if (priv->vlan_state == state) 2855 return 0; 2856 2857 priv->vlan_state = state; 2858 want_tagging = (state == SJA1105_VLAN_UNAWARE || 2859 state == SJA1105_VLAN_BEST_EFFORT); 2860 2861 table = &priv->static_config.tables[BLK_IDX_GENERAL_PARAMS]; 2862 general_params = table->entries; 2863 /* EtherType used to identify inner tagged (C-tag) VLAN traffic */ 2864 general_params->tpid = tpid; 2865 /* EtherType used to identify outer tagged (S-tag) VLAN traffic */ 2866 general_params->tpid2 = tpid2; 2867 /* When VLAN filtering is on, we need to at least be able to 2868 * decode management traffic through the "backup plan". 2869 */ 2870 general_params->incl_srcpt1 = enabled; 2871 general_params->incl_srcpt0 = enabled; 2872 2873 want_tagging = priv->best_effort_vlan_filtering || !enabled; 2874 2875 /* VLAN filtering => independent VLAN learning. 2876 * No VLAN filtering (or best effort) => shared VLAN learning. 2877 * 2878 * In shared VLAN learning mode, untagged traffic still gets 2879 * pvid-tagged, and the FDB table gets populated with entries 2880 * containing the "real" (pvid or from VLAN tag) VLAN ID. 2881 * However the switch performs a masked L2 lookup in the FDB, 2882 * effectively only looking up a frame's DMAC (and not VID) for the 2883 * forwarding decision. 2884 * 2885 * This is extremely convenient for us, because in modes with 2886 * vlan_filtering=0, dsa_8021q actually installs unique pvid's into 2887 * each front panel port. This is good for identification but breaks 2888 * learning badly - the VID of the learnt FDB entry is unique, aka 2889 * no frames coming from any other port are going to have it. So 2890 * for forwarding purposes, this is as though learning was broken 2891 * (all frames get flooded). 2892 */ 2893 table = &priv->static_config.tables[BLK_IDX_L2_LOOKUP_PARAMS]; 2894 l2_lookup_params = table->entries; 2895 l2_lookup_params->shared_learn = want_tagging; 2896 2897 sja1105_frame_memory_partitioning(priv); 2898 2899 rc = sja1105_build_vlan_table(priv, false); 2900 if (rc) 2901 return rc; 2902 2903 rc = sja1105_static_config_reload(priv, SJA1105_VLAN_FILTERING); 2904 if (rc) 2905 NL_SET_ERR_MSG_MOD(extack, "Failed to change VLAN Ethertype"); 2906 2907 /* Switch port identification based on 802.1Q is only passable 2908 * if we are not under a vlan_filtering bridge. So make sure 2909 * the two configurations are mutually exclusive (of course, the 2910 * user may know better, i.e. best_effort_vlan_filtering). 2911 */ 2912 return sja1105_setup_8021q_tagging(ds, want_tagging); 2913 } 2914 2915 /* Returns number of VLANs added (0 or 1) on success, 2916 * or a negative error code. 2917 */ 2918 static int sja1105_vlan_add_one(struct dsa_switch *ds, int port, u16 vid, 2919 u16 flags, struct list_head *vlan_list) 2920 { 2921 bool untagged = flags & BRIDGE_VLAN_INFO_UNTAGGED; 2922 bool pvid = flags & BRIDGE_VLAN_INFO_PVID; 2923 struct sja1105_bridge_vlan *v; 2924 2925 list_for_each_entry(v, vlan_list, list) { 2926 if (v->port == port && v->vid == vid) { 2927 /* Already added */ 2928 if (v->untagged == untagged && v->pvid == pvid) 2929 /* Nothing changed */ 2930 return 0; 2931 2932 /* It's the same VLAN, but some of the flags changed 2933 * and the user did not bother to delete it first. 2934 * Update it and trigger sja1105_build_vlan_table. 2935 */ 2936 v->untagged = untagged; 2937 v->pvid = pvid; 2938 return 1; 2939 } 2940 } 2941 2942 v = kzalloc(sizeof(*v), GFP_KERNEL); 2943 if (!v) { 2944 dev_err(ds->dev, "Out of memory while storing VLAN\n"); 2945 return -ENOMEM; 2946 } 2947 2948 v->port = port; 2949 v->vid = vid; 2950 v->untagged = untagged; 2951 v->pvid = pvid; 2952 list_add(&v->list, vlan_list); 2953 2954 return 1; 2955 } 2956 2957 /* Returns number of VLANs deleted (0 or 1) */ 2958 static int sja1105_vlan_del_one(struct dsa_switch *ds, int port, u16 vid, 2959 struct list_head *vlan_list) 2960 { 2961 struct sja1105_bridge_vlan *v, *n; 2962 2963 list_for_each_entry_safe(v, n, vlan_list, list) { 2964 if (v->port == port && v->vid == vid) { 2965 list_del(&v->list); 2966 kfree(v); 2967 return 1; 2968 } 2969 } 2970 2971 return 0; 2972 } 2973 2974 static int sja1105_vlan_add(struct dsa_switch *ds, int port, 2975 const struct switchdev_obj_port_vlan *vlan, 2976 struct netlink_ext_ack *extack) 2977 { 2978 struct sja1105_private *priv = ds->priv; 2979 bool vlan_table_changed = false; 2980 int rc; 2981 2982 /* If the user wants best-effort VLAN filtering (aka vlan_filtering 2983 * bridge plus tagging), be sure to at least deny alterations to the 2984 * configuration done by dsa_8021q. 2985 */ 2986 if (priv->vlan_state != SJA1105_VLAN_FILTERING_FULL && 2987 vid_is_dsa_8021q(vlan->vid)) { 2988 NL_SET_ERR_MSG_MOD(extack, 2989 "Range 1024-3071 reserved for dsa_8021q operation"); 2990 return -EBUSY; 2991 } 2992 2993 rc = sja1105_vlan_add_one(ds, port, vlan->vid, vlan->flags, 2994 &priv->bridge_vlans); 2995 if (rc < 0) 2996 return rc; 2997 if (rc > 0) 2998 vlan_table_changed = true; 2999 3000 if (!vlan_table_changed) 3001 return 0; 3002 3003 return sja1105_build_vlan_table(priv, true); 3004 } 3005 3006 static int sja1105_vlan_del(struct dsa_switch *ds, int port, 3007 const struct switchdev_obj_port_vlan *vlan) 3008 { 3009 struct sja1105_private *priv = ds->priv; 3010 bool vlan_table_changed = false; 3011 int rc; 3012 3013 rc = sja1105_vlan_del_one(ds, port, vlan->vid, &priv->bridge_vlans); 3014 if (rc > 0) 3015 vlan_table_changed = true; 3016 3017 if (!vlan_table_changed) 3018 return 0; 3019 3020 return sja1105_build_vlan_table(priv, true); 3021 } 3022 3023 static int sja1105_dsa_8021q_vlan_add(struct dsa_switch *ds, int port, u16 vid, 3024 u16 flags) 3025 { 3026 struct sja1105_private *priv = ds->priv; 3027 int rc; 3028 3029 rc = sja1105_vlan_add_one(ds, port, vid, flags, &priv->dsa_8021q_vlans); 3030 if (rc <= 0) 3031 return rc; 3032 3033 return sja1105_build_vlan_table(priv, true); 3034 } 3035 3036 static int sja1105_dsa_8021q_vlan_del(struct dsa_switch *ds, int port, u16 vid) 3037 { 3038 struct sja1105_private *priv = ds->priv; 3039 int rc; 3040 3041 rc = sja1105_vlan_del_one(ds, port, vid, &priv->dsa_8021q_vlans); 3042 if (!rc) 3043 return 0; 3044 3045 return sja1105_build_vlan_table(priv, true); 3046 } 3047 3048 static const struct dsa_8021q_ops sja1105_dsa_8021q_ops = { 3049 .vlan_add = sja1105_dsa_8021q_vlan_add, 3050 .vlan_del = sja1105_dsa_8021q_vlan_del, 3051 }; 3052 3053 /* The programming model for the SJA1105 switch is "all-at-once" via static 3054 * configuration tables. Some of these can be dynamically modified at runtime, 3055 * but not the xMII mode parameters table. 3056 * Furthermode, some PHYs may not have crystals for generating their clocks 3057 * (e.g. RMII). Instead, their 50MHz clock is supplied via the SJA1105 port's 3058 * ref_clk pin. So port clocking needs to be initialized early, before 3059 * connecting to PHYs is attempted, otherwise they won't respond through MDIO. 3060 * Setting correct PHY link speed does not matter now. 3061 * But dsa_slave_phy_setup is called later than sja1105_setup, so the PHY 3062 * bindings are not yet parsed by DSA core. We need to parse early so that we 3063 * can populate the xMII mode parameters table. 3064 */ 3065 static int sja1105_setup(struct dsa_switch *ds) 3066 { 3067 struct sja1105_private *priv = ds->priv; 3068 int rc; 3069 3070 rc = sja1105_parse_dt(priv); 3071 if (rc < 0) { 3072 dev_err(ds->dev, "Failed to parse DT: %d\n", rc); 3073 return rc; 3074 } 3075 3076 /* Error out early if internal delays are required through DT 3077 * and we can't apply them. 3078 */ 3079 rc = sja1105_parse_rgmii_delays(priv); 3080 if (rc < 0) { 3081 dev_err(ds->dev, "RGMII delay not supported\n"); 3082 return rc; 3083 } 3084 3085 rc = sja1105_ptp_clock_register(ds); 3086 if (rc < 0) { 3087 dev_err(ds->dev, "Failed to register PTP clock: %d\n", rc); 3088 return rc; 3089 } 3090 3091 rc = sja1105_mdiobus_register(ds); 3092 if (rc < 0) { 3093 dev_err(ds->dev, "Failed to register MDIO bus: %pe\n", 3094 ERR_PTR(rc)); 3095 goto out_ptp_clock_unregister; 3096 } 3097 3098 if (priv->info->disable_microcontroller) { 3099 rc = priv->info->disable_microcontroller(priv); 3100 if (rc < 0) { 3101 dev_err(ds->dev, 3102 "Failed to disable microcontroller: %pe\n", 3103 ERR_PTR(rc)); 3104 goto out_mdiobus_unregister; 3105 } 3106 } 3107 3108 /* Create and send configuration down to device */ 3109 rc = sja1105_static_config_load(priv); 3110 if (rc < 0) { 3111 dev_err(ds->dev, "Failed to load static config: %d\n", rc); 3112 goto out_mdiobus_unregister; 3113 } 3114 3115 /* Configure the CGU (PHY link modes and speeds) */ 3116 if (priv->info->clocking_setup) { 3117 rc = priv->info->clocking_setup(priv); 3118 if (rc < 0) { 3119 dev_err(ds->dev, 3120 "Failed to configure MII clocking: %pe\n", 3121 ERR_PTR(rc)); 3122 goto out_static_config_free; 3123 } 3124 } 3125 3126 /* On SJA1105, VLAN filtering per se is always enabled in hardware. 3127 * The only thing we can do to disable it is lie about what the 802.1Q 3128 * EtherType is. 3129 * So it will still try to apply VLAN filtering, but all ingress 3130 * traffic (except frames received with EtherType of ETH_P_SJA1105) 3131 * will be internally tagged with a distorted VLAN header where the 3132 * TPID is ETH_P_SJA1105, and the VLAN ID is the port pvid. 3133 */ 3134 ds->vlan_filtering_is_global = true; 3135 3136 /* Advertise the 8 egress queues */ 3137 ds->num_tx_queues = SJA1105_NUM_TC; 3138 3139 ds->mtu_enforcement_ingress = true; 3140 3141 priv->best_effort_vlan_filtering = true; 3142 3143 rc = sja1105_devlink_setup(ds); 3144 if (rc < 0) 3145 goto out_static_config_free; 3146 3147 /* The DSA/switchdev model brings up switch ports in standalone mode by 3148 * default, and that means vlan_filtering is 0 since they're not under 3149 * a bridge, so it's safe to set up switch tagging at this time. 3150 */ 3151 rtnl_lock(); 3152 rc = sja1105_setup_8021q_tagging(ds, true); 3153 rtnl_unlock(); 3154 if (rc) 3155 goto out_devlink_teardown; 3156 3157 return 0; 3158 3159 out_devlink_teardown: 3160 sja1105_devlink_teardown(ds); 3161 out_mdiobus_unregister: 3162 sja1105_mdiobus_unregister(ds); 3163 out_ptp_clock_unregister: 3164 sja1105_ptp_clock_unregister(ds); 3165 out_static_config_free: 3166 sja1105_static_config_free(&priv->static_config); 3167 3168 return rc; 3169 } 3170 3171 static void sja1105_teardown(struct dsa_switch *ds) 3172 { 3173 struct sja1105_private *priv = ds->priv; 3174 struct sja1105_bridge_vlan *v, *n; 3175 int port; 3176 3177 for (port = 0; port < ds->num_ports; port++) { 3178 struct sja1105_port *sp = &priv->ports[port]; 3179 3180 if (!dsa_is_user_port(ds, port)) 3181 continue; 3182 3183 if (sp->xmit_worker) 3184 kthread_destroy_worker(sp->xmit_worker); 3185 } 3186 3187 sja1105_devlink_teardown(ds); 3188 sja1105_flower_teardown(ds); 3189 sja1105_tas_teardown(ds); 3190 sja1105_ptp_clock_unregister(ds); 3191 sja1105_static_config_free(&priv->static_config); 3192 3193 list_for_each_entry_safe(v, n, &priv->dsa_8021q_vlans, list) { 3194 list_del(&v->list); 3195 kfree(v); 3196 } 3197 3198 list_for_each_entry_safe(v, n, &priv->bridge_vlans, list) { 3199 list_del(&v->list); 3200 kfree(v); 3201 } 3202 } 3203 3204 static void sja1105_port_disable(struct dsa_switch *ds, int port) 3205 { 3206 struct sja1105_private *priv = ds->priv; 3207 struct sja1105_port *sp = &priv->ports[port]; 3208 3209 if (!dsa_is_user_port(ds, port)) 3210 return; 3211 3212 kthread_cancel_work_sync(&sp->xmit_work); 3213 skb_queue_purge(&sp->xmit_queue); 3214 } 3215 3216 static int sja1105_mgmt_xmit(struct dsa_switch *ds, int port, int slot, 3217 struct sk_buff *skb, bool takets) 3218 { 3219 struct sja1105_mgmt_entry mgmt_route = {0}; 3220 struct sja1105_private *priv = ds->priv; 3221 struct ethhdr *hdr; 3222 int timeout = 10; 3223 int rc; 3224 3225 hdr = eth_hdr(skb); 3226 3227 mgmt_route.macaddr = ether_addr_to_u64(hdr->h_dest); 3228 mgmt_route.destports = BIT(port); 3229 mgmt_route.enfport = 1; 3230 mgmt_route.tsreg = 0; 3231 mgmt_route.takets = takets; 3232 3233 rc = sja1105_dynamic_config_write(priv, BLK_IDX_MGMT_ROUTE, 3234 slot, &mgmt_route, true); 3235 if (rc < 0) { 3236 kfree_skb(skb); 3237 return rc; 3238 } 3239 3240 /* Transfer skb to the host port. */ 3241 dsa_enqueue_skb(skb, dsa_to_port(ds, port)->slave); 3242 3243 /* Wait until the switch has processed the frame */ 3244 do { 3245 rc = sja1105_dynamic_config_read(priv, BLK_IDX_MGMT_ROUTE, 3246 slot, &mgmt_route); 3247 if (rc < 0) { 3248 dev_err_ratelimited(priv->ds->dev, 3249 "failed to poll for mgmt route\n"); 3250 continue; 3251 } 3252 3253 /* UM10944: The ENFPORT flag of the respective entry is 3254 * cleared when a match is found. The host can use this 3255 * flag as an acknowledgment. 3256 */ 3257 cpu_relax(); 3258 } while (mgmt_route.enfport && --timeout); 3259 3260 if (!timeout) { 3261 /* Clean up the management route so that a follow-up 3262 * frame may not match on it by mistake. 3263 * This is only hardware supported on P/Q/R/S - on E/T it is 3264 * a no-op and we are silently discarding the -EOPNOTSUPP. 3265 */ 3266 sja1105_dynamic_config_write(priv, BLK_IDX_MGMT_ROUTE, 3267 slot, &mgmt_route, false); 3268 dev_err_ratelimited(priv->ds->dev, "xmit timed out\n"); 3269 } 3270 3271 return NETDEV_TX_OK; 3272 } 3273 3274 #define work_to_port(work) \ 3275 container_of((work), struct sja1105_port, xmit_work) 3276 #define tagger_to_sja1105(t) \ 3277 container_of((t), struct sja1105_private, tagger_data) 3278 3279 /* Deferred work is unfortunately necessary because setting up the management 3280 * route cannot be done from atomit context (SPI transfer takes a sleepable 3281 * lock on the bus) 3282 */ 3283 static void sja1105_port_deferred_xmit(struct kthread_work *work) 3284 { 3285 struct sja1105_port *sp = work_to_port(work); 3286 struct sja1105_tagger_data *tagger_data = sp->data; 3287 struct sja1105_private *priv = tagger_to_sja1105(tagger_data); 3288 int port = sp - priv->ports; 3289 struct sk_buff *skb; 3290 3291 while ((skb = skb_dequeue(&sp->xmit_queue)) != NULL) { 3292 struct sk_buff *clone = SJA1105_SKB_CB(skb)->clone; 3293 3294 mutex_lock(&priv->mgmt_lock); 3295 3296 sja1105_mgmt_xmit(priv->ds, port, 0, skb, !!clone); 3297 3298 /* The clone, if there, was made by dsa_skb_tx_timestamp */ 3299 if (clone) 3300 sja1105_ptp_txtstamp_skb(priv->ds, port, clone); 3301 3302 mutex_unlock(&priv->mgmt_lock); 3303 } 3304 } 3305 3306 /* The MAXAGE setting belongs to the L2 Forwarding Parameters table, 3307 * which cannot be reconfigured at runtime. So a switch reset is required. 3308 */ 3309 static int sja1105_set_ageing_time(struct dsa_switch *ds, 3310 unsigned int ageing_time) 3311 { 3312 struct sja1105_l2_lookup_params_entry *l2_lookup_params; 3313 struct sja1105_private *priv = ds->priv; 3314 struct sja1105_table *table; 3315 unsigned int maxage; 3316 3317 table = &priv->static_config.tables[BLK_IDX_L2_LOOKUP_PARAMS]; 3318 l2_lookup_params = table->entries; 3319 3320 maxage = SJA1105_AGEING_TIME_MS(ageing_time); 3321 3322 if (l2_lookup_params->maxage == maxage) 3323 return 0; 3324 3325 l2_lookup_params->maxage = maxage; 3326 3327 return sja1105_static_config_reload(priv, SJA1105_AGEING_TIME); 3328 } 3329 3330 static int sja1105_change_mtu(struct dsa_switch *ds, int port, int new_mtu) 3331 { 3332 struct sja1105_l2_policing_entry *policing; 3333 struct sja1105_private *priv = ds->priv; 3334 3335 new_mtu += VLAN_ETH_HLEN + ETH_FCS_LEN; 3336 3337 if (dsa_is_cpu_port(ds, port)) 3338 new_mtu += VLAN_HLEN; 3339 3340 policing = priv->static_config.tables[BLK_IDX_L2_POLICING].entries; 3341 3342 if (policing[port].maxlen == new_mtu) 3343 return 0; 3344 3345 policing[port].maxlen = new_mtu; 3346 3347 return sja1105_static_config_reload(priv, SJA1105_BEST_EFFORT_POLICING); 3348 } 3349 3350 static int sja1105_get_max_mtu(struct dsa_switch *ds, int port) 3351 { 3352 return 2043 - VLAN_ETH_HLEN - ETH_FCS_LEN; 3353 } 3354 3355 static int sja1105_port_setup_tc(struct dsa_switch *ds, int port, 3356 enum tc_setup_type type, 3357 void *type_data) 3358 { 3359 switch (type) { 3360 case TC_SETUP_QDISC_TAPRIO: 3361 return sja1105_setup_tc_taprio(ds, port, type_data); 3362 case TC_SETUP_QDISC_CBS: 3363 return sja1105_setup_tc_cbs(ds, port, type_data); 3364 default: 3365 return -EOPNOTSUPP; 3366 } 3367 } 3368 3369 /* We have a single mirror (@to) port, but can configure ingress and egress 3370 * mirroring on all other (@from) ports. 3371 * We need to allow mirroring rules only as long as the @to port is always the 3372 * same, and we need to unset the @to port from mirr_port only when there is no 3373 * mirroring rule that references it. 3374 */ 3375 static int sja1105_mirror_apply(struct sja1105_private *priv, int from, int to, 3376 bool ingress, bool enabled) 3377 { 3378 struct sja1105_general_params_entry *general_params; 3379 struct sja1105_mac_config_entry *mac; 3380 struct dsa_switch *ds = priv->ds; 3381 struct sja1105_table *table; 3382 bool already_enabled; 3383 u64 new_mirr_port; 3384 int rc; 3385 3386 table = &priv->static_config.tables[BLK_IDX_GENERAL_PARAMS]; 3387 general_params = table->entries; 3388 3389 mac = priv->static_config.tables[BLK_IDX_MAC_CONFIG].entries; 3390 3391 already_enabled = (general_params->mirr_port != ds->num_ports); 3392 if (already_enabled && enabled && general_params->mirr_port != to) { 3393 dev_err(priv->ds->dev, 3394 "Delete mirroring rules towards port %llu first\n", 3395 general_params->mirr_port); 3396 return -EBUSY; 3397 } 3398 3399 new_mirr_port = to; 3400 if (!enabled) { 3401 bool keep = false; 3402 int port; 3403 3404 /* Anybody still referencing mirr_port? */ 3405 for (port = 0; port < ds->num_ports; port++) { 3406 if (mac[port].ing_mirr || mac[port].egr_mirr) { 3407 keep = true; 3408 break; 3409 } 3410 } 3411 /* Unset already_enabled for next time */ 3412 if (!keep) 3413 new_mirr_port = ds->num_ports; 3414 } 3415 if (new_mirr_port != general_params->mirr_port) { 3416 general_params->mirr_port = new_mirr_port; 3417 3418 rc = sja1105_dynamic_config_write(priv, BLK_IDX_GENERAL_PARAMS, 3419 0, general_params, true); 3420 if (rc < 0) 3421 return rc; 3422 } 3423 3424 if (ingress) 3425 mac[from].ing_mirr = enabled; 3426 else 3427 mac[from].egr_mirr = enabled; 3428 3429 return sja1105_dynamic_config_write(priv, BLK_IDX_MAC_CONFIG, from, 3430 &mac[from], true); 3431 } 3432 3433 static int sja1105_mirror_add(struct dsa_switch *ds, int port, 3434 struct dsa_mall_mirror_tc_entry *mirror, 3435 bool ingress) 3436 { 3437 return sja1105_mirror_apply(ds->priv, port, mirror->to_local_port, 3438 ingress, true); 3439 } 3440 3441 static void sja1105_mirror_del(struct dsa_switch *ds, int port, 3442 struct dsa_mall_mirror_tc_entry *mirror) 3443 { 3444 sja1105_mirror_apply(ds->priv, port, mirror->to_local_port, 3445 mirror->ingress, false); 3446 } 3447 3448 static int sja1105_port_policer_add(struct dsa_switch *ds, int port, 3449 struct dsa_mall_policer_tc_entry *policer) 3450 { 3451 struct sja1105_l2_policing_entry *policing; 3452 struct sja1105_private *priv = ds->priv; 3453 3454 policing = priv->static_config.tables[BLK_IDX_L2_POLICING].entries; 3455 3456 /* In hardware, every 8 microseconds the credit level is incremented by 3457 * the value of RATE bytes divided by 64, up to a maximum of SMAX 3458 * bytes. 3459 */ 3460 policing[port].rate = div_u64(512 * policer->rate_bytes_per_sec, 3461 1000000); 3462 policing[port].smax = policer->burst; 3463 3464 return sja1105_static_config_reload(priv, SJA1105_BEST_EFFORT_POLICING); 3465 } 3466 3467 static void sja1105_port_policer_del(struct dsa_switch *ds, int port) 3468 { 3469 struct sja1105_l2_policing_entry *policing; 3470 struct sja1105_private *priv = ds->priv; 3471 3472 policing = priv->static_config.tables[BLK_IDX_L2_POLICING].entries; 3473 3474 policing[port].rate = SJA1105_RATE_MBPS(1000); 3475 policing[port].smax = 65535; 3476 3477 sja1105_static_config_reload(priv, SJA1105_BEST_EFFORT_POLICING); 3478 } 3479 3480 static int sja1105_port_set_learning(struct sja1105_private *priv, int port, 3481 bool enabled) 3482 { 3483 struct sja1105_mac_config_entry *mac; 3484 int rc; 3485 3486 mac = priv->static_config.tables[BLK_IDX_MAC_CONFIG].entries; 3487 3488 mac[port].dyn_learn = enabled; 3489 3490 rc = sja1105_dynamic_config_write(priv, BLK_IDX_MAC_CONFIG, port, 3491 &mac[port], true); 3492 if (rc) 3493 return rc; 3494 3495 if (enabled) 3496 priv->learn_ena |= BIT(port); 3497 else 3498 priv->learn_ena &= ~BIT(port); 3499 3500 return 0; 3501 } 3502 3503 static int sja1105_port_ucast_bcast_flood(struct sja1105_private *priv, int to, 3504 struct switchdev_brport_flags flags) 3505 { 3506 if (flags.mask & BR_FLOOD) { 3507 if (flags.val & BR_FLOOD) 3508 priv->ucast_egress_floods |= BIT(to); 3509 else 3510 priv->ucast_egress_floods &= ~BIT(to); 3511 } 3512 3513 if (flags.mask & BR_BCAST_FLOOD) { 3514 if (flags.val & BR_BCAST_FLOOD) 3515 priv->bcast_egress_floods |= BIT(to); 3516 else 3517 priv->bcast_egress_floods &= ~BIT(to); 3518 } 3519 3520 return sja1105_manage_flood_domains(priv); 3521 } 3522 3523 static int sja1105_port_mcast_flood(struct sja1105_private *priv, int to, 3524 struct switchdev_brport_flags flags, 3525 struct netlink_ext_ack *extack) 3526 { 3527 struct sja1105_l2_lookup_entry *l2_lookup; 3528 struct sja1105_table *table; 3529 int match; 3530 3531 table = &priv->static_config.tables[BLK_IDX_L2_LOOKUP]; 3532 l2_lookup = table->entries; 3533 3534 for (match = 0; match < table->entry_count; match++) 3535 if (l2_lookup[match].macaddr == SJA1105_UNKNOWN_MULTICAST && 3536 l2_lookup[match].mask_macaddr == SJA1105_UNKNOWN_MULTICAST) 3537 break; 3538 3539 if (match == table->entry_count) { 3540 NL_SET_ERR_MSG_MOD(extack, 3541 "Could not find FDB entry for unknown multicast"); 3542 return -ENOSPC; 3543 } 3544 3545 if (flags.val & BR_MCAST_FLOOD) 3546 l2_lookup[match].destports |= BIT(to); 3547 else 3548 l2_lookup[match].destports &= ~BIT(to); 3549 3550 return sja1105_dynamic_config_write(priv, BLK_IDX_L2_LOOKUP, 3551 l2_lookup[match].index, 3552 &l2_lookup[match], 3553 true); 3554 } 3555 3556 static int sja1105_port_pre_bridge_flags(struct dsa_switch *ds, int port, 3557 struct switchdev_brport_flags flags, 3558 struct netlink_ext_ack *extack) 3559 { 3560 struct sja1105_private *priv = ds->priv; 3561 3562 if (flags.mask & ~(BR_LEARNING | BR_FLOOD | BR_MCAST_FLOOD | 3563 BR_BCAST_FLOOD)) 3564 return -EINVAL; 3565 3566 if (flags.mask & (BR_FLOOD | BR_MCAST_FLOOD) && 3567 !priv->info->can_limit_mcast_flood) { 3568 bool multicast = !!(flags.val & BR_MCAST_FLOOD); 3569 bool unicast = !!(flags.val & BR_FLOOD); 3570 3571 if (unicast != multicast) { 3572 NL_SET_ERR_MSG_MOD(extack, 3573 "This chip cannot configure multicast flooding independently of unicast"); 3574 return -EINVAL; 3575 } 3576 } 3577 3578 return 0; 3579 } 3580 3581 static int sja1105_port_bridge_flags(struct dsa_switch *ds, int port, 3582 struct switchdev_brport_flags flags, 3583 struct netlink_ext_ack *extack) 3584 { 3585 struct sja1105_private *priv = ds->priv; 3586 int rc; 3587 3588 if (flags.mask & BR_LEARNING) { 3589 bool learn_ena = !!(flags.val & BR_LEARNING); 3590 3591 rc = sja1105_port_set_learning(priv, port, learn_ena); 3592 if (rc) 3593 return rc; 3594 } 3595 3596 if (flags.mask & (BR_FLOOD | BR_BCAST_FLOOD)) { 3597 rc = sja1105_port_ucast_bcast_flood(priv, port, flags); 3598 if (rc) 3599 return rc; 3600 } 3601 3602 /* For chips that can't offload BR_MCAST_FLOOD independently, there 3603 * is nothing to do here, we ensured the configuration is in sync by 3604 * offloading BR_FLOOD. 3605 */ 3606 if (flags.mask & BR_MCAST_FLOOD && priv->info->can_limit_mcast_flood) { 3607 rc = sja1105_port_mcast_flood(priv, port, flags, 3608 extack); 3609 if (rc) 3610 return rc; 3611 } 3612 3613 return 0; 3614 } 3615 3616 static const struct dsa_switch_ops sja1105_switch_ops = { 3617 .get_tag_protocol = sja1105_get_tag_protocol, 3618 .setup = sja1105_setup, 3619 .teardown = sja1105_teardown, 3620 .set_ageing_time = sja1105_set_ageing_time, 3621 .port_change_mtu = sja1105_change_mtu, 3622 .port_max_mtu = sja1105_get_max_mtu, 3623 .phylink_validate = sja1105_phylink_validate, 3624 .phylink_mac_config = sja1105_mac_config, 3625 .phylink_mac_link_up = sja1105_mac_link_up, 3626 .phylink_mac_link_down = sja1105_mac_link_down, 3627 .get_strings = sja1105_get_strings, 3628 .get_ethtool_stats = sja1105_get_ethtool_stats, 3629 .get_sset_count = sja1105_get_sset_count, 3630 .get_ts_info = sja1105_get_ts_info, 3631 .port_disable = sja1105_port_disable, 3632 .port_fdb_dump = sja1105_fdb_dump, 3633 .port_fdb_add = sja1105_fdb_add, 3634 .port_fdb_del = sja1105_fdb_del, 3635 .port_bridge_join = sja1105_bridge_join, 3636 .port_bridge_leave = sja1105_bridge_leave, 3637 .port_pre_bridge_flags = sja1105_port_pre_bridge_flags, 3638 .port_bridge_flags = sja1105_port_bridge_flags, 3639 .port_stp_state_set = sja1105_bridge_stp_state_set, 3640 .port_vlan_filtering = sja1105_vlan_filtering, 3641 .port_vlan_add = sja1105_vlan_add, 3642 .port_vlan_del = sja1105_vlan_del, 3643 .port_mdb_add = sja1105_mdb_add, 3644 .port_mdb_del = sja1105_mdb_del, 3645 .port_hwtstamp_get = sja1105_hwtstamp_get, 3646 .port_hwtstamp_set = sja1105_hwtstamp_set, 3647 .port_rxtstamp = sja1105_port_rxtstamp, 3648 .port_txtstamp = sja1105_port_txtstamp, 3649 .port_setup_tc = sja1105_port_setup_tc, 3650 .port_mirror_add = sja1105_mirror_add, 3651 .port_mirror_del = sja1105_mirror_del, 3652 .port_policer_add = sja1105_port_policer_add, 3653 .port_policer_del = sja1105_port_policer_del, 3654 .cls_flower_add = sja1105_cls_flower_add, 3655 .cls_flower_del = sja1105_cls_flower_del, 3656 .cls_flower_stats = sja1105_cls_flower_stats, 3657 .crosschip_bridge_join = sja1105_crosschip_bridge_join, 3658 .crosschip_bridge_leave = sja1105_crosschip_bridge_leave, 3659 .devlink_param_get = sja1105_devlink_param_get, 3660 .devlink_param_set = sja1105_devlink_param_set, 3661 .devlink_info_get = sja1105_devlink_info_get, 3662 }; 3663 3664 static const struct of_device_id sja1105_dt_ids[]; 3665 3666 static int sja1105_check_device_id(struct sja1105_private *priv) 3667 { 3668 const struct sja1105_regs *regs = priv->info->regs; 3669 u8 prod_id[SJA1105_SIZE_DEVICE_ID] = {0}; 3670 struct device *dev = &priv->spidev->dev; 3671 const struct of_device_id *match; 3672 u32 device_id; 3673 u64 part_no; 3674 int rc; 3675 3676 rc = sja1105_xfer_u32(priv, SPI_READ, regs->device_id, &device_id, 3677 NULL); 3678 if (rc < 0) 3679 return rc; 3680 3681 rc = sja1105_xfer_buf(priv, SPI_READ, regs->prod_id, prod_id, 3682 SJA1105_SIZE_DEVICE_ID); 3683 if (rc < 0) 3684 return rc; 3685 3686 sja1105_unpack(prod_id, &part_no, 19, 4, SJA1105_SIZE_DEVICE_ID); 3687 3688 for (match = sja1105_dt_ids; match->compatible[0]; match++) { 3689 const struct sja1105_info *info = match->data; 3690 3691 /* Is what's been probed in our match table at all? */ 3692 if (info->device_id != device_id || info->part_no != part_no) 3693 continue; 3694 3695 /* But is it what's in the device tree? */ 3696 if (priv->info->device_id != device_id || 3697 priv->info->part_no != part_no) { 3698 dev_warn(dev, "Device tree specifies chip %s but found %s, please fix it!\n", 3699 priv->info->name, info->name); 3700 /* It isn't. No problem, pick that up. */ 3701 priv->info = info; 3702 } 3703 3704 return 0; 3705 } 3706 3707 dev_err(dev, "Unexpected {device ID, part number}: 0x%x 0x%llx\n", 3708 device_id, part_no); 3709 3710 return -ENODEV; 3711 } 3712 3713 static int sja1105_probe(struct spi_device *spi) 3714 { 3715 struct sja1105_tagger_data *tagger_data; 3716 struct device *dev = &spi->dev; 3717 struct sja1105_private *priv; 3718 size_t max_xfer, max_msg; 3719 struct dsa_switch *ds; 3720 int rc, port; 3721 3722 if (!dev->of_node) { 3723 dev_err(dev, "No DTS bindings for SJA1105 driver\n"); 3724 return -EINVAL; 3725 } 3726 3727 priv = devm_kzalloc(dev, sizeof(struct sja1105_private), GFP_KERNEL); 3728 if (!priv) 3729 return -ENOMEM; 3730 3731 /* Configure the optional reset pin and bring up switch */ 3732 priv->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_HIGH); 3733 if (IS_ERR(priv->reset_gpio)) 3734 dev_dbg(dev, "reset-gpios not defined, ignoring\n"); 3735 else 3736 sja1105_hw_reset(priv->reset_gpio, 1, 1); 3737 3738 /* Populate our driver private structure (priv) based on 3739 * the device tree node that was probed (spi) 3740 */ 3741 priv->spidev = spi; 3742 spi_set_drvdata(spi, priv); 3743 3744 /* Configure the SPI bus */ 3745 spi->bits_per_word = 8; 3746 rc = spi_setup(spi); 3747 if (rc < 0) { 3748 dev_err(dev, "Could not init SPI\n"); 3749 return rc; 3750 } 3751 3752 /* In sja1105_xfer, we send spi_messages composed of two spi_transfers: 3753 * a small one for the message header and another one for the current 3754 * chunk of the packed buffer. 3755 * Check that the restrictions imposed by the SPI controller are 3756 * respected: the chunk buffer is smaller than the max transfer size, 3757 * and the total length of the chunk plus its message header is smaller 3758 * than the max message size. 3759 * We do that during probe time since the maximum transfer size is a 3760 * runtime invariant. 3761 */ 3762 max_xfer = spi_max_transfer_size(spi); 3763 max_msg = spi_max_message_size(spi); 3764 3765 /* We need to send at least one 64-bit word of SPI payload per message 3766 * in order to be able to make useful progress. 3767 */ 3768 if (max_msg < SJA1105_SIZE_SPI_MSG_HEADER + 8) { 3769 dev_err(dev, "SPI master cannot send large enough buffers, aborting\n"); 3770 return -EINVAL; 3771 } 3772 3773 priv->max_xfer_len = SJA1105_SIZE_SPI_MSG_MAXLEN; 3774 if (priv->max_xfer_len > max_xfer) 3775 priv->max_xfer_len = max_xfer; 3776 if (priv->max_xfer_len > max_msg - SJA1105_SIZE_SPI_MSG_HEADER) 3777 priv->max_xfer_len = max_msg - SJA1105_SIZE_SPI_MSG_HEADER; 3778 3779 priv->info = of_device_get_match_data(dev); 3780 3781 /* Detect hardware device */ 3782 rc = sja1105_check_device_id(priv); 3783 if (rc < 0) { 3784 dev_err(dev, "Device ID check failed: %d\n", rc); 3785 return rc; 3786 } 3787 3788 dev_info(dev, "Probed switch chip: %s\n", priv->info->name); 3789 3790 ds = devm_kzalloc(dev, sizeof(*ds), GFP_KERNEL); 3791 if (!ds) 3792 return -ENOMEM; 3793 3794 ds->dev = dev; 3795 ds->num_ports = priv->info->num_ports; 3796 ds->ops = &sja1105_switch_ops; 3797 ds->priv = priv; 3798 priv->ds = ds; 3799 3800 tagger_data = &priv->tagger_data; 3801 3802 mutex_init(&priv->ptp_data.lock); 3803 mutex_init(&priv->mgmt_lock); 3804 3805 priv->dsa_8021q_ctx = devm_kzalloc(dev, sizeof(*priv->dsa_8021q_ctx), 3806 GFP_KERNEL); 3807 if (!priv->dsa_8021q_ctx) 3808 return -ENOMEM; 3809 3810 priv->dsa_8021q_ctx->ops = &sja1105_dsa_8021q_ops; 3811 priv->dsa_8021q_ctx->proto = htons(ETH_P_8021Q); 3812 priv->dsa_8021q_ctx->ds = ds; 3813 3814 INIT_LIST_HEAD(&priv->dsa_8021q_ctx->crosschip_links); 3815 INIT_LIST_HEAD(&priv->bridge_vlans); 3816 INIT_LIST_HEAD(&priv->dsa_8021q_vlans); 3817 3818 sja1105_tas_setup(ds); 3819 sja1105_flower_setup(ds); 3820 3821 rc = dsa_register_switch(priv->ds); 3822 if (rc) 3823 return rc; 3824 3825 if (IS_ENABLED(CONFIG_NET_SCH_CBS)) { 3826 priv->cbs = devm_kcalloc(dev, priv->info->num_cbs_shapers, 3827 sizeof(struct sja1105_cbs_entry), 3828 GFP_KERNEL); 3829 if (!priv->cbs) { 3830 rc = -ENOMEM; 3831 goto out_unregister_switch; 3832 } 3833 } 3834 3835 /* Connections between dsa_port and sja1105_port */ 3836 for (port = 0; port < ds->num_ports; port++) { 3837 struct sja1105_port *sp = &priv->ports[port]; 3838 struct dsa_port *dp = dsa_to_port(ds, port); 3839 struct net_device *slave; 3840 int subvlan; 3841 3842 if (!dsa_is_user_port(ds, port)) 3843 continue; 3844 3845 dp->priv = sp; 3846 sp->dp = dp; 3847 sp->data = tagger_data; 3848 slave = dp->slave; 3849 kthread_init_work(&sp->xmit_work, sja1105_port_deferred_xmit); 3850 sp->xmit_worker = kthread_create_worker(0, "%s_xmit", 3851 slave->name); 3852 if (IS_ERR(sp->xmit_worker)) { 3853 rc = PTR_ERR(sp->xmit_worker); 3854 dev_err(ds->dev, 3855 "failed to create deferred xmit thread: %d\n", 3856 rc); 3857 goto out_destroy_workers; 3858 } 3859 skb_queue_head_init(&sp->xmit_queue); 3860 sp->xmit_tpid = ETH_P_SJA1105; 3861 3862 for (subvlan = 0; subvlan < DSA_8021Q_N_SUBVLAN; subvlan++) 3863 sp->subvlan_map[subvlan] = VLAN_N_VID; 3864 } 3865 3866 return 0; 3867 3868 out_destroy_workers: 3869 while (port-- > 0) { 3870 struct sja1105_port *sp = &priv->ports[port]; 3871 3872 if (!dsa_is_user_port(ds, port)) 3873 continue; 3874 3875 kthread_destroy_worker(sp->xmit_worker); 3876 } 3877 3878 out_unregister_switch: 3879 dsa_unregister_switch(ds); 3880 3881 return rc; 3882 } 3883 3884 static int sja1105_remove(struct spi_device *spi) 3885 { 3886 struct sja1105_private *priv = spi_get_drvdata(spi); 3887 3888 dsa_unregister_switch(priv->ds); 3889 return 0; 3890 } 3891 3892 static const struct of_device_id sja1105_dt_ids[] = { 3893 { .compatible = "nxp,sja1105e", .data = &sja1105e_info }, 3894 { .compatible = "nxp,sja1105t", .data = &sja1105t_info }, 3895 { .compatible = "nxp,sja1105p", .data = &sja1105p_info }, 3896 { .compatible = "nxp,sja1105q", .data = &sja1105q_info }, 3897 { .compatible = "nxp,sja1105r", .data = &sja1105r_info }, 3898 { .compatible = "nxp,sja1105s", .data = &sja1105s_info }, 3899 { .compatible = "nxp,sja1110a", .data = &sja1110a_info }, 3900 { .compatible = "nxp,sja1110b", .data = &sja1110b_info }, 3901 { .compatible = "nxp,sja1110c", .data = &sja1110c_info }, 3902 { .compatible = "nxp,sja1110d", .data = &sja1110d_info }, 3903 { /* sentinel */ }, 3904 }; 3905 MODULE_DEVICE_TABLE(of, sja1105_dt_ids); 3906 3907 static struct spi_driver sja1105_driver = { 3908 .driver = { 3909 .name = "sja1105", 3910 .owner = THIS_MODULE, 3911 .of_match_table = of_match_ptr(sja1105_dt_ids), 3912 }, 3913 .probe = sja1105_probe, 3914 .remove = sja1105_remove, 3915 }; 3916 3917 module_spi_driver(sja1105_driver); 3918 3919 MODULE_AUTHOR("Vladimir Oltean <olteanv@gmail.com>"); 3920 MODULE_AUTHOR("Georg Waibel <georg.waibel@sensor-technik.de>"); 3921 MODULE_DESCRIPTION("SJA1105 Driver"); 3922 MODULE_LICENSE("GPL v2"); 3923