Lines Matching refs:dev

227 static int b53_do_vlan_op(struct b53_device *dev, u8 op)
231 b53_write8(dev, B53_ARLIO_PAGE, dev->vta_regs[0], VTA_START_CMD | op);
236 b53_read8(dev, B53_ARLIO_PAGE, dev->vta_regs[0], &vta);
246 static void b53_set_vlan_entry(struct b53_device *dev, u16 vid,
249 if (is5325(dev)) {
255 if (dev->core_rev >= 3)
261 b53_write32(dev, B53_VLAN_PAGE, B53_VLAN_WRITE_25, entry);
262 b53_write16(dev, B53_VLAN_PAGE, B53_VLAN_TABLE_ACCESS_25, vid |
264 } else if (is5365(dev)) {
271 b53_write16(dev, B53_VLAN_PAGE, B53_VLAN_WRITE_65, entry);
272 b53_write16(dev, B53_VLAN_PAGE, B53_VLAN_TABLE_ACCESS_65, vid |
275 b53_write16(dev, B53_ARLIO_PAGE, dev->vta_regs[1], vid);
276 b53_write32(dev, B53_ARLIO_PAGE, dev->vta_regs[2],
279 b53_do_vlan_op(dev, VTA_CMD_WRITE);
282 dev_dbg(dev->ds->dev, "VID: %d, members: 0x%04x, untag: 0x%04x\n",
286 static void b53_get_vlan_entry(struct b53_device *dev, u16 vid,
289 if (is5325(dev)) {
292 b53_write16(dev, B53_VLAN_PAGE, B53_VLAN_TABLE_ACCESS_25, vid |
294 b53_read32(dev, B53_VLAN_PAGE, B53_VLAN_WRITE_25, &entry);
296 if (dev->core_rev >= 3)
303 } else if (is5365(dev)) {
306 b53_write16(dev, B53_VLAN_PAGE, B53_VLAN_TABLE_ACCESS_65, vid |
308 b53_read16(dev, B53_VLAN_PAGE, B53_VLAN_WRITE_65, &entry);
316 b53_write16(dev, B53_ARLIO_PAGE, dev->vta_regs[1], vid);
317 b53_do_vlan_op(dev, VTA_CMD_READ);
318 b53_read32(dev, B53_ARLIO_PAGE, dev->vta_regs[2], &entry);
325 static void b53_set_forwarding(struct b53_device *dev, int enable)
329 b53_read8(dev, B53_CTRL_PAGE, B53_SWITCH_MODE, &mgmt);
336 b53_write8(dev, B53_CTRL_PAGE, B53_SWITCH_MODE, mgmt);
340 b53_read8(dev, B53_CTRL_PAGE, B53_SWITCH_CTRL, &mgmt);
342 b53_write8(dev, B53_CTRL_PAGE, B53_SWITCH_CTRL, mgmt);
347 b53_read8(dev, B53_CTRL_PAGE, B53_IP_MULTICAST_CTRL, &mgmt);
349 b53_write8(dev, B53_CTRL_PAGE, B53_IP_MULTICAST_CTRL, mgmt);
352 static void b53_enable_vlan(struct b53_device *dev, int port, bool enable,
357 b53_read8(dev, B53_CTRL_PAGE, B53_SWITCH_MODE, &mgmt);
358 b53_read8(dev, B53_VLAN_PAGE, B53_VLAN_CTRL0, &vc0);
359 b53_read8(dev, B53_VLAN_PAGE, B53_VLAN_CTRL1, &vc1);
361 if (is5325(dev) || is5365(dev)) {
362 b53_read8(dev, B53_VLAN_PAGE, B53_VLAN_CTRL4_25, &vc4);
363 b53_read8(dev, B53_VLAN_PAGE, B53_VLAN_CTRL5_25, &vc5);
364 } else if (is63xx(dev)) {
365 b53_read8(dev, B53_VLAN_PAGE, B53_VLAN_CTRL4_63XX, &vc4);
366 b53_read8(dev, B53_VLAN_PAGE, B53_VLAN_CTRL5_63XX, &vc5);
368 b53_read8(dev, B53_VLAN_PAGE, B53_VLAN_CTRL4, &vc4);
369 b53_read8(dev, B53_VLAN_PAGE, B53_VLAN_CTRL5, &vc5);
384 if (is5325(dev))
387 if (is5325(dev) || is5365(dev))
396 if (is5325(dev) || is5365(dev))
401 if (is5325(dev) || is5365(dev))
405 if (!is5325(dev) && !is5365(dev))
408 b53_write8(dev, B53_VLAN_PAGE, B53_VLAN_CTRL0, vc0);
409 b53_write8(dev, B53_VLAN_PAGE, B53_VLAN_CTRL1, vc1);
411 if (is5325(dev) || is5365(dev)) {
413 if (is5325(dev) && enable)
414 b53_write8(dev, B53_VLAN_PAGE, B53_VLAN_CTRL3,
417 b53_write8(dev, B53_VLAN_PAGE, B53_VLAN_CTRL3, 0);
419 b53_write8(dev, B53_VLAN_PAGE, B53_VLAN_CTRL4_25, vc4);
420 b53_write8(dev, B53_VLAN_PAGE, B53_VLAN_CTRL5_25, vc5);
421 } else if (is63xx(dev)) {
422 b53_write16(dev, B53_VLAN_PAGE, B53_VLAN_CTRL3_63XX, 0);
423 b53_write8(dev, B53_VLAN_PAGE, B53_VLAN_CTRL4_63XX, vc4);
424 b53_write8(dev, B53_VLAN_PAGE, B53_VLAN_CTRL5_63XX, vc5);
426 b53_write16(dev, B53_VLAN_PAGE, B53_VLAN_CTRL3, 0);
427 b53_write8(dev, B53_VLAN_PAGE, B53_VLAN_CTRL4, vc4);
428 b53_write8(dev, B53_VLAN_PAGE, B53_VLAN_CTRL5, vc5);
431 b53_write8(dev, B53_CTRL_PAGE, B53_SWITCH_MODE, mgmt);
433 dev->vlan_enabled = enable;
435 dev_dbg(dev->dev, "Port %d VLAN enabled: %d, filtering: %d\n",
439 static int b53_set_jumbo(struct b53_device *dev, bool enable, bool allow_10_100)
444 if (is5325(dev) || is5365(dev))
448 port_mask = dev->enabled_ports;
454 b53_write32(dev, B53_JUMBO_PAGE, dev->jumbo_pm_reg, port_mask);
455 return b53_write16(dev, B53_JUMBO_PAGE, dev->jumbo_size_reg, max_size);
458 static int b53_flush_arl(struct b53_device *dev, u8 mask)
462 b53_write8(dev, B53_CTRL_PAGE, B53_FAST_AGE_CTRL,
468 b53_read8(dev, B53_CTRL_PAGE, B53_FAST_AGE_CTRL,
480 b53_write8(dev, B53_CTRL_PAGE, B53_FAST_AGE_CTRL, FAST_AGE_DYNAMIC);
484 static int b53_fast_age_port(struct b53_device *dev, int port)
486 b53_write8(dev, B53_CTRL_PAGE, B53_FAST_AGE_PORT_CTRL, port);
488 return b53_flush_arl(dev, FAST_AGE_PORT);
491 static int b53_fast_age_vlan(struct b53_device *dev, u16 vid)
493 b53_write16(dev, B53_CTRL_PAGE, B53_FAST_AGE_VID_CTRL, vid);
495 return b53_flush_arl(dev, FAST_AGE_VLAN);
500 struct b53_device *dev = ds->priv;
508 b53_for_each_port(dev, i) {
509 b53_read16(dev, B53_PVLAN_PAGE, B53_PVLAN_PORT_MASK(i), &pvlan);
511 b53_write16(dev, B53_PVLAN_PAGE, B53_PVLAN_PORT_MASK(i), pvlan);
516 static void b53_port_set_ucast_flood(struct b53_device *dev, int port,
521 b53_read16(dev, B53_CTRL_PAGE, B53_UC_FLOOD_MASK, &uc);
526 b53_write16(dev, B53_CTRL_PAGE, B53_UC_FLOOD_MASK, uc);
529 static void b53_port_set_mcast_flood(struct b53_device *dev, int port,
534 b53_read16(dev, B53_CTRL_PAGE, B53_MC_FLOOD_MASK, &mc);
539 b53_write16(dev, B53_CTRL_PAGE, B53_MC_FLOOD_MASK, mc);
541 b53_read16(dev, B53_CTRL_PAGE, B53_IPMC_FLOOD_MASK, &mc);
546 b53_write16(dev, B53_CTRL_PAGE, B53_IPMC_FLOOD_MASK, mc);
549 static void b53_port_set_learning(struct b53_device *dev, int port,
554 b53_read16(dev, B53_CTRL_PAGE, B53_DIS_LEARNING, &reg);
559 b53_write16(dev, B53_CTRL_PAGE, B53_DIS_LEARNING, reg);
564 struct b53_device *dev = ds->priv;
574 b53_port_set_ucast_flood(dev, port, true);
575 b53_port_set_mcast_flood(dev, port, true);
576 b53_port_set_learning(dev, port, false);
578 if (dev->ops->irq_enable)
579 ret = dev->ops->irq_enable(dev, port);
584 b53_write8(dev, B53_CTRL_PAGE, B53_PORT_CTRL(port), 0);
590 b53_read16(dev, B53_PVLAN_PAGE, B53_PVLAN_PORT_MASK(port), &pvlan);
593 pvlan |= dev->ports[port].vlan_ctl_mask;
594 b53_write16(dev, B53_PVLAN_PAGE, B53_PVLAN_PORT_MASK(port), pvlan);
599 if (dev->ports[port].eee.eee_enabled)
608 struct b53_device *dev = ds->priv;
612 b53_read8(dev, B53_CTRL_PAGE, B53_PORT_CTRL(port), &reg);
614 b53_write8(dev, B53_CTRL_PAGE, B53_PORT_CTRL(port), reg);
616 if (dev->ops->irq_disable)
617 dev->ops->irq_disable(dev, port);
623 struct b53_device *dev = ds->priv;
624 bool tag_en = !(dev->tag_protocol == DSA_TAG_PROTO_NONE);
645 b53_read8(dev, B53_CTRL_PAGE, B53_SWITCH_MODE, &hdr_ctl);
650 b53_write8(dev, B53_CTRL_PAGE, B53_SWITCH_MODE, hdr_ctl);
653 b53_read8(dev, B53_MGMT_PAGE, B53_GLOBAL_CONFIG, &hdr_ctl);
658 b53_write8(dev, B53_MGMT_PAGE, B53_GLOBAL_CONFIG, hdr_ctl);
661 b53_read8(dev, B53_MGMT_PAGE, B53_BRCM_HDR, &hdr_ctl);
666 b53_write8(dev, B53_MGMT_PAGE, B53_BRCM_HDR, hdr_ctl);
669 if (!is58xx(dev))
675 b53_read16(dev, B53_MGMT_PAGE, B53_BRCM_HDR_RX_DIS, &reg);
680 b53_write16(dev, B53_MGMT_PAGE, B53_BRCM_HDR_RX_DIS, reg);
685 b53_read16(dev, B53_MGMT_PAGE, B53_BRCM_HDR_TX_DIS, &reg);
690 b53_write16(dev, B53_MGMT_PAGE, B53_BRCM_HDR_TX_DIS, reg);
694 static void b53_enable_cpu_port(struct b53_device *dev, int port)
699 if ((is5325(dev) || is5365(dev)) && port == B53_CPU_PORT_25)
705 b53_write8(dev, B53_CTRL_PAGE, B53_PORT_CTRL(port), port_ctrl);
707 b53_brcm_hdr_setup(dev->ds, port);
709 b53_port_set_ucast_flood(dev, port, true);
710 b53_port_set_mcast_flood(dev, port, true);
711 b53_port_set_learning(dev, port, false);
714 static void b53_enable_mib(struct b53_device *dev)
718 b53_read8(dev, B53_MGMT_PAGE, B53_GLOBAL_CONFIG, &gc);
720 b53_write8(dev, B53_MGMT_PAGE, B53_GLOBAL_CONFIG, gc);
723 static u16 b53_default_pvid(struct b53_device *dev)
725 if (is5325(dev) || is5365(dev))
733 struct b53_device *dev = ds->priv;
735 return dev->tag_protocol == DSA_TAG_PROTO_NONE && dsa_is_cpu_port(ds, port);
740 struct b53_device *dev = ds->priv;
746 def_vid = b53_default_pvid(dev);
749 if (is5325(dev) || is5365(dev)) {
750 for (i = def_vid; i < dev->num_vlans; i++)
751 b53_set_vlan_entry(dev, i, &vl);
753 b53_do_vlan_op(dev, VTA_CMD_CLEAR);
756 b53_enable_vlan(dev, -1, dev->vlan_enabled, ds->vlan_filtering);
764 b53_for_each_port(dev, i) {
765 v = &dev->vlans[def_vid];
769 b53_write16(dev, B53_VLAN_PAGE,
776 for (vid = def_vid; vid < dev->num_vlans; vid++) {
777 v = &dev->vlans[vid];
782 b53_set_vlan_entry(dev, vid, v);
783 b53_fast_age_vlan(dev, vid);
790 static void b53_switch_reset_gpio(struct b53_device *dev)
792 int gpio = dev->reset_gpio;
805 dev->current_page = 0xff;
808 static int b53_switch_reset(struct b53_device *dev)
813 b53_switch_reset_gpio(dev);
815 if (is539x(dev)) {
816 b53_write8(dev, B53_CTRL_PAGE, B53_SOFTRESET, 0x83);
817 b53_write8(dev, B53_CTRL_PAGE, B53_SOFTRESET, 0x00);
825 if (dev->chip_id == BCM58XX_DEVICE_ID ||
826 dev->chip_id == BCM583XX_DEVICE_ID) {
827 b53_read8(dev, B53_CTRL_PAGE, B53_SOFTRESET, &reg);
829 b53_write8(dev, B53_CTRL_PAGE, B53_SOFTRESET, reg);
832 b53_read8(dev, B53_CTRL_PAGE, B53_SOFTRESET, &reg);
840 dev_err(dev->dev,
846 b53_read8(dev, B53_CTRL_PAGE, B53_SWITCH_MODE, &mgmt);
852 b53_write8(dev, B53_CTRL_PAGE, B53_SWITCH_MODE, mgmt);
853 b53_read8(dev, B53_CTRL_PAGE, B53_SWITCH_MODE, &mgmt);
856 dev_err(dev->dev, "Failed to enable switch!\n");
861 b53_enable_mib(dev);
863 return b53_flush_arl(dev, FAST_AGE_STATIC);
927 static const struct b53_mib_desc *b53_get_mib(struct b53_device *dev)
929 if (is5365(dev))
931 else if (is63xx(dev))
933 else if (is58xx(dev))
939 static unsigned int b53_get_mib_size(struct b53_device *dev)
941 if (is5365(dev))
943 else if (is63xx(dev))
945 else if (is58xx(dev))
967 struct b53_device *dev = ds->priv;
968 const struct b53_mib_desc *mibs = b53_get_mib(dev);
969 unsigned int mib_size = b53_get_mib_size(dev);
989 struct b53_device *dev = ds->priv;
990 const struct b53_mib_desc *mibs = b53_get_mib(dev);
991 unsigned int mib_size = b53_get_mib_size(dev);
996 if (is5365(dev) && port == 5)
999 mutex_lock(&dev->stats_mutex);
1005 b53_read64(dev, B53_MIB_PAGE(port), s->offset, &val);
1009 b53_read32(dev, B53_MIB_PAGE(port), s->offset,
1016 mutex_unlock(&dev->stats_mutex);
1034 struct b53_device *dev = ds->priv;
1038 return b53_get_mib_size(dev);
1057 struct b53_device *dev = priv;
1062 for (i = 0; i < dev->num_vlans; i++) {
1063 vl = &dev->vlans[i];
1074 struct b53_device *dev = ds->priv;
1077 devlink_resource_size_params_init(&size_params, dev->num_vlans,
1078 dev->num_vlans,
1081 err = dsa_devlink_resource_register(ds, "VLAN", dev->num_vlans,
1090 b53_devlink_vlan_table_get, dev);
1101 struct b53_device *dev = ds->priv;
1108 ds->untag_bridge_pvid = dev->tag_protocol == DSA_TAG_PROTO_NONE;
1110 ret = b53_reset_switch(dev);
1112 dev_err(ds->dev, "failed to reset switch\n");
1116 b53_reset_mib(dev);
1118 ret = b53_apply_config(dev);
1120 dev_err(ds->dev, "failed to apply configuration\n");
1127 for (port = 0; port < dev->num_ports; port++) {
1129 b53_enable_cpu_port(dev, port);
1142 static void b53_force_link(struct b53_device *dev, int port, int link)
1147 if (port == dev->imp_port) {
1155 b53_read8(dev, B53_CTRL_PAGE, off, &reg);
1161 b53_write8(dev, B53_CTRL_PAGE, off, reg);
1164 static void b53_force_port_config(struct b53_device *dev, int port,
1171 if (port == dev->imp_port) {
1179 b53_read8(dev, B53_CTRL_PAGE, off, &reg);
1200 dev_err(dev->dev, "unknown speed: %d\n", speed);
1209 b53_write8(dev, B53_CTRL_PAGE, off, reg);
1215 struct b53_device *dev = ds->priv;
1218 if (port == dev->imp_port)
1223 b53_read8(dev, B53_CTRL_PAGE, off, &rgmii_ctrl);
1243 if (port != dev->imp_port) {
1244 if (is63268(dev))
1250 b53_write8(dev, B53_CTRL_PAGE, off, rgmii_ctrl);
1252 dev_dbg(ds->dev, "Configured port %d for %s\n", port,
1259 struct b53_device *dev = ds->priv;
1260 struct ethtool_eee *p = &dev->ports[port].eee;
1269 if (is5301x(dev) && dsa_is_cpu_port(ds, port))
1278 b53_force_port_config(dev, port, phydev->speed, phydev->duplex,
1280 b53_force_link(dev, port, phydev->link);
1282 if (is63xx(dev) && port >= B53_63XX_RGMII0)
1285 if (is531x5(dev) && phy_interface_is_rgmii(phydev)) {
1286 if (port == dev->imp_port)
1294 b53_read8(dev, B53_CTRL_PAGE, off, &rgmii_ctrl);
1317 b53_write8(dev, B53_CTRL_PAGE, off, rgmii_ctrl);
1319 dev_info(ds->dev, "Configured port %d for %s\n", port,
1324 if (is5325(dev)) {
1325 b53_read8(dev, B53_CTRL_PAGE, B53_PORT_OVERRIDE_CTRL,
1330 b53_write8(dev, B53_CTRL_PAGE, B53_PORT_OVERRIDE_CTRL,
1332 b53_read8(dev, B53_CTRL_PAGE, B53_PORT_OVERRIDE_CTRL,
1336 dev_err(ds->dev,
1349 struct b53_device *dev = ds->priv;
1353 b53_read16(dev, B53_STAT_PAGE, B53_LINK_STAT, &sts);
1362 struct b53_device *dev = ds->priv;
1390 if (!(is5325(dev) || is5365(dev)))
1394 if (dev->ops->phylink_get_caps)
1395 dev->ops->phylink_get_caps(dev, port, config);
1402 struct b53_device *dev = ds->priv;
1404 if (!dev->ops->phylink_mac_select_pcs)
1407 return dev->ops->phylink_mac_select_pcs(dev, port, interface);
1421 struct b53_device *dev = ds->priv;
1427 b53_force_link(dev, port, false);
1432 dev->ops->serdes_link_set)
1433 dev->ops->serdes_link_set(dev, port, mode, interface, false);
1444 struct b53_device *dev = ds->priv;
1446 if (is63xx(dev) && port >= B53_63XX_RGMII0)
1453 b53_force_port_config(dev, port, speed, duplex,
1455 b53_force_link(dev, port, true);
1460 dev->ops->serdes_link_set)
1461 dev->ops->serdes_link_set(dev, port, mode, interface, true);
1468 struct b53_device *dev = ds->priv;
1470 b53_enable_vlan(dev, port, dev->vlan_enabled, vlan_filtering);
1479 struct b53_device *dev = ds->priv;
1481 if ((is5325(dev) || is5365(dev)) && vlan->vid == 0)
1488 if (dev->chip_id == BCM7278_DEVICE_ID && port == 7 &&
1492 if (vlan->vid >= dev->num_vlans)
1495 b53_enable_vlan(dev, port, true, ds->vlan_filtering);
1504 struct b53_device *dev = ds->priv;
1514 vl = &dev->vlans[vlan->vid];
1516 b53_get_vlan_entry(dev, vlan->vid, vl);
1518 if (vlan->vid == 0 && vlan->vid == b53_default_pvid(dev))
1527 b53_set_vlan_entry(dev, vlan->vid, vl);
1528 b53_fast_age_vlan(dev, vlan->vid);
1531 b53_write16(dev, B53_VLAN_PAGE, B53_VLAN_PORT_DEF_TAG(port),
1533 b53_fast_age_vlan(dev, vlan->vid);
1543 struct b53_device *dev = ds->priv;
1548 b53_read16(dev, B53_VLAN_PAGE, B53_VLAN_PORT_DEF_TAG(port), &pvid);
1550 vl = &dev->vlans[vlan->vid];
1552 b53_get_vlan_entry(dev, vlan->vid, vl);
1557 pvid = b53_default_pvid(dev);
1562 b53_set_vlan_entry(dev, vlan->vid, vl);
1563 b53_fast_age_vlan(dev, vlan->vid);
1565 b53_write16(dev, B53_VLAN_PAGE, B53_VLAN_PORT_DEF_TAG(port), pvid);
1566 b53_fast_age_vlan(dev, pvid);
1572 /* Address Resolution Logic routines. Caller must hold &dev->arl_mutex. */
1573 static int b53_arl_op_wait(struct b53_device *dev)
1579 b53_read8(dev, B53_ARLIO_PAGE, B53_ARLTBL_RW_CTRL, &reg);
1586 dev_warn(dev->dev, "timeout waiting for ARL to finish: 0x%02x\n", reg);
1591 static int b53_arl_rw_op(struct b53_device *dev, unsigned int op)
1598 b53_read8(dev, B53_ARLIO_PAGE, B53_ARLTBL_RW_CTRL, &reg);
1604 if (dev->vlan_enabled)
1608 b53_write8(dev, B53_ARLIO_PAGE, B53_ARLTBL_RW_CTRL, reg);
1610 return b53_arl_op_wait(dev);
1613 static int b53_arl_read(struct b53_device *dev, u64 mac,
1620 ret = b53_arl_op_wait(dev);
1624 bitmap_zero(free_bins, dev->num_arl_bins);
1627 for (i = 0; i < dev->num_arl_bins; i++) {
1631 b53_read64(dev, B53_ARLIO_PAGE,
1633 b53_read32(dev, B53_ARLIO_PAGE,
1643 if (dev->vlan_enabled &&
1650 *idx = find_first_bit(free_bins, dev->num_arl_bins);
1651 return *idx >= dev->num_arl_bins ? -ENOSPC : -ENOENT;
1654 static int b53_arl_op(struct b53_device *dev, int op, int port,
1667 b53_write48(dev, B53_ARLIO_PAGE, B53_MAC_ADDR_IDX, mac);
1668 b53_write16(dev, B53_ARLIO_PAGE, B53_VLAN_ID_IDX, vid);
1671 ret = b53_arl_rw_op(dev, 1);
1675 ret = b53_arl_read(dev, mac, vid, &ent, &idx);
1685 dev_dbg(dev->dev, "{%pM,%.4d} no space left in ARL\n",
1690 dev_dbg(dev->dev, "{%pM,%.4d} not found, using idx: %d\n",
1695 dev_dbg(dev->dev, "{%pM,%.4d} found, using idx: %d\n",
1721 b53_write64(dev, B53_ARLIO_PAGE,
1723 b53_write32(dev, B53_ARLIO_PAGE,
1726 return b53_arl_rw_op(dev, 0);
1765 static int b53_arl_search_wait(struct b53_device *dev)
1771 b53_read8(dev, B53_ARLIO_PAGE, B53_ARL_SRCH_CTL, &reg);
1784 static void b53_arl_search_rd(struct b53_device *dev, u8 idx,
1790 b53_read64(dev, B53_ARLIO_PAGE,
1792 b53_read32(dev, B53_ARLIO_PAGE,
1884 dev_err(ds->dev, "failed to delete MDB entry\n");
1893 struct b53_device *dev = ds->priv;
1901 if (dev->chip_id == BCM7278_DEVICE_ID && port == 7)
1907 if (is58xx(dev)) {
1908 b53_read16(dev, B53_VLAN_PAGE, B53_JOIN_ALL_VLAN_EN, &reg);
1912 b53_write16(dev, B53_VLAN_PAGE, B53_JOIN_ALL_VLAN_EN, reg);
1915 b53_read16(dev, B53_PVLAN_PAGE, B53_PVLAN_PORT_MASK(port), &pvlan);
1917 b53_for_each_port(dev, i) {
1924 b53_read16(dev, B53_PVLAN_PAGE, B53_PVLAN_PORT_MASK(i), &reg);
1926 b53_write16(dev, B53_PVLAN_PAGE, B53_PVLAN_PORT_MASK(i), reg);
1927 dev->ports[i].vlan_ctl_mask = reg;
1935 b53_write16(dev, B53_PVLAN_PAGE, B53_PVLAN_PORT_MASK(port), pvlan);
1936 dev->ports[port].vlan_ctl_mask = pvlan;
1944 struct b53_device *dev = ds->priv;
1945 struct b53_vlan *vl = &dev->vlans[0];
1950 b53_read16(dev, B53_PVLAN_PAGE, B53_PVLAN_PORT_MASK(port), &pvlan);
1952 b53_for_each_port(dev, i) {
1957 b53_read16(dev, B53_PVLAN_PAGE, B53_PVLAN_PORT_MASK(i), &reg);
1959 b53_write16(dev, B53_PVLAN_PAGE, B53_PVLAN_PORT_MASK(i), reg);
1960 dev->ports[port].vlan_ctl_mask = reg;
1967 b53_write16(dev, B53_PVLAN_PAGE, B53_PVLAN_PORT_MASK(port), pvlan);
1968 dev->ports[port].vlan_ctl_mask = pvlan;
1970 pvid = b53_default_pvid(dev);
1973 if (is58xx(dev)) {
1974 b53_read16(dev, B53_VLAN_PAGE, B53_JOIN_ALL_VLAN_EN, &reg);
1978 b53_write16(dev, B53_VLAN_PAGE, B53_JOIN_ALL_VLAN_EN, reg);
1980 b53_get_vlan_entry(dev, pvid, vl);
1983 b53_set_vlan_entry(dev, pvid, vl);
1990 struct b53_device *dev = ds->priv;
2011 dev_err(ds->dev, "invalid STP state: %d\n", state);
2015 b53_read8(dev, B53_CTRL_PAGE, B53_PORT_CTRL(port), &reg);
2018 b53_write8(dev, B53_CTRL_PAGE, B53_PORT_CTRL(port), reg);
2024 struct b53_device *dev = ds->priv;
2026 if (b53_fast_age_port(dev, port))
2027 dev_err(ds->dev, "fast ageing failed\n");
2081 dev_warn(ds->dev, "Port %d is not Broadcom tag capable\n",
2089 dev_warn(ds->dev,
2104 struct b53_device *dev = ds->priv;
2107 dev->tag_protocol = DSA_TAG_PROTO_NONE;
2112 if (is5325(dev) || is5365(dev) || is63xx(dev)) {
2113 dev->tag_protocol = DSA_TAG_PROTO_BRCM_LEGACY;
2120 if (dev->chip_id == BCM58XX_DEVICE_ID && port == B53_CPU_PORT) {
2121 dev->tag_protocol = DSA_TAG_PROTO_BRCM_PREPEND;
2125 dev->tag_protocol = DSA_TAG_PROTO_BRCM;
2127 return dev->tag_protocol;
2135 struct b53_device *dev = ds->priv;
2143 b53_read16(dev, B53_MGMT_PAGE, loc, &reg);
2145 b53_write16(dev, B53_MGMT_PAGE, loc, reg);
2147 b53_read16(dev, B53_MGMT_PAGE, B53_MIR_CAP_CTL, &reg);
2151 b53_write16(dev, B53_MGMT_PAGE, B53_MIR_CAP_CTL, reg);
2160 struct b53_device *dev = ds->priv;
2170 b53_read16(dev, B53_MGMT_PAGE, loc, &reg);
2174 b53_write16(dev, B53_MGMT_PAGE, loc, reg);
2180 b53_read16(dev, B53_MGMT_PAGE, B53_EG_MIR_CTL, &reg);
2182 b53_read16(dev, B53_MGMT_PAGE, B53_IG_MIR_CTL, &reg);
2186 b53_read16(dev, B53_MGMT_PAGE, B53_MIR_CAP_CTL, &reg);
2192 b53_write16(dev, B53_MGMT_PAGE, B53_MIR_CAP_CTL, reg);
2198 struct b53_device *dev = ds->priv;
2201 b53_read16(dev, B53_EEE_PAGE, B53_EEE_EN_CTRL, &reg);
2206 b53_write16(dev, B53_EEE_PAGE, B53_EEE_EN_CTRL, reg);
2229 struct b53_device *dev = ds->priv;
2230 struct ethtool_eee *p = &dev->ports[port].eee;
2233 if (is5325(dev) || is5365(dev))
2236 b53_read16(dev, B53_EEE_PAGE, B53_EEE_LPI_INDICATE, &reg);
2246 struct b53_device *dev = ds->priv;
2247 struct ethtool_eee *p = &dev->ports[port].eee;
2249 if (is5325(dev) || is5365(dev))
2261 struct b53_device *dev = ds->priv;
2265 if (is5325(dev) || is5365(dev))
2269 allow_10_100 = (dev->chip_id == BCM583XX_DEVICE_ID);
2271 return b53_set_jumbo(dev, enable_jumbo, allow_10_100);
2626 static int b53_switch_init(struct b53_device *dev)
2634 if (chip->chip_id == dev->chip_id) {
2635 if (!dev->enabled_ports)
2636 dev->enabled_ports = chip->enabled_ports;
2637 dev->name = chip->dev_name;
2638 dev->duplex_reg = chip->duplex_reg;
2639 dev->vta_regs[0] = chip->vta_regs[0];
2640 dev->vta_regs[1] = chip->vta_regs[1];
2641 dev->vta_regs[2] = chip->vta_regs[2];
2642 dev->jumbo_pm_reg = chip->jumbo_pm_reg;
2643 dev->imp_port = chip->imp_port;
2644 dev->num_vlans = chip->vlans;
2645 dev->num_arl_bins = chip->arl_bins;
2646 dev->num_arl_buckets = chip->arl_buckets;
2652 if (is5325(dev)) {
2655 b53_read8(dev, B53_VLAN_PAGE, B53_VLAN_CTRL4_25, &vc4);
2664 dev->enabled_ports &= ~BIT(4);
2677 dev->num_ports = fls(dev->enabled_ports);
2679 dev->ds->num_ports = min_t(unsigned int, dev->num_ports, DSA_MAX_PORTS);
2682 if (is539x(dev) || is531x5(dev)) {
2683 for (i = 0; i < dev->num_ports; i++) {
2684 if (!(dev->ds->phys_mii_mask & BIT(i)) &&
2685 !b53_possible_cpu_port(dev->ds, i))
2686 dev->ds->phys_mii_mask |= BIT(i);
2690 dev->ports = devm_kcalloc(dev->dev,
2691 dev->num_ports, sizeof(struct b53_port),
2693 if (!dev->ports)
2696 dev->vlans = devm_kcalloc(dev->dev,
2697 dev->num_vlans, sizeof(struct b53_vlan),
2699 if (!dev->vlans)
2702 dev->reset_gpio = b53_switch_get_reset_gpio(dev);
2703 if (dev->reset_gpio >= 0) {
2704 ret = devm_gpio_request_one(dev->dev, dev->reset_gpio,
2718 struct b53_device *dev;
2724 ds->dev = base;
2726 dev = devm_kzalloc(base, sizeof(*dev), GFP_KERNEL);
2727 if (!dev)
2730 ds->priv = dev;
2731 dev->dev = base;
2733 dev->ds = ds;
2734 dev->priv = priv;
2735 dev->ops = ops;
2737 dev->vlan_enabled = true;
2745 mutex_init(&dev->reg_mutex);
2746 mutex_init(&dev->stats_mutex);
2747 mutex_init(&dev->arl_mutex);
2749 return dev;
2753 int b53_switch_detect(struct b53_device *dev)
2760 ret = b53_read8(dev, B53_MGMT_PAGE, B53_DEVICE_ID, &id8);
2773 b53_write16(dev, B53_VLAN_PAGE, B53_VLAN_TABLE_ACCESS_25, 0xf);
2774 b53_read16(dev, B53_VLAN_PAGE, B53_VLAN_TABLE_ACCESS_25, &tmp);
2777 dev->chip_id = BCM5325_DEVICE_ID;
2779 dev->chip_id = BCM5365_DEVICE_ID;
2785 dev->chip_id = id8;
2788 ret = b53_read32(dev, B53_MGMT_PAGE, B53_DEVICE_ID, &id32);
2802 dev->chip_id = id32;
2805 dev_err(dev->dev,
2812 if (dev->chip_id == BCM5325_DEVICE_ID)
2813 return b53_read8(dev, B53_STAT_PAGE, B53_REV_ID_25,
2814 &dev->core_rev);
2816 return b53_read8(dev, B53_MGMT_PAGE, B53_REV_ID,
2817 &dev->core_rev);
2821 int b53_switch_register(struct b53_device *dev)
2825 if (dev->pdata) {
2826 dev->chip_id = dev->pdata->chip_id;
2827 dev->enabled_ports = dev->pdata->enabled_ports;
2830 if (!dev->chip_id && b53_switch_detect(dev))
2833 ret = b53_switch_init(dev);
2837 dev_info(dev->dev, "found switch: %s, rev %i\n",
2838 dev->name, dev->core_rev);
2840 return dsa_register_switch(dev->ds);