Lines Matching refs:bus
75 if (mdiodev->bus->mdio_map[mdiodev->addr]) in mdiobus_register_device()
91 mdiodev->bus->mdio_map[mdiodev->addr] = mdiodev; in mdiobus_register_device()
99 if (mdiodev->bus->mdio_map[mdiodev->addr] != mdiodev) in mdiobus_unregister_device()
104 mdiodev->bus->mdio_map[mdiodev->addr] = NULL; in mdiobus_unregister_device()
110 struct phy_device *mdiobus_get_phy(struct mii_bus *bus, int addr) in mdiobus_get_phy() argument
112 bool addr_valid = addr >= 0 && addr < ARRAY_SIZE(bus->mdio_map); in mdiobus_get_phy()
118 mdiodev = bus->mdio_map[addr]; in mdiobus_get_phy()
130 bool mdiobus_is_registered_device(struct mii_bus *bus, int addr) in mdiobus_is_registered_device() argument
132 return bus->mdio_map[addr]; in mdiobus_is_registered_device()
146 struct mii_bus *bus; in mdiobus_alloc_size() local
147 size_t aligned_size = ALIGN(sizeof(*bus), NETDEV_ALIGN); in mdiobus_alloc_size()
155 alloc_size = sizeof(*bus); in mdiobus_alloc_size()
157 bus = kzalloc(alloc_size, GFP_KERNEL); in mdiobus_alloc_size()
158 if (!bus) in mdiobus_alloc_size()
161 bus->state = MDIOBUS_ALLOCATED; in mdiobus_alloc_size()
163 bus->priv = (void *)bus + aligned_size; in mdiobus_alloc_size()
167 bus->irq[i] = PHY_POLL; in mdiobus_alloc_size()
168 u64_stats_init(&bus->stats[i].syncp); in mdiobus_alloc_size()
171 return bus; in mdiobus_alloc_size()
184 struct mii_bus *bus = to_mii_bus(d); in mdiobus_release() local
186 WARN(bus->state != MDIOBUS_RELEASED && in mdiobus_release()
188 bus->state != MDIOBUS_ALLOCATED, in mdiobus_release()
190 bus->id); in mdiobus_release()
191 kfree(bus); in mdiobus_release()
213 static u64 mdio_bus_get_global_stat(struct mii_bus *bus, unsigned int offset) in mdio_bus_get_global_stat() argument
219 val += mdio_bus_get_stat(&bus->stats[i], offset); in mdio_bus_get_global_stat()
228 struct mii_bus *bus = to_mii_bus(dev); in mdio_bus_stat_field_show() local
237 val = mdio_bus_get_global_stat(bus, sattr->field_offset); in mdio_bus_stat_field_show()
239 val = mdio_bus_get_stat(&bus->stats[sattr->addr], in mdio_bus_stat_field_show()
250 struct mii_bus *bus = mdiodev->bus; in mdio_bus_device_stat_field_show() local
259 val = mdio_bus_get_stat(&bus->stats[addr], sattr->field_offset); in mdio_bus_device_stat_field_show()
454 static void of_mdiobus_link_mdiodev(struct mii_bus *bus, in of_mdiobus_link_mdiodev() argument
460 if (dev->of_node || !bus->dev.of_node) in of_mdiobus_link_mdiodev()
463 for_each_available_child_of_node(bus->dev.of_node, child) { in of_mdiobus_link_mdiodev()
494 static int mdiobus_create_device(struct mii_bus *bus, in mdiobus_create_device() argument
500 mdiodev = mdio_device_create(bus, bi->mdio_addr); in mdiobus_create_device()
516 static struct phy_device *mdiobus_scan(struct mii_bus *bus, int addr, bool c45) in mdiobus_scan() argument
521 phydev = get_phy_device(bus, addr, c45); in mdiobus_scan()
528 of_mdiobus_link_mdiodev(bus, &phydev->mdio); in mdiobus_scan()
551 struct phy_device *mdiobus_scan_c22(struct mii_bus *bus, int addr) in mdiobus_scan_c22() argument
553 return mdiobus_scan(bus, addr, false); in mdiobus_scan_c22()
569 static struct phy_device *mdiobus_scan_c45(struct mii_bus *bus, int addr) in mdiobus_scan_c45() argument
571 return mdiobus_scan(bus, addr, true); in mdiobus_scan_c45()
574 static int mdiobus_scan_bus_c22(struct mii_bus *bus) in mdiobus_scan_bus_c22() argument
579 if ((bus->phy_mask & BIT(i)) == 0) { in mdiobus_scan_bus_c22()
582 phydev = mdiobus_scan_c22(bus, i); in mdiobus_scan_bus_c22()
590 static int mdiobus_scan_bus_c45(struct mii_bus *bus) in mdiobus_scan_bus_c45() argument
595 if ((bus->phy_mask & BIT(i)) == 0) { in mdiobus_scan_bus_c45()
599 if (bus->mdio_map[i]) in mdiobus_scan_bus_c45()
602 phydev = mdiobus_scan_c45(bus, i); in mdiobus_scan_bus_c45()
617 static bool mdiobus_prevent_c45_scan(struct mii_bus *bus) in mdiobus_prevent_c45_scan() argument
625 phydev = mdiobus_get_phy(bus, i); in mdiobus_prevent_c45_scan()
650 int __mdiobus_register(struct mii_bus *bus, struct module *owner) in __mdiobus_register() argument
657 if (!bus || !bus->name) in __mdiobus_register()
661 if (!!bus->read != !!bus->write || !!bus->read_c45 != !!bus->write_c45) in __mdiobus_register()
665 if (!bus->read && !bus->read_c45) in __mdiobus_register()
668 if (bus->parent && bus->parent->of_node) in __mdiobus_register()
669 bus->parent->of_node->fwnode.flags |= in __mdiobus_register()
672 WARN(bus->state != MDIOBUS_ALLOCATED && in __mdiobus_register()
673 bus->state != MDIOBUS_UNREGISTERED, in __mdiobus_register()
674 "%s: not in ALLOCATED or UNREGISTERED state\n", bus->id); in __mdiobus_register()
676 bus->owner = owner; in __mdiobus_register()
677 bus->dev.parent = bus->parent; in __mdiobus_register()
678 bus->dev.class = &mdio_bus_class; in __mdiobus_register()
679 bus->dev.groups = NULL; in __mdiobus_register()
680 dev_set_name(&bus->dev, "%s", bus->id); in __mdiobus_register()
687 bus->state = MDIOBUS_UNREGISTERED; in __mdiobus_register()
689 err = device_register(&bus->dev); in __mdiobus_register()
691 pr_err("mii_bus %s failed to register\n", bus->id); in __mdiobus_register()
695 mutex_init(&bus->mdio_lock); in __mdiobus_register()
696 mutex_init(&bus->shared_lock); in __mdiobus_register()
699 gpiod = devm_gpiod_get_optional(&bus->dev, "reset", GPIOD_OUT_HIGH); in __mdiobus_register()
701 err = dev_err_probe(&bus->dev, PTR_ERR(gpiod), in __mdiobus_register()
703 bus->id); in __mdiobus_register()
704 device_del(&bus->dev); in __mdiobus_register()
707 bus->reset_gpiod = gpiod; in __mdiobus_register()
708 fsleep(bus->reset_delay_us); in __mdiobus_register()
710 if (bus->reset_post_delay_us > 0) in __mdiobus_register()
711 fsleep(bus->reset_post_delay_us); in __mdiobus_register()
714 if (bus->reset) { in __mdiobus_register()
715 err = bus->reset(bus); in __mdiobus_register()
720 if (bus->read) { in __mdiobus_register()
721 err = mdiobus_scan_bus_c22(bus); in __mdiobus_register()
726 prevent_c45_scan = mdiobus_prevent_c45_scan(bus); in __mdiobus_register()
728 if (!prevent_c45_scan && bus->read_c45) { in __mdiobus_register()
729 err = mdiobus_scan_bus_c45(bus); in __mdiobus_register()
734 mdiobus_setup_mdiodev_from_board_info(bus, mdiobus_create_device); in __mdiobus_register()
736 bus->state = MDIOBUS_REGISTERED; in __mdiobus_register()
737 dev_dbg(&bus->dev, "probed\n"); in __mdiobus_register()
742 mdiodev = bus->mdio_map[i]; in __mdiobus_register()
751 if (bus->reset_gpiod) in __mdiobus_register()
752 gpiod_set_value_cansleep(bus->reset_gpiod, 1); in __mdiobus_register()
754 device_del(&bus->dev); in __mdiobus_register()
759 void mdiobus_unregister(struct mii_bus *bus) in mdiobus_unregister() argument
764 if (WARN_ON_ONCE(bus->state != MDIOBUS_REGISTERED)) in mdiobus_unregister()
766 bus->state = MDIOBUS_UNREGISTERED; in mdiobus_unregister()
769 mdiodev = bus->mdio_map[i]; in mdiobus_unregister()
781 if (bus->reset_gpiod) in mdiobus_unregister()
782 gpiod_set_value_cansleep(bus->reset_gpiod, 1); in mdiobus_unregister()
784 device_del(&bus->dev); in mdiobus_unregister()
796 void mdiobus_free(struct mii_bus *bus) in mdiobus_free() argument
799 if (bus->state == MDIOBUS_ALLOCATED) { in mdiobus_free()
800 kfree(bus); in mdiobus_free()
804 WARN(bus->state != MDIOBUS_UNREGISTERED, in mdiobus_free()
805 "%s: not in UNREGISTERED state\n", bus->id); in mdiobus_free()
806 bus->state = MDIOBUS_RELEASED; in mdiobus_free()
808 put_device(&bus->dev); in mdiobus_free()
842 int __mdiobus_read(struct mii_bus *bus, int addr, u32 regnum) in __mdiobus_read() argument
846 lockdep_assert_held_once(&bus->mdio_lock); in __mdiobus_read()
848 if (bus->read) in __mdiobus_read()
849 retval = bus->read(bus, addr, regnum); in __mdiobus_read()
853 trace_mdio_access(bus, 1, addr, regnum, retval, retval); in __mdiobus_read()
854 mdiobus_stats_acct(&bus->stats[addr], true, retval); in __mdiobus_read()
871 int __mdiobus_write(struct mii_bus *bus, int addr, u32 regnum, u16 val) in __mdiobus_write() argument
875 lockdep_assert_held_once(&bus->mdio_lock); in __mdiobus_write()
877 if (bus->write) in __mdiobus_write()
878 err = bus->write(bus, addr, regnum, val); in __mdiobus_write()
882 trace_mdio_access(bus, 0, addr, regnum, val, err); in __mdiobus_write()
883 mdiobus_stats_acct(&bus->stats[addr], false, err); in __mdiobus_write()
902 int __mdiobus_modify_changed(struct mii_bus *bus, int addr, u32 regnum, in __mdiobus_modify_changed() argument
907 ret = __mdiobus_read(bus, addr, regnum); in __mdiobus_modify_changed()
915 ret = __mdiobus_write(bus, addr, regnum, new); in __mdiobus_modify_changed()
932 int __mdiobus_c45_read(struct mii_bus *bus, int addr, int devad, u32 regnum) in __mdiobus_c45_read() argument
936 lockdep_assert_held_once(&bus->mdio_lock); in __mdiobus_c45_read()
938 if (bus->read_c45) in __mdiobus_c45_read()
939 retval = bus->read_c45(bus, addr, devad, regnum); in __mdiobus_c45_read()
943 trace_mdio_access(bus, 1, addr, regnum, retval, retval); in __mdiobus_c45_read()
944 mdiobus_stats_acct(&bus->stats[addr], true, retval); in __mdiobus_c45_read()
962 int __mdiobus_c45_write(struct mii_bus *bus, int addr, int devad, u32 regnum, in __mdiobus_c45_write() argument
967 lockdep_assert_held_once(&bus->mdio_lock); in __mdiobus_c45_write()
969 if (bus->write_c45) in __mdiobus_c45_write()
970 err = bus->write_c45(bus, addr, devad, regnum, val); in __mdiobus_c45_write()
974 trace_mdio_access(bus, 0, addr, regnum, val, err); in __mdiobus_c45_write()
975 mdiobus_stats_acct(&bus->stats[addr], false, err); in __mdiobus_c45_write()
995 static int __mdiobus_c45_modify_changed(struct mii_bus *bus, int addr, in __mdiobus_c45_modify_changed() argument
1001 ret = __mdiobus_c45_read(bus, addr, devad, regnum); in __mdiobus_c45_modify_changed()
1009 ret = __mdiobus_c45_write(bus, addr, devad, regnum, new); in __mdiobus_c45_modify_changed()
1027 int mdiobus_read_nested(struct mii_bus *bus, int addr, u32 regnum) in mdiobus_read_nested() argument
1031 mutex_lock_nested(&bus->mdio_lock, MDIO_MUTEX_NESTED); in mdiobus_read_nested()
1032 retval = __mdiobus_read(bus, addr, regnum); in mdiobus_read_nested()
1033 mutex_unlock(&bus->mdio_lock); in mdiobus_read_nested()
1049 int mdiobus_read(struct mii_bus *bus, int addr, u32 regnum) in mdiobus_read() argument
1053 mutex_lock(&bus->mdio_lock); in mdiobus_read()
1054 retval = __mdiobus_read(bus, addr, regnum); in mdiobus_read()
1055 mutex_unlock(&bus->mdio_lock); in mdiobus_read()
1072 int mdiobus_c45_read(struct mii_bus *bus, int addr, int devad, u32 regnum) in mdiobus_c45_read() argument
1076 mutex_lock(&bus->mdio_lock); in mdiobus_c45_read()
1077 retval = __mdiobus_c45_read(bus, addr, devad, regnum); in mdiobus_c45_read()
1078 mutex_unlock(&bus->mdio_lock); in mdiobus_c45_read()
1098 int mdiobus_c45_read_nested(struct mii_bus *bus, int addr, int devad, in mdiobus_c45_read_nested() argument
1103 mutex_lock_nested(&bus->mdio_lock, MDIO_MUTEX_NESTED); in mdiobus_c45_read_nested()
1104 retval = __mdiobus_c45_read(bus, addr, devad, regnum); in mdiobus_c45_read_nested()
1105 mutex_unlock(&bus->mdio_lock); in mdiobus_c45_read_nested()
1125 int mdiobus_write_nested(struct mii_bus *bus, int addr, u32 regnum, u16 val) in mdiobus_write_nested() argument
1129 mutex_lock_nested(&bus->mdio_lock, MDIO_MUTEX_NESTED); in mdiobus_write_nested()
1130 err = __mdiobus_write(bus, addr, regnum, val); in mdiobus_write_nested()
1131 mutex_unlock(&bus->mdio_lock); in mdiobus_write_nested()
1148 int mdiobus_write(struct mii_bus *bus, int addr, u32 regnum, u16 val) in mdiobus_write() argument
1152 mutex_lock(&bus->mdio_lock); in mdiobus_write()
1153 err = __mdiobus_write(bus, addr, regnum, val); in mdiobus_write()
1154 mutex_unlock(&bus->mdio_lock); in mdiobus_write()
1172 int mdiobus_c45_write(struct mii_bus *bus, int addr, int devad, u32 regnum, in mdiobus_c45_write() argument
1177 mutex_lock(&bus->mdio_lock); in mdiobus_c45_write()
1178 err = __mdiobus_c45_write(bus, addr, devad, regnum, val); in mdiobus_c45_write()
1179 mutex_unlock(&bus->mdio_lock); in mdiobus_c45_write()
1200 int mdiobus_c45_write_nested(struct mii_bus *bus, int addr, int devad, in mdiobus_c45_write_nested() argument
1205 mutex_lock_nested(&bus->mdio_lock, MDIO_MUTEX_NESTED); in mdiobus_c45_write_nested()
1206 err = __mdiobus_c45_write(bus, addr, devad, regnum, val); in mdiobus_c45_write_nested()
1207 mutex_unlock(&bus->mdio_lock); in mdiobus_c45_write_nested()
1222 int mdiobus_modify(struct mii_bus *bus, int addr, u32 regnum, u16 mask, u16 set) in mdiobus_modify() argument
1226 mutex_lock(&bus->mdio_lock); in mdiobus_modify()
1227 err = __mdiobus_modify_changed(bus, addr, regnum, mask, set); in mdiobus_modify()
1228 mutex_unlock(&bus->mdio_lock); in mdiobus_modify()
1244 int mdiobus_c45_modify(struct mii_bus *bus, int addr, int devad, u32 regnum, in mdiobus_c45_modify() argument
1249 mutex_lock(&bus->mdio_lock); in mdiobus_c45_modify()
1250 err = __mdiobus_c45_modify_changed(bus, addr, devad, regnum, in mdiobus_c45_modify()
1252 mutex_unlock(&bus->mdio_lock); in mdiobus_c45_modify()
1267 int mdiobus_modify_changed(struct mii_bus *bus, int addr, u32 regnum, in mdiobus_modify_changed() argument
1272 mutex_lock(&bus->mdio_lock); in mdiobus_modify_changed()
1273 err = __mdiobus_modify_changed(bus, addr, regnum, mask, set); in mdiobus_modify_changed()
1274 mutex_unlock(&bus->mdio_lock); in mdiobus_modify_changed()
1290 int mdiobus_c45_modify_changed(struct mii_bus *bus, int devad, int addr, in mdiobus_c45_modify_changed() argument
1295 mutex_lock(&bus->mdio_lock); in mdiobus_c45_modify_changed()
1296 err = __mdiobus_c45_modify_changed(bus, addr, devad, regnum, mask, set); in mdiobus_c45_modify_changed()
1297 mutex_unlock(&bus->mdio_lock); in mdiobus_c45_modify_changed()