u-boot-2016/drivers
Masahiro Yamada e151a1c288 syscon: add Linux-compatible syscon API
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 6f98b7504f ("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@socionext.com>
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
2018-05-07 15:49:52 -04:00
..
adc SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
ata SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
bios_emulator SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
block SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
bootcount SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
clk SPDX: Convert all of our multiple license tags to Linux Kernel style 2018-05-07 10:24:31 -04:00
core syscon: add Linux-compatible syscon API 2018-05-07 15:49:52 -04:00
cpu SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
crypto SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
ddr SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
demo SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
dfu SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
dma SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
firmware SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
fpga SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
gpio SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
i2c SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
input SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
led SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
mailbox SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
memory SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
misc SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
mmc SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
mtd SPDX: Convert all of our multiple license tags to Linux Kernel style 2018-05-07 10:24:31 -04:00
net SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
nvme SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
pch SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
pci SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
pcmcia SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
phy regmap: change regmap_init_mem() to take ofnode instead udevice 2018-05-07 15:49:51 -04:00
pinctrl regmap: clean up regmap allocation 2018-05-07 15:15:27 -04:00
power SPDX: Convert all of our multiple license tags to Linux Kernel style 2018-05-07 10:24:31 -04:00
pwm SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
qe SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
ram regmap: change regmap_init_mem() to take ofnode instead udevice 2018-05-07 15:49:51 -04:00
remoteproc SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
reset regmap: change regmap_init_mem() to take ofnode instead udevice 2018-05-07 15:49:51 -04:00
rtc SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
scsi SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
serial SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
soc SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
sound SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
spi SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
spmi SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
sysreset regmap: clean up regmap allocation 2018-05-07 15:15:27 -04:00
thermal SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
timer SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
tpm SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
usb regmap: clean up regmap allocation 2018-05-07 15:15:27 -04:00
video SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
watchdog SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
Kconfig bootcount: add support for bootcounter on EXT filesystem 2017-11-20 09:58:31 +01:00
Makefile SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00