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/netdev_features.h> 20 #include <linux/netdevice.h> 21 #include <linux/if_bridge.h> 22 #include <linux/if_ether.h> 23 #include <linux/dsa/8021q.h> 24 #include "sja1105.h" 25 #include "sja1105_tas.h" 26 27 static void sja1105_hw_reset(struct gpio_desc *gpio, unsigned int pulse_len, 28 unsigned int startup_delay) 29 { 30 gpiod_set_value_cansleep(gpio, 1); 31 /* Wait for minimum reset pulse length */ 32 msleep(pulse_len); 33 gpiod_set_value_cansleep(gpio, 0); 34 /* Wait until chip is ready after reset */ 35 msleep(startup_delay); 36 } 37 38 static void 39 sja1105_port_allow_traffic(struct sja1105_l2_forwarding_entry *l2_fwd, 40 int from, int to, bool allow) 41 { 42 if (allow) { 43 l2_fwd[from].bc_domain |= BIT(to); 44 l2_fwd[from].reach_port |= BIT(to); 45 l2_fwd[from].fl_domain |= BIT(to); 46 } else { 47 l2_fwd[from].bc_domain &= ~BIT(to); 48 l2_fwd[from].reach_port &= ~BIT(to); 49 l2_fwd[from].fl_domain &= ~BIT(to); 50 } 51 } 52 53 /* Structure used to temporarily transport device tree 54 * settings into sja1105_setup 55 */ 56 struct sja1105_dt_port { 57 phy_interface_t phy_mode; 58 sja1105_mii_role_t role; 59 }; 60 61 static int sja1105_init_mac_settings(struct sja1105_private *priv) 62 { 63 struct sja1105_mac_config_entry default_mac = { 64 /* Enable all 8 priority queues on egress. 65 * Every queue i holds top[i] - base[i] frames. 66 * Sum of top[i] - base[i] is 511 (max hardware limit). 67 */ 68 .top = {0x3F, 0x7F, 0xBF, 0xFF, 0x13F, 0x17F, 0x1BF, 0x1FF}, 69 .base = {0x0, 0x40, 0x80, 0xC0, 0x100, 0x140, 0x180, 0x1C0}, 70 .enabled = {true, true, true, true, true, true, true, true}, 71 /* Keep standard IFG of 12 bytes on egress. */ 72 .ifg = 0, 73 /* Always put the MAC speed in automatic mode, where it can be 74 * adjusted at runtime by PHYLINK. 75 */ 76 .speed = SJA1105_SPEED_AUTO, 77 /* No static correction for 1-step 1588 events */ 78 .tp_delin = 0, 79 .tp_delout = 0, 80 /* Disable aging for critical TTEthernet traffic */ 81 .maxage = 0xFF, 82 /* Internal VLAN (pvid) to apply to untagged ingress */ 83 .vlanprio = 0, 84 .vlanid = 1, 85 .ing_mirr = false, 86 .egr_mirr = false, 87 /* Don't drop traffic with other EtherType than ETH_P_IP */ 88 .drpnona664 = false, 89 /* Don't drop double-tagged traffic */ 90 .drpdtag = false, 91 /* Don't drop untagged traffic */ 92 .drpuntag = false, 93 /* Don't retag 802.1p (VID 0) traffic with the pvid */ 94 .retag = false, 95 /* Disable learning and I/O on user ports by default - 96 * STP will enable it. 97 */ 98 .dyn_learn = false, 99 .egress = false, 100 .ingress = false, 101 }; 102 struct sja1105_mac_config_entry *mac; 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(SJA1105_NUM_PORTS, 115 table->ops->unpacked_entry_size, GFP_KERNEL); 116 if (!table->entries) 117 return -ENOMEM; 118 119 table->entry_count = SJA1105_NUM_PORTS; 120 121 mac = table->entries; 122 123 for (i = 0; i < SJA1105_NUM_PORTS; i++) { 124 mac[i] = default_mac; 125 if (i == dsa_upstream_port(priv->ds, i)) { 126 /* STP doesn't get called for CPU port, so we need to 127 * set the I/O parameters statically. 128 */ 129 mac[i].dyn_learn = true; 130 mac[i].ingress = true; 131 mac[i].egress = true; 132 } 133 } 134 135 return 0; 136 } 137 138 static int sja1105_init_mii_settings(struct sja1105_private *priv, 139 struct sja1105_dt_port *ports) 140 { 141 struct device *dev = &priv->spidev->dev; 142 struct sja1105_xmii_params_entry *mii; 143 struct sja1105_table *table; 144 int i; 145 146 table = &priv->static_config.tables[BLK_IDX_XMII_PARAMS]; 147 148 /* Discard previous xMII Mode Parameters Table */ 149 if (table->entry_count) { 150 kfree(table->entries); 151 table->entry_count = 0; 152 } 153 154 table->entries = kcalloc(SJA1105_MAX_XMII_PARAMS_COUNT, 155 table->ops->unpacked_entry_size, GFP_KERNEL); 156 if (!table->entries) 157 return -ENOMEM; 158 159 /* Override table based on PHYLINK DT bindings */ 160 table->entry_count = SJA1105_MAX_XMII_PARAMS_COUNT; 161 162 mii = table->entries; 163 164 for (i = 0; i < SJA1105_NUM_PORTS; i++) { 165 switch (ports[i].phy_mode) { 166 case PHY_INTERFACE_MODE_MII: 167 mii->xmii_mode[i] = XMII_MODE_MII; 168 break; 169 case PHY_INTERFACE_MODE_RMII: 170 mii->xmii_mode[i] = XMII_MODE_RMII; 171 break; 172 case PHY_INTERFACE_MODE_RGMII: 173 case PHY_INTERFACE_MODE_RGMII_ID: 174 case PHY_INTERFACE_MODE_RGMII_RXID: 175 case PHY_INTERFACE_MODE_RGMII_TXID: 176 mii->xmii_mode[i] = XMII_MODE_RGMII; 177 break; 178 default: 179 dev_err(dev, "Unsupported PHY mode %s!\n", 180 phy_modes(ports[i].phy_mode)); 181 } 182 183 mii->phy_mac[i] = ports[i].role; 184 } 185 return 0; 186 } 187 188 static int sja1105_init_static_fdb(struct sja1105_private *priv) 189 { 190 struct sja1105_table *table; 191 192 table = &priv->static_config.tables[BLK_IDX_L2_LOOKUP]; 193 194 /* We only populate the FDB table through dynamic 195 * L2 Address Lookup entries 196 */ 197 if (table->entry_count) { 198 kfree(table->entries); 199 table->entry_count = 0; 200 } 201 return 0; 202 } 203 204 static int sja1105_init_l2_lookup_params(struct sja1105_private *priv) 205 { 206 struct sja1105_table *table; 207 u64 max_fdb_entries = SJA1105_MAX_L2_LOOKUP_COUNT / SJA1105_NUM_PORTS; 208 struct sja1105_l2_lookup_params_entry default_l2_lookup_params = { 209 /* Learned FDB entries are forgotten after 300 seconds */ 210 .maxage = SJA1105_AGEING_TIME_MS(300000), 211 /* All entries within a FDB bin are available for learning */ 212 .dyn_tbsz = SJA1105ET_FDB_BIN_SIZE, 213 /* And the P/Q/R/S equivalent setting: */ 214 .start_dynspc = 0, 215 .maxaddrp = {max_fdb_entries, max_fdb_entries, max_fdb_entries, 216 max_fdb_entries, max_fdb_entries, }, 217 /* 2^8 + 2^5 + 2^3 + 2^2 + 2^1 + 1 in Koopman notation */ 218 .poly = 0x97, 219 /* This selects between Independent VLAN Learning (IVL) and 220 * Shared VLAN Learning (SVL) 221 */ 222 .shared_learn = true, 223 /* Don't discard management traffic based on ENFPORT - 224 * we don't perform SMAC port enforcement anyway, so 225 * what we are setting here doesn't matter. 226 */ 227 .no_enf_hostprt = false, 228 /* Don't learn SMAC for mac_fltres1 and mac_fltres0. 229 * Maybe correlate with no_linklocal_learn from bridge driver? 230 */ 231 .no_mgmt_learn = true, 232 /* P/Q/R/S only */ 233 .use_static = true, 234 /* Dynamically learned FDB entries can overwrite other (older) 235 * dynamic FDB entries 236 */ 237 .owr_dyn = true, 238 .drpnolearn = true, 239 }; 240 241 table = &priv->static_config.tables[BLK_IDX_L2_LOOKUP_PARAMS]; 242 243 if (table->entry_count) { 244 kfree(table->entries); 245 table->entry_count = 0; 246 } 247 248 table->entries = kcalloc(SJA1105_MAX_L2_LOOKUP_PARAMS_COUNT, 249 table->ops->unpacked_entry_size, GFP_KERNEL); 250 if (!table->entries) 251 return -ENOMEM; 252 253 table->entry_count = SJA1105_MAX_L2_LOOKUP_PARAMS_COUNT; 254 255 /* This table only has a single entry */ 256 ((struct sja1105_l2_lookup_params_entry *)table->entries)[0] = 257 default_l2_lookup_params; 258 259 return 0; 260 } 261 262 static int sja1105_init_static_vlan(struct sja1105_private *priv) 263 { 264 struct sja1105_table *table; 265 struct sja1105_vlan_lookup_entry pvid = { 266 .ving_mirr = 0, 267 .vegr_mirr = 0, 268 .vmemb_port = 0, 269 .vlan_bc = 0, 270 .tag_port = 0, 271 .vlanid = 1, 272 }; 273 int i; 274 275 table = &priv->static_config.tables[BLK_IDX_VLAN_LOOKUP]; 276 277 /* The static VLAN table will only contain the initial pvid of 1. 278 * All other VLANs are to be configured through dynamic entries, 279 * and kept in the static configuration table as backing memory. 280 */ 281 if (table->entry_count) { 282 kfree(table->entries); 283 table->entry_count = 0; 284 } 285 286 table->entries = kcalloc(1, table->ops->unpacked_entry_size, 287 GFP_KERNEL); 288 if (!table->entries) 289 return -ENOMEM; 290 291 table->entry_count = 1; 292 293 /* VLAN 1: all DT-defined ports are members; no restrictions on 294 * forwarding; always transmit priority-tagged frames as untagged. 295 */ 296 for (i = 0; i < SJA1105_NUM_PORTS; i++) { 297 pvid.vmemb_port |= BIT(i); 298 pvid.vlan_bc |= BIT(i); 299 pvid.tag_port &= ~BIT(i); 300 } 301 302 ((struct sja1105_vlan_lookup_entry *)table->entries)[0] = pvid; 303 return 0; 304 } 305 306 static int sja1105_init_l2_forwarding(struct sja1105_private *priv) 307 { 308 struct sja1105_l2_forwarding_entry *l2fwd; 309 struct sja1105_table *table; 310 int i, j; 311 312 table = &priv->static_config.tables[BLK_IDX_L2_FORWARDING]; 313 314 if (table->entry_count) { 315 kfree(table->entries); 316 table->entry_count = 0; 317 } 318 319 table->entries = kcalloc(SJA1105_MAX_L2_FORWARDING_COUNT, 320 table->ops->unpacked_entry_size, GFP_KERNEL); 321 if (!table->entries) 322 return -ENOMEM; 323 324 table->entry_count = SJA1105_MAX_L2_FORWARDING_COUNT; 325 326 l2fwd = table->entries; 327 328 /* First 5 entries define the forwarding rules */ 329 for (i = 0; i < SJA1105_NUM_PORTS; i++) { 330 unsigned int upstream = dsa_upstream_port(priv->ds, i); 331 332 for (j = 0; j < SJA1105_NUM_TC; j++) 333 l2fwd[i].vlan_pmap[j] = j; 334 335 if (i == upstream) 336 continue; 337 338 sja1105_port_allow_traffic(l2fwd, i, upstream, true); 339 sja1105_port_allow_traffic(l2fwd, upstream, i, true); 340 } 341 /* Next 8 entries define VLAN PCP mapping from ingress to egress. 342 * Create a one-to-one mapping. 343 */ 344 for (i = 0; i < SJA1105_NUM_TC; i++) 345 for (j = 0; j < SJA1105_NUM_PORTS; j++) 346 l2fwd[SJA1105_NUM_PORTS + i].vlan_pmap[j] = i; 347 348 return 0; 349 } 350 351 static int sja1105_init_l2_forwarding_params(struct sja1105_private *priv) 352 { 353 struct sja1105_l2_forwarding_params_entry default_l2fwd_params = { 354 /* Disallow dynamic reconfiguration of vlan_pmap */ 355 .max_dynp = 0, 356 /* Use a single memory partition for all ingress queues */ 357 .part_spc = { SJA1105_MAX_FRAME_MEMORY, 0, 0, 0, 0, 0, 0, 0 }, 358 }; 359 struct sja1105_table *table; 360 361 table = &priv->static_config.tables[BLK_IDX_L2_FORWARDING_PARAMS]; 362 363 if (table->entry_count) { 364 kfree(table->entries); 365 table->entry_count = 0; 366 } 367 368 table->entries = kcalloc(SJA1105_MAX_L2_FORWARDING_PARAMS_COUNT, 369 table->ops->unpacked_entry_size, GFP_KERNEL); 370 if (!table->entries) 371 return -ENOMEM; 372 373 table->entry_count = SJA1105_MAX_L2_FORWARDING_PARAMS_COUNT; 374 375 /* This table only has a single entry */ 376 ((struct sja1105_l2_forwarding_params_entry *)table->entries)[0] = 377 default_l2fwd_params; 378 379 return 0; 380 } 381 382 static int sja1105_init_general_params(struct sja1105_private *priv) 383 { 384 struct sja1105_general_params_entry default_general_params = { 385 /* Allow dynamic changing of the mirror port */ 386 .mirr_ptacu = true, 387 .switchid = priv->ds->index, 388 /* Priority queue for link-local management frames 389 * (both ingress to and egress from CPU - PTP, STP etc) 390 */ 391 .hostprio = 7, 392 .mac_fltres1 = SJA1105_LINKLOCAL_FILTER_A, 393 .mac_flt1 = SJA1105_LINKLOCAL_FILTER_A_MASK, 394 .incl_srcpt1 = false, 395 .send_meta1 = false, 396 .mac_fltres0 = SJA1105_LINKLOCAL_FILTER_B, 397 .mac_flt0 = SJA1105_LINKLOCAL_FILTER_B_MASK, 398 .incl_srcpt0 = false, 399 .send_meta0 = false, 400 /* The destination for traffic matching mac_fltres1 and 401 * mac_fltres0 on all ports except host_port. Such traffic 402 * receieved on host_port itself would be dropped, except 403 * by installing a temporary 'management route' 404 */ 405 .host_port = dsa_upstream_port(priv->ds, 0), 406 /* Default to an invalid value */ 407 .mirr_port = SJA1105_NUM_PORTS, 408 /* Link-local traffic received on casc_port will be forwarded 409 * to host_port without embedding the source port and device ID 410 * info in the destination MAC address (presumably because it 411 * is a cascaded port and a downstream SJA switch already did 412 * that). Default to an invalid port (to disable the feature) 413 * and overwrite this if we find any DSA (cascaded) ports. 414 */ 415 .casc_port = SJA1105_NUM_PORTS, 416 /* No TTEthernet */ 417 .vllupformat = 0, 418 .vlmarker = 0, 419 .vlmask = 0, 420 /* Only update correctionField for 1-step PTP (L2 transport) */ 421 .ignore2stf = 0, 422 /* Forcefully disable VLAN filtering by telling 423 * the switch that VLAN has a different EtherType. 424 */ 425 .tpid = ETH_P_SJA1105, 426 .tpid2 = ETH_P_SJA1105, 427 }; 428 struct sja1105_table *table; 429 430 table = &priv->static_config.tables[BLK_IDX_GENERAL_PARAMS]; 431 432 if (table->entry_count) { 433 kfree(table->entries); 434 table->entry_count = 0; 435 } 436 437 table->entries = kcalloc(SJA1105_MAX_GENERAL_PARAMS_COUNT, 438 table->ops->unpacked_entry_size, GFP_KERNEL); 439 if (!table->entries) 440 return -ENOMEM; 441 442 table->entry_count = SJA1105_MAX_GENERAL_PARAMS_COUNT; 443 444 /* This table only has a single entry */ 445 ((struct sja1105_general_params_entry *)table->entries)[0] = 446 default_general_params; 447 448 return 0; 449 } 450 451 #define SJA1105_RATE_MBPS(speed) (((speed) * 64000) / 1000) 452 453 static void sja1105_setup_policer(struct sja1105_l2_policing_entry *policing, 454 int index) 455 { 456 policing[index].sharindx = index; 457 policing[index].smax = 65535; /* Burst size in bytes */ 458 policing[index].rate = SJA1105_RATE_MBPS(1000); 459 policing[index].maxlen = ETH_FRAME_LEN + VLAN_HLEN + ETH_FCS_LEN; 460 policing[index].partition = 0; 461 } 462 463 static int sja1105_init_l2_policing(struct sja1105_private *priv) 464 { 465 struct sja1105_l2_policing_entry *policing; 466 struct sja1105_table *table; 467 int i, j, k; 468 469 table = &priv->static_config.tables[BLK_IDX_L2_POLICING]; 470 471 /* Discard previous L2 Policing Table */ 472 if (table->entry_count) { 473 kfree(table->entries); 474 table->entry_count = 0; 475 } 476 477 table->entries = kcalloc(SJA1105_MAX_L2_POLICING_COUNT, 478 table->ops->unpacked_entry_size, GFP_KERNEL); 479 if (!table->entries) 480 return -ENOMEM; 481 482 table->entry_count = SJA1105_MAX_L2_POLICING_COUNT; 483 484 policing = table->entries; 485 486 /* k sweeps through all unicast policers (0-39). 487 * bcast sweeps through policers 40-44. 488 */ 489 for (i = 0, k = 0; i < SJA1105_NUM_PORTS; i++) { 490 int bcast = (SJA1105_NUM_PORTS * SJA1105_NUM_TC) + i; 491 492 for (j = 0; j < SJA1105_NUM_TC; j++, k++) 493 sja1105_setup_policer(policing, k); 494 495 /* Set up this port's policer for broadcast traffic */ 496 sja1105_setup_policer(policing, bcast); 497 } 498 return 0; 499 } 500 501 static int sja1105_static_config_load(struct sja1105_private *priv, 502 struct sja1105_dt_port *ports) 503 { 504 int rc; 505 506 sja1105_static_config_free(&priv->static_config); 507 rc = sja1105_static_config_init(&priv->static_config, 508 priv->info->static_ops, 509 priv->info->device_id); 510 if (rc) 511 return rc; 512 513 /* Build static configuration */ 514 rc = sja1105_init_mac_settings(priv); 515 if (rc < 0) 516 return rc; 517 rc = sja1105_init_mii_settings(priv, ports); 518 if (rc < 0) 519 return rc; 520 rc = sja1105_init_static_fdb(priv); 521 if (rc < 0) 522 return rc; 523 rc = sja1105_init_static_vlan(priv); 524 if (rc < 0) 525 return rc; 526 rc = sja1105_init_l2_lookup_params(priv); 527 if (rc < 0) 528 return rc; 529 rc = sja1105_init_l2_forwarding(priv); 530 if (rc < 0) 531 return rc; 532 rc = sja1105_init_l2_forwarding_params(priv); 533 if (rc < 0) 534 return rc; 535 rc = sja1105_init_l2_policing(priv); 536 if (rc < 0) 537 return rc; 538 rc = sja1105_init_general_params(priv); 539 if (rc < 0) 540 return rc; 541 542 /* Send initial configuration to hardware via SPI */ 543 return sja1105_static_config_upload(priv); 544 } 545 546 static int sja1105_parse_rgmii_delays(struct sja1105_private *priv, 547 const struct sja1105_dt_port *ports) 548 { 549 int i; 550 551 for (i = 0; i < SJA1105_NUM_PORTS; i++) { 552 if (ports[i].role == XMII_MAC) 553 continue; 554 555 if (ports[i].phy_mode == PHY_INTERFACE_MODE_RGMII_RXID || 556 ports[i].phy_mode == PHY_INTERFACE_MODE_RGMII_ID) 557 priv->rgmii_rx_delay[i] = true; 558 559 if (ports[i].phy_mode == PHY_INTERFACE_MODE_RGMII_TXID || 560 ports[i].phy_mode == PHY_INTERFACE_MODE_RGMII_ID) 561 priv->rgmii_tx_delay[i] = true; 562 563 if ((priv->rgmii_rx_delay[i] || priv->rgmii_tx_delay[i]) && 564 !priv->info->setup_rgmii_delay) 565 return -EINVAL; 566 } 567 return 0; 568 } 569 570 static int sja1105_parse_ports_node(struct sja1105_private *priv, 571 struct sja1105_dt_port *ports, 572 struct device_node *ports_node) 573 { 574 struct device *dev = &priv->spidev->dev; 575 struct device_node *child; 576 577 for_each_available_child_of_node(ports_node, child) { 578 struct device_node *phy_node; 579 phy_interface_t phy_mode; 580 u32 index; 581 int err; 582 583 /* Get switch port number from DT */ 584 if (of_property_read_u32(child, "reg", &index) < 0) { 585 dev_err(dev, "Port number not defined in device tree " 586 "(property \"reg\")\n"); 587 of_node_put(child); 588 return -ENODEV; 589 } 590 591 /* Get PHY mode from DT */ 592 err = of_get_phy_mode(child, &phy_mode); 593 if (err) { 594 dev_err(dev, "Failed to read phy-mode or " 595 "phy-interface-type property for port %d\n", 596 index); 597 of_node_put(child); 598 return -ENODEV; 599 } 600 ports[index].phy_mode = phy_mode; 601 602 phy_node = of_parse_phandle(child, "phy-handle", 0); 603 if (!phy_node) { 604 if (!of_phy_is_fixed_link(child)) { 605 dev_err(dev, "phy-handle or fixed-link " 606 "properties missing!\n"); 607 of_node_put(child); 608 return -ENODEV; 609 } 610 /* phy-handle is missing, but fixed-link isn't. 611 * So it's a fixed link. Default to PHY role. 612 */ 613 ports[index].role = XMII_PHY; 614 } else { 615 /* phy-handle present => put port in MAC role */ 616 ports[index].role = XMII_MAC; 617 of_node_put(phy_node); 618 } 619 620 /* The MAC/PHY role can be overridden with explicit bindings */ 621 if (of_property_read_bool(child, "sja1105,role-mac")) 622 ports[index].role = XMII_MAC; 623 else if (of_property_read_bool(child, "sja1105,role-phy")) 624 ports[index].role = XMII_PHY; 625 } 626 627 return 0; 628 } 629 630 static int sja1105_parse_dt(struct sja1105_private *priv, 631 struct sja1105_dt_port *ports) 632 { 633 struct device *dev = &priv->spidev->dev; 634 struct device_node *switch_node = dev->of_node; 635 struct device_node *ports_node; 636 int rc; 637 638 ports_node = of_get_child_by_name(switch_node, "ports"); 639 if (!ports_node) { 640 dev_err(dev, "Incorrect bindings: absent \"ports\" node\n"); 641 return -ENODEV; 642 } 643 644 rc = sja1105_parse_ports_node(priv, ports, ports_node); 645 of_node_put(ports_node); 646 647 return rc; 648 } 649 650 /* Convert link speed from SJA1105 to ethtool encoding */ 651 static int sja1105_speed[] = { 652 [SJA1105_SPEED_AUTO] = SPEED_UNKNOWN, 653 [SJA1105_SPEED_10MBPS] = SPEED_10, 654 [SJA1105_SPEED_100MBPS] = SPEED_100, 655 [SJA1105_SPEED_1000MBPS] = SPEED_1000, 656 }; 657 658 /* Set link speed in the MAC configuration for a specific port. */ 659 static int sja1105_adjust_port_config(struct sja1105_private *priv, int port, 660 int speed_mbps) 661 { 662 struct sja1105_xmii_params_entry *mii; 663 struct sja1105_mac_config_entry *mac; 664 struct device *dev = priv->ds->dev; 665 sja1105_phy_interface_t phy_mode; 666 sja1105_speed_t speed; 667 int rc; 668 669 /* On P/Q/R/S, one can read from the device via the MAC reconfiguration 670 * tables. On E/T, MAC reconfig tables are not readable, only writable. 671 * We have to *know* what the MAC looks like. For the sake of keeping 672 * the code common, we'll use the static configuration tables as a 673 * reasonable approximation for both E/T and P/Q/R/S. 674 */ 675 mac = priv->static_config.tables[BLK_IDX_MAC_CONFIG].entries; 676 mii = priv->static_config.tables[BLK_IDX_XMII_PARAMS].entries; 677 678 switch (speed_mbps) { 679 case SPEED_UNKNOWN: 680 /* PHYLINK called sja1105_mac_config() to inform us about 681 * the state->interface, but AN has not completed and the 682 * speed is not yet valid. UM10944.pdf says that setting 683 * SJA1105_SPEED_AUTO at runtime disables the port, so that is 684 * ok for power consumption in case AN will never complete - 685 * otherwise PHYLINK should come back with a new update. 686 */ 687 speed = SJA1105_SPEED_AUTO; 688 break; 689 case SPEED_10: 690 speed = SJA1105_SPEED_10MBPS; 691 break; 692 case SPEED_100: 693 speed = SJA1105_SPEED_100MBPS; 694 break; 695 case SPEED_1000: 696 speed = SJA1105_SPEED_1000MBPS; 697 break; 698 default: 699 dev_err(dev, "Invalid speed %iMbps\n", speed_mbps); 700 return -EINVAL; 701 } 702 703 /* Overwrite SJA1105_SPEED_AUTO from the static MAC configuration 704 * table, since this will be used for the clocking setup, and we no 705 * longer need to store it in the static config (already told hardware 706 * we want auto during upload phase). 707 */ 708 mac[port].speed = speed; 709 710 /* Write to the dynamic reconfiguration tables */ 711 rc = sja1105_dynamic_config_write(priv, BLK_IDX_MAC_CONFIG, port, 712 &mac[port], true); 713 if (rc < 0) { 714 dev_err(dev, "Failed to write MAC config: %d\n", rc); 715 return rc; 716 } 717 718 /* Reconfigure the PLLs for the RGMII interfaces (required 125 MHz at 719 * gigabit, 25 MHz at 100 Mbps and 2.5 MHz at 10 Mbps). For MII and 720 * RMII no change of the clock setup is required. Actually, changing 721 * the clock setup does interrupt the clock signal for a certain time 722 * which causes trouble for all PHYs relying on this signal. 723 */ 724 phy_mode = mii->xmii_mode[port]; 725 if (phy_mode != XMII_MODE_RGMII) 726 return 0; 727 728 return sja1105_clocking_setup_port(priv, port); 729 } 730 731 /* The SJA1105 MAC programming model is through the static config (the xMII 732 * Mode table cannot be dynamically reconfigured), and we have to program 733 * that early (earlier than PHYLINK calls us, anyway). 734 * So just error out in case the connected PHY attempts to change the initial 735 * system interface MII protocol from what is defined in the DT, at least for 736 * now. 737 */ 738 static bool sja1105_phy_mode_mismatch(struct sja1105_private *priv, int port, 739 phy_interface_t interface) 740 { 741 struct sja1105_xmii_params_entry *mii; 742 sja1105_phy_interface_t phy_mode; 743 744 mii = priv->static_config.tables[BLK_IDX_XMII_PARAMS].entries; 745 phy_mode = mii->xmii_mode[port]; 746 747 switch (interface) { 748 case PHY_INTERFACE_MODE_MII: 749 return (phy_mode != XMII_MODE_MII); 750 case PHY_INTERFACE_MODE_RMII: 751 return (phy_mode != XMII_MODE_RMII); 752 case PHY_INTERFACE_MODE_RGMII: 753 case PHY_INTERFACE_MODE_RGMII_ID: 754 case PHY_INTERFACE_MODE_RGMII_RXID: 755 case PHY_INTERFACE_MODE_RGMII_TXID: 756 return (phy_mode != XMII_MODE_RGMII); 757 default: 758 return true; 759 } 760 } 761 762 static void sja1105_mac_config(struct dsa_switch *ds, int port, 763 unsigned int link_an_mode, 764 const struct phylink_link_state *state) 765 { 766 struct sja1105_private *priv = ds->priv; 767 768 if (sja1105_phy_mode_mismatch(priv, port, state->interface)) 769 return; 770 771 if (link_an_mode == MLO_AN_INBAND) { 772 dev_err(ds->dev, "In-band AN not supported!\n"); 773 return; 774 } 775 776 sja1105_adjust_port_config(priv, port, state->speed); 777 } 778 779 static void sja1105_mac_link_down(struct dsa_switch *ds, int port, 780 unsigned int mode, 781 phy_interface_t interface) 782 { 783 sja1105_inhibit_tx(ds->priv, BIT(port), true); 784 } 785 786 static void sja1105_mac_link_up(struct dsa_switch *ds, int port, 787 unsigned int mode, 788 phy_interface_t interface, 789 struct phy_device *phydev, 790 int speed, int duplex, 791 bool tx_pause, bool rx_pause) 792 { 793 sja1105_inhibit_tx(ds->priv, BIT(port), false); 794 } 795 796 static void sja1105_phylink_validate(struct dsa_switch *ds, int port, 797 unsigned long *supported, 798 struct phylink_link_state *state) 799 { 800 /* Construct a new mask which exhaustively contains all link features 801 * supported by the MAC, and then apply that (logical AND) to what will 802 * be sent to the PHY for "marketing". 803 */ 804 __ETHTOOL_DECLARE_LINK_MODE_MASK(mask) = { 0, }; 805 struct sja1105_private *priv = ds->priv; 806 struct sja1105_xmii_params_entry *mii; 807 808 mii = priv->static_config.tables[BLK_IDX_XMII_PARAMS].entries; 809 810 /* include/linux/phylink.h says: 811 * When @state->interface is %PHY_INTERFACE_MODE_NA, phylink 812 * expects the MAC driver to return all supported link modes. 813 */ 814 if (state->interface != PHY_INTERFACE_MODE_NA && 815 sja1105_phy_mode_mismatch(priv, port, state->interface)) { 816 bitmap_zero(supported, __ETHTOOL_LINK_MODE_MASK_NBITS); 817 return; 818 } 819 820 /* The MAC does not support pause frames, and also doesn't 821 * support half-duplex traffic modes. 822 */ 823 phylink_set(mask, Autoneg); 824 phylink_set(mask, MII); 825 phylink_set(mask, 10baseT_Full); 826 phylink_set(mask, 100baseT_Full); 827 if (mii->xmii_mode[port] == XMII_MODE_RGMII) 828 phylink_set(mask, 1000baseT_Full); 829 830 bitmap_and(supported, supported, mask, __ETHTOOL_LINK_MODE_MASK_NBITS); 831 bitmap_and(state->advertising, state->advertising, mask, 832 __ETHTOOL_LINK_MODE_MASK_NBITS); 833 } 834 835 static int 836 sja1105_find_static_fdb_entry(struct sja1105_private *priv, int port, 837 const struct sja1105_l2_lookup_entry *requested) 838 { 839 struct sja1105_l2_lookup_entry *l2_lookup; 840 struct sja1105_table *table; 841 int i; 842 843 table = &priv->static_config.tables[BLK_IDX_L2_LOOKUP]; 844 l2_lookup = table->entries; 845 846 for (i = 0; i < table->entry_count; i++) 847 if (l2_lookup[i].macaddr == requested->macaddr && 848 l2_lookup[i].vlanid == requested->vlanid && 849 l2_lookup[i].destports & BIT(port)) 850 return i; 851 852 return -1; 853 } 854 855 /* We want FDB entries added statically through the bridge command to persist 856 * across switch resets, which are a common thing during normal SJA1105 857 * operation. So we have to back them up in the static configuration tables 858 * and hence apply them on next static config upload... yay! 859 */ 860 static int 861 sja1105_static_fdb_change(struct sja1105_private *priv, int port, 862 const struct sja1105_l2_lookup_entry *requested, 863 bool keep) 864 { 865 struct sja1105_l2_lookup_entry *l2_lookup; 866 struct sja1105_table *table; 867 int rc, match; 868 869 table = &priv->static_config.tables[BLK_IDX_L2_LOOKUP]; 870 871 match = sja1105_find_static_fdb_entry(priv, port, requested); 872 if (match < 0) { 873 /* Can't delete a missing entry. */ 874 if (!keep) 875 return 0; 876 877 /* No match => new entry */ 878 rc = sja1105_table_resize(table, table->entry_count + 1); 879 if (rc) 880 return rc; 881 882 match = table->entry_count - 1; 883 } 884 885 /* Assign pointer after the resize (it may be new memory) */ 886 l2_lookup = table->entries; 887 888 /* We have a match. 889 * If the job was to add this FDB entry, it's already done (mostly 890 * anyway, since the port forwarding mask may have changed, case in 891 * which we update it). 892 * Otherwise we have to delete it. 893 */ 894 if (keep) { 895 l2_lookup[match] = *requested; 896 return 0; 897 } 898 899 /* To remove, the strategy is to overwrite the element with 900 * the last one, and then reduce the array size by 1 901 */ 902 l2_lookup[match] = l2_lookup[table->entry_count - 1]; 903 return sja1105_table_resize(table, table->entry_count - 1); 904 } 905 906 /* First-generation switches have a 4-way set associative TCAM that 907 * holds the FDB entries. An FDB index spans from 0 to 1023 and is comprised of 908 * a "bin" (grouping of 4 entries) and a "way" (an entry within a bin). 909 * For the placement of a newly learnt FDB entry, the switch selects the bin 910 * based on a hash function, and the way within that bin incrementally. 911 */ 912 static int sja1105et_fdb_index(int bin, int way) 913 { 914 return bin * SJA1105ET_FDB_BIN_SIZE + way; 915 } 916 917 static int sja1105et_is_fdb_entry_in_bin(struct sja1105_private *priv, int bin, 918 const u8 *addr, u16 vid, 919 struct sja1105_l2_lookup_entry *match, 920 int *last_unused) 921 { 922 int way; 923 924 for (way = 0; way < SJA1105ET_FDB_BIN_SIZE; way++) { 925 struct sja1105_l2_lookup_entry l2_lookup = {0}; 926 int index = sja1105et_fdb_index(bin, way); 927 928 /* Skip unused entries, optionally marking them 929 * into the return value 930 */ 931 if (sja1105_dynamic_config_read(priv, BLK_IDX_L2_LOOKUP, 932 index, &l2_lookup)) { 933 if (last_unused) 934 *last_unused = way; 935 continue; 936 } 937 938 if (l2_lookup.macaddr == ether_addr_to_u64(addr) && 939 l2_lookup.vlanid == vid) { 940 if (match) 941 *match = l2_lookup; 942 return way; 943 } 944 } 945 /* Return an invalid entry index if not found */ 946 return -1; 947 } 948 949 int sja1105et_fdb_add(struct dsa_switch *ds, int port, 950 const unsigned char *addr, u16 vid) 951 { 952 struct sja1105_l2_lookup_entry l2_lookup = {0}; 953 struct sja1105_private *priv = ds->priv; 954 struct device *dev = ds->dev; 955 int last_unused = -1; 956 int bin, way, rc; 957 958 bin = sja1105et_fdb_hash(priv, addr, vid); 959 960 way = sja1105et_is_fdb_entry_in_bin(priv, bin, addr, vid, 961 &l2_lookup, &last_unused); 962 if (way >= 0) { 963 /* We have an FDB entry. Is our port in the destination 964 * mask? If yes, we need to do nothing. If not, we need 965 * to rewrite the entry by adding this port to it. 966 */ 967 if (l2_lookup.destports & BIT(port)) 968 return 0; 969 l2_lookup.destports |= BIT(port); 970 } else { 971 int index = sja1105et_fdb_index(bin, way); 972 973 /* We don't have an FDB entry. We construct a new one and 974 * try to find a place for it within the FDB table. 975 */ 976 l2_lookup.macaddr = ether_addr_to_u64(addr); 977 l2_lookup.destports = BIT(port); 978 l2_lookup.vlanid = vid; 979 980 if (last_unused >= 0) { 981 way = last_unused; 982 } else { 983 /* Bin is full, need to evict somebody. 984 * Choose victim at random. If you get these messages 985 * often, you may need to consider changing the 986 * distribution function: 987 * static_config[BLK_IDX_L2_LOOKUP_PARAMS].entries->poly 988 */ 989 get_random_bytes(&way, sizeof(u8)); 990 way %= SJA1105ET_FDB_BIN_SIZE; 991 dev_warn(dev, "Warning, FDB bin %d full while adding entry for %pM. Evicting entry %u.\n", 992 bin, addr, way); 993 /* Evict entry */ 994 sja1105_dynamic_config_write(priv, BLK_IDX_L2_LOOKUP, 995 index, NULL, false); 996 } 997 } 998 l2_lookup.index = sja1105et_fdb_index(bin, way); 999 1000 rc = sja1105_dynamic_config_write(priv, BLK_IDX_L2_LOOKUP, 1001 l2_lookup.index, &l2_lookup, 1002 true); 1003 if (rc < 0) 1004 return rc; 1005 1006 return sja1105_static_fdb_change(priv, port, &l2_lookup, true); 1007 } 1008 1009 int sja1105et_fdb_del(struct dsa_switch *ds, int port, 1010 const unsigned char *addr, u16 vid) 1011 { 1012 struct sja1105_l2_lookup_entry l2_lookup = {0}; 1013 struct sja1105_private *priv = ds->priv; 1014 int index, bin, way, rc; 1015 bool keep; 1016 1017 bin = sja1105et_fdb_hash(priv, addr, vid); 1018 way = sja1105et_is_fdb_entry_in_bin(priv, bin, addr, vid, 1019 &l2_lookup, NULL); 1020 if (way < 0) 1021 return 0; 1022 index = sja1105et_fdb_index(bin, way); 1023 1024 /* We have an FDB entry. Is our port in the destination mask? If yes, 1025 * we need to remove it. If the resulting port mask becomes empty, we 1026 * need to completely evict the FDB entry. 1027 * Otherwise we just write it back. 1028 */ 1029 l2_lookup.destports &= ~BIT(port); 1030 1031 if (l2_lookup.destports) 1032 keep = true; 1033 else 1034 keep = false; 1035 1036 rc = sja1105_dynamic_config_write(priv, BLK_IDX_L2_LOOKUP, 1037 index, &l2_lookup, keep); 1038 if (rc < 0) 1039 return rc; 1040 1041 return sja1105_static_fdb_change(priv, port, &l2_lookup, keep); 1042 } 1043 1044 int sja1105pqrs_fdb_add(struct dsa_switch *ds, int port, 1045 const unsigned char *addr, u16 vid) 1046 { 1047 struct sja1105_l2_lookup_entry l2_lookup = {0}; 1048 struct sja1105_private *priv = ds->priv; 1049 int rc, i; 1050 1051 /* Search for an existing entry in the FDB table */ 1052 l2_lookup.macaddr = ether_addr_to_u64(addr); 1053 l2_lookup.vlanid = vid; 1054 l2_lookup.iotag = SJA1105_S_TAG; 1055 l2_lookup.mask_macaddr = GENMASK_ULL(ETH_ALEN * 8 - 1, 0); 1056 if (dsa_port_is_vlan_filtering(dsa_to_port(ds, port))) { 1057 l2_lookup.mask_vlanid = VLAN_VID_MASK; 1058 l2_lookup.mask_iotag = BIT(0); 1059 } else { 1060 l2_lookup.mask_vlanid = 0; 1061 l2_lookup.mask_iotag = 0; 1062 } 1063 l2_lookup.destports = BIT(port); 1064 1065 rc = sja1105_dynamic_config_read(priv, BLK_IDX_L2_LOOKUP, 1066 SJA1105_SEARCH, &l2_lookup); 1067 if (rc == 0) { 1068 /* Found and this port is already in the entry's 1069 * port mask => job done 1070 */ 1071 if (l2_lookup.destports & BIT(port)) 1072 return 0; 1073 /* l2_lookup.index is populated by the switch in case it 1074 * found something. 1075 */ 1076 l2_lookup.destports |= BIT(port); 1077 goto skip_finding_an_index; 1078 } 1079 1080 /* Not found, so try to find an unused spot in the FDB. 1081 * This is slightly inefficient because the strategy is knock-knock at 1082 * every possible position from 0 to 1023. 1083 */ 1084 for (i = 0; i < SJA1105_MAX_L2_LOOKUP_COUNT; i++) { 1085 rc = sja1105_dynamic_config_read(priv, BLK_IDX_L2_LOOKUP, 1086 i, NULL); 1087 if (rc < 0) 1088 break; 1089 } 1090 if (i == SJA1105_MAX_L2_LOOKUP_COUNT) { 1091 dev_err(ds->dev, "FDB is full, cannot add entry.\n"); 1092 return -EINVAL; 1093 } 1094 l2_lookup.lockeds = true; 1095 l2_lookup.index = i; 1096 1097 skip_finding_an_index: 1098 rc = sja1105_dynamic_config_write(priv, BLK_IDX_L2_LOOKUP, 1099 l2_lookup.index, &l2_lookup, 1100 true); 1101 if (rc < 0) 1102 return rc; 1103 1104 return sja1105_static_fdb_change(priv, port, &l2_lookup, true); 1105 } 1106 1107 int sja1105pqrs_fdb_del(struct dsa_switch *ds, int port, 1108 const unsigned char *addr, u16 vid) 1109 { 1110 struct sja1105_l2_lookup_entry l2_lookup = {0}; 1111 struct sja1105_private *priv = ds->priv; 1112 bool keep; 1113 int rc; 1114 1115 l2_lookup.macaddr = ether_addr_to_u64(addr); 1116 l2_lookup.vlanid = vid; 1117 l2_lookup.iotag = SJA1105_S_TAG; 1118 l2_lookup.mask_macaddr = GENMASK_ULL(ETH_ALEN * 8 - 1, 0); 1119 if (dsa_port_is_vlan_filtering(dsa_to_port(ds, port))) { 1120 l2_lookup.mask_vlanid = VLAN_VID_MASK; 1121 l2_lookup.mask_iotag = BIT(0); 1122 } else { 1123 l2_lookup.mask_vlanid = 0; 1124 l2_lookup.mask_iotag = 0; 1125 } 1126 l2_lookup.destports = BIT(port); 1127 1128 rc = sja1105_dynamic_config_read(priv, BLK_IDX_L2_LOOKUP, 1129 SJA1105_SEARCH, &l2_lookup); 1130 if (rc < 0) 1131 return 0; 1132 1133 l2_lookup.destports &= ~BIT(port); 1134 1135 /* Decide whether we remove just this port from the FDB entry, 1136 * or if we remove it completely. 1137 */ 1138 if (l2_lookup.destports) 1139 keep = true; 1140 else 1141 keep = false; 1142 1143 rc = sja1105_dynamic_config_write(priv, BLK_IDX_L2_LOOKUP, 1144 l2_lookup.index, &l2_lookup, keep); 1145 if (rc < 0) 1146 return rc; 1147 1148 return sja1105_static_fdb_change(priv, port, &l2_lookup, keep); 1149 } 1150 1151 static int sja1105_fdb_add(struct dsa_switch *ds, int port, 1152 const unsigned char *addr, u16 vid) 1153 { 1154 struct sja1105_private *priv = ds->priv; 1155 1156 /* dsa_8021q is in effect when the bridge's vlan_filtering isn't, 1157 * so the switch still does some VLAN processing internally. 1158 * But Shared VLAN Learning (SVL) is also active, and it will take 1159 * care of autonomous forwarding between the unique pvid's of each 1160 * port. Here we just make sure that users can't add duplicate FDB 1161 * entries when in this mode - the actual VID doesn't matter except 1162 * for what gets printed in 'bridge fdb show'. In the case of zero, 1163 * no VID gets printed at all. 1164 */ 1165 if (!dsa_port_is_vlan_filtering(dsa_to_port(ds, port))) 1166 vid = 0; 1167 1168 return priv->info->fdb_add_cmd(ds, port, addr, vid); 1169 } 1170 1171 static int sja1105_fdb_del(struct dsa_switch *ds, int port, 1172 const unsigned char *addr, u16 vid) 1173 { 1174 struct sja1105_private *priv = ds->priv; 1175 1176 if (!dsa_port_is_vlan_filtering(dsa_to_port(ds, port))) 1177 vid = 0; 1178 1179 return priv->info->fdb_del_cmd(ds, port, addr, vid); 1180 } 1181 1182 static int sja1105_fdb_dump(struct dsa_switch *ds, int port, 1183 dsa_fdb_dump_cb_t *cb, void *data) 1184 { 1185 struct sja1105_private *priv = ds->priv; 1186 struct device *dev = ds->dev; 1187 int i; 1188 1189 for (i = 0; i < SJA1105_MAX_L2_LOOKUP_COUNT; i++) { 1190 struct sja1105_l2_lookup_entry l2_lookup = {0}; 1191 u8 macaddr[ETH_ALEN]; 1192 int rc; 1193 1194 rc = sja1105_dynamic_config_read(priv, BLK_IDX_L2_LOOKUP, 1195 i, &l2_lookup); 1196 /* No fdb entry at i, not an issue */ 1197 if (rc == -ENOENT) 1198 continue; 1199 if (rc) { 1200 dev_err(dev, "Failed to dump FDB: %d\n", rc); 1201 return rc; 1202 } 1203 1204 /* FDB dump callback is per port. This means we have to 1205 * disregard a valid entry if it's not for this port, even if 1206 * only to revisit it later. This is inefficient because the 1207 * 1024-sized FDB table needs to be traversed 4 times through 1208 * SPI during a 'bridge fdb show' command. 1209 */ 1210 if (!(l2_lookup.destports & BIT(port))) 1211 continue; 1212 u64_to_ether_addr(l2_lookup.macaddr, macaddr); 1213 1214 /* We need to hide the dsa_8021q VLANs from the user. */ 1215 if (!dsa_port_is_vlan_filtering(dsa_to_port(ds, port))) 1216 l2_lookup.vlanid = 0; 1217 cb(macaddr, l2_lookup.vlanid, l2_lookup.lockeds, data); 1218 } 1219 return 0; 1220 } 1221 1222 /* This callback needs to be present */ 1223 static int sja1105_mdb_prepare(struct dsa_switch *ds, int port, 1224 const struct switchdev_obj_port_mdb *mdb) 1225 { 1226 return 0; 1227 } 1228 1229 static void sja1105_mdb_add(struct dsa_switch *ds, int port, 1230 const struct switchdev_obj_port_mdb *mdb) 1231 { 1232 sja1105_fdb_add(ds, port, mdb->addr, mdb->vid); 1233 } 1234 1235 static int sja1105_mdb_del(struct dsa_switch *ds, int port, 1236 const struct switchdev_obj_port_mdb *mdb) 1237 { 1238 return sja1105_fdb_del(ds, port, mdb->addr, mdb->vid); 1239 } 1240 1241 static int sja1105_bridge_member(struct dsa_switch *ds, int port, 1242 struct net_device *br, bool member) 1243 { 1244 struct sja1105_l2_forwarding_entry *l2_fwd; 1245 struct sja1105_private *priv = ds->priv; 1246 int i, rc; 1247 1248 l2_fwd = priv->static_config.tables[BLK_IDX_L2_FORWARDING].entries; 1249 1250 for (i = 0; i < SJA1105_NUM_PORTS; i++) { 1251 /* Add this port to the forwarding matrix of the 1252 * other ports in the same bridge, and viceversa. 1253 */ 1254 if (!dsa_is_user_port(ds, i)) 1255 continue; 1256 /* For the ports already under the bridge, only one thing needs 1257 * to be done, and that is to add this port to their 1258 * reachability domain. So we can perform the SPI write for 1259 * them immediately. However, for this port itself (the one 1260 * that is new to the bridge), we need to add all other ports 1261 * to its reachability domain. So we do that incrementally in 1262 * this loop, and perform the SPI write only at the end, once 1263 * the domain contains all other bridge ports. 1264 */ 1265 if (i == port) 1266 continue; 1267 if (dsa_to_port(ds, i)->bridge_dev != br) 1268 continue; 1269 sja1105_port_allow_traffic(l2_fwd, i, port, member); 1270 sja1105_port_allow_traffic(l2_fwd, port, i, member); 1271 1272 rc = sja1105_dynamic_config_write(priv, BLK_IDX_L2_FORWARDING, 1273 i, &l2_fwd[i], true); 1274 if (rc < 0) 1275 return rc; 1276 } 1277 1278 return sja1105_dynamic_config_write(priv, BLK_IDX_L2_FORWARDING, 1279 port, &l2_fwd[port], true); 1280 } 1281 1282 static void sja1105_bridge_stp_state_set(struct dsa_switch *ds, int port, 1283 u8 state) 1284 { 1285 struct sja1105_private *priv = ds->priv; 1286 struct sja1105_mac_config_entry *mac; 1287 1288 mac = priv->static_config.tables[BLK_IDX_MAC_CONFIG].entries; 1289 1290 switch (state) { 1291 case BR_STATE_DISABLED: 1292 case BR_STATE_BLOCKING: 1293 /* From UM10944 description of DRPDTAG (why put this there?): 1294 * "Management traffic flows to the port regardless of the state 1295 * of the INGRESS flag". So BPDUs are still be allowed to pass. 1296 * At the moment no difference between DISABLED and BLOCKING. 1297 */ 1298 mac[port].ingress = false; 1299 mac[port].egress = false; 1300 mac[port].dyn_learn = false; 1301 break; 1302 case BR_STATE_LISTENING: 1303 mac[port].ingress = true; 1304 mac[port].egress = false; 1305 mac[port].dyn_learn = false; 1306 break; 1307 case BR_STATE_LEARNING: 1308 mac[port].ingress = true; 1309 mac[port].egress = false; 1310 mac[port].dyn_learn = true; 1311 break; 1312 case BR_STATE_FORWARDING: 1313 mac[port].ingress = true; 1314 mac[port].egress = true; 1315 mac[port].dyn_learn = true; 1316 break; 1317 default: 1318 dev_err(ds->dev, "invalid STP state: %d\n", state); 1319 return; 1320 } 1321 1322 sja1105_dynamic_config_write(priv, BLK_IDX_MAC_CONFIG, port, 1323 &mac[port], true); 1324 } 1325 1326 static int sja1105_bridge_join(struct dsa_switch *ds, int port, 1327 struct net_device *br) 1328 { 1329 return sja1105_bridge_member(ds, port, br, true); 1330 } 1331 1332 static void sja1105_bridge_leave(struct dsa_switch *ds, int port, 1333 struct net_device *br) 1334 { 1335 sja1105_bridge_member(ds, port, br, false); 1336 } 1337 1338 static const char * const sja1105_reset_reasons[] = { 1339 [SJA1105_VLAN_FILTERING] = "VLAN filtering", 1340 [SJA1105_RX_HWTSTAMPING] = "RX timestamping", 1341 [SJA1105_AGEING_TIME] = "Ageing time", 1342 [SJA1105_SCHEDULING] = "Time-aware scheduling", 1343 }; 1344 1345 /* For situations where we need to change a setting at runtime that is only 1346 * available through the static configuration, resetting the switch in order 1347 * to upload the new static config is unavoidable. Back up the settings we 1348 * modify at runtime (currently only MAC) and restore them after uploading, 1349 * such that this operation is relatively seamless. 1350 */ 1351 int sja1105_static_config_reload(struct sja1105_private *priv, 1352 enum sja1105_reset_reason reason) 1353 { 1354 struct ptp_system_timestamp ptp_sts_before; 1355 struct ptp_system_timestamp ptp_sts_after; 1356 struct sja1105_mac_config_entry *mac; 1357 int speed_mbps[SJA1105_NUM_PORTS]; 1358 struct dsa_switch *ds = priv->ds; 1359 s64 t1, t2, t3, t4; 1360 s64 t12, t34; 1361 int rc, i; 1362 s64 now; 1363 1364 mutex_lock(&priv->mgmt_lock); 1365 1366 mac = priv->static_config.tables[BLK_IDX_MAC_CONFIG].entries; 1367 1368 /* Back up the dynamic link speed changed by sja1105_adjust_port_config 1369 * in order to temporarily restore it to SJA1105_SPEED_AUTO - which the 1370 * switch wants to see in the static config in order to allow us to 1371 * change it through the dynamic interface later. 1372 */ 1373 for (i = 0; i < SJA1105_NUM_PORTS; i++) { 1374 speed_mbps[i] = sja1105_speed[mac[i].speed]; 1375 mac[i].speed = SJA1105_SPEED_AUTO; 1376 } 1377 1378 /* No PTP operations can run right now */ 1379 mutex_lock(&priv->ptp_data.lock); 1380 1381 rc = __sja1105_ptp_gettimex(ds, &now, &ptp_sts_before); 1382 if (rc < 0) 1383 goto out_unlock_ptp; 1384 1385 /* Reset switch and send updated static configuration */ 1386 rc = sja1105_static_config_upload(priv); 1387 if (rc < 0) 1388 goto out_unlock_ptp; 1389 1390 rc = __sja1105_ptp_settime(ds, 0, &ptp_sts_after); 1391 if (rc < 0) 1392 goto out_unlock_ptp; 1393 1394 t1 = timespec64_to_ns(&ptp_sts_before.pre_ts); 1395 t2 = timespec64_to_ns(&ptp_sts_before.post_ts); 1396 t3 = timespec64_to_ns(&ptp_sts_after.pre_ts); 1397 t4 = timespec64_to_ns(&ptp_sts_after.post_ts); 1398 /* Mid point, corresponds to pre-reset PTPCLKVAL */ 1399 t12 = t1 + (t2 - t1) / 2; 1400 /* Mid point, corresponds to post-reset PTPCLKVAL, aka 0 */ 1401 t34 = t3 + (t4 - t3) / 2; 1402 /* Advance PTPCLKVAL by the time it took since its readout */ 1403 now += (t34 - t12); 1404 1405 __sja1105_ptp_adjtime(ds, now); 1406 1407 out_unlock_ptp: 1408 mutex_unlock(&priv->ptp_data.lock); 1409 1410 dev_info(priv->ds->dev, 1411 "Reset switch and programmed static config. Reason: %s\n", 1412 sja1105_reset_reasons[reason]); 1413 1414 /* Configure the CGU (PLLs) for MII and RMII PHYs. 1415 * For these interfaces there is no dynamic configuration 1416 * needed, since PLLs have same settings at all speeds. 1417 */ 1418 rc = sja1105_clocking_setup(priv); 1419 if (rc < 0) 1420 goto out; 1421 1422 for (i = 0; i < SJA1105_NUM_PORTS; i++) { 1423 rc = sja1105_adjust_port_config(priv, i, speed_mbps[i]); 1424 if (rc < 0) 1425 goto out; 1426 } 1427 out: 1428 mutex_unlock(&priv->mgmt_lock); 1429 1430 return rc; 1431 } 1432 1433 static int sja1105_pvid_apply(struct sja1105_private *priv, int port, u16 pvid) 1434 { 1435 struct sja1105_mac_config_entry *mac; 1436 1437 mac = priv->static_config.tables[BLK_IDX_MAC_CONFIG].entries; 1438 1439 mac[port].vlanid = pvid; 1440 1441 return sja1105_dynamic_config_write(priv, BLK_IDX_MAC_CONFIG, port, 1442 &mac[port], true); 1443 } 1444 1445 static int sja1105_is_vlan_configured(struct sja1105_private *priv, u16 vid) 1446 { 1447 struct sja1105_vlan_lookup_entry *vlan; 1448 int count, i; 1449 1450 vlan = priv->static_config.tables[BLK_IDX_VLAN_LOOKUP].entries; 1451 count = priv->static_config.tables[BLK_IDX_VLAN_LOOKUP].entry_count; 1452 1453 for (i = 0; i < count; i++) 1454 if (vlan[i].vlanid == vid) 1455 return i; 1456 1457 /* Return an invalid entry index if not found */ 1458 return -1; 1459 } 1460 1461 static int sja1105_vlan_apply(struct sja1105_private *priv, int port, u16 vid, 1462 bool enabled, bool untagged) 1463 { 1464 struct sja1105_vlan_lookup_entry *vlan; 1465 struct sja1105_table *table; 1466 bool keep = true; 1467 int match, rc; 1468 1469 table = &priv->static_config.tables[BLK_IDX_VLAN_LOOKUP]; 1470 1471 match = sja1105_is_vlan_configured(priv, vid); 1472 if (match < 0) { 1473 /* Can't delete a missing entry. */ 1474 if (!enabled) 1475 return 0; 1476 rc = sja1105_table_resize(table, table->entry_count + 1); 1477 if (rc) 1478 return rc; 1479 match = table->entry_count - 1; 1480 } 1481 /* Assign pointer after the resize (it's new memory) */ 1482 vlan = table->entries; 1483 vlan[match].vlanid = vid; 1484 if (enabled) { 1485 vlan[match].vlan_bc |= BIT(port); 1486 vlan[match].vmemb_port |= BIT(port); 1487 } else { 1488 vlan[match].vlan_bc &= ~BIT(port); 1489 vlan[match].vmemb_port &= ~BIT(port); 1490 } 1491 /* Also unset tag_port if removing this VLAN was requested, 1492 * just so we don't have a confusing bitmap (no practical purpose). 1493 */ 1494 if (untagged || !enabled) 1495 vlan[match].tag_port &= ~BIT(port); 1496 else 1497 vlan[match].tag_port |= BIT(port); 1498 /* If there's no port left as member of this VLAN, 1499 * it's time for it to go. 1500 */ 1501 if (!vlan[match].vmemb_port) 1502 keep = false; 1503 1504 dev_dbg(priv->ds->dev, 1505 "%s: port %d, vid %llu, broadcast domain 0x%llx, " 1506 "port members 0x%llx, tagged ports 0x%llx, keep %d\n", 1507 __func__, port, vlan[match].vlanid, vlan[match].vlan_bc, 1508 vlan[match].vmemb_port, vlan[match].tag_port, keep); 1509 1510 rc = sja1105_dynamic_config_write(priv, BLK_IDX_VLAN_LOOKUP, vid, 1511 &vlan[match], keep); 1512 if (rc < 0) 1513 return rc; 1514 1515 if (!keep) 1516 return sja1105_table_delete_entry(table, match); 1517 1518 return 0; 1519 } 1520 1521 static int sja1105_setup_8021q_tagging(struct dsa_switch *ds, bool enabled) 1522 { 1523 int rc, i; 1524 1525 for (i = 0; i < SJA1105_NUM_PORTS; i++) { 1526 rc = dsa_port_setup_8021q_tagging(ds, i, enabled); 1527 if (rc < 0) { 1528 dev_err(ds->dev, "Failed to setup VLAN tagging for port %d: %d\n", 1529 i, rc); 1530 return rc; 1531 } 1532 } 1533 dev_info(ds->dev, "%s switch tagging\n", 1534 enabled ? "Enabled" : "Disabled"); 1535 return 0; 1536 } 1537 1538 static enum dsa_tag_protocol 1539 sja1105_get_tag_protocol(struct dsa_switch *ds, int port, 1540 enum dsa_tag_protocol mp) 1541 { 1542 return DSA_TAG_PROTO_SJA1105; 1543 } 1544 1545 /* This callback needs to be present */ 1546 static int sja1105_vlan_prepare(struct dsa_switch *ds, int port, 1547 const struct switchdev_obj_port_vlan *vlan) 1548 { 1549 return 0; 1550 } 1551 1552 /* The TPID setting belongs to the General Parameters table, 1553 * which can only be partially reconfigured at runtime (and not the TPID). 1554 * So a switch reset is required. 1555 */ 1556 static int sja1105_vlan_filtering(struct dsa_switch *ds, int port, bool enabled) 1557 { 1558 struct sja1105_l2_lookup_params_entry *l2_lookup_params; 1559 struct sja1105_general_params_entry *general_params; 1560 struct sja1105_private *priv = ds->priv; 1561 struct sja1105_table *table; 1562 u16 tpid, tpid2; 1563 int rc; 1564 1565 if (enabled) { 1566 /* Enable VLAN filtering. */ 1567 tpid = ETH_P_8021Q; 1568 tpid2 = ETH_P_8021AD; 1569 } else { 1570 /* Disable VLAN filtering. */ 1571 tpid = ETH_P_SJA1105; 1572 tpid2 = ETH_P_SJA1105; 1573 } 1574 1575 table = &priv->static_config.tables[BLK_IDX_GENERAL_PARAMS]; 1576 general_params = table->entries; 1577 /* EtherType used to identify inner tagged (C-tag) VLAN traffic */ 1578 general_params->tpid = tpid; 1579 /* EtherType used to identify outer tagged (S-tag) VLAN traffic */ 1580 general_params->tpid2 = tpid2; 1581 /* When VLAN filtering is on, we need to at least be able to 1582 * decode management traffic through the "backup plan". 1583 */ 1584 general_params->incl_srcpt1 = enabled; 1585 general_params->incl_srcpt0 = enabled; 1586 1587 /* VLAN filtering => independent VLAN learning. 1588 * No VLAN filtering => shared VLAN learning. 1589 * 1590 * In shared VLAN learning mode, untagged traffic still gets 1591 * pvid-tagged, and the FDB table gets populated with entries 1592 * containing the "real" (pvid or from VLAN tag) VLAN ID. 1593 * However the switch performs a masked L2 lookup in the FDB, 1594 * effectively only looking up a frame's DMAC (and not VID) for the 1595 * forwarding decision. 1596 * 1597 * This is extremely convenient for us, because in modes with 1598 * vlan_filtering=0, dsa_8021q actually installs unique pvid's into 1599 * each front panel port. This is good for identification but breaks 1600 * learning badly - the VID of the learnt FDB entry is unique, aka 1601 * no frames coming from any other port are going to have it. So 1602 * for forwarding purposes, this is as though learning was broken 1603 * (all frames get flooded). 1604 */ 1605 table = &priv->static_config.tables[BLK_IDX_L2_LOOKUP_PARAMS]; 1606 l2_lookup_params = table->entries; 1607 l2_lookup_params->shared_learn = !enabled; 1608 1609 rc = sja1105_static_config_reload(priv, SJA1105_VLAN_FILTERING); 1610 if (rc) 1611 dev_err(ds->dev, "Failed to change VLAN Ethertype\n"); 1612 1613 /* Switch port identification based on 802.1Q is only passable 1614 * if we are not under a vlan_filtering bridge. So make sure 1615 * the two configurations are mutually exclusive. 1616 */ 1617 return sja1105_setup_8021q_tagging(ds, !enabled); 1618 } 1619 1620 static void sja1105_vlan_add(struct dsa_switch *ds, int port, 1621 const struct switchdev_obj_port_vlan *vlan) 1622 { 1623 struct sja1105_private *priv = ds->priv; 1624 u16 vid; 1625 int rc; 1626 1627 for (vid = vlan->vid_begin; vid <= vlan->vid_end; vid++) { 1628 rc = sja1105_vlan_apply(priv, port, vid, true, vlan->flags & 1629 BRIDGE_VLAN_INFO_UNTAGGED); 1630 if (rc < 0) { 1631 dev_err(ds->dev, "Failed to add VLAN %d to port %d: %d\n", 1632 vid, port, rc); 1633 return; 1634 } 1635 if (vlan->flags & BRIDGE_VLAN_INFO_PVID) { 1636 rc = sja1105_pvid_apply(ds->priv, port, vid); 1637 if (rc < 0) { 1638 dev_err(ds->dev, "Failed to set pvid %d on port %d: %d\n", 1639 vid, port, rc); 1640 return; 1641 } 1642 } 1643 } 1644 } 1645 1646 static int sja1105_vlan_del(struct dsa_switch *ds, int port, 1647 const struct switchdev_obj_port_vlan *vlan) 1648 { 1649 struct sja1105_private *priv = ds->priv; 1650 u16 vid; 1651 int rc; 1652 1653 for (vid = vlan->vid_begin; vid <= vlan->vid_end; vid++) { 1654 rc = sja1105_vlan_apply(priv, port, vid, false, vlan->flags & 1655 BRIDGE_VLAN_INFO_UNTAGGED); 1656 if (rc < 0) { 1657 dev_err(ds->dev, "Failed to remove VLAN %d from port %d: %d\n", 1658 vid, port, rc); 1659 return rc; 1660 } 1661 } 1662 return 0; 1663 } 1664 1665 /* The programming model for the SJA1105 switch is "all-at-once" via static 1666 * configuration tables. Some of these can be dynamically modified at runtime, 1667 * but not the xMII mode parameters table. 1668 * Furthermode, some PHYs may not have crystals for generating their clocks 1669 * (e.g. RMII). Instead, their 50MHz clock is supplied via the SJA1105 port's 1670 * ref_clk pin. So port clocking needs to be initialized early, before 1671 * connecting to PHYs is attempted, otherwise they won't respond through MDIO. 1672 * Setting correct PHY link speed does not matter now. 1673 * But dsa_slave_phy_setup is called later than sja1105_setup, so the PHY 1674 * bindings are not yet parsed by DSA core. We need to parse early so that we 1675 * can populate the xMII mode parameters table. 1676 */ 1677 static int sja1105_setup(struct dsa_switch *ds) 1678 { 1679 struct sja1105_dt_port ports[SJA1105_NUM_PORTS]; 1680 struct sja1105_private *priv = ds->priv; 1681 int rc; 1682 1683 rc = sja1105_parse_dt(priv, ports); 1684 if (rc < 0) { 1685 dev_err(ds->dev, "Failed to parse DT: %d\n", rc); 1686 return rc; 1687 } 1688 1689 /* Error out early if internal delays are required through DT 1690 * and we can't apply them. 1691 */ 1692 rc = sja1105_parse_rgmii_delays(priv, ports); 1693 if (rc < 0) { 1694 dev_err(ds->dev, "RGMII delay not supported\n"); 1695 return rc; 1696 } 1697 1698 rc = sja1105_ptp_clock_register(ds); 1699 if (rc < 0) { 1700 dev_err(ds->dev, "Failed to register PTP clock: %d\n", rc); 1701 return rc; 1702 } 1703 /* Create and send configuration down to device */ 1704 rc = sja1105_static_config_load(priv, ports); 1705 if (rc < 0) { 1706 dev_err(ds->dev, "Failed to load static config: %d\n", rc); 1707 return rc; 1708 } 1709 /* Configure the CGU (PHY link modes and speeds) */ 1710 rc = sja1105_clocking_setup(priv); 1711 if (rc < 0) { 1712 dev_err(ds->dev, "Failed to configure MII clocking: %d\n", rc); 1713 return rc; 1714 } 1715 /* On SJA1105, VLAN filtering per se is always enabled in hardware. 1716 * The only thing we can do to disable it is lie about what the 802.1Q 1717 * EtherType is. 1718 * So it will still try to apply VLAN filtering, but all ingress 1719 * traffic (except frames received with EtherType of ETH_P_SJA1105) 1720 * will be internally tagged with a distorted VLAN header where the 1721 * TPID is ETH_P_SJA1105, and the VLAN ID is the port pvid. 1722 */ 1723 ds->vlan_filtering_is_global = true; 1724 1725 /* Advertise the 8 egress queues */ 1726 ds->num_tx_queues = SJA1105_NUM_TC; 1727 1728 /* The DSA/switchdev model brings up switch ports in standalone mode by 1729 * default, and that means vlan_filtering is 0 since they're not under 1730 * a bridge, so it's safe to set up switch tagging at this time. 1731 */ 1732 return sja1105_setup_8021q_tagging(ds, true); 1733 } 1734 1735 static void sja1105_teardown(struct dsa_switch *ds) 1736 { 1737 struct sja1105_private *priv = ds->priv; 1738 int port; 1739 1740 for (port = 0; port < SJA1105_NUM_PORTS; port++) { 1741 struct sja1105_port *sp = &priv->ports[port]; 1742 1743 if (!dsa_is_user_port(ds, port)) 1744 continue; 1745 1746 kthread_destroy_worker(sp->xmit_worker); 1747 } 1748 1749 sja1105_tas_teardown(ds); 1750 sja1105_ptp_clock_unregister(ds); 1751 sja1105_static_config_free(&priv->static_config); 1752 } 1753 1754 static int sja1105_port_enable(struct dsa_switch *ds, int port, 1755 struct phy_device *phy) 1756 { 1757 struct net_device *slave; 1758 1759 if (!dsa_is_user_port(ds, port)) 1760 return 0; 1761 1762 slave = dsa_to_port(ds, port)->slave; 1763 1764 slave->features &= ~NETIF_F_HW_VLAN_CTAG_FILTER; 1765 1766 return 0; 1767 } 1768 1769 static void sja1105_port_disable(struct dsa_switch *ds, int port) 1770 { 1771 struct sja1105_private *priv = ds->priv; 1772 struct sja1105_port *sp = &priv->ports[port]; 1773 1774 if (!dsa_is_user_port(ds, port)) 1775 return; 1776 1777 kthread_cancel_work_sync(&sp->xmit_work); 1778 skb_queue_purge(&sp->xmit_queue); 1779 } 1780 1781 static int sja1105_mgmt_xmit(struct dsa_switch *ds, int port, int slot, 1782 struct sk_buff *skb, bool takets) 1783 { 1784 struct sja1105_mgmt_entry mgmt_route = {0}; 1785 struct sja1105_private *priv = ds->priv; 1786 struct ethhdr *hdr; 1787 int timeout = 10; 1788 int rc; 1789 1790 hdr = eth_hdr(skb); 1791 1792 mgmt_route.macaddr = ether_addr_to_u64(hdr->h_dest); 1793 mgmt_route.destports = BIT(port); 1794 mgmt_route.enfport = 1; 1795 mgmt_route.tsreg = 0; 1796 mgmt_route.takets = takets; 1797 1798 rc = sja1105_dynamic_config_write(priv, BLK_IDX_MGMT_ROUTE, 1799 slot, &mgmt_route, true); 1800 if (rc < 0) { 1801 kfree_skb(skb); 1802 return rc; 1803 } 1804 1805 /* Transfer skb to the host port. */ 1806 dsa_enqueue_skb(skb, dsa_to_port(ds, port)->slave); 1807 1808 /* Wait until the switch has processed the frame */ 1809 do { 1810 rc = sja1105_dynamic_config_read(priv, BLK_IDX_MGMT_ROUTE, 1811 slot, &mgmt_route); 1812 if (rc < 0) { 1813 dev_err_ratelimited(priv->ds->dev, 1814 "failed to poll for mgmt route\n"); 1815 continue; 1816 } 1817 1818 /* UM10944: The ENFPORT flag of the respective entry is 1819 * cleared when a match is found. The host can use this 1820 * flag as an acknowledgment. 1821 */ 1822 cpu_relax(); 1823 } while (mgmt_route.enfport && --timeout); 1824 1825 if (!timeout) { 1826 /* Clean up the management route so that a follow-up 1827 * frame may not match on it by mistake. 1828 * This is only hardware supported on P/Q/R/S - on E/T it is 1829 * a no-op and we are silently discarding the -EOPNOTSUPP. 1830 */ 1831 sja1105_dynamic_config_write(priv, BLK_IDX_MGMT_ROUTE, 1832 slot, &mgmt_route, false); 1833 dev_err_ratelimited(priv->ds->dev, "xmit timed out\n"); 1834 } 1835 1836 return NETDEV_TX_OK; 1837 } 1838 1839 #define work_to_port(work) \ 1840 container_of((work), struct sja1105_port, xmit_work) 1841 #define tagger_to_sja1105(t) \ 1842 container_of((t), struct sja1105_private, tagger_data) 1843 1844 /* Deferred work is unfortunately necessary because setting up the management 1845 * route cannot be done from atomit context (SPI transfer takes a sleepable 1846 * lock on the bus) 1847 */ 1848 static void sja1105_port_deferred_xmit(struct kthread_work *work) 1849 { 1850 struct sja1105_port *sp = work_to_port(work); 1851 struct sja1105_tagger_data *tagger_data = sp->data; 1852 struct sja1105_private *priv = tagger_to_sja1105(tagger_data); 1853 int port = sp - priv->ports; 1854 struct sk_buff *skb; 1855 1856 while ((skb = skb_dequeue(&sp->xmit_queue)) != NULL) { 1857 struct sk_buff *clone = DSA_SKB_CB(skb)->clone; 1858 1859 mutex_lock(&priv->mgmt_lock); 1860 1861 sja1105_mgmt_xmit(priv->ds, port, 0, skb, !!clone); 1862 1863 /* The clone, if there, was made by dsa_skb_tx_timestamp */ 1864 if (clone) 1865 sja1105_ptp_txtstamp_skb(priv->ds, port, clone); 1866 1867 mutex_unlock(&priv->mgmt_lock); 1868 } 1869 } 1870 1871 /* The MAXAGE setting belongs to the L2 Forwarding Parameters table, 1872 * which cannot be reconfigured at runtime. So a switch reset is required. 1873 */ 1874 static int sja1105_set_ageing_time(struct dsa_switch *ds, 1875 unsigned int ageing_time) 1876 { 1877 struct sja1105_l2_lookup_params_entry *l2_lookup_params; 1878 struct sja1105_private *priv = ds->priv; 1879 struct sja1105_table *table; 1880 unsigned int maxage; 1881 1882 table = &priv->static_config.tables[BLK_IDX_L2_LOOKUP_PARAMS]; 1883 l2_lookup_params = table->entries; 1884 1885 maxage = SJA1105_AGEING_TIME_MS(ageing_time); 1886 1887 if (l2_lookup_params->maxage == maxage) 1888 return 0; 1889 1890 l2_lookup_params->maxage = maxage; 1891 1892 return sja1105_static_config_reload(priv, SJA1105_AGEING_TIME); 1893 } 1894 1895 static int sja1105_port_setup_tc(struct dsa_switch *ds, int port, 1896 enum tc_setup_type type, 1897 void *type_data) 1898 { 1899 switch (type) { 1900 case TC_SETUP_QDISC_TAPRIO: 1901 return sja1105_setup_tc_taprio(ds, port, type_data); 1902 default: 1903 return -EOPNOTSUPP; 1904 } 1905 } 1906 1907 /* We have a single mirror (@to) port, but can configure ingress and egress 1908 * mirroring on all other (@from) ports. 1909 * We need to allow mirroring rules only as long as the @to port is always the 1910 * same, and we need to unset the @to port from mirr_port only when there is no 1911 * mirroring rule that references it. 1912 */ 1913 static int sja1105_mirror_apply(struct sja1105_private *priv, int from, int to, 1914 bool ingress, bool enabled) 1915 { 1916 struct sja1105_general_params_entry *general_params; 1917 struct sja1105_mac_config_entry *mac; 1918 struct sja1105_table *table; 1919 bool already_enabled; 1920 u64 new_mirr_port; 1921 int rc; 1922 1923 table = &priv->static_config.tables[BLK_IDX_GENERAL_PARAMS]; 1924 general_params = table->entries; 1925 1926 mac = priv->static_config.tables[BLK_IDX_MAC_CONFIG].entries; 1927 1928 already_enabled = (general_params->mirr_port != SJA1105_NUM_PORTS); 1929 if (already_enabled && enabled && general_params->mirr_port != to) { 1930 dev_err(priv->ds->dev, 1931 "Delete mirroring rules towards port %llu first\n", 1932 general_params->mirr_port); 1933 return -EBUSY; 1934 } 1935 1936 new_mirr_port = to; 1937 if (!enabled) { 1938 bool keep = false; 1939 int port; 1940 1941 /* Anybody still referencing mirr_port? */ 1942 for (port = 0; port < SJA1105_NUM_PORTS; port++) { 1943 if (mac[port].ing_mirr || mac[port].egr_mirr) { 1944 keep = true; 1945 break; 1946 } 1947 } 1948 /* Unset already_enabled for next time */ 1949 if (!keep) 1950 new_mirr_port = SJA1105_NUM_PORTS; 1951 } 1952 if (new_mirr_port != general_params->mirr_port) { 1953 general_params->mirr_port = new_mirr_port; 1954 1955 rc = sja1105_dynamic_config_write(priv, BLK_IDX_GENERAL_PARAMS, 1956 0, general_params, true); 1957 if (rc < 0) 1958 return rc; 1959 } 1960 1961 if (ingress) 1962 mac[from].ing_mirr = enabled; 1963 else 1964 mac[from].egr_mirr = enabled; 1965 1966 return sja1105_dynamic_config_write(priv, BLK_IDX_MAC_CONFIG, from, 1967 &mac[from], true); 1968 } 1969 1970 static int sja1105_mirror_add(struct dsa_switch *ds, int port, 1971 struct dsa_mall_mirror_tc_entry *mirror, 1972 bool ingress) 1973 { 1974 return sja1105_mirror_apply(ds->priv, port, mirror->to_local_port, 1975 ingress, true); 1976 } 1977 1978 static void sja1105_mirror_del(struct dsa_switch *ds, int port, 1979 struct dsa_mall_mirror_tc_entry *mirror) 1980 { 1981 sja1105_mirror_apply(ds->priv, port, mirror->to_local_port, 1982 mirror->ingress, false); 1983 } 1984 1985 static const struct dsa_switch_ops sja1105_switch_ops = { 1986 .get_tag_protocol = sja1105_get_tag_protocol, 1987 .setup = sja1105_setup, 1988 .teardown = sja1105_teardown, 1989 .set_ageing_time = sja1105_set_ageing_time, 1990 .phylink_validate = sja1105_phylink_validate, 1991 .phylink_mac_config = sja1105_mac_config, 1992 .phylink_mac_link_up = sja1105_mac_link_up, 1993 .phylink_mac_link_down = sja1105_mac_link_down, 1994 .get_strings = sja1105_get_strings, 1995 .get_ethtool_stats = sja1105_get_ethtool_stats, 1996 .get_sset_count = sja1105_get_sset_count, 1997 .get_ts_info = sja1105_get_ts_info, 1998 .port_enable = sja1105_port_enable, 1999 .port_disable = sja1105_port_disable, 2000 .port_fdb_dump = sja1105_fdb_dump, 2001 .port_fdb_add = sja1105_fdb_add, 2002 .port_fdb_del = sja1105_fdb_del, 2003 .port_bridge_join = sja1105_bridge_join, 2004 .port_bridge_leave = sja1105_bridge_leave, 2005 .port_stp_state_set = sja1105_bridge_stp_state_set, 2006 .port_vlan_prepare = sja1105_vlan_prepare, 2007 .port_vlan_filtering = sja1105_vlan_filtering, 2008 .port_vlan_add = sja1105_vlan_add, 2009 .port_vlan_del = sja1105_vlan_del, 2010 .port_mdb_prepare = sja1105_mdb_prepare, 2011 .port_mdb_add = sja1105_mdb_add, 2012 .port_mdb_del = sja1105_mdb_del, 2013 .port_hwtstamp_get = sja1105_hwtstamp_get, 2014 .port_hwtstamp_set = sja1105_hwtstamp_set, 2015 .port_rxtstamp = sja1105_port_rxtstamp, 2016 .port_txtstamp = sja1105_port_txtstamp, 2017 .port_setup_tc = sja1105_port_setup_tc, 2018 .port_mirror_add = sja1105_mirror_add, 2019 .port_mirror_del = sja1105_mirror_del, 2020 }; 2021 2022 static int sja1105_check_device_id(struct sja1105_private *priv) 2023 { 2024 const struct sja1105_regs *regs = priv->info->regs; 2025 u8 prod_id[SJA1105_SIZE_DEVICE_ID] = {0}; 2026 struct device *dev = &priv->spidev->dev; 2027 u32 device_id; 2028 u64 part_no; 2029 int rc; 2030 2031 rc = sja1105_xfer_u32(priv, SPI_READ, regs->device_id, &device_id, 2032 NULL); 2033 if (rc < 0) 2034 return rc; 2035 2036 if (device_id != priv->info->device_id) { 2037 dev_err(dev, "Expected device ID 0x%llx but read 0x%x\n", 2038 priv->info->device_id, device_id); 2039 return -ENODEV; 2040 } 2041 2042 rc = sja1105_xfer_buf(priv, SPI_READ, regs->prod_id, prod_id, 2043 SJA1105_SIZE_DEVICE_ID); 2044 if (rc < 0) 2045 return rc; 2046 2047 sja1105_unpack(prod_id, &part_no, 19, 4, SJA1105_SIZE_DEVICE_ID); 2048 2049 if (part_no != priv->info->part_no) { 2050 dev_err(dev, "Expected part number 0x%llx but read 0x%llx\n", 2051 priv->info->part_no, part_no); 2052 return -ENODEV; 2053 } 2054 2055 return 0; 2056 } 2057 2058 static int sja1105_probe(struct spi_device *spi) 2059 { 2060 struct sja1105_tagger_data *tagger_data; 2061 struct device *dev = &spi->dev; 2062 struct sja1105_private *priv; 2063 struct dsa_switch *ds; 2064 int rc, port; 2065 2066 if (!dev->of_node) { 2067 dev_err(dev, "No DTS bindings for SJA1105 driver\n"); 2068 return -EINVAL; 2069 } 2070 2071 priv = devm_kzalloc(dev, sizeof(struct sja1105_private), GFP_KERNEL); 2072 if (!priv) 2073 return -ENOMEM; 2074 2075 /* Configure the optional reset pin and bring up switch */ 2076 priv->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_HIGH); 2077 if (IS_ERR(priv->reset_gpio)) 2078 dev_dbg(dev, "reset-gpios not defined, ignoring\n"); 2079 else 2080 sja1105_hw_reset(priv->reset_gpio, 1, 1); 2081 2082 /* Populate our driver private structure (priv) based on 2083 * the device tree node that was probed (spi) 2084 */ 2085 priv->spidev = spi; 2086 spi_set_drvdata(spi, priv); 2087 2088 /* Configure the SPI bus */ 2089 spi->bits_per_word = 8; 2090 rc = spi_setup(spi); 2091 if (rc < 0) { 2092 dev_err(dev, "Could not init SPI\n"); 2093 return rc; 2094 } 2095 2096 priv->info = of_device_get_match_data(dev); 2097 2098 /* Detect hardware device */ 2099 rc = sja1105_check_device_id(priv); 2100 if (rc < 0) { 2101 dev_err(dev, "Device ID check failed: %d\n", rc); 2102 return rc; 2103 } 2104 2105 dev_info(dev, "Probed switch chip: %s\n", priv->info->name); 2106 2107 ds = devm_kzalloc(dev, sizeof(*ds), GFP_KERNEL); 2108 if (!ds) 2109 return -ENOMEM; 2110 2111 ds->dev = dev; 2112 ds->num_ports = SJA1105_NUM_PORTS; 2113 ds->ops = &sja1105_switch_ops; 2114 ds->priv = priv; 2115 priv->ds = ds; 2116 2117 tagger_data = &priv->tagger_data; 2118 2119 mutex_init(&priv->ptp_data.lock); 2120 mutex_init(&priv->mgmt_lock); 2121 2122 sja1105_tas_setup(ds); 2123 2124 rc = dsa_register_switch(priv->ds); 2125 if (rc) 2126 return rc; 2127 2128 /* Connections between dsa_port and sja1105_port */ 2129 for (port = 0; port < SJA1105_NUM_PORTS; port++) { 2130 struct sja1105_port *sp = &priv->ports[port]; 2131 struct dsa_port *dp = dsa_to_port(ds, port); 2132 struct net_device *slave; 2133 2134 if (!dsa_is_user_port(ds, port)) 2135 continue; 2136 2137 dp->priv = sp; 2138 sp->dp = dp; 2139 sp->data = tagger_data; 2140 slave = dp->slave; 2141 kthread_init_work(&sp->xmit_work, sja1105_port_deferred_xmit); 2142 sp->xmit_worker = kthread_create_worker(0, "%s_xmit", 2143 slave->name); 2144 if (IS_ERR(sp->xmit_worker)) { 2145 rc = PTR_ERR(sp->xmit_worker); 2146 dev_err(ds->dev, 2147 "failed to create deferred xmit thread: %d\n", 2148 rc); 2149 goto out; 2150 } 2151 skb_queue_head_init(&sp->xmit_queue); 2152 } 2153 2154 return 0; 2155 out: 2156 while (port-- > 0) { 2157 struct sja1105_port *sp = &priv->ports[port]; 2158 2159 if (!dsa_is_user_port(ds, port)) 2160 continue; 2161 2162 kthread_destroy_worker(sp->xmit_worker); 2163 } 2164 return rc; 2165 } 2166 2167 static int sja1105_remove(struct spi_device *spi) 2168 { 2169 struct sja1105_private *priv = spi_get_drvdata(spi); 2170 2171 dsa_unregister_switch(priv->ds); 2172 return 0; 2173 } 2174 2175 static const struct of_device_id sja1105_dt_ids[] = { 2176 { .compatible = "nxp,sja1105e", .data = &sja1105e_info }, 2177 { .compatible = "nxp,sja1105t", .data = &sja1105t_info }, 2178 { .compatible = "nxp,sja1105p", .data = &sja1105p_info }, 2179 { .compatible = "nxp,sja1105q", .data = &sja1105q_info }, 2180 { .compatible = "nxp,sja1105r", .data = &sja1105r_info }, 2181 { .compatible = "nxp,sja1105s", .data = &sja1105s_info }, 2182 { /* sentinel */ }, 2183 }; 2184 MODULE_DEVICE_TABLE(of, sja1105_dt_ids); 2185 2186 static struct spi_driver sja1105_driver = { 2187 .driver = { 2188 .name = "sja1105", 2189 .owner = THIS_MODULE, 2190 .of_match_table = of_match_ptr(sja1105_dt_ids), 2191 }, 2192 .probe = sja1105_probe, 2193 .remove = sja1105_remove, 2194 }; 2195 2196 module_spi_driver(sja1105_driver); 2197 2198 MODULE_AUTHOR("Vladimir Oltean <olteanv@gmail.com>"); 2199 MODULE_AUTHOR("Georg Waibel <georg.waibel@sensor-technik.de>"); 2200 MODULE_DESCRIPTION("SJA1105 Driver"); 2201 MODULE_LICENSE("GPL v2"); 2202