Lines Matching defs:smi
23 #include "realtek-smi-core.h"
358 static int rtl8366rb_get_mib_counter(struct realtek_smi *smi,
374 ret = regmap_write(smi->map, addr, 0); /* Write whatever */
379 ret = regmap_read(smi->map, RTL8366RB_MIB_CTRL_REG, &val);
392 ret = regmap_read(smi->map, addr + (i - 1), &val);
417 struct realtek_smi *smi = irq_data_get_irq_chip_data(d);
420 ret = regmap_update_bits(smi->map, RTL8366RB_INTERRUPT_MASK_REG,
423 dev_err(smi->dev, "could not mask IRQ\n");
428 struct realtek_smi *smi = irq_data_get_irq_chip_data(d);
431 ret = regmap_update_bits(smi->map, RTL8366RB_INTERRUPT_MASK_REG,
435 dev_err(smi->dev, "could not unmask IRQ\n");
440 struct realtek_smi *smi = data;
445 ret = regmap_read(smi->map, RTL8366RB_INTERRUPT_STATUS_REG,
448 dev_err(smi->dev, "can't read interrupt status\n");
464 child_irq = irq_find_mapping(smi->irqdomain, line);
500 static int rtl8366rb_setup_cascaded_irq(struct realtek_smi *smi)
509 intc = of_get_child_by_name(smi->dev->of_node, "interrupt-controller");
511 dev_err(smi->dev, "missing child interrupt-controller node\n");
517 dev_err(smi->dev, "failed to get parent IRQ\n");
523 ret = regmap_read(smi->map, RTL8366RB_INTERRUPT_STATUS_REG,
526 dev_err(smi->dev, "can't read interrupt status\n");
535 dev_info(smi->dev, "active high/rising IRQ\n");
540 dev_info(smi->dev, "active low/falling IRQ\n");
544 ret = regmap_update_bits(smi->map, RTL8366RB_INTERRUPT_CONTROL_REG,
548 dev_err(smi->dev, "could not configure IRQ polarity\n");
552 ret = devm_request_threaded_irq(smi->dev, irq, NULL,
554 "RTL8366RB", smi);
556 dev_err(smi->dev, "unable to request irq: %d\n", ret);
559 smi->irqdomain = irq_domain_add_linear(intc,
562 smi);
563 if (!smi->irqdomain) {
564 dev_err(smi->dev, "failed to create IRQ domain\n");
568 for (i = 0; i < smi->num_ports; i++)
569 irq_set_parent(irq_create_mapping(smi->irqdomain, i), irq);
576 static int rtl8366rb_set_addr(struct realtek_smi *smi)
584 dev_info(smi->dev, "set MAC: %02X:%02X:%02X:%02X:%02X:%02X\n",
587 ret = regmap_write(smi->map, RTL8366RB_SMAR0, val);
591 ret = regmap_write(smi->map, RTL8366RB_SMAR1, val);
595 ret = regmap_write(smi->map, RTL8366RB_SMAR2, val);
721 struct realtek_smi *smi = ds->priv;
731 rb = smi->chip_data;
733 ret = regmap_read(smi->map, RTL8366RB_CHIP_ID_REG, &chip_id);
735 dev_err(smi->dev, "unable to read chip id\n");
743 dev_err(smi->dev, "unknown chip id (%04x)\n", chip_id);
747 ret = regmap_read(smi->map, RTL8366RB_CHIP_VERSION_CTRL_REG,
750 dev_err(smi->dev, "unable to read chip version\n");
754 dev_info(smi->dev, "RTL%04x ver %u chip found\n",
794 ret = regmap_read(smi->map,
800 ret = regmap_write(smi->map,
807 dev_dbg(smi->dev, "jam %04x into register %04x\n",
810 ret = regmap_write(smi->map,
821 ret = regmap_read(smi->map, RTL8366RB_PHY_ACCESS_BUSY_REG,
826 ret = regmap_write(smi->map,
831 ret = regmap_write(smi->map,
839 ret = regmap_write(smi->map,
846 ret = regmap_write(smi->map, 0x0c, 0x240);
849 ret = regmap_write(smi->map, 0x0d, 0x240);
854 ret = rtl8366rb_set_addr(smi);
863 ret = regmap_update_bits(smi->map, RTL8368RB_CPU_CTRL_REG,
865 BIT(smi->cpu_port));
870 ret = regmap_update_bits(smi->map, RTL8366RB_PECR,
871 BIT(smi->cpu_port),
877 ret = regmap_update_bits(smi->map, RTL8366RB_SGCR,
887 ret = regmap_write(smi->map, RTL8366RB_SSCR0, 0);
892 ret = regmap_write(smi->map, RTL8366RB_SSCR1, 0);
903 ret = regmap_update_bits(smi->map, RTL8366RB_PMC0,
912 ret = regmap_write(smi->map, RTL8366RB_VLAN_INGRESS_CTRL2_REG,
918 ret = regmap_update_bits(smi->map, RTL8366RB_SSCR2,
924 ret = regmap_update_bits(smi->map, RTL8366RB_LED_BLINKRATE_REG,
935 if (smi->leds_disabled) {
937 regmap_update_bits(smi->map,
940 regmap_update_bits(smi->map,
943 regmap_update_bits(smi->map,
953 ret = regmap_update_bits(smi->map,
961 ret = rtl8366_init_vlan(smi);
965 ret = rtl8366rb_setup_cascaded_irq(smi);
967 dev_info(smi->dev, "no interrupt support\n");
969 ret = realtek_smi_setup_mdio(smi);
971 dev_info(smi->dev, "could not set up MDIO bus\n");
991 struct realtek_smi *smi = ds->priv;
994 if (port != smi->cpu_port)
997 dev_dbg(smi->dev, "MAC link up on CPU port (%d)\n", port);
1000 ret = regmap_update_bits(smi->map, RTL8366RB_MAC_FORCE_CTRL_REG,
1003 dev_err(smi->dev, "failed to force 1Gbit on CPU port\n");
1007 ret = regmap_update_bits(smi->map, RTL8366RB_PAACR2,
1011 dev_err(smi->dev, "failed to set PAACR on CPU port\n");
1016 ret = regmap_update_bits(smi->map, RTL8366RB_PECR, BIT(port),
1019 dev_err(smi->dev, "failed to enable the CPU port\n");
1028 struct realtek_smi *smi = ds->priv;
1031 if (port != smi->cpu_port)
1034 dev_dbg(smi->dev, "MAC link down on CPU port (%d)\n", port);
1037 ret = regmap_update_bits(smi->map, RTL8366RB_PECR, BIT(port),
1040 dev_err(smi->dev, "failed to disable the CPU port\n");
1045 static void rb8366rb_set_port_led(struct realtek_smi *smi,
1051 if (smi->leds_disabled)
1056 ret = regmap_update_bits(smi->map,
1061 ret = regmap_update_bits(smi->map,
1067 ret = regmap_update_bits(smi->map,
1072 ret = regmap_update_bits(smi->map,
1078 ret = regmap_update_bits(smi->map,
1084 dev_err(smi->dev, "no LED for port %d\n", port);
1088 dev_err(smi->dev, "error updating LED on port %d\n", port);
1095 struct realtek_smi *smi = ds->priv;
1098 dev_dbg(smi->dev, "enable port %d\n", port);
1099 ret = regmap_update_bits(smi->map, RTL8366RB_PECR, BIT(port),
1104 rb8366rb_set_port_led(smi, port, true);
1111 struct realtek_smi *smi = ds->priv;
1114 dev_dbg(smi->dev, "disable port %d\n", port);
1115 ret = regmap_update_bits(smi->map, RTL8366RB_PECR, BIT(port),
1120 rb8366rb_set_port_led(smi, port, false);
1125 struct realtek_smi *smi = ds->priv;
1132 rb = smi->chip_data;
1160 return regmap_update_bits(smi->map, RTL8366RB_SGCR,
1173 static int rtl8366rb_get_vlan_4k(struct realtek_smi *smi, u32 vid,
1186 ret = regmap_write(smi->map, RTL8366RB_VLAN_TABLE_WRITE_BASE,
1192 ret = regmap_write(smi->map, RTL8366RB_TABLE_ACCESS_CTRL_REG,
1198 ret = regmap_read(smi->map,
1214 static int rtl8366rb_set_vlan_4k(struct realtek_smi *smi,
1234 ret = regmap_write(smi->map,
1242 ret = regmap_write(smi->map, RTL8366RB_TABLE_ACCESS_CTRL_REG,
1248 static int rtl8366rb_get_vlan_mc(struct realtek_smi *smi, u32 index,
1261 ret = regmap_read(smi->map,
1279 static int rtl8366rb_set_vlan_mc(struct realtek_smi *smi, u32 index,
1303 ret = regmap_write(smi->map,
1313 static int rtl8366rb_get_mc_index(struct realtek_smi *smi, int port, int *val)
1318 if (port >= smi->num_ports)
1321 ret = regmap_read(smi->map, RTL8366RB_PORT_VLAN_CTRL_REG(port),
1332 static int rtl8366rb_set_mc_index(struct realtek_smi *smi, int port, int index)
1334 if (port >= smi->num_ports || index >= RTL8366RB_NUM_VLANS)
1337 return regmap_update_bits(smi->map, RTL8366RB_PORT_VLAN_CTRL_REG(port),
1344 static bool rtl8366rb_is_vlan_valid(struct realtek_smi *smi, unsigned int vlan)
1348 if (smi->vlan4k_enabled)
1357 static int rtl8366rb_enable_vlan(struct realtek_smi *smi, bool enable)
1359 dev_dbg(smi->dev, "%s VLAN\n", enable ? "enable" : "disable");
1360 return regmap_update_bits(smi->map,
1365 static int rtl8366rb_enable_vlan4k(struct realtek_smi *smi, bool enable)
1367 dev_dbg(smi->dev, "%s VLAN 4k\n", enable ? "enable" : "disable");
1368 return regmap_update_bits(smi->map, RTL8366RB_SGCR,
1373 static int rtl8366rb_phy_read(struct realtek_smi *smi, int phy, int regnum)
1382 ret = regmap_write(smi->map, RTL8366RB_PHY_ACCESS_CTRL_REG,
1389 ret = regmap_write(smi->map, reg, 0);
1391 dev_err(smi->dev,
1397 ret = regmap_read(smi->map, RTL8366RB_PHY_ACCESS_DATA_REG, &val);
1401 dev_dbg(smi->dev, "read PHY%d register 0x%04x @ %08x, val <- %04x\n",
1407 static int rtl8366rb_phy_write(struct realtek_smi *smi, int phy, int regnum,
1416 ret = regmap_write(smi->map, RTL8366RB_PHY_ACCESS_CTRL_REG,
1423 dev_dbg(smi->dev, "write PHY%d register 0x%04x @ %04x, val -> %04x\n",
1426 ret = regmap_write(smi->map, reg, val);
1433 static int rtl8366rb_reset_chip(struct realtek_smi *smi)
1439 realtek_smi_write_reg_noack(smi, RTL8366RB_RESET_CTRL_REG,
1443 ret = regmap_read(smi->map, RTL8366RB_RESET_CTRL_REG, &val);
1452 dev_err(smi->dev, "timeout waiting for the switch to reset\n");
1459 static int rtl8366rb_detect(struct realtek_smi *smi)
1461 struct device *dev = smi->dev;
1466 ret = regmap_read(smi->map, 0x5c, &val);
1479 smi->cpu_port = RTL8366RB_PORT_NUM_CPU;
1480 smi->num_ports = RTL8366RB_NUM_PORTS;
1481 smi->num_vlan_mc = RTL8366RB_NUM_VLANS;
1482 smi->mib_counters = rtl8366rb_mib_counters;
1483 smi->num_mib_counters = ARRAY_SIZE(rtl8366rb_mib_counters);
1491 ret = rtl8366rb_reset_chip(smi);