• Home
  • Raw
  • Download

Lines Matching +full:rtl +full:- +full:intc

1 // SPDX-License-Identifier: GPL-2.0
9 * Copyright (C) 2009-2010 Gabor Juhos <juhosg@openwrt.org>
23 #include "realtek-smi-core.h"
315 * struct rtl8366rb - RTL8366RB-specific data
316 * @max_mtu: per-port max MTU setting
369 mib->offset; in rtl8366rb_get_mib_counter()
374 ret = regmap_write(smi->map, addr, 0); /* Write whatever */ in rtl8366rb_get_mib_counter()
379 ret = regmap_read(smi->map, RTL8366RB_MIB_CTRL_REG, &val); in rtl8366rb_get_mib_counter()
381 return -EIO; in rtl8366rb_get_mib_counter()
384 return -EBUSY; in rtl8366rb_get_mib_counter()
387 return -EIO; in rtl8366rb_get_mib_counter()
391 for (i = mib->length; i > 0; i--) { in rtl8366rb_get_mib_counter()
392 ret = regmap_read(smi->map, addr + (i - 1), &val); in rtl8366rb_get_mib_counter()
420 ret = regmap_update_bits(smi->map, RTL8366RB_INTERRUPT_MASK_REG, in rtl8366rb_mask_irq()
423 dev_err(smi->dev, "could not mask IRQ\n"); in rtl8366rb_mask_irq()
431 ret = regmap_update_bits(smi->map, RTL8366RB_INTERRUPT_MASK_REG, in rtl8366rb_unmask_irq()
435 dev_err(smi->dev, "could not unmask IRQ\n"); in rtl8366rb_unmask_irq()
445 ret = regmap_read(smi->map, RTL8366RB_INTERRUPT_STATUS_REG, in rtl8366rb_irq()
448 dev_err(smi->dev, "can't read interrupt status\n"); in rtl8366rb_irq()
463 line -= 5; in rtl8366rb_irq()
464 child_irq = irq_find_mapping(smi->irqdomain, line); in rtl8366rb_irq()
479 irq_set_chip_data(irq, domain->host_data); in rtl8366rb_irq_map()
502 struct device_node *intc; in rtl8366rb_setup_cascaded_irq() local
509 intc = of_get_child_by_name(smi->dev->of_node, "interrupt-controller"); in rtl8366rb_setup_cascaded_irq()
510 if (!intc) { in rtl8366rb_setup_cascaded_irq()
511 dev_err(smi->dev, "missing child interrupt-controller node\n"); in rtl8366rb_setup_cascaded_irq()
512 return -EINVAL; in rtl8366rb_setup_cascaded_irq()
515 irq = of_irq_get(intc, 0); in rtl8366rb_setup_cascaded_irq()
517 dev_err(smi->dev, "failed to get parent IRQ\n"); in rtl8366rb_setup_cascaded_irq()
518 ret = irq ? irq : -EINVAL; in rtl8366rb_setup_cascaded_irq()
523 ret = regmap_read(smi->map, RTL8366RB_INTERRUPT_STATUS_REG, in rtl8366rb_setup_cascaded_irq()
526 dev_err(smi->dev, "can't read interrupt status\n"); in rtl8366rb_setup_cascaded_irq()
535 dev_info(smi->dev, "active high/rising IRQ\n"); in rtl8366rb_setup_cascaded_irq()
540 dev_info(smi->dev, "active low/falling IRQ\n"); in rtl8366rb_setup_cascaded_irq()
544 ret = regmap_update_bits(smi->map, RTL8366RB_INTERRUPT_CONTROL_REG, in rtl8366rb_setup_cascaded_irq()
548 dev_err(smi->dev, "could not configure IRQ polarity\n"); in rtl8366rb_setup_cascaded_irq()
552 ret = devm_request_threaded_irq(smi->dev, irq, NULL, in rtl8366rb_setup_cascaded_irq()
556 dev_err(smi->dev, "unable to request irq: %d\n", ret); in rtl8366rb_setup_cascaded_irq()
559 smi->irqdomain = irq_domain_add_linear(intc, in rtl8366rb_setup_cascaded_irq()
563 if (!smi->irqdomain) { in rtl8366rb_setup_cascaded_irq()
564 dev_err(smi->dev, "failed to create IRQ domain\n"); in rtl8366rb_setup_cascaded_irq()
565 ret = -EINVAL; in rtl8366rb_setup_cascaded_irq()
568 for (i = 0; i < smi->num_ports; i++) in rtl8366rb_setup_cascaded_irq()
569 irq_set_parent(irq_create_mapping(smi->irqdomain, i), irq); in rtl8366rb_setup_cascaded_irq()
572 of_node_put(intc); in rtl8366rb_setup_cascaded_irq()
584 dev_info(smi->dev, "set MAC: %02X:%02X:%02X:%02X:%02X:%02X\n", in rtl8366rb_set_addr()
587 ret = regmap_write(smi->map, RTL8366RB_SMAR0, val); in rtl8366rb_set_addr()
591 ret = regmap_write(smi->map, RTL8366RB_SMAR1, val); in rtl8366rb_set_addr()
595 ret = regmap_write(smi->map, RTL8366RB_SMAR2, val); in rtl8366rb_set_addr()
637 /* This v1 init sequence is from Belkin F5D8235 U-Boot release */
652 /* This v2 init sequence is from Belkin F5D8235 U-Boot release */
688 /* Belkin F5D8235 v1, "belkin,f5d8235-v1" */
721 struct realtek_smi *smi = ds->priv; in rtl8366rb_setup()
731 rb = smi->chip_data; in rtl8366rb_setup()
733 ret = regmap_read(smi->map, RTL8366RB_CHIP_ID_REG, &chip_id); in rtl8366rb_setup()
735 dev_err(smi->dev, "unable to read chip id\n"); in rtl8366rb_setup()
743 dev_err(smi->dev, "unknown chip id (%04x)\n", chip_id); in rtl8366rb_setup()
744 return -ENODEV; in rtl8366rb_setup()
747 ret = regmap_read(smi->map, RTL8366RB_CHIP_VERSION_CTRL_REG, in rtl8366rb_setup()
750 dev_err(smi->dev, "unable to read chip version\n"); in rtl8366rb_setup()
754 dev_info(smi->dev, "RTL%04x ver %u chip found\n", in rtl8366rb_setup()
779 * without them, using just the off-the-shelf tables. in rtl8366rb_setup()
781 if (of_machine_is_compatible("belkin,f5d8235-v1")) { in rtl8366rb_setup()
794 ret = regmap_read(smi->map, in rtl8366rb_setup()
800 ret = regmap_write(smi->map, in rtl8366rb_setup()
807 dev_dbg(smi->dev, "jam %04x into register %04x\n", in rtl8366rb_setup()
810 ret = regmap_write(smi->map, in rtl8366rb_setup()
821 ret = regmap_read(smi->map, RTL8366RB_PHY_ACCESS_BUSY_REG, in rtl8366rb_setup()
826 ret = regmap_write(smi->map, in rtl8366rb_setup()
831 ret = regmap_write(smi->map, in rtl8366rb_setup()
839 ret = regmap_write(smi->map, in rtl8366rb_setup()
846 ret = regmap_write(smi->map, 0x0c, 0x240); in rtl8366rb_setup()
849 ret = regmap_write(smi->map, 0x0d, 0x240); in rtl8366rb_setup()
863 ret = regmap_update_bits(smi->map, RTL8368RB_CPU_CTRL_REG, in rtl8366rb_setup()
865 BIT(smi->cpu_port)); in rtl8366rb_setup()
869 /* Make sure we default-enable the fixed CPU port */ in rtl8366rb_setup()
870 ret = regmap_update_bits(smi->map, RTL8366RB_PECR, in rtl8366rb_setup()
871 BIT(smi->cpu_port), in rtl8366rb_setup()
877 ret = regmap_update_bits(smi->map, RTL8366RB_SGCR, in rtl8366rb_setup()
884 rb->max_mtu[i] = 1532; in rtl8366rb_setup()
887 ret = regmap_write(smi->map, RTL8366RB_SSCR0, 0); in rtl8366rb_setup()
892 ret = regmap_write(smi->map, RTL8366RB_SSCR1, 0); in rtl8366rb_setup()
903 ret = regmap_update_bits(smi->map, RTL8366RB_PMC0, in rtl8366rb_setup()
912 ret = regmap_write(smi->map, RTL8366RB_VLAN_INGRESS_CTRL2_REG, in rtl8366rb_setup()
918 ret = regmap_update_bits(smi->map, RTL8366RB_SSCR2, in rtl8366rb_setup()
924 ret = regmap_update_bits(smi->map, RTL8366RB_LED_BLINKRATE_REG, in rtl8366rb_setup()
935 if (smi->leds_disabled) { in rtl8366rb_setup()
937 regmap_update_bits(smi->map, in rtl8366rb_setup()
940 regmap_update_bits(smi->map, in rtl8366rb_setup()
943 regmap_update_bits(smi->map, in rtl8366rb_setup()
953 ret = regmap_update_bits(smi->map, in rtl8366rb_setup()
967 dev_info(smi->dev, "no interrupt support\n"); in rtl8366rb_setup()
971 dev_info(smi->dev, "could not set up MDIO bus\n"); in rtl8366rb_setup()
972 return -ENODEV; in rtl8366rb_setup()
991 struct realtek_smi *smi = ds->priv; in rtl8366rb_mac_link_up()
994 if (port != smi->cpu_port) in rtl8366rb_mac_link_up()
997 dev_dbg(smi->dev, "MAC link up on CPU port (%d)\n", port); in rtl8366rb_mac_link_up()
1000 ret = regmap_update_bits(smi->map, RTL8366RB_MAC_FORCE_CTRL_REG, in rtl8366rb_mac_link_up()
1003 dev_err(smi->dev, "failed to force 1Gbit on CPU port\n"); in rtl8366rb_mac_link_up()
1007 ret = regmap_update_bits(smi->map, RTL8366RB_PAACR2, in rtl8366rb_mac_link_up()
1011 dev_err(smi->dev, "failed to set PAACR on CPU port\n"); in rtl8366rb_mac_link_up()
1016 ret = regmap_update_bits(smi->map, RTL8366RB_PECR, BIT(port), in rtl8366rb_mac_link_up()
1019 dev_err(smi->dev, "failed to enable the CPU port\n"); in rtl8366rb_mac_link_up()
1028 struct realtek_smi *smi = ds->priv; in rtl8366rb_mac_link_down()
1031 if (port != smi->cpu_port) in rtl8366rb_mac_link_down()
1034 dev_dbg(smi->dev, "MAC link down on CPU port (%d)\n", port); in rtl8366rb_mac_link_down()
1037 ret = regmap_update_bits(smi->map, RTL8366RB_PECR, BIT(port), in rtl8366rb_mac_link_down()
1040 dev_err(smi->dev, "failed to disable the CPU port\n"); in rtl8366rb_mac_link_down()
1051 if (smi->leds_disabled) in rb8366rb_set_port_led()
1056 ret = regmap_update_bits(smi->map, in rb8366rb_set_port_led()
1061 ret = regmap_update_bits(smi->map, in rb8366rb_set_port_led()
1067 ret = regmap_update_bits(smi->map, in rb8366rb_set_port_led()
1072 ret = regmap_update_bits(smi->map, in rb8366rb_set_port_led()
1078 ret = regmap_update_bits(smi->map, in rb8366rb_set_port_led()
1084 dev_err(smi->dev, "no LED for port %d\n", port); in rb8366rb_set_port_led()
1088 dev_err(smi->dev, "error updating LED on port %d\n", port); in rb8366rb_set_port_led()
1095 struct realtek_smi *smi = ds->priv; in rtl8366rb_port_enable()
1098 dev_dbg(smi->dev, "enable port %d\n", port); in rtl8366rb_port_enable()
1099 ret = regmap_update_bits(smi->map, RTL8366RB_PECR, BIT(port), in rtl8366rb_port_enable()
1111 struct realtek_smi *smi = ds->priv; in rtl8366rb_port_disable()
1114 dev_dbg(smi->dev, "disable port %d\n", port); in rtl8366rb_port_disable()
1115 ret = regmap_update_bits(smi->map, RTL8366RB_PECR, BIT(port), in rtl8366rb_port_disable()
1125 struct realtek_smi *smi = ds->priv; in rtl8366rb_change_mtu()
1131 /* Cache the per-port MTU setting */ in rtl8366rb_change_mtu()
1132 rb = smi->chip_data; in rtl8366rb_change_mtu()
1133 rb->max_mtu[port] = new_mtu; in rtl8366rb_change_mtu()
1148 if (rb->max_mtu[i] > max_mtu) in rtl8366rb_change_mtu()
1149 max_mtu = rb->max_mtu[i]; in rtl8366rb_change_mtu()
1160 return regmap_update_bits(smi->map, RTL8366RB_SGCR, in rtl8366rb_change_mtu()
1183 return -EINVAL; in rtl8366rb_get_vlan_4k()
1186 ret = regmap_write(smi->map, RTL8366RB_VLAN_TABLE_WRITE_BASE, in rtl8366rb_get_vlan_4k()
1192 ret = regmap_write(smi->map, RTL8366RB_TABLE_ACCESS_CTRL_REG, in rtl8366rb_get_vlan_4k()
1198 ret = regmap_read(smi->map, in rtl8366rb_get_vlan_4k()
1205 vlan4k->vid = vid; in rtl8366rb_get_vlan_4k()
1206 vlan4k->untag = (data[1] >> RTL8366RB_VLAN_UNTAG_SHIFT) & in rtl8366rb_get_vlan_4k()
1208 vlan4k->member = data[1] & RTL8366RB_VLAN_MEMBER_MASK; in rtl8366rb_get_vlan_4k()
1209 vlan4k->fid = data[2] & RTL8366RB_VLAN_FID_MASK; in rtl8366rb_get_vlan_4k()
1221 if (vlan4k->vid >= RTL8366RB_NUM_VIDS || in rtl8366rb_set_vlan_4k()
1222 vlan4k->member > RTL8366RB_VLAN_MEMBER_MASK || in rtl8366rb_set_vlan_4k()
1223 vlan4k->untag > RTL8366RB_VLAN_UNTAG_MASK || in rtl8366rb_set_vlan_4k()
1224 vlan4k->fid > RTL8366RB_FIDMAX) in rtl8366rb_set_vlan_4k()
1225 return -EINVAL; in rtl8366rb_set_vlan_4k()
1227 data[0] = vlan4k->vid & RTL8366RB_VLAN_VID_MASK; in rtl8366rb_set_vlan_4k()
1228 data[1] = (vlan4k->member & RTL8366RB_VLAN_MEMBER_MASK) | in rtl8366rb_set_vlan_4k()
1229 ((vlan4k->untag & RTL8366RB_VLAN_UNTAG_MASK) << in rtl8366rb_set_vlan_4k()
1231 data[2] = vlan4k->fid & RTL8366RB_VLAN_FID_MASK; in rtl8366rb_set_vlan_4k()
1234 ret = regmap_write(smi->map, in rtl8366rb_set_vlan_4k()
1242 ret = regmap_write(smi->map, RTL8366RB_TABLE_ACCESS_CTRL_REG, in rtl8366rb_set_vlan_4k()
1258 return -EINVAL; in rtl8366rb_get_vlan_mc()
1261 ret = regmap_read(smi->map, in rtl8366rb_get_vlan_mc()
1268 vlanmc->vid = data[0] & RTL8366RB_VLAN_VID_MASK; in rtl8366rb_get_vlan_mc()
1269 vlanmc->priority = (data[0] >> RTL8366RB_VLAN_PRIORITY_SHIFT) & in rtl8366rb_get_vlan_mc()
1271 vlanmc->untag = (data[1] >> RTL8366RB_VLAN_UNTAG_SHIFT) & in rtl8366rb_get_vlan_mc()
1273 vlanmc->member = data[1] & RTL8366RB_VLAN_MEMBER_MASK; in rtl8366rb_get_vlan_mc()
1274 vlanmc->fid = data[2] & RTL8366RB_VLAN_FID_MASK; in rtl8366rb_get_vlan_mc()
1287 vlanmc->vid >= RTL8366RB_NUM_VIDS || in rtl8366rb_set_vlan_mc()
1288 vlanmc->priority > RTL8366RB_PRIORITYMAX || in rtl8366rb_set_vlan_mc()
1289 vlanmc->member > RTL8366RB_VLAN_MEMBER_MASK || in rtl8366rb_set_vlan_mc()
1290 vlanmc->untag > RTL8366RB_VLAN_UNTAG_MASK || in rtl8366rb_set_vlan_mc()
1291 vlanmc->fid > RTL8366RB_FIDMAX) in rtl8366rb_set_vlan_mc()
1292 return -EINVAL; in rtl8366rb_set_vlan_mc()
1294 data[0] = (vlanmc->vid & RTL8366RB_VLAN_VID_MASK) | in rtl8366rb_set_vlan_mc()
1295 ((vlanmc->priority & RTL8366RB_VLAN_PRIORITY_MASK) << in rtl8366rb_set_vlan_mc()
1297 data[1] = (vlanmc->member & RTL8366RB_VLAN_MEMBER_MASK) | in rtl8366rb_set_vlan_mc()
1298 ((vlanmc->untag & RTL8366RB_VLAN_UNTAG_MASK) << in rtl8366rb_set_vlan_mc()
1300 data[2] = vlanmc->fid & RTL8366RB_VLAN_FID_MASK; in rtl8366rb_set_vlan_mc()
1303 ret = regmap_write(smi->map, in rtl8366rb_set_vlan_mc()
1318 if (port >= smi->num_ports) in rtl8366rb_get_mc_index()
1319 return -EINVAL; in rtl8366rb_get_mc_index()
1321 ret = regmap_read(smi->map, RTL8366RB_PORT_VLAN_CTRL_REG(port), in rtl8366rb_get_mc_index()
1334 if (port >= smi->num_ports || index >= RTL8366RB_NUM_VLANS) in rtl8366rb_set_mc_index()
1335 return -EINVAL; in rtl8366rb_set_mc_index()
1337 return regmap_update_bits(smi->map, RTL8366RB_PORT_VLAN_CTRL_REG(port), in rtl8366rb_set_mc_index()
1346 unsigned int max = RTL8366RB_NUM_VLANS - 1; in rtl8366rb_is_vlan_valid()
1348 if (smi->vlan4k_enabled) in rtl8366rb_is_vlan_valid()
1349 max = RTL8366RB_NUM_VIDS - 1; in rtl8366rb_is_vlan_valid()
1359 dev_dbg(smi->dev, "%s VLAN\n", enable ? "enable" : "disable"); in rtl8366rb_enable_vlan()
1360 return regmap_update_bits(smi->map, in rtl8366rb_enable_vlan()
1367 dev_dbg(smi->dev, "%s VLAN 4k\n", enable ? "enable" : "disable"); in rtl8366rb_enable_vlan4k()
1368 return regmap_update_bits(smi->map, RTL8366RB_SGCR, in rtl8366rb_enable_vlan4k()
1380 return -EINVAL; in rtl8366rb_phy_read()
1382 ret = regmap_write(smi->map, RTL8366RB_PHY_ACCESS_CTRL_REG, in rtl8366rb_phy_read()
1389 ret = regmap_write(smi->map, reg, 0); in rtl8366rb_phy_read()
1391 dev_err(smi->dev, in rtl8366rb_phy_read()
1397 ret = regmap_read(smi->map, RTL8366RB_PHY_ACCESS_DATA_REG, &val); in rtl8366rb_phy_read()
1401 dev_dbg(smi->dev, "read PHY%d register 0x%04x @ %08x, val <- %04x\n", in rtl8366rb_phy_read()
1414 return -EINVAL; in rtl8366rb_phy_write()
1416 ret = regmap_write(smi->map, RTL8366RB_PHY_ACCESS_CTRL_REG, in rtl8366rb_phy_write()
1423 dev_dbg(smi->dev, "write PHY%d register 0x%04x @ %04x, val -> %04x\n", in rtl8366rb_phy_write()
1426 ret = regmap_write(smi->map, reg, val); in rtl8366rb_phy_write()
1443 ret = regmap_read(smi->map, RTL8366RB_RESET_CTRL_REG, &val); in rtl8366rb_reset_chip()
1449 } while (--timeout); in rtl8366rb_reset_chip()
1452 dev_err(smi->dev, "timeout waiting for the switch to reset\n"); in rtl8366rb_reset_chip()
1453 return -EIO; in rtl8366rb_reset_chip()
1461 struct device *dev = smi->dev; in rtl8366rb_detect()
1466 ret = regmap_read(smi->map, 0x5c, &val); in rtl8366rb_detect()
1476 return -ENODEV; in rtl8366rb_detect()
1479 smi->cpu_port = RTL8366RB_PORT_NUM_CPU; in rtl8366rb_detect()
1480 smi->num_ports = RTL8366RB_NUM_PORTS; in rtl8366rb_detect()
1481 smi->num_vlan_mc = RTL8366RB_NUM_VLANS; in rtl8366rb_detect()
1482 smi->mib_counters = rtl8366rb_mib_counters; in rtl8366rb_detect()
1483 smi->num_mib_counters = ARRAY_SIZE(rtl8366rb_mib_counters); in rtl8366rb_detect()