• Home
  • Raw
  • Download

Lines Matching refs:vsc

376 static int vsc73xx_read(struct vsc73xx *vsc, u8 block, u8 subblock, u8 reg,  in vsc73xx_read()  argument
379 return vsc->ops->read(vsc, block, subblock, reg, val); in vsc73xx_read()
382 static int vsc73xx_write(struct vsc73xx *vsc, u8 block, u8 subblock, u8 reg, in vsc73xx_write() argument
385 return vsc->ops->write(vsc, block, subblock, reg, val); in vsc73xx_write()
388 static int vsc73xx_update_bits(struct vsc73xx *vsc, u8 block, u8 subblock, in vsc73xx_update_bits() argument
395 ret = vsc73xx_read(vsc, block, subblock, reg, &orig); in vsc73xx_update_bits()
400 return vsc73xx_write(vsc, block, subblock, reg, tmp); in vsc73xx_update_bits()
403 static int vsc73xx_detect(struct vsc73xx *vsc) in vsc73xx_detect() argument
412 ret = vsc73xx_read(vsc, VSC73XX_BLOCK_SYSTEM, 0, in vsc73xx_detect()
415 dev_err(vsc->dev, "unable to read mailbox (%d)\n", ret); in vsc73xx_detect()
420 dev_info(vsc->dev, "chip seems dead.\n"); in vsc73xx_detect()
424 ret = vsc73xx_read(vsc, VSC73XX_BLOCK_SYSTEM, 0, in vsc73xx_detect()
427 dev_err(vsc->dev, "unable to read chip id (%d)\n", ret); in vsc73xx_detect()
440 dev_err(vsc->dev, "unsupported chip, id=%04x\n", id); in vsc73xx_detect()
444 vsc->chipid = id; in vsc73xx_detect()
447 dev_info(vsc->dev, "VSC%04X (rev: %d) switch found\n", id, rev); in vsc73xx_detect()
449 ret = vsc73xx_read(vsc, VSC73XX_BLOCK_SYSTEM, 0, in vsc73xx_detect()
452 dev_err(vsc->dev, "unable to read iCPU control\n"); in vsc73xx_detect()
465 dev_err(vsc->dev, in vsc73xx_detect()
467 dev_err(vsc->dev, "no idea how to deal with this\n"); in vsc73xx_detect()
471 dev_err(vsc->dev, in vsc73xx_detect()
476 dev_err(vsc->dev, in vsc73xx_detect()
478 dev_err(vsc->dev, "no idea how to deal with this\n"); in vsc73xx_detect()
482 dev_info(vsc->dev, "iCPU disabled, no external memory\n"); in vsc73xx_detect()
489 struct vsc73xx *vsc = ds->priv; in vsc73xx_phy_read() local
496 ret = vsc73xx_write(vsc, VSC73XX_BLOCK_MII, 0, 1, cmd); in vsc73xx_phy_read()
500 ret = vsc73xx_read(vsc, VSC73XX_BLOCK_MII, 0, 2, &val); in vsc73xx_phy_read()
504 dev_err(vsc->dev, "reading reg %02x from phy%d failed\n", in vsc73xx_phy_read()
510 dev_dbg(vsc->dev, "read reg %02x from phy%d = %04x\n", in vsc73xx_phy_read()
519 struct vsc73xx *vsc = ds->priv; in vsc73xx_phy_write() local
530 dev_info(vsc->dev, "reset PHY - disallowed\n"); in vsc73xx_phy_write()
535 ret = vsc73xx_write(vsc, VSC73XX_BLOCK_MII, 0, 1, cmd); in vsc73xx_phy_write()
539 dev_dbg(vsc->dev, "write %04x to reg %02x in phy%d\n", in vsc73xx_phy_write()
562 struct vsc73xx *vsc = ds->priv; in vsc73xx_setup() local
565 dev_info(vsc->dev, "set up the switch\n"); in vsc73xx_setup()
568 vsc73xx_write(vsc, VSC73XX_BLOCK_SYSTEM, 0, VSC73XX_GLORESET, in vsc73xx_setup()
581 vsc73xx_write(vsc, VSC73XX_BLOCK_MEMINIT, in vsc73xx_setup()
590 vsc73xx_write(vsc, VSC73XX_BLOCK_ANALYZER, 0, in vsc73xx_setup()
595 vsc73xx_write(vsc, VSC73XX_BLOCK_ANALYZER, 0, in vsc73xx_setup()
606 if (IS_739X(vsc)) in vsc73xx_setup()
607 vsc73xx_write(vsc, VSC73XX_BLOCK_MAC, 0x1f, in vsc73xx_setup()
615 vsc73xx_write(vsc, VSC73XX_BLOCK_MAC, 4, in vsc73xx_setup()
620 vsc73xx_write(vsc, VSC73XX_BLOCK_SYSTEM, 0, VSC73XX_GMIIDELAY, in vsc73xx_setup()
624 vsc73xx_write(vsc, VSC73XX_BLOCK_ANALYZER, 0, VSC73XX_RECVMASK, in vsc73xx_setup()
627 vsc73xx_write(vsc, VSC73XX_BLOCK_ANALYZER, 0, VSC73XX_IFLODMSK, in vsc73xx_setup()
633 vsc73xx_write(vsc, VSC73XX_BLOCK_SYSTEM, 0, VSC73XX_GLORESET, in vsc73xx_setup()
641 static void vsc73xx_init_port(struct vsc73xx *vsc, int port) in vsc73xx_init_port() argument
646 vsc73xx_write(vsc, VSC73XX_BLOCK_MAC, in vsc73xx_init_port()
660 vsc73xx_write(vsc, VSC73XX_BLOCK_MAC, in vsc73xx_init_port()
671 vsc73xx_write(vsc, VSC73XX_BLOCK_MAC, in vsc73xx_init_port()
687 vsc73xx_write(vsc, VSC73XX_BLOCK_MAC, in vsc73xx_init_port()
693 val = (vsc->addr[5] << 16) | (vsc->addr[4] << 8) | (vsc->addr[3]); in vsc73xx_init_port()
694 vsc73xx_write(vsc, VSC73XX_BLOCK_MAC, in vsc73xx_init_port()
698 val = (vsc->addr[2] << 16) | (vsc->addr[1] << 8) | (vsc->addr[0]); in vsc73xx_init_port()
699 vsc73xx_write(vsc, VSC73XX_BLOCK_MAC, in vsc73xx_init_port()
707 vsc73xx_write(vsc, VSC73XX_BLOCK_MAC, in vsc73xx_init_port()
713 vsc73xx_write(vsc, VSC73XX_BLOCK_MAC, in vsc73xx_init_port()
717 static void vsc73xx_adjust_enable_port(struct vsc73xx *vsc, in vsc73xx_adjust_enable_port() argument
726 vsc73xx_write(vsc, VSC73XX_BLOCK_MAC, port, VSC73XX_MAC_CFG, val); in vsc73xx_adjust_enable_port()
733 vsc73xx_write(vsc, VSC73XX_BLOCK_MAC, port, VSC73XX_MAC_CFG, val); in vsc73xx_adjust_enable_port()
740 vsc73xx_write(vsc, VSC73XX_BLOCK_MAC, port, VSC73XX_FCCONF, in vsc73xx_adjust_enable_port()
746 vsc73xx_update_bits(vsc, VSC73XX_BLOCK_ARBITER, 0, in vsc73xx_adjust_enable_port()
750 vsc73xx_update_bits(vsc, VSC73XX_BLOCK_MAC, port, in vsc73xx_adjust_enable_port()
760 struct vsc73xx *vsc = ds->priv; in vsc73xx_adjust_link() local
766 vsc73xx_init_port(vsc, CPU_PORT); in vsc73xx_adjust_link()
771 vsc73xx_write(vsc, VSC73XX_BLOCK_MAC, in vsc73xx_adjust_link()
785 dev_dbg(vsc->dev, "port %d: went down\n", in vsc73xx_adjust_link()
789 vsc73xx_update_bits(vsc, VSC73XX_BLOCK_MAC, port, in vsc73xx_adjust_link()
794 vsc73xx_update_bits(vsc, VSC73XX_BLOCK_ARBITER, 0, in vsc73xx_adjust_link()
798 vsc73xx_read(vsc, VSC73XX_BLOCK_ARBITER, 0, in vsc73xx_adjust_link()
802 vsc73xx_read(vsc, VSC73XX_BLOCK_ARBITER, 0, in vsc73xx_adjust_link()
805 dev_err(vsc->dev, in vsc73xx_adjust_link()
813 vsc73xx_write(vsc, VSC73XX_BLOCK_MAC, port, VSC73XX_MAC_CFG, in vsc73xx_adjust_link()
817 vsc73xx_update_bits(vsc, VSC73XX_BLOCK_ARBITER, 0, in vsc73xx_adjust_link()
821 vsc73xx_update_bits(vsc, VSC73XX_BLOCK_ARBITER, 0, in vsc73xx_adjust_link()
825 vsc73xx_update_bits(vsc, VSC73XX_BLOCK_ANALYZER, 0, in vsc73xx_adjust_link()
833 dev_dbg(vsc->dev, "port %d: 1000 Mbit mode full duplex\n", in vsc73xx_adjust_link()
841 vsc73xx_adjust_enable_port(vsc, port, phydev, val); in vsc73xx_adjust_link()
845 dev_dbg(vsc->dev, in vsc73xx_adjust_link()
850 dev_dbg(vsc->dev, in vsc73xx_adjust_link()
854 vsc73xx_adjust_enable_port(vsc, port, phydev, val); in vsc73xx_adjust_link()
858 dev_dbg(vsc->dev, in vsc73xx_adjust_link()
863 dev_dbg(vsc->dev, in vsc73xx_adjust_link()
867 vsc73xx_adjust_enable_port(vsc, port, phydev, val); in vsc73xx_adjust_link()
869 dev_err(vsc->dev, in vsc73xx_adjust_link()
874 vsc73xx_update_bits(vsc, VSC73XX_BLOCK_ANALYZER, 0, in vsc73xx_adjust_link()
881 struct vsc73xx *vsc = ds->priv; in vsc73xx_port_enable() local
883 dev_info(vsc->dev, "enable port %d\n", port); in vsc73xx_port_enable()
884 vsc73xx_init_port(vsc, port); in vsc73xx_port_enable()
891 struct vsc73xx *vsc = ds->priv; in vsc73xx_port_disable() local
894 vsc73xx_write(vsc, VSC73XX_BLOCK_MAC, port, in vsc73xx_port_disable()
899 vsc73xx_find_counter(struct vsc73xx *vsc, in vsc73xx_find_counter() argument
930 struct vsc73xx *vsc = ds->priv; in vsc73xx_get_strings() local
939 ret = vsc73xx_read(vsc, VSC73XX_BLOCK_MAC, port, in vsc73xx_get_strings()
964 cnt = vsc73xx_find_counter(vsc, indices[i], false); in vsc73xx_get_strings()
977 cnt = vsc73xx_find_counter(vsc, indices[i], true); in vsc73xx_get_strings()
997 struct vsc73xx *vsc = ds->priv; in vsc73xx_get_ethtool_stats() local
1013 ret = vsc73xx_read(vsc, VSC73XX_BLOCK_MAC, port, in vsc73xx_get_ethtool_stats()
1016 dev_err(vsc->dev, "error reading counter %d\n", i); in vsc73xx_get_ethtool_stats()
1025 struct vsc73xx *vsc = ds->priv; in vsc73xx_change_mtu() local
1027 return vsc73xx_write(vsc, VSC73XX_BLOCK_MAC, port, in vsc73xx_change_mtu()
1058 struct vsc73xx *vsc = gpiochip_get_data(chip); in vsc73xx_gpio_get() local
1062 ret = vsc73xx_read(vsc, VSC73XX_BLOCK_SYSTEM, 0, in vsc73xx_gpio_get()
1073 struct vsc73xx *vsc = gpiochip_get_data(chip); in vsc73xx_gpio_set() local
1076 vsc73xx_update_bits(vsc, VSC73XX_BLOCK_SYSTEM, 0, in vsc73xx_gpio_set()
1083 struct vsc73xx *vsc = gpiochip_get_data(chip); in vsc73xx_gpio_direction_output() local
1086 return vsc73xx_update_bits(vsc, VSC73XX_BLOCK_SYSTEM, 0, in vsc73xx_gpio_direction_output()
1094 struct vsc73xx *vsc = gpiochip_get_data(chip); in vsc73xx_gpio_direction_input() local
1096 return vsc73xx_update_bits(vsc, VSC73XX_BLOCK_SYSTEM, 0, in vsc73xx_gpio_direction_input()
1104 struct vsc73xx *vsc = gpiochip_get_data(chip); in vsc73xx_gpio_get_direction() local
1108 ret = vsc73xx_read(vsc, VSC73XX_BLOCK_SYSTEM, 0, in vsc73xx_gpio_get_direction()
1116 static int vsc73xx_gpio_probe(struct vsc73xx *vsc) in vsc73xx_gpio_probe() argument
1120 vsc->gc.label = devm_kasprintf(vsc->dev, GFP_KERNEL, "VSC%04x", in vsc73xx_gpio_probe()
1121 vsc->chipid); in vsc73xx_gpio_probe()
1122 if (!vsc->gc.label) in vsc73xx_gpio_probe()
1124 vsc->gc.ngpio = 4; in vsc73xx_gpio_probe()
1125 vsc->gc.owner = THIS_MODULE; in vsc73xx_gpio_probe()
1126 vsc->gc.parent = vsc->dev; in vsc73xx_gpio_probe()
1128 vsc->gc.of_node = vsc->dev->of_node; in vsc73xx_gpio_probe()
1130 vsc->gc.base = -1; in vsc73xx_gpio_probe()
1131 vsc->gc.get = vsc73xx_gpio_get; in vsc73xx_gpio_probe()
1132 vsc->gc.set = vsc73xx_gpio_set; in vsc73xx_gpio_probe()
1133 vsc->gc.direction_input = vsc73xx_gpio_direction_input; in vsc73xx_gpio_probe()
1134 vsc->gc.direction_output = vsc73xx_gpio_direction_output; in vsc73xx_gpio_probe()
1135 vsc->gc.get_direction = vsc73xx_gpio_get_direction; in vsc73xx_gpio_probe()
1136 vsc->gc.can_sleep = true; in vsc73xx_gpio_probe()
1137 ret = devm_gpiochip_add_data(vsc->dev, &vsc->gc, vsc); in vsc73xx_gpio_probe()
1139 dev_err(vsc->dev, "unable to register GPIO chip\n"); in vsc73xx_gpio_probe()
1145 int vsc73xx_probe(struct vsc73xx *vsc) in vsc73xx_probe() argument
1147 struct device *dev = vsc->dev; in vsc73xx_probe()
1151 vsc->reset = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_LOW); in vsc73xx_probe()
1152 if (IS_ERR(vsc->reset)) { in vsc73xx_probe()
1154 return PTR_ERR(vsc->reset); in vsc73xx_probe()
1156 if (vsc->reset) in vsc73xx_probe()
1160 ret = vsc73xx_detect(vsc); in vsc73xx_probe()
1162 dev_err(vsc->dev, in vsc73xx_probe()
1164 gpiod_set_value_cansleep(vsc->reset, 1); in vsc73xx_probe()
1169 gpiod_set_value_cansleep(vsc->reset, 0); in vsc73xx_probe()
1172 ret = vsc73xx_detect(vsc); in vsc73xx_probe()
1179 eth_random_addr(vsc->addr); in vsc73xx_probe()
1180 dev_info(vsc->dev, in vsc73xx_probe()
1182 vsc->addr[0], vsc->addr[1], vsc->addr[2], in vsc73xx_probe()
1183 vsc->addr[3], vsc->addr[4], vsc->addr[5]); in vsc73xx_probe()
1196 vsc->ds = devm_kzalloc(dev, sizeof(*vsc->ds), GFP_KERNEL); in vsc73xx_probe()
1197 if (!vsc->ds) in vsc73xx_probe()
1200 vsc->ds->dev = dev; in vsc73xx_probe()
1201 vsc->ds->num_ports = 8; in vsc73xx_probe()
1202 vsc->ds->priv = vsc; in vsc73xx_probe()
1204 vsc->ds->ops = &vsc73xx_ds_ops; in vsc73xx_probe()
1205 ret = dsa_register_switch(vsc->ds); in vsc73xx_probe()
1211 ret = vsc73xx_gpio_probe(vsc); in vsc73xx_probe()
1213 dsa_unregister_switch(vsc->ds); in vsc73xx_probe()
1221 int vsc73xx_remove(struct vsc73xx *vsc) in vsc73xx_remove() argument
1223 dsa_unregister_switch(vsc->ds); in vsc73xx_remove()
1224 gpiod_set_value(vsc->reset, 1); in vsc73xx_remove()
1230 void vsc73xx_shutdown(struct vsc73xx *vsc) in vsc73xx_shutdown() argument
1232 dsa_switch_shutdown(vsc->ds); in vsc73xx_shutdown()