Re: [PATCH v4 0/8] Make fw_devlink=on more forgiving

From: Saravana Kannan
Date: Wed Feb 10 2021 - 14:17:00 EST


On Wed, Feb 10, 2021 at 2:02 AM <Tudor.Ambarus@xxxxxxxxxxxxx> wrote:
>
> On 2/10/21 10:54 AM, Saravana Kannan wrote:
> > EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe
> >
> > On Wed, Feb 10, 2021 at 12:19 AM <Tudor.Ambarus@xxxxxxxxxxxxx> wrote:
> >>
> >> Hi, Saravana,
> >>
> >> On 2/6/21 12:26 AM, Saravana Kannan wrote:
> >>> There are a lot of devices/drivers where they never have a struct device
> >>> created for them or the driver initializes the hardware without ever
> >>> binding to the struct device.
> >>>
> >>> This series is intended to avoid any boot regressions due to such
> >>> devices/drivers when fw_devlink=on and also address the handling of
> >>> optional suppliers.
> >>>
> >>> Patch 1 and 2 addresses the issue of firmware nodes that look like
> >>> they'll have struct devices created for them, but will never actually
> >>> have struct devices added for them. For example, DT nodes with a
> >>> compatible property that don't have devices added for them.
> >>>
> >>> Patch 3 and 4 allow for handling optional DT bindings.
> >>>
> >>> Patch 5 sets up a generic API to handle drivers that never bind with
> >>> their devices.
> >>>
> >>> Patch 6 through 8 update different frameworks to use the new API.
> >>>
> >>> Thanks,
> >>> Saravana
> >>>
> >>> Saravana Kannan (8):
> >>> driver core: fw_devlink: Detect supplier devices that will never be
> >>> added
> >>> of: property: Don't add links to absent suppliers
> >>> driver core: Add fw_devlink.strict kernel param
> >>> of: property: Add fw_devlink support for optional properties
> >>> driver core: fw_devlink: Handle suppliers that don't use driver core
> >>> irqdomain: Mark fwnodes when their irqdomain is added/removed
> >>> PM: domains: Mark fwnodes when their powerdomain is added/removed
> >>> clk: Mark fwnodes when their clock provider is added/removed
> >>>
> >>> .../admin-guide/kernel-parameters.txt | 5 ++
> >>> drivers/base/core.c | 58 ++++++++++++++++++-
> >>> drivers/base/power/domain.c | 2 +
> >>> drivers/clk/clk.c | 3 +
> >>> drivers/of/property.c | 16 +++--
> >>> include/linux/fwnode.h | 20 ++++++-
> >>> kernel/irq/irqdomain.c | 2 +
> >>> 7 files changed, 98 insertions(+), 8 deletions(-)
> >>>
> >>
> >> Even with this patch set applied, sama5d2_xplained can not boot.
> >> Patch at [1] makes sama5d2_xplained boot again. Stephen applied it
> >> to clk-next.
> >
> > I'm glad you won't actually have any boot issues in 5.12, but the fact
> > you need [1] with this series doesn't make a lot of sense to me
> > because:
> >
> > 1. The FWNODE_FLAG_INITIALIZED flag will be set for the clock fwnode
> > in question way before any consumer devices are added.
>
> Looks like in my case FWNODE_FLAG_INITIALIZED is not set, because
> drivers/clk/at91/sama5d2.c uses of_clk_add_hw_provider().

Ah, that explains it.

> > 2. Any consumer device added after (1) will stop trying to link to the
> > clock device.
> >
> > Are you somehow adding a consumer to the clock fwnode before (1)?
> >
> > Can you try this patch without your clk fix? I was trying to avoid
> > looping through a list, but looks like your case might somehow need
> > it?
> >
>
> I tried it, didn't solve my boot problem.

Thanks! I should stop coding past midnight!

> The following patch makes the
> sama5d2_xplained boot again, even without the patch from [1]:

Great! I gave a reviewed-by.

-Saravana