Thread (20 messages) 20 messages, 9 authors, 2021-04-20

Re: [RFC v1 PATCH 3/3] driver: update all the code that use soc_device_match

From: Arnd Bergmann <arnd@arndb.de>
Date: 2021-04-19 12:17:19
Also in: dmaengine, dri-devel, linux-amlogic, linux-clk, linux-crypto, linux-gpio, linux-iommu, linux-media, linux-mediatek, linux-mmc, linux-omap, linux-phy, linux-pm, linux-renesas-soc, linux-staging, linux-usb, linux-watchdog, lkml, netdev

On Mon, Apr 19, 2021 at 11:33 AM Dominique MARTINET
[off-list ref] wrote:
Geert Uytterhoeven wrote on Mon, Apr 19, 2021 at 11:03:24AM +0200:
quoted
soc_device_match() should only be used as a last resort, to identify
systems that cannot be identified otherwise.  Typically this is used for
quirks, which should only be enabled on a very specific subset of
systems.  IMHO such systems should make sure soc_device_match()
is available early, by registering their SoC device early.
I definitely agree there, my suggestion to defer was only because I know
of no other way to influence the ordering of drivers loading reliably
and gave up on soc being init'd early.
In some cases, you can use the device_link infrastructure to deal
with dependencies between devices. Not sure if this would help
in your case, but have a look at device_link_add() etc in drivers/base/core.c
In this particular case the problem is that since 7d981405d0fd ("soc:
imx8m: change to use platform driver") the soc probe tries to use the
nvmem driver for ocotp fuses for imx8m devices, which isn't ready yet.
So soc loading gets pushed back to the end of the list because it gets
defered and other drivers relying on soc_device_match get confused
because they wrongly think a device doesn't match a quirk when it
actually does.

If there is a way to ensure the nvmem driver gets loaded before the soc,
that would also solve the problem nicely, and avoid the need to mess
with all the ~50 drivers which use it.

Is there a way to control in what order drivers get loaded? Something in
the dtb perhaps?
For built-in drivers, load order depends on the initcall level and
link order (how things are lined listed in the Makefile hierarchy).

For loadable modules, this is up to user space in the end.

Which of the drivers in this scenario are loadable modules?

        Arnd
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help