Lines Matching full:bus
2 /* MDIO Bus interface
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 static struct mdio_device *mdiobus_find_device(struct mii_bus *bus, int addr) in mdiobus_find_device() argument
112 bool addr_valid = addr >= 0 && addr < ARRAY_SIZE(bus->mdio_map); in mdiobus_find_device()
117 return bus->mdio_map[addr]; in mdiobus_find_device()
120 struct phy_device *mdiobus_get_phy(struct mii_bus *bus, int addr) in mdiobus_get_phy() argument
124 mdiodev = mdiobus_find_device(bus, addr); in mdiobus_get_phy()
135 bool mdiobus_is_registered_device(struct mii_bus *bus, int addr) in mdiobus_is_registered_device() argument
137 return mdiobus_find_device(bus, addr) != NULL; in mdiobus_is_registered_device()
144 * If non-zero, then bus->priv is points to that memory.
146 * Description: called by a bus driver to allocate an mii_bus
151 struct mii_bus *bus; in mdiobus_alloc_size() local
152 size_t aligned_size = ALIGN(sizeof(*bus), NETDEV_ALIGN); in mdiobus_alloc_size()
160 alloc_size = sizeof(*bus); in mdiobus_alloc_size()
162 bus = kzalloc(alloc_size, GFP_KERNEL); in mdiobus_alloc_size()
163 if (!bus) in mdiobus_alloc_size()
166 bus->state = MDIOBUS_ALLOCATED; in mdiobus_alloc_size()
168 bus->priv = (void *)bus + aligned_size; in mdiobus_alloc_size()
172 bus->irq[i] = PHY_POLL; in mdiobus_alloc_size()
173 u64_stats_init(&bus->stats[i].syncp); in mdiobus_alloc_size()
176 return bus; in mdiobus_alloc_size()
189 struct mii_bus *bus = to_mii_bus(d); in mdiobus_release() local
191 WARN(bus->state != MDIOBUS_RELEASED && in mdiobus_release()
193 bus->state != MDIOBUS_ALLOCATED, in mdiobus_release()
195 bus->id); in mdiobus_release()
197 if (bus->state == MDIOBUS_RELEASED) in mdiobus_release()
200 kfree(bus); in mdiobus_release()
222 static u64 mdio_bus_get_global_stat(struct mii_bus *bus, unsigned int offset) in mdio_bus_get_global_stat() argument
228 val += mdio_bus_get_stat(&bus->stats[i], offset); in mdio_bus_get_global_stat()
237 struct mii_bus *bus = to_mii_bus(dev); in mdio_bus_stat_field_show() local
246 val = mdio_bus_get_global_stat(bus, sattr->field_offset); in mdio_bus_stat_field_show()
248 val = mdio_bus_get_stat(&bus->stats[sattr->addr], in mdio_bus_stat_field_show()
259 struct mii_bus *bus = mdiodev->bus; in mdio_bus_device_stat_field_show() local
268 val = mdio_bus_get_stat(&bus->stats[addr], sattr->field_offset); in mdio_bus_device_stat_field_show()
420 * and this must be put_deviced'ed once the bus is finished with.
438 * and this must be put once the bus is finished with.
457 /* Walk the list of subnodes of a mdio bus and look for a node that
463 static void of_mdiobus_link_mdiodev(struct mii_bus *bus, in of_mdiobus_link_mdiodev() argument
469 if (dev->of_node || !bus->dev.of_node) in of_mdiobus_link_mdiodev()
472 for_each_available_child_of_node(bus->dev.of_node, child) { in of_mdiobus_link_mdiodev()
498 * @bus: MDIO bus to create the devices on
503 static int mdiobus_create_device(struct mii_bus *bus, in mdiobus_create_device() argument
509 mdiodev = mdio_device_create(bus, bi->mdio_addr); in mdiobus_create_device()
525 static struct phy_device *mdiobus_scan(struct mii_bus *bus, int addr, bool c45) in mdiobus_scan() argument
530 phydev = get_phy_device(bus, addr, c45); in mdiobus_scan()
535 * in the bus node, and set the of_node pointer in this case. in mdiobus_scan()
537 of_mdiobus_link_mdiodev(bus, &phydev->mdio); in mdiobus_scan()
549 * mdiobus_scan_c22 - scan one address on a bus for C22 MDIO devices.
550 * @bus: mii_bus to scan
551 * @addr: address on bus to scan
553 * This function scans one address on the MDIO bus, looking for
560 struct phy_device *mdiobus_scan_c22(struct mii_bus *bus, int addr) in mdiobus_scan_c22() argument
562 return mdiobus_scan(bus, addr, false); in mdiobus_scan_c22()
567 * mdiobus_scan_c45 - scan one address on a bus for C45 MDIO devices.
568 * @bus: mii_bus to scan
569 * @addr: address on bus to scan
571 * This function scans one address on the MDIO bus, looking for
578 static struct phy_device *mdiobus_scan_c45(struct mii_bus *bus, int addr) in mdiobus_scan_c45() argument
580 return mdiobus_scan(bus, addr, true); in mdiobus_scan_c45()
583 static int mdiobus_scan_bus_c22(struct mii_bus *bus) in mdiobus_scan_bus_c22() argument
588 if ((bus->phy_mask & BIT(i)) == 0) { in mdiobus_scan_bus_c22()
591 phydev = mdiobus_scan_c22(bus, i); in mdiobus_scan_bus_c22()
599 static int mdiobus_scan_bus_c45(struct mii_bus *bus) in mdiobus_scan_bus_c45() argument
604 if ((bus->phy_mask & BIT(i)) == 0) { in mdiobus_scan_bus_c45()
608 if (bus->mdio_map[i]) in mdiobus_scan_bus_c45()
611 phydev = mdiobus_scan_c45(bus, i); in mdiobus_scan_bus_c45()
620 * transaction on the bus, like accepting a read themselves, and
626 static bool mdiobus_prevent_c45_scan(struct mii_bus *bus) in mdiobus_prevent_c45_scan() argument
634 phydev = mdiobus_get_phy(bus, i); in mdiobus_prevent_c45_scan()
646 * __mdiobus_register - bring up all the PHYs on a given bus and attach them to bus
647 * @bus: target mii_bus
648 * @owner: module containing bus accessor functions
650 * Description: Called by a bus driver to bring up all the PHYs
651 * on a given bus, and attach them to the bus. Drivers should use
659 int __mdiobus_register(struct mii_bus *bus, struct module *owner) in __mdiobus_register() argument
666 if (!bus || !bus->name) in __mdiobus_register()
670 if (!!bus->read != !!bus->write || !!bus->read_c45 != !!bus->write_c45) in __mdiobus_register()
674 if (!bus->read && !bus->read_c45) in __mdiobus_register()
677 if (bus->parent && bus->parent->of_node) in __mdiobus_register()
678 bus->parent->of_node->fwnode.flags |= in __mdiobus_register()
681 WARN(bus->state != MDIOBUS_ALLOCATED && in __mdiobus_register()
682 bus->state != MDIOBUS_UNREGISTERED, in __mdiobus_register()
683 "%s: not in ALLOCATED or UNREGISTERED state\n", bus->id); in __mdiobus_register()
685 bus->owner = owner; in __mdiobus_register()
686 bus->dev.parent = bus->parent; in __mdiobus_register()
687 bus->dev.class = &mdio_bus_class; in __mdiobus_register()
688 bus->dev.groups = NULL; in __mdiobus_register()
689 dev_set_name(&bus->dev, "%s", bus->id); in __mdiobus_register()
691 /* If the bus state is allocated, we're registering a fresh bus in __mdiobus_register()
693 * to the fwnode. This will be dropped when the bus is released. in __mdiobus_register()
694 * If the bus was set to unregistered, it means that the bus was in __mdiobus_register()
697 if (bus->state == MDIOBUS_ALLOCATED) in __mdiobus_register()
698 fwnode_handle_get(dev_fwnode(&bus->dev)); in __mdiobus_register()
705 bus->state = MDIOBUS_UNREGISTERED; in __mdiobus_register()
707 err = device_register(&bus->dev); in __mdiobus_register()
709 pr_err("mii_bus %s failed to register\n", bus->id); in __mdiobus_register()
713 mutex_init(&bus->mdio_lock); in __mdiobus_register()
714 mutex_init(&bus->shared_lock); in __mdiobus_register()
716 /* assert bus level PHY GPIO reset */ in __mdiobus_register()
717 gpiod = devm_gpiod_get_optional(&bus->dev, "reset", GPIOD_OUT_HIGH); in __mdiobus_register()
719 err = dev_err_probe(&bus->dev, PTR_ERR(gpiod), in __mdiobus_register()
721 bus->id); in __mdiobus_register()
722 device_del(&bus->dev); in __mdiobus_register()
725 bus->reset_gpiod = gpiod; in __mdiobus_register()
726 fsleep(bus->reset_delay_us); in __mdiobus_register()
728 if (bus->reset_post_delay_us > 0) in __mdiobus_register()
729 fsleep(bus->reset_post_delay_us); in __mdiobus_register()
732 if (bus->reset) { in __mdiobus_register()
733 err = bus->reset(bus); in __mdiobus_register()
738 if (bus->read) { in __mdiobus_register()
739 err = mdiobus_scan_bus_c22(bus); in __mdiobus_register()
744 prevent_c45_scan = mdiobus_prevent_c45_scan(bus); in __mdiobus_register()
746 if (!prevent_c45_scan && bus->read_c45) { in __mdiobus_register()
747 err = mdiobus_scan_bus_c45(bus); in __mdiobus_register()
752 mdiobus_setup_mdiodev_from_board_info(bus, mdiobus_create_device); in __mdiobus_register()
754 bus->state = MDIOBUS_REGISTERED; in __mdiobus_register()
755 dev_dbg(&bus->dev, "probed\n"); in __mdiobus_register()
760 mdiodev = bus->mdio_map[i]; in __mdiobus_register()
769 if (bus->reset_gpiod) in __mdiobus_register()
770 gpiod_set_value_cansleep(bus->reset_gpiod, 1); in __mdiobus_register()
772 device_del(&bus->dev); in __mdiobus_register()
777 void mdiobus_unregister(struct mii_bus *bus) in mdiobus_unregister() argument
782 if (WARN_ON_ONCE(bus->state != MDIOBUS_REGISTERED)) in mdiobus_unregister()
784 bus->state = MDIOBUS_UNREGISTERED; in mdiobus_unregister()
787 mdiodev = bus->mdio_map[i]; in mdiobus_unregister()
799 if (bus->reset_gpiod) in mdiobus_unregister()
800 gpiod_set_value_cansleep(bus->reset_gpiod, 1); in mdiobus_unregister()
802 device_del(&bus->dev); in mdiobus_unregister()
808 * @bus: mii_bus to free
814 void mdiobus_free(struct mii_bus *bus) in mdiobus_free() argument
817 if (bus->state == MDIOBUS_ALLOCATED) { in mdiobus_free()
818 kfree(bus); in mdiobus_free()
822 WARN(bus->state != MDIOBUS_UNREGISTERED, in mdiobus_free()
823 "%s: not in UNREGISTERED state\n", bus->id); in mdiobus_free()
824 bus->state = MDIOBUS_RELEASED; in mdiobus_free()
826 put_device(&bus->dev); in mdiobus_free()
852 * @bus: the mii_bus struct
856 * Read a MDIO bus register. Caller must hold the mdio bus lock.
860 int __mdiobus_read(struct mii_bus *bus, int addr, u32 regnum) in __mdiobus_read() argument
864 lockdep_assert_held_once(&bus->mdio_lock); in __mdiobus_read()
866 if (bus->read) in __mdiobus_read()
867 retval = bus->read(bus, addr, regnum); in __mdiobus_read()
871 trace_mdio_access(bus, 1, addr, regnum, retval, retval); in __mdiobus_read()
872 mdiobus_stats_acct(&bus->stats[addr], true, retval); in __mdiobus_read()
880 * @bus: the mii_bus struct
885 * Write a MDIO bus register. Caller must hold the mdio bus lock.
889 int __mdiobus_write(struct mii_bus *bus, int addr, u32 regnum, u16 val) in __mdiobus_write() argument
893 lockdep_assert_held_once(&bus->mdio_lock); in __mdiobus_write()
895 if (bus->write) in __mdiobus_write()
896 err = bus->write(bus, addr, regnum, val); in __mdiobus_write()
900 trace_mdio_access(bus, 0, addr, regnum, val, err); in __mdiobus_write()
901 mdiobus_stats_acct(&bus->stats[addr], false, err); in __mdiobus_write()
909 * @bus: the mii_bus struct
920 int __mdiobus_modify_changed(struct mii_bus *bus, int addr, u32 regnum, in __mdiobus_modify_changed() argument
925 ret = __mdiobus_read(bus, addr, regnum); in __mdiobus_modify_changed()
933 ret = __mdiobus_write(bus, addr, regnum, new); in __mdiobus_modify_changed()
941 * @bus: the mii_bus struct
946 * Read a MDIO bus register. Caller must hold the mdio bus lock.
950 int __mdiobus_c45_read(struct mii_bus *bus, int addr, int devad, u32 regnum) in __mdiobus_c45_read() argument
954 lockdep_assert_held_once(&bus->mdio_lock); in __mdiobus_c45_read()
956 if (bus->read_c45) in __mdiobus_c45_read()
957 retval = bus->read_c45(bus, addr, devad, regnum); in __mdiobus_c45_read()
961 trace_mdio_access(bus, 1, addr, regnum, retval, retval); in __mdiobus_c45_read()
962 mdiobus_stats_acct(&bus->stats[addr], true, retval); in __mdiobus_c45_read()
970 * @bus: the mii_bus struct
976 * Write a MDIO bus register. Caller must hold the mdio bus lock.
980 int __mdiobus_c45_write(struct mii_bus *bus, int addr, int devad, u32 regnum, in __mdiobus_c45_write() argument
985 lockdep_assert_held_once(&bus->mdio_lock); in __mdiobus_c45_write()
987 if (bus->write_c45) in __mdiobus_c45_write()
988 err = bus->write_c45(bus, addr, devad, regnum, val); in __mdiobus_c45_write()
992 trace_mdio_access(bus, 0, addr, regnum, val, err); in __mdiobus_c45_write()
993 mdiobus_stats_acct(&bus->stats[addr], false, err); in __mdiobus_c45_write()
1001 * @bus: the mii_bus struct
1013 static int __mdiobus_c45_modify_changed(struct mii_bus *bus, int addr, in __mdiobus_c45_modify_changed() argument
1019 ret = __mdiobus_c45_read(bus, addr, devad, regnum); in __mdiobus_c45_modify_changed()
1027 ret = __mdiobus_c45_write(bus, addr, devad, regnum, new); in __mdiobus_c45_modify_changed()
1034 * @bus: the mii_bus struct
1038 * In case of nested MDIO bus access avoid lockdep false positives by
1042 * because the bus read/write functions may wait for an interrupt
1045 int mdiobus_read_nested(struct mii_bus *bus, int addr, u32 regnum) in mdiobus_read_nested() argument
1049 mutex_lock_nested(&bus->mdio_lock, MDIO_MUTEX_NESTED); in mdiobus_read_nested()
1050 retval = __mdiobus_read(bus, addr, regnum); in mdiobus_read_nested()
1051 mutex_unlock(&bus->mdio_lock); in mdiobus_read_nested()
1059 * @bus: the mii_bus struct
1064 * because the bus read/write functions may wait for an interrupt
1067 int mdiobus_read(struct mii_bus *bus, int addr, u32 regnum) in mdiobus_read() argument
1071 mutex_lock(&bus->mdio_lock); in mdiobus_read()
1072 retval = __mdiobus_read(bus, addr, regnum); in mdiobus_read()
1073 mutex_unlock(&bus->mdio_lock); in mdiobus_read()
1081 * @bus: the mii_bus struct
1087 * because the bus read/write functions may wait for an interrupt
1090 int mdiobus_c45_read(struct mii_bus *bus, int addr, int devad, u32 regnum) in mdiobus_c45_read() argument
1094 mutex_lock(&bus->mdio_lock); in mdiobus_c45_read()
1095 retval = __mdiobus_c45_read(bus, addr, devad, regnum); in mdiobus_c45_read()
1096 mutex_unlock(&bus->mdio_lock); in mdiobus_c45_read()
1104 * @bus: the mii_bus struct
1109 * In case of nested MDIO bus access avoid lockdep false positives by
1113 * because the bus read/write functions may wait for an interrupt
1116 int mdiobus_c45_read_nested(struct mii_bus *bus, int addr, int devad, in mdiobus_c45_read_nested() argument
1121 mutex_lock_nested(&bus->mdio_lock, MDIO_MUTEX_NESTED); in mdiobus_c45_read_nested()
1122 retval = __mdiobus_c45_read(bus, addr, devad, regnum); in mdiobus_c45_read_nested()
1123 mutex_unlock(&bus->mdio_lock); in mdiobus_c45_read_nested()
1131 * @bus: the mii_bus struct
1136 * In case of nested MDIO bus access avoid lockdep false positives by
1140 * because the bus read/write functions may wait for an interrupt
1143 int mdiobus_write_nested(struct mii_bus *bus, int addr, u32 regnum, u16 val) in mdiobus_write_nested() argument
1147 mutex_lock_nested(&bus->mdio_lock, MDIO_MUTEX_NESTED); in mdiobus_write_nested()
1148 err = __mdiobus_write(bus, addr, regnum, val); in mdiobus_write_nested()
1149 mutex_unlock(&bus->mdio_lock); in mdiobus_write_nested()
1157 * @bus: the mii_bus struct
1163 * because the bus read/write functions may wait for an interrupt
1166 int mdiobus_write(struct mii_bus *bus, int addr, u32 regnum, u16 val) in mdiobus_write() argument
1170 mutex_lock(&bus->mdio_lock); in mdiobus_write()
1171 err = __mdiobus_write(bus, addr, regnum, val); in mdiobus_write()
1172 mutex_unlock(&bus->mdio_lock); in mdiobus_write()
1180 * @bus: the mii_bus struct
1187 * because the bus read/write functions may wait for an interrupt
1190 int mdiobus_c45_write(struct mii_bus *bus, int addr, int devad, u32 regnum, in mdiobus_c45_write() argument
1195 mutex_lock(&bus->mdio_lock); in mdiobus_c45_write()
1196 err = __mdiobus_c45_write(bus, addr, devad, regnum, val); in mdiobus_c45_write()
1197 mutex_unlock(&bus->mdio_lock); in mdiobus_c45_write()
1205 * @bus: the mii_bus struct
1211 * In case of nested MDIO bus access avoid lockdep false positives by
1215 * because the bus read/write functions may wait for an interrupt
1218 int mdiobus_c45_write_nested(struct mii_bus *bus, int addr, int devad, in mdiobus_c45_write_nested() argument
1223 mutex_lock_nested(&bus->mdio_lock, MDIO_MUTEX_NESTED); in mdiobus_c45_write_nested()
1224 err = __mdiobus_c45_write(bus, addr, devad, regnum, val); in mdiobus_c45_write_nested()
1225 mutex_unlock(&bus->mdio_lock); in mdiobus_c45_write_nested()
1234 * @bus: the mii_bus struct
1240 int __mdiobus_modify(struct mii_bus *bus, int addr, u32 regnum, u16 mask, in __mdiobus_modify() argument
1245 err = __mdiobus_modify_changed(bus, addr, regnum, mask, set); in __mdiobus_modify()
1254 * @bus: the mii_bus struct
1260 int mdiobus_modify(struct mii_bus *bus, int addr, u32 regnum, u16 mask, u16 set) in mdiobus_modify() argument
1264 mutex_lock(&bus->mdio_lock); in mdiobus_modify()
1265 err = __mdiobus_modify(bus, addr, regnum, mask, set); in mdiobus_modify()
1266 mutex_unlock(&bus->mdio_lock); in mdiobus_modify()
1275 * @bus: the mii_bus struct
1282 int mdiobus_c45_modify(struct mii_bus *bus, int addr, int devad, u32 regnum, in mdiobus_c45_modify() argument
1287 mutex_lock(&bus->mdio_lock); in mdiobus_c45_modify()
1288 err = __mdiobus_c45_modify_changed(bus, addr, devad, regnum, in mdiobus_c45_modify()
1290 mutex_unlock(&bus->mdio_lock); in mdiobus_c45_modify()
1299 * @bus: the mii_bus struct
1305 int mdiobus_modify_changed(struct mii_bus *bus, int addr, u32 regnum, in mdiobus_modify_changed() argument
1310 mutex_lock(&bus->mdio_lock); in mdiobus_modify_changed()
1311 err = __mdiobus_modify_changed(bus, addr, regnum, mask, set); in mdiobus_modify_changed()
1312 mutex_unlock(&bus->mdio_lock); in mdiobus_modify_changed()
1321 * @bus: the mii_bus struct
1328 int mdiobus_c45_modify_changed(struct mii_bus *bus, int addr, int devad, in mdiobus_c45_modify_changed() argument
1333 mutex_lock(&bus->mdio_lock); in mdiobus_c45_modify_changed()
1334 err = __mdiobus_c45_modify_changed(bus, addr, devad, regnum, mask, set); in mdiobus_c45_modify_changed()
1335 mutex_unlock(&bus->mdio_lock); in mdiobus_c45_modify_changed()
1434 MODULE_DESCRIPTION("MDIO bus/device layer");