Message ID | 20210205222644.2357303-9-saravanak@google.com |
---|---|
State | Accepted |
Commit | 3c9ea42802a1fbf7ef29660ff8c6e526c58114f6 |
Headers | show |
Series | Make fw_devlink=on more forgiving | expand |
On Fri, Feb 5, 2021 at 4:27 PM Saravana Kannan <saravanak@google.com> wrote: > > This allows fw_devlink to recognize clock provider drivers that don't > use the device-driver model to initialize the device. fw_devlink will > use this information to make sure consumers of such clock providers > aren't indefinitely blocked from probing, waiting for the power domain > device to appear and bind to a driver. Don't we have cases that are a mixture? IOW, a subset of the clock provider is initialized early, then the full driver takes over. You'd want consumers that are not a driver to succeed, but drivers to defer until the full driver is up. > > Signed-off-by: Saravana Kannan <saravanak@google.com> > --- > drivers/clk/clk.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c > index 8c1d04db990d..27ff90eacb1f 100644 > --- a/drivers/clk/clk.c > +++ b/drivers/clk/clk.c > @@ -4555,6 +4555,8 @@ int of_clk_add_provider(struct device_node *np, > if (ret < 0) > of_clk_del_provider(np); > > + fwnode_dev_initialized(&np->fwnode, true); > + > return ret; > } > EXPORT_SYMBOL_GPL(of_clk_add_provider); > @@ -4672,6 +4674,7 @@ void of_clk_del_provider(struct device_node *np) > list_for_each_entry(cp, &of_clk_providers, link) { > if (cp->node == np) { > list_del(&cp->link); > + fwnode_dev_initialized(&np->fwnode, false); > of_node_put(cp->node); > kfree(cp); > break; > -- > 2.30.0.478.g8a0d178c01-goog >
On Mon, Feb 8, 2021 at 7:39 AM Rob Herring <robh+dt@kernel.org> wrote: > > On Fri, Feb 5, 2021 at 4:27 PM Saravana Kannan <saravanak@google.com> wrote: > > > > This allows fw_devlink to recognize clock provider drivers that don't > > use the device-driver model to initialize the device. fw_devlink will > > use this information to make sure consumers of such clock providers > > aren't indefinitely blocked from probing, waiting for the power domain > > device to appear and bind to a driver. > > Don't we have cases that are a mixture? IOW, a subset of the clock > provider is initialized early, then the full driver takes over. You'd > want consumers that are not a driver to succeed, but drivers to defer > until the full driver is up. You probably just made a typo, but to clarify, this is about ignoring suppliers that never bind. So, in your case the clock device is the supplier. To answer your question, consumer devices added after the full supplier driver takes over will still have device links created to the supplier clock device. But consumers added before the full driver takes over won't. So, nothing is worse off with fw_devlink=on and we get way more dependency tracking (device links) created than what we have today. -Saravana
On Fri, Feb 12, 2021 at 4:39 PM Stephen Boyd <sboyd@kernel.org> wrote: > > Quoting Saravana Kannan (2021-02-05 14:26:44) > > This allows fw_devlink to recognize clock provider drivers that don't > > use the device-driver model to initialize the device. fw_devlink will > > use this information to make sure consumers of such clock providers > > aren't indefinitely blocked from probing, waiting for the power domain > > device to appear and bind to a driver. > > The "power domain" part of this commit text doesn't make any sense. Is > it copy/pasted from some other patch? Should probably say "waiting for > the clk providing device"? Yeah, copy-pasta. > > > > > Signed-off-by: Saravana Kannan <saravanak@google.com> > > --- > > Acked-by: Stephen Boyd <sboyd@kernel.org> Thanks, Saravana
diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c index 8c1d04db990d..27ff90eacb1f 100644 --- a/drivers/clk/clk.c +++ b/drivers/clk/clk.c @@ -4555,6 +4555,8 @@ int of_clk_add_provider(struct device_node *np, if (ret < 0) of_clk_del_provider(np); + fwnode_dev_initialized(&np->fwnode, true); + return ret; } EXPORT_SYMBOL_GPL(of_clk_add_provider); @@ -4672,6 +4674,7 @@ void of_clk_del_provider(struct device_node *np) list_for_each_entry(cp, &of_clk_providers, link) { if (cp->node == np) { list_del(&cp->link); + fwnode_dev_initialized(&np->fwnode, false); of_node_put(cp->node); kfree(cp); break;
This allows fw_devlink to recognize clock provider drivers that don't use the device-driver model to initialize the device. fw_devlink will use this information to make sure consumers of such clock providers aren't indefinitely blocked from probing, waiting for the power domain device to appear and bind to a driver. Signed-off-by: Saravana Kannan <saravanak@google.com> --- drivers/clk/clk.c | 3 +++ 1 file changed, 3 insertions(+)