[U-Boot] [U-Boot, v2, 4/4] syscon: add Linux-compatible syscon API

Tom Rini trini at konsulko.com
Tue May 8 00:45:31 UTC 2018


On Thu, Apr 19, 2018 at 12:14:04PM +0900, Masahiro Yamada wrote:

> The syscon implementation in U-Boot is different from that in Linux.
> Thus, DT files imported from Linux do not work for U-Boot.
> 
> In U-Boot driver model, each node is bound to a dedicated driver
> that is the most compatible to it.  This design gets along with the
> concept of DT, and the syscon in Linux originally worked like that.
> 
> However, Linux commit bdb0066df96e ("mfd: syscon: Decouple syscon
> interface from platform devices") changed the behavior because it is
> useful to let a device bind to another driver, but still work as a
> syscon provider.
> 
> That change had happened before U-Boot initially supported the syscon
> driver by commit 6f98b7504f70 ("dm: Add support for generic system
> controllers (syscon)").  So, the U-Boot's syscon works differently
> from the beginning.  I'd say this is mis-implementation given that
> DT is not oriented to a particular project, but Linux is the canon
> of DT in practice.
> 
> The problem typically arises in the combination of "syscon" and
> "simple-mfd" compatibles.
> 
> In Linux, they are orthogonal, i.e., the order between "syscon" and
> "simple-mfd" does not matter at all.
> 
> Assume the following compatible.
> 
>    compatible = "foo,bar-syscon", "syscon", "simple-mfd";
> 
> In U-Boot, this device node is bound to the syscon driver
> (driver/core/syscon-uclass.c) since the "syscon" is found to be the
> most compatible.  Then, syscon_get_regmap() succeeds.
> 
> However,
> 
>    compatible = "foo,bar-syscon", "simple-mfd", "syscon";
> 
> does not work because this node is bound to the simple-bus driver
> (drivers/core/simple-bus.c) in favor of "simple-mfd" compatible.
> The compatible string "syscon" is just dismissed.
> 
> Moreover,
> 
>    compatible = "foo,bar-syscon", "syscon";
> 
> works like the first case because the syscon driver populates the
> child devices.  This is wrong because populating children is the job
> of "simple-mfd" (or "simple-bus").
> 
> This commit ports syscon_node_to_regmap() from Linux.  This API
> does not require the given node to be bound to a driver in any way.
> 
> Reported-by: Kunihiko Hayashi <hayashi.kunihiko at socionext.com>
> Signed-off-by: Masahiro Yamada <yamada.masahiro at socionext.com>

Applied to u-boot/master, thanks!

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20180507/366579f7/attachment.sig>


More information about the U-Boot mailing list