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 dev_err(ds->dev, "Changing PHY mode to %s not supported!\n", 770 phy_modes(state->interface)); 771 return; 772 } 773 774 if (link_an_mode == MLO_AN_INBAND) { 775 dev_err(ds->dev, "In-band AN not supported!\n"); 776 return; 777 } 778 } 779 780 static void sja1105_mac_link_down(struct dsa_switch *ds, int port, 781 unsigned int mode, 782 phy_interface_t interface) 783 { 784 sja1105_inhibit_tx(ds->priv, BIT(port), true); 785 } 786 787 static void sja1105_mac_link_up(struct dsa_switch *ds, int port, 788 unsigned int mode, 789 phy_interface_t interface, 790 struct phy_device *phydev, 791 int speed, int duplex, 792 bool tx_pause, bool rx_pause) 793 { 794 struct sja1105_private *priv = ds->priv; 795 796 sja1105_adjust_port_config(priv, port, speed); 797 798 sja1105_inhibit_tx(priv, BIT(port), false); 799 } 800 801 static void sja1105_phylink_validate(struct dsa_switch *ds, int port, 802 unsigned long *supported, 803 struct phylink_link_state *state) 804 { 805 /* Construct a new mask which exhaustively contains all link features 806 * supported by the MAC, and then apply that (logical AND) to what will 807 * be sent to the PHY for "marketing". 808 */ 809 __ETHTOOL_DECLARE_LINK_MODE_MASK(mask) = { 0, }; 810 struct sja1105_private *priv = ds->priv; 811 struct sja1105_xmii_params_entry *mii; 812 813 mii = priv->static_config.tables[BLK_IDX_XMII_PARAMS].entries; 814 815 /* include/linux/phylink.h says: 816 * When @state->interface is %PHY_INTERFACE_MODE_NA, phylink 817 * expects the MAC driver to return all supported link modes. 818 */ 819 if (state->interface != PHY_INTERFACE_MODE_NA && 820 sja1105_phy_mode_mismatch(priv, port, state->interface)) { 821 bitmap_zero(supported, __ETHTOOL_LINK_MODE_MASK_NBITS); 822 return; 823 } 824 825 /* The MAC does not support pause frames, and also doesn't 826 * support half-duplex traffic modes. 827 */ 828 phylink_set(mask, Autoneg); 829 phylink_set(mask, MII); 830 phylink_set(mask, 10baseT_Full); 831 phylink_set(mask, 100baseT_Full); 832 phylink_set(mask, 100baseT1_Full); 833 if (mii->xmii_mode[port] == XMII_MODE_RGMII) 834 phylink_set(mask, 1000baseT_Full); 835 836 bitmap_and(supported, supported, mask, __ETHTOOL_LINK_MODE_MASK_NBITS); 837 bitmap_and(state->advertising, state->advertising, mask, 838 __ETHTOOL_LINK_MODE_MASK_NBITS); 839 } 840 841 static int 842 sja1105_find_static_fdb_entry(struct sja1105_private *priv, int port, 843 const struct sja1105_l2_lookup_entry *requested) 844 { 845 struct sja1105_l2_lookup_entry *l2_lookup; 846 struct sja1105_table *table; 847 int i; 848 849 table = &priv->static_config.tables[BLK_IDX_L2_LOOKUP]; 850 l2_lookup = table->entries; 851 852 for (i = 0; i < table->entry_count; i++) 853 if (l2_lookup[i].macaddr == requested->macaddr && 854 l2_lookup[i].vlanid == requested->vlanid && 855 l2_lookup[i].destports & BIT(port)) 856 return i; 857 858 return -1; 859 } 860 861 /* We want FDB entries added statically through the bridge command to persist 862 * across switch resets, which are a common thing during normal SJA1105 863 * operation. So we have to back them up in the static configuration tables 864 * and hence apply them on next static config upload... yay! 865 */ 866 static int 867 sja1105_static_fdb_change(struct sja1105_private *priv, int port, 868 const struct sja1105_l2_lookup_entry *requested, 869 bool keep) 870 { 871 struct sja1105_l2_lookup_entry *l2_lookup; 872 struct sja1105_table *table; 873 int rc, match; 874 875 table = &priv->static_config.tables[BLK_IDX_L2_LOOKUP]; 876 877 match = sja1105_find_static_fdb_entry(priv, port, requested); 878 if (match < 0) { 879 /* Can't delete a missing entry. */ 880 if (!keep) 881 return 0; 882 883 /* No match => new entry */ 884 rc = sja1105_table_resize(table, table->entry_count + 1); 885 if (rc) 886 return rc; 887 888 match = table->entry_count - 1; 889 } 890 891 /* Assign pointer after the resize (it may be new memory) */ 892 l2_lookup = table->entries; 893 894 /* We have a match. 895 * If the job was to add this FDB entry, it's already done (mostly 896 * anyway, since the port forwarding mask may have changed, case in 897 * which we update it). 898 * Otherwise we have to delete it. 899 */ 900 if (keep) { 901 l2_lookup[match] = *requested; 902 return 0; 903 } 904 905 /* To remove, the strategy is to overwrite the element with 906 * the last one, and then reduce the array size by 1 907 */ 908 l2_lookup[match] = l2_lookup[table->entry_count - 1]; 909 return sja1105_table_resize(table, table->entry_count - 1); 910 } 911 912 /* First-generation switches have a 4-way set associative TCAM that 913 * holds the FDB entries. An FDB index spans from 0 to 1023 and is comprised of 914 * a "bin" (grouping of 4 entries) and a "way" (an entry within a bin). 915 * For the placement of a newly learnt FDB entry, the switch selects the bin 916 * based on a hash function, and the way within that bin incrementally. 917 */ 918 static int sja1105et_fdb_index(int bin, int way) 919 { 920 return bin * SJA1105ET_FDB_BIN_SIZE + way; 921 } 922 923 static int sja1105et_is_fdb_entry_in_bin(struct sja1105_private *priv, int bin, 924 const u8 *addr, u16 vid, 925 struct sja1105_l2_lookup_entry *match, 926 int *last_unused) 927 { 928 int way; 929 930 for (way = 0; way < SJA1105ET_FDB_BIN_SIZE; way++) { 931 struct sja1105_l2_lookup_entry l2_lookup = {0}; 932 int index = sja1105et_fdb_index(bin, way); 933 934 /* Skip unused entries, optionally marking them 935 * into the return value 936 */ 937 if (sja1105_dynamic_config_read(priv, BLK_IDX_L2_LOOKUP, 938 index, &l2_lookup)) { 939 if (last_unused) 940 *last_unused = way; 941 continue; 942 } 943 944 if (l2_lookup.macaddr == ether_addr_to_u64(addr) && 945 l2_lookup.vlanid == vid) { 946 if (match) 947 *match = l2_lookup; 948 return way; 949 } 950 } 951 /* Return an invalid entry index if not found */ 952 return -1; 953 } 954 955 int sja1105et_fdb_add(struct dsa_switch *ds, int port, 956 const unsigned char *addr, u16 vid) 957 { 958 struct sja1105_l2_lookup_entry l2_lookup = {0}; 959 struct sja1105_private *priv = ds->priv; 960 struct device *dev = ds->dev; 961 int last_unused = -1; 962 int bin, way, rc; 963 964 bin = sja1105et_fdb_hash(priv, addr, vid); 965 966 way = sja1105et_is_fdb_entry_in_bin(priv, bin, addr, vid, 967 &l2_lookup, &last_unused); 968 if (way >= 0) { 969 /* We have an FDB entry. Is our port in the destination 970 * mask? If yes, we need to do nothing. If not, we need 971 * to rewrite the entry by adding this port to it. 972 */ 973 if (l2_lookup.destports & BIT(port)) 974 return 0; 975 l2_lookup.destports |= BIT(port); 976 } else { 977 int index = sja1105et_fdb_index(bin, way); 978 979 /* We don't have an FDB entry. We construct a new one and 980 * try to find a place for it within the FDB table. 981 */ 982 l2_lookup.macaddr = ether_addr_to_u64(addr); 983 l2_lookup.destports = BIT(port); 984 l2_lookup.vlanid = vid; 985 986 if (last_unused >= 0) { 987 way = last_unused; 988 } else { 989 /* Bin is full, need to evict somebody. 990 * Choose victim at random. If you get these messages 991 * often, you may need to consider changing the 992 * distribution function: 993 * static_config[BLK_IDX_L2_LOOKUP_PARAMS].entries->poly 994 */ 995 get_random_bytes(&way, sizeof(u8)); 996 way %= SJA1105ET_FDB_BIN_SIZE; 997 dev_warn(dev, "Warning, FDB bin %d full while adding entry for %pM. Evicting entry %u.\n", 998 bin, addr, way); 999 /* Evict entry */ 1000 sja1105_dynamic_config_write(priv, BLK_IDX_L2_LOOKUP, 1001 index, NULL, false); 1002 } 1003 } 1004 l2_lookup.index = sja1105et_fdb_index(bin, way); 1005 1006 rc = sja1105_dynamic_config_write(priv, BLK_IDX_L2_LOOKUP, 1007 l2_lookup.index, &l2_lookup, 1008 true); 1009 if (rc < 0) 1010 return rc; 1011 1012 return sja1105_static_fdb_change(priv, port, &l2_lookup, true); 1013 } 1014 1015 int sja1105et_fdb_del(struct dsa_switch *ds, int port, 1016 const unsigned char *addr, u16 vid) 1017 { 1018 struct sja1105_l2_lookup_entry l2_lookup = {0}; 1019 struct sja1105_private *priv = ds->priv; 1020 int index, bin, way, rc; 1021 bool keep; 1022 1023 bin = sja1105et_fdb_hash(priv, addr, vid); 1024 way = sja1105et_is_fdb_entry_in_bin(priv, bin, addr, vid, 1025 &l2_lookup, NULL); 1026 if (way < 0) 1027 return 0; 1028 index = sja1105et_fdb_index(bin, way); 1029 1030 /* We have an FDB entry. Is our port in the destination mask? If yes, 1031 * we need to remove it. If the resulting port mask becomes empty, we 1032 * need to completely evict the FDB entry. 1033 * Otherwise we just write it back. 1034 */ 1035 l2_lookup.destports &= ~BIT(port); 1036 1037 if (l2_lookup.destports) 1038 keep = true; 1039 else 1040 keep = false; 1041 1042 rc = sja1105_dynamic_config_write(priv, BLK_IDX_L2_LOOKUP, 1043 index, &l2_lookup, keep); 1044 if (rc < 0) 1045 return rc; 1046 1047 return sja1105_static_fdb_change(priv, port, &l2_lookup, keep); 1048 } 1049 1050 int sja1105pqrs_fdb_add(struct dsa_switch *ds, int port, 1051 const unsigned char *addr, u16 vid) 1052 { 1053 struct sja1105_l2_lookup_entry l2_lookup = {0}; 1054 struct sja1105_private *priv = ds->priv; 1055 int rc, i; 1056 1057 /* Search for an existing entry in the FDB table */ 1058 l2_lookup.macaddr = ether_addr_to_u64(addr); 1059 l2_lookup.vlanid = vid; 1060 l2_lookup.iotag = SJA1105_S_TAG; 1061 l2_lookup.mask_macaddr = GENMASK_ULL(ETH_ALEN * 8 - 1, 0); 1062 if (dsa_port_is_vlan_filtering(dsa_to_port(ds, port))) { 1063 l2_lookup.mask_vlanid = VLAN_VID_MASK; 1064 l2_lookup.mask_iotag = BIT(0); 1065 } else { 1066 l2_lookup.mask_vlanid = 0; 1067 l2_lookup.mask_iotag = 0; 1068 } 1069 l2_lookup.destports = BIT(port); 1070 1071 rc = sja1105_dynamic_config_read(priv, BLK_IDX_L2_LOOKUP, 1072 SJA1105_SEARCH, &l2_lookup); 1073 if (rc == 0) { 1074 /* Found and this port is already in the entry's 1075 * port mask => job done 1076 */ 1077 if (l2_lookup.destports & BIT(port)) 1078 return 0; 1079 /* l2_lookup.index is populated by the switch in case it 1080 * found something. 1081 */ 1082 l2_lookup.destports |= BIT(port); 1083 goto skip_finding_an_index; 1084 } 1085 1086 /* Not found, so try to find an unused spot in the FDB. 1087 * This is slightly inefficient because the strategy is knock-knock at 1088 * every possible position from 0 to 1023. 1089 */ 1090 for (i = 0; i < SJA1105_MAX_L2_LOOKUP_COUNT; i++) { 1091 rc = sja1105_dynamic_config_read(priv, BLK_IDX_L2_LOOKUP, 1092 i, NULL); 1093 if (rc < 0) 1094 break; 1095 } 1096 if (i == SJA1105_MAX_L2_LOOKUP_COUNT) { 1097 dev_err(ds->dev, "FDB is full, cannot add entry.\n"); 1098 return -EINVAL; 1099 } 1100 l2_lookup.lockeds = true; 1101 l2_lookup.index = i; 1102 1103 skip_finding_an_index: 1104 rc = sja1105_dynamic_config_write(priv, BLK_IDX_L2_LOOKUP, 1105 l2_lookup.index, &l2_lookup, 1106 true); 1107 if (rc < 0) 1108 return rc; 1109 1110 return sja1105_static_fdb_change(priv, port, &l2_lookup, true); 1111 } 1112 1113 int sja1105pqrs_fdb_del(struct dsa_switch *ds, int port, 1114 const unsigned char *addr, u16 vid) 1115 { 1116 struct sja1105_l2_lookup_entry l2_lookup = {0}; 1117 struct sja1105_private *priv = ds->priv; 1118 bool keep; 1119 int rc; 1120 1121 l2_lookup.macaddr = ether_addr_to_u64(addr); 1122 l2_lookup.vlanid = vid; 1123 l2_lookup.iotag = SJA1105_S_TAG; 1124 l2_lookup.mask_macaddr = GENMASK_ULL(ETH_ALEN * 8 - 1, 0); 1125 if (dsa_port_is_vlan_filtering(dsa_to_port(ds, port))) { 1126 l2_lookup.mask_vlanid = VLAN_VID_MASK; 1127 l2_lookup.mask_iotag = BIT(0); 1128 } else { 1129 l2_lookup.mask_vlanid = 0; 1130 l2_lookup.mask_iotag = 0; 1131 } 1132 l2_lookup.destports = BIT(port); 1133 1134 rc = sja1105_dynamic_config_read(priv, BLK_IDX_L2_LOOKUP, 1135 SJA1105_SEARCH, &l2_lookup); 1136 if (rc < 0) 1137 return 0; 1138 1139 l2_lookup.destports &= ~BIT(port); 1140 1141 /* Decide whether we remove just this port from the FDB entry, 1142 * or if we remove it completely. 1143 */ 1144 if (l2_lookup.destports) 1145 keep = true; 1146 else 1147 keep = false; 1148 1149 rc = sja1105_dynamic_config_write(priv, BLK_IDX_L2_LOOKUP, 1150 l2_lookup.index, &l2_lookup, keep); 1151 if (rc < 0) 1152 return rc; 1153 1154 return sja1105_static_fdb_change(priv, port, &l2_lookup, keep); 1155 } 1156 1157 static int sja1105_fdb_add(struct dsa_switch *ds, int port, 1158 const unsigned char *addr, u16 vid) 1159 { 1160 struct sja1105_private *priv = ds->priv; 1161 1162 /* dsa_8021q is in effect when the bridge's vlan_filtering isn't, 1163 * so the switch still does some VLAN processing internally. 1164 * But Shared VLAN Learning (SVL) is also active, and it will take 1165 * care of autonomous forwarding between the unique pvid's of each 1166 * port. Here we just make sure that users can't add duplicate FDB 1167 * entries when in this mode - the actual VID doesn't matter except 1168 * for what gets printed in 'bridge fdb show'. In the case of zero, 1169 * no VID gets printed at all. 1170 */ 1171 if (!dsa_port_is_vlan_filtering(dsa_to_port(ds, port))) 1172 vid = 0; 1173 1174 return priv->info->fdb_add_cmd(ds, port, addr, vid); 1175 } 1176 1177 static int sja1105_fdb_del(struct dsa_switch *ds, int port, 1178 const unsigned char *addr, u16 vid) 1179 { 1180 struct sja1105_private *priv = ds->priv; 1181 1182 if (!dsa_port_is_vlan_filtering(dsa_to_port(ds, port))) 1183 vid = 0; 1184 1185 return priv->info->fdb_del_cmd(ds, port, addr, vid); 1186 } 1187 1188 static int sja1105_fdb_dump(struct dsa_switch *ds, int port, 1189 dsa_fdb_dump_cb_t *cb, void *data) 1190 { 1191 struct sja1105_private *priv = ds->priv; 1192 struct device *dev = ds->dev; 1193 int i; 1194 1195 for (i = 0; i < SJA1105_MAX_L2_LOOKUP_COUNT; i++) { 1196 struct sja1105_l2_lookup_entry l2_lookup = {0}; 1197 u8 macaddr[ETH_ALEN]; 1198 int rc; 1199 1200 rc = sja1105_dynamic_config_read(priv, BLK_IDX_L2_LOOKUP, 1201 i, &l2_lookup); 1202 /* No fdb entry at i, not an issue */ 1203 if (rc == -ENOENT) 1204 continue; 1205 if (rc) { 1206 dev_err(dev, "Failed to dump FDB: %d\n", rc); 1207 return rc; 1208 } 1209 1210 /* FDB dump callback is per port. This means we have to 1211 * disregard a valid entry if it's not for this port, even if 1212 * only to revisit it later. This is inefficient because the 1213 * 1024-sized FDB table needs to be traversed 4 times through 1214 * SPI during a 'bridge fdb show' command. 1215 */ 1216 if (!(l2_lookup.destports & BIT(port))) 1217 continue; 1218 u64_to_ether_addr(l2_lookup.macaddr, macaddr); 1219 1220 /* We need to hide the dsa_8021q VLANs from the user. */ 1221 if (!dsa_port_is_vlan_filtering(dsa_to_port(ds, port))) 1222 l2_lookup.vlanid = 0; 1223 cb(macaddr, l2_lookup.vlanid, l2_lookup.lockeds, data); 1224 } 1225 return 0; 1226 } 1227 1228 /* This callback needs to be present */ 1229 static int sja1105_mdb_prepare(struct dsa_switch *ds, int port, 1230 const struct switchdev_obj_port_mdb *mdb) 1231 { 1232 return 0; 1233 } 1234 1235 static void sja1105_mdb_add(struct dsa_switch *ds, int port, 1236 const struct switchdev_obj_port_mdb *mdb) 1237 { 1238 sja1105_fdb_add(ds, port, mdb->addr, mdb->vid); 1239 } 1240 1241 static int sja1105_mdb_del(struct dsa_switch *ds, int port, 1242 const struct switchdev_obj_port_mdb *mdb) 1243 { 1244 return sja1105_fdb_del(ds, port, mdb->addr, mdb->vid); 1245 } 1246 1247 static int sja1105_bridge_member(struct dsa_switch *ds, int port, 1248 struct net_device *br, bool member) 1249 { 1250 struct sja1105_l2_forwarding_entry *l2_fwd; 1251 struct sja1105_private *priv = ds->priv; 1252 int i, rc; 1253 1254 l2_fwd = priv->static_config.tables[BLK_IDX_L2_FORWARDING].entries; 1255 1256 for (i = 0; i < SJA1105_NUM_PORTS; i++) { 1257 /* Add this port to the forwarding matrix of the 1258 * other ports in the same bridge, and viceversa. 1259 */ 1260 if (!dsa_is_user_port(ds, i)) 1261 continue; 1262 /* For the ports already under the bridge, only one thing needs 1263 * to be done, and that is to add this port to their 1264 * reachability domain. So we can perform the SPI write for 1265 * them immediately. However, for this port itself (the one 1266 * that is new to the bridge), we need to add all other ports 1267 * to its reachability domain. So we do that incrementally in 1268 * this loop, and perform the SPI write only at the end, once 1269 * the domain contains all other bridge ports. 1270 */ 1271 if (i == port) 1272 continue; 1273 if (dsa_to_port(ds, i)->bridge_dev != br) 1274 continue; 1275 sja1105_port_allow_traffic(l2_fwd, i, port, member); 1276 sja1105_port_allow_traffic(l2_fwd, port, i, member); 1277 1278 rc = sja1105_dynamic_config_write(priv, BLK_IDX_L2_FORWARDING, 1279 i, &l2_fwd[i], true); 1280 if (rc < 0) 1281 return rc; 1282 } 1283 1284 return sja1105_dynamic_config_write(priv, BLK_IDX_L2_FORWARDING, 1285 port, &l2_fwd[port], true); 1286 } 1287 1288 static void sja1105_bridge_stp_state_set(struct dsa_switch *ds, int port, 1289 u8 state) 1290 { 1291 struct sja1105_private *priv = ds->priv; 1292 struct sja1105_mac_config_entry *mac; 1293 1294 mac = priv->static_config.tables[BLK_IDX_MAC_CONFIG].entries; 1295 1296 switch (state) { 1297 case BR_STATE_DISABLED: 1298 case BR_STATE_BLOCKING: 1299 /* From UM10944 description of DRPDTAG (why put this there?): 1300 * "Management traffic flows to the port regardless of the state 1301 * of the INGRESS flag". So BPDUs are still be allowed to pass. 1302 * At the moment no difference between DISABLED and BLOCKING. 1303 */ 1304 mac[port].ingress = false; 1305 mac[port].egress = false; 1306 mac[port].dyn_learn = false; 1307 break; 1308 case BR_STATE_LISTENING: 1309 mac[port].ingress = true; 1310 mac[port].egress = false; 1311 mac[port].dyn_learn = false; 1312 break; 1313 case BR_STATE_LEARNING: 1314 mac[port].ingress = true; 1315 mac[port].egress = false; 1316 mac[port].dyn_learn = true; 1317 break; 1318 case BR_STATE_FORWARDING: 1319 mac[port].ingress = true; 1320 mac[port].egress = true; 1321 mac[port].dyn_learn = true; 1322 break; 1323 default: 1324 dev_err(ds->dev, "invalid STP state: %d\n", state); 1325 return; 1326 } 1327 1328 sja1105_dynamic_config_write(priv, BLK_IDX_MAC_CONFIG, port, 1329 &mac[port], true); 1330 } 1331 1332 static int sja1105_bridge_join(struct dsa_switch *ds, int port, 1333 struct net_device *br) 1334 { 1335 return sja1105_bridge_member(ds, port, br, true); 1336 } 1337 1338 static void sja1105_bridge_leave(struct dsa_switch *ds, int port, 1339 struct net_device *br) 1340 { 1341 sja1105_bridge_member(ds, port, br, false); 1342 } 1343 1344 static const char * const sja1105_reset_reasons[] = { 1345 [SJA1105_VLAN_FILTERING] = "VLAN filtering", 1346 [SJA1105_RX_HWTSTAMPING] = "RX timestamping", 1347 [SJA1105_AGEING_TIME] = "Ageing time", 1348 [SJA1105_SCHEDULING] = "Time-aware scheduling", 1349 }; 1350 1351 /* For situations where we need to change a setting at runtime that is only 1352 * available through the static configuration, resetting the switch in order 1353 * to upload the new static config is unavoidable. Back up the settings we 1354 * modify at runtime (currently only MAC) and restore them after uploading, 1355 * such that this operation is relatively seamless. 1356 */ 1357 int sja1105_static_config_reload(struct sja1105_private *priv, 1358 enum sja1105_reset_reason reason) 1359 { 1360 struct ptp_system_timestamp ptp_sts_before; 1361 struct ptp_system_timestamp ptp_sts_after; 1362 struct sja1105_mac_config_entry *mac; 1363 int speed_mbps[SJA1105_NUM_PORTS]; 1364 struct dsa_switch *ds = priv->ds; 1365 s64 t1, t2, t3, t4; 1366 s64 t12, t34; 1367 int rc, i; 1368 s64 now; 1369 1370 mutex_lock(&priv->mgmt_lock); 1371 1372 mac = priv->static_config.tables[BLK_IDX_MAC_CONFIG].entries; 1373 1374 /* Back up the dynamic link speed changed by sja1105_adjust_port_config 1375 * in order to temporarily restore it to SJA1105_SPEED_AUTO - which the 1376 * switch wants to see in the static config in order to allow us to 1377 * change it through the dynamic interface later. 1378 */ 1379 for (i = 0; i < SJA1105_NUM_PORTS; i++) { 1380 speed_mbps[i] = sja1105_speed[mac[i].speed]; 1381 mac[i].speed = SJA1105_SPEED_AUTO; 1382 } 1383 1384 /* No PTP operations can run right now */ 1385 mutex_lock(&priv->ptp_data.lock); 1386 1387 rc = __sja1105_ptp_gettimex(ds, &now, &ptp_sts_before); 1388 if (rc < 0) 1389 goto out_unlock_ptp; 1390 1391 /* Reset switch and send updated static configuration */ 1392 rc = sja1105_static_config_upload(priv); 1393 if (rc < 0) 1394 goto out_unlock_ptp; 1395 1396 rc = __sja1105_ptp_settime(ds, 0, &ptp_sts_after); 1397 if (rc < 0) 1398 goto out_unlock_ptp; 1399 1400 t1 = timespec64_to_ns(&ptp_sts_before.pre_ts); 1401 t2 = timespec64_to_ns(&ptp_sts_before.post_ts); 1402 t3 = timespec64_to_ns(&ptp_sts_after.pre_ts); 1403 t4 = timespec64_to_ns(&ptp_sts_after.post_ts); 1404 /* Mid point, corresponds to pre-reset PTPCLKVAL */ 1405 t12 = t1 + (t2 - t1) / 2; 1406 /* Mid point, corresponds to post-reset PTPCLKVAL, aka 0 */ 1407 t34 = t3 + (t4 - t3) / 2; 1408 /* Advance PTPCLKVAL by the time it took since its readout */ 1409 now += (t34 - t12); 1410 1411 __sja1105_ptp_adjtime(ds, now); 1412 1413 out_unlock_ptp: 1414 mutex_unlock(&priv->ptp_data.lock); 1415 1416 dev_info(priv->ds->dev, 1417 "Reset switch and programmed static config. Reason: %s\n", 1418 sja1105_reset_reasons[reason]); 1419 1420 /* Configure the CGU (PLLs) for MII and RMII PHYs. 1421 * For these interfaces there is no dynamic configuration 1422 * needed, since PLLs have same settings at all speeds. 1423 */ 1424 rc = sja1105_clocking_setup(priv); 1425 if (rc < 0) 1426 goto out; 1427 1428 for (i = 0; i < SJA1105_NUM_PORTS; i++) { 1429 rc = sja1105_adjust_port_config(priv, i, speed_mbps[i]); 1430 if (rc < 0) 1431 goto out; 1432 } 1433 out: 1434 mutex_unlock(&priv->mgmt_lock); 1435 1436 return rc; 1437 } 1438 1439 static int sja1105_pvid_apply(struct sja1105_private *priv, int port, u16 pvid) 1440 { 1441 struct sja1105_mac_config_entry *mac; 1442 1443 mac = priv->static_config.tables[BLK_IDX_MAC_CONFIG].entries; 1444 1445 mac[port].vlanid = pvid; 1446 1447 return sja1105_dynamic_config_write(priv, BLK_IDX_MAC_CONFIG, port, 1448 &mac[port], true); 1449 } 1450 1451 static int sja1105_is_vlan_configured(struct sja1105_private *priv, u16 vid) 1452 { 1453 struct sja1105_vlan_lookup_entry *vlan; 1454 int count, i; 1455 1456 vlan = priv->static_config.tables[BLK_IDX_VLAN_LOOKUP].entries; 1457 count = priv->static_config.tables[BLK_IDX_VLAN_LOOKUP].entry_count; 1458 1459 for (i = 0; i < count; i++) 1460 if (vlan[i].vlanid == vid) 1461 return i; 1462 1463 /* Return an invalid entry index if not found */ 1464 return -1; 1465 } 1466 1467 static int sja1105_vlan_apply(struct sja1105_private *priv, int port, u16 vid, 1468 bool enabled, bool untagged) 1469 { 1470 struct sja1105_vlan_lookup_entry *vlan; 1471 struct sja1105_table *table; 1472 bool keep = true; 1473 int match, rc; 1474 1475 table = &priv->static_config.tables[BLK_IDX_VLAN_LOOKUP]; 1476 1477 match = sja1105_is_vlan_configured(priv, vid); 1478 if (match < 0) { 1479 /* Can't delete a missing entry. */ 1480 if (!enabled) 1481 return 0; 1482 rc = sja1105_table_resize(table, table->entry_count + 1); 1483 if (rc) 1484 return rc; 1485 match = table->entry_count - 1; 1486 } 1487 /* Assign pointer after the resize (it's new memory) */ 1488 vlan = table->entries; 1489 vlan[match].vlanid = vid; 1490 if (enabled) { 1491 vlan[match].vlan_bc |= BIT(port); 1492 vlan[match].vmemb_port |= BIT(port); 1493 } else { 1494 vlan[match].vlan_bc &= ~BIT(port); 1495 vlan[match].vmemb_port &= ~BIT(port); 1496 } 1497 /* Also unset tag_port if removing this VLAN was requested, 1498 * just so we don't have a confusing bitmap (no practical purpose). 1499 */ 1500 if (untagged || !enabled) 1501 vlan[match].tag_port &= ~BIT(port); 1502 else 1503 vlan[match].tag_port |= BIT(port); 1504 /* If there's no port left as member of this VLAN, 1505 * it's time for it to go. 1506 */ 1507 if (!vlan[match].vmemb_port) 1508 keep = false; 1509 1510 dev_dbg(priv->ds->dev, 1511 "%s: port %d, vid %llu, broadcast domain 0x%llx, " 1512 "port members 0x%llx, tagged ports 0x%llx, keep %d\n", 1513 __func__, port, vlan[match].vlanid, vlan[match].vlan_bc, 1514 vlan[match].vmemb_port, vlan[match].tag_port, keep); 1515 1516 rc = sja1105_dynamic_config_write(priv, BLK_IDX_VLAN_LOOKUP, vid, 1517 &vlan[match], keep); 1518 if (rc < 0) 1519 return rc; 1520 1521 if (!keep) 1522 return sja1105_table_delete_entry(table, match); 1523 1524 return 0; 1525 } 1526 1527 static int sja1105_setup_8021q_tagging(struct dsa_switch *ds, bool enabled) 1528 { 1529 int rc, i; 1530 1531 for (i = 0; i < SJA1105_NUM_PORTS; i++) { 1532 rc = dsa_port_setup_8021q_tagging(ds, i, enabled); 1533 if (rc < 0) { 1534 dev_err(ds->dev, "Failed to setup VLAN tagging for port %d: %d\n", 1535 i, rc); 1536 return rc; 1537 } 1538 } 1539 dev_info(ds->dev, "%s switch tagging\n", 1540 enabled ? "Enabled" : "Disabled"); 1541 return 0; 1542 } 1543 1544 static enum dsa_tag_protocol 1545 sja1105_get_tag_protocol(struct dsa_switch *ds, int port, 1546 enum dsa_tag_protocol mp) 1547 { 1548 return DSA_TAG_PROTO_SJA1105; 1549 } 1550 1551 /* This callback needs to be present */ 1552 static int sja1105_vlan_prepare(struct dsa_switch *ds, int port, 1553 const struct switchdev_obj_port_vlan *vlan) 1554 { 1555 return 0; 1556 } 1557 1558 /* The TPID setting belongs to the General Parameters table, 1559 * which can only be partially reconfigured at runtime (and not the TPID). 1560 * So a switch reset is required. 1561 */ 1562 static int sja1105_vlan_filtering(struct dsa_switch *ds, int port, bool enabled) 1563 { 1564 struct sja1105_l2_lookup_params_entry *l2_lookup_params; 1565 struct sja1105_general_params_entry *general_params; 1566 struct sja1105_private *priv = ds->priv; 1567 struct sja1105_table *table; 1568 u16 tpid, tpid2; 1569 int rc; 1570 1571 if (enabled) { 1572 /* Enable VLAN filtering. */ 1573 tpid = ETH_P_8021Q; 1574 tpid2 = ETH_P_8021AD; 1575 } else { 1576 /* Disable VLAN filtering. */ 1577 tpid = ETH_P_SJA1105; 1578 tpid2 = ETH_P_SJA1105; 1579 } 1580 1581 table = &priv->static_config.tables[BLK_IDX_GENERAL_PARAMS]; 1582 general_params = table->entries; 1583 /* EtherType used to identify inner tagged (C-tag) VLAN traffic */ 1584 general_params->tpid = tpid; 1585 /* EtherType used to identify outer tagged (S-tag) VLAN traffic */ 1586 general_params->tpid2 = tpid2; 1587 /* When VLAN filtering is on, we need to at least be able to 1588 * decode management traffic through the "backup plan". 1589 */ 1590 general_params->incl_srcpt1 = enabled; 1591 general_params->incl_srcpt0 = enabled; 1592 1593 /* VLAN filtering => independent VLAN learning. 1594 * No VLAN filtering => shared VLAN learning. 1595 * 1596 * In shared VLAN learning mode, untagged traffic still gets 1597 * pvid-tagged, and the FDB table gets populated with entries 1598 * containing the "real" (pvid or from VLAN tag) VLAN ID. 1599 * However the switch performs a masked L2 lookup in the FDB, 1600 * effectively only looking up a frame's DMAC (and not VID) for the 1601 * forwarding decision. 1602 * 1603 * This is extremely convenient for us, because in modes with 1604 * vlan_filtering=0, dsa_8021q actually installs unique pvid's into 1605 * each front panel port. This is good for identification but breaks 1606 * learning badly - the VID of the learnt FDB entry is unique, aka 1607 * no frames coming from any other port are going to have it. So 1608 * for forwarding purposes, this is as though learning was broken 1609 * (all frames get flooded). 1610 */ 1611 table = &priv->static_config.tables[BLK_IDX_L2_LOOKUP_PARAMS]; 1612 l2_lookup_params = table->entries; 1613 l2_lookup_params->shared_learn = !enabled; 1614 1615 rc = sja1105_static_config_reload(priv, SJA1105_VLAN_FILTERING); 1616 if (rc) 1617 dev_err(ds->dev, "Failed to change VLAN Ethertype\n"); 1618 1619 /* Switch port identification based on 802.1Q is only passable 1620 * if we are not under a vlan_filtering bridge. So make sure 1621 * the two configurations are mutually exclusive. 1622 */ 1623 return sja1105_setup_8021q_tagging(ds, !enabled); 1624 } 1625 1626 static void sja1105_vlan_add(struct dsa_switch *ds, int port, 1627 const struct switchdev_obj_port_vlan *vlan) 1628 { 1629 struct sja1105_private *priv = ds->priv; 1630 u16 vid; 1631 int rc; 1632 1633 for (vid = vlan->vid_begin; vid <= vlan->vid_end; vid++) { 1634 rc = sja1105_vlan_apply(priv, port, vid, true, vlan->flags & 1635 BRIDGE_VLAN_INFO_UNTAGGED); 1636 if (rc < 0) { 1637 dev_err(ds->dev, "Failed to add VLAN %d to port %d: %d\n", 1638 vid, port, rc); 1639 return; 1640 } 1641 if (vlan->flags & BRIDGE_VLAN_INFO_PVID) { 1642 rc = sja1105_pvid_apply(ds->priv, port, vid); 1643 if (rc < 0) { 1644 dev_err(ds->dev, "Failed to set pvid %d on port %d: %d\n", 1645 vid, port, rc); 1646 return; 1647 } 1648 } 1649 } 1650 } 1651 1652 static int sja1105_vlan_del(struct dsa_switch *ds, int port, 1653 const struct switchdev_obj_port_vlan *vlan) 1654 { 1655 struct sja1105_private *priv = ds->priv; 1656 u16 vid; 1657 int rc; 1658 1659 for (vid = vlan->vid_begin; vid <= vlan->vid_end; vid++) { 1660 rc = sja1105_vlan_apply(priv, port, vid, false, vlan->flags & 1661 BRIDGE_VLAN_INFO_UNTAGGED); 1662 if (rc < 0) { 1663 dev_err(ds->dev, "Failed to remove VLAN %d from port %d: %d\n", 1664 vid, port, rc); 1665 return rc; 1666 } 1667 } 1668 return 0; 1669 } 1670 1671 /* The programming model for the SJA1105 switch is "all-at-once" via static 1672 * configuration tables. Some of these can be dynamically modified at runtime, 1673 * but not the xMII mode parameters table. 1674 * Furthermode, some PHYs may not have crystals for generating their clocks 1675 * (e.g. RMII). Instead, their 50MHz clock is supplied via the SJA1105 port's 1676 * ref_clk pin. So port clocking needs to be initialized early, before 1677 * connecting to PHYs is attempted, otherwise they won't respond through MDIO. 1678 * Setting correct PHY link speed does not matter now. 1679 * But dsa_slave_phy_setup is called later than sja1105_setup, so the PHY 1680 * bindings are not yet parsed by DSA core. We need to parse early so that we 1681 * can populate the xMII mode parameters table. 1682 */ 1683 static int sja1105_setup(struct dsa_switch *ds) 1684 { 1685 struct sja1105_dt_port ports[SJA1105_NUM_PORTS]; 1686 struct sja1105_private *priv = ds->priv; 1687 int rc; 1688 1689 rc = sja1105_parse_dt(priv, ports); 1690 if (rc < 0) { 1691 dev_err(ds->dev, "Failed to parse DT: %d\n", rc); 1692 return rc; 1693 } 1694 1695 /* Error out early if internal delays are required through DT 1696 * and we can't apply them. 1697 */ 1698 rc = sja1105_parse_rgmii_delays(priv, ports); 1699 if (rc < 0) { 1700 dev_err(ds->dev, "RGMII delay not supported\n"); 1701 return rc; 1702 } 1703 1704 rc = sja1105_ptp_clock_register(ds); 1705 if (rc < 0) { 1706 dev_err(ds->dev, "Failed to register PTP clock: %d\n", rc); 1707 return rc; 1708 } 1709 /* Create and send configuration down to device */ 1710 rc = sja1105_static_config_load(priv, ports); 1711 if (rc < 0) { 1712 dev_err(ds->dev, "Failed to load static config: %d\n", rc); 1713 return rc; 1714 } 1715 /* Configure the CGU (PHY link modes and speeds) */ 1716 rc = sja1105_clocking_setup(priv); 1717 if (rc < 0) { 1718 dev_err(ds->dev, "Failed to configure MII clocking: %d\n", rc); 1719 return rc; 1720 } 1721 /* On SJA1105, VLAN filtering per se is always enabled in hardware. 1722 * The only thing we can do to disable it is lie about what the 802.1Q 1723 * EtherType is. 1724 * So it will still try to apply VLAN filtering, but all ingress 1725 * traffic (except frames received with EtherType of ETH_P_SJA1105) 1726 * will be internally tagged with a distorted VLAN header where the 1727 * TPID is ETH_P_SJA1105, and the VLAN ID is the port pvid. 1728 */ 1729 ds->vlan_filtering_is_global = true; 1730 1731 /* Advertise the 8 egress queues */ 1732 ds->num_tx_queues = SJA1105_NUM_TC; 1733 1734 /* The DSA/switchdev model brings up switch ports in standalone mode by 1735 * default, and that means vlan_filtering is 0 since they're not under 1736 * a bridge, so it's safe to set up switch tagging at this time. 1737 */ 1738 return sja1105_setup_8021q_tagging(ds, true); 1739 } 1740 1741 static void sja1105_teardown(struct dsa_switch *ds) 1742 { 1743 struct sja1105_private *priv = ds->priv; 1744 int port; 1745 1746 for (port = 0; port < SJA1105_NUM_PORTS; port++) { 1747 struct sja1105_port *sp = &priv->ports[port]; 1748 1749 if (!dsa_is_user_port(ds, port)) 1750 continue; 1751 1752 if (sp->xmit_worker) 1753 kthread_destroy_worker(sp->xmit_worker); 1754 } 1755 1756 sja1105_tas_teardown(ds); 1757 sja1105_ptp_clock_unregister(ds); 1758 sja1105_static_config_free(&priv->static_config); 1759 } 1760 1761 static int sja1105_port_enable(struct dsa_switch *ds, int port, 1762 struct phy_device *phy) 1763 { 1764 struct net_device *slave; 1765 1766 if (!dsa_is_user_port(ds, port)) 1767 return 0; 1768 1769 slave = dsa_to_port(ds, port)->slave; 1770 1771 slave->features &= ~NETIF_F_HW_VLAN_CTAG_FILTER; 1772 1773 return 0; 1774 } 1775 1776 static void sja1105_port_disable(struct dsa_switch *ds, int port) 1777 { 1778 struct sja1105_private *priv = ds->priv; 1779 struct sja1105_port *sp = &priv->ports[port]; 1780 1781 if (!dsa_is_user_port(ds, port)) 1782 return; 1783 1784 kthread_cancel_work_sync(&sp->xmit_work); 1785 skb_queue_purge(&sp->xmit_queue); 1786 } 1787 1788 static int sja1105_mgmt_xmit(struct dsa_switch *ds, int port, int slot, 1789 struct sk_buff *skb, bool takets) 1790 { 1791 struct sja1105_mgmt_entry mgmt_route = {0}; 1792 struct sja1105_private *priv = ds->priv; 1793 struct ethhdr *hdr; 1794 int timeout = 10; 1795 int rc; 1796 1797 hdr = eth_hdr(skb); 1798 1799 mgmt_route.macaddr = ether_addr_to_u64(hdr->h_dest); 1800 mgmt_route.destports = BIT(port); 1801 mgmt_route.enfport = 1; 1802 mgmt_route.tsreg = 0; 1803 mgmt_route.takets = takets; 1804 1805 rc = sja1105_dynamic_config_write(priv, BLK_IDX_MGMT_ROUTE, 1806 slot, &mgmt_route, true); 1807 if (rc < 0) { 1808 kfree_skb(skb); 1809 return rc; 1810 } 1811 1812 /* Transfer skb to the host port. */ 1813 dsa_enqueue_skb(skb, dsa_to_port(ds, port)->slave); 1814 1815 /* Wait until the switch has processed the frame */ 1816 do { 1817 rc = sja1105_dynamic_config_read(priv, BLK_IDX_MGMT_ROUTE, 1818 slot, &mgmt_route); 1819 if (rc < 0) { 1820 dev_err_ratelimited(priv->ds->dev, 1821 "failed to poll for mgmt route\n"); 1822 continue; 1823 } 1824 1825 /* UM10944: The ENFPORT flag of the respective entry is 1826 * cleared when a match is found. The host can use this 1827 * flag as an acknowledgment. 1828 */ 1829 cpu_relax(); 1830 } while (mgmt_route.enfport && --timeout); 1831 1832 if (!timeout) { 1833 /* Clean up the management route so that a follow-up 1834 * frame may not match on it by mistake. 1835 * This is only hardware supported on P/Q/R/S - on E/T it is 1836 * a no-op and we are silently discarding the -EOPNOTSUPP. 1837 */ 1838 sja1105_dynamic_config_write(priv, BLK_IDX_MGMT_ROUTE, 1839 slot, &mgmt_route, false); 1840 dev_err_ratelimited(priv->ds->dev, "xmit timed out\n"); 1841 } 1842 1843 return NETDEV_TX_OK; 1844 } 1845 1846 #define work_to_port(work) \ 1847 container_of((work), struct sja1105_port, xmit_work) 1848 #define tagger_to_sja1105(t) \ 1849 container_of((t), struct sja1105_private, tagger_data) 1850 1851 /* Deferred work is unfortunately necessary because setting up the management 1852 * route cannot be done from atomit context (SPI transfer takes a sleepable 1853 * lock on the bus) 1854 */ 1855 static void sja1105_port_deferred_xmit(struct kthread_work *work) 1856 { 1857 struct sja1105_port *sp = work_to_port(work); 1858 struct sja1105_tagger_data *tagger_data = sp->data; 1859 struct sja1105_private *priv = tagger_to_sja1105(tagger_data); 1860 int port = sp - priv->ports; 1861 struct sk_buff *skb; 1862 1863 while ((skb = skb_dequeue(&sp->xmit_queue)) != NULL) { 1864 struct sk_buff *clone = DSA_SKB_CB(skb)->clone; 1865 1866 mutex_lock(&priv->mgmt_lock); 1867 1868 sja1105_mgmt_xmit(priv->ds, port, 0, skb, !!clone); 1869 1870 /* The clone, if there, was made by dsa_skb_tx_timestamp */ 1871 if (clone) 1872 sja1105_ptp_txtstamp_skb(priv->ds, port, clone); 1873 1874 mutex_unlock(&priv->mgmt_lock); 1875 } 1876 } 1877 1878 /* The MAXAGE setting belongs to the L2 Forwarding Parameters table, 1879 * which cannot be reconfigured at runtime. So a switch reset is required. 1880 */ 1881 static int sja1105_set_ageing_time(struct dsa_switch *ds, 1882 unsigned int ageing_time) 1883 { 1884 struct sja1105_l2_lookup_params_entry *l2_lookup_params; 1885 struct sja1105_private *priv = ds->priv; 1886 struct sja1105_table *table; 1887 unsigned int maxage; 1888 1889 table = &priv->static_config.tables[BLK_IDX_L2_LOOKUP_PARAMS]; 1890 l2_lookup_params = table->entries; 1891 1892 maxage = SJA1105_AGEING_TIME_MS(ageing_time); 1893 1894 if (l2_lookup_params->maxage == maxage) 1895 return 0; 1896 1897 l2_lookup_params->maxage = maxage; 1898 1899 return sja1105_static_config_reload(priv, SJA1105_AGEING_TIME); 1900 } 1901 1902 static int sja1105_port_setup_tc(struct dsa_switch *ds, int port, 1903 enum tc_setup_type type, 1904 void *type_data) 1905 { 1906 switch (type) { 1907 case TC_SETUP_QDISC_TAPRIO: 1908 return sja1105_setup_tc_taprio(ds, port, type_data); 1909 default: 1910 return -EOPNOTSUPP; 1911 } 1912 } 1913 1914 /* We have a single mirror (@to) port, but can configure ingress and egress 1915 * mirroring on all other (@from) ports. 1916 * We need to allow mirroring rules only as long as the @to port is always the 1917 * same, and we need to unset the @to port from mirr_port only when there is no 1918 * mirroring rule that references it. 1919 */ 1920 static int sja1105_mirror_apply(struct sja1105_private *priv, int from, int to, 1921 bool ingress, bool enabled) 1922 { 1923 struct sja1105_general_params_entry *general_params; 1924 struct sja1105_mac_config_entry *mac; 1925 struct sja1105_table *table; 1926 bool already_enabled; 1927 u64 new_mirr_port; 1928 int rc; 1929 1930 table = &priv->static_config.tables[BLK_IDX_GENERAL_PARAMS]; 1931 general_params = table->entries; 1932 1933 mac = priv->static_config.tables[BLK_IDX_MAC_CONFIG].entries; 1934 1935 already_enabled = (general_params->mirr_port != SJA1105_NUM_PORTS); 1936 if (already_enabled && enabled && general_params->mirr_port != to) { 1937 dev_err(priv->ds->dev, 1938 "Delete mirroring rules towards port %llu first\n", 1939 general_params->mirr_port); 1940 return -EBUSY; 1941 } 1942 1943 new_mirr_port = to; 1944 if (!enabled) { 1945 bool keep = false; 1946 int port; 1947 1948 /* Anybody still referencing mirr_port? */ 1949 for (port = 0; port < SJA1105_NUM_PORTS; port++) { 1950 if (mac[port].ing_mirr || mac[port].egr_mirr) { 1951 keep = true; 1952 break; 1953 } 1954 } 1955 /* Unset already_enabled for next time */ 1956 if (!keep) 1957 new_mirr_port = SJA1105_NUM_PORTS; 1958 } 1959 if (new_mirr_port != general_params->mirr_port) { 1960 general_params->mirr_port = new_mirr_port; 1961 1962 rc = sja1105_dynamic_config_write(priv, BLK_IDX_GENERAL_PARAMS, 1963 0, general_params, true); 1964 if (rc < 0) 1965 return rc; 1966 } 1967 1968 if (ingress) 1969 mac[from].ing_mirr = enabled; 1970 else 1971 mac[from].egr_mirr = enabled; 1972 1973 return sja1105_dynamic_config_write(priv, BLK_IDX_MAC_CONFIG, from, 1974 &mac[from], true); 1975 } 1976 1977 static int sja1105_mirror_add(struct dsa_switch *ds, int port, 1978 struct dsa_mall_mirror_tc_entry *mirror, 1979 bool ingress) 1980 { 1981 return sja1105_mirror_apply(ds->priv, port, mirror->to_local_port, 1982 ingress, true); 1983 } 1984 1985 static void sja1105_mirror_del(struct dsa_switch *ds, int port, 1986 struct dsa_mall_mirror_tc_entry *mirror) 1987 { 1988 sja1105_mirror_apply(ds->priv, port, mirror->to_local_port, 1989 mirror->ingress, false); 1990 } 1991 1992 static const struct dsa_switch_ops sja1105_switch_ops = { 1993 .get_tag_protocol = sja1105_get_tag_protocol, 1994 .setup = sja1105_setup, 1995 .teardown = sja1105_teardown, 1996 .set_ageing_time = sja1105_set_ageing_time, 1997 .phylink_validate = sja1105_phylink_validate, 1998 .phylink_mac_config = sja1105_mac_config, 1999 .phylink_mac_link_up = sja1105_mac_link_up, 2000 .phylink_mac_link_down = sja1105_mac_link_down, 2001 .get_strings = sja1105_get_strings, 2002 .get_ethtool_stats = sja1105_get_ethtool_stats, 2003 .get_sset_count = sja1105_get_sset_count, 2004 .get_ts_info = sja1105_get_ts_info, 2005 .port_enable = sja1105_port_enable, 2006 .port_disable = sja1105_port_disable, 2007 .port_fdb_dump = sja1105_fdb_dump, 2008 .port_fdb_add = sja1105_fdb_add, 2009 .port_fdb_del = sja1105_fdb_del, 2010 .port_bridge_join = sja1105_bridge_join, 2011 .port_bridge_leave = sja1105_bridge_leave, 2012 .port_stp_state_set = sja1105_bridge_stp_state_set, 2013 .port_vlan_prepare = sja1105_vlan_prepare, 2014 .port_vlan_filtering = sja1105_vlan_filtering, 2015 .port_vlan_add = sja1105_vlan_add, 2016 .port_vlan_del = sja1105_vlan_del, 2017 .port_mdb_prepare = sja1105_mdb_prepare, 2018 .port_mdb_add = sja1105_mdb_add, 2019 .port_mdb_del = sja1105_mdb_del, 2020 .port_hwtstamp_get = sja1105_hwtstamp_get, 2021 .port_hwtstamp_set = sja1105_hwtstamp_set, 2022 .port_rxtstamp = sja1105_port_rxtstamp, 2023 .port_txtstamp = sja1105_port_txtstamp, 2024 .port_setup_tc = sja1105_port_setup_tc, 2025 .port_mirror_add = sja1105_mirror_add, 2026 .port_mirror_del = sja1105_mirror_del, 2027 }; 2028 2029 static int sja1105_check_device_id(struct sja1105_private *priv) 2030 { 2031 const struct sja1105_regs *regs = priv->info->regs; 2032 u8 prod_id[SJA1105_SIZE_DEVICE_ID] = {0}; 2033 struct device *dev = &priv->spidev->dev; 2034 u32 device_id; 2035 u64 part_no; 2036 int rc; 2037 2038 rc = sja1105_xfer_u32(priv, SPI_READ, regs->device_id, &device_id, 2039 NULL); 2040 if (rc < 0) 2041 return rc; 2042 2043 if (device_id != priv->info->device_id) { 2044 dev_err(dev, "Expected device ID 0x%llx but read 0x%x\n", 2045 priv->info->device_id, device_id); 2046 return -ENODEV; 2047 } 2048 2049 rc = sja1105_xfer_buf(priv, SPI_READ, regs->prod_id, prod_id, 2050 SJA1105_SIZE_DEVICE_ID); 2051 if (rc < 0) 2052 return rc; 2053 2054 sja1105_unpack(prod_id, &part_no, 19, 4, SJA1105_SIZE_DEVICE_ID); 2055 2056 if (part_no != priv->info->part_no) { 2057 dev_err(dev, "Expected part number 0x%llx but read 0x%llx\n", 2058 priv->info->part_no, part_no); 2059 return -ENODEV; 2060 } 2061 2062 return 0; 2063 } 2064 2065 static int sja1105_probe(struct spi_device *spi) 2066 { 2067 struct sja1105_tagger_data *tagger_data; 2068 struct device *dev = &spi->dev; 2069 struct sja1105_private *priv; 2070 struct dsa_switch *ds; 2071 int rc, port; 2072 2073 if (!dev->of_node) { 2074 dev_err(dev, "No DTS bindings for SJA1105 driver\n"); 2075 return -EINVAL; 2076 } 2077 2078 priv = devm_kzalloc(dev, sizeof(struct sja1105_private), GFP_KERNEL); 2079 if (!priv) 2080 return -ENOMEM; 2081 2082 /* Configure the optional reset pin and bring up switch */ 2083 priv->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_HIGH); 2084 if (IS_ERR(priv->reset_gpio)) 2085 dev_dbg(dev, "reset-gpios not defined, ignoring\n"); 2086 else 2087 sja1105_hw_reset(priv->reset_gpio, 1, 1); 2088 2089 /* Populate our driver private structure (priv) based on 2090 * the device tree node that was probed (spi) 2091 */ 2092 priv->spidev = spi; 2093 spi_set_drvdata(spi, priv); 2094 2095 /* Configure the SPI bus */ 2096 spi->bits_per_word = 8; 2097 rc = spi_setup(spi); 2098 if (rc < 0) { 2099 dev_err(dev, "Could not init SPI\n"); 2100 return rc; 2101 } 2102 2103 priv->info = of_device_get_match_data(dev); 2104 2105 /* Detect hardware device */ 2106 rc = sja1105_check_device_id(priv); 2107 if (rc < 0) { 2108 dev_err(dev, "Device ID check failed: %d\n", rc); 2109 return rc; 2110 } 2111 2112 dev_info(dev, "Probed switch chip: %s\n", priv->info->name); 2113 2114 ds = devm_kzalloc(dev, sizeof(*ds), GFP_KERNEL); 2115 if (!ds) 2116 return -ENOMEM; 2117 2118 ds->dev = dev; 2119 ds->num_ports = SJA1105_NUM_PORTS; 2120 ds->ops = &sja1105_switch_ops; 2121 ds->priv = priv; 2122 priv->ds = ds; 2123 2124 tagger_data = &priv->tagger_data; 2125 2126 mutex_init(&priv->ptp_data.lock); 2127 mutex_init(&priv->mgmt_lock); 2128 2129 sja1105_tas_setup(ds); 2130 2131 rc = dsa_register_switch(priv->ds); 2132 if (rc) 2133 return rc; 2134 2135 /* Connections between dsa_port and sja1105_port */ 2136 for (port = 0; port < SJA1105_NUM_PORTS; port++) { 2137 struct sja1105_port *sp = &priv->ports[port]; 2138 struct dsa_port *dp = dsa_to_port(ds, port); 2139 struct net_device *slave; 2140 2141 if (!dsa_is_user_port(ds, port)) 2142 continue; 2143 2144 dp->priv = sp; 2145 sp->dp = dp; 2146 sp->data = tagger_data; 2147 slave = dp->slave; 2148 kthread_init_work(&sp->xmit_work, sja1105_port_deferred_xmit); 2149 sp->xmit_worker = kthread_create_worker(0, "%s_xmit", 2150 slave->name); 2151 if (IS_ERR(sp->xmit_worker)) { 2152 rc = PTR_ERR(sp->xmit_worker); 2153 dev_err(ds->dev, 2154 "failed to create deferred xmit thread: %d\n", 2155 rc); 2156 goto out; 2157 } 2158 skb_queue_head_init(&sp->xmit_queue); 2159 } 2160 2161 return 0; 2162 out: 2163 while (port-- > 0) { 2164 struct sja1105_port *sp = &priv->ports[port]; 2165 2166 if (!dsa_is_user_port(ds, port)) 2167 continue; 2168 2169 kthread_destroy_worker(sp->xmit_worker); 2170 } 2171 return rc; 2172 } 2173 2174 static int sja1105_remove(struct spi_device *spi) 2175 { 2176 struct sja1105_private *priv = spi_get_drvdata(spi); 2177 2178 dsa_unregister_switch(priv->ds); 2179 return 0; 2180 } 2181 2182 static const struct of_device_id sja1105_dt_ids[] = { 2183 { .compatible = "nxp,sja1105e", .data = &sja1105e_info }, 2184 { .compatible = "nxp,sja1105t", .data = &sja1105t_info }, 2185 { .compatible = "nxp,sja1105p", .data = &sja1105p_info }, 2186 { .compatible = "nxp,sja1105q", .data = &sja1105q_info }, 2187 { .compatible = "nxp,sja1105r", .data = &sja1105r_info }, 2188 { .compatible = "nxp,sja1105s", .data = &sja1105s_info }, 2189 { /* sentinel */ }, 2190 }; 2191 MODULE_DEVICE_TABLE(of, sja1105_dt_ids); 2192 2193 static struct spi_driver sja1105_driver = { 2194 .driver = { 2195 .name = "sja1105", 2196 .owner = THIS_MODULE, 2197 .of_match_table = of_match_ptr(sja1105_dt_ids), 2198 }, 2199 .probe = sja1105_probe, 2200 .remove = sja1105_remove, 2201 }; 2202 2203 module_spi_driver(sja1105_driver); 2204 2205 MODULE_AUTHOR("Vladimir Oltean <olteanv@gmail.com>"); 2206 MODULE_AUTHOR("Georg Waibel <georg.waibel@sensor-technik.de>"); 2207 MODULE_DESCRIPTION("SJA1105 Driver"); 2208 MODULE_LICENSE("GPL v2"); 2209