Message ID | 20241026045243.452957-1-saravanak@google.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v2] driver core: fw_devlink: Stop trying to optimize cycle detection logic | expand |
Hi, On 26/10/2024 07:52, Saravana Kannan wrote: > In attempting to optimize fw_devlink runtime, I introduced numerous cycle > detection bugs by foregoing cycle detection logic under specific > conditions. Each fix has further narrowed the conditions for optimization. > > It's time to give up on these optimization attempts and just run the cycle > detection logic every time fw_devlink tries to create a device link. > > The specific bug report that triggered this fix involved a supplier fwnode > that never gets a device created for it. Instead, the supplier fwnode is > represented by the device that corresponds to an ancestor fwnode. > > In this case, fw_devlink didn't do any cycle detection because the cycle > detection logic is only run when a device link is created between the > devices that correspond to the actual consumer and supplier fwnodes. > > With this change, fw_devlink will run cycle detection logic even when > creating SYNC_STATE_ONLY proxy device links from a device that is an > ancestor of a consumer fwnode. > > Reported-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com> > Closes: https://lore.kernel.org/all/1a1ab663-d068-40fb-8c94-f0715403d276@ideasonboard.com/ > Fixes: 6442d79d880c ("driver core: fw_devlink: Improve detection of overlapping cycles") > Signed-off-by: Saravana Kannan <saravanak@google.com> > --- > Greg, > > I've tested this on my end and it looks ok and nothing fishy is going > on. You can pick this up once Tomi gives a Tested-by. I tested this on TI AM62 SK board. It has an LVDS (OLDI) display and a HDMI output, and both displays are connected to the same display subsystem. I tested with OLDI single and dual link cases, with and without HDMI, and in all cases probing works fine. Looks good on that front, so: Tested-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com> You also asked for a diff of the devlinks. That part doesn't look so good to me, but probably you can tell if it's normal or not. $ diff devlink-single-broken.txt devlink-single-fixed.txt 2d1 < i2c:1-0022--i2c:1-003b 11d9 < platform:44043000.system-controller:clock-controller--platform:20010000.i2c 27d24 < platform:44043000.system-controller:clock-controller--platform:601000.gpio 42d38 < platform:44043000.system-controller:power-controller--platform:20010000.i2c 58d53 < platform:44043000.system-controller:power-controller--platform:601000.gpio 74d68 < platform:4d000000.mailbox--platform:44043000.system-controller 76d69 < platform:601000.gpio--i2c:1-0022 80d72 < platform:bus@f0000:interrupt-controller@a00000--platform:601000.gpio 82d73 < platform:f4000.pinctrl--i2c:1-0022 84d74 < platform:f4000.pinctrl--platform:20010000.i2c "i2c:1-003b" is the hdmi bridge, "i2c:1-0022" is a gpio expander. So, for example, we lose the devlink between the gpio expander and the hdmi bridge. The expander is used for interrupts. There's an interrupt line from the HDMI bridge to the expander, and from there there's an interrupt line going to the SoC. Also, I noticed the devlinks change if I load the display drivers. The above is before loading. Comparing the loaded/not-loaded: $ diff devlink-dual-fixed.txt devlink-dual-fixed-loaded.txt 3d2 < i2c:1-003b--platform:30200000.dss 23d21 < platform:44043000.system-controller:clock-controller--platform:30200000.dss 52d49 < platform:44043000.system-controller:power-controller--platform:30200000.dss 73d69 < platform:display--platform:30200000.dss 78d73 < platform:f4000.pinctrl--platform:30200000.dss 97a93 > regulator:regulator.0--platform:display Tomi > Thanks, > Saravana > > v1 -> v2: > - Removed the RFC tag > - Remaned the subject. v1 is https://lore.kernel.org/all/20241025223721.184998-1-saravanak@google.com/T/#u > - Added a NULL check to avoid NULL pointer deref > > drivers/base/core.c | 46 ++++++++++++++++++++------------------------- > 1 file changed, 20 insertions(+), 26 deletions(-) > > diff --git a/drivers/base/core.c b/drivers/base/core.c > index 3b13fed1c3e3..f96f2e4c76b4 100644 > --- a/drivers/base/core.c > +++ b/drivers/base/core.c > @@ -1990,10 +1990,10 @@ static struct device *fwnode_get_next_parent_dev(const struct fwnode_handle *fwn > * > * Return true if one or more cycles were found. Otherwise, return false. > */ > -static bool __fw_devlink_relax_cycles(struct device *con, > +static bool __fw_devlink_relax_cycles(struct fwnode_handle *con_handle, > struct fwnode_handle *sup_handle) > { > - struct device *sup_dev = NULL, *par_dev = NULL; > + struct device *sup_dev = NULL, *par_dev = NULL, *con_dev = NULL; > struct fwnode_link *link; > struct device_link *dev_link; > bool ret = false; > @@ -2010,22 +2010,22 @@ static bool __fw_devlink_relax_cycles(struct device *con, > > sup_handle->flags |= FWNODE_FLAG_VISITED; > > - sup_dev = get_dev_from_fwnode(sup_handle); > - > /* Termination condition. */ > - if (sup_dev == con) { > + if (sup_handle == con_handle) { > pr_debug("----- cycle: start -----\n"); > ret = true; > goto out; > } > > + sup_dev = get_dev_from_fwnode(sup_handle); > + con_dev = get_dev_from_fwnode(con_handle); > /* > * If sup_dev is bound to a driver and @con hasn't started binding to a > * driver, sup_dev can't be a consumer of @con. So, no need to check > * further. > */ > if (sup_dev && sup_dev->links.status == DL_DEV_DRIVER_BOUND && > - con->links.status == DL_DEV_NO_DRIVER) { > + con_dev && con_dev->links.status == DL_DEV_NO_DRIVER) { > ret = false; > goto out; > } > @@ -2034,7 +2034,7 @@ static bool __fw_devlink_relax_cycles(struct device *con, > if (link->flags & FWLINK_FLAG_IGNORE) > continue; > > - if (__fw_devlink_relax_cycles(con, link->supplier)) { > + if (__fw_devlink_relax_cycles(con_handle, link->supplier)) { > __fwnode_link_cycle(link); > ret = true; > } > @@ -2049,7 +2049,7 @@ static bool __fw_devlink_relax_cycles(struct device *con, > else > par_dev = fwnode_get_next_parent_dev(sup_handle); > > - if (par_dev && __fw_devlink_relax_cycles(con, par_dev->fwnode)) { > + if (par_dev && __fw_devlink_relax_cycles(con_handle, par_dev->fwnode)) { > pr_debug("%pfwf: cycle: child of %pfwf\n", sup_handle, > par_dev->fwnode); > ret = true; > @@ -2067,7 +2067,7 @@ static bool __fw_devlink_relax_cycles(struct device *con, > !(dev_link->flags & DL_FLAG_CYCLE)) > continue; > > - if (__fw_devlink_relax_cycles(con, > + if (__fw_devlink_relax_cycles(con_handle, > dev_link->supplier->fwnode)) { > pr_debug("%pfwf: cycle: depends on %pfwf\n", sup_handle, > dev_link->supplier->fwnode); > @@ -2140,25 +2140,19 @@ static int fw_devlink_create_devlink(struct device *con, > return -EINVAL; > > /* > - * SYNC_STATE_ONLY device links don't block probing and supports cycles. > - * So, one might expect that cycle detection isn't necessary for them. > - * However, if the device link was marked as SYNC_STATE_ONLY because > - * it's part of a cycle, then we still need to do cycle detection. This > - * is because the consumer and supplier might be part of multiple cycles > - * and we need to detect all those cycles. > + * Don't try to optimize by not calling the cycle detection logic under > + * certain conditions. There's always some corner case that won't get > + * detected. > */ > - if (!device_link_flag_is_sync_state_only(flags) || > - flags & DL_FLAG_CYCLE) { > - device_links_write_lock(); > - if (__fw_devlink_relax_cycles(con, sup_handle)) { > - __fwnode_link_cycle(link); > - flags = fw_devlink_get_flags(link->flags); > - pr_debug("----- cycle: end -----\n"); > - dev_info(con, "Fixed dependency cycle(s) with %pfwf\n", > - sup_handle); > - } > - device_links_write_unlock(); > + device_links_write_lock(); > + if (__fw_devlink_relax_cycles(link->consumer, sup_handle)) { > + __fwnode_link_cycle(link); > + flags = fw_devlink_get_flags(link->flags); > + pr_debug("----- cycle: end -----\n"); > + pr_info("%pfwf: Fixed dependency cycle(s) with %pfwf\n", > + link->consumer, sup_handle); > } > + device_links_write_unlock(); > > if (sup_handle->flags & FWNODE_FLAG_NOT_DEVICE) > sup_dev = fwnode_get_next_parent_dev(sup_handle);
On Mon, Oct 28, 2024 at 1:06 AM Tomi Valkeinen <tomi.valkeinen@ideasonboard.com> wrote: > > Hi, > > On 26/10/2024 07:52, Saravana Kannan wrote: > > In attempting to optimize fw_devlink runtime, I introduced numerous cycle > > detection bugs by foregoing cycle detection logic under specific > > conditions. Each fix has further narrowed the conditions for optimization. > > > > It's time to give up on these optimization attempts and just run the cycle > > detection logic every time fw_devlink tries to create a device link. > > > > The specific bug report that triggered this fix involved a supplier fwnode > > that never gets a device created for it. Instead, the supplier fwnode is > > represented by the device that corresponds to an ancestor fwnode. > > > > In this case, fw_devlink didn't do any cycle detection because the cycle > > detection logic is only run when a device link is created between the > > devices that correspond to the actual consumer and supplier fwnodes. > > > > With this change, fw_devlink will run cycle detection logic even when > > creating SYNC_STATE_ONLY proxy device links from a device that is an > > ancestor of a consumer fwnode. > > > > Reported-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com> > > Closes: https://lore.kernel.org/all/1a1ab663-d068-40fb-8c94-f0715403d276@ideasonboard.com/ > > Fixes: 6442d79d880c ("driver core: fw_devlink: Improve detection of overlapping cycles") > > Signed-off-by: Saravana Kannan <saravanak@google.com> > > --- > > Greg, > > > > I've tested this on my end and it looks ok and nothing fishy is going > > on. You can pick this up once Tomi gives a Tested-by. > > I tested this on TI AM62 SK board. It has an LVDS (OLDI) display and a > HDMI output, and both displays are connected to the same display > subsystem. I tested with OLDI single and dual link cases, with and > without HDMI, and in all cases probing works fine. > > Looks good on that front, so: > > Tested-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com> Great! Thanks! > You also asked for a diff of the devlinks. That part doesn't look so > good to me, but probably you can tell if it's normal or not. TL;DR: All device links in a cycle get marked as DL_FLAG_SYNC_STATE_ONLY and DL_FLAG_CYCLE (in addition to other flags). All DL_FLAG_SYNC_STATE_ONLY (not all of them are cycles) will get deleted after the consumer probes (since they are no longer needed after that). My guess on what's going on is that with the patch, fw_devlink found and marked more device links as cycles. Ones that in the past weren't detected as being part of a cycle but coincidentally the "post-init" dependency was the one that was getting ignored/not enforced. So the actual links in a cycle getting deleted after all the devices have probed is not a problem. You can enable the "cycle" logs in drivers/base/core.c so it's easier to follow the cycles fw_devlink detected. But the logs are a bit cryptic because it tries to print all the multiple cycles that were detected using a recursive search. The non-cycle use for DL_FLAG_SYNC_STATE_ONLY is for parent devices to put a "proxy-vote" (Hey supplier, you still have a consumer that hasn't bound to a driver yet) for descendant (children, grand children) devices that haven't been created yet. So, without the fix it's possible some descendant child never got to probe and the DL_FLAG_SYNC_STATE_ONLY device link stuck around. If you can confirm all the deleted device links fall into one of these two categories, then there's no issue here. If you find cases that aren't clear, then let me know which one and point to specific nodes in an upstream DTS file and I can take a look. Every device link folder has a "sync_state_only" file that says if it has the DL_FLAG_SYNC_STATE_ONLY set. But to check for the cycle flag, you'll have to extend the debug log in device_link_add() that goes: "Linked as a sync state only consumer to......" and print the "flags" param. > > $ diff devlink-single-broken.txt devlink-single-fixed.txt I was hoping you'd give me some line count diff too to get a sense of if it's wreaking havoc or not. But based on my local testing on different hardware, I'm expecting a very small number of device links are getting affected. > 2d1 > < i2c:1-0022--i2c:1-003b > 11d9 > < > platform:44043000.system-controller:clock-controller--platform:20010000.i2c > 27d24 > < platform:44043000.system-controller:clock-controller--platform:601000.gpio > 42d38 > < > platform:44043000.system-controller:power-controller--platform:20010000.i2c > 58d53 > < platform:44043000.system-controller:power-controller--platform:601000.gpio > 74d68 > < platform:4d000000.mailbox--platform:44043000.system-controller I took a quick look at this one in arch/arm64/boot/dts/ti/k3-am62-main.dtsi which I assume is part of the device you are testing on and I couldn't find a cycle. But with dtsi and dts files, it's hard to find these manually. Let me know if fw_devlink is thinking there's a cycle where there is none. > 76d69 > < platform:601000.gpio--i2c:1-0022 > 80d72 > < platform:bus@f0000:interrupt-controller@a00000--platform:601000.gpio > 82d73 > < platform:f4000.pinctrl--i2c:1-0022 > 84d74 > < platform:f4000.pinctrl--platform:20010000.i2c > > "i2c:1-003b" is the hdmi bridge, "i2c:1-0022" is a gpio expander. So, > for example, we lose the devlink between the gpio expander and the hdmi > bridge. The expander is used for interrupts. There's an interrupt line > from the HDMI bridge to the expander, and from there there's an > interrupt line going to the SoC. > > Also, I noticed the devlinks change if I load the display drivers. The > above is before loading. Comparing the loaded/not-loaded: Yeah, DL_FLAG_SYNC_STATE_ONLY device links vanishing as more devices probe is not a problem. That's working as intended. Thanks, Saravana > > $ diff devlink-dual-fixed.txt devlink-dual-fixed-loaded.txt > 3d2 > < i2c:1-003b--platform:30200000.dss > 23d21 > < > platform:44043000.system-controller:clock-controller--platform:30200000.dss > 52d49 > < > platform:44043000.system-controller:power-controller--platform:30200000.dss > 73d69 > < platform:display--platform:30200000.dss > 78d73 > < platform:f4000.pinctrl--platform:30200000.dss > 97a93 > > regulator:regulator.0--platform:display > > Tomi > > > > Thanks, > > Saravana > > > > v1 -> v2: > > - Removed the RFC tag > > - Remaned the subject. v1 is https://lore.kernel.org/all/20241025223721.184998-1-saravanak@google.com/T/#u > > - Added a NULL check to avoid NULL pointer deref > > > > drivers/base/core.c | 46 ++++++++++++++++++++------------------------- > > 1 file changed, 20 insertions(+), 26 deletions(-) > > > > diff --git a/drivers/base/core.c b/drivers/base/core.c > > index 3b13fed1c3e3..f96f2e4c76b4 100644 > > --- a/drivers/base/core.c > > +++ b/drivers/base/core.c > > @@ -1990,10 +1990,10 @@ static struct device *fwnode_get_next_parent_dev(const struct fwnode_handle *fwn > > * > > * Return true if one or more cycles were found. Otherwise, return false. > > */ > > -static bool __fw_devlink_relax_cycles(struct device *con, > > +static bool __fw_devlink_relax_cycles(struct fwnode_handle *con_handle, > > struct fwnode_handle *sup_handle) > > { > > - struct device *sup_dev = NULL, *par_dev = NULL; > > + struct device *sup_dev = NULL, *par_dev = NULL, *con_dev = NULL; > > struct fwnode_link *link; > > struct device_link *dev_link; > > bool ret = false; > > @@ -2010,22 +2010,22 @@ static bool __fw_devlink_relax_cycles(struct device *con, > > > > sup_handle->flags |= FWNODE_FLAG_VISITED; > > > > - sup_dev = get_dev_from_fwnode(sup_handle); > > - > > /* Termination condition. */ > > - if (sup_dev == con) { > > + if (sup_handle == con_handle) { > > pr_debug("----- cycle: start -----\n"); > > ret = true; > > goto out; > > } > > > > + sup_dev = get_dev_from_fwnode(sup_handle); > > + con_dev = get_dev_from_fwnode(con_handle); > > /* > > * If sup_dev is bound to a driver and @con hasn't started binding to a > > * driver, sup_dev can't be a consumer of @con. So, no need to check > > * further. > > */ > > if (sup_dev && sup_dev->links.status == DL_DEV_DRIVER_BOUND && > > - con->links.status == DL_DEV_NO_DRIVER) { > > + con_dev && con_dev->links.status == DL_DEV_NO_DRIVER) { > > ret = false; > > goto out; > > } > > @@ -2034,7 +2034,7 @@ static bool __fw_devlink_relax_cycles(struct device *con, > > if (link->flags & FWLINK_FLAG_IGNORE) > > continue; > > > > - if (__fw_devlink_relax_cycles(con, link->supplier)) { > > + if (__fw_devlink_relax_cycles(con_handle, link->supplier)) { > > __fwnode_link_cycle(link); > > ret = true; > > } > > @@ -2049,7 +2049,7 @@ static bool __fw_devlink_relax_cycles(struct device *con, > > else > > par_dev = fwnode_get_next_parent_dev(sup_handle); > > > > - if (par_dev && __fw_devlink_relax_cycles(con, par_dev->fwnode)) { > > + if (par_dev && __fw_devlink_relax_cycles(con_handle, par_dev->fwnode)) { > > pr_debug("%pfwf: cycle: child of %pfwf\n", sup_handle, > > par_dev->fwnode); > > ret = true; > > @@ -2067,7 +2067,7 @@ static bool __fw_devlink_relax_cycles(struct device *con, > > !(dev_link->flags & DL_FLAG_CYCLE)) > > continue; > > > > - if (__fw_devlink_relax_cycles(con, > > + if (__fw_devlink_relax_cycles(con_handle, > > dev_link->supplier->fwnode)) { > > pr_debug("%pfwf: cycle: depends on %pfwf\n", sup_handle, > > dev_link->supplier->fwnode); > > @@ -2140,25 +2140,19 @@ static int fw_devlink_create_devlink(struct device *con, > > return -EINVAL; > > > > /* > > - * SYNC_STATE_ONLY device links don't block probing and supports cycles. > > - * So, one might expect that cycle detection isn't necessary for them. > > - * However, if the device link was marked as SYNC_STATE_ONLY because > > - * it's part of a cycle, then we still need to do cycle detection. This > > - * is because the consumer and supplier might be part of multiple cycles > > - * and we need to detect all those cycles. > > + * Don't try to optimize by not calling the cycle detection logic under > > + * certain conditions. There's always some corner case that won't get > > + * detected. > > */ > > - if (!device_link_flag_is_sync_state_only(flags) || > > - flags & DL_FLAG_CYCLE) { > > - device_links_write_lock(); > > - if (__fw_devlink_relax_cycles(con, sup_handle)) { > > - __fwnode_link_cycle(link); > > - flags = fw_devlink_get_flags(link->flags); > > - pr_debug("----- cycle: end -----\n"); > > - dev_info(con, "Fixed dependency cycle(s) with %pfwf\n", > > - sup_handle); > > - } > > - device_links_write_unlock(); > > + device_links_write_lock(); > > + if (__fw_devlink_relax_cycles(link->consumer, sup_handle)) { > > + __fwnode_link_cycle(link); > > + flags = fw_devlink_get_flags(link->flags); > > + pr_debug("----- cycle: end -----\n"); > > + pr_info("%pfwf: Fixed dependency cycle(s) with %pfwf\n", > > + link->consumer, sup_handle); > > } > > + device_links_write_unlock(); > > > > if (sup_handle->flags & FWNODE_FLAG_NOT_DEVICE) > > sup_dev = fwnode_get_next_parent_dev(sup_handle); >
Hi, On 28/10/2024 22:39, Saravana Kannan wrote: > On Mon, Oct 28, 2024 at 1:06 AM Tomi Valkeinen > <tomi.valkeinen@ideasonboard.com> wrote: >> >> Hi, >> >> On 26/10/2024 07:52, Saravana Kannan wrote: >>> In attempting to optimize fw_devlink runtime, I introduced numerous cycle >>> detection bugs by foregoing cycle detection logic under specific >>> conditions. Each fix has further narrowed the conditions for optimization. >>> >>> It's time to give up on these optimization attempts and just run the cycle >>> detection logic every time fw_devlink tries to create a device link. >>> >>> The specific bug report that triggered this fix involved a supplier fwnode >>> that never gets a device created for it. Instead, the supplier fwnode is >>> represented by the device that corresponds to an ancestor fwnode. >>> >>> In this case, fw_devlink didn't do any cycle detection because the cycle >>> detection logic is only run when a device link is created between the >>> devices that correspond to the actual consumer and supplier fwnodes. >>> >>> With this change, fw_devlink will run cycle detection logic even when >>> creating SYNC_STATE_ONLY proxy device links from a device that is an >>> ancestor of a consumer fwnode. >>> >>> Reported-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com> >>> Closes: https://lore.kernel.org/all/1a1ab663-d068-40fb-8c94-f0715403d276@ideasonboard.com/ >>> Fixes: 6442d79d880c ("driver core: fw_devlink: Improve detection of overlapping cycles") >>> Signed-off-by: Saravana Kannan <saravanak@google.com> >>> --- >>> Greg, >>> >>> I've tested this on my end and it looks ok and nothing fishy is going >>> on. You can pick this up once Tomi gives a Tested-by. >> >> I tested this on TI AM62 SK board. It has an LVDS (OLDI) display and a >> HDMI output, and both displays are connected to the same display >> subsystem. I tested with OLDI single and dual link cases, with and >> without HDMI, and in all cases probing works fine. >> >> Looks good on that front, so: >> >> Tested-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com> > > Great! Thanks! > >> You also asked for a diff of the devlinks. That part doesn't look so >> good to me, but probably you can tell if it's normal or not. > > TL;DR: All device links in a cycle get marked as > DL_FLAG_SYNC_STATE_ONLY and DL_FLAG_CYCLE (in addition to other > flags). All DL_FLAG_SYNC_STATE_ONLY (not all of them are cycles) will > get deleted after the consumer probes (since they are no longer needed > after that). My guess on what's going on is that with the patch, > fw_devlink found and marked more device links as cycles. Ones that in > the past weren't detected as being part of a cycle but coincidentally > the "post-init" dependency was the one that was getting ignored/not > enforced. So the actual links in a cycle getting deleted after all the > devices have probed is not a problem. Ok. Yep, it might all be fine. I still don't understand all that's going on here, so maybe look at one more case below. > You can enable the "cycle" logs in drivers/base/core.c so it's easier > to follow the cycles fw_devlink detected. But the logs are a bit > cryptic because it tries to print all the multiple cycles that were > detected using a recursive search. > > The non-cycle use for DL_FLAG_SYNC_STATE_ONLY is for parent devices to > put a "proxy-vote" (Hey supplier, you still have a consumer that > hasn't bound to a driver yet) for descendant (children, grand > children) devices that haven't been created yet. So, without the fix > it's possible some descendant child never got to probe and the > DL_FLAG_SYNC_STATE_ONLY device link stuck around. > > If you can confirm all the deleted device links fall into one of these > two categories, then there's no issue here. If you find cases that > aren't clear, then let me know which one and point to specific nodes > in an upstream DTS file and I can take a look. > > Every device link folder has a "sync_state_only" file that says if it > has the DL_FLAG_SYNC_STATE_ONLY set. But to check for the cycle flag, > you'll have to extend the debug log in device_link_add() that goes: > "Linked as a sync state only consumer to......" and print the "flags" param. I added this print. I thought I'll test without any non-upstream patches, so this is booting with the upstream k3-am625-sk.dtb, no overlays. I've attached boot log (with this patch applied), and devlink lists, without and with this patch. As the OLDI stuff is not upstream, I did expect to see less diff, and that is the case. It's still somewhat interesting diff: $ diff devlink-broken.txt devlink-fixed.txt 1d0 < i2c:1-0022--i2c:1-003b So that's the gpio expander (exp1: gpio@22 in k3-am625-sk.dts) and the hdmi bridge (sii9022: bridge-hdmi@3b in k3-am62x-sk-common.dtsi). And, indeed, in the log I can see: i2c 1-003b: Linked as a sync state only consumer to 1-0022 (flags 0x3c0) /bus@f0000/i2c@20010000/bridge-hdmi@3b Dropping the fwnode link to /bus@f0000/i2c@20010000/gpio@22 If I'm not mistaken, the above means that the framework has decided there's a (possible) probe time cyclic dependency between the gpio expander and the hdmi bridge, right? I don't think that makes sense, and I was trying to understand why the framework has arrived to such a conclusion, but it's not clear to me. Also, I can see, e.g.: /bus@f0000/i2c@20010000: cycle: depends on /bus@f0000/dss@30200000 So somehow the i2c bus has a dependency on the DSS? The DSS does not depend on the i2c, but the HDMI does, so I can understand that the DSS would have a dependency to i2c. But the other way around? Tomi >> >> $ diff devlink-single-broken.txt devlink-single-fixed.txt > > I was hoping you'd give me some line count diff too to get a sense of > if it's wreaking havoc or not. But based on my local testing on > different hardware, I'm expecting a very small number of device links > are getting affected. > >> 2d1 >> < i2c:1-0022--i2c:1-003b >> 11d9 >> < >> platform:44043000.system-controller:clock-controller--platform:20010000.i2c >> 27d24 >> < platform:44043000.system-controller:clock-controller--platform:601000.gpio >> 42d38 >> < >> platform:44043000.system-controller:power-controller--platform:20010000.i2c >> 58d53 >> < platform:44043000.system-controller:power-controller--platform:601000.gpio >> 74d68 >> < platform:4d000000.mailbox--platform:44043000.system-controller > > I took a quick look at this one in > arch/arm64/boot/dts/ti/k3-am62-main.dtsi which I assume is part of the > device you are testing on and I couldn't find a cycle. But with dtsi > and dts files, it's hard to find these manually. Let me know if > fw_devlink is thinking there's a cycle where there is none. > >> 76d69 >> < platform:601000.gpio--i2c:1-0022 >> 80d72 >> < platform:bus@f0000:interrupt-controller@a00000--platform:601000.gpio >> 82d73 >> < platform:f4000.pinctrl--i2c:1-0022 >> 84d74 >> < platform:f4000.pinctrl--platform:20010000.i2c >> >> "i2c:1-003b" is the hdmi bridge, "i2c:1-0022" is a gpio expander. So, >> for example, we lose the devlink between the gpio expander and the hdmi >> bridge. The expander is used for interrupts. There's an interrupt line >> from the HDMI bridge to the expander, and from there there's an >> interrupt line going to the SoC. >> >> Also, I noticed the devlinks change if I load the display drivers. The >> above is before loading. Comparing the loaded/not-loaded: > > Yeah, DL_FLAG_SYNC_STATE_ONLY device links vanishing as more devices > probe is not a problem. That's working as intended. > > Thanks, > Saravana > >> >> $ diff devlink-dual-fixed.txt devlink-dual-fixed-loaded.txt >> 3d2 >> < i2c:1-003b--platform:30200000.dss >> 23d21 >> < >> platform:44043000.system-controller:clock-controller--platform:30200000.dss >> 52d49 >> < >> platform:44043000.system-controller:power-controller--platform:30200000.dss >> 73d69 >> < platform:display--platform:30200000.dss >> 78d73 >> < platform:f4000.pinctrl--platform:30200000.dss >> 97a93 >> > regulator:regulator.0--platform:display >> >> Tomi >> >> >>> Thanks, >>> Saravana >>> >>> v1 -> v2: >>> - Removed the RFC tag >>> - Remaned the subject. v1 is https://lore.kernel.org/all/20241025223721.184998-1-saravanak@google.com/T/#u >>> - Added a NULL check to avoid NULL pointer deref >>> >>> drivers/base/core.c | 46 ++++++++++++++++++++------------------------- >>> 1 file changed, 20 insertions(+), 26 deletions(-) >>> >>> diff --git a/drivers/base/core.c b/drivers/base/core.c >>> index 3b13fed1c3e3..f96f2e4c76b4 100644 >>> --- a/drivers/base/core.c >>> +++ b/drivers/base/core.c >>> @@ -1990,10 +1990,10 @@ static struct device *fwnode_get_next_parent_dev(const struct fwnode_handle *fwn >>> * >>> * Return true if one or more cycles were found. Otherwise, return false. >>> */ >>> -static bool __fw_devlink_relax_cycles(struct device *con, >>> +static bool __fw_devlink_relax_cycles(struct fwnode_handle *con_handle, >>> struct fwnode_handle *sup_handle) >>> { >>> - struct device *sup_dev = NULL, *par_dev = NULL; >>> + struct device *sup_dev = NULL, *par_dev = NULL, *con_dev = NULL; >>> struct fwnode_link *link; >>> struct device_link *dev_link; >>> bool ret = false; >>> @@ -2010,22 +2010,22 @@ static bool __fw_devlink_relax_cycles(struct device *con, >>> >>> sup_handle->flags |= FWNODE_FLAG_VISITED; >>> >>> - sup_dev = get_dev_from_fwnode(sup_handle); >>> - >>> /* Termination condition. */ >>> - if (sup_dev == con) { >>> + if (sup_handle == con_handle) { >>> pr_debug("----- cycle: start -----\n"); >>> ret = true; >>> goto out; >>> } >>> >>> + sup_dev = get_dev_from_fwnode(sup_handle); >>> + con_dev = get_dev_from_fwnode(con_handle); >>> /* >>> * If sup_dev is bound to a driver and @con hasn't started binding to a >>> * driver, sup_dev can't be a consumer of @con. So, no need to check >>> * further. >>> */ >>> if (sup_dev && sup_dev->links.status == DL_DEV_DRIVER_BOUND && >>> - con->links.status == DL_DEV_NO_DRIVER) { >>> + con_dev && con_dev->links.status == DL_DEV_NO_DRIVER) { >>> ret = false; >>> goto out; >>> } >>> @@ -2034,7 +2034,7 @@ static bool __fw_devlink_relax_cycles(struct device *con, >>> if (link->flags & FWLINK_FLAG_IGNORE) >>> continue; >>> >>> - if (__fw_devlink_relax_cycles(con, link->supplier)) { >>> + if (__fw_devlink_relax_cycles(con_handle, link->supplier)) { >>> __fwnode_link_cycle(link); >>> ret = true; >>> } >>> @@ -2049,7 +2049,7 @@ static bool __fw_devlink_relax_cycles(struct device *con, >>> else >>> par_dev = fwnode_get_next_parent_dev(sup_handle); >>> >>> - if (par_dev && __fw_devlink_relax_cycles(con, par_dev->fwnode)) { >>> + if (par_dev && __fw_devlink_relax_cycles(con_handle, par_dev->fwnode)) { >>> pr_debug("%pfwf: cycle: child of %pfwf\n", sup_handle, >>> par_dev->fwnode); >>> ret = true; >>> @@ -2067,7 +2067,7 @@ static bool __fw_devlink_relax_cycles(struct device *con, >>> !(dev_link->flags & DL_FLAG_CYCLE)) >>> continue; >>> >>> - if (__fw_devlink_relax_cycles(con, >>> + if (__fw_devlink_relax_cycles(con_handle, >>> dev_link->supplier->fwnode)) { >>> pr_debug("%pfwf: cycle: depends on %pfwf\n", sup_handle, >>> dev_link->supplier->fwnode); >>> @@ -2140,25 +2140,19 @@ static int fw_devlink_create_devlink(struct device *con, >>> return -EINVAL; >>> >>> /* >>> - * SYNC_STATE_ONLY device links don't block probing and supports cycles. >>> - * So, one might expect that cycle detection isn't necessary for them. >>> - * However, if the device link was marked as SYNC_STATE_ONLY because >>> - * it's part of a cycle, then we still need to do cycle detection. This >>> - * is because the consumer and supplier might be part of multiple cycles >>> - * and we need to detect all those cycles. >>> + * Don't try to optimize by not calling the cycle detection logic under >>> + * certain conditions. There's always some corner case that won't get >>> + * detected. >>> */ >>> - if (!device_link_flag_is_sync_state_only(flags) || >>> - flags & DL_FLAG_CYCLE) { >>> - device_links_write_lock(); >>> - if (__fw_devlink_relax_cycles(con, sup_handle)) { >>> - __fwnode_link_cycle(link); >>> - flags = fw_devlink_get_flags(link->flags); >>> - pr_debug("----- cycle: end -----\n"); >>> - dev_info(con, "Fixed dependency cycle(s) with %pfwf\n", >>> - sup_handle); >>> - } >>> - device_links_write_unlock(); >>> + device_links_write_lock(); >>> + if (__fw_devlink_relax_cycles(link->consumer, sup_handle)) { >>> + __fwnode_link_cycle(link); >>> + flags = fw_devlink_get_flags(link->flags); >>> + pr_debug("----- cycle: end -----\n"); >>> + pr_info("%pfwf: Fixed dependency cycle(s) with %pfwf\n", >>> + link->consumer, sup_handle); >>> } >>> + device_links_write_unlock(); >>> >>> if (sup_handle->flags & FWNODE_FLAG_NOT_DEVICE) >>> sup_dev = fwnode_get_next_parent_dev(sup_handle); >> Booting Linux on physical CPU 0x0000000000 [0x410fd034] Linux version 6.12.0-rc4+ (tomba@deskari) (aarch64-linux-gnu-gcc (Ubuntu 13.2.0-23ubuntu4) 13.2.0, GNU ld (GNU Binutils for Ubuntu) 2.42) #5 SMP PREEMPT Tue Oct 29 12:57:21 EET 2024 Machine model: Texas Instruments AM625 SK efi: UEFI not found. Reserved memory: bypass linux,cma node, using cmdline CMA params instead OF: reserved mem: node linux,cma compatible matching fail OF: reserved mem: 0x000000009ca00000..0x000000009cafffff (1024 KiB) map non-reusable ramoops@9ca00000 Reserved memory: created DMA memory pool at 0x000000009db00000, size 12 MiB OF: reserved mem: initialized node r5f-dma-memory@9db00000, compatible id shared-dma-pool OF: reserved mem: 0x000000009db00000..0x000000009e6fffff (12288 KiB) nomap non-reusable r5f-dma-memory@9db00000 OF: reserved mem: 0x000000009e780000..0x000000009e7fffff (512 KiB) nomap non-reusable tfa@9e780000 OF: reserved mem: 0x000000009e800000..0x000000009fffffff (24576 KiB) nomap non-reusable optee@9e800000 NUMA: Faking a node at [mem 0x0000000080000000-0x00000000ffffffff] NODE_DATA(0) allocated [mem 0xffbc7700-0xffbca0ff] Zone ranges: DMA [mem 0x0000000080000000-0x00000000ffffffff] DMA32 empty Normal empty Movable zone start for each node Early memory node ranges node 0: [mem 0x0000000080000000-0x000000009dafffff] node 0: [mem 0x000000009db00000-0x000000009e6fffff] node 0: [mem 0x000000009e700000-0x000000009e77ffff] node 0: [mem 0x000000009e780000-0x000000009fffffff] node 0: [mem 0x00000000a0000000-0x00000000ffffffff] Initmem setup node 0 [mem 0x0000000080000000-0x00000000ffffffff] cma: Reserved 64 MiB at 0x00000000f9a00000 on node -1 psci: probing for conduit method from DT. psci: PSCIv1.1 detected in firmware. psci: Using standard PSCI v0.2 function IDs psci: Trusted OS migration not required psci: SMC Calling Convention v1.4 percpu: Embedded 34 pages/cpu s98832 r8192 d32240 u139264 pcpu-alloc: s98832 r8192 d32240 u139264 alloc=34*4096 pcpu-alloc: [0] 0 [0] 1 [0] 2 [0] 3 Detected VIPT I-cache on CPU0 CPU features: detected: GIC system register CPU interface CPU features: detected: ARM erratum 845719 alternatives: applying boot alternatives Kernel command line: console=ttyS2,115200n8 root=/dev/nfs rw nfsroot=/home/tomba/nfs/rootfs32,v3,tcp ip=::::buildroot:eth0:dhcp cma=64M Dentry cache hash table entries: 262144 (order: 9, 2097152 bytes, linear) Inode-cache hash table entries: 131072 (order: 8, 1048576 bytes, linear) Fallback order for Node 0: 0 Built 1 zonelists, mobility grouping on. Total pages: 524288 Policy zone: DMA mem auto-init: stack:all(zero), heap alloc:off, heap free:off stackdepot: allocating hash table via alloc_large_system_hash stackdepot hash table entries: 131072 (order: 9, 2097152 bytes, linear) software IO TLB: SWIOTLB bounce buffer size adjusted to 2MB software IO TLB: area num 4. software IO TLB: mapped [mem 0x00000000f9300000-0x00000000f9500000] (2MB) SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=4, Nodes=1 ftrace: allocating 48749 entries in 191 pages ftrace: allocated 191 pages with 7 groups trace event string verifier disabled Running RCU self tests Running RCU synchronous self tests rcu: Preemptible hierarchical RCU implementation. rcu: RCU event tracing is enabled. rcu: RCU lockdep checking is enabled. rcu: RCU restricting CPUs from NR_CPUS=512 to nr_cpu_ids=4. Trampoline variant of Tasks RCU enabled. Rude variant of Tasks RCU enabled. Tracing variant of Tasks RCU enabled. rcu: RCU calculated value of scheduler-enlistment delay is 25 jiffies. rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=4 Running RCU synchronous self tests RCU Tasks: Setting shift to 2 and lim to 1 rcu_task_cb_adjust=1 rcu_task_cpu_ids=4. RCU Tasks Rude: Setting shift to 2 and lim to 1 rcu_task_cb_adjust=1 rcu_task_cpu_ids=4. RCU Tasks Trace: Setting shift to 2 and lim to 1 rcu_task_cb_adjust=1 rcu_task_cpu_ids=4. NR_IRQS: 64, nr_irqs: 64, preallocated irqs: 0 GICv3: GIC: Using split EOI/Deactivate mode GICv3: 256 SPIs implemented GICv3: 0 Extended SPIs implemented Root IRQ handler: gic_handle_irq GICv3: GICv3 features: 16 PPIs GICv3: GICD_CTRL.DS=0, SCR_EL3.FIQ=1 GICv3: CPU0: found redistributor 0 region 0:0x0000000001880000 ITS [mem 0x01820000-0x0182ffff] GIC: enabling workaround for ITS: Socionext Synquacer pre-ITS ITS@0x0000000001820000: Devices Table too large, reduce ids 20->19 ITS@0x0000000001820000: allocated 524288 Devices @80800000 (flat, esz 8, psz 64K, shr 0) ITS: using cache flushing for cmd queue GICv3: using LPI property table @0x0000000080300000 GIC: using cache flushing for LPI property table GICv3: CPU0: using allocated LPI pending table @0x0000000080310000 rcu: srcu_init: Setting srcu_struct sizes based on contention. arch_timer: cp15 timer(s) running at 200.00MHz (phys). clocksource: arch_sys_counter: mask: 0x3ffffffffffffff max_cycles: 0x2e2049d3e8, max_idle_ns: 440795210634 ns sched_clock: 58 bits at 200MHz, resolution 5ns, wraps every 4398046511102ns Console: colour dummy device 80x25 Lock dependency validator: Copyright (c) 2006 Red Hat, Inc., Ingo Molnar ... MAX_LOCKDEP_SUBCLASSES: 8 ... MAX_LOCK_DEPTH: 48 ... MAX_LOCKDEP_KEYS: 8192 ... CLASSHASH_SIZE: 4096 ... MAX_LOCKDEP_ENTRIES: 32768 ... MAX_LOCKDEP_CHAINS: 65536 ... CHAINHASH_SIZE: 32768 memory used by lock dependency info: 6429 kB memory used for stack traces: 4224 kB per task-struct memory footprint: 1920 bytes Calibrating delay loop (skipped), value calculated using timer frequency.. 400.00 BogoMIPS (lpj=800000) pid_max: default: 32768 minimum: 301 LSM: initializing lsm=capability Mount-cache hash table entries: 4096 (order: 3, 32768 bytes, linear) Mountpoint-cache hash table entries: 4096 (order: 3, 32768 bytes, linear) Running RCU synchronous self tests Running RCU synchronous self tests Running RCU Tasks wait API self tests Running RCU Tasks Rude wait API self tests Running RCU Tasks Trace wait API self tests rcu: Hierarchical SRCU implementation. rcu: Max phase no-delay instances is 1000. Timer migration: 1 hierarchy levels; 8 children per group; 1 crossnode level Callback from call_rcu_tasks_trace() invoked. EFI services will not be available. smp: Bringing up secondary CPUs ... Detected VIPT I-cache on CPU1 GICv3: CPU1: found redistributor 1 region 0:0x00000000018a0000 GICv3: CPU1: using allocated LPI pending table @0x0000000080320000 CPU1: Booted secondary processor 0x0000000001 [0x410fd034] Detected VIPT I-cache on CPU2 GICv3: CPU2: found redistributor 2 region 0:0x00000000018c0000 GICv3: CPU2: using allocated LPI pending table @0x0000000080330000 CPU2: Booted secondary processor 0x0000000002 [0x410fd034] Detected VIPT I-cache on CPU3 GICv3: CPU3: found redistributor 3 region 0:0x00000000018e0000 GICv3: CPU3: using allocated LPI pending table @0x0000000080340000 CPU3: Booted secondary processor 0x0000000003 [0x410fd034] smp: Brought up 1 node, 4 CPUs SMP: Total of 4 processors activated. CPU: All CPU(s) started at EL2 CPU features: detected: 32-bit EL0 Support CPU features: detected: CRC32 instructions alternatives: applying system-wide alternatives Memory: 1886264K/2097152K available (15616K kernel code, 4046K rwdata, 6308K rodata, 5888K init, 16700K bss, 133100K reserved, 65536K cma-reserved) devtmpfs: initialized device: 'platform': device_add device: 'memory': device_add device: 'memory16': device_add device: 'memory17': device_add device: 'memory18': device_add device: 'memory19': device_add device: 'memory20': device_add device: 'memory21': device_add device: 'memory22': device_add device: 'memory23': device_add device: 'memory24': device_add device: 'memory25': device_add device: 'memory26': device_add device: 'memory27': device_add device: 'memory28': device_add device: 'memory29': device_add device: 'memory30': device_add device: 'memory31': device_add device: 'node': device_add device: 'node0': device_add device: 'cpu': device_add device: 'cpu0': device_add device: 'cpu1': device_add device: 'cpu2': device_add device: 'cpu3': device_add device: 'container': device_add device: 'workqueue': device_add Running RCU synchronous self tests Running RCU synchronous self tests DMA-API: preallocated 65536 debug entries DMA-API: debugging enabled by kernel config clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns futex hash table entries: 1024 (order: 5, 131072 bytes, linear) 20560 pages in range for non-PLT usage 512080 pages in range for PLT usage pinctrl core: initialized pinctrl subsystem device: 'reg-dummy': device_add Callback from call_rcu_tasks() invoked. DMI not present or invalid. device: 'regulator.0': device_add NET: Registered PF_NETLINK/PF_ROUTE protocol family DMA: preallocated 256 KiB GFP_KERNEL pool for atomic allocations DMA: preallocated 256 KiB GFP_KERNEL|GFP_DMA pool for atomic allocations DMA: preallocated 256 KiB GFP_KERNEL|GFP_DMA32 pool for atomic allocations audit: initializing netlink subsys (disabled) audit: type=2000 audit(0.352:1): state=initialized audit_enabled=0 res=1 device: 'vtcon0': device_add thermal_sys: Registered thermal governor 'step_wise' thermal_sys: Registered thermal governor 'power_allocator' cpuidle: using governor menu hw-breakpoint: found 6 breakpoint and 4 watchpoint registers. ASID allocator initialised with 65536 entries Serial: AMBA PL011 UART driver device: '9ca00000.ramoops': device_add device: 'firmware:optee': device_add device: 'firmware:psci': device_add device: 'timer-cl0-cpu0': device_add /timer-cl0-cpu0 Linked as a fwnode consumer to /bus@f0000/interrupt-controller@1800000 platform timer-cl0-cpu0: Not linking /bus@f0000/interrupt-controller@1800000 - might never become dev /timer-cl0-cpu0 Dropping the fwnode link to /bus@f0000/interrupt-controller@1800000 device: 'pmu': device_add /pmu Linked as a fwnode consumer to /bus@f0000/interrupt-controller@1800000 platform pmu: Not linking /bus@f0000/interrupt-controller@1800000 - might never become dev /pmu Dropping the fwnode link to /bus@f0000/interrupt-controller@1800000 device: 'bus@f0000': device_add /bus@f0000/bus@b00000/target-module@2b300050 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/power-controller /bus@f0000/bus@b00000/target-module@2b300050 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/clock-controller /bus@f0000/bus@b00000/rtc@2b1f0000 Linked as a fwnode consumer to /bus@f0000/interrupt-controller@1800000 /bus@f0000/bus@b00000/rtc@2b1f0000 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/clock-controller /bus@f0000/bus@b00000/rtc@2b1f0000 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/power-controller /bus@f0000/bus@b00000/temperature-sensor@b00000 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/power-controller /bus@f0000/interrupt-controller@1800000 Linked as a fwnode consumer to /bus@f0000/interrupt-controller@1800000 /bus@f0000/bus@100000/clock-controller@82e0 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/clock-controller /bus@f0000/bus@100000/clock-controller@82e4 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/clock-controller /bus@f0000/bus@48000000/mailbox@4d000000 Linked as a fwnode consumer to /bus@f0000/interrupt-controller@1800000 /bus@f0000/bus@48000000/interrupt-controller@48000000 Linked as a fwnode consumer to /bus@f0000/interrupt-controller@1800000 /bus@f0000/bus@48000000/dma-controller@485c0100 Linked as a fwnode consumer to /bus@f0000/bus@48000000/interrupt-controller@48000000 /bus@f0000/bus@48000000/dma-controller@485c0000 Linked as a fwnode consumer to /bus@f0000/bus@48000000/interrupt-controller@48000000 /bus@f0000/system-controller@44043000 Linked as a fwnode consumer to /bus@f0000/bus@48000000/mailbox@4d000000 /bus@f0000/timer@2400000 Linked as a fwnode consumer to /bus@f0000/interrupt-controller@1800000 /bus@f0000/timer@2400000 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/clock-controller /bus@f0000/timer@2400000 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/power-controller /bus@f0000/timer@2410000 Linked as a fwnode consumer to /bus@f0000/interrupt-controller@1800000 /bus@f0000/timer@2410000 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/clock-controller /bus@f0000/timer@2410000 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/power-controller /bus@f0000/timer@2420000 Linked as a fwnode consumer to /bus@f0000/interrupt-controller@1800000 /bus@f0000/timer@2420000 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/clock-controller /bus@f0000/timer@2420000 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/power-controller /bus@f0000/timer@2430000 Linked as a fwnode consumer to /bus@f0000/interrupt-controller@1800000 /bus@f0000/timer@2430000 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/clock-controller /bus@f0000/timer@2430000 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/power-controller /bus@f0000/timer@2440000 Linked as a fwnode consumer to /bus@f0000/interrupt-controller@1800000 /bus@f0000/timer@2440000 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/clock-controller /bus@f0000/timer@2440000 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/power-controller /bus@f0000/timer@2450000 Linked as a fwnode consumer to /bus@f0000/interrupt-controller@1800000 /bus@f0000/timer@2450000 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/clock-controller /bus@f0000/timer@2450000 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/power-controller /bus@f0000/timer@2460000 Linked as a fwnode consumer to /bus@f0000/interrupt-controller@1800000 /bus@f0000/timer@2460000 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/clock-controller /bus@f0000/timer@2460000 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/power-controller /bus@f0000/timer@2470000 Linked as a fwnode consumer to /bus@f0000/interrupt-controller@1800000 /bus@f0000/timer@2470000 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/clock-controller /bus@f0000/timer@2470000 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/power-controller /bus@f0000/serial@2800000 Linked as a fwnode consumer to /bus@f0000/interrupt-controller@1800000 /bus@f0000/serial@2800000 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/power-controller /bus@f0000/serial@2800000 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/clock-controller /bus@f0000/serial@2800000 Linked as a fwnode consumer to /bus@f0000/pinctrl@f4000/main-uart0-default-pins /bus@f0000/i2c@20000000 Linked as a fwnode consumer to /bus@f0000/interrupt-controller@1800000 /bus@f0000/i2c@20000000 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/power-controller /bus@f0000/i2c@20000000 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/clock-controller /bus@f0000/i2c@20000000 Linked as a fwnode consumer to /bus@f0000/pinctrl@f4000/main-i2c0-default-pins /bus@f0000/i2c@20000000/tps6598x@3f/connector Linked as a fwnode consumer to /bus@f0000/dwc3-usb@f900000/usb@31000000 /bus@f0000/i2c@20010000 Linked as a fwnode consumer to /bus@f0000/interrupt-controller@1800000 /bus@f0000/i2c@20010000 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/power-controller /bus@f0000/i2c@20010000 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/clock-controller /bus@f0000/i2c@20010000 Linked as a fwnode consumer to /bus@f0000/pinctrl@f4000/main-i2c1-default-pins /bus@f0000/i2c@20010000/audio-codec@1b Linked as a fwnode consumer to /regulator-2 /bus@f0000/i2c@20010000/audio-codec@1b Linked as a fwnode consumer to /regulator-5 /bus@f0000/i2c@20010000/bridge-hdmi@3b Linked as a fwnode consumer to /bus@f0000/i2c@20010000/gpio@22 /bus@f0000/i2c@20010000/bridge-hdmi@3b Linked as a fwnode consumer to /bus@f0000/dss@30200000 /bus@f0000/i2c@20010000/bridge-hdmi@3b Linked as a fwnode consumer to /connector-hdmi /bus@f0000/i2c@20010000/gpio@22 Linked as a fwnode consumer to /bus@f0000/gpio@601000 /bus@f0000/i2c@20010000/gpio@22 Linked as a fwnode consumer to /bus@f0000/pinctrl@f4000/main-gpio1-ioexp-intr-default-pins /bus@f0000/i2c@20020000 Linked as a fwnode consumer to /bus@f0000/interrupt-controller@1800000 /bus@f0000/i2c@20020000 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/power-controller /bus@f0000/i2c@20020000 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/clock-controller /bus@f0000/i2c@20020000 Linked as a fwnode consumer to /bus@f0000/pinctrl@f4000/main-i2c2-default-pins /bus@f0000/interrupt-controller@a00000 Linked as a fwnode consumer to /bus@f0000/interrupt-controller@1800000 /bus@f0000/gpio@600000 Linked as a fwnode consumer to /bus@f0000/interrupt-controller@a00000 /bus@f0000/gpio@600000 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/power-controller /bus@f0000/gpio@600000 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/clock-controller /bus@f0000/gpio@601000 Linked as a fwnode consumer to /bus@f0000/interrupt-controller@a00000 /bus@f0000/gpio@601000 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/power-controller /bus@f0000/gpio@601000 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/clock-controller /bus@f0000/mmc@fa10000 Linked as a fwnode consumer to /bus@f0000/interrupt-controller@1800000 /bus@f0000/mmc@fa10000 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/power-controller /bus@f0000/mmc@fa10000 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/clock-controller /bus@f0000/mmc@fa10000 Linked as a fwnode consumer to /bus@f0000/pinctrl@f4000/main-mmc0-default-pins /bus@f0000/mmc@fa00000 Linked as a fwnode consumer to /bus@f0000/interrupt-controller@1800000 /bus@f0000/mmc@fa00000 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/power-controller /bus@f0000/mmc@fa00000 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/clock-controller /bus@f0000/mmc@fa00000 Linked as a fwnode consumer to /bus@f0000/pinctrl@f4000/main-mmc1-default-pins /bus@f0000/mmc@fa00000 Linked as a fwnode consumer to /regulator-3 /bus@f0000/mmc@fa00000 Linked as a fwnode consumer to /regulator-4 /bus@f0000/dwc3-usb@f900000 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/clock-controller /bus@f0000/dwc3-usb@f900000 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/power-controller /bus@f0000/dwc3-usb@f900000/usb@31000000 Linked as a fwnode consumer to /bus@f0000/interrupt-controller@1800000 /bus@f0000/dwc3-usb@f900000/usb@31000000 Linked as a fwnode consumer to /bus@f0000/i2c@20000000/tps6598x@3f/connector /bus@f0000/dwc3-usb@f910000 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/clock-controller /bus@f0000/dwc3-usb@f910000 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/power-controller /bus@f0000/dwc3-usb@f910000/usb@31100000 Linked as a fwnode consumer to /bus@f0000/interrupt-controller@1800000 /bus@f0000/dwc3-usb@f910000/usb@31100000 Linked as a fwnode consumer to /bus@f0000/pinctrl@f4000/main-usb1-default-pins /bus@f0000/bus@fc00000/spi@fc40000 Linked as a fwnode consumer to /bus@f0000/interrupt-controller@1800000 /bus@f0000/bus@fc00000/spi@fc40000 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/clock-controller /bus@f0000/bus@fc00000/spi@fc40000 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/power-controller /bus@f0000/bus@fc00000/spi@fc40000 Linked as a fwnode consumer to /bus@f0000/pinctrl@f4000/ospi0-default-pins /bus@f0000/gpu@fd00000 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/clock-controller /bus@f0000/gpu@fd00000 Linked as a fwnode consumer to /bus@f0000/interrupt-controller@1800000 /bus@f0000/gpu@fd00000 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/power-controller /bus@f0000/ethernet@8000000 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/clock-controller /bus@f0000/ethernet@8000000 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/power-controller /bus@f0000/ethernet@8000000 Linked as a fwnode consumer to /bus@f0000/pinctrl@f4000/main-rgmii1-default-pins /bus@f0000/ethernet@8000000 Linked as a fwnode consumer to /bus@f0000/pinctrl@f4000/main-rgmii2-default-pins /bus@f0000/ethernet@8000000/ethernet-ports/port@1 Linked as a fwnode consumer to /bus@f0000/bus@100000/phy@4044 /bus@f0000/ethernet@8000000/ethernet-ports/port@2 Linked as a fwnode consumer to /bus@f0000/bus@100000/phy@4044 /bus@f0000/ethernet@8000000/mdio@f00 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/clock-controller /bus@f0000/ethernet@8000000/mdio@f00 Linked as a fwnode consumer to /bus@f0000/pinctrl@f4000/main-mdio1-default-pins /bus@f0000/ethernet@8000000/cpts@3d000 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/clock-controller /bus@f0000/ethernet@8000000/cpts@3d000 Linked as a fwnode consumer to /bus@f0000/interrupt-controller@1800000 /bus@f0000/dss@30200000 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/power-controller /bus@f0000/dss@30200000 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/clock-controller /bus@f0000/dss@30200000 Linked as a fwnode consumer to /clock-divider-oldi /bus@f0000/dss@30200000 Linked as a fwnode consumer to /bus@f0000/interrupt-controller@1800000 /bus@f0000/dss@30200000 Linked as a fwnode consumer to /bus@f0000/pinctrl@f4000/main-dss0-default-pins /bus@f0000/dss@30200000 Linked as a fwnode consumer to /bus@f0000/i2c@20010000/bridge-hdmi@3b /bus@f0000/mailbox@29000000 Linked as a fwnode consumer to /bus@f0000/interrupt-controller@1800000 /bus@f0000/watchdog@e000000 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/clock-controller /bus@f0000/watchdog@e000000 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/power-controller /bus@f0000/watchdog@e010000 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/clock-controller /bus@f0000/watchdog@e010000 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/power-controller /bus@f0000/watchdog@e020000 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/clock-controller /bus@f0000/watchdog@e020000 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/power-controller /bus@f0000/watchdog@e030000 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/clock-controller /bus@f0000/watchdog@e030000 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/power-controller /bus@f0000/watchdog@e0f0000 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/clock-controller /bus@f0000/watchdog@e0f0000 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/power-controller /bus@f0000/audio-controller@2b10000 Linked as a fwnode consumer to /bus@f0000/interrupt-controller@1800000 /bus@f0000/audio-controller@2b10000 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/clock-controller /bus@f0000/audio-controller@2b10000 Linked as a fwnode consumer to /bus@f0000/system-controller@44043000/power-controller /bus@f0000/audio-controller@2b10000 Linked as a fwnode consumer to /bus@f0000/pinctrl@f4000/main-mcasp1-default-pins platform bus@f0000: Not linking /bus@f0000/interrupt-controller@1800000 - might never become dev ----- cycle: start ----- /bus@f0000/interrupt-controller@1800000: cycle: depends on /bus@f0000/interrupt-controller@1800000 ----- cycle: end ----- /bus@f0000/interrupt-controller@1800000: Fixed dependency cycle(s) with /bus@f0000/interrupt-controller@1800000 platform bus@f0000: Not linking /bus@f0000/interrupt-controller@1800000 - might never become dev platform bus@f0000: Not linking /bus@f0000/interrupt-controller@1800000 - might never become dev platform bus@f0000: Not linking /bus@f0000/interrupt-controller@1800000 - might never become dev platform bus@f0000: Not linking /bus@f0000/interrupt-controller@1800000 - might never become dev platform bus@f0000: Not linking /bus@f0000/interrupt-controller@1800000 - might never become dev platform bus@f0000: Not linking /bus@f0000/interrupt-controller@1800000 - might never become dev platform bus@f0000: Not linking /bus@f0000/interrupt-controller@1800000 - might never become dev platform bus@f0000: Not linking /bus@f0000/interrupt-controller@1800000 - might never become dev platform bus@f0000: Not linking /bus@f0000/interrupt-controller@1800000 - might never become dev platform bus@f0000: Not linking /bus@f0000/interrupt-controller@1800000 - might never become dev platform bus@f0000: Not linking /bus@f0000/interrupt-controller@1800000 - might never become dev platform bus@f0000: Not linking /bus@f0000/interrupt-controller@1800000 - might never become dev platform bus@f0000: Not linking /bus@f0000/interrupt-controller@1800000 - might never become dev ----- cycle: start ----- /bus@f0000/dwc3-usb@f900000/usb@31000000: cycle: depends on /bus@f0000/i2c@20000000/tps6598x@3f/connector /bus@f0000/i2c@20000000/tps6598x@3f/connector: cycle: depends on /bus@f0000/dwc3-usb@f900000/usb@31000000 ----- cycle: end ----- /bus@f0000/i2c@20000000/tps6598x@3f/connector: Fixed dependency cycle(s) with /bus@f0000/dwc3-usb@f900000/usb@31000000 platform bus@f0000: Not linking /bus@f0000/interrupt-controller@1800000 - might never become dev ----- cycle: start ----- /bus@f0000/dss@30200000: cycle: depends on /bus@f0000/i2c@20010000/bridge-hdmi@3b /bus@f0000/i2c@20010000/bridge-hdmi@3b: cycle: depends on /bus@f0000/dss@30200000 ----- cycle: end ----- /bus@f0000/i2c@20010000/bridge-hdmi@3b: Fixed dependency cycle(s) with /bus@f0000/dss@30200000 platform bus@f0000: Not linking /bus@f0000/interrupt-controller@1800000 - might never become dev platform bus@f0000: Not linking /bus@f0000/interrupt-controller@1800000 - might never become dev platform bus@f0000: Not linking /bus@f0000/interrupt-controller@1800000 - might never become dev platform bus@f0000: Not linking /bus@f0000/interrupt-controller@1800000 - might never become dev ----- cycle: start ----- /bus@f0000/i2c@20000000/tps6598x@3f/connector: cycle: depends on /bus@f0000/dwc3-usb@f900000/usb@31000000 /bus@f0000/dwc3-usb@f900000/usb@31000000: cycle: depends on /bus@f0000/i2c@20000000/tps6598x@3f/connector ----- cycle: end ----- /bus@f0000/dwc3-usb@f900000/usb@31000000: Fixed dependency cycle(s) with /bus@f0000/i2c@20000000/tps6598x@3f/connector platform bus@f0000: Not linking /bus@f0000/interrupt-controller@1800000 - might never become dev platform bus@f0000: Not linking /bus@f0000/interrupt-controller@1800000 - might never become dev platform bus@f0000: Not linking /bus@f0000/interrupt-controller@1800000 - might never become dev platform bus@f0000: Not linking /bus@f0000/interrupt-controller@1800000 - might never become dev platform bus@f0000: Not linking /bus@f0000/interrupt-controller@1800000 - might never become dev ----- cycle: start ----- /bus@f0000/i2c@20010000/bridge-hdmi@3b: cycle: depends on /bus@f0000/dss@30200000 /bus@f0000/dss@30200000: cycle: depends on /bus@f0000/i2c@20010000/bridge-hdmi@3b ----- cycle: end ----- /bus@f0000/dss@30200000: Fixed dependency cycle(s) with /bus@f0000/i2c@20010000/bridge-hdmi@3b platform bus@f0000: Not linking /bus@f0000/interrupt-controller@1800000 - might never become dev platform bus@f0000: Not linking /clock-divider-oldi - might never become dev platform bus@f0000: Not linking /bus@f0000/interrupt-controller@1800000 - might never become dev platform bus@f0000: Not linking /bus@f0000/interrupt-controller@1800000 - might never become dev device: 'bus@f0000:bus@4000000': device_add device: '4084000.pinctrl': device_add device: '4100000.esm': device_add device: 'bus@f0000:bus@b00000': device_add platform bus@f0000:bus@b00000: Not linking /bus@f0000/interrupt-controller@1800000 - might never become dev device: '43000000.syscon': device_add device: '43000014.chipid': device_add device: '43000200.ethernet-mac-syscon': device_add device: '43004008.syscon': device_add device: '43004018.syscon': device_add device: '2b300050.target-module': device_add device: '2b1f0000.rtc': device_add platform 2b1f0000.rtc: Not linking /bus@f0000/interrupt-controller@1800000 - might never become dev /bus@f0000/bus@b00000/rtc@2b1f0000 Dropping the fwnode link to /bus@f0000/interrupt-controller@1800000 device: 'b00000.temperature-sensor': device_add device: '70000000.sram': device_add device: 'bus@f0000:bus@100000': device_add device: '104044.phy': device_add device: '104130.clock-controller': device_add device: '1082e0.clock-controller': device_add device: '1082e4.clock-controller': device_add device: 'bus@f0000:bus@48000000': device_add platform bus@f0000:bus@48000000: Not linking /bus@f0000/interrupt-controller@1800000 - might never become dev platform bus@f0000:bus@48000000: Not linking /bus@f0000/interrupt-controller@1800000 - might never become dev device: '4d000000.mailbox': device_add platform 4d000000.mailbox: Not linking /bus@f0000/interrupt-controller@1800000 - might never become dev /bus@f0000/bus@48000000/mailbox@4d000000 Dropping the fwnode link to /bus@f0000/interrupt-controller@1800000 device: '48000000.interrupt-controller': device_add platform 48000000.interrupt-controller: Not linking /bus@f0000/interrupt-controller@1800000 - might never become dev /bus@f0000/bus@48000000/interrupt-controller@48000000 Dropping the fwnode link to /bus@f0000/interrupt-controller@1800000 device: '485c0100.dma-controller': device_add device: 'platform:48000000.interrupt-controller--platform:485c0100.dma-controller': device_add devices_kset: Moving 485c0100.dma-controller to end of list platform 485c0100.dma-controller: Linked as a consumer to 48000000.interrupt-controller /bus@f0000/bus@48000000/dma-controller@485c0100 Dropping the fwnode link to /bus@f0000/bus@48000000/interrupt-controller@48000000 device: '485c0000.dma-controller': device_add device: 'platform:48000000.interrupt-controller--platform:485c0000.dma-controller': device_add devices_kset: Moving 485c0000.dma-controller to end of list platform 485c0000.dma-controller: Linked as a consumer to 48000000.interrupt-controller /bus@f0000/bus@48000000/dma-controller@485c0000 Dropping the fwnode link to /bus@f0000/bus@48000000/interrupt-controller@48000000 device: '44043000.system-controller': device_add device: 'platform:4d000000.mailbox--platform:44043000.system-controller': device_add devices_kset: Moving 44043000.system-controller to end of list platform 44043000.system-controller: Linked as a consumer to 4d000000.mailbox /bus@f0000/system-controller@44043000 Dropping the fwnode link to /bus@f0000/bus@48000000/mailbox@4d000000 device: '40900000.crypto': device_add device: 'f4000.pinctrl': device_add device: '420000.esm': device_add device: '2400000.timer': device_add platform 2400000.timer: Not linking /bus@f0000/interrupt-controller@1800000 - might never become dev /bus@f0000/timer@2400000 Dropping the fwnode link to /bus@f0000/interrupt-controller@1800000 device: '2410000.timer': device_add platform 2410000.timer: Not linking /bus@f0000/interrupt-controller@1800000 - might never become dev /bus@f0000/timer@2410000 Dropping the fwnode link to /bus@f0000/interrupt-controller@1800000 device: '2420000.timer': device_add platform 2420000.timer: Not linking /bus@f0000/interrupt-controller@1800000 - might never become dev /bus@f0000/timer@2420000 Dropping the fwnode link to /bus@f0000/interrupt-controller@1800000 device: '2430000.timer': device_add platform 2430000.timer: Not linking /bus@f0000/interrupt-controller@1800000 - might never become dev /bus@f0000/timer@2430000 Dropping the fwnode link to /bus@f0000/interrupt-controller@1800000 device: '2440000.timer': device_add platform 2440000.timer: Not linking /bus@f0000/interrupt-controller@1800000 - might never become dev /bus@f0000/timer@2440000 Dropping the fwnode link to /bus@f0000/interrupt-controller@1800000 device: '2450000.timer': device_add platform 2450000.timer: Not linking /bus@f0000/interrupt-controller@1800000 - might never become dev /bus@f0000/timer@2450000 Dropping the fwnode link to /bus@f0000/interrupt-controller@1800000 device: '2460000.timer': device_add platform 2460000.timer: Not linking /bus@f0000/interrupt-controller@1800000 - might never become dev /bus@f0000/timer@2460000 Dropping the fwnode link to /bus@f0000/interrupt-controller@1800000 device: '2470000.timer': device_add platform 2470000.timer: Not linking /bus@f0000/interrupt-controller@1800000 - might never become dev /bus@f0000/timer@2470000 Dropping the fwnode link to /bus@f0000/interrupt-controller@1800000 device: '2800000.serial': device_add platform 2800000.serial: Not linking /bus@f0000/interrupt-controller@1800000 - might never become dev /bus@f0000/serial@2800000 Dropping the fwnode link to /bus@f0000/interrupt-controller@1800000 device: '20000000.i2c': device_add platform 20000000.i2c: Not linking /bus@f0000/interrupt-controller@1800000 - might never become dev /bus@f0000/i2c@20000000 Dropping the fwnode link to /bus@f0000/interrupt-controller@1800000 ----- cycle: start ----- /bus@f0000/dwc3-usb@f900000/usb@31000000: cycle: depends on /bus@f0000/i2c@20000000/tps6598x@3f/connector /bus@f0000/i2c@20000000/tps6598x@3f/connector: cycle: depends on /bus@f0000/dwc3-usb@f900000/usb@31000000 ----- cycle: end ----- /bus@f0000/i2c@20000000/tps6598x@3f/connector: Fixed dependency cycle(s) with /bus@f0000/dwc3-usb@f900000/usb@31000000 device: '20010000.i2c': device_add platform 20010000.i2c: Not linking /bus@f0000/interrupt-controller@1800000 - might never become dev /bus@f0000/i2c@20010000 Dropping the fwnode link to /bus@f0000/interrupt-controller@1800000 ----- cycle: start ----- /bus@f0000/dss@30200000: cycle: depends on /bus@f0000/i2c@20010000/bridge-hdmi@3b /bus@f0000/i2c@20010000/bridge-hdmi@3b: cycle: depends on /bus@f0000/dss@30200000 ----- cycle: end ----- /bus@f0000/i2c@20010000/bridge-hdmi@3b: Fixed dependency cycle(s) with /bus@f0000/dss@30200000 device: '20020000.i2c': device_add platform 20020000.i2c: Not linking /bus@f0000/interrupt-controller@1800000 - might never become dev /bus@f0000/i2c@20020000 Dropping the fwnode link to /bus@f0000/interrupt-controller@1800000 device: 'bus@f0000:interrupt-controller@a00000': device_add platform bus@f0000:interrupt-controller@a00000: Not linking /bus@f0000/interrupt-controller@1800000 - might never become dev /bus@f0000/interrupt-controller@a00000 Dropping the fwnode link to /bus@f0000/interrupt-controller@1800000 device: '600000.gpio': device_add device: 'platform:bus@f0000:interrupt-controller@a00000--platform:600000.gpio': device_add devices_kset: Moving 600000.gpio to end of list platform 600000.gpio: Linked as a consumer to bus@f0000:interrupt-controller@a00000 /bus@f0000/gpio@600000 Dropping the fwnode link to /bus@f0000/interrupt-controller@a00000 platform 600000.gpio: error -EPROBE_DEFER: wait for supplier /bus@f0000/system-controller@44043000/clock-controller device: '601000.gpio': device_add device: 'platform:601000.gpio--platform:20010000.i2c': device_add platform 20010000.i2c: Linked as a sync state only consumer to 601000.gpio (flags 0x1c0) device: 'platform:bus@f0000:interrupt-controller@a00000--platform:601000.gpio': device_add devices_kset: Moving 601000.gpio to end of list platform 601000.gpio: Linked as a consumer to bus@f0000:interrupt-controller@a00000 /bus@f0000/gpio@601000 Dropping the fwnode link to /bus@f0000/interrupt-controller@a00000 platform 601000.gpio: error -EPROBE_DEFER: wait for supplier /bus@f0000/system-controller@44043000/clock-controller device: 'fa10000.mmc': device_add platform fa10000.mmc: Not linking /bus@f0000/interrupt-controller@1800000 - might never become dev /bus@f0000/mmc@fa10000 Dropping the fwnode link to /bus@f0000/interrupt-controller@1800000 device: 'fa00000.mmc': device_add platform fa00000.mmc: Not linking /bus@f0000/interrupt-controller@1800000 - might never become dev /bus@f0000/mmc@fa00000 Dropping the fwnode link to /bus@f0000/interrupt-controller@1800000 device: 'f900000.dwc3-usb': device_add ----- cycle: start ----- /bus@f0000/i2c@20000000/tps6598x@3f/connector: cycle: depends on /bus@f0000/dwc3-usb@f900000/usb@31000000 /bus@f0000/dwc3-usb@f900000/usb@31000000: cycle: depends on /bus@f0000/i2c@20000000/tps6598x@3f/connector ----- cycle: end ----- /bus@f0000/dwc3-usb@f900000/usb@31000000: Fixed dependency cycle(s) with /bus@f0000/i2c@20000000/tps6598x@3f/connector platform f900000.dwc3-usb: Not linking /bus@f0000/interrupt-controller@1800000 - might never become dev device: 'f910000.dwc3-usb': device_add platform f910000.dwc3-usb: Not linking /bus@f0000/interrupt-controller@1800000 - might never become dev device: 'fc00000.bus': device_add platform fc00000.bus: Not linking /bus@f0000/interrupt-controller@1800000 - might never become dev device: 'fc40000.spi': device_add platform fc40000.spi: Not linking /bus@f0000/interrupt-controller@1800000 - might never become dev /bus@f0000/bus@fc00000/spi@fc40000 Dropping the fwnode link to /bus@f0000/interrupt-controller@1800000 device: 'fd00000.gpu': device_add platform fd00000.gpu: Not linking /bus@f0000/interrupt-controller@1800000 - might never become dev /bus@f0000/gpu@fd00000 Dropping the fwnode link to /bus@f0000/interrupt-controller@1800000 device: '8000000.ethernet': device_add device: 'platform:104044.phy--platform:8000000.ethernet': device_add platform 8000000.ethernet: Linked as a sync state only consumer to 104044.phy (flags 0x1c0) platform 8000000.ethernet: Not linking /bus@f0000/interrupt-controller@1800000 - might never become dev device: '30200000.dss': device_add ----- cycle: start ----- /bus@f0000/dss@30200000: cycle: depends on /bus@f0000/i2c@20010000/bridge-hdmi@3b /bus@f0000/i2c@20010000/bridge-hdmi@3b: cycle: depends on /bus@f0000/dss@30200000 ----- cycle: end ----- /bus@f0000/i2c@20010000/bridge-hdmi@3b: Fixed dependency cycle(s) with /bus@f0000/dss@30200000 device: 'platform:30200000.dss--platform:20010000.i2c': device_add platform 20010000.i2c: Linked as a sync state only consumer to 30200000.dss (flags 0x3c0) ----- cycle: start ----- /bus@f0000/i2c@20010000/bridge-hdmi@3b: cycle: depends on /bus@f0000/dss@30200000 ----- cycle: start ----- /bus@f0000/i2c@20010000: cycle: depends on /bus@f0000/dss@30200000 /bus@f0000/i2c@20010000/gpio@22: cycle: child of /bus@f0000/i2c@20010000 /bus@f0000/i2c@20010000/bridge-hdmi@3b: cycle: depends on /bus@f0000/i2c@20010000/gpio@22 ----- cycle: start ----- /bus@f0000/i2c@20010000: cycle: depends on /bus@f0000/dss@30200000 /bus@f0000/i2c@20010000/bridge-hdmi@3b: cycle: child of /bus@f0000/i2c@20010000 /bus@f0000/dss@30200000: cycle: depends on /bus@f0000/i2c@20010000/bridge-hdmi@3b ----- cycle: end ----- /bus@f0000/dss@30200000: Fixed dependency cycle(s) with /bus@f0000/i2c@20010000/bridge-hdmi@3b platform 30200000.dss: Not linking /bus@f0000/interrupt-controller@1800000 - might never become dev /bus@f0000/dss@30200000 Dropping the fwnode link to /bus@f0000/interrupt-controller@1800000 platform 30200000.dss: Not linking /clock-divider-oldi - might never become dev /bus@f0000/dss@30200000 Dropping the fwnode link to /clock-divider-oldi device: '2a000000.spinlock': device_add device: '29000000.mailbox': device_add platform 29000000.mailbox: Not linking /bus@f0000/interrupt-controller@1800000 - might never become dev /bus@f0000/mailbox@29000000 Dropping the fwnode link to /bus@f0000/interrupt-controller@1800000 device: 'e000000.watchdog': device_add device: 'e010000.watchdog': device_add device: 'e020000.watchdog': device_add device: 'e030000.watchdog': device_add device: 'e0f0000.watchdog': device_add device: '2b10000.audio-controller': device_add platform 2b10000.audio-controller: Not linking /bus@f0000/interrupt-controller@1800000 - might never become dev /bus@f0000/audio-controller@2b10000 Dropping the fwnode link to /bus@f0000/interrupt-controller@1800000 device: 'opp-table': device_add device: 'l2-cache0': device_add device: 'leds': device_add /leds Linked as a fwnode consumer to /bus@f0000/pinctrl@f4000/usr-led-default-pins /leds/led-0 Linked as a fwnode consumer to /bus@f0000/gpio@601000 device: 'platform:601000.gpio--platform:leds': device_add platform leds: Linked as a sync state only consumer to 601000.gpio (flags 0x1c0) device: 'sound': device_add /sound/simple-audio-card,codec Linked as a fwnode consumer to /clk-0 platform sound: Not linking /clk-0 - might never become dev device: 'connector-hdmi': device_add /connector-hdmi Linked as a fwnode consumer to /bus@f0000/i2c@20010000/bridge-hdmi@3b ----- cycle: start ----- /connector-hdmi: cycle: depends on /bus@f0000/i2c@20010000/bridge-hdmi@3b /bus@f0000/i2c@20010000/bridge-hdmi@3b: cycle: depends on /connector-hdmi ----- cycle: end ----- /bus@f0000/i2c@20010000/bridge-hdmi@3b: Fixed dependency cycle(s) with /connector-hdmi device: 'platform:connector-hdmi--platform:20010000.i2c': device_add platform 20010000.i2c: Linked as a sync state only consumer to connector-hdmi (flags 0x3c0) ----- cycle: start ----- /bus@f0000/i2c@20010000/bridge-hdmi@3b: cycle: depends on /connector-hdmi ----- cycle: start ----- /bus@f0000/i2c@20010000: cycle: depends on /connector-hdmi /bus@f0000/i2c@20010000/gpio@22: cycle: child of /bus@f0000/i2c@20010000 /bus@f0000/i2c@20010000/bridge-hdmi@3b: cycle: depends on /bus@f0000/i2c@20010000/gpio@22 ----- cycle: start ----- /bus@f0000/i2c@20010000: cycle: depends on /connector-hdmi /bus@f0000/i2c@20010000/bridge-hdmi@3b: cycle: child of /bus@f0000/i2c@20010000 /connector-hdmi: cycle: depends on /bus@f0000/i2c@20010000/bridge-hdmi@3b ----- cycle: end ----- /connector-hdmi: Fixed dependency cycle(s) with /bus@f0000/i2c@20010000/bridge-hdmi@3b device: 'regulator-0': device_add device: 'regulator-1': device_add /regulator-1 Linked as a fwnode consumer to /regulator-0 device: 'platform:regulator-0--platform:regulator-1': device_add devices_kset: Moving regulator-1 to end of list platform regulator-1: Linked as a consumer to regulator-0 /regulator-1 Dropping the fwnode link to /regulator-0 device: 'regulator-2': device_add /regulator-2 Linked as a fwnode consumer to /regulator-0 device: 'platform:regulator-2--platform:20010000.i2c': device_add platform 20010000.i2c: Linked as a sync state only consumer to regulator-2 (flags 0x1c0) device: 'platform:regulator-0--platform:regulator-2': device_add devices_kset: Moving regulator-2 to end of list platform regulator-2: Linked as a consumer to regulator-0 /regulator-2 Dropping the fwnode link to /regulator-0 device: 'regulator-3': device_add /regulator-3 Linked as a fwnode consumer to /regulator-2 /regulator-3 Linked as a fwnode consumer to /bus@f0000/i2c@20010000/gpio@22 device: 'platform:regulator-3--platform:fa00000.mmc': device_add devices_kset: Moving fa00000.mmc to end of list platform fa00000.mmc: Linked as a consumer to regulator-3 /bus@f0000/mmc@fa00000 Dropping the fwnode link to /regulator-3 device: 'platform:regulator-2--platform:regulator-3': device_add devices_kset: Moving regulator-3 to end of list devices_kset: Moving fa00000.mmc to end of list platform regulator-3: Linked as a consumer to regulator-2 /regulator-3 Dropping the fwnode link to /regulator-2 device: 'regulator-4': device_add /regulator-4 Linked as a fwnode consumer to /bus@f0000/pinctrl@f4000/vdd-sd-dv-default-pins /regulator-4 Linked as a fwnode consumer to /regulator-1 /regulator-4 Linked as a fwnode consumer to /bus@f0000/gpio@600000 device: 'platform:regulator-4--platform:fa00000.mmc': device_add devices_kset: Moving fa00000.mmc to end of list platform fa00000.mmc: Linked as a consumer to regulator-4 /bus@f0000/mmc@fa00000 Dropping the fwnode link to /regulator-4 device: 'platform:600000.gpio--platform:regulator-4': device_add devices_kset: Moving regulator-4 to end of list devices_kset: Moving fa00000.mmc to end of list platform regulator-4: Linked as a consumer to 600000.gpio /regulator-4 Dropping the fwnode link to /bus@f0000/gpio@600000 device: 'platform:regulator-1--platform:regulator-4': device_add devices_kset: Moving regulator-4 to end of list devices_kset: Moving fa00000.mmc to end of list platform regulator-4: Linked as a consumer to regulator-1 /regulator-4 Dropping the fwnode link to /regulator-1 device: 'regulator-5': device_add /regulator-5 Linked as a fwnode consumer to /regulator-2 device: 'platform:regulator-5--platform:20010000.i2c': device_add platform 20010000.i2c: Linked as a sync state only consumer to regulator-5 (flags 0x1c0) device: 'platform:regulator-2--platform:regulator-5': device_add devices_kset: Moving regulator-5 to end of list platform regulator-5: Linked as a consumer to regulator-2 /regulator-5 Dropping the fwnode link to /regulator-2 device: 'writeback': device_add HugeTLB: registered 1.00 GiB page size, pre-allocated 0 pages HugeTLB: 0 KiB vmemmap can be freed for a 1.00 GiB page HugeTLB: registered 32.0 MiB page size, pre-allocated 0 pages HugeTLB: 0 KiB vmemmap can be freed for a 32.0 MiB page HugeTLB: registered 2.00 MiB page size, pre-allocated 0 pages HugeTLB: 0 KiB vmemmap can be freed for a 2.00 MiB page HugeTLB: registered 64.0 KiB page size, pre-allocated 0 pages HugeTLB: 0 KiB vmemmap can be freed for a 64.0 KiB page device: 'memory_tiering': device_add ACPI: Interpreter disabled. device: 'soc0': device_add k3-chipinfo 43000014.chipid: Family:AM62X rev:SR1.0 JTAGID[0x0bb7e02f] Detected platform regulator-1: error -EPROBE_DEFER: supplier regulator-0 not ready platform regulator-2: error -EPROBE_DEFER: supplier regulator-0 not ready platform regulator-3: error -EPROBE_DEFER: wait for supplier /bus@f0000/i2c@20010000/gpio@22 device: 'regulator.1': device_add platform regulator-5: error -EPROBE_DEFER: supplier regulator-2 not ready platform regulator-4: error -EPROBE_DEFER: wait for supplier /bus@f0000/pinctrl@f4000/vdd-sd-dv-default-pins iommu: Default domain type: Translated iommu: DMA domain TLB invalidation policy: strict mode usbcore: registered new interface driver usbfs usbcore: registered new interface driver hub usbcore: registered new device driver usb platform 20000000.i2c: error -EPROBE_DEFER: wait for supplier /bus@f0000/pinctrl@f4000/main-i2c0-default-pins platform 20010000.i2c: error -EPROBE_DEFER: wait for supplier /bus@f0000/pinctrl@f4000/main-i2c1-default-pins platform 20020000.i2c: error -EPROBE_DEFER: wait for supplier /bus@f0000/pinctrl@f4000/main-i2c2-default-pins pps_core: LinuxPPS API ver. 1 registered pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it> PTP clock support registered EDAC MC: Ver: 3.0.0 device: 'edac': device_add device: 'mc': device_add scmi_core: SCMI protocol bus registered FPGA manager framework Advanced Linux Sound Architecture Driver Initialized. device: 'lo': device_add clocksource: Switched to clocksource arch_sys_counter VFS: Disk quotas dquot_6.6.0 VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes) pnp: PnP ACPI: disabled device: 'mem': device_add device: 'null': device_add device: 'port': device_add device: 'zero': device_add device: 'full': device_add device: 'random': device_add device: 'urandom': device_add device: 'kmsg': device_add device: 'tty': device_add device: 'console': device_add device: 'tty0': device_add device: 'vcs': device_add device: 'vcsu': device_add device: 'vcsa': device_add device: 'vcs1': device_add device: 'vcsu1': device_add device: 'vcsa1': device_add device: 'tty1': device_add device: 'tty2': device_add device: 'tty3': device_add device: 'tty4': device_add device: 'tty5': device_add device: 'tty6': device_add device: 'tty7': device_add device: 'tty8': device_add device: 'tty9': device_add device: 'tty10': device_add device: 'tty11': device_add device: 'tty12': device_add device: 'tty13': device_add device: 'tty14': device_add device: 'tty15': device_add device: 'tty16': device_add device: 'tty17': device_add device: 'tty18': device_add device: 'tty19': device_add device: 'tty20': device_add device: 'tty21': device_add device: 'tty22': device_add device: 'tty23': device_add device: 'tty24': device_add device: 'tty25': device_add device: 'tty26': device_add device: 'tty27': device_add device: 'tty28': device_add device: 'tty29': device_add device: 'tty30': device_add device: 'tty31': device_add device: 'tty32': device_add device: 'tty33': device_add device: 'tty34': device_add device: 'tty35': device_add device: 'tty36': device_add device: 'tty37': device_add device: 'tty38': device_add device: 'tty39': device_add device: 'tty40': device_add device: 'tty41': device_add device: 'tty42': device_add device: 'tty43': device_add device: 'tty44': device_add device: 'tty45': device_add device: 'tty46': device_add device: 'tty47': device_add device: 'tty48': device_add device: 'tty49': device_add device: 'tty50': device_add device: 'tty51': device_add device: 'tty52': device_add device: 'tty53': device_add device: 'tty54': device_add device: 'tty55': device_add device: 'tty56': device_add device: 'tty57': device_add device: 'tty58': device_add device: 'tty59': device_add device: 'tty60': device_add device: 'tty61': device_add device: 'tty62': device_add device: 'tty63': device_add device: 'hw_random': device_add NET: Registered PF_INET protocol family IP idents hash table entries: 32768 (order: 6, 262144 bytes, linear) tcp_listen_portaddr_hash hash table entries: 1024 (order: 4, 73728 bytes, linear) Table-perturb hash table entries: 65536 (order: 6, 262144 bytes, linear) TCP established hash table entries: 16384 (order: 5, 131072 bytes, linear) TCP bind hash table entries: 16384 (order: 9, 2359296 bytes, linear) TCP: Hash tables configured (established 16384 bind 16384) UDP hash table entries: 1024 (order: 5, 163840 bytes, linear) UDP-Lite hash table entries: 1024 (order: 5, 163840 bytes, linear) NET: Registered PF_UNIX/PF_LOCAL protocol family RPC: Registered named UNIX socket transport module. RPC: Registered udp transport module. RPC: Registered tcp transport module. RPC: Registered tcp-with-tls transport module. RPC: Registered tcp NFSv4.1 backchannel transport module. device: 'snapshot': device_add device: 'clocksource': device_add device: 'clocksource0': device_add device: 'clockevents': device_add device: 'clockevent0': device_add device: 'clockevent1': device_add device: 'clockevent2': device_add device: 'clockevent3': device_add device: 'broadcast': device_add device: 'breakpoint': device_add device: 'uprobe': device_add device: 'tracepoint': device_add device: 'software': device_add Initialise system trusted keyrings workingset: timestamp_bits=42 max_order=19 bucket_order=0 squashfs: version 4.0 (2009/01/31) Phillip Lougher NFS: Registering the id_resolver key type Key type id_resolver registered Key type id_legacy registered nfs4filelayout_init: NFSv4 File Layout Driver Registering... nfs4flexfilelayout_init: NFSv4 Flexfile Layout Driver Registering... device: 'autofs': device_add Key type asymmetric registered Asymmetric key parser 'x509' registered Block layer SCSI generic (bsg) driver version 0.4 loaded (major 245) io scheduler mq-deadline registered io scheduler kyber registered io scheduler bfq registered ti-sci-intr bus@f0000:interrupt-controller@a00000: error -EPROBE_DEFER: ti,sci read fail ti-sci-inta 48000000.interrupt-controller: error -EPROBE_DEFER: ti,sci read fail /bus@f0000/ethernet@8000000/cpts@3d000 Linked as a fwnode consumer to /bus@f0000 /bus@f0000/ethernet@8000000/cpts@3d000 Dropping the fwnode link to /bus@f0000/interrupt-controller@1800000 /bus@f0000/dwc3-usb@f910000/usb@31100000 Linked as a fwnode consumer to /bus@f0000 /bus@f0000/dwc3-usb@f910000/usb@31100000 Dropping the fwnode link to /bus@f0000/interrupt-controller@1800000 /bus@f0000/dwc3-usb@f900000/usb@31000000 Linked as a fwnode consumer to /bus@f0000 /bus@f0000/dwc3-usb@f900000/usb@31000000 Dropping the fwnode link to /bus@f0000/interrupt-controller@1800000 /bus@f0000/interrupt-controller@1800000 Linked as a fwnode consumer to /bus@f0000 /bus@f0000/interrupt-controller@1800000 Dropping the fwnode link to /bus@f0000/interrupt-controller@1800000 device: 'platform:bus@f0000--platform:f900000.dwc3-usb': device_add platform f900000.dwc3-usb: Linked as a sync state only consumer to bus@f0000 (flags 0x1c0) device: 'platform:bus@f0000--platform:f910000.dwc3-usb': device_add platform f910000.dwc3-usb: Linked as a sync state only consumer to bus@f0000 (flags 0x1c0) device: 'platform:bus@f0000--platform:8000000.ethernet': device_add platform 8000000.ethernet: Linked as a sync state only consumer to bus@f0000 (flags 0x1c0) platform 2b300050.target-module: error -EPROBE_DEFER: wait for supplier /bus@f0000/system-controller@44043000/clock-controller device: 'phy-104044.phy.0': device_add device: 'phy-104044.phy.1': device_add pinctrl-single 4084000.pinctrl: 34 pins, size 136 pinctrl-single f4000.pinctrl: 171 pins, size 684 /bus@f0000/serial@2800000 Linked as a fwnode consumer to /bus@f0000/pinctrl@f4000 /bus@f0000/serial@2800000 Dropping the fwnode link to /bus@f0000/pinctrl@f4000/main-uart0-default-pins /bus@f0000/i2c@20000000 Linked as a fwnode consumer to /bus@f0000/pinctrl@f4000 /bus@f0000/i2c@20000000 Dropping the fwnode link to /bus@f0000/pinctrl@f4000/main-i2c0-default-pins /bus@f0000/i2c@20010000 Linked as a fwnode consumer to /bus@f0000/pinctrl@f4000 /bus@f0000/i2c@20010000 Dropping the fwnode link to /bus@f0000/pinctrl@f4000/main-i2c1-default-pins /bus@f0000/i2c@20020000 Linked as a fwnode consumer to /bus@f0000/pinctrl@f4000 /bus@f0000/i2c@20020000 Dropping the fwnode link to /bus@f0000/pinctrl@f4000/main-i2c2-default-pins /bus@f0000/mmc@fa10000 Linked as a fwnode consumer to /bus@f0000/pinctrl@f4000 /bus@f0000/mmc@fa10000 Dropping the fwnode link to /bus@f0000/pinctrl@f4000/main-mmc0-default-pins /bus@f0000/mmc@fa00000 Linked as a fwnode consumer to /bus@f0000/pinctrl@f4000 /bus@f0000/mmc@fa00000 Dropping the fwnode link to /bus@f0000/pinctrl@f4000/main-mmc1-default-pins /leds Linked as a fwnode consumer to /bus@f0000/pinctrl@f4000 /leds Dropping the fwnode link to /bus@f0000/pinctrl@f4000/usr-led-default-pins /bus@f0000/ethernet@8000000/mdio@f00 Linked as a fwnode consumer to /bus@f0000/pinctrl@f4000 /bus@f0000/ethernet@8000000/mdio@f00 Dropping the fwnode link to /bus@f0000/pinctrl@f4000/main-mdio1-default-pins /bus@f0000/ethernet@8000000 Linked as a fwnode consumer to /bus@f0000/pinctrl@f4000 /bus@f0000/ethernet@8000000 Dropping the fwnode link to /bus@f0000/pinctrl@f4000/main-rgmii1-default-pins /bus@f0000/dwc3-usb@f910000/usb@31100000 Linked as a fwnode consumer to /bus@f0000/pinctrl@f4000 /bus@f0000/dwc3-usb@f910000/usb@31100000 Dropping the fwnode link to /bus@f0000/pinctrl@f4000/main-usb1-default-pins /bus@f0000/audio-controller@2b10000 Linked as a fwnode consumer to /bus@f0000/pinctrl@f4000 /bus@f0000/audio-controller@2b10000 Dropping the fwnode link to /bus@f0000/pinctrl@f4000/main-mcasp1-default-pins /bus@f0000/dss@30200000 Linked as a fwnode consumer to /bus@f0000/pinctrl@f4000 /bus@f0000/dss@30200000 Dropping the fwnode link to /bus@f0000/pinctrl@f4000/main-dss0-default-pins /bus@f0000/ethernet@8000000 Dropping the fwnode link to /bus@f0000/pinctrl@f4000/main-rgmii2-default-pins /bus@f0000/bus@fc00000/spi@fc40000 Linked as a fwnode consumer to /bus@f0000/pinctrl@f4000 /bus@f0000/bus@fc00000/spi@fc40000 Dropping the fwnode link to /bus@f0000/pinctrl@f4000/ospi0-default-pins /regulator-4 Linked as a fwnode consumer to /bus@f0000/pinctrl@f4000 /regulator-4 Dropping the fwnode link to /bus@f0000/pinctrl@f4000/vdd-sd-dv-default-pins /bus@f0000/i2c@20010000/gpio@22 Linked as a fwnode consumer to /bus@f0000/pinctrl@f4000 /bus@f0000/i2c@20010000/gpio@22 Dropping the fwnode link to /bus@f0000/pinctrl@f4000/main-gpio1-ioexp-intr-default-pins device: 'platform:f4000.pinctrl--platform:20010000.i2c': device_add platform 20010000.i2c: Linked as a sync state only consumer to f4000.pinctrl (flags 0x1c0) device: 'platform:f4000.pinctrl--platform:regulator-4': device_add devices_kset: Moving regulator-4 to end of list devices_kset: Moving fa00000.mmc to end of list platform regulator-4: Linked as a consumer to f4000.pinctrl /regulator-4 Dropping the fwnode link to /bus@f0000/pinctrl@f4000 device: 'platform:f4000.pinctrl--platform:fc40000.spi': device_add devices_kset: Moving fc40000.spi to end of list platform fc40000.spi: Linked as a consumer to f4000.pinctrl /bus@f0000/bus@fc00000/spi@fc40000 Dropping the fwnode link to /bus@f0000/pinctrl@f4000 device: 'platform:f4000.pinctrl--platform:30200000.dss': device_add devices_kset: Moving 30200000.dss to end of list platform 30200000.dss: Linked as a consumer to f4000.pinctrl /bus@f0000/dss@30200000 Dropping the fwnode link to /bus@f0000/pinctrl@f4000 device: 'platform:f4000.pinctrl--platform:2b10000.audio-controller': device_add devices_kset: Moving 2b10000.audio-controller to end of list platform 2b10000.audio-controller: Linked as a consumer to f4000.pinctrl /bus@f0000/audio-controller@2b10000 Dropping the fwnode link to /bus@f0000/pinctrl@f4000 device: 'platform:f4000.pinctrl--platform:f910000.dwc3-usb': device_add platform f910000.dwc3-usb: Linked as a sync state only consumer to f4000.pinctrl (flags 0x1c0) device: 'platform:f4000.pinctrl--platform:8000000.ethernet': device_add devices_kset: Moving 8000000.ethernet to end of list platform 8000000.ethernet: Linked as a consumer to f4000.pinctrl /bus@f0000/ethernet@8000000 Dropping the fwnode link to /bus@f0000/pinctrl@f4000 device: 'platform:f4000.pinctrl--platform:leds': device_add devices_kset: Moving leds to end of list platform leds: Linked as a consumer to f4000.pinctrl /leds Dropping the fwnode link to /bus@f0000/pinctrl@f4000 device: 'platform:f4000.pinctrl--platform:fa00000.mmc': device_add devices_kset: Moving fa00000.mmc to end of list platform fa00000.mmc: Linked as a consumer to f4000.pinctrl /bus@f0000/mmc@fa00000 Dropping the fwnode link to /bus@f0000/pinctrl@f4000 device: 'platform:f4000.pinctrl--platform:fa10000.mmc': device_add devices_kset: Moving fa10000.mmc to end of list platform fa10000.mmc: Linked as a consumer to f4000.pinctrl /bus@f0000/mmc@fa10000 Dropping the fwnode link to /bus@f0000/pinctrl@f4000 device: 'platform:f4000.pinctrl--platform:20020000.i2c': device_add devices_kset: Moving 20020000.i2c to end of list platform 20020000.i2c: Linked as a consumer to f4000.pinctrl /bus@f0000/i2c@20020000 Dropping the fwnode link to /bus@f0000/pinctrl@f4000 devices_kset: Moving 20010000.i2c to end of list platform 20010000.i2c: Linked as a consumer to f4000.pinctrl /bus@f0000/i2c@20010000 Dropping the fwnode link to /bus@f0000/pinctrl@f4000 device: 'platform:f4000.pinctrl--platform:20000000.i2c': device_add devices_kset: Moving 20000000.i2c to end of list platform 20000000.i2c: Linked as a consumer to f4000.pinctrl /bus@f0000/i2c@20000000 Dropping the fwnode link to /bus@f0000/pinctrl@f4000 device: 'platform:f4000.pinctrl--platform:2800000.serial': device_add devices_kset: Moving 2800000.serial to end of list platform 2800000.serial: Linked as a consumer to f4000.pinctrl /bus@f0000/serial@2800000 Dropping the fwnode link to /bus@f0000/pinctrl@f4000 leds-gpio leds: error -EPROBE_DEFER: Failed to get GPIO '/leds/led-0' ledtrig-cpu: registered to indicate activity on CPUs device: 'acpi-einj': device_add platform 1082e0.clock-controller: error -EPROBE_DEFER: wait for supplier /bus@f0000/system-controller@44043000/clock-controller platform 1082e4.clock-controller: error -EPROBE_DEFER: wait for supplier /bus@f0000/system-controller@44043000/clock-controller platform 485c0100.dma-controller: error -EPROBE_DEFER: supplier 48000000.interrupt-controller not ready platform 485c0000.dma-controller: error -EPROBE_DEFER: supplier 48000000.interrupt-controller not ready device: 'ptyp0': device_add device: 'ptyp1': device_add device: 'ptyp2': device_add device: 'ptyp3': device_add device: 'ptyp4': device_add device: 'ptyp5': device_add device: 'ptyp6': device_add device: 'ptyp7': device_add device: 'ptyp8': device_add device: 'ptyp9': device_add device: 'ptypa': device_add device: 'ptypb': device_add device: 'ptypc': device_add device: 'ptypd': device_add device: 'ptype': device_add device: 'ptypf': device_add device: 'ttyp0': device_add device: 'ttyp1': device_add device: 'ttyp2': device_add device: 'ttyp3': device_add device: 'ttyp4': device_add device: 'ttyp5': device_add device: 'ttyp6': device_add device: 'ttyp7': device_add device: 'ttyp8': device_add device: 'ttyp9': device_add device: 'ttypa': device_add device: 'ttypb': device_add device: 'ttypc': device_add device: 'ttypd': device_add device: 'ttype': device_add device: 'ttypf': device_add device: 'ptmx': device_add Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled device: 'serial8250': device_add device: 'serial8250:0': device_add device: 'serial8250:0.0': device_add device: 'serial0': device_add device: 'ttyS0': device_add device: 'serial8250:0.1': device_add device: 'serial0': device_add device: 'ttyS1': device_add device: 'serial8250:0.2': device_add device: 'serial0': device_add device: 'ttyS2': device_add device: 'serial8250:0.3': device_add device: 'serial0': device_add device: 'ttyS3': device_add STM32 USART driver initialized /connector-hdmi Dropping the fwnode link to /bus@f0000/i2c@20010000/bridge-hdmi@3b device: 'cache': device_add device: 'index0': device_add device: 'index1': device_add device: 'index2': device_add device: 'cache': device_add device: 'index0': device_add device: 'index1': device_add device: 'index2': device_add device: 'cache': device_add device: 'index0': device_add device: 'index1': device_add device: 'index2': device_add device: 'cache': device_add device: 'index0': device_add device: 'index1': device_add device: 'index2': device_add device: 'loop-control': device_add device: 'loop0': device_add device: '7:0': device_add device: 'loop1': device_add device: '7:1': device_add device: 'loop2': device_add device: '7:2': device_add device: 'loop3': device_add device: '7:3': device_add device: 'loop4': device_add device: '7:4': device_add device: 'loop5': device_add device: '7:5': device_add device: 'loop6': device_add device: '7:6': device_add device: 'loop7': device_add device: '7:7': device_add loop: module loaded device: 'system': device_add device: 'reserved': device_add device: 'mtd-0': device_add platform fc40000.spi: error -EPROBE_DEFER: wait for supplier /bus@f0000/system-controller@44043000/power-controller device: 'Fixed MDIO bus.0': device_add device: 'fixed-0': device_add tun: Universal TUN/TAP device driver, 1.6 device: 'tun': device_add platform 8000000.ethernet: error -EPROBE_DEFER: wait for supplier /bus@f0000/system-controller@44043000/power-controller device: 'vfio': device_add VFIO - User Level meta-driver version: 0.3 platform f900000.dwc3-usb: error -EPROBE_DEFER: wait for supplier /bus@f0000/system-controller@44043000/power-controller platform f910000.dwc3-usb: error -EPROBE_DEFER: wait for supplier /bus@f0000/system-controller@44043000/power-controller platform 2b1f0000.rtc: error -EPROBE_DEFER: wait for supplier /bus@f0000/system-controller@44043000/power-controller i2c_dev: i2c /dev entries driver device: 'ti-cpufreq': device_add device: 'cpufreq-dt': device_add cpu cpu0: error -EPROBE_DEFER: Couldn't find clock device: 'psci-cpuidle': device_add platform 44043000.system-controller: error -EPROBE_DEFER: supplier 4d000000.mailbox not ready SMCCC: SOC_ID: ARCH_SOC_ID not implemented, skipping .... platform 2400000.timer: error -EPROBE_DEFER: wait for supplier /bus@f0000/system-controller@44043000/power-controller platform 2410000.timer: error -EPROBE_DEFER: wait for supplier /bus@f0000/system-controller@44043000/power-controller platform 2420000.timer: error -EPROBE_DEFER: wait for supplier /bus@f0000/system-controller@44043000/power-controller platform 2430000.timer: error -EPROBE_DEFER: wait for supplier /bus@f0000/system-controller@44043000/power-controller platform 2440000.timer: error -EPROBE_DEFER: wait for supplier /bus@f0000/system-controller@44043000/power-controller platform 2450000.timer: error -EPROBE_DEFER: wait for supplier /bus@f0000/system-controller@44043000/power-controller platform 2460000.timer: error -EPROBE_DEFER: wait for supplier /bus@f0000/system-controller@44043000/power-controller platform 2470000.timer: error -EPROBE_DEFER: wait for supplier /bus@f0000/system-controller@44043000/power-controller usbcore: registered new interface driver usbhid usbhid: USB HID core driver device: 'armv8_cortex_a53': device_add hw perfevents: enabled with armv8_cortex_a53 PMU driver, 7 (0,8000003f) counters available watchdog: NMI not fully supported watchdog: Hard watchdog permanently disabled optee: probing for conduit method. optee: revision 4.0 (2a5b1d12) device: 'tee0': device_add device: 'teepriv0': device_add optee: dynamic shared memory is enabled device: 'optee-ta-ab7a617c-b8e7-4d8f-8301-d09b61036b64': device_add random: crng init done optee: initialized driver device: 'timer': device_add device: 'snd-soc-dummy': device_add NET: Registered PF_PACKET protocol family Key type dns_resolver registered device: 'cpu_dma_latency': device_add registered taskstats version 1 Loading compiled-in X.509 certificates device: 'memory_tier4': device_add Demotion targets for Node 0: null kmemleak: Kernel memory leak detector initialized (mem pool available: 15791) kmemleak: Automatic memory scanning thread started devices_kset: Moving 600000.gpio to end of list devices_kset: Moving regulator-4 to end of list devices_kset: Moving fa00000.mmc to end of list platform 600000.gpio: error -EPROBE_DEFER: wait for supplier /bus@f0000/system-controller@44043000/clock-controller devices_kset: Moving 601000.gpio to end of list platform 601000.gpio: error -EPROBE_DEFER: wait for supplier /bus@f0000/system-controller@44043000/clock-controller devices_kset: Moving regulator-1 to end of list devices_kset: Moving regulator-4 to end of list devices_kset: Moving fa00000.mmc to end of list devices_kset: Moving regulator-2 to end of list devices_kset: Moving regulator-3 to end of list devices_kset: Moving fa00000.mmc to end of list devices_kset: Moving regulator-5 to end of list devices_kset: Moving regulator-3 to end of list devices_kset: Moving fa00000.mmc to end of list devices_kset: Moving regulator-5 to end of list device: 'regulator.2': device_add devices_kset: Moving regulator-4 to end of list devices_kset: Moving fa00000.mmc to end of list devices_kset: Moving 20000000.i2c to end of list platform 20000000.i2c: error -EPROBE_DEFER: wait for supplier /bus@f0000/system-controller@44043000/clock-controller devices_kset: Moving 20010000.i2c to end of list device: 'regulator.3': device_add platform 20010000.i2c: error -EPROBE_DEFER: wait for supplier /bus@f0000/system-controller@44043000/clock-controller devices_kset: Moving 20020000.i2c to end of list platform 20020000.i2c: error -EPROBE_DEFER: wait for supplier /bus@f0000/system-controller@44043000/clock-controller devices_kset: Moving bus@f0000:interrupt-controller@a00000 to end of list devices_kset: Moving 600000.gpio to end of list devices_kset: Moving regulator-4 to end of list devices_kset: Moving fa00000.mmc to end of list devices_kset: Moving 601000.gpio to end of list platform regulator-3: error -EPROBE_DEFER: wait for supplier /bus@f0000/i2c@20010000/gpio@22 platform regulator-5: error -EPROBE_DEFER: supplier regulator-2 not ready platform regulator-4: error -EPROBE_DEFER: supplier 600000.gpio not ready ti-sci-intr bus@f0000:interrupt-controller@a00000: error -EPROBE_DEFER: ti,sci read fail devices_kset: Moving 48000000.interrupt-controller to end of list devices_kset: Moving 485c0100.dma-controller to end of list devices_kset: Moving 485c0000.dma-controller to end of list ti-sci-inta 48000000.interrupt-controller: error -EPROBE_DEFER: ti,sci read fail devices_kset: Moving 2b300050.target-module to end of list platform 2b300050.target-module: error -EPROBE_DEFER: wait for supplier /bus@f0000/system-controller@44043000/clock-controller devices_kset: Moving leds to end of list leds-gpio leds: error -EPROBE_DEFER: Failed to get GPIO '/leds/led-0' devices_kset: Moving 1082e0.clock-controller to end of list platform 1082e0.clock-controller: error -EPROBE_DEFER: wait for supplier /bus@f0000/system-controller@44043000/clock-controller devices_kset: Moving 1082e4.clock-controller to end of list platform 1082e4.clock-controller: error -EPROBE_DEFER: wait for supplier /bus@f0000/system-controller@44043000/clock-controller devices_kset: Moving 485c0100.dma-controller to end of list platform 485c0100.dma-controller: error -EPROBE_DEFER: supplier 48000000.interrupt-controller not ready devices_kset: Moving 485c0000.dma-controller to end of list platform 485c0000.dma-controller: error -EPROBE_DEFER: supplier 48000000.interrupt-controller not ready devices_kset: Moving 2800000.serial to end of list devices_kset: Moving fc40000.spi to end of list platform fc40000.spi: error -EPROBE_DEFER: wait for supplier /bus@f0000/system-controller@44043000/power-controller devices_kset: Moving 8000000.ethernet to end of list platform 8000000.ethernet: error -EPROBE_DEFER: wait for supplier /bus@f0000/system-controller@44043000/power-controller devices_kset: Moving f900000.dwc3-usb to end of list platform f900000.dwc3-usb: error -EPROBE_DEFER: wait for supplier /bus@f0000/system-controller@44043000/power-controller devices_kset: Moving f910000.dwc3-usb to end of list platform f910000.dwc3-usb: error -EPROBE_DEFER: wait for supplier /bus@f0000/system-controller@44043000/power-controller devices_kset: Moving 2b1f0000.rtc to end of list platform 2b1f0000.rtc: error -EPROBE_DEFER: wait for supplier /bus@f0000/system-controller@44043000/power-controller devices_kset: Moving cpufreq-dt to end of list cpu cpu0: error -EPROBE_DEFER: Couldn't find clock devices_kset: Moving 44043000.system-controller to end of list ti-sci 44043000.system-controller: ABI: 3.1 (firmware rev 0x0009 '9.1.8--v09.01.08 (Kool Koala)') device: '44043000.system-controller:power-controller': device_add device: 'platform:44043000.system-controller:power-controller--platform:2b10000.audio-controller': device_add devices_kset: Moving 2b10000.audio-controller to end of list platform 2b10000.audio-controller: Linked as a consumer to 44043000.system-controller:power-controller /bus@f0000/audio-controller@2b10000 Dropping the fwnode link to /bus@f0000/system-controller@44043000/power-controller device: 'platform:44043000.system-controller:power-controller--platform:e0f0000.watchdog': device_add devices_kset: Moving e0f0000.watchdog to end of list platform e0f0000.watchdog: Linked as a consumer to 44043000.system-controller:power-controller /bus@f0000/watchdog@e0f0000 Dropping the fwnode link to /bus@f0000/system-controller@44043000/power-controller device: 'platform:44043000.system-controller:power-controller--platform:e030000.watchdog': device_add devices_kset: Moving e030000.watchdog to end of list platform e030000.watchdog: Linked as a consumer to 44043000.system-controller:power-controller /bus@f0000/watchdog@e030000 Dropping the fwnode link to /bus@f0000/system-controller@44043000/power-controller device: 'platform:44043000.system-controller:power-controller--platform:e020000.watchdog': device_add devices_kset: Moving e020000.watchdog to end of list platform e020000.watchdog: Linked as a consumer to 44043000.system-controller:power-controller /bus@f0000/watchdog@e020000 Dropping the fwnode link to /bus@f0000/system-controller@44043000/power-controller device: 'platform:44043000.system-controller:power-controller--platform:e010000.watchdog': device_add devices_kset: Moving e010000.watchdog to end of list platform e010000.watchdog: Linked as a consumer to 44043000.system-controller:power-controller /bus@f0000/watchdog@e010000 Dropping the fwnode link to /bus@f0000/system-controller@44043000/power-controller device: 'platform:44043000.system-controller:power-controller--platform:e000000.watchdog': device_add devices_kset: Moving e000000.watchdog to end of list platform e000000.watchdog: Linked as a consumer to 44043000.system-controller:power-controller /bus@f0000/watchdog@e000000 Dropping the fwnode link to /bus@f0000/system-controller@44043000/power-controller device: 'platform:44043000.system-controller:power-controller--platform:30200000.dss': device_add devices_kset: Moving 30200000.dss to end of list platform 30200000.dss: Linked as a consumer to 44043000.system-controller:power-controller /bus@f0000/dss@30200000 Dropping the fwnode link to /bus@f0000/system-controller@44043000/power-controller device: 'platform:44043000.system-controller:power-controller--platform:8000000.ethernet': device_add devices_kset: Moving 8000000.ethernet to end of list platform 8000000.ethernet: Linked as a consumer to 44043000.system-controller:power-controller /bus@f0000/ethernet@8000000 Dropping the fwnode link to /bus@f0000/system-controller@44043000/power-controller device: 'platform:44043000.system-controller:power-controller--platform:fd00000.gpu': device_add devices_kset: Moving fd00000.gpu to end of list platform fd00000.gpu: Linked as a consumer to 44043000.system-controller:power-controller /bus@f0000/gpu@fd00000 Dropping the fwnode link to /bus@f0000/system-controller@44043000/power-controller device: 'platform:44043000.system-controller:power-controller--platform:fc40000.spi': device_add devices_kset: Moving fc40000.spi to end of list platform fc40000.spi: Linked as a consumer to 44043000.system-controller:power-controller /bus@f0000/bus@fc00000/spi@fc40000 Dropping the fwnode link to /bus@f0000/system-controller@44043000/power-controller device: 'platform:44043000.system-controller:power-controller--platform:f910000.dwc3-usb': device_add devices_kset: Moving f910000.dwc3-usb to end of list platform f910000.dwc3-usb: Linked as a consumer to 44043000.system-controller:power-controller /bus@f0000/dwc3-usb@f910000 Dropping the fwnode link to /bus@f0000/system-controller@44043000/power-controller device: 'platform:44043000.system-controller:power-controller--platform:f900000.dwc3-usb': device_add devices_kset: Moving f900000.dwc3-usb to end of list platform f900000.dwc3-usb: Linked as a consumer to 44043000.system-controller:power-controller /bus@f0000/dwc3-usb@f900000 Dropping the fwnode link to /bus@f0000/system-controller@44043000/power-controller device: 'platform:44043000.system-controller:power-controller--platform:fa00000.mmc': device_add devices_kset: Moving fa00000.mmc to end of list platform fa00000.mmc: Linked as a consumer to 44043000.system-controller:power-controller /bus@f0000/mmc@fa00000 Dropping the fwnode link to /bus@f0000/system-controller@44043000/power-controller device: 'platform:44043000.system-controller:power-controller--platform:fa10000.mmc': device_add devices_kset: Moving fa10000.mmc to end of list platform fa10000.mmc: Linked as a consumer to 44043000.system-controller:power-controller /bus@f0000/mmc@fa10000 Dropping the fwnode link to /bus@f0000/system-controller@44043000/power-controller device: 'platform:44043000.system-controller:power-controller--platform:601000.gpio': device_add devices_kset: Moving 601000.gpio to end of list platform 601000.gpio: Linked as a consumer to 44043000.system-controller:power-controller /bus@f0000/gpio@601000 Dropping the fwnode link to /bus@f0000/system-controller@44043000/power-controller device: 'platform:44043000.system-controller:power-controller--platform:600000.gpio': device_add devices_kset: Moving 600000.gpio to end of list devices_kset: Moving regulator-4 to end of list devices_kset: Moving fa00000.mmc to end of list platform 600000.gpio: Linked as a consumer to 44043000.system-controller:power-controller /bus@f0000/gpio@600000 Dropping the fwnode link to /bus@f0000/system-controller@44043000/power-controller device: 'platform:44043000.system-controller:power-controller--platform:20020000.i2c': device_add devices_kset: Moving 20020000.i2c to end of list platform 20020000.i2c: Linked as a consumer to 44043000.system-controller:power-controller /bus@f0000/i2c@20020000 Dropping the fwnode link to /bus@f0000/system-controller@44043000/power-controller device: 'platform:44043000.system-controller:power-controller--platform:20010000.i2c': device_add devices_kset: Moving 20010000.i2c to end of list platform 20010000.i2c: Linked as a consumer to 44043000.system-controller:power-controller /bus@f0000/i2c@20010000 Dropping the fwnode link to /bus@f0000/system-controller@44043000/power-controller device: 'platform:44043000.system-controller:power-controller--platform:20000000.i2c': device_add devices_kset: Moving 20000000.i2c to end of list platform 20000000.i2c: Linked as a consumer to 44043000.system-controller:power-controller /bus@f0000/i2c@20000000 Dropping the fwnode link to /bus@f0000/system-controller@44043000/power-controller device: 'platform:44043000.system-controller:power-controller--platform:2800000.serial': device_add devices_kset: Moving 2800000.serial to end of list platform 2800000.serial: Linked as a consumer to 44043000.system-controller:power-controller /bus@f0000/serial@2800000 Dropping the fwnode link to /bus@f0000/system-controller@44043000/power-controller device: 'platform:44043000.system-controller:power-controller--platform:2470000.timer': device_add devices_kset: Moving 2470000.timer to end of list platform 2470000.timer: Linked as a consumer to 44043000.system-controller:power-controller /bus@f0000/timer@2470000 Dropping the fwnode link to /bus@f0000/system-controller@44043000/power-controller device: 'platform:44043000.system-controller:power-controller--platform:2460000.timer': device_add devices_kset: Moving 2460000.timer to end of list platform 2460000.timer: Linked as a consumer to 44043000.system-controller:power-controller /bus@f0000/timer@2460000 Dropping the fwnode link to /bus@f0000/system-controller@44043000/power-controller device: 'platform:44043000.system-controller:power-controller--platform:2450000.timer': device_add devices_kset: Moving 2450000.timer to end of list platform 2450000.timer: Linked as a consumer to 44043000.system-controller:power-controller /bus@f0000/timer@2450000 Dropping the fwnode link to /bus@f0000/system-controller@44043000/power-controller device: 'platform:44043000.system-controller:power-controller--platform:2440000.timer': device_add devices_kset: Moving 2440000.timer to end of list platform 2440000.timer: Linked as a consumer to 44043000.system-controller:power-controller /bus@f0000/timer@2440000 Dropping the fwnode link to /bus@f0000/system-controller@44043000/power-controller device: 'platform:44043000.system-controller:power-controller--platform:2430000.timer': device_add devices_kset: Moving 2430000.timer to end of list platform 2430000.timer: Linked as a consumer to 44043000.system-controller:power-controller /bus@f0000/timer@2430000 Dropping the fwnode link to /bus@f0000/system-controller@44043000/power-controller device: 'platform:44043000.system-controller:power-controller--platform:2420000.timer': device_add devices_kset: Moving 2420000.timer to end of list platform 2420000.timer: Linked as a consumer to 44043000.system-controller:power-controller /bus@f0000/timer@2420000 Dropping the fwnode link to /bus@f0000/system-controller@44043000/power-controller device: 'platform:44043000.system-controller:power-controller--platform:2410000.timer': device_add devices_kset: Moving 2410000.timer to end of list platform 2410000.timer: Linked as a consumer to 44043000.system-controller:power-controller /bus@f0000/timer@2410000 Dropping the fwnode link to /bus@f0000/system-controller@44043000/power-controller device: 'platform:44043000.system-controller:power-controller--platform:2400000.timer': device_add devices_kset: Moving 2400000.timer to end of list platform 2400000.timer: Linked as a consumer to 44043000.system-controller:power-controller /bus@f0000/timer@2400000 Dropping the fwnode link to /bus@f0000/system-controller@44043000/power-controller device: 'platform:44043000.system-controller:power-controller--platform:b00000.temperature-sensor': device_add devices_kset: Moving b00000.temperature-sensor to end of list platform b00000.temperature-sensor: Linked as a consumer to 44043000.system-controller:power-controller /bus@f0000/bus@b00000/temperature-sensor@b00000 Dropping the fwnode link to /bus@f0000/system-controller@44043000/power-controller device: 'platform:44043000.system-controller:power-controller--platform:2b1f0000.rtc': device_add devices_kset: Moving 2b1f0000.rtc to end of list platform 2b1f0000.rtc: Linked as a consumer to 44043000.system-controller:power-controller /bus@f0000/bus@b00000/rtc@2b1f0000 Dropping the fwnode link to /bus@f0000/system-controller@44043000/power-controller device: 'platform:44043000.system-controller:power-controller--platform:2b300050.target-module': device_add devices_kset: Moving 2b300050.target-module to end of list platform 2b300050.target-module: Linked as a consumer to 44043000.system-controller:power-controller /bus@f0000/bus@b00000/target-module@2b300050 Dropping the fwnode link to /bus@f0000/system-controller@44043000/power-controller device: '44043000.system-controller:clock-controller': device_add device: 'platform:44043000.system-controller:clock-controller--platform:2b10000.audio-controller': device_add devices_kset: Moving 2b10000.audio-controller to end of list platform 2b10000.audio-controller: Linked as a consumer to 44043000.system-controller:clock-controller /bus@f0000/audio-controller@2b10000 Dropping the fwnode link to /bus@f0000/system-controller@44043000/clock-controller device: 'platform:44043000.system-controller:clock-controller--platform:e0f0000.watchdog': device_add devices_kset: Moving e0f0000.watchdog to end of list platform e0f0000.watchdog: Linked as a consumer to 44043000.system-controller:clock-controller /bus@f0000/watchdog@e0f0000 Dropping the fwnode link to /bus@f0000/system-controller@44043000/clock-controller device: 'platform:44043000.system-controller:clock-controller--platform:e030000.watchdog': device_add devices_kset: Moving e030000.watchdog to end of list platform e030000.watchdog: Linked as a consumer to 44043000.system-controller:clock-controller /bus@f0000/watchdog@e030000 Dropping the fwnode link to /bus@f0000/system-controller@44043000/clock-controller device: 'platform:44043000.system-controller:clock-controller--platform:e020000.watchdog': device_add devices_kset: Moving e020000.watchdog to end of list platform e020000.watchdog: Linked as a consumer to 44043000.system-controller:clock-controller /bus@f0000/watchdog@e020000 Dropping the fwnode link to /bus@f0000/system-controller@44043000/clock-controller device: 'platform:44043000.system-controller:clock-controller--platform:e010000.watchdog': device_add devices_kset: Moving e010000.watchdog to end of list platform e010000.watchdog: Linked as a consumer to 44043000.system-controller:clock-controller /bus@f0000/watchdog@e010000 Dropping the fwnode link to /bus@f0000/system-controller@44043000/clock-controller device: 'platform:44043000.system-controller:clock-controller--platform:e000000.watchdog': device_add devices_kset: Moving e000000.watchdog to end of list platform e000000.watchdog: Linked as a consumer to 44043000.system-controller:clock-controller /bus@f0000/watchdog@e000000 Dropping the fwnode link to /bus@f0000/system-controller@44043000/clock-controller device: 'platform:44043000.system-controller:clock-controller--platform:30200000.dss': device_add devices_kset: Moving 30200000.dss to end of list platform 30200000.dss: Linked as a consumer to 44043000.system-controller:clock-controller /bus@f0000/dss@30200000 Dropping the fwnode link to /bus@f0000/system-controller@44043000/clock-controller device: 'platform:44043000.system-controller:clock-controller--platform:8000000.ethernet': device_add platform 8000000.ethernet: Linked as a sync state only consumer to 44043000.system-controller:clock-controller (flags 0x1c0) devices_kset: Moving 8000000.ethernet to end of list platform 8000000.ethernet: Linked as a consumer to 44043000.system-controller:clock-controller /bus@f0000/ethernet@8000000 Dropping the fwnode link to /bus@f0000/system-controller@44043000/clock-controller device: 'platform:44043000.system-controller:clock-controller--platform:fd00000.gpu': device_add devices_kset: Moving fd00000.gpu to end of list platform fd00000.gpu: Linked as a consumer to 44043000.system-controller:clock-controller /bus@f0000/gpu@fd00000 Dropping the fwnode link to /bus@f0000/system-controller@44043000/clock-controller device: 'platform:44043000.system-controller:clock-controller--platform:fc40000.spi': device_add devices_kset: Moving fc40000.spi to end of list platform fc40000.spi: Linked as a consumer to 44043000.system-controller:clock-controller /bus@f0000/bus@fc00000/spi@fc40000 Dropping the fwnode link to /bus@f0000/system-controller@44043000/clock-controller device: 'platform:44043000.system-controller:clock-controller--platform:f910000.dwc3-usb': device_add devices_kset: Moving f910000.dwc3-usb to end of list platform f910000.dwc3-usb: Linked as a consumer to 44043000.system-controller:clock-controller /bus@f0000/dwc3-usb@f910000 Dropping the fwnode link to /bus@f0000/system-controller@44043000/clock-controller device: 'platform:44043000.system-controller:clock-controller--platform:f900000.dwc3-usb': device_add devices_kset: Moving f900000.dwc3-usb to end of list platform f900000.dwc3-usb: Linked as a consumer to 44043000.system-controller:clock-controller /bus@f0000/dwc3-usb@f900000 Dropping the fwnode link to /bus@f0000/system-controller@44043000/clock-controller device: 'platform:44043000.system-controller:clock-controller--platform:fa00000.mmc': device_add devices_kset: Moving fa00000.mmc to end of list platform fa00000.mmc: Linked as a consumer to 44043000.system-controller:clock-controller /bus@f0000/mmc@fa00000 Dropping the fwnode link to /bus@f0000/system-controller@44043000/clock-controller device: 'platform:44043000.system-controller:clock-controller--platform:fa10000.mmc': device_add devices_kset: Moving fa10000.mmc to end of list platform fa10000.mmc: Linked as a consumer to 44043000.system-controller:clock-controller /bus@f0000/mmc@fa10000 Dropping the fwnode link to /bus@f0000/system-controller@44043000/clock-controller device: 'platform:44043000.system-controller:clock-controller--platform:601000.gpio': device_add devices_kset: Moving 601000.gpio to end of list platform 601000.gpio: Linked as a consumer to 44043000.system-controller:clock-controller /bus@f0000/gpio@601000 Dropping the fwnode link to /bus@f0000/system-controller@44043000/clock-controller device: 'platform:44043000.system-controller:clock-controller--platform:600000.gpio': device_add devices_kset: Moving 600000.gpio to end of list devices_kset: Moving regulator-4 to end of list devices_kset: Moving fa00000.mmc to end of list platform 600000.gpio: Linked as a consumer to 44043000.system-controller:clock-controller /bus@f0000/gpio@600000 Dropping the fwnode link to /bus@f0000/system-controller@44043000/clock-controller device: 'platform:44043000.system-controller:clock-controller--platform:20020000.i2c': device_add devices_kset: Moving 20020000.i2c to end of list platform 20020000.i2c: Linked as a consumer to 44043000.system-controller:clock-controller /bus@f0000/i2c@20020000 Dropping the fwnode link to /bus@f0000/system-controller@44043000/clock-controller device: 'platform:44043000.system-controller:clock-controller--platform:20010000.i2c': device_add devices_kset: Moving 20010000.i2c to end of list platform 20010000.i2c: Linked as a consumer to 44043000.system-controller:clock-controller /bus@f0000/i2c@20010000 Dropping the fwnode link to /bus@f0000/system-controller@44043000/clock-controller device: 'platform:44043000.system-controller:clock-controller--platform:20000000.i2c': device_add devices_kset: Moving 20000000.i2c to end of list platform 20000000.i2c: Linked as a consumer to 44043000.system-controller:clock-controller /bus@f0000/i2c@20000000 Dropping the fwnode link to /bus@f0000/system-controller@44043000/clock-controller device: 'platform:44043000.system-controller:clock-controller--platform:2800000.serial': device_add devices_kset: Moving 2800000.serial to end of list platform 2800000.serial: Linked as a consumer to 44043000.system-controller:clock-controller /bus@f0000/serial@2800000 Dropping the fwnode link to /bus@f0000/system-controller@44043000/clock-controller device: 'platform:44043000.system-controller:clock-controller--platform:2470000.timer': device_add devices_kset: Moving 2470000.timer to end of list platform 2470000.timer: Linked as a consumer to 44043000.system-controller:clock-controller /bus@f0000/timer@2470000 Dropping the fwnode link to /bus@f0000/system-controller@44043000/clock-controller device: 'platform:44043000.system-controller:clock-controller--platform:2460000.timer': device_add devices_kset: Moving 2460000.timer to end of list platform 2460000.timer: Linked as a consumer to 44043000.system-controller:clock-controller /bus@f0000/timer@2460000 Dropping the fwnode link to /bus@f0000/system-controller@44043000/clock-controller device: 'platform:44043000.system-controller:clock-controller--platform:2450000.timer': device_add devices_kset: Moving 2450000.timer to end of list platform 2450000.timer: Linked as a consumer to 44043000.system-controller:clock-controller /bus@f0000/timer@2450000 Dropping the fwnode link to /bus@f0000/system-controller@44043000/clock-controller device: 'platform:44043000.system-controller:clock-controller--platform:2440000.timer': device_add devices_kset: Moving 2440000.timer to end of list platform 2440000.timer: Linked as a consumer to 44043000.system-controller:clock-controller /bus@f0000/timer@2440000 Dropping the fwnode link to /bus@f0000/system-controller@44043000/clock-controller device: 'platform:44043000.system-controller:clock-controller--platform:2430000.timer': device_add devices_kset: Moving 2430000.timer to end of list platform 2430000.timer: Linked as a consumer to 44043000.system-controller:clock-controller /bus@f0000/timer@2430000 Dropping the fwnode link to /bus@f0000/system-controller@44043000/clock-controller device: 'platform:44043000.system-controller:clock-controller--platform:2420000.timer': device_add devices_kset: Moving 2420000.timer to end of list platform 2420000.timer: Linked as a consumer to 44043000.system-controller:clock-controller /bus@f0000/timer@2420000 Dropping the fwnode link to /bus@f0000/system-controller@44043000/clock-controller device: 'platform:44043000.system-controller:clock-controller--platform:2410000.timer': device_add devices_kset: Moving 2410000.timer to end of list platform 2410000.timer: Linked as a consumer to 44043000.system-controller:clock-controller /bus@f0000/timer@2410000 Dropping the fwnode link to /bus@f0000/system-controller@44043000/clock-controller device: 'platform:44043000.system-controller:clock-controller--platform:2400000.timer': device_add devices_kset: Moving 2400000.timer to end of list platform 2400000.timer: Linked as a consumer to 44043000.system-controller:clock-controller /bus@f0000/timer@2400000 Dropping the fwnode link to /bus@f0000/system-controller@44043000/clock-controller device: 'platform:44043000.system-controller:clock-controller--platform:1082e4.clock-controller': device_add devices_kset: Moving 1082e4.clock-controller to end of list platform 1082e4.clock-controller: Linked as a consumer to 44043000.system-controller:clock-controller /bus@f0000/bus@100000/clock-controller@82e4 Dropping the fwnode link to /bus@f0000/system-controller@44043000/clock-controller device: 'platform:44043000.system-controller:clock-controller--platform:1082e0.clock-controller': device_add devices_kset: Moving 1082e0.clock-controller to end of list platform 1082e0.clock-controller: Linked as a consumer to 44043000.system-controller:clock-controller /bus@f0000/bus@100000/clock-controller@82e0 Dropping the fwnode link to /bus@f0000/system-controller@44043000/clock-controller device: 'platform:44043000.system-controller:clock-controller--platform:2b1f0000.rtc': device_add devices_kset: Moving 2b1f0000.rtc to end of list platform 2b1f0000.rtc: Linked as a consumer to 44043000.system-controller:clock-controller /bus@f0000/bus@b00000/rtc@2b1f0000 Dropping the fwnode link to /bus@f0000/system-controller@44043000/clock-controller device: 'platform:44043000.system-controller:clock-controller--platform:2b300050.target-module': device_add devices_kset: Moving 2b300050.target-module to end of list platform 2b300050.target-module: Linked as a consumer to 44043000.system-controller:clock-controller /bus@f0000/bus@b00000/target-module@2b300050 Dropping the fwnode link to /bus@f0000/system-controller@44043000/clock-controller device: '44043000.system-controller:reset-controller': device_add devices_kset: Moving 2400000.timer to end of list devices_kset: Moving 2410000.timer to end of list devices_kset: Moving 2420000.timer to end of list devices_kset: Moving 2430000.timer to end of list devices_kset: Moving 2440000.timer to end of list devices_kset: Moving 2450000.timer to end of list devices_kset: Moving 2460000.timer to end of list devices_kset: Moving 2470000.timer to end of list devices_kset: Moving 600000.gpio to end of list devices_kset: Moving regulator-4 to end of list devices_kset: Moving fa00000.mmc to end of list platform 600000.gpio: error -EPROBE_DEFER: supplier bus@f0000:interrupt-controller@a00000 not ready devices_kset: Moving 601000.gpio to end of list platform 601000.gpio: error -EPROBE_DEFER: supplier bus@f0000:interrupt-controller@a00000 not ready devices_kset: Moving regulator-4 to end of list devices_kset: Moving fa00000.mmc to end of list devices_kset: Moving 20000000.i2c to end of list platform regulator-4: error -EPROBE_DEFER: supplier 600000.gpio not ready device: 'i2c-0': device_add device: 'i2c-0': device_add device: '0-0051': device_add device: '0-003f': device_add ----- cycle: start ----- /bus@f0000/dwc3-usb@f900000/usb@31000000: cycle: depends on /bus@f0000/i2c@20000000/tps6598x@3f/connector /bus@f0000/i2c@20000000/tps6598x@3f/connector: cycle: depends on /bus@f0000/dwc3-usb@f900000/usb@31000000 ----- cycle: end ----- /bus@f0000/i2c@20000000/tps6598x@3f/connector: Fixed dependency cycle(s) with /bus@f0000/dwc3-usb@f900000/usb@31000000 omap_i2c 20000000.i2c: bus 0 rev0.12 at 400 kHz devices_kset: Moving 20010000.i2c to end of list device: 'i2c-1': device_add device: 'i2c-1': device_add device: '1-001b': device_add device: 'platform:regulator-5--i2c:1-001b': device_add devices_kset: Moving 1-001b to end of list i2c 1-001b: Linked as a consumer to regulator-5 /bus@f0000/i2c@20010000/audio-codec@1b Dropping the fwnode link to /regulator-5 device: 'platform:regulator-2--i2c:1-001b': device_add devices_kset: Moving 1-001b to end of list i2c 1-001b: Linked as a consumer to regulator-2 /bus@f0000/i2c@20010000/audio-codec@1b Dropping the fwnode link to /regulator-2 device: '1-003b': device_add ----- cycle: start ----- /bus@f0000/i2c@20010000/bridge-hdmi@3b: cycle: depends on /bus@f0000/dss@30200000 ----- cycle: start ----- /bus@f0000/i2c@20010000: cycle: depends on /bus@f0000/dss@30200000 /bus@f0000/i2c@20010000/gpio@22: cycle: child of /bus@f0000/i2c@20010000 /bus@f0000/i2c@20010000/bridge-hdmi@3b: cycle: depends on /bus@f0000/i2c@20010000/gpio@22 /bus@f0000/dss@30200000: cycle: depends on /bus@f0000/i2c@20010000/bridge-hdmi@3b ----- cycle: end ----- /bus@f0000/dss@30200000: Fixed dependency cycle(s) with /bus@f0000/i2c@20010000/bridge-hdmi@3b device: 'i2c:1-003b--platform:30200000.dss': device_add platform 30200000.dss: Linked as a sync state only consumer to 1-003b (flags 0x3c0) /bus@f0000/dss@30200000 Dropping the fwnode link to /bus@f0000/i2c@20010000/bridge-hdmi@3b device: 'platform:connector-hdmi--i2c:1-003b': device_add i2c 1-003b: Linked as a sync state only consumer to connector-hdmi (flags 0x3c0) /bus@f0000/i2c@20010000/bridge-hdmi@3b Dropping the fwnode link to /connector-hdmi ----- cycle: start ----- /bus@f0000/dss@30200000: cycle: depends on /bus@f0000/i2c@20010000/bridge-hdmi@3b /bus@f0000/i2c@20010000/bridge-hdmi@3b: cycle: depends on /bus@f0000/dss@30200000 ----- cycle: end ----- /bus@f0000/i2c@20010000/bridge-hdmi@3b: Fixed dependency cycle(s) with /bus@f0000/dss@30200000 device: 'platform:30200000.dss--i2c:1-003b': device_add i2c 1-003b: Linked as a sync state only consumer to 30200000.dss (flags 0x3c0) /bus@f0000/i2c@20010000/bridge-hdmi@3b Dropping the fwnode link to /bus@f0000/dss@30200000 ----- cycle: start ----- /bus@f0000/dss@30200000: cycle: depends on /bus@f0000/i2c@20010000/bridge-hdmi@3b /bus@f0000/i2c@20010000: cycle: depends on /bus@f0000/dss@30200000 /bus@f0000/i2c@20010000/gpio@22: cycle: child of /bus@f0000/i2c@20010000 /bus@f0000/i2c@20010000/bridge-hdmi@3b: cycle: depends on /bus@f0000/i2c@20010000/gpio@22 ----- cycle: end ----- /bus@f0000/i2c@20010000/bridge-hdmi@3b: Fixed dependency cycle(s) with /bus@f0000/i2c@20010000/gpio@22 device: '1-0022': device_add device: 'i2c:1-0022--platform:regulator-3': device_add devices_kset: Moving regulator-3 to end of list devices_kset: Moving fa00000.mmc to end of list platform regulator-3: Linked as a consumer to 1-0022 /regulator-3 Dropping the fwnode link to /bus@f0000/i2c@20010000/gpio@22 device: 'i2c:1-0022--i2c:1-003b': device_add i2c 1-003b: Linked as a sync state only consumer to 1-0022 (flags 0x3c0) /bus@f0000/i2c@20010000/bridge-hdmi@3b Dropping the fwnode link to /bus@f0000/i2c@20010000/gpio@22 device: 'platform:f4000.pinctrl--i2c:1-0022': device_add devices_kset: Moving 1-0022 to end of list devices_kset: Moving regulator-3 to end of list devices_kset: Moving fa00000.mmc to end of list i2c 1-0022: Linked as a consumer to f4000.pinctrl /bus@f0000/i2c@20010000/gpio@22 Dropping the fwnode link to /bus@f0000/pinctrl@f4000 device: 'platform:601000.gpio--i2c:1-0022': device_add devices_kset: Moving 1-0022 to end of list devices_kset: Moving regulator-3 to end of list devices_kset: Moving fa00000.mmc to end of list i2c 1-0022: Linked as a consumer to 601000.gpio /bus@f0000/i2c@20010000/gpio@22 Dropping the fwnode link to /bus@f0000/gpio@601000 i2c 1-0022: error -EPROBE_DEFER: supplier 601000.gpio not ready omap_i2c 20010000.i2c: bus 1 rev0.12 at 100 kHz omap_i2c 20010000.i2c: Dropping the link to 601000.gpio device: 'platform:601000.gpio--platform:20010000.i2c': device_unregister omap_i2c 20010000.i2c: Dropping the link to 30200000.dss device: 'platform:30200000.dss--platform:20010000.i2c': device_unregister omap_i2c 20010000.i2c: Dropping the link to connector-hdmi device: 'platform:connector-hdmi--platform:20010000.i2c': device_unregister omap_i2c 20010000.i2c: Dropping the link to regulator-2 device: 'platform:regulator-2--platform:20010000.i2c': device_unregister omap_i2c 20010000.i2c: Dropping the link to regulator-5 device: 'platform:regulator-5--platform:20010000.i2c': device_unregister devices_kset: Moving 20020000.i2c to end of list device: 'i2c-2': device_add device: 'i2c-2': device_add omap_i2c 20020000.i2c: bus 2 rev0.12 at 400 kHz devices_kset: Moving regulator-3 to end of list devices_kset: Moving fa00000.mmc to end of list devices_kset: Moving regulator-5 to end of list devices_kset: Moving 1-001b to end of list platform regulator-3: error -EPROBE_DEFER: supplier 1-0022 not ready devices_kset: Moving bus@f0000:interrupt-controller@a00000 to end of list devices_kset: Moving 600000.gpio to end of list devices_kset: Moving regulator-4 to end of list devices_kset: Moving fa00000.mmc to end of list devices_kset: Moving 601000.gpio to end of list devices_kset: Moving 1-0022 to end of list devices_kset: Moving regulator-3 to end of list devices_kset: Moving fa00000.mmc to end of list ti-sci-intr bus@f0000:interrupt-controller@a00000: Interrupt Router 3 domain created devices_kset: Moving 48000000.interrupt-controller to end of list devices_kset: Moving 485c0100.dma-controller to end of list devices_kset: Moving 485c0000.dma-controller to end of list device: 'regulator.4': device_add ti-sci-inta 48000000.interrupt-controller: Interrupt Aggregator domain 28 created devices_kset: Moving 2b300050.target-module to end of list devices_kset: Moving leds to end of list leds-gpio leds: error -EPROBE_DEFER: Failed to get GPIO '/leds/led-0' devices_kset: Moving 1082e0.clock-controller to end of list devices_kset: Moving 1082e4.clock-controller to end of list devices_kset: Moving 485c0100.dma-controller to end of list ti-udma 485c0100.dma-controller: Number of rings: 82 ti-udma 485c0100.dma-controller: Channels: 48 (bchan: 18, tchan: 12, rchan: 18) device: 'dma0chan0': device_add device: 'dma0chan1': device_add device: 'dma0chan2': device_add device: 'dma0chan3': device_add device: 'dma0chan4': device_add device: 'dma0chan5': device_add device: 'dma0chan6': device_add device: 'dma0chan7': device_add device: 'dma0chan8': device_add device: 'dma0chan9': device_add device: 'dma0chan10': device_add device: 'dma0chan11': device_add device: 'dma0chan12': device_add device: 'dma0chan13': device_add device: 'dma0chan14': device_add device: 'dma0chan15': device_add device: 'dma0chan16': device_add device: 'dma0chan17': device_add device: 'dma0chan18': device_add device: 'dma0chan19': device_add device: 'dma0chan20': device_add device: 'dma0chan21': device_add device: 'dma0chan22': device_add device: 'dma0chan23': device_add device: 'dma0chan24': device_add device: 'dma0chan25': device_add device: 'dma0chan26': device_add device: 'dma0chan27': device_add device: 'dma0chan28': device_add device: 'dma0chan29': device_add device: 'dma0chan30': device_add device: 'dma0chan31': device_add device: 'dma0chan32': device_add device: 'dma0chan33': device_add device: 'dma0chan34': device_add device: 'dma0chan35': device_add device: 'dma0chan36': device_add device: 'dma0chan37': device_add device: 'dma0chan38': device_add device: 'dma0chan39': device_add device: 'dma0chan40': device_add device: 'dma0chan41': device_add device: 'dma0chan42': device_add device: 'dma0chan43': device_add device: 'dma0chan44': device_add device: 'dma0chan45': device_add device: 'dma0chan46': device_add device: 'dma0chan47': device_add devices_kset: Moving 485c0000.dma-controller to end of list ti-udma 485c0000.dma-controller: Number of rings: 150 ti-udma 485c0000.dma-controller: Channels: 35 (tchan: 20, rchan: 15) device: 'dma1chan0': device_add device: 'dma1chan1': device_add device: 'dma1chan2': device_add device: 'dma1chan3': device_add device: 'dma1chan4': device_add device: 'dma1chan5': device_add device: 'dma1chan6': device_add device: 'dma1chan7': device_add device: 'dma1chan8': device_add device: 'dma1chan9': device_add device: 'dma1chan10': device_add device: 'dma1chan11': device_add device: 'dma1chan12': device_add device: 'dma1chan13': device_add device: 'dma1chan14': device_add device: 'dma1chan15': device_add device: 'dma1chan16': device_add device: 'dma1chan17': device_add device: 'dma1chan18': device_add device: 'dma1chan19': device_add device: 'dma1chan20': device_add device: 'dma1chan21': device_add device: 'dma1chan22': device_add device: 'dma1chan23': device_add device: 'dma1chan24': device_add device: 'dma1chan25': device_add device: 'dma1chan26': device_add device: 'dma1chan27': device_add device: 'dma1chan28': device_add device: 'dma1chan29': device_add device: 'dma1chan30': device_add device: 'dma1chan31': device_add device: 'dma1chan32': device_add device: 'dma1chan33': device_add device: 'dma1chan34': device_add devices_kset: Moving 2800000.serial to end of list device: 'ttyS2': device_unregister printk: legacy console [ttyS2] disabled device: '2800000.serial:0': device_add device: '2800000.serial:0.0': device_add 2800000.serial: ttyS2 at MMIO 0x2800000 (irq = 237, base_baud = 3000000) is a 8250 printk: legacy console [ttyS2] enabled device: 'serial0': device_add device: 'ttyS2': device_add devices_kset: Moving fc40000.spi to end of list device: 'spi0': device_add device: 'spi0.0': device_add 7 fixed-partitions partitions found on MTD device fc40000.spi.0 Creating 7 MTD partitions on "fc40000.spi.0": 0x000000000000-0x000000080000 : "ospi.tiboot3" device: 'mtd0': device_add device: 'mtd0': device_add device: 'mtd0ro': device_add device: 'mtdblock0': device_add device: '31:0': device_add 0x000000080000-0x000000280000 : "ospi.tispl" device: 'mtd1': device_add device: 'mtd1': device_add device: 'mtd1ro': device_add device: 'mtdblock1': device_add device: '31:1': device_add 0x000000280000-0x000000680000 : "ospi.u-boot" device: 'mtd2': device_add device: 'mtd2': device_add device: 'mtd2ro': device_add device: 'mtdblock2': device_add device: '31:2': device_add 0x000000680000-0x0000006c0000 : "ospi.env" device: 'mtd3': device_add device: 'mtd3': device_add device: 'mtd3ro': device_add device: 'mtdblock3': device_add device: '31:3': device_add 0x0000006c0000-0x000000700000 : "ospi.env.backup" device: 'mtd4': device_add device: 'mtd4': device_add device: 'mtd4ro': device_add device: 'mtdblock4': device_add device: '31:4': device_add 0x000000800000-0x000003fc0000 : "ospi.rootfs" device: 'mtd5': device_add device: 'mtd5': device_add device: 'mtd5ro': device_add device: 'mtdblock5': device_add device: '31:5': device_add 0x000003fc0000-0x000004000000 : "ospi.phypattern" device: 'mtd6': device_add device: 'mtd6': device_add device: 'mtd6ro': device_add device: 'mtdblock6': device_add device: '31:6': device_add devices_kset: Moving 8000000.ethernet to end of list device: '8000f00.mdio': device_add device: 'platform:f4000.pinctrl--platform:8000f00.mdio': device_add devices_kset: Moving 8000f00.mdio to end of list platform 8000f00.mdio: Linked as a consumer to f4000.pinctrl /bus@f0000/ethernet@8000000/mdio@f00 Dropping the fwnode link to /bus@f0000/pinctrl@f4000 device: 'platform:44043000.system-controller:clock-controller--platform:8000f00.mdio': device_add devices_kset: Moving 8000f00.mdio to end of list platform 8000f00.mdio: Linked as a consumer to 44043000.system-controller:clock-controller /bus@f0000/ethernet@8000000/mdio@f00 Dropping the fwnode link to /bus@f0000/system-controller@44043000/clock-controller davinci_mdio 8000f00.mdio: Configuring MDIO in manual mode device: '8000f00.mdio': device_add davinci_mdio 8000f00.mdio: davinci mdio revision 9.7, bus freq 1000000 device: '8000f00.mdio:00': device_add device: '8000f00.mdio:01': device_add davinci_mdio 8000f00.mdio: phy[0]: device 8000f00.mdio:00, driver TI DP83867 davinci_mdio 8000f00.mdio: phy[1]: device 8000f00.mdio:01, driver TI DP83867 am65-cpsw-nuss 8000000.ethernet: initializing am65 cpsw nuss version 0x6BA01103, cpsw version 0x6BA81103 Ports: 3 quirks:00000002 device: 'phy:phy-104044.phy.0--platform:8000000.ethernet': device_add devices_kset: Moving 8000000.ethernet to end of list devices_kset: Moving 8000f00.mdio to end of list devices_kset: Moving 8000f00.mdio to end of list devices_kset: Moving 8000f00.mdio:00 to end of list devices_kset: Moving 8000f00.mdio:01 to end of list am65-cpsw-nuss 8000000.ethernet: Linked as a consumer to phy-104044.phy.0 device: 'phy:phy-104044.phy.1--platform:8000000.ethernet': device_add devices_kset: Moving 8000000.ethernet to end of list devices_kset: Moving 8000f00.mdio to end of list devices_kset: Moving 8000f00.mdio to end of list devices_kset: Moving 8000f00.mdio:00 to end of list devices_kset: Moving 8000f00.mdio:01 to end of list am65-cpsw-nuss 8000000.ethernet: Linked as a consumer to phy-104044.phy.1 am65-cpsw-nuss 8000000.ethernet: initialized cpsw ale version 1.5 am65-cpsw-nuss 8000000.ethernet: ALE Table size 512, Policers 32 device: 'tchan19-0xc600': device_add device: 'tchan20-0xc601': device_add device: 'tchan21-0xc602': device_add device: 'tchan22-0xc603': device_add device: 'tchan23-0xc604': device_add device: 'tchan24-0xc605': device_add device: 'tchan25-0xc606': device_add device: 'tchan26-0xc607': device_add device: 'rchan19-0x4600': device_add am65-cpsw-nuss 8000000.ethernet: set new flow-id-base 19 device: 'eth0': device_add device: 'eth1': device_add am65-cpsw-nuss 8000000.ethernet: Dropping the link to 104044.phy device: 'platform:104044.phy--platform:8000000.ethernet': device_unregister am65-cpsw-nuss 8000000.ethernet: Dropping the link to bus@f0000 device: 'platform:bus@f0000--platform:8000000.ethernet': device_unregister devices_kset: Moving f900000.dwc3-usb to end of list device: '31000000.usb': device_add ----- cycle: start ----- /bus@f0000/dwc3-usb@f900000/usb@31000000: cycle: depends on /bus@f0000/i2c@20000000/tps6598x@3f/connector /bus@f0000/i2c@20000000/tps6598x@3f/connector: cycle: depends on /bus@f0000/dwc3-usb@f900000/usb@31000000 ----- cycle: end ----- /bus@f0000/i2c@20000000/tps6598x@3f/connector: Fixed dependency cycle(s) with /bus@f0000/dwc3-usb@f900000/usb@31000000 device: 'platform:31000000.usb--i2c:0-003f': device_add i2c 0-003f: Linked as a sync state only consumer to 31000000.usb (flags 0x3c0) device: 'platform:bus@f0000--platform:31000000.usb': device_add devices_kset: Moving 31000000.usb to end of list platform 31000000.usb: Linked as a consumer to bus@f0000 /bus@f0000/dwc3-usb@f900000/usb@31000000 Dropping the fwnode link to /bus@f0000 ----- cycle: start ----- /bus@f0000/i2c@20000000/tps6598x@3f/connector: cycle: depends on /bus@f0000/dwc3-usb@f900000/usb@31000000 ----- cycle: start ----- /bus@f0000/i2c@20000000/tps6598x@3f: cycle: depends on /bus@f0000/dwc3-usb@f900000/usb@31000000 /bus@f0000/i2c@20000000/tps6598x@3f/connector: cycle: child of /bus@f0000/i2c@20000000/tps6598x@3f /bus@f0000/dwc3-usb@f900000/usb@31000000: cycle: depends on /bus@f0000/i2c@20000000/tps6598x@3f/connector ----- cycle: end ----- /bus@f0000/dwc3-usb@f900000/usb@31000000: Fixed dependency cycle(s) with /bus@f0000/i2c@20000000/tps6598x@3f/connector dwc3 31000000.usb: Configuration mismatch. dr_mode forced to host device: 'xhci-hcd.0.auto': device_add xhci-hcd xhci-hcd.0.auto: xHCI Host Controller xhci-hcd xhci-hcd.0.auto: new USB bus registered, assigned bus number 1 xhci-hcd xhci-hcd.0.auto: USB3 root hub has no ports xhci-hcd xhci-hcd.0.auto: hcc params 0x0258fe6d hci version 0x110 quirks 0x0000808020000010 xhci-hcd xhci-hcd.0.auto: irq 240, io mem 0x31000000 device: 'usb1': device_add device: '1-0:1.0': device_add hub 1-0:1.0: USB hub found hub 1-0:1.0: 1 port detected device: 'usb1-port1': device_add device: 'ep_81': device_add device: 'ep_00': device_add /bus@f0000/dwc3-usb@f900000/usb@31000000 Dropping the fwnode link to /bus@f0000/i2c@20000000/tps6598x@3f/connector device: 'wakeup0': device_add dwc3-am62 f900000.dwc3-usb: Dropping the link to bus@f0000 device: 'platform:bus@f0000--platform:f900000.dwc3-usb': device_unregister devices_kset: Moving f910000.dwc3-usb to end of list device: '31100000.usb': device_add device: 'platform:f4000.pinctrl--platform:31100000.usb': device_add devices_kset: Moving 31100000.usb to end of list platform 31100000.usb: Linked as a consumer to f4000.pinctrl /bus@f0000/dwc3-usb@f910000/usb@31100000 Dropping the fwnode link to /bus@f0000/pinctrl@f4000 device: 'platform:bus@f0000--platform:31100000.usb': device_add devices_kset: Moving 31100000.usb to end of list platform 31100000.usb: Linked as a consumer to bus@f0000 /bus@f0000/dwc3-usb@f910000/usb@31100000 Dropping the fwnode link to /bus@f0000 device: 'xhci-hcd.1.auto': device_add xhci-hcd xhci-hcd.1.auto: xHCI Host Controller xhci-hcd xhci-hcd.1.auto: new USB bus registered, assigned bus number 2 xhci-hcd xhci-hcd.1.auto: USB3 root hub has no ports xhci-hcd xhci-hcd.1.auto: hcc params 0x0258fe6d hci version 0x110 quirks 0x0000808020000010 xhci-hcd xhci-hcd.1.auto: irq 241, io mem 0x31100000 device: 'usb2': device_add device: '2-0:1.0': device_add hub 2-0:1.0: USB hub found hub 2-0:1.0: 1 port detected device: 'usb2-port1': device_add device: 'ep_81': device_add device: 'ep_00': device_add device: 'wakeup1': device_add dwc3-am62 f910000.dwc3-usb: Dropping the link to bus@f0000 device: 'platform:bus@f0000--platform:f910000.dwc3-usb': device_unregister dwc3-am62 f910000.dwc3-usb: Dropping the link to f4000.pinctrl device: 'platform:f4000.pinctrl--platform:f910000.dwc3-usb': device_unregister devices_kset: Moving 2b1f0000.rtc to end of list device: 'wakeup2': device_add device: 'rtc0': device_add device: 'alarmtimer.2.auto': device_add device: 'wakeup3': device_add rtc-ti-k3 2b1f0000.rtc: registered as rtc0 rtc-ti-k3 2b1f0000.rtc: setting system clock to 1970-01-01T00:00:18 UTC (18) device: 'ti_k3_rtc_scratch0': device_add devices_kset: Moving cpufreq-dt to end of list device: 'cooling_device0': device_add devices_kset: Moving 600000.gpio to end of list devices_kset: Moving regulator-4 to end of list devices_kset: Moving fa00000.mmc to end of list device: 'gpiochip0': device_add devices_kset: Moving 601000.gpio to end of list devices_kset: Moving 1-0022 to end of list devices_kset: Moving regulator-3 to end of list devices_kset: Moving fa00000.mmc to end of list device: 'gpiochip1': device_add devices_kset: Moving regulator-4 to end of list devices_kset: Moving fa00000.mmc to end of list devices_kset: Moving 1-003b to end of list devices_kset: Moving 1-0022 to end of list devices_kset: Moving regulator-3 to end of list devices_kset: Moving fa00000.mmc to end of list pca953x 1-0022: supply vcc not found, using dummy regulator device: 'regulator.5': device_add device: 'regulator:regulator.0--i2c:1-0022': device_add devices_kset: Moving 1-0022 to end of list devices_kset: Moving regulator-3 to end of list devices_kset: Moving fa00000.mmc to end of list pca953x 1-0022: Linked as a consumer to regulator.0 pca953x 1-0022: using AI device: 'gpiochip2': device_add devices_kset: Moving regulator-3 to end of list devices_kset: Moving fa00000.mmc to end of list devices_kset: Moving 2b300050.target-module to end of list devices_kset: Moving leds to end of list device: 'regulator.6': device_add device: 'am62-sk:green:heartbeat': device_add leds-gpio leds: Dropping the link to 601000.gpio device: 'platform:601000.gpio--platform:leds': device_unregister devices_kset: Moving 1-003b to end of list sii902x 1-003b: supply iovcc not found, using dummy regulator device: 'regulator:regulator.0--i2c:1-003b': device_add devices_kset: Moving 1-003b to end of list sii902x 1-003b: Linked as a consumer to regulator.0 sii902x 1-003b: supply cvcc12 not found, using dummy regulator device: 'hdmi-audio-codec.3.auto': device_add device: 'i2c-3': device_add device: 'i2c-3': device_add i2c i2c-1: Added multiplexed i2c bus 3 sii902x 1-003b: Dropping the link to connector-hdmi device: 'platform:connector-hdmi--i2c:1-003b': device_unregister sii902x 1-003b: Dropping the link to 30200000.dss device: 'platform:30200000.dss--i2c:1-003b': device_unregister sii902x 1-003b: Dropping the link to 1-0022 device: 'i2c:1-0022--i2c:1-003b': device_unregister devices_kset: Moving 2b300050.target-module to end of list devices_kset: Moving 2b300050.target-module to end of list am65-cpsw-nuss 8000000.ethernet eth0: PHY [8000f00.mdio:00] driver [TI DP83867] (irq=POLL) am65-cpsw-nuss 8000000.ethernet eth0: configuring for phy/rgmii-rxid link mode am65-cpsw-nuss 8000000.ethernet eth0: Link is Up - 1Gbps/Full - flow control off Sending DHCP requests .., OK IP-Config: Got DHCP answer from 192.168.89.1, my address is 192.168.89.100 IP-Config: Complete: device=eth0, hwaddr=1c:63:49:0f:62:0e, ipaddr=192.168.89.100, mask=255.255.255.0, gw=192.168.89.1 host=buildroot, domain=lab, nis-domain=(none) bootserver=192.168.88.20, rootserver=192.168.88.20, rootpath= nameserver0=192.168.89.1 ntpserver0=192.168.89.1 clk: Disabling unused clocks PM: genpd: Disabling unused power domains ALSA device list: No soundcards found. device: '0:22': device_add VFS: Mounted root (nfs filesystem) on device 0:22. devtmpfs: mounted Freeing unused kernel memory: 5888K Run /sbin/init as init process with arguments: /sbin/init with environment: HOME=/ TERM=linux udevd[121]: starting version 3.2.14 udevd[122]: starting eudev-3.2.14 device: '0:29': device_add i2c:1-0022--i2c:1-003b i2c:1-0022--platform:regulator-3 i2c:1-003b--platform:30200000.dss phy:phy-104044.phy.0--platform:8000000.ethernet phy:phy-104044.phy.1--platform:8000000.ethernet platform:31000000.usb--i2c:0-003f platform:44043000.system-controller:clock-controller--platform:1082e0.clock-controller platform:44043000.system-controller:clock-controller--platform:1082e4.clock-controller platform:44043000.system-controller:clock-controller--platform:20000000.i2c platform:44043000.system-controller:clock-controller--platform:20010000.i2c platform:44043000.system-controller:clock-controller--platform:20020000.i2c platform:44043000.system-controller:clock-controller--platform:2400000.timer platform:44043000.system-controller:clock-controller--platform:2410000.timer platform:44043000.system-controller:clock-controller--platform:2420000.timer platform:44043000.system-controller:clock-controller--platform:2430000.timer platform:44043000.system-controller:clock-controller--platform:2440000.timer platform:44043000.system-controller:clock-controller--platform:2450000.timer platform:44043000.system-controller:clock-controller--platform:2460000.timer platform:44043000.system-controller:clock-controller--platform:2470000.timer platform:44043000.system-controller:clock-controller--platform:2800000.serial platform:44043000.system-controller:clock-controller--platform:2b10000.audio-controller platform:44043000.system-controller:clock-controller--platform:2b1f0000.rtc platform:44043000.system-controller:clock-controller--platform:2b300050.target-module platform:44043000.system-controller:clock-controller--platform:30200000.dss platform:44043000.system-controller:clock-controller--platform:600000.gpio platform:44043000.system-controller:clock-controller--platform:601000.gpio platform:44043000.system-controller:clock-controller--platform:8000000.ethernet platform:44043000.system-controller:clock-controller--platform:8000f00.mdio platform:44043000.system-controller:clock-controller--platform:e000000.watchdog platform:44043000.system-controller:clock-controller--platform:e010000.watchdog platform:44043000.system-controller:clock-controller--platform:e020000.watchdog platform:44043000.system-controller:clock-controller--platform:e030000.watchdog platform:44043000.system-controller:clock-controller--platform:e0f0000.watchdog platform:44043000.system-controller:clock-controller--platform:f900000.dwc3-usb platform:44043000.system-controller:clock-controller--platform:f910000.dwc3-usb platform:44043000.system-controller:clock-controller--platform:fa00000.mmc platform:44043000.system-controller:clock-controller--platform:fa10000.mmc platform:44043000.system-controller:clock-controller--platform:fc40000.spi platform:44043000.system-controller:clock-controller--platform:fd00000.gpu platform:44043000.system-controller:power-controller--platform:20000000.i2c platform:44043000.system-controller:power-controller--platform:20010000.i2c platform:44043000.system-controller:power-controller--platform:20020000.i2c platform:44043000.system-controller:power-controller--platform:2400000.timer platform:44043000.system-controller:power-controller--platform:2410000.timer platform:44043000.system-controller:power-controller--platform:2420000.timer platform:44043000.system-controller:power-controller--platform:2430000.timer platform:44043000.system-controller:power-controller--platform:2440000.timer platform:44043000.system-controller:power-controller--platform:2450000.timer platform:44043000.system-controller:power-controller--platform:2460000.timer platform:44043000.system-controller:power-controller--platform:2470000.timer platform:44043000.system-controller:power-controller--platform:2800000.serial platform:44043000.system-controller:power-controller--platform:2b10000.audio-controller platform:44043000.system-controller:power-controller--platform:2b1f0000.rtc platform:44043000.system-controller:power-controller--platform:2b300050.target-module platform:44043000.system-controller:power-controller--platform:30200000.dss platform:44043000.system-controller:power-controller--platform:600000.gpio platform:44043000.system-controller:power-controller--platform:601000.gpio platform:44043000.system-controller:power-controller--platform:8000000.ethernet platform:44043000.system-controller:power-controller--platform:b00000.temperature-sensor platform:44043000.system-controller:power-controller--platform:e000000.watchdog platform:44043000.system-controller:power-controller--platform:e010000.watchdog platform:44043000.system-controller:power-controller--platform:e020000.watchdog platform:44043000.system-controller:power-controller--platform:e030000.watchdog platform:44043000.system-controller:power-controller--platform:e0f0000.watchdog platform:44043000.system-controller:power-controller--platform:f900000.dwc3-usb platform:44043000.system-controller:power-controller--platform:f910000.dwc3-usb platform:44043000.system-controller:power-controller--platform:fa00000.mmc platform:44043000.system-controller:power-controller--platform:fa10000.mmc platform:44043000.system-controller:power-controller--platform:fc40000.spi platform:44043000.system-controller:power-controller--platform:fd00000.gpu platform:48000000.interrupt-controller--platform:485c0000.dma-controller platform:48000000.interrupt-controller--platform:485c0100.dma-controller platform:4d000000.mailbox--platform:44043000.system-controller platform:600000.gpio--platform:regulator-4 platform:601000.gpio--i2c:1-0022 platform:bus@f0000--platform:31000000.usb platform:bus@f0000--platform:31100000.usb platform:bus@f0000:interrupt-controller@a00000--platform:600000.gpio platform:bus@f0000:interrupt-controller@a00000--platform:601000.gpio platform:f4000.pinctrl--i2c:1-0022 platform:f4000.pinctrl--platform:20000000.i2c platform:f4000.pinctrl--platform:20010000.i2c platform:f4000.pinctrl--platform:20020000.i2c platform:f4000.pinctrl--platform:2800000.serial platform:f4000.pinctrl--platform:2b10000.audio-controller platform:f4000.pinctrl--platform:30200000.dss platform:f4000.pinctrl--platform:31100000.usb platform:f4000.pinctrl--platform:8000000.ethernet platform:f4000.pinctrl--platform:8000f00.mdio platform:f4000.pinctrl--platform:fa00000.mmc platform:f4000.pinctrl--platform:fa10000.mmc platform:f4000.pinctrl--platform:fc40000.spi platform:f4000.pinctrl--platform:leds platform:f4000.pinctrl--platform:regulator-4 platform:regulator-0--platform:regulator-1 platform:regulator-0--platform:regulator-2 platform:regulator-1--platform:regulator-4 platform:regulator-2--i2c:1-001b platform:regulator-2--platform:regulator-3 platform:regulator-2--platform:regulator-5 platform:regulator-3--platform:fa00000.mmc platform:regulator-4--platform:fa00000.mmc platform:regulator-5--i2c:1-001b regulator:regulator.0--i2c:1-0022 regulator:regulator.0--i2c:1-003b i2c:1-0022--platform:regulator-3 i2c:1-003b--platform:30200000.dss phy:phy-104044.phy.0--platform:8000000.ethernet phy:phy-104044.phy.1--platform:8000000.ethernet platform:31000000.usb--i2c:0-003f platform:44043000.system-controller:clock-controller--platform:1082e0.clock-controller platform:44043000.system-controller:clock-controller--platform:1082e4.clock-controller platform:44043000.system-controller:clock-controller--platform:20000000.i2c platform:44043000.system-controller:clock-controller--platform:20010000.i2c platform:44043000.system-controller:clock-controller--platform:20020000.i2c platform:44043000.system-controller:clock-controller--platform:2400000.timer platform:44043000.system-controller:clock-controller--platform:2410000.timer platform:44043000.system-controller:clock-controller--platform:2420000.timer platform:44043000.system-controller:clock-controller--platform:2430000.timer platform:44043000.system-controller:clock-controller--platform:2440000.timer platform:44043000.system-controller:clock-controller--platform:2450000.timer platform:44043000.system-controller:clock-controller--platform:2460000.timer platform:44043000.system-controller:clock-controller--platform:2470000.timer platform:44043000.system-controller:clock-controller--platform:2800000.serial platform:44043000.system-controller:clock-controller--platform:2b10000.audio-controller platform:44043000.system-controller:clock-controller--platform:2b1f0000.rtc platform:44043000.system-controller:clock-controller--platform:2b300050.target-module platform:44043000.system-controller:clock-controller--platform:30200000.dss platform:44043000.system-controller:clock-controller--platform:600000.gpio platform:44043000.system-controller:clock-controller--platform:601000.gpio platform:44043000.system-controller:clock-controller--platform:8000000.ethernet platform:44043000.system-controller:clock-controller--platform:8000f00.mdio platform:44043000.system-controller:clock-controller--platform:e000000.watchdog platform:44043000.system-controller:clock-controller--platform:e010000.watchdog platform:44043000.system-controller:clock-controller--platform:e020000.watchdog platform:44043000.system-controller:clock-controller--platform:e030000.watchdog platform:44043000.system-controller:clock-controller--platform:e0f0000.watchdog platform:44043000.system-controller:clock-controller--platform:f900000.dwc3-usb platform:44043000.system-controller:clock-controller--platform:f910000.dwc3-usb platform:44043000.system-controller:clock-controller--platform:fa00000.mmc platform:44043000.system-controller:clock-controller--platform:fa10000.mmc platform:44043000.system-controller:clock-controller--platform:fc40000.spi platform:44043000.system-controller:clock-controller--platform:fd00000.gpu platform:44043000.system-controller:power-controller--platform:20000000.i2c platform:44043000.system-controller:power-controller--platform:20010000.i2c platform:44043000.system-controller:power-controller--platform:20020000.i2c platform:44043000.system-controller:power-controller--platform:2400000.timer platform:44043000.system-controller:power-controller--platform:2410000.timer platform:44043000.system-controller:power-controller--platform:2420000.timer platform:44043000.system-controller:power-controller--platform:2430000.timer platform:44043000.system-controller:power-controller--platform:2440000.timer platform:44043000.system-controller:power-controller--platform:2450000.timer platform:44043000.system-controller:power-controller--platform:2460000.timer platform:44043000.system-controller:power-controller--platform:2470000.timer platform:44043000.system-controller:power-controller--platform:2800000.serial platform:44043000.system-controller:power-controller--platform:2b10000.audio-controller platform:44043000.system-controller:power-controller--platform:2b1f0000.rtc platform:44043000.system-controller:power-controller--platform:2b300050.target-module platform:44043000.system-controller:power-controller--platform:30200000.dss platform:44043000.system-controller:power-controller--platform:600000.gpio platform:44043000.system-controller:power-controller--platform:601000.gpio platform:44043000.system-controller:power-controller--platform:8000000.ethernet platform:44043000.system-controller:power-controller--platform:b00000.temperature-sensor platform:44043000.system-controller:power-controller--platform:e000000.watchdog platform:44043000.system-controller:power-controller--platform:e010000.watchdog platform:44043000.system-controller:power-controller--platform:e020000.watchdog platform:44043000.system-controller:power-controller--platform:e030000.watchdog platform:44043000.system-controller:power-controller--platform:e0f0000.watchdog platform:44043000.system-controller:power-controller--platform:f900000.dwc3-usb platform:44043000.system-controller:power-controller--platform:f910000.dwc3-usb platform:44043000.system-controller:power-controller--platform:fa00000.mmc platform:44043000.system-controller:power-controller--platform:fa10000.mmc platform:44043000.system-controller:power-controller--platform:fc40000.spi platform:44043000.system-controller:power-controller--platform:fd00000.gpu platform:48000000.interrupt-controller--platform:485c0000.dma-controller platform:48000000.interrupt-controller--platform:485c0100.dma-controller platform:4d000000.mailbox--platform:44043000.system-controller platform:600000.gpio--platform:regulator-4 platform:601000.gpio--i2c:1-0022 platform:bus@f0000--platform:31000000.usb platform:bus@f0000--platform:31100000.usb platform:bus@f0000:interrupt-controller@a00000--platform:600000.gpio platform:bus@f0000:interrupt-controller@a00000--platform:601000.gpio platform:f4000.pinctrl--i2c:1-0022 platform:f4000.pinctrl--platform:20000000.i2c platform:f4000.pinctrl--platform:20010000.i2c platform:f4000.pinctrl--platform:20020000.i2c platform:f4000.pinctrl--platform:2800000.serial platform:f4000.pinctrl--platform:2b10000.audio-controller platform:f4000.pinctrl--platform:30200000.dss platform:f4000.pinctrl--platform:31100000.usb platform:f4000.pinctrl--platform:8000000.ethernet platform:f4000.pinctrl--platform:8000f00.mdio platform:f4000.pinctrl--platform:fa00000.mmc platform:f4000.pinctrl--platform:fa10000.mmc platform:f4000.pinctrl--platform:fc40000.spi platform:f4000.pinctrl--platform:leds platform:f4000.pinctrl--platform:regulator-4 platform:regulator-0--platform:regulator-1 platform:regulator-0--platform:regulator-2 platform:regulator-1--platform:regulator-4 platform:regulator-2--i2c:1-001b platform:regulator-2--platform:regulator-3 platform:regulator-2--platform:regulator-5 platform:regulator-3--platform:fa00000.mmc platform:regulator-4--platform:fa00000.mmc platform:regulator-5--i2c:1-001b regulator:regulator.0--i2c:1-0022 regulator:regulator.0--i2c:1-003b
On Tue, Oct 29, 2024 at 4:21 AM Tomi Valkeinen <tomi.valkeinen@ideasonboard.com> wrote: > > Hi, > > On 28/10/2024 22:39, Saravana Kannan wrote: > > On Mon, Oct 28, 2024 at 1:06 AM Tomi Valkeinen > > <tomi.valkeinen@ideasonboard.com> wrote: > >> > >> Hi, > >> > >> On 26/10/2024 07:52, Saravana Kannan wrote: > >>> In attempting to optimize fw_devlink runtime, I introduced numerous cycle > >>> detection bugs by foregoing cycle detection logic under specific > >>> conditions. Each fix has further narrowed the conditions for optimization. > >>> > >>> It's time to give up on these optimization attempts and just run the cycle > >>> detection logic every time fw_devlink tries to create a device link. > >>> > >>> The specific bug report that triggered this fix involved a supplier fwnode > >>> that never gets a device created for it. Instead, the supplier fwnode is > >>> represented by the device that corresponds to an ancestor fwnode. > >>> > >>> In this case, fw_devlink didn't do any cycle detection because the cycle > >>> detection logic is only run when a device link is created between the > >>> devices that correspond to the actual consumer and supplier fwnodes. > >>> > >>> With this change, fw_devlink will run cycle detection logic even when > >>> creating SYNC_STATE_ONLY proxy device links from a device that is an > >>> ancestor of a consumer fwnode. > >>> > >>> Reported-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com> > >>> Closes: https://lore.kernel.org/all/1a1ab663-d068-40fb-8c94-f0715403d276@ideasonboard.com/ > >>> Fixes: 6442d79d880c ("driver core: fw_devlink: Improve detection of overlapping cycles") > >>> Signed-off-by: Saravana Kannan <saravanak@google.com> > >>> --- > >>> Greg, > >>> > >>> I've tested this on my end and it looks ok and nothing fishy is going > >>> on. You can pick this up once Tomi gives a Tested-by. > >> > >> I tested this on TI AM62 SK board. It has an LVDS (OLDI) display and a > >> HDMI output, and both displays are connected to the same display > >> subsystem. I tested with OLDI single and dual link cases, with and > >> without HDMI, and in all cases probing works fine. > >> > >> Looks good on that front, so: > >> > >> Tested-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com> > > > > Great! Thanks! > > > >> You also asked for a diff of the devlinks. That part doesn't look so > >> good to me, but probably you can tell if it's normal or not. > > > > TL;DR: All device links in a cycle get marked as > > DL_FLAG_SYNC_STATE_ONLY and DL_FLAG_CYCLE (in addition to other > > flags). All DL_FLAG_SYNC_STATE_ONLY (not all of them are cycles) will > > get deleted after the consumer probes (since they are no longer needed > > after that). My guess on what's going on is that with the patch, > > fw_devlink found and marked more device links as cycles. Ones that in > > the past weren't detected as being part of a cycle but coincidentally > > the "post-init" dependency was the one that was getting ignored/not > > enforced. So the actual links in a cycle getting deleted after all the > > devices have probed is not a problem. > > Ok. Yep, it might all be fine. I still don't understand all that's going > on here, so maybe look at one more case below. > > > You can enable the "cycle" logs in drivers/base/core.c so it's easier > > to follow the cycles fw_devlink detected. But the logs are a bit > > cryptic because it tries to print all the multiple cycles that were > > detected using a recursive search. > > > > The non-cycle use for DL_FLAG_SYNC_STATE_ONLY is for parent devices to > > put a "proxy-vote" (Hey supplier, you still have a consumer that > > hasn't bound to a driver yet) for descendant (children, grand > > children) devices that haven't been created yet. So, without the fix > > it's possible some descendant child never got to probe and the > > DL_FLAG_SYNC_STATE_ONLY device link stuck around. > > > > If you can confirm all the deleted device links fall into one of these > > two categories, then there's no issue here. If you find cases that > > aren't clear, then let me know which one and point to specific nodes > > in an upstream DTS file and I can take a look. > > > > Every device link folder has a "sync_state_only" file that says if it > > has the DL_FLAG_SYNC_STATE_ONLY set. But to check for the cycle flag, > > you'll have to extend the debug log in device_link_add() that goes: > > "Linked as a sync state only consumer to......" and print the "flags" param. > > I added this print. > > I thought I'll test without any non-upstream patches, so this is booting > with the upstream k3-am625-sk.dtb, no overlays. I've attached boot log > (with this patch applied), and devlink lists, without and with this patch. > > As the OLDI stuff is not upstream, I did expect to see less diff, and > that is the case. It's still somewhat interesting diff: > > $ diff devlink-broken.txt devlink-fixed.txt > 1d0 > < i2c:1-0022--i2c:1-003b > > So that's the gpio expander (exp1: gpio@22 in k3-am625-sk.dts) and the > hdmi bridge (sii9022: bridge-hdmi@3b in k3-am62x-sk-common.dtsi). And, > indeed, in the log I can see: > > i2c 1-003b: Linked as a sync state only consumer to 1-0022 (flags 0x3c0) > /bus@f0000/i2c@20010000/bridge-hdmi@3b Dropping the fwnode link to > /bus@f0000/i2c@20010000/gpio@22 > > If I'm not mistaken, the above means that the framework has decided > there's a (possible) probe time cyclic dependency between the gpio > expander and the hdmi bridge, right? > > I don't think that makes sense, and I was trying to understand why the > framework has arrived to such a conclusion, but it's not clear to me. > > Also, I can see, e.g.: > > /bus@f0000/i2c@20010000: cycle: depends on /bus@f0000/dss@30200000 > > So somehow the i2c bus has a dependency on the DSS? The DSS does not > depend on the i2c, but the HDMI does, so I can understand that the DSS > would have a dependency to i2c. But the other way around? Thanks for being persistent! :) I think you found a real issue in this patch. I'm squeezing these fixes late at night and between my regular work. So, apologies in advance for untested patches and me going with hunches. This part probably won't make sense, but I'm "explaining" it here just to record it somewhere if I or someone else comes back and looks at this after a few months. What's happening is that when 30200000.dss was added, 20010000.i2c was creating a sync state only proxy link for bridge-hdmi@3b (child of i2c). But when creating the proxy link, fw_devlink detected the cycle between bridge-hdmi@3b and 30200000.dss. That cycle is valid, but this patch also results in marking the "proxy" link as part of a cycle (when it wasn't). So it incorrectly marked i2c as being in a consumer of with dss and part of a cycle. Later on when running cycle detection logic between bridge-hdmi@3b and gpio@22, the cycle detection logic follows the i2c to dss link because it thinks the i2c really depends on dss but is part of a cycle. Try this fix on top of this patch and it should allow probing for all the previous broken scenarios AND should avoid dropping some links incorrectly. --- a/drivers/base/core.c +++ b/drivers/base/core.c @@ -2115,11 +2115,6 @@ static int fw_devlink_create_devlink(struct device *con, if (link->flags & FWLINK_FLAG_IGNORE) return 0; - if (con->fwnode == link->consumer) - flags = fw_devlink_get_flags(link->flags); - else - flags = FW_DEVLINK_FLAGS_PERMISSIVE; - /* * In some cases, a device P might also be a supplier to its child node * C. However, this would defer the probe of C until the probe of P @@ -2147,13 +2142,17 @@ static int fw_devlink_create_devlink(struct device *con, device_links_write_lock(); if (__fw_devlink_relax_cycles(link->consumer, sup_handle)) { __fwnode_link_cycle(link); - flags = fw_devlink_get_flags(link->flags); pr_debug("----- cycle: end -----\n"); pr_info("%pfwf: Fixed dependency cycle(s) with %pfwf\n", link->consumer, sup_handle); } device_links_write_unlock(); + if (con->fwnode == link->consumer) + flags = fw_devlink_get_flags(link->flags); + else + flags = FW_DEVLINK_FLAGS_PERMISSIVE; + if (sup_handle->flags & FWNODE_FLAG_NOT_DEVICE) sup_dev = fwnode_get_next_parent_dev(sup_handle); else Thanks, Saravana > > Tomi > > >> > >> $ diff devlink-single-broken.txt devlink-single-fixed.txt > > > > I was hoping you'd give me some line count diff too to get a sense of > > if it's wreaking havoc or not. But based on my local testing on > > different hardware, I'm expecting a very small number of device links > > are getting affected. > > > >> 2d1 > >> < i2c:1-0022--i2c:1-003b > >> 11d9 > >> < > >> platform:44043000.system-controller:clock-controller--platform:20010000.i2c > >> 27d24 > >> < platform:44043000.system-controller:clock-controller--platform:601000.gpio > >> 42d38 > >> < > >> platform:44043000.system-controller:power-controller--platform:20010000.i2c > >> 58d53 > >> < platform:44043000.system-controller:power-controller--platform:601000.gpio > >> 74d68 > >> < platform:4d000000.mailbox--platform:44043000.system-controller > > > > I took a quick look at this one in > > arch/arm64/boot/dts/ti/k3-am62-main.dtsi which I assume is part of the > > device you are testing on and I couldn't find a cycle. But with dtsi > > and dts files, it's hard to find these manually. Let me know if > > fw_devlink is thinking there's a cycle where there is none. > > > >> 76d69 > >> < platform:601000.gpio--i2c:1-0022 > >> 80d72 > >> < platform:bus@f0000:interrupt-controller@a00000--platform:601000.gpio > >> 82d73 > >> < platform:f4000.pinctrl--i2c:1-0022 > >> 84d74 > >> < platform:f4000.pinctrl--platform:20010000.i2c > >> > >> "i2c:1-003b" is the hdmi bridge, "i2c:1-0022" is a gpio expander. So, > >> for example, we lose the devlink between the gpio expander and the hdmi > >> bridge. The expander is used for interrupts. There's an interrupt line > >> from the HDMI bridge to the expander, and from there there's an > >> interrupt line going to the SoC. > >> > >> Also, I noticed the devlinks change if I load the display drivers. The > >> above is before loading. Comparing the loaded/not-loaded: > > > > Yeah, DL_FLAG_SYNC_STATE_ONLY device links vanishing as more devices > > probe is not a problem. That's working as intended. > > > > Thanks, > > Saravana > > > >> > >> $ diff devlink-dual-fixed.txt devlink-dual-fixed-loaded.txt > >> 3d2 > >> < i2c:1-003b--platform:30200000.dss > >> 23d21 > >> < > >> platform:44043000.system-controller:clock-controller--platform:30200000.dss > >> 52d49 > >> < > >> platform:44043000.system-controller:power-controller--platform:30200000.dss > >> 73d69 > >> < platform:display--platform:30200000.dss > >> 78d73 > >> < platform:f4000.pinctrl--platform:30200000.dss > >> 97a93 > >> > regulator:regulator.0--platform:display > >> > >> Tomi > >> > >> > >>> Thanks, > >>> Saravana > >>> > >>> v1 -> v2: > >>> - Removed the RFC tag > >>> - Remaned the subject. v1 is https://lore.kernel.org/all/20241025223721.184998-1-saravanak@google.com/T/#u > >>> - Added a NULL check to avoid NULL pointer deref > >>> > >>> drivers/base/core.c | 46 ++++++++++++++++++++------------------------- > >>> 1 file changed, 20 insertions(+), 26 deletions(-) > >>> > >>> diff --git a/drivers/base/core.c b/drivers/base/core.c > >>> index 3b13fed1c3e3..f96f2e4c76b4 100644 > >>> --- a/drivers/base/core.c > >>> +++ b/drivers/base/core.c > >>> @@ -1990,10 +1990,10 @@ static struct device *fwnode_get_next_parent_dev(const struct fwnode_handle *fwn > >>> * > >>> * Return true if one or more cycles were found. Otherwise, return false. > >>> */ > >>> -static bool __fw_devlink_relax_cycles(struct device *con, > >>> +static bool __fw_devlink_relax_cycles(struct fwnode_handle *con_handle, > >>> struct fwnode_handle *sup_handle) > >>> { > >>> - struct device *sup_dev = NULL, *par_dev = NULL; > >>> + struct device *sup_dev = NULL, *par_dev = NULL, *con_dev = NULL; > >>> struct fwnode_link *link; > >>> struct device_link *dev_link; > >>> bool ret = false; > >>> @@ -2010,22 +2010,22 @@ static bool __fw_devlink_relax_cycles(struct device *con, > >>> > >>> sup_handle->flags |= FWNODE_FLAG_VISITED; > >>> > >>> - sup_dev = get_dev_from_fwnode(sup_handle); > >>> - > >>> /* Termination condition. */ > >>> - if (sup_dev == con) { > >>> + if (sup_handle == con_handle) { > >>> pr_debug("----- cycle: start -----\n"); > >>> ret = true; > >>> goto out; > >>> } > >>> > >>> + sup_dev = get_dev_from_fwnode(sup_handle); > >>> + con_dev = get_dev_from_fwnode(con_handle); > >>> /* > >>> * If sup_dev is bound to a driver and @con hasn't started binding to a > >>> * driver, sup_dev can't be a consumer of @con. So, no need to check > >>> * further. > >>> */ > >>> if (sup_dev && sup_dev->links.status == DL_DEV_DRIVER_BOUND && > >>> - con->links.status == DL_DEV_NO_DRIVER) { > >>> + con_dev && con_dev->links.status == DL_DEV_NO_DRIVER) { > >>> ret = false; > >>> goto out; > >>> } > >>> @@ -2034,7 +2034,7 @@ static bool __fw_devlink_relax_cycles(struct device *con, > >>> if (link->flags & FWLINK_FLAG_IGNORE) > >>> continue; > >>> > >>> - if (__fw_devlink_relax_cycles(con, link->supplier)) { > >>> + if (__fw_devlink_relax_cycles(con_handle, link->supplier)) { > >>> __fwnode_link_cycle(link); > >>> ret = true; > >>> } > >>> @@ -2049,7 +2049,7 @@ static bool __fw_devlink_relax_cycles(struct device *con, > >>> else > >>> par_dev = fwnode_get_next_parent_dev(sup_handle); > >>> > >>> - if (par_dev && __fw_devlink_relax_cycles(con, par_dev->fwnode)) { > >>> + if (par_dev && __fw_devlink_relax_cycles(con_handle, par_dev->fwnode)) { > >>> pr_debug("%pfwf: cycle: child of %pfwf\n", sup_handle, > >>> par_dev->fwnode); > >>> ret = true; > >>> @@ -2067,7 +2067,7 @@ static bool __fw_devlink_relax_cycles(struct device *con, > >>> !(dev_link->flags & DL_FLAG_CYCLE)) > >>> continue; > >>> > >>> - if (__fw_devlink_relax_cycles(con, > >>> + if (__fw_devlink_relax_cycles(con_handle, > >>> dev_link->supplier->fwnode)) { > >>> pr_debug("%pfwf: cycle: depends on %pfwf\n", sup_handle, > >>> dev_link->supplier->fwnode); > >>> @@ -2140,25 +2140,19 @@ static int fw_devlink_create_devlink(struct device *con, > >>> return -EINVAL; > >>> > >>> /* > >>> - * SYNC_STATE_ONLY device links don't block probing and supports cycles. > >>> - * So, one might expect that cycle detection isn't necessary for them. > >>> - * However, if the device link was marked as SYNC_STATE_ONLY because > >>> - * it's part of a cycle, then we still need to do cycle detection. This > >>> - * is because the consumer and supplier might be part of multiple cycles > >>> - * and we need to detect all those cycles. > >>> + * Don't try to optimize by not calling the cycle detection logic under > >>> + * certain conditions. There's always some corner case that won't get > >>> + * detected. > >>> */ > >>> - if (!device_link_flag_is_sync_state_only(flags) || > >>> - flags & DL_FLAG_CYCLE) { > >>> - device_links_write_lock(); > >>> - if (__fw_devlink_relax_cycles(con, sup_handle)) { > >>> - __fwnode_link_cycle(link); > >>> - flags = fw_devlink_get_flags(link->flags); > >>> - pr_debug("----- cycle: end -----\n"); > >>> - dev_info(con, "Fixed dependency cycle(s) with %pfwf\n", > >>> - sup_handle); > >>> - } > >>> - device_links_write_unlock(); > >>> + device_links_write_lock(); > >>> + if (__fw_devlink_relax_cycles(link->consumer, sup_handle)) { > >>> + __fwnode_link_cycle(link); > >>> + flags = fw_devlink_get_flags(link->flags); > >>> + pr_debug("----- cycle: end -----\n"); > >>> + pr_info("%pfwf: Fixed dependency cycle(s) with %pfwf\n", > >>> + link->consumer, sup_handle); > >>> } > >>> + device_links_write_unlock(); > >>> > >>> if (sup_handle->flags & FWNODE_FLAG_NOT_DEVICE) > >>> sup_dev = fwnode_get_next_parent_dev(sup_handle); > >>
Hi, On 30/10/2024 06:51, Saravana Kannan wrote: > On Tue, Oct 29, 2024 at 4:21 AM Tomi Valkeinen > <tomi.valkeinen@ideasonboard.com> wrote: >> >> Hi, >> >> On 28/10/2024 22:39, Saravana Kannan wrote: >>> On Mon, Oct 28, 2024 at 1:06 AM Tomi Valkeinen >>> <tomi.valkeinen@ideasonboard.com> wrote: >>>> >>>> Hi, >>>> >>>> On 26/10/2024 07:52, Saravana Kannan wrote: >>>>> In attempting to optimize fw_devlink runtime, I introduced numerous cycle >>>>> detection bugs by foregoing cycle detection logic under specific >>>>> conditions. Each fix has further narrowed the conditions for optimization. >>>>> >>>>> It's time to give up on these optimization attempts and just run the cycle >>>>> detection logic every time fw_devlink tries to create a device link. >>>>> >>>>> The specific bug report that triggered this fix involved a supplier fwnode >>>>> that never gets a device created for it. Instead, the supplier fwnode is >>>>> represented by the device that corresponds to an ancestor fwnode. >>>>> >>>>> In this case, fw_devlink didn't do any cycle detection because the cycle >>>>> detection logic is only run when a device link is created between the >>>>> devices that correspond to the actual consumer and supplier fwnodes. >>>>> >>>>> With this change, fw_devlink will run cycle detection logic even when >>>>> creating SYNC_STATE_ONLY proxy device links from a device that is an >>>>> ancestor of a consumer fwnode. >>>>> >>>>> Reported-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com> >>>>> Closes: https://lore.kernel.org/all/1a1ab663-d068-40fb-8c94-f0715403d276@ideasonboard.com/ >>>>> Fixes: 6442d79d880c ("driver core: fw_devlink: Improve detection of overlapping cycles") >>>>> Signed-off-by: Saravana Kannan <saravanak@google.com> >>>>> --- >>>>> Greg, >>>>> >>>>> I've tested this on my end and it looks ok and nothing fishy is going >>>>> on. You can pick this up once Tomi gives a Tested-by. >>>> >>>> I tested this on TI AM62 SK board. It has an LVDS (OLDI) display and a >>>> HDMI output, and both displays are connected to the same display >>>> subsystem. I tested with OLDI single and dual link cases, with and >>>> without HDMI, and in all cases probing works fine. >>>> >>>> Looks good on that front, so: >>>> >>>> Tested-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com> >>> >>> Great! Thanks! >>> >>>> You also asked for a diff of the devlinks. That part doesn't look so >>>> good to me, but probably you can tell if it's normal or not. >>> >>> TL;DR: All device links in a cycle get marked as >>> DL_FLAG_SYNC_STATE_ONLY and DL_FLAG_CYCLE (in addition to other >>> flags). All DL_FLAG_SYNC_STATE_ONLY (not all of them are cycles) will >>> get deleted after the consumer probes (since they are no longer needed >>> after that). My guess on what's going on is that with the patch, >>> fw_devlink found and marked more device links as cycles. Ones that in >>> the past weren't detected as being part of a cycle but coincidentally >>> the "post-init" dependency was the one that was getting ignored/not >>> enforced. So the actual links in a cycle getting deleted after all the >>> devices have probed is not a problem. >> >> Ok. Yep, it might all be fine. I still don't understand all that's going >> on here, so maybe look at one more case below. >> >>> You can enable the "cycle" logs in drivers/base/core.c so it's easier >>> to follow the cycles fw_devlink detected. But the logs are a bit >>> cryptic because it tries to print all the multiple cycles that were >>> detected using a recursive search. >>> >>> The non-cycle use for DL_FLAG_SYNC_STATE_ONLY is for parent devices to >>> put a "proxy-vote" (Hey supplier, you still have a consumer that >>> hasn't bound to a driver yet) for descendant (children, grand >>> children) devices that haven't been created yet. So, without the fix >>> it's possible some descendant child never got to probe and the >>> DL_FLAG_SYNC_STATE_ONLY device link stuck around. >>> >>> If you can confirm all the deleted device links fall into one of these >>> two categories, then there's no issue here. If you find cases that >>> aren't clear, then let me know which one and point to specific nodes >>> in an upstream DTS file and I can take a look. >>> >>> Every device link folder has a "sync_state_only" file that says if it >>> has the DL_FLAG_SYNC_STATE_ONLY set. But to check for the cycle flag, >>> you'll have to extend the debug log in device_link_add() that goes: >>> "Linked as a sync state only consumer to......" and print the "flags" param. >> >> I added this print. >> >> I thought I'll test without any non-upstream patches, so this is booting >> with the upstream k3-am625-sk.dtb, no overlays. I've attached boot log >> (with this patch applied), and devlink lists, without and with this patch. >> >> As the OLDI stuff is not upstream, I did expect to see less diff, and >> that is the case. It's still somewhat interesting diff: >> >> $ diff devlink-broken.txt devlink-fixed.txt >> 1d0 >> < i2c:1-0022--i2c:1-003b >> >> So that's the gpio expander (exp1: gpio@22 in k3-am625-sk.dts) and the >> hdmi bridge (sii9022: bridge-hdmi@3b in k3-am62x-sk-common.dtsi). And, >> indeed, in the log I can see: >> >> i2c 1-003b: Linked as a sync state only consumer to 1-0022 (flags 0x3c0) >> /bus@f0000/i2c@20010000/bridge-hdmi@3b Dropping the fwnode link to >> /bus@f0000/i2c@20010000/gpio@22 >> >> If I'm not mistaken, the above means that the framework has decided >> there's a (possible) probe time cyclic dependency between the gpio >> expander and the hdmi bridge, right? >> >> I don't think that makes sense, and I was trying to understand why the >> framework has arrived to such a conclusion, but it's not clear to me. >> >> Also, I can see, e.g.: >> >> /bus@f0000/i2c@20010000: cycle: depends on /bus@f0000/dss@30200000 >> >> So somehow the i2c bus has a dependency on the DSS? The DSS does not >> depend on the i2c, but the HDMI does, so I can understand that the DSS >> would have a dependency to i2c. But the other way around? > > Thanks for being persistent! :) I think you found a real issue in this patch. > I'm squeezing these fixes late at night and between my regular work. > So, apologies in advance for untested patches and me going with > hunches. > > This part probably won't make sense, but I'm "explaining" it here just > to record it somewhere if I or someone else comes back and looks at > this after a few months. > > What's happening is that when 30200000.dss was added, 20010000.i2c was > creating a sync state only proxy link for bridge-hdmi@3b (child of > i2c). But when creating the proxy link, fw_devlink detected the cycle > between bridge-hdmi@3b and 30200000.dss. That cycle is valid, but this > patch also results in marking the "proxy" link as part of a cycle > (when it wasn't). So it incorrectly marked i2c as being in a consumer > of with dss and part of a cycle. > > Later on when running cycle detection logic between bridge-hdmi@3b and > gpio@22, the cycle detection logic follows the i2c to dss link because > it thinks the i2c really depends on dss but is part of a cycle. > > Try this fix on top of this patch and it should allow probing for all > the previous broken scenarios AND should avoid dropping some links > incorrectly. Thanks! With this change on top, the behavior I see is: - "ls -1 /sys/class/devlink" is identical between a) no driver core fixes and b) this patch and the change below, when I test all three cases I have: 1) no OLDI at all (i.e. plain upstream AM62 SK), 2) OLDI single-link, 3) OLDI dual link. - The OLDI single-link probes with these changes (and it didn't probe before these changes). In other words, with the patch and the change below, everything seems to work fine without any devlinks disappearing. So (this time for real): Tested-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com> That said, these kind of changes scare me a bit, and I wouldn't mind someone else testing on some other platform =). Francesco, I think you said you have an OLDI single-link platform. That's still a TI platform, but not the same as I have, so maybe worth testing out. Tomi > --- a/drivers/base/core.c > +++ b/drivers/base/core.c > @@ -2115,11 +2115,6 @@ static int fw_devlink_create_devlink(struct device *con, > if (link->flags & FWLINK_FLAG_IGNORE) > return 0; > > - if (con->fwnode == link->consumer) > - flags = fw_devlink_get_flags(link->flags); > - else > - flags = FW_DEVLINK_FLAGS_PERMISSIVE; > - > /* > * In some cases, a device P might also be a supplier to its child node > * C. However, this would defer the probe of C until the probe of P > @@ -2147,13 +2142,17 @@ static int fw_devlink_create_devlink(struct device *con, > device_links_write_lock(); > if (__fw_devlink_relax_cycles(link->consumer, sup_handle)) { > __fwnode_link_cycle(link); > - flags = fw_devlink_get_flags(link->flags); > pr_debug("----- cycle: end -----\n"); > pr_info("%pfwf: Fixed dependency cycle(s) with %pfwf\n", > link->consumer, sup_handle); > } > device_links_write_unlock(); > > + if (con->fwnode == link->consumer) > + flags = fw_devlink_get_flags(link->flags); > + else > + flags = FW_DEVLINK_FLAGS_PERMISSIVE; > + > if (sup_handle->flags & FWNODE_FLAG_NOT_DEVICE) > sup_dev = fwnode_get_next_parent_dev(sup_handle); > else > > Thanks, > Saravana > >> >> Tomi >> >>>> >>>> $ diff devlink-single-broken.txt devlink-single-fixed.txt >>> >>> I was hoping you'd give me some line count diff too to get a sense of >>> if it's wreaking havoc or not. But based on my local testing on >>> different hardware, I'm expecting a very small number of device links >>> are getting affected. >>> >>>> 2d1 >>>> < i2c:1-0022--i2c:1-003b >>>> 11d9 >>>> < >>>> platform:44043000.system-controller:clock-controller--platform:20010000.i2c >>>> 27d24 >>>> < platform:44043000.system-controller:clock-controller--platform:601000.gpio >>>> 42d38 >>>> < >>>> platform:44043000.system-controller:power-controller--platform:20010000.i2c >>>> 58d53 >>>> < platform:44043000.system-controller:power-controller--platform:601000.gpio >>>> 74d68 >>>> < platform:4d000000.mailbox--platform:44043000.system-controller >>> >>> I took a quick look at this one in >>> arch/arm64/boot/dts/ti/k3-am62-main.dtsi which I assume is part of the >>> device you are testing on and I couldn't find a cycle. But with dtsi >>> and dts files, it's hard to find these manually. Let me know if >>> fw_devlink is thinking there's a cycle where there is none. >>> >>>> 76d69 >>>> < platform:601000.gpio--i2c:1-0022 >>>> 80d72 >>>> < platform:bus@f0000:interrupt-controller@a00000--platform:601000.gpio >>>> 82d73 >>>> < platform:f4000.pinctrl--i2c:1-0022 >>>> 84d74 >>>> < platform:f4000.pinctrl--platform:20010000.i2c >>>> >>>> "i2c:1-003b" is the hdmi bridge, "i2c:1-0022" is a gpio expander. So, >>>> for example, we lose the devlink between the gpio expander and the hdmi >>>> bridge. The expander is used for interrupts. There's an interrupt line >>>> from the HDMI bridge to the expander, and from there there's an >>>> interrupt line going to the SoC. >>>> >>>> Also, I noticed the devlinks change if I load the display drivers. The >>>> above is before loading. Comparing the loaded/not-loaded: >>> >>> Yeah, DL_FLAG_SYNC_STATE_ONLY device links vanishing as more devices >>> probe is not a problem. That's working as intended. >>> >>> Thanks, >>> Saravana >>> >>>> >>>> $ diff devlink-dual-fixed.txt devlink-dual-fixed-loaded.txt >>>> 3d2 >>>> < i2c:1-003b--platform:30200000.dss >>>> 23d21 >>>> < >>>> platform:44043000.system-controller:clock-controller--platform:30200000.dss >>>> 52d49 >>>> < >>>> platform:44043000.system-controller:power-controller--platform:30200000.dss >>>> 73d69 >>>> < platform:display--platform:30200000.dss >>>> 78d73 >>>> < platform:f4000.pinctrl--platform:30200000.dss >>>> 97a93 >>>> > regulator:regulator.0--platform:display >>>> >>>> Tomi >>>> >>>> >>>>> Thanks, >>>>> Saravana >>>>> >>>>> v1 -> v2: >>>>> - Removed the RFC tag >>>>> - Remaned the subject. v1 is https://lore.kernel.org/all/20241025223721.184998-1-saravanak@google.com/T/#u >>>>> - Added a NULL check to avoid NULL pointer deref >>>>> >>>>> drivers/base/core.c | 46 ++++++++++++++++++++------------------------- >>>>> 1 file changed, 20 insertions(+), 26 deletions(-) >>>>> >>>>> diff --git a/drivers/base/core.c b/drivers/base/core.c >>>>> index 3b13fed1c3e3..f96f2e4c76b4 100644 >>>>> --- a/drivers/base/core.c >>>>> +++ b/drivers/base/core.c >>>>> @@ -1990,10 +1990,10 @@ static struct device *fwnode_get_next_parent_dev(const struct fwnode_handle *fwn >>>>> * >>>>> * Return true if one or more cycles were found. Otherwise, return false. >>>>> */ >>>>> -static bool __fw_devlink_relax_cycles(struct device *con, >>>>> +static bool __fw_devlink_relax_cycles(struct fwnode_handle *con_handle, >>>>> struct fwnode_handle *sup_handle) >>>>> { >>>>> - struct device *sup_dev = NULL, *par_dev = NULL; >>>>> + struct device *sup_dev = NULL, *par_dev = NULL, *con_dev = NULL; >>>>> struct fwnode_link *link; >>>>> struct device_link *dev_link; >>>>> bool ret = false; >>>>> @@ -2010,22 +2010,22 @@ static bool __fw_devlink_relax_cycles(struct device *con, >>>>> >>>>> sup_handle->flags |= FWNODE_FLAG_VISITED; >>>>> >>>>> - sup_dev = get_dev_from_fwnode(sup_handle); >>>>> - >>>>> /* Termination condition. */ >>>>> - if (sup_dev == con) { >>>>> + if (sup_handle == con_handle) { >>>>> pr_debug("----- cycle: start -----\n"); >>>>> ret = true; >>>>> goto out; >>>>> } >>>>> >>>>> + sup_dev = get_dev_from_fwnode(sup_handle); >>>>> + con_dev = get_dev_from_fwnode(con_handle); >>>>> /* >>>>> * If sup_dev is bound to a driver and @con hasn't started binding to a >>>>> * driver, sup_dev can't be a consumer of @con. So, no need to check >>>>> * further. >>>>> */ >>>>> if (sup_dev && sup_dev->links.status == DL_DEV_DRIVER_BOUND && >>>>> - con->links.status == DL_DEV_NO_DRIVER) { >>>>> + con_dev && con_dev->links.status == DL_DEV_NO_DRIVER) { >>>>> ret = false; >>>>> goto out; >>>>> } >>>>> @@ -2034,7 +2034,7 @@ static bool __fw_devlink_relax_cycles(struct device *con, >>>>> if (link->flags & FWLINK_FLAG_IGNORE) >>>>> continue; >>>>> >>>>> - if (__fw_devlink_relax_cycles(con, link->supplier)) { >>>>> + if (__fw_devlink_relax_cycles(con_handle, link->supplier)) { >>>>> __fwnode_link_cycle(link); >>>>> ret = true; >>>>> } >>>>> @@ -2049,7 +2049,7 @@ static bool __fw_devlink_relax_cycles(struct device *con, >>>>> else >>>>> par_dev = fwnode_get_next_parent_dev(sup_handle); >>>>> >>>>> - if (par_dev && __fw_devlink_relax_cycles(con, par_dev->fwnode)) { >>>>> + if (par_dev && __fw_devlink_relax_cycles(con_handle, par_dev->fwnode)) { >>>>> pr_debug("%pfwf: cycle: child of %pfwf\n", sup_handle, >>>>> par_dev->fwnode); >>>>> ret = true; >>>>> @@ -2067,7 +2067,7 @@ static bool __fw_devlink_relax_cycles(struct device *con, >>>>> !(dev_link->flags & DL_FLAG_CYCLE)) >>>>> continue; >>>>> >>>>> - if (__fw_devlink_relax_cycles(con, >>>>> + if (__fw_devlink_relax_cycles(con_handle, >>>>> dev_link->supplier->fwnode)) { >>>>> pr_debug("%pfwf: cycle: depends on %pfwf\n", sup_handle, >>>>> dev_link->supplier->fwnode); >>>>> @@ -2140,25 +2140,19 @@ static int fw_devlink_create_devlink(struct device *con, >>>>> return -EINVAL; >>>>> >>>>> /* >>>>> - * SYNC_STATE_ONLY device links don't block probing and supports cycles. >>>>> - * So, one might expect that cycle detection isn't necessary for them. >>>>> - * However, if the device link was marked as SYNC_STATE_ONLY because >>>>> - * it's part of a cycle, then we still need to do cycle detection. This >>>>> - * is because the consumer and supplier might be part of multiple cycles >>>>> - * and we need to detect all those cycles. >>>>> + * Don't try to optimize by not calling the cycle detection logic under >>>>> + * certain conditions. There's always some corner case that won't get >>>>> + * detected. >>>>> */ >>>>> - if (!device_link_flag_is_sync_state_only(flags) || >>>>> - flags & DL_FLAG_CYCLE) { >>>>> - device_links_write_lock(); >>>>> - if (__fw_devlink_relax_cycles(con, sup_handle)) { >>>>> - __fwnode_link_cycle(link); >>>>> - flags = fw_devlink_get_flags(link->flags); >>>>> - pr_debug("----- cycle: end -----\n"); >>>>> - dev_info(con, "Fixed dependency cycle(s) with %pfwf\n", >>>>> - sup_handle); >>>>> - } >>>>> - device_links_write_unlock(); >>>>> + device_links_write_lock(); >>>>> + if (__fw_devlink_relax_cycles(link->consumer, sup_handle)) { >>>>> + __fwnode_link_cycle(link); >>>>> + flags = fw_devlink_get_flags(link->flags); >>>>> + pr_debug("----- cycle: end -----\n"); >>>>> + pr_info("%pfwf: Fixed dependency cycle(s) with %pfwf\n", >>>>> + link->consumer, sup_handle); >>>>> } >>>>> + device_links_write_unlock(); >>>>> >>>>> if (sup_handle->flags & FWNODE_FLAG_NOT_DEVICE) >>>>> sup_dev = fwnode_get_next_parent_dev(sup_handle); >>>>
diff --git a/drivers/base/core.c b/drivers/base/core.c index 3b13fed1c3e3..f96f2e4c76b4 100644 --- a/drivers/base/core.c +++ b/drivers/base/core.c @@ -1990,10 +1990,10 @@ static struct device *fwnode_get_next_parent_dev(const struct fwnode_handle *fwn * * Return true if one or more cycles were found. Otherwise, return false. */ -static bool __fw_devlink_relax_cycles(struct device *con, +static bool __fw_devlink_relax_cycles(struct fwnode_handle *con_handle, struct fwnode_handle *sup_handle) { - struct device *sup_dev = NULL, *par_dev = NULL; + struct device *sup_dev = NULL, *par_dev = NULL, *con_dev = NULL; struct fwnode_link *link; struct device_link *dev_link; bool ret = false; @@ -2010,22 +2010,22 @@ static bool __fw_devlink_relax_cycles(struct device *con, sup_handle->flags |= FWNODE_FLAG_VISITED; - sup_dev = get_dev_from_fwnode(sup_handle); - /* Termination condition. */ - if (sup_dev == con) { + if (sup_handle == con_handle) { pr_debug("----- cycle: start -----\n"); ret = true; goto out; } + sup_dev = get_dev_from_fwnode(sup_handle); + con_dev = get_dev_from_fwnode(con_handle); /* * If sup_dev is bound to a driver and @con hasn't started binding to a * driver, sup_dev can't be a consumer of @con. So, no need to check * further. */ if (sup_dev && sup_dev->links.status == DL_DEV_DRIVER_BOUND && - con->links.status == DL_DEV_NO_DRIVER) { + con_dev && con_dev->links.status == DL_DEV_NO_DRIVER) { ret = false; goto out; } @@ -2034,7 +2034,7 @@ static bool __fw_devlink_relax_cycles(struct device *con, if (link->flags & FWLINK_FLAG_IGNORE) continue; - if (__fw_devlink_relax_cycles(con, link->supplier)) { + if (__fw_devlink_relax_cycles(con_handle, link->supplier)) { __fwnode_link_cycle(link); ret = true; } @@ -2049,7 +2049,7 @@ static bool __fw_devlink_relax_cycles(struct device *con, else par_dev = fwnode_get_next_parent_dev(sup_handle); - if (par_dev && __fw_devlink_relax_cycles(con, par_dev->fwnode)) { + if (par_dev && __fw_devlink_relax_cycles(con_handle, par_dev->fwnode)) { pr_debug("%pfwf: cycle: child of %pfwf\n", sup_handle, par_dev->fwnode); ret = true; @@ -2067,7 +2067,7 @@ static bool __fw_devlink_relax_cycles(struct device *con, !(dev_link->flags & DL_FLAG_CYCLE)) continue; - if (__fw_devlink_relax_cycles(con, + if (__fw_devlink_relax_cycles(con_handle, dev_link->supplier->fwnode)) { pr_debug("%pfwf: cycle: depends on %pfwf\n", sup_handle, dev_link->supplier->fwnode); @@ -2140,25 +2140,19 @@ static int fw_devlink_create_devlink(struct device *con, return -EINVAL; /* - * SYNC_STATE_ONLY device links don't block probing and supports cycles. - * So, one might expect that cycle detection isn't necessary for them. - * However, if the device link was marked as SYNC_STATE_ONLY because - * it's part of a cycle, then we still need to do cycle detection. This - * is because the consumer and supplier might be part of multiple cycles - * and we need to detect all those cycles. + * Don't try to optimize by not calling the cycle detection logic under + * certain conditions. There's always some corner case that won't get + * detected. */ - if (!device_link_flag_is_sync_state_only(flags) || - flags & DL_FLAG_CYCLE) { - device_links_write_lock(); - if (__fw_devlink_relax_cycles(con, sup_handle)) { - __fwnode_link_cycle(link); - flags = fw_devlink_get_flags(link->flags); - pr_debug("----- cycle: end -----\n"); - dev_info(con, "Fixed dependency cycle(s) with %pfwf\n", - sup_handle); - } - device_links_write_unlock(); + device_links_write_lock(); + if (__fw_devlink_relax_cycles(link->consumer, sup_handle)) { + __fwnode_link_cycle(link); + flags = fw_devlink_get_flags(link->flags); + pr_debug("----- cycle: end -----\n"); + pr_info("%pfwf: Fixed dependency cycle(s) with %pfwf\n", + link->consumer, sup_handle); } + device_links_write_unlock(); if (sup_handle->flags & FWNODE_FLAG_NOT_DEVICE) sup_dev = fwnode_get_next_parent_dev(sup_handle);
In attempting to optimize fw_devlink runtime, I introduced numerous cycle detection bugs by foregoing cycle detection logic under specific conditions. Each fix has further narrowed the conditions for optimization. It's time to give up on these optimization attempts and just run the cycle detection logic every time fw_devlink tries to create a device link. The specific bug report that triggered this fix involved a supplier fwnode that never gets a device created for it. Instead, the supplier fwnode is represented by the device that corresponds to an ancestor fwnode. In this case, fw_devlink didn't do any cycle detection because the cycle detection logic is only run when a device link is created between the devices that correspond to the actual consumer and supplier fwnodes. With this change, fw_devlink will run cycle detection logic even when creating SYNC_STATE_ONLY proxy device links from a device that is an ancestor of a consumer fwnode. Reported-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com> Closes: https://lore.kernel.org/all/1a1ab663-d068-40fb-8c94-f0715403d276@ideasonboard.com/ Fixes: 6442d79d880c ("driver core: fw_devlink: Improve detection of overlapping cycles") Signed-off-by: Saravana Kannan <saravanak@google.com> --- Greg, I've tested this on my end and it looks ok and nothing fishy is going on. You can pick this up once Tomi gives a Tested-by. Thanks, Saravana v1 -> v2: - Removed the RFC tag - Remaned the subject. v1 is https://lore.kernel.org/all/20241025223721.184998-1-saravanak@google.com/T/#u - Added a NULL check to avoid NULL pointer deref drivers/base/core.c | 46 ++++++++++++++++++++------------------------- 1 file changed, 20 insertions(+), 26 deletions(-)