All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v4 00/14] improve OF_PLATDATA support
@ 2020-06-25  4:10 Walter Lozano
  2020-06-25  4:10 ` [PATCH v4 01/14] drivers: rename drivers to match compatible string Walter Lozano
                   ` (13 more replies)
  0 siblings, 14 replies; 46+ messages in thread
From: Walter Lozano @ 2020-06-25  4:10 UTC (permalink / raw)
  To: u-boot


When using OF_PLATDATA dtbs are converted to C structs in order to save
space as we can remove both dtbs and libraries from TPL/SPL binaries.

This patchset tries to improve its support by overcoming some limitations
in the current implementation

First, the support for scan and check for valid driver/aliases is added
in order to generate U_BOOT_DEVICE entries with valid driver names.

Secondly, the way information about linked noded (phandle) is generated
in C structs is improved in order to make it easier to get a device
associated to its data.

Lastly the support for the property cd-gpios is added, which is used to
configure the card detection gpio on MMC is added.

This implementation is based in discussion in [1], [2] and [3]

[1] https://patchwork.ozlabs.org/patch/1249198/
[2] https://patchwork.ozlabs.org/project/uboot/list/?series=167495&state=*
[3] https://patchwork.ozlabs.org/project/uboot/list/?series=176759&state=*

Changes for v4
- Fix syntax error on dtoc

Changes for v3
- Split patches to separate core from tools changes
- Squash patches to avoid errors on tests
- Fix lines longer than 80 chars

Changes for v2
- Rename drivers to match compatible strings
- Fix out-of-trees usage of dtoc
- Fix test coverage
- Improve documentation
- Improve format


Walter Lozano (14):
  drivers: rename drivers to match compatible string
  dtoc: add missing code comments
  core: add support for U_BOOT_DRIVER_ALIAS
  dtoc: add support to scan drivers
  dtoc: add option to disable warnings
  dm: doc: update of-plat with the support for driver aliases
  core: drop const for struct driver_info
  core: extend struct driver_info to point to device
  sandbox: Move section u_boot_list to make it RW
  dtoc: extend dtoc to use struct driver_info when linking nodes
  dm: doc: update of-plat with new phandle support
  arm: dts: include gpio nodes for card detect
  dtoc: update dtb_platdata to support cd-gpios
  dtoc: add test for cd-gpios

 arch/arm/dts/da850-evm-u-boot.dtsi            |   4 +
 arch/arm/dts/da850-lcdk-u-boot.dtsi           |   4 +
 arch/arm/dts/rk3288-u-boot.dtsi               |   4 +
 arch/arm/dts/rk3288-veyron-speedy-u-boot.dtsi |   2 +-
 arch/arm/dts/rk3288-veyron-u-boot.dtsi        |  11 +
 .../mach-at91/arm926ejs/at91sam9260_devices.c |   6 +-
 .../arm926ejs/at91sam9m10g45_devices.c        |  10 +-
 arch/arm/mach-rockchip/rk3328/syscon_rk3328.c |   4 +-
 arch/sandbox/cpu/u-boot-spl.lds               |   2 +-
 board/davinci/da8xxevm/omapl138_lcdk.c        |   2 +-
 board/sandbox/sandbox.c                       |   2 +-
 doc/driver-model/of-plat.rst                  |  38 ++-
 drivers/clk/at91/clk-master.c                 |   4 +-
 drivers/clk/at91/clk-peripheral.c             |   4 +-
 drivers/clk/at91/pmc.c                        |   6 +-
 drivers/clk/clk-uclass.c                      |  11 +-
 drivers/core/device.c                         |  28 +-
 drivers/core/root.c                           |   6 +-
 drivers/core/simple-bus.c                     |   4 +-
 drivers/gpio/at91_gpio.c                      |   4 +-
 drivers/gpio/da8xx_gpio.c                     |   4 +-
 drivers/gpio/mxs_gpio.c                       |   8 +-
 drivers/gpio/rk_gpio.c                        |   4 +-
 drivers/gpio/sandbox.c                        |   6 +-
 drivers/i2c/rk_i2c.c                          |   6 +-
 drivers/input/cros_ec_keyb.c                  |   4 +-
 drivers/misc/cros_ec_sandbox.c                |   4 +-
 drivers/misc/irq-uclass.c                     |  10 +-
 drivers/mmc/davinci_mmc.c                     |   4 +-
 drivers/mmc/ftsdc010_mci.c                    |   2 +-
 drivers/mmc/mxsmmc.c                          |   7 +-
 drivers/mmc/rockchip_dw_mmc.c                 |   7 +-
 drivers/mmc/rockchip_sdhci.c                  |   2 +-
 drivers/mtd/spi/sf-uclass.c                   |   2 +-
 drivers/mtd/spi/sf_probe.c                    |   6 +-
 drivers/pinctrl/nxp/pinctrl-mxs.c             |   6 +-
 drivers/pinctrl/pinctrl-at91.c                |   6 +-
 drivers/pinctrl/rockchip/pinctrl-rk3188.c     |   2 +-
 drivers/pinctrl/rockchip/pinctrl-rk3288.c     |   2 +-
 drivers/pinctrl/rockchip/pinctrl-rk3328.c     |   2 +-
 drivers/pinctrl/rockchip/pinctrl-rk3368.c     |   2 +-
 drivers/power/pmic/rk8xx.c                    |   6 +-
 drivers/power/regulator/fixed.c               |   4 +-
 drivers/ram/rockchip/dmc-rk3368.c             |   2 +-
 drivers/ram/rockchip/sdram_rk3188.c           |   2 +-
 drivers/ram/rockchip/sdram_rk3288.c           |   2 +-
 drivers/ram/rockchip/sdram_rk3328.c           |   2 +-
 drivers/ram/rockchip/sdram_rk3399.c           |   2 +-
 drivers/serial/ns16550.c                      |   4 +
 drivers/serial/sandbox.c                      |   6 +-
 drivers/spi/mxs_spi.c                         |   8 +-
 drivers/spi/rk_spi.c                          |  10 +-
 drivers/spi/sandbox_spi.c                     |   4 +-
 drivers/tpm/tpm_tis_sandbox.c                 |   4 +-
 drivers/video/rockchip/rk3288_vop.c           |   4 +-
 drivers/video/sandbox_sdl.c                   |   4 +-
 drivers/watchdog/at91sam9_wdt.c               |   4 +-
 include/clk.h                                 |   4 +-
 include/dm/device-internal.h                  |   2 +-
 include/dm/device.h                           |  22 ++
 include/dm/platdata.h                         |  14 +
 test/dm/gpio.c                                |   2 +-
 test/dm/spi.c                                 |   6 +-
 test/py/tests/test_bind.py                    |  54 ++--
 tools/dtoc/dtb_platdata.py                    | 143 ++++++++-
 tools/dtoc/dtoc_test_invalid_driver.dts       |  15 +
 tools/dtoc/dtoc_test_phandle_cd_gpios.dts     |  42 +++
 tools/dtoc/test_dtoc.py                       | 287 +++++++++++++-----
 68 files changed, 672 insertions(+), 239 deletions(-)
 create mode 100644 arch/arm/dts/rk3288-veyron-u-boot.dtsi
 create mode 100644 tools/dtoc/dtoc_test_invalid_driver.dts
 create mode 100644 tools/dtoc/dtoc_test_phandle_cd_gpios.dts

-- 
2.20.1

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [PATCH v4 01/14] drivers: rename drivers to match compatible string
  2020-06-25  4:10 [PATCH v4 00/14] improve OF_PLATDATA support Walter Lozano
@ 2020-06-25  4:10 ` Walter Lozano
  2020-06-26  1:42   ` Simon Glass
  2020-06-25  4:10 ` [PATCH v4 02/14] dtoc: add missing code comments Walter Lozano
                   ` (12 subsequent siblings)
  13 siblings, 1 reply; 46+ messages in thread
From: Walter Lozano @ 2020-06-25  4:10 UTC (permalink / raw)
  To: u-boot

When using OF_PLATDATA, the bind process between devices and drivers
is performed trying to match compatible string with driver names.
However driver names are not strictly defined, and also there are different
names used when declaring a driver with U_BOOT_DRIVER, the name of the
symbol used in the linker list and the used in the struct driver_info.

In order to make things a bit more clear, rename the drivers names. This
will also help for further OF_PLATDATA improvements, such as checking
for valid driver names.

Signed-off-by: Walter Lozano <walter.lozano@collabora.com>
---

 .../mach-at91/arm926ejs/at91sam9260_devices.c |  6 +--
 .../arm926ejs/at91sam9m10g45_devices.c        | 10 ++--
 arch/arm/mach-rockchip/rk3328/syscon_rk3328.c |  4 +-
 board/davinci/da8xxevm/omapl138_lcdk.c        |  2 +-
 board/sandbox/sandbox.c                       |  2 +-
 drivers/clk/at91/clk-master.c                 |  4 +-
 drivers/clk/at91/clk-peripheral.c             |  4 +-
 drivers/clk/at91/pmc.c                        |  4 +-
 drivers/core/simple-bus.c                     |  4 +-
 drivers/gpio/at91_gpio.c                      |  4 +-
 drivers/gpio/da8xx_gpio.c                     |  4 +-
 drivers/gpio/mxs_gpio.c                       |  6 +--
 drivers/gpio/rk_gpio.c                        |  4 +-
 drivers/gpio/sandbox.c                        |  4 +-
 drivers/i2c/rk_i2c.c                          |  4 +-
 drivers/input/cros_ec_keyb.c                  |  4 +-
 drivers/misc/cros_ec_sandbox.c                |  4 +-
 drivers/mmc/davinci_mmc.c                     |  4 +-
 drivers/mmc/mxsmmc.c                          |  6 +--
 drivers/mmc/rockchip_dw_mmc.c                 |  2 +-
 drivers/mtd/spi/sf-uclass.c                   |  2 +-
 drivers/mtd/spi/sf_probe.c                    |  4 +-
 drivers/pinctrl/nxp/pinctrl-mxs.c             |  4 +-
 drivers/pinctrl/pinctrl-at91.c                |  4 +-
 drivers/pinctrl/rockchip/pinctrl-rk3188.c     |  2 +-
 drivers/pinctrl/rockchip/pinctrl-rk3288.c     |  2 +-
 drivers/pinctrl/rockchip/pinctrl-rk3328.c     |  2 +-
 drivers/pinctrl/rockchip/pinctrl-rk3368.c     |  2 +-
 drivers/power/pmic/rk8xx.c                    |  4 +-
 drivers/power/regulator/fixed.c               |  4 +-
 drivers/ram/rockchip/dmc-rk3368.c             |  2 +-
 drivers/ram/rockchip/sdram_rk3188.c           |  2 +-
 drivers/ram/rockchip/sdram_rk3288.c           |  2 +-
 drivers/ram/rockchip/sdram_rk3328.c           |  2 +-
 drivers/serial/sandbox.c                      |  6 +--
 drivers/spi/mxs_spi.c                         |  6 +--
 drivers/spi/rk_spi.c                          |  6 +--
 drivers/spi/sandbox_spi.c                     |  4 +-
 drivers/tpm/tpm_tis_sandbox.c                 |  4 +-
 drivers/video/rockchip/rk3288_vop.c           |  4 +-
 drivers/video/sandbox_sdl.c                   |  4 +-
 drivers/watchdog/at91sam9_wdt.c               |  4 +-
 test/dm/gpio.c                                |  2 +-
 test/dm/spi.c                                 |  6 +--
 test/py/tests/test_bind.py                    | 54 +++++++++----------
 45 files changed, 104 insertions(+), 120 deletions(-)

diff --git a/arch/arm/mach-at91/arm926ejs/at91sam9260_devices.c b/arch/arm/mach-at91/arm926ejs/at91sam9260_devices.c
index c033ed6d16..8122d2f98e 100644
--- a/arch/arm/mach-at91/arm926ejs/at91sam9260_devices.c
+++ b/arch/arm/mach-at91/arm926ejs/at91sam9260_devices.c
@@ -220,7 +220,7 @@ static const struct at91_port_platdata at91sam9260_plat[] = {
 };
 
 U_BOOT_DEVICES(at91sam9260_gpios) = {
-	{ "gpio_at91", &at91sam9260_plat[0] },
-	{ "gpio_at91", &at91sam9260_plat[1] },
-	{ "gpio_at91", &at91sam9260_plat[2] },
+	{ "atmel_at91rm9200_gpio", &at91sam9260_plat[0] },
+	{ "atmel_at91rm9200_gpio", &at91sam9260_plat[1] },
+	{ "atmel_at91rm9200_gpio", &at91sam9260_plat[2] },
 };
diff --git a/arch/arm/mach-at91/arm926ejs/at91sam9m10g45_devices.c b/arch/arm/mach-at91/arm926ejs/at91sam9m10g45_devices.c
index 89cbeafa20..08ca3edd78 100644
--- a/arch/arm/mach-at91/arm926ejs/at91sam9m10g45_devices.c
+++ b/arch/arm/mach-at91/arm926ejs/at91sam9m10g45_devices.c
@@ -176,9 +176,9 @@ static const struct at91_port_platdata at91sam9260_plat[] = {
 };
 
 U_BOOT_DEVICES(at91sam9260_gpios) = {
-	{ "gpio_at91", &at91sam9260_plat[0] },
-	{ "gpio_at91", &at91sam9260_plat[1] },
-	{ "gpio_at91", &at91sam9260_plat[2] },
-	{ "gpio_at91", &at91sam9260_plat[3] },
-	{ "gpio_at91", &at91sam9260_plat[4] },
+	{ "atmel_at91rm9200_gpio", &at91sam9260_plat[0] },
+	{ "atmel_at91rm9200_gpio", &at91sam9260_plat[1] },
+	{ "atmel_at91rm9200_gpio", &at91sam9260_plat[2] },
+	{ "atmel_at91rm9200_gpio", &at91sam9260_plat[3] },
+	{ "atmel_at91rm9200_gpio", &at91sam9260_plat[4] },
 };
diff --git a/arch/arm/mach-rockchip/rk3328/syscon_rk3328.c b/arch/arm/mach-rockchip/rk3328/syscon_rk3328.c
index 8a0eceb178..daf74a0e2d 100644
--- a/arch/arm/mach-rockchip/rk3328/syscon_rk3328.c
+++ b/arch/arm/mach-rockchip/rk3328/syscon_rk3328.c
@@ -13,8 +13,8 @@ static const struct udevice_id rk3328_syscon_ids[] = {
 	{ }
 };
 
-U_BOOT_DRIVER(syscon_rk3328) = {
-	.name = "rk3328_syscon",
+U_BOOT_DRIVER(rockchip_rk3328_grf) = {
+	.name = "rockchip_rk3328_grf",
 	.id = UCLASS_SYSCON,
 	.of_match = rk3328_syscon_ids,
 };
diff --git a/board/davinci/da8xxevm/omapl138_lcdk.c b/board/davinci/da8xxevm/omapl138_lcdk.c
index 608a7f28eb..269071e503 100644
--- a/board/davinci/da8xxevm/omapl138_lcdk.c
+++ b/board/davinci/da8xxevm/omapl138_lcdk.c
@@ -368,7 +368,7 @@ U_BOOT_DEVICE(omapl138_uart) = {
 };
 
 U_BOOT_DEVICE(omapl138_mmc) = {
-	.name = "davinci_mmc",
+	.name = "ti_da830_mmc",
 };
 
 void spl_board_init(void)
diff --git a/board/sandbox/sandbox.c b/board/sandbox/sandbox.c
index 1372003018..bd39109f3b 100644
--- a/board/sandbox/sandbox.c
+++ b/board/sandbox/sandbox.c
@@ -22,7 +22,7 @@ gd_t *gd;
 
 /* Add a simple GPIO device */
 U_BOOT_DEVICE(gpio_sandbox) = {
-	.name = "gpio_sandbox",
+	.name = "sandbox_gpio",
 };
 
 void flush_cache(unsigned long start, unsigned long size)
diff --git a/drivers/clk/at91/clk-master.c b/drivers/clk/at91/clk-master.c
index 4fa33c4715..e078fab7b4 100644
--- a/drivers/clk/at91/clk-master.c
+++ b/drivers/clk/at91/clk-master.c
@@ -25,8 +25,8 @@ static const struct udevice_id at91_master_clk_match[] = {
 	{}
 };
 
-U_BOOT_DRIVER(at91_master_clk) = {
-	.name = "at91-master-clk",
+U_BOOT_DRIVER(atmel_at91rm9200_clk_master) = {
+	.name = "atmel_at91rm9200_clk_master",
 	.id = UCLASS_CLK,
 	.of_match = at91_master_clk_match,
 	.ops = &at91_master_clk_ops,
diff --git a/drivers/clk/at91/clk-peripheral.c b/drivers/clk/at91/clk-peripheral.c
index c55e6214b2..cd9d5e77c0 100644
--- a/drivers/clk/at91/clk-peripheral.c
+++ b/drivers/clk/at91/clk-peripheral.c
@@ -43,8 +43,8 @@ static const struct udevice_id sam9x5_periph_clk_match[] = {
 	{}
 };
 
-U_BOOT_DRIVER(sam9x5_periph_clk) = {
-	.name = "sam9x5-periph-clk",
+U_BOOT_DRIVER(atmel_at91rm9200_clk_peripheral) = {
+	.name = "atmel_at91rm9200_clk_peripheral",
 	.id = UCLASS_MISC,
 	.of_match = sam9x5_periph_clk_match,
 	.bind = sam9x5_periph_clk_bind,
diff --git a/drivers/clk/at91/pmc.c b/drivers/clk/at91/pmc.c
index f5808449a6..1fede16a0c 100644
--- a/drivers/clk/at91/pmc.c
+++ b/drivers/clk/at91/pmc.c
@@ -24,8 +24,8 @@ static const struct udevice_id at91_pmc_match[] = {
 	{}
 };
 
-U_BOOT_DRIVER(at91_pmc) = {
-	.name = "at91-pmc",
+U_BOOT_DRIVER(atmel_at91rm9200_pmc) = {
+	.name = "atmel_at91rm9200_pmc",
 	.id = UCLASS_SIMPLE_BUS,
 	.of_match = at91_pmc_match,
 };
diff --git a/drivers/core/simple-bus.c b/drivers/core/simple-bus.c
index 7fc23ef82d..7cc1d46009 100644
--- a/drivers/core/simple-bus.c
+++ b/drivers/core/simple-bus.c
@@ -56,8 +56,8 @@ static const struct udevice_id generic_simple_bus_ids[] = {
 	{ }
 };
 
-U_BOOT_DRIVER(simple_bus_drv) = {
-	.name	= "generic_simple_bus",
+U_BOOT_DRIVER(simple_bus) = {
+	.name	= "simple_bus",
 	.id	= UCLASS_SIMPLE_BUS,
 	.of_match = generic_simple_bus_ids,
 	.flags	= DM_FLAG_PRE_RELOC,
diff --git a/drivers/gpio/at91_gpio.c b/drivers/gpio/at91_gpio.c
index 3621cf2408..4a8b2e6ff6 100644
--- a/drivers/gpio/at91_gpio.c
+++ b/drivers/gpio/at91_gpio.c
@@ -624,8 +624,8 @@ static const struct udevice_id at91_gpio_ids[] = {
 };
 #endif
 
-U_BOOT_DRIVER(gpio_at91) = {
-	.name	= "gpio_at91",
+U_BOOT_DRIVER(atmel_at91rm9200_gpio) = {
+	.name	= "atmel_at91rm9200_gpio",
 	.id	= UCLASS_GPIO,
 #if CONFIG_IS_ENABLED(OF_CONTROL)
 	.of_match = at91_gpio_ids,
diff --git a/drivers/gpio/da8xx_gpio.c b/drivers/gpio/da8xx_gpio.c
index 0d0e9d2254..ab0a5cfd33 100644
--- a/drivers/gpio/da8xx_gpio.c
+++ b/drivers/gpio/da8xx_gpio.c
@@ -553,8 +553,8 @@ static int davinci_gpio_ofdata_to_platdata(struct udevice *dev)
 	return 0;
 }
 
-U_BOOT_DRIVER(gpio_davinci) = {
-	.name	= "gpio_davinci",
+U_BOOT_DRIVER(ti_dm6441_gpio) = {
+	.name	= "ti_dm6441_gpio",
 	.id	= UCLASS_GPIO,
 	.ops	= &gpio_davinci_ops,
 	.ofdata_to_platdata = of_match_ptr(davinci_gpio_ofdata_to_platdata),
diff --git a/drivers/gpio/mxs_gpio.c b/drivers/gpio/mxs_gpio.c
index 405e9ac135..e43484d13a 100644
--- a/drivers/gpio/mxs_gpio.c
+++ b/drivers/gpio/mxs_gpio.c
@@ -297,12 +297,8 @@ static const struct udevice_id mxs_gpio_ids[] = {
 };
 #endif
 
-U_BOOT_DRIVER(gpio_mxs) = {
-#ifdef CONFIG_MX28
-	.name = "fsl_imx28_gpio",
-#else /* CONFIG_MX23 */
+U_BOOT_DRIVER(fsl_imx23_gpio) = {
 	.name = "fsl_imx23_gpio",
-#endif
 	.id	= UCLASS_GPIO,
 	.ops	= &gpio_mxs_ops,
 	.probe	= mxs_gpio_probe,
diff --git a/drivers/gpio/rk_gpio.c b/drivers/gpio/rk_gpio.c
index 3d96678a45..8cc288581c 100644
--- a/drivers/gpio/rk_gpio.c
+++ b/drivers/gpio/rk_gpio.c
@@ -172,8 +172,8 @@ static const struct udevice_id rockchip_gpio_ids[] = {
 	{ }
 };
 
-U_BOOT_DRIVER(gpio_rockchip) = {
-	.name	= "gpio_rockchip",
+U_BOOT_DRIVER(rockchip_gpio_bank) = {
+	.name	= "rockchip_gpio_bank",
 	.id	= UCLASS_GPIO,
 	.of_match = rockchip_gpio_ids,
 	.ops	= &gpio_rockchip_ops,
diff --git a/drivers/gpio/sandbox.c b/drivers/gpio/sandbox.c
index 9549c74c2b..ff46d3c8d1 100644
--- a/drivers/gpio/sandbox.c
+++ b/drivers/gpio/sandbox.c
@@ -243,8 +243,8 @@ static const struct udevice_id sandbox_gpio_ids[] = {
 	{ }
 };
 
-U_BOOT_DRIVER(gpio_sandbox) = {
-	.name	= "gpio_sandbox",
+U_BOOT_DRIVER(sandbox_gpio) = {
+	.name	= "sandbox_gpio",
 	.id	= UCLASS_GPIO,
 	.of_match = sandbox_gpio_ids,
 	.ofdata_to_platdata = sandbox_gpio_ofdata_to_platdata,
diff --git a/drivers/i2c/rk_i2c.c b/drivers/i2c/rk_i2c.c
index 32b2ee8578..eceef80e70 100644
--- a/drivers/i2c/rk_i2c.c
+++ b/drivers/i2c/rk_i2c.c
@@ -483,8 +483,8 @@ static const struct udevice_id rockchip_i2c_ids[] = {
 	{ }
 };
 
-U_BOOT_DRIVER(i2c_rockchip) = {
-	.name	= "i2c_rockchip",
+U_BOOT_DRIVER(rockchip_rk3066_i2c) = {
+	.name	= "rockchip_rk3066_i2c",
 	.id	= UCLASS_I2C,
 	.of_match = rockchip_i2c_ids,
 	.ofdata_to_platdata = rockchip_i2c_ofdata_to_platdata,
diff --git a/drivers/input/cros_ec_keyb.c b/drivers/input/cros_ec_keyb.c
index 8c1a25c73f..6c26157b07 100644
--- a/drivers/input/cros_ec_keyb.c
+++ b/drivers/input/cros_ec_keyb.c
@@ -224,8 +224,8 @@ static const struct udevice_id cros_ec_kbd_ids[] = {
 	{ }
 };
 
-U_BOOT_DRIVER(cros_ec_kbd) = {
-	.name	= "cros_ec_kbd",
+U_BOOT_DRIVER(google_cros_ec_keyb) = {
+	.name	= "google_cros_ec_keyb",
 	.id	= UCLASS_KEYBOARD,
 	.of_match = cros_ec_kbd_ids,
 	.probe = cros_ec_kbd_probe,
diff --git a/drivers/misc/cros_ec_sandbox.c b/drivers/misc/cros_ec_sandbox.c
index 9dd6a18b2b..dc72a2c43d 100644
--- a/drivers/misc/cros_ec_sandbox.c
+++ b/drivers/misc/cros_ec_sandbox.c
@@ -571,8 +571,8 @@ static const struct udevice_id cros_ec_ids[] = {
 	{ }
 };
 
-U_BOOT_DRIVER(cros_ec_sandbox) = {
-	.name		= "cros_ec_sandbox",
+U_BOOT_DRIVER(google_cros_ec_sandbox) = {
+	.name		= "google_cros_ec_sandbox",
 	.id		= UCLASS_CROS_EC,
 	.of_match	= cros_ec_ids,
 	.probe		= cros_ec_probe,
diff --git a/drivers/mmc/davinci_mmc.c b/drivers/mmc/davinci_mmc.c
index ef5cd4e723..4da3827e47 100644
--- a/drivers/mmc/davinci_mmc.c
+++ b/drivers/mmc/davinci_mmc.c
@@ -538,8 +538,8 @@ static const struct udevice_id davinci_mmc_ids[] = {
 	{},
 };
 
-U_BOOT_DRIVER(davinci_mmc_drv) = {
-	.name = "davinci_mmc",
+U_BOOT_DRIVER(ti_da830_mmc) = {
+	.name = "ti_da830_mmc",
 	.id		= UCLASS_MMC,
 	.of_match	= davinci_mmc_ids,
 #if CONFIG_BLK
diff --git a/drivers/mmc/mxsmmc.c b/drivers/mmc/mxsmmc.c
index 9414eff42b..35c336b499 100644
--- a/drivers/mmc/mxsmmc.c
+++ b/drivers/mmc/mxsmmc.c
@@ -708,12 +708,8 @@ static const struct udevice_id mxsmmc_ids[] = {
 };
 #endif
 
-U_BOOT_DRIVER(mxsmmc) = {
-#ifdef CONFIG_MX28
-	.name = "fsl_imx28_mmc",
-#else /* CONFIG_MX23 */
+U_BOOT_DRIVER(fsl_imx23_mmc) = {
 	.name = "fsl_imx23_mmc",
-#endif
 	.id	= UCLASS_MMC,
 #if CONFIG_IS_ENABLED(OF_CONTROL) && !CONFIG_IS_ENABLED(OF_PLATDATA)
 	.of_match = mxsmmc_ids,
diff --git a/drivers/mmc/rockchip_dw_mmc.c b/drivers/mmc/rockchip_dw_mmc.c
index a0e1be8794..ef75367b3e 100644
--- a/drivers/mmc/rockchip_dw_mmc.c
+++ b/drivers/mmc/rockchip_dw_mmc.c
@@ -166,7 +166,7 @@ static const struct udevice_id rockchip_dwmmc_ids[] = {
 	{ }
 };
 
-U_BOOT_DRIVER(rockchip_dwmmc_drv) = {
+U_BOOT_DRIVER(rockchip_rk3288_dw_mshc) = {
 	.name		= "rockchip_rk3288_dw_mshc",
 	.id		= UCLASS_MMC,
 	.of_match	= rockchip_dwmmc_ids,
diff --git a/drivers/mtd/spi/sf-uclass.c b/drivers/mtd/spi/sf-uclass.c
index 5ebcca590a..b335cbc90b 100644
--- a/drivers/mtd/spi/sf-uclass.c
+++ b/drivers/mtd/spi/sf-uclass.c
@@ -76,7 +76,7 @@ int spi_flash_probe_bus_cs(unsigned int busnum, unsigned int cs,
 	str = strdup(name);
 #endif
 	ret = spi_get_bus_and_cs(busnum, cs, max_hz, spi_mode,
-				  "spi_flash_std", str, &bus, &slave);
+				  "jedec_spi_nor", str, &bus, &slave);
 	if (ret)
 		return ret;
 
diff --git a/drivers/mtd/spi/sf_probe.c b/drivers/mtd/spi/sf_probe.c
index 72b6ee702d..1b44cc68c6 100644
--- a/drivers/mtd/spi/sf_probe.c
+++ b/drivers/mtd/spi/sf_probe.c
@@ -170,8 +170,8 @@ static const struct udevice_id spi_flash_std_ids[] = {
 	{ }
 };
 
-U_BOOT_DRIVER(spi_flash_std) = {
-	.name		= "spi_flash_std",
+U_BOOT_DRIVER(jedec_spi_nor) = {
+	.name		= "jedec_spi_nor",
 	.id		= UCLASS_SPI_FLASH,
 	.of_match	= spi_flash_std_ids,
 	.probe		= spi_flash_std_probe,
diff --git a/drivers/pinctrl/nxp/pinctrl-mxs.c b/drivers/pinctrl/nxp/pinctrl-mxs.c
index 8d61dfe863..bd434667b1 100644
--- a/drivers/pinctrl/nxp/pinctrl-mxs.c
+++ b/drivers/pinctrl/nxp/pinctrl-mxs.c
@@ -179,8 +179,8 @@ static const struct udevice_id mxs_pinctrl_match[] = {
 	{ /* sentinel */ }
 };
 
-U_BOOT_DRIVER(mxs_pinctrl) = {
-	.name = "mxs-pinctrl",
+U_BOOT_DRIVER(fsl_imx23_pinctrl) = {
+	.name = "fsl_imx23_pinctrl",
 	.id = UCLASS_PINCTRL,
 	.of_match = of_match_ptr(mxs_pinctrl_match),
 	.probe = mxs_pinctrl_probe,
diff --git a/drivers/pinctrl/pinctrl-at91.c b/drivers/pinctrl/pinctrl-at91.c
index 27f274ff02..0cc35042f5 100644
--- a/drivers/pinctrl/pinctrl-at91.c
+++ b/drivers/pinctrl/pinctrl-at91.c
@@ -517,8 +517,8 @@ static const struct udevice_id at91_pinctrl_match[] = {
 	{}
 };
 
-U_BOOT_DRIVER(at91_pinctrl) = {
-	.name = "pinctrl_at91",
+U_BOOT_DRIVER(atmel_sama5d3_pinctrl) = {
+	.name = "atmel_sama5d3_pinctrl",
 	.id = UCLASS_PINCTRL,
 	.of_match = at91_pinctrl_match,
 	.probe = at91_pinctrl_probe,
diff --git a/drivers/pinctrl/rockchip/pinctrl-rk3188.c b/drivers/pinctrl/rockchip/pinctrl-rk3188.c
index 043764fc92..f1d76b1c8f 100644
--- a/drivers/pinctrl/rockchip/pinctrl-rk3188.c
+++ b/drivers/pinctrl/rockchip/pinctrl-rk3188.c
@@ -119,7 +119,7 @@ static const struct udevice_id rk3188_pinctrl_ids[] = {
 	{ }
 };
 
-U_BOOT_DRIVER(pinctrl_rk3188) = {
+U_BOOT_DRIVER(rockchip_rk3188_pinctrl) = {
 	.name		= "rockchip_rk3188_pinctrl",
 	.id		= UCLASS_PINCTRL,
 	.of_match	= rk3188_pinctrl_ids,
diff --git a/drivers/pinctrl/rockchip/pinctrl-rk3288.c b/drivers/pinctrl/rockchip/pinctrl-rk3288.c
index 7ae147f304..c617d21b7a 100644
--- a/drivers/pinctrl/rockchip/pinctrl-rk3288.c
+++ b/drivers/pinctrl/rockchip/pinctrl-rk3288.c
@@ -240,7 +240,7 @@ static const struct udevice_id rk3288_pinctrl_ids[] = {
 	{ }
 };
 
-U_BOOT_DRIVER(pinctrl_rk3288) = {
+U_BOOT_DRIVER(rockchip_rk3288_pinctrl) = {
 	.name		= "rockchip_rk3288_pinctrl",
 	.id		= UCLASS_PINCTRL,
 	.of_match	= rk3288_pinctrl_ids,
diff --git a/drivers/pinctrl/rockchip/pinctrl-rk3328.c b/drivers/pinctrl/rockchip/pinctrl-rk3328.c
index 8d37a6f945..6da9eee16e 100644
--- a/drivers/pinctrl/rockchip/pinctrl-rk3328.c
+++ b/drivers/pinctrl/rockchip/pinctrl-rk3328.c
@@ -315,7 +315,7 @@ static const struct udevice_id rk3328_pinctrl_ids[] = {
 	{ }
 };
 
-U_BOOT_DRIVER(pinctrl_rk3328) = {
+U_BOOT_DRIVER(rockchip_rk3328_pinctrl) = {
 	.name		= "rockchip_rk3328_pinctrl",
 	.id		= UCLASS_PINCTRL,
 	.of_match	= rk3328_pinctrl_ids,
diff --git a/drivers/pinctrl/rockchip/pinctrl-rk3368.c b/drivers/pinctrl/rockchip/pinctrl-rk3368.c
index 6cb7bb45d9..52ecffeddd 100644
--- a/drivers/pinctrl/rockchip/pinctrl-rk3368.c
+++ b/drivers/pinctrl/rockchip/pinctrl-rk3368.c
@@ -170,7 +170,7 @@ static const struct udevice_id rk3368_pinctrl_ids[] = {
 	{ }
 };
 
-U_BOOT_DRIVER(pinctrl_rk3368) = {
+U_BOOT_DRIVER(rockchip_rk3368_pinctrl) = {
 	.name		= "rockchip_rk3368_pinctrl",
 	.id		= UCLASS_PINCTRL,
 	.of_match	= rk3368_pinctrl_ids,
diff --git a/drivers/power/pmic/rk8xx.c b/drivers/power/pmic/rk8xx.c
index 52e6d9d8c0..d870ed7113 100644
--- a/drivers/power/pmic/rk8xx.c
+++ b/drivers/power/pmic/rk8xx.c
@@ -182,8 +182,8 @@ static const struct udevice_id rk8xx_ids[] = {
 	{ }
 };
 
-U_BOOT_DRIVER(pmic_rk8xx) = {
-	.name = "rk8xx pmic",
+U_BOOT_DRIVER(rockchip_rk805) = {
+	.name = "rockchip_rk805",
 	.id = UCLASS_PMIC,
 	.of_match = rk8xx_ids,
 #if CONFIG_IS_ENABLED(PMIC_CHILDREN)
diff --git a/drivers/power/regulator/fixed.c b/drivers/power/regulator/fixed.c
index 763e671d54..ac3ec7814c 100644
--- a/drivers/power/regulator/fixed.c
+++ b/drivers/power/regulator/fixed.c
@@ -81,8 +81,8 @@ static const struct udevice_id fixed_regulator_ids[] = {
 	{ },
 };
 
-U_BOOT_DRIVER(fixed_regulator) = {
-	.name = "fixed regulator",
+U_BOOT_DRIVER(regulator_fixed) = {
+	.name = "regulator_fixed",
 	.id = UCLASS_REGULATOR,
 	.ops = &fixed_regulator_ops,
 	.of_match = fixed_regulator_ids,
diff --git a/drivers/ram/rockchip/dmc-rk3368.c b/drivers/ram/rockchip/dmc-rk3368.c
index 2d82a176db..b97a629eae 100644
--- a/drivers/ram/rockchip/dmc-rk3368.c
+++ b/drivers/ram/rockchip/dmc-rk3368.c
@@ -989,7 +989,7 @@ static const struct udevice_id rk3368_dmc_ids[] = {
 	{ }
 };
 
-U_BOOT_DRIVER(dmc_rk3368) = {
+U_BOOT_DRIVER(rockchip_rk3368_dmc) = {
 	.name = "rockchip_rk3368_dmc",
 	.id = UCLASS_RAM,
 	.of_match = rk3368_dmc_ids,
diff --git a/drivers/ram/rockchip/sdram_rk3188.c b/drivers/ram/rockchip/sdram_rk3188.c
index 9b5eb38ecc..0822898f6f 100644
--- a/drivers/ram/rockchip/sdram_rk3188.c
+++ b/drivers/ram/rockchip/sdram_rk3188.c
@@ -942,7 +942,7 @@ static const struct udevice_id rk3188_dmc_ids[] = {
 	{ }
 };
 
-U_BOOT_DRIVER(dmc_rk3188) = {
+U_BOOT_DRIVER(rockchip_rk3188_dmc) = {
 	.name = "rockchip_rk3188_dmc",
 	.id = UCLASS_RAM,
 	.of_match = rk3188_dmc_ids,
diff --git a/drivers/ram/rockchip/sdram_rk3288.c b/drivers/ram/rockchip/sdram_rk3288.c
index 9f6f555147..0245ad9844 100644
--- a/drivers/ram/rockchip/sdram_rk3288.c
+++ b/drivers/ram/rockchip/sdram_rk3288.c
@@ -1110,7 +1110,7 @@ static const struct udevice_id rk3288_dmc_ids[] = {
 	{ }
 };
 
-U_BOOT_DRIVER(dmc_rk3288) = {
+U_BOOT_DRIVER(rockchip_rk3288_dmc) = {
 	.name = "rockchip_rk3288_dmc",
 	.id = UCLASS_RAM,
 	.of_match = rk3288_dmc_ids,
diff --git a/drivers/ram/rockchip/sdram_rk3328.c b/drivers/ram/rockchip/sdram_rk3328.c
index 8329f4a352..d91e0c0f95 100644
--- a/drivers/ram/rockchip/sdram_rk3328.c
+++ b/drivers/ram/rockchip/sdram_rk3328.c
@@ -603,7 +603,7 @@ static const struct udevice_id rk3328_dmc_ids[] = {
 	{ }
 };
 
-U_BOOT_DRIVER(dmc_rk3328) = {
+U_BOOT_DRIVER(rockchip_rk3328_dmc) = {
 	.name = "rockchip_rk3328_dmc",
 	.id = UCLASS_RAM,
 	.of_match = rk3328_dmc_ids,
diff --git a/drivers/serial/sandbox.c b/drivers/serial/sandbox.c
index 545ff3f747..36e081f08c 100644
--- a/drivers/serial/sandbox.c
+++ b/drivers/serial/sandbox.c
@@ -252,8 +252,8 @@ static const struct udevice_id sandbox_serial_ids[] = {
 	{ }
 };
 
-U_BOOT_DRIVER(serial_sandbox) = {
-	.name	= "serial_sandbox",
+U_BOOT_DRIVER(sandbox_serial) = {
+	.name	= "sandbox_serial",
 	.id	= UCLASS_SERIAL,
 	.of_match = sandbox_serial_ids,
 	.ofdata_to_platdata = sandbox_serial_ofdata_to_platdata,
@@ -270,7 +270,7 @@ static const struct sandbox_serial_platdata platdata_non_fdt = {
 };
 
 U_BOOT_DEVICE(serial_sandbox_non_fdt) = {
-	.name = "serial_sandbox",
+	.name = "sandbox_serial",
 	.platdata = &platdata_non_fdt,
 };
 #endif /* CONFIG_IS_ENABLED(OF_CONTROL) */
diff --git a/drivers/spi/mxs_spi.c b/drivers/spi/mxs_spi.c
index 3ca30887fb..087cd50788 100644
--- a/drivers/spi/mxs_spi.c
+++ b/drivers/spi/mxs_spi.c
@@ -606,12 +606,8 @@ static const struct udevice_id mxs_spi_ids[] = {
 };
 #endif
 
-U_BOOT_DRIVER(mxs_spi) = {
-#ifdef CONFIG_MX28
-	.name = "fsl_imx28_spi",
-#else /* CONFIG_MX23 */
+U_BOOT_DRIVER(fsl_imx23_spi) = {
 	.name = "fsl_imx23_spi",
-#endif
 	.id	= UCLASS_SPI,
 #if CONFIG_IS_ENABLED(OF_CONTROL) && !CONFIG_IS_ENABLED(OF_PLATDATA)
 	.of_match = mxs_spi_ids,
diff --git a/drivers/spi/rk_spi.c b/drivers/spi/rk_spi.c
index 95eeb8307a..d25a87fad6 100644
--- a/drivers/spi/rk_spi.c
+++ b/drivers/spi/rk_spi.c
@@ -551,12 +551,8 @@ static const struct udevice_id rockchip_spi_ids[] = {
 	{ }
 };
 
-U_BOOT_DRIVER(rockchip_spi) = {
-#if CONFIG_IS_ENABLED(OF_PLATDATA)
+U_BOOT_DRIVER(rockchip_rk3288_spi) = {
 	.name	= "rockchip_rk3288_spi",
-#else
-	.name	= "rockchip_spi",
-#endif
 	.id	= UCLASS_SPI,
 	.of_match = rockchip_spi_ids,
 	.ops	= &rockchip_spi_ops,
diff --git a/drivers/spi/sandbox_spi.c b/drivers/spi/sandbox_spi.c
index 6b610ff823..d3c0e621d3 100644
--- a/drivers/spi/sandbox_spi.c
+++ b/drivers/spi/sandbox_spi.c
@@ -145,8 +145,8 @@ static const struct udevice_id sandbox_spi_ids[] = {
 	{ }
 };
 
-U_BOOT_DRIVER(spi_sandbox) = {
-	.name	= "spi_sandbox",
+U_BOOT_DRIVER(sandbox_spi) = {
+	.name	= "sandbox_spi",
 	.id	= UCLASS_SPI,
 	.of_match = sandbox_spi_ids,
 	.ops	= &sandbox_spi_ops,
diff --git a/drivers/tpm/tpm_tis_sandbox.c b/drivers/tpm/tpm_tis_sandbox.c
index 2dff0d3eee..e167d0a2fe 100644
--- a/drivers/tpm/tpm_tis_sandbox.c
+++ b/drivers/tpm/tpm_tis_sandbox.c
@@ -355,8 +355,8 @@ static const struct udevice_id sandbox_tpm_ids[] = {
 	{ }
 };
 
-U_BOOT_DRIVER(sandbox_tpm) = {
-	.name   = "sandbox_tpm",
+U_BOOT_DRIVER(google_sandbox_tpm) = {
+	.name   = "google_sandbox_tpm",
 	.id     = UCLASS_TPM,
 	.of_match = sandbox_tpm_ids,
 	.ops    = &sandbox_tpm_ops,
diff --git a/drivers/video/rockchip/rk3288_vop.c b/drivers/video/rockchip/rk3288_vop.c
index 0f91dab1f2..cac86aeaad 100644
--- a/drivers/video/rockchip/rk3288_vop.c
+++ b/drivers/video/rockchip/rk3288_vop.c
@@ -96,8 +96,8 @@ static const struct udevice_id rk3288_vop_ids[] = {
 static const struct video_ops rk3288_vop_ops = {
 };
 
-U_BOOT_DRIVER(rk_vop) = {
-	.name	= "rk3288_vop",
+U_BOOT_DRIVER(rockchip_rk3288_vop) = {
+	.name	= "rockchip_rk3288_vop",
 	.id	= UCLASS_VIDEO,
 	.of_match = rk3288_vop_ids,
 	.ops	= &rk3288_vop_ops,
diff --git a/drivers/video/sandbox_sdl.c b/drivers/video/sandbox_sdl.c
index 1196e6c671..7e7a7eff02 100644
--- a/drivers/video/sandbox_sdl.c
+++ b/drivers/video/sandbox_sdl.c
@@ -63,8 +63,8 @@ static const struct udevice_id sandbox_sdl_ids[] = {
 	{ }
 };
 
-U_BOOT_DRIVER(sdl_sandbox) = {
-	.name	= "sdl_sandbox",
+U_BOOT_DRIVER(sandbox_lcd_sdl) = {
+	.name	= "sandbox_lcd_sdl",
 	.id	= UCLASS_VIDEO,
 	.of_match = sandbox_sdl_ids,
 	.bind	= sandbox_sdl_bind,
diff --git a/drivers/watchdog/at91sam9_wdt.c b/drivers/watchdog/at91sam9_wdt.c
index 48433cc158..cd05acbc28 100644
--- a/drivers/watchdog/at91sam9_wdt.c
+++ b/drivers/watchdog/at91sam9_wdt.c
@@ -112,8 +112,8 @@ static int at91_wdt_probe(struct udevice *dev)
 	return 0;
 }
 
-U_BOOT_DRIVER(at91_wdt) = {
-	.name = "at91_wdt",
+U_BOOT_DRIVER(atmel_at91sam9260_wdt) = {
+	.name = "atmel_at91sam9260_wdt",
 	.id = UCLASS_WDT,
 	.of_match = at91_wdt_ids,
 	.priv_auto_alloc_size = sizeof(struct at91_wdt_priv),
diff --git a/test/dm/gpio.c b/test/dm/gpio.c
index 7c18e5c411..7133ccffa9 100644
--- a/test/dm/gpio.c
+++ b/test/dm/gpio.c
@@ -211,7 +211,7 @@ static int dm_test_gpio_anon(struct unit_test_state *uts)
 
 	/* And the anonymous bank */
 	ut_assertok(gpio_lookup_name("14", &dev, &offset, &gpio));
-	ut_asserteq_str(dev->name, "gpio_sandbox");
+	ut_asserteq_str(dev->name, "sandbox_gpio");
 	ut_asserteq(14, offset);
 	ut_asserteq(14, gpio);
 
diff --git a/test/dm/spi.c b/test/dm/spi.c
index 8e417acc5f..fc859027a7 100644
--- a/test/dm/spi.c
+++ b/test/dm/spi.c
@@ -58,7 +58,7 @@ static int dm_test_spi_find(struct unit_test_state *uts)
 	 */
 	ut_asserteq(-ENODEV, spi_find_bus_and_cs(busnum, cs, &bus, &dev));
 	ut_asserteq(-ENOENT, spi_get_bus_and_cs(busnum, cs, speed, mode,
-						"spi_flash_std", "name", &bus,
+						"jedec_spi_nor", "name", &bus,
 						&slave));
 	sandbox_sf_unbind_emul(state_get_current(), busnum, cs);
 	ut_assertok(spi_cs_info(bus, cs, &info));
@@ -69,7 +69,7 @@ static int dm_test_spi_find(struct unit_test_state *uts)
 					 "name"));
 	ut_assertok(spi_find_bus_and_cs(busnum, cs, &bus, &dev));
 	ut_assertok(spi_get_bus_and_cs(busnum, cs, speed, mode,
-				       "spi_flash_std", "name", &bus, &slave));
+				       "jedec_spi_nor", "name", &bus, &slave));
 
 	ut_assertok(spi_cs_info(bus, cs, &info));
 	ut_asserteq_ptr(info.dev, slave->dev);
@@ -78,7 +78,7 @@ static int dm_test_spi_find(struct unit_test_state *uts)
 	ut_assertok(sandbox_sf_bind_emul(state, busnum, cs_b, bus, node,
 					 "name"));
 	ut_asserteq(-EINVAL, spi_get_bus_and_cs(busnum, cs_b, speed, mode,
-				       "spi_flash_std", "name", &bus, &slave));
+				       "jedec_spi_nor", "name", &bus, &slave));
 	ut_asserteq(-EINVAL, spi_cs_info(bus, cs_b, &info));
 	ut_asserteq_ptr(NULL, info.dev);
 
diff --git a/test/py/tests/test_bind.py b/test/py/tests/test_bind.py
index 20c6050342..e9681c69c5 100644
--- a/test/py/tests/test_bind.py
+++ b/test/py/tests/test_bind.py
@@ -26,45 +26,45 @@ def in_tree(response, name, uclass, drv, depth, last_child):
 def test_bind_unbind_with_node(u_boot_console):
 
 	#bind /bind-test. Device should come up as well as its children
-	response = u_boot_console.run_command('bind  /bind-test generic_simple_bus')
+	response = u_boot_console.run_command('bind  /bind-test simple_bus')
 	assert response == ''
 	tree = u_boot_console.run_command('dm tree')
-	assert in_tree(tree, 'bind-test', 'simple_bus', 'generic_simple_bus', 0, True)
+	assert in_tree(tree, 'bind-test', 'simple_bus', 'simple_bus', 0, True)
 	assert in_tree(tree, 'bind-test-child1', 'phy', 'phy_sandbox', 1, False)
-	assert in_tree(tree, 'bind-test-child2', 'simple_bus', 'generic_simple_bus', 1, True)
+	assert in_tree(tree, 'bind-test-child2', 'simple_bus', 'simple_bus', 1, True)
 
 	#Unbind child #1. No error expected and all devices should be there except for bind-test-child1
 	response = u_boot_console.run_command('unbind  /bind-test/bind-test-child1')
 	assert response == ''
 	tree = u_boot_console.run_command('dm tree')
-	assert in_tree(tree, 'bind-test', 'simple_bus', 'generic_simple_bus', 0, True)
+	assert in_tree(tree, 'bind-test', 'simple_bus', 'simple_bus', 0, True)
 	assert 'bind-test-child1' not in tree
-	assert in_tree(tree, 'bind-test-child2', 'simple_bus', 'generic_simple_bus', 1, True)
+	assert in_tree(tree, 'bind-test-child2', 'simple_bus', 'simple_bus', 1, True)
 
 	#bind child #1. No error expected and all devices should be there
 	response = u_boot_console.run_command('bind  /bind-test/bind-test-child1 phy_sandbox')
 	assert response == ''
 	tree = u_boot_console.run_command('dm tree')
-	assert in_tree(tree, 'bind-test', 'simple_bus', 'generic_simple_bus', 0, True)
+	assert in_tree(tree, 'bind-test', 'simple_bus', 'simple_bus', 0, True)
 	assert in_tree(tree, 'bind-test-child1', 'phy', 'phy_sandbox', 1, True)
-	assert in_tree(tree, 'bind-test-child2', 'simple_bus', 'generic_simple_bus', 1, False)
+	assert in_tree(tree, 'bind-test-child2', 'simple_bus', 'simple_bus', 1, False)
 
 	#Unbind child #2. No error expected and all devices should be there except for bind-test-child2
 	response = u_boot_console.run_command('unbind  /bind-test/bind-test-child2')
 	assert response == ''
 	tree = u_boot_console.run_command('dm tree')
-	assert in_tree(tree, 'bind-test', 'simple_bus', 'generic_simple_bus', 0, True)
+	assert in_tree(tree, 'bind-test', 'simple_bus', 'simple_bus', 0, True)
 	assert in_tree(tree, 'bind-test-child1', 'phy', 'phy_sandbox', 1, True)
 	assert 'bind-test-child2' not in tree
 
 
 	#Bind child #2. No error expected and all devices should be there
-	response = u_boot_console.run_command('bind /bind-test/bind-test-child2 generic_simple_bus')
+	response = u_boot_console.run_command('bind /bind-test/bind-test-child2 simple_bus')
 	assert response == ''
 	tree = u_boot_console.run_command('dm tree')
-	assert in_tree(tree, 'bind-test', 'simple_bus', 'generic_simple_bus', 0, True)
+	assert in_tree(tree, 'bind-test', 'simple_bus', 'simple_bus', 0, True)
 	assert in_tree(tree, 'bind-test-child1', 'phy', 'phy_sandbox', 1, False)
-	assert in_tree(tree, 'bind-test-child2', 'simple_bus', 'generic_simple_bus', 1, True)
+	assert in_tree(tree, 'bind-test-child2', 'simple_bus', 'simple_bus', 1, True)
 
 	#Unbind parent. No error expected. All devices should be removed and unbound
 	response = u_boot_console.run_command('unbind  /bind-test')
@@ -75,7 +75,7 @@ def test_bind_unbind_with_node(u_boot_console):
 	assert 'bind-test-child2' not in tree
 
 	#try binding invalid node with valid driver
-	response = u_boot_console.run_command('bind  /not-a-valid-node generic_simple_bus')
+	response = u_boot_console.run_command('bind  /not-a-valid-node simple_bus')
 	assert response != ''
 	tree = u_boot_console.run_command('dm tree')
 	assert 'not-a-valid-node' not in tree
@@ -87,12 +87,12 @@ def test_bind_unbind_with_node(u_boot_console):
 	assert 'bind-test' not in tree
 
 	#bind /bind-test. Device should come up as well as its children
-	response = u_boot_console.run_command('bind  /bind-test generic_simple_bus')
+	response = u_boot_console.run_command('bind  /bind-test simple_bus')
 	assert response == ''
 	tree = u_boot_console.run_command('dm tree')
-	assert in_tree(tree, 'bind-test', 'simple_bus', 'generic_simple_bus', 0, True)
+	assert in_tree(tree, 'bind-test', 'simple_bus', 'simple_bus', 0, True)
 	assert in_tree(tree, 'bind-test-child1', 'phy', 'phy_sandbox', 1, False)
-	assert in_tree(tree, 'bind-test-child2', 'simple_bus', 'generic_simple_bus', 1, True)
+	assert in_tree(tree, 'bind-test-child2', 'simple_bus', 'simple_bus', 1, True)
 
 	response = u_boot_console.run_command('unbind  /bind-test')
 	assert response == ''
@@ -112,7 +112,7 @@ def get_next_line(tree, name):
 @pytest.mark.buildconfigspec('cmd_bind')
 def test_bind_unbind_with_uclass(u_boot_console):
 	#bind /bind-test
-	response = u_boot_console.run_command('bind  /bind-test generic_simple_bus')
+	response = u_boot_console.run_command('bind  /bind-test simple_bus')
 	assert response == ''
 
 	#make sure bind-test-child2 is there and get its uclass/index pair
@@ -123,8 +123,8 @@ def test_bind_unbind_with_uclass(u_boot_console):
 	child2_uclass = child2_line[0].split()[0]
 	child2_index = int(child2_line[0].split()[1])
 
-	#bind generic_simple_bus as a child of bind-test-child2
-	response = u_boot_console.run_command('bind  {} {} generic_simple_bus'.format(child2_uclass, child2_index, 'generic_simple_bus'))
+	#bind simple_bus as a child of bind-test-child2
+	response = u_boot_console.run_command('bind  {} {} simple_bus'.format(child2_uclass, child2_index, 'simple_bus'))
 
 	#check that the child is there and its uclass/index pair is right
 	tree = u_boot_console.run_command('dm tree')
@@ -132,20 +132,20 @@ def test_bind_unbind_with_uclass(u_boot_console):
 	child_of_child2_line = get_next_line(tree, 'bind-test-child2')
 	assert child_of_child2_line
 	child_of_child2_index = int(child_of_child2_line.split()[1])
-	assert in_tree(tree, 'generic_simple_bus', 'simple_bus', 'generic_simple_bus', 2, True)
+	assert in_tree(tree, 'simple_bus', 'simple_bus', 'simple_bus', 2, True)
 	assert child_of_child2_index == child2_index + 1
 
 	#unbind the child and check it has been removed
 	response = u_boot_console.run_command('unbind  simple_bus {}'.format(child_of_child2_index))
 	assert response == ''
 	tree = u_boot_console.run_command('dm tree')
-	assert in_tree(tree, 'bind-test-child2', 'simple_bus', 'generic_simple_bus', 1, True)
-	assert not in_tree(tree, 'generic_simple_bus', 'simple_bus', 'generic_simple_bus', 2, True)
+	assert in_tree(tree, 'bind-test-child2', 'simple_bus', 'simple_bus', 1, True)
+	assert not in_tree(tree, 'simple_bus', 'simple_bus', 'simple_bus', 2, True)
 	child_of_child2_line = get_next_line(tree, 'bind-test-child2')
 	assert child_of_child2_line == ''
 
-	#bind generic_simple_bus as a child of bind-test-child2
-	response = u_boot_console.run_command('bind  {} {} generic_simple_bus'.format(child2_uclass, child2_index, 'generic_simple_bus'))
+	#bind simple_bus as a child of bind-test-child2
+	response = u_boot_console.run_command('bind  {} {} simple_bus'.format(child2_uclass, child2_index, 'simple_bus'))
 
 	#check that the child is there and its uclass/index pair is right
 	tree = u_boot_console.run_command('dm tree')
@@ -154,22 +154,22 @@ def test_bind_unbind_with_uclass(u_boot_console):
 	child_of_child2_line = get_next_line(tree, 'bind-test-child2')
 	assert child_of_child2_line
 	child_of_child2_index = int(child_of_child2_line.split()[1])
-	assert in_tree(tree, 'generic_simple_bus', 'simple_bus', 'generic_simple_bus', 2, True)
+	assert in_tree(tree, 'simple_bus', 'simple_bus', 'simple_bus', 2, True)
 	assert child_of_child2_index == child2_index + 1
 
 	#unbind the child and check it has been removed
-	response = u_boot_console.run_command('unbind  {} {} generic_simple_bus'.format(child2_uclass, child2_index, 'generic_simple_bus'))
+	response = u_boot_console.run_command('unbind  {} {} simple_bus'.format(child2_uclass, child2_index, 'simple_bus'))
 	assert response == ''
 
 	tree = u_boot_console.run_command('dm tree')
-	assert in_tree(tree, 'bind-test-child2', 'simple_bus', 'generic_simple_bus', 1, True)
+	assert in_tree(tree, 'bind-test-child2', 'simple_bus', 'simple_bus', 1, True)
 
 	child_of_child2_line = get_next_line(tree, 'bind-test-child2')
 	assert child_of_child2_line == ''
 
 	#unbind the child again and check it doesn't change the tree
 	tree_old = u_boot_console.run_command('dm tree')
-	response = u_boot_console.run_command('unbind  {} {} generic_simple_bus'.format(child2_uclass, child2_index, 'generic_simple_bus'))
+	response = u_boot_console.run_command('unbind  {} {} simple_bus'.format(child2_uclass, child2_index, 'simple_bus'))
 	tree_new = u_boot_console.run_command('dm tree')
 
 	assert response == ''
-- 
2.20.1

^ permalink raw reply related	[flat|nested] 46+ messages in thread

* [PATCH v4 02/14] dtoc: add missing code comments
  2020-06-25  4:10 [PATCH v4 00/14] improve OF_PLATDATA support Walter Lozano
  2020-06-25  4:10 ` [PATCH v4 01/14] drivers: rename drivers to match compatible string Walter Lozano
@ 2020-06-25  4:10 ` Walter Lozano
  2020-06-26  1:42   ` Simon Glass
  2020-06-25  4:10 ` [PATCH v4 03/14] core: add support for U_BOOT_DRIVER_ALIAS Walter Lozano
                   ` (11 subsequent siblings)
  13 siblings, 1 reply; 46+ messages in thread
From: Walter Lozano @ 2020-06-25  4:10 UTC (permalink / raw)
  To: u-boot

Add missing information about internal class members in order to make
the code easier to follow.

Signed-off-by: Walter Lozano <walter.lozano@collabora.com>
---

 tools/dtoc/dtb_platdata.py | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/tools/dtoc/dtb_platdata.py b/tools/dtoc/dtb_platdata.py
index ecfe0624d1..bc0de426a9 100644
--- a/tools/dtoc/dtb_platdata.py
+++ b/tools/dtoc/dtb_platdata.py
@@ -140,6 +140,9 @@ class DtbPlatdata(object):
         _include_disabled: true to include nodes marked status = "disabled"
         _outfile: The current output file (sys.stdout or a real file)
         _lines: Stashed list of output lines for outputting in the future
+        _aliases: Dict that hold aliases for compatible strings
+            key: First compatible string declared in a node
+            value: List of additional compatible strings declared in a node
     """
     def __init__(self, dtb_fname, include_disabled):
         self._fdt = None
-- 
2.20.1

^ permalink raw reply related	[flat|nested] 46+ messages in thread

* [PATCH v4 03/14] core: add support for U_BOOT_DRIVER_ALIAS
  2020-06-25  4:10 [PATCH v4 00/14] improve OF_PLATDATA support Walter Lozano
  2020-06-25  4:10 ` [PATCH v4 01/14] drivers: rename drivers to match compatible string Walter Lozano
  2020-06-25  4:10 ` [PATCH v4 02/14] dtoc: add missing code comments Walter Lozano
@ 2020-06-25  4:10 ` Walter Lozano
  2020-06-26  1:43   ` Simon Glass
  2020-06-25  4:10 ` [PATCH v4 04/14] dtoc: add support to scan drivers Walter Lozano
                   ` (10 subsequent siblings)
  13 siblings, 1 reply; 46+ messages in thread
From: Walter Lozano @ 2020-06-25  4:10 UTC (permalink / raw)
  To: u-boot

Currently when using OF_PLATDATA the binding between devices and drivers
is done trying to match the compatible string in the node with a driver
name. However, usually a single driver supports multiple compatible strings
which causes that only devices which its compatible string matches a
driver name get bound.

To overcome this issue, this patch adds the U_BOOT_DRIVER_ALIAS macro,
which generates no code at all, but allows an easy way to declare driver
name aliases. Thanks to this, dtoc could be improve to look for the driver
name based on its alias when it populates the U_BOOT_DEVICE entry.

Signed-off-by: Walter Lozano <walter.lozano@collabora.com>
---

 drivers/clk/at91/pmc.c            | 2 ++
 drivers/gpio/mxs_gpio.c           | 2 ++
 drivers/gpio/sandbox.c            | 2 ++
 drivers/i2c/rk_i2c.c              | 2 ++
 drivers/mmc/mxsmmc.c              | 1 +
 drivers/mmc/rockchip_dw_mmc.c     | 3 +++
 drivers/mtd/spi/sf_probe.c        | 2 ++
 drivers/pinctrl/nxp/pinctrl-mxs.c | 2 ++
 drivers/pinctrl/pinctrl-at91.c    | 2 ++
 drivers/power/pmic/rk8xx.c        | 2 ++
 drivers/serial/ns16550.c          | 4 ++++
 drivers/spi/mxs_spi.c             | 2 ++
 drivers/spi/rk_spi.c              | 2 ++
 include/dm/device.h               | 7 +++++++
 14 files changed, 35 insertions(+)

diff --git a/drivers/clk/at91/pmc.c b/drivers/clk/at91/pmc.c
index 1fede16a0c..793a506d27 100644
--- a/drivers/clk/at91/pmc.c
+++ b/drivers/clk/at91/pmc.c
@@ -30,6 +30,8 @@ U_BOOT_DRIVER(atmel_at91rm9200_pmc) = {
 	.of_match = at91_pmc_match,
 };
 
+U_BOOT_DRIVER_ALIAS(atmel_at91rm9200_pmc, atmel_at91sam9260_pmc)
+
 /*---------------------------------------------------------*/
 
 int at91_pmc_core_probe(struct udevice *dev)
diff --git a/drivers/gpio/mxs_gpio.c b/drivers/gpio/mxs_gpio.c
index e43484d13a..bcdf08c255 100644
--- a/drivers/gpio/mxs_gpio.c
+++ b/drivers/gpio/mxs_gpio.c
@@ -309,4 +309,6 @@ U_BOOT_DRIVER(fsl_imx23_gpio) = {
 	.ofdata_to_platdata = mxs_ofdata_to_platdata,
 #endif
 };
+
+U_BOOT_DRIVER_ALIAS(fsl_imx23_gpio, fsl_imx28_gpio)
 #endif /* DM_GPIO */
diff --git a/drivers/gpio/sandbox.c b/drivers/gpio/sandbox.c
index ff46d3c8d1..8923e54867 100644
--- a/drivers/gpio/sandbox.c
+++ b/drivers/gpio/sandbox.c
@@ -253,6 +253,8 @@ U_BOOT_DRIVER(sandbox_gpio) = {
 	.ops	= &gpio_sandbox_ops,
 };
 
+U_BOOT_DRIVER_ALIAS(sandbox_gpio, sandbox_gpio_alias)
+
 /* pincontrol: used only to check GPIO pin configuration (pinmux command) */
 
 struct sb_pinctrl_priv {
diff --git a/drivers/i2c/rk_i2c.c b/drivers/i2c/rk_i2c.c
index eceef80e70..e76c087b1d 100644
--- a/drivers/i2c/rk_i2c.c
+++ b/drivers/i2c/rk_i2c.c
@@ -492,3 +492,5 @@ U_BOOT_DRIVER(rockchip_rk3066_i2c) = {
 	.priv_auto_alloc_size = sizeof(struct rk_i2c),
 	.ops	= &rockchip_i2c_ops,
 };
+
+U_BOOT_DRIVER_ALIAS(rockchip_rk3066_i2c, rockchip_rk3288_i2c)
diff --git a/drivers/mmc/mxsmmc.c b/drivers/mmc/mxsmmc.c
index 35c336b499..afa95e57ee 100644
--- a/drivers/mmc/mxsmmc.c
+++ b/drivers/mmc/mxsmmc.c
@@ -724,4 +724,5 @@ U_BOOT_DRIVER(fsl_imx23_mmc) = {
 	.platdata_auto_alloc_size = sizeof(struct mxsmmc_platdata),
 };
 
+U_BOOT_DRIVER_ALIAS(fsl_imx23_mmc, fsl_imx28_mmc)
 #endif /* CONFIG_DM_MMC */
diff --git a/drivers/mmc/rockchip_dw_mmc.c b/drivers/mmc/rockchip_dw_mmc.c
index ef75367b3e..ac710324c8 100644
--- a/drivers/mmc/rockchip_dw_mmc.c
+++ b/drivers/mmc/rockchip_dw_mmc.c
@@ -178,6 +178,9 @@ U_BOOT_DRIVER(rockchip_rk3288_dw_mshc) = {
 	.platdata_auto_alloc_size = sizeof(struct rockchip_mmc_plat),
 };
 
+U_BOOT_DRIVER_ALIAS(rockchip_rk3288_dw_mshc, rockchip_rk3328_dw_mshc)
+U_BOOT_DRIVER_ALIAS(rockchip_rk3288_dw_mshc, rockchip_rk3368_dw_mshc)
+
 #ifdef CONFIG_PWRSEQ
 static int rockchip_dwmmc_pwrseq_set_power(struct udevice *dev, bool enable)
 {
diff --git a/drivers/mtd/spi/sf_probe.c b/drivers/mtd/spi/sf_probe.c
index 1b44cc68c6..97fa22a4b3 100644
--- a/drivers/mtd/spi/sf_probe.c
+++ b/drivers/mtd/spi/sf_probe.c
@@ -180,4 +180,6 @@ U_BOOT_DRIVER(jedec_spi_nor) = {
 	.ops		= &spi_flash_std_ops,
 };
 
+U_BOOT_DRIVER_ALIAS(jedec_spi_nor, spansion_m25p16)
+
 #endif /* CONFIG_DM_SPI_FLASH */
diff --git a/drivers/pinctrl/nxp/pinctrl-mxs.c b/drivers/pinctrl/nxp/pinctrl-mxs.c
index bd434667b1..da6b95acc5 100644
--- a/drivers/pinctrl/nxp/pinctrl-mxs.c
+++ b/drivers/pinctrl/nxp/pinctrl-mxs.c
@@ -190,3 +190,5 @@ U_BOOT_DRIVER(fsl_imx23_pinctrl) = {
 	.priv_auto_alloc_size = sizeof(struct mxs_pinctrl_priv),
 	.ops = &mxs_pinctrl_ops,
 };
+
+U_BOOT_DRIVER_ALIAS(fsl_imx23_pinctrl, fsl_imx28_pinctrl)
diff --git a/drivers/pinctrl/pinctrl-at91.c b/drivers/pinctrl/pinctrl-at91.c
index 0cc35042f5..b40ff8c823 100644
--- a/drivers/pinctrl/pinctrl-at91.c
+++ b/drivers/pinctrl/pinctrl-at91.c
@@ -525,3 +525,5 @@ U_BOOT_DRIVER(atmel_sama5d3_pinctrl) = {
 	.priv_auto_alloc_size = sizeof(struct at91_pinctrl_priv),
 	.ops = &at91_pinctrl_ops,
 };
+
+U_BOOT_DRIVER_ALIAS(atmel_sama5d3_pinctrl, atmel_at91rm9200_pinctrl)
diff --git a/drivers/power/pmic/rk8xx.c b/drivers/power/pmic/rk8xx.c
index d870ed7113..c8ae28b8f3 100644
--- a/drivers/power/pmic/rk8xx.c
+++ b/drivers/power/pmic/rk8xx.c
@@ -193,3 +193,5 @@ U_BOOT_DRIVER(rockchip_rk805) = {
 	.probe = rk8xx_probe,
 	.ops = &rk8xx_ops,
 };
+
+U_BOOT_DRIVER_ALIAS(rockchip_rk805, rockchip_rk808)
diff --git a/drivers/serial/ns16550.c b/drivers/serial/ns16550.c
index 6415d2e1e5..df958a688b 100644
--- a/drivers/serial/ns16550.c
+++ b/drivers/serial/ns16550.c
@@ -619,6 +619,10 @@ U_BOOT_DRIVER(ns16550_serial) = {
 	.flags	= DM_FLAG_PRE_RELOC,
 #endif
 };
+
+U_BOOT_DRIVER_ALIAS(ns16550_serial, rockchip_rk3328_uart)
+U_BOOT_DRIVER_ALIAS(ns16550_serial, rockchip_rk3368_uart)
+U_BOOT_DRIVER_ALIAS(ns16550_serial, ti_da830_uart)
 #endif
 #endif /* SERIAL_PRESENT */
 
diff --git a/drivers/spi/mxs_spi.c b/drivers/spi/mxs_spi.c
index 087cd50788..2779501176 100644
--- a/drivers/spi/mxs_spi.c
+++ b/drivers/spi/mxs_spi.c
@@ -618,4 +618,6 @@ U_BOOT_DRIVER(fsl_imx23_spi) = {
 	.priv_auto_alloc_size = sizeof(struct mxs_spi_priv),
 	.probe	= mxs_spi_probe,
 };
+
+U_BOOT_DRIVER_ALIAS(fsl_imx23_spi, fsl_imx28_spi)
 #endif
diff --git a/drivers/spi/rk_spi.c b/drivers/spi/rk_spi.c
index d25a87fad6..0ac7f767ca 100644
--- a/drivers/spi/rk_spi.c
+++ b/drivers/spi/rk_spi.c
@@ -561,3 +561,5 @@ U_BOOT_DRIVER(rockchip_rk3288_spi) = {
 	.priv_auto_alloc_size = sizeof(struct rockchip_spi_priv),
 	.probe	= rockchip_spi_probe,
 };
+
+U_BOOT_DRIVER_ALIAS(rockchip_rk3288_spi, rockchip_rk3368_spi)
diff --git a/include/dm/device.h b/include/dm/device.h
index 975eec5d0e..2cfe10766f 100644
--- a/include/dm/device.h
+++ b/include/dm/device.h
@@ -282,6 +282,13 @@ struct driver {
 #define DM_GET_DRIVER(__name)						\
 	ll_entry_get(struct driver, __name, driver)
 
+/**
+ * Declare a macro to state a alias for a driver name. This macro will
+ * produce no code but its information will be parsed by tools like
+ * dtoc
+ */
+#define U_BOOT_DRIVER_ALIAS(__name, __alias)
+
 /**
  * dev_get_platdata() - Get the platform data for a device
  *
-- 
2.20.1

^ permalink raw reply related	[flat|nested] 46+ messages in thread

* [PATCH v4 04/14] dtoc: add support to scan drivers
  2020-06-25  4:10 [PATCH v4 00/14] improve OF_PLATDATA support Walter Lozano
                   ` (2 preceding siblings ...)
  2020-06-25  4:10 ` [PATCH v4 03/14] core: add support for U_BOOT_DRIVER_ALIAS Walter Lozano
@ 2020-06-25  4:10 ` Walter Lozano
  2020-06-26  1:43   ` Simon Glass
  2020-06-25  4:10 ` [PATCH v4 05/14] dtoc: add option to disable warnings Walter Lozano
                   ` (9 subsequent siblings)
  13 siblings, 1 reply; 46+ messages in thread
From: Walter Lozano @ 2020-06-25  4:10 UTC (permalink / raw)
  To: u-boot

Currently dtoc scans dtbs to convert them to struct platdata and
to generate U_BOOT_DEVICE entries. These entries need to be filled
with the driver name, but at this moment the information used is the
compatible name present in the dtb. This causes that only nodes with
a compatible name that matches a driver name generate a working
entry.

In order to improve this behaviour, this patch adds to dtoc the
capability of scan drivers source code to generate a list of valid driver
names and aliases. This allows to generate U_BOOT_DEVICE entries using
valid driver names and rise a warning in the case a name is not valid.

Signed-off-by: Walter Lozano <walter.lozano@collabora.com>
---

 tools/dtoc/dtb_platdata.py | 91 ++++++++++++++++++++++++++++++++++++--
 tools/dtoc/test_dtoc.py    | 33 ++++++++++++++
 2 files changed, 120 insertions(+), 4 deletions(-)

diff --git a/tools/dtoc/dtb_platdata.py b/tools/dtoc/dtb_platdata.py
index bc0de426a9..ae8674d85c 100644
--- a/tools/dtoc/dtb_platdata.py
+++ b/tools/dtoc/dtb_platdata.py
@@ -13,6 +13,8 @@ static data.
 
 import collections
 import copy
+import os
+import re
 import sys
 
 from dtoc import fdt
@@ -143,6 +145,11 @@ class DtbPlatdata(object):
         _aliases: Dict that hold aliases for compatible strings
             key: First compatible string declared in a node
             value: List of additional compatible strings declared in a node
+        _drivers: List of valid driver names found in drivers/
+        _driver_aliases: Dict that holds aliases for driver names
+            key: Driver alias declared with
+                U_BOOT_DRIVER_ALIAS(driver_alias, driver_name)
+            value: Driver name declared with U_BOOT_DRIVER(driver_name)
     """
     def __init__(self, dtb_fname, include_disabled):
         self._fdt = None
@@ -152,6 +159,38 @@ class DtbPlatdata(object):
         self._outfile = None
         self._lines = []
         self._aliases = {}
+        self._drivers = []
+        self._driver_aliases = {}
+
+    def get_normalized_compat_name(self, node):
+        """Get a node's normalized compat name
+
+        Returns a valid driver name by retrieving node's first compatible
+        string as a C identifier and performing a check against _drivers
+        and a lookup in driver_aliases printing a warning in case of failure.
+
+        Args:
+            node: Node object to check
+        Return:
+            Tuple:
+                Driver name associated with the first compatible string
+                List of C identifiers for all the other compatible strings
+                    (possibly empty)
+                In case of no match found, the return will be the same as
+                get_compat_name()
+        """
+        compat_c, aliases_c = get_compat_name(node)
+        if compat_c not in self._drivers:
+            compat_c_old = compat_c
+            compat_c = self._driver_aliases.get(compat_c)
+            if not compat_c:
+                print('WARNING: the driver %s was not found in the driver list'
+                      % (compat_c_old))
+                compat_c = compat_c_old
+            else:
+                aliases_c = [compat_c_old] + aliases_c
+
+        return compat_c, aliases_c
 
     def setup_output(self, fname):
         """Set up the output destination
@@ -246,6 +285,49 @@ class DtbPlatdata(object):
             return PhandleInfo(max_args, args)
         return None
 
+    def scan_driver(self, fn):
+        """Scan a driver file to build a list of driver names and aliases
+
+        This procedure will populate self._drivers and self._driver_aliases
+
+        Args
+            fn: Driver filename to scan
+        """
+        with open(fn) as fd:
+            buff = fd.read()
+
+            # The following re will search for driver names declared as
+            # U_BOOT_DRIVER(driver_name)
+            drivers = re.findall('U_BOOT_DRIVER\((.*)\)', buff)
+
+            for driver in drivers:
+                self._drivers.append(driver)
+
+            # The following re will search for driver aliases declared as
+            # U_BOOT_DRIVER_ALIAS(alias, driver_name)
+            driver_aliases = re.findall('U_BOOT_DRIVER_ALIAS\(\s*(\w+)\s*,\s*(\w+)\s*\)',
+                                        buff)
+
+            for alias in driver_aliases: # pragma: no cover
+                if len(alias) != 2:
+                    continue
+                self._driver_aliases[alias[1]] = alias[0]
+
+    def scan_drivers(self):
+        """Scan the driver folders to build a list of driver names and aliases
+
+        This procedure will populate self._drivers and self._driver_aliases
+
+        """
+        basedir = sys.argv[0].replace('tools/dtoc/dtoc', '')
+        if basedir == '':
+            basedir = './'
+        for (dirpath, dirnames, filenames) in os.walk(basedir):
+            for fn in filenames:
+                if not fn.endswith('.c'):
+                    continue
+                self.scan_driver(dirpath + '/' + fn)
+
     def scan_dtb(self):
         """Scan the device tree to obtain a tree of nodes and properties
 
@@ -356,7 +438,7 @@ class DtbPlatdata(object):
         """
         structs = {}
         for node in self._valid_nodes:
-            node_name, _ = get_compat_name(node)
+            node_name, _ = self.get_normalized_compat_name(node)
             fields = {}
 
             # Get a list of all the valid properties in this node.
@@ -380,14 +462,14 @@ class DtbPlatdata(object):
 
         upto = 0
         for node in self._valid_nodes:
-            node_name, _ = get_compat_name(node)
+            node_name, _ = self.get_normalized_compat_name(node)
             struct = structs[node_name]
             for name, prop in node.props.items():
                 if name not in PROP_IGNORE_LIST and name[0] != '#':
                     prop.Widen(struct[name])
             upto += 1
 
-            struct_name, aliases = get_compat_name(node)
+            struct_name, aliases = self.get_normalized_compat_name(node)
             for alias in aliases:
                 self._aliases[alias] = struct_name
 
@@ -464,7 +546,7 @@ class DtbPlatdata(object):
         Args:
             node: node to output
         """
-        struct_name, _ = get_compat_name(node)
+        struct_name, _ = self.get_normalized_compat_name(node)
         var_name = conv_name_to_c(node.name)
         self.buf('static const struct %s%s %s%s = {\n' %
                  (STRUCT_PREFIX, struct_name, VAL_PREFIX, var_name))
@@ -565,6 +647,7 @@ def run_steps(args, dtb_file, include_disabled, output):
         raise ValueError('Please specify a command: struct, platdata')
 
     plat = DtbPlatdata(dtb_file, include_disabled)
+    plat.scan_drivers()
     plat.scan_dtb()
     plat.scan_tree()
     plat.scan_reg_sizes()
diff --git a/tools/dtoc/test_dtoc.py b/tools/dtoc/test_dtoc.py
index 8498e8303c..91fc9d77f3 100755
--- a/tools/dtoc/test_dtoc.py
+++ b/tools/dtoc/test_dtoc.py
@@ -266,6 +266,39 @@ U_BOOT_DEVICE(pmic_at_9) = {
 \t.platdata_size\t= sizeof(dtv_pmic_at_9),
 };
 
+''', data)
+
+    def test_driver_alias(self):
+        """Test output from a device tree file with a driver alias"""
+        dtb_file = get_dtb_file('dtoc_test_driver_alias.dts')
+        output = tools.GetOutputFilename('output')
+        dtb_platdata.run_steps(['struct'], dtb_file, False, output)
+        with open(output) as infile:
+            data = infile.read()
+        self._CheckStrings(HEADER + '''
+struct dtd_sandbox_gpio {
+\tconst char *\tgpio_bank_name;
+\tbool\t\tgpio_controller;
+\tfdt32_t\t\tsandbox_gpio_count;
+};
+#define dtd_sandbox_gpio_alias dtd_sandbox_gpio
+''', data)
+
+        dtb_platdata.run_steps(['platdata'], dtb_file, False, output)
+        with open(output) as infile:
+            data = infile.read()
+        self._CheckStrings(C_HEADER + '''
+static const struct dtd_sandbox_gpio dtv_gpios_at_0 = {
+\t.gpio_bank_name\t\t= "a",
+\t.gpio_controller\t= true,
+\t.sandbox_gpio_count\t= 0x14,
+};
+U_BOOT_DEVICE(gpios_at_0) = {
+\t.name\t\t= "sandbox_gpio",
+\t.platdata\t= &dtv_gpios_at_0,
+\t.platdata_size\t= sizeof(dtv_gpios_at_0),
+};
+
 ''', data)
 
     def test_phandle(self):
-- 
2.20.1

^ permalink raw reply related	[flat|nested] 46+ messages in thread

* [PATCH v4 05/14] dtoc: add option to disable warnings
  2020-06-25  4:10 [PATCH v4 00/14] improve OF_PLATDATA support Walter Lozano
                   ` (3 preceding siblings ...)
  2020-06-25  4:10 ` [PATCH v4 04/14] dtoc: add support to scan drivers Walter Lozano
@ 2020-06-25  4:10 ` Walter Lozano
  2020-06-26  1:43   ` Simon Glass
  2020-07-06  1:31   ` Simon Glass
  2020-06-25  4:10 ` [PATCH v4 06/14] dm: doc: update of-plat with the support for driver aliases Walter Lozano
                   ` (8 subsequent siblings)
  13 siblings, 2 replies; 46+ messages in thread
From: Walter Lozano @ 2020-06-25  4:10 UTC (permalink / raw)
  To: u-boot

As dtoc now performs checks for valid driver names, when running dtoc
tests several warnings arise as these tests don't use valid driver
names.

This patch adds an option to disable those warning, which is only
intended for running tests.

Signed-off-by: Walter Lozano <walter.lozano@collabora.com>
---

 tools/dtoc/dtb_platdata.py              | 13 ++--
 tools/dtoc/dtoc_test_invalid_driver.dts | 15 ++++
 tools/dtoc/test_dtoc.py                 | 91 +++++++++++++++++--------
 3 files changed, 85 insertions(+), 34 deletions(-)
 create mode 100644 tools/dtoc/dtoc_test_invalid_driver.dts

diff --git a/tools/dtoc/dtb_platdata.py b/tools/dtoc/dtb_platdata.py
index ae8674d85c..d0cd4bf9bd 100644
--- a/tools/dtoc/dtb_platdata.py
+++ b/tools/dtoc/dtb_platdata.py
@@ -141,6 +141,7 @@ class DtbPlatdata(object):
         _valid_nodes: A list of Node object with compatible strings
         _include_disabled: true to include nodes marked status = "disabled"
         _outfile: The current output file (sys.stdout or a real file)
+        _warning_disabled: true to disable warnings about driver names not found
         _lines: Stashed list of output lines for outputting in the future
         _aliases: Dict that hold aliases for compatible strings
             key: First compatible string declared in a node
@@ -151,12 +152,13 @@ class DtbPlatdata(object):
                 U_BOOT_DRIVER_ALIAS(driver_alias, driver_name)
             value: Driver name declared with U_BOOT_DRIVER(driver_name)
     """
-    def __init__(self, dtb_fname, include_disabled):
+    def __init__(self, dtb_fname, include_disabled, warning_disabled):
         self._fdt = None
         self._dtb_fname = dtb_fname
         self._valid_nodes = None
         self._include_disabled = include_disabled
         self._outfile = None
+        self._warning_disabled = warning_disabled
         self._lines = []
         self._aliases = {}
         self._drivers = []
@@ -184,8 +186,9 @@ class DtbPlatdata(object):
             compat_c_old = compat_c
             compat_c = self._driver_aliases.get(compat_c)
             if not compat_c:
-                print('WARNING: the driver %s was not found in the driver list'
-                      % (compat_c_old))
+                if not self._warning_disabled:
+                    print('WARNING: the driver %s was not found in the driver list'
+                          % (compat_c_old))
                 compat_c = compat_c_old
             else:
                 aliases_c = [compat_c_old] + aliases_c
@@ -634,7 +637,7 @@ class DtbPlatdata(object):
             nodes_to_output.remove(node)
 
 
-def run_steps(args, dtb_file, include_disabled, output):
+def run_steps(args, dtb_file, include_disabled, output, warning_disabled=False):
     """Run all the steps of the dtoc tool
 
     Args:
@@ -646,7 +649,7 @@ def run_steps(args, dtb_file, include_disabled, output):
     if not args:
         raise ValueError('Please specify a command: struct, platdata')
 
-    plat = DtbPlatdata(dtb_file, include_disabled)
+    plat = DtbPlatdata(dtb_file, include_disabled, warning_disabled)
     plat.scan_drivers()
     plat.scan_dtb()
     plat.scan_tree()
diff --git a/tools/dtoc/dtoc_test_invalid_driver.dts b/tools/dtoc/dtoc_test_invalid_driver.dts
new file mode 100644
index 0000000000..914ac3e899
--- /dev/null
+++ b/tools/dtoc/dtoc_test_invalid_driver.dts
@@ -0,0 +1,15 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Test device tree file for dtoc
+ *
+ * Copyright 2017 Google, Inc
+ */
+
+/dts-v1/;
+
+/ {
+	spl-test {
+		u-boot,dm-pre-reloc;
+		compatible = "invalid";
+	};
+};
diff --git a/tools/dtoc/test_dtoc.py b/tools/dtoc/test_dtoc.py
index 91fc9d77f3..ae3ec509c1 100755
--- a/tools/dtoc/test_dtoc.py
+++ b/tools/dtoc/test_dtoc.py
@@ -12,6 +12,7 @@ tool.
 import collections
 import os
 import struct
+import sys
 import unittest
 
 from dtoc import dtb_platdata
@@ -101,6 +102,10 @@ class TestDtoc(unittest.TestCase):
             print('Failures written to /tmp/binman.{expected,actual}')
         self.assertEquals(expected, actual)
 
+
+    def run_test(self, args, dtb_file, output):
+        dtb_platdata.run_steps(args, dtb_file, False, output, True)
+
     def test_name(self):
         """Test conversion of device tree names to C identifiers"""
         self.assertEqual('serial_at_0x12', conv_name_to_c('serial at 0x12'))
@@ -154,12 +159,12 @@ class TestDtoc(unittest.TestCase):
         """Test output from a device tree file with no nodes"""
         dtb_file = get_dtb_file('dtoc_test_empty.dts')
         output = tools.GetOutputFilename('output')
-        dtb_platdata.run_steps(['struct'], dtb_file, False, output)
+        self.run_test(['struct'], dtb_file, output)
         with open(output) as infile:
             lines = infile.read().splitlines()
         self.assertEqual(HEADER.splitlines(), lines)
 
-        dtb_platdata.run_steps(['platdata'], dtb_file, False, output)
+        self.run_test(['platdata'], dtb_file, output)
         with open(output) as infile:
             lines = infile.read().splitlines()
         self.assertEqual(C_HEADER.splitlines() + [''], lines)
@@ -168,7 +173,7 @@ class TestDtoc(unittest.TestCase):
         """Test output from some simple nodes with various types of data"""
         dtb_file = get_dtb_file('dtoc_test_simple.dts')
         output = tools.GetOutputFilename('output')
-        dtb_platdata.run_steps(['struct'], dtb_file, False, output)
+        self.run_test(['struct'], dtb_file, output)
         with open(output) as infile:
             data = infile.read()
         self._CheckStrings(HEADER + '''
@@ -193,7 +198,7 @@ struct dtd_sandbox_spl_test_2 {
 };
 ''', data)
 
-        dtb_platdata.run_steps(['platdata'], dtb_file, False, output)
+        self.run_test(['platdata'], dtb_file, output)
         with open(output) as infile:
             data = infile.read()
         self._CheckStrings(C_HEADER + '''
@@ -272,7 +277,7 @@ U_BOOT_DEVICE(pmic_at_9) = {
         """Test output from a device tree file with a driver alias"""
         dtb_file = get_dtb_file('dtoc_test_driver_alias.dts')
         output = tools.GetOutputFilename('output')
-        dtb_platdata.run_steps(['struct'], dtb_file, False, output)
+        self.run_test(['struct'], dtb_file, output)
         with open(output) as infile:
             data = infile.read()
         self._CheckStrings(HEADER + '''
@@ -284,7 +289,7 @@ struct dtd_sandbox_gpio {
 #define dtd_sandbox_gpio_alias dtd_sandbox_gpio
 ''', data)
 
-        dtb_platdata.run_steps(['platdata'], dtb_file, False, output)
+        self.run_test(['platdata'], dtb_file, output)
         with open(output) as infile:
             data = infile.read()
         self._CheckStrings(C_HEADER + '''
@@ -299,13 +304,41 @@ U_BOOT_DEVICE(gpios_at_0) = {
 \t.platdata_size\t= sizeof(dtv_gpios_at_0),
 };
 
+''', data)
+
+    def test_invalid_driver(self):
+        """Test output from a device tree file with an invalid driver"""
+        dtb_file = get_dtb_file('dtoc_test_invalid_driver.dts')
+        output = tools.GetOutputFilename('output')
+        with test_util.capture_sys_output() as (stdout, stderr):
+            dtb_platdata.run_steps(['struct'], dtb_file, False, output)
+        with open(output) as infile:
+            data = infile.read()
+        self._CheckStrings(HEADER + '''
+struct dtd_invalid {
+};
+''', data)
+
+        with test_util.capture_sys_output() as (stdout, stderr):
+            dtb_platdata.run_steps(['platdata'], dtb_file, False, output)
+        with open(output) as infile:
+            data = infile.read()
+        self._CheckStrings(C_HEADER + '''
+static const struct dtd_invalid dtv_spl_test = {
+};
+U_BOOT_DEVICE(spl_test) = {
+\t.name\t\t= "invalid",
+\t.platdata\t= &dtv_spl_test,
+\t.platdata_size\t= sizeof(dtv_spl_test),
+};
+
 ''', data)
 
     def test_phandle(self):
         """Test output from a node containing a phandle reference"""
         dtb_file = get_dtb_file('dtoc_test_phandle.dts')
         output = tools.GetOutputFilename('output')
-        dtb_platdata.run_steps(['struct'], dtb_file, False, output)
+        self.run_test(['struct'], dtb_file, output)
         with open(output) as infile:
             data = infile.read()
         self._CheckStrings(HEADER + '''
@@ -317,7 +350,7 @@ struct dtd_target {
 };
 ''', data)
 
-        dtb_platdata.run_steps(['platdata'], dtb_file, False, output)
+        self.run_test(['platdata'], dtb_file, output)
         with open(output) as infile:
             data = infile.read()
         self._CheckStrings(C_HEADER + '''
@@ -377,7 +410,7 @@ U_BOOT_DEVICE(phandle_source2) = {
         """Test output from a node containing a phandle reference"""
         dtb_file = get_dtb_file('dtoc_test_phandle_single.dts')
         output = tools.GetOutputFilename('output')
-        dtb_platdata.run_steps(['struct'], dtb_file, False, output)
+        self.run_test(['struct'], dtb_file, output)
         with open(output) as infile:
             data = infile.read()
         self._CheckStrings(HEADER + '''
@@ -393,7 +426,7 @@ struct dtd_target {
         """Test that phandle targets are generated before their references"""
         dtb_file = get_dtb_file('dtoc_test_phandle_reorder.dts')
         output = tools.GetOutputFilename('output')
-        dtb_platdata.run_steps(['platdata'], dtb_file, False, output)
+        self.run_test(['platdata'], dtb_file, output)
         with open(output) as infile:
             data = infile.read()
         self._CheckStrings(C_HEADER + '''
@@ -423,7 +456,7 @@ U_BOOT_DEVICE(phandle_source2) = {
                                 capture_stderr=True)
         output = tools.GetOutputFilename('output')
         with self.assertRaises(ValueError) as e:
-            dtb_platdata.run_steps(['struct'], dtb_file, False, output)
+            self.run_test(['struct'], dtb_file, output)
         self.assertIn("Cannot parse 'clocks' in node 'phandle-source'",
                       str(e.exception))
 
@@ -433,7 +466,7 @@ U_BOOT_DEVICE(phandle_source2) = {
                                 capture_stderr=True)
         output = tools.GetOutputFilename('output')
         with self.assertRaises(ValueError) as e:
-            dtb_platdata.run_steps(['struct'], dtb_file, False, output)
+            self.run_test(['struct'], dtb_file, output)
         self.assertIn("Node 'phandle-target' has no '#clock-cells' property",
                       str(e.exception))
 
@@ -441,7 +474,7 @@ U_BOOT_DEVICE(phandle_source2) = {
         """Test output from a node with multiple compatible strings"""
         dtb_file = get_dtb_file('dtoc_test_aliases.dts')
         output = tools.GetOutputFilename('output')
-        dtb_platdata.run_steps(['struct'], dtb_file, False, output)
+        self.run_test(['struct'], dtb_file, output)
         with open(output) as infile:
             data = infile.read()
         self._CheckStrings(HEADER + '''
@@ -452,7 +485,7 @@ struct dtd_compat1 {
 #define dtd_compat3 dtd_compat1
 ''', data)
 
-        dtb_platdata.run_steps(['platdata'], dtb_file, False, output)
+        self.run_test(['platdata'], dtb_file, output)
         with open(output) as infile:
             data = infile.read()
         self._CheckStrings(C_HEADER + '''
@@ -471,7 +504,7 @@ U_BOOT_DEVICE(spl_test) = {
         """Test output from a node with a 'reg' property with na=2, ns=2"""
         dtb_file = get_dtb_file('dtoc_test_addr64.dts')
         output = tools.GetOutputFilename('output')
-        dtb_platdata.run_steps(['struct'], dtb_file, False, output)
+        self.run_test(['struct'], dtb_file, output)
         with open(output) as infile:
             data = infile.read()
         self._CheckStrings(HEADER + '''
@@ -486,7 +519,7 @@ struct dtd_test3 {
 };
 ''', data)
 
-        dtb_platdata.run_steps(['platdata'], dtb_file, False, output)
+        self.run_test(['platdata'], dtb_file, output)
         with open(output) as infile:
             data = infile.read()
         self._CheckStrings(C_HEADER + '''
@@ -523,7 +556,7 @@ U_BOOT_DEVICE(test3) = {
         """Test output from a node with a 'reg' property with na=1, ns=1"""
         dtb_file = get_dtb_file('dtoc_test_addr32.dts')
         output = tools.GetOutputFilename('output')
-        dtb_platdata.run_steps(['struct'], dtb_file, False, output)
+        self.run_test(['struct'], dtb_file, output)
         with open(output) as infile:
             data = infile.read()
         self._CheckStrings(HEADER + '''
@@ -535,7 +568,7 @@ struct dtd_test2 {
 };
 ''', data)
 
-        dtb_platdata.run_steps(['platdata'], dtb_file, False, output)
+        self.run_test(['platdata'], dtb_file, output)
         with open(output) as infile:
             data = infile.read()
         self._CheckStrings(C_HEADER + '''
@@ -563,7 +596,7 @@ U_BOOT_DEVICE(test2) = {
         """Test output from a node with a 'reg' property with na=2, ns=1"""
         dtb_file = get_dtb_file('dtoc_test_addr64_32.dts')
         output = tools.GetOutputFilename('output')
-        dtb_platdata.run_steps(['struct'], dtb_file, False, output)
+        self.run_test(['struct'], dtb_file, output)
         with open(output) as infile:
             data = infile.read()
         self._CheckStrings(HEADER + '''
@@ -578,7 +611,7 @@ struct dtd_test3 {
 };
 ''', data)
 
-        dtb_platdata.run_steps(['platdata'], dtb_file, False, output)
+        self.run_test(['platdata'], dtb_file, output)
         with open(output) as infile:
             data = infile.read()
         self._CheckStrings(C_HEADER + '''
@@ -615,7 +648,7 @@ U_BOOT_DEVICE(test3) = {
         """Test output from a node with a 'reg' property with na=1, ns=2"""
         dtb_file = get_dtb_file('dtoc_test_addr32_64.dts')
         output = tools.GetOutputFilename('output')
-        dtb_platdata.run_steps(['struct'], dtb_file, False, output)
+        self.run_test(['struct'], dtb_file, output)
         with open(output) as infile:
             data = infile.read()
         self._CheckStrings(HEADER + '''
@@ -630,7 +663,7 @@ struct dtd_test3 {
 };
 ''', data)
 
-        dtb_platdata.run_steps(['platdata'], dtb_file, False, output)
+        self.run_test(['platdata'], dtb_file, output)
         with open(output) as infile:
             data = infile.read()
         self._CheckStrings(C_HEADER + '''
@@ -669,7 +702,7 @@ U_BOOT_DEVICE(test3) = {
         dtb_file = get_dtb_file('dtoc_test_bad_reg.dts', capture_stderr=True)
         output = tools.GetOutputFilename('output')
         with self.assertRaises(ValueError) as e:
-            dtb_platdata.run_steps(['struct'], dtb_file, False, output)
+            self.run_test(['struct'], dtb_file, output)
         self.assertIn("Node 'spl-test' reg property is not an int",
                       str(e.exception))
 
@@ -679,7 +712,7 @@ U_BOOT_DEVICE(test3) = {
         dtb_file = get_dtb_file('dtoc_test_bad_reg2.dts', capture_stderr=True)
         output = tools.GetOutputFilename('output')
         with self.assertRaises(ValueError) as e:
-            dtb_platdata.run_steps(['struct'], dtb_file, False, output)
+            self.run_test(['struct'], dtb_file, output)
         self.assertIn("Node 'spl-test' reg property has 3 cells which is not a multiple of na + ns = 1 + 1)",
                       str(e.exception))
 
@@ -687,7 +720,7 @@ U_BOOT_DEVICE(test3) = {
         """Test that a subequent node can add a new property to a struct"""
         dtb_file = get_dtb_file('dtoc_test_add_prop.dts')
         output = tools.GetOutputFilename('output')
-        dtb_platdata.run_steps(['struct'], dtb_file, False, output)
+        self.run_test(['struct'], dtb_file, output)
         with open(output) as infile:
             data = infile.read()
         self._CheckStrings(HEADER + '''
@@ -697,7 +730,7 @@ struct dtd_sandbox_spl_test {
 };
 ''', data)
 
-        dtb_platdata.run_steps(['platdata'], dtb_file, False, output)
+        self.run_test(['platdata'], dtb_file, output)
         with open(output) as infile:
             data = infile.read()
         self._CheckStrings(C_HEADER + '''
@@ -725,12 +758,12 @@ U_BOOT_DEVICE(spl_test2) = {
         """Test output to stdout"""
         dtb_file = get_dtb_file('dtoc_test_simple.dts')
         with test_util.capture_sys_output() as (stdout, stderr):
-            dtb_platdata.run_steps(['struct'], dtb_file, False, '-')
+            self.run_test(['struct'], dtb_file, '-')
 
     def testNoCommand(self):
         """Test running dtoc without a command"""
         with self.assertRaises(ValueError) as e:
-            dtb_platdata.run_steps([], '', False, '')
+            self.run_test([], '', '')
         self.assertIn("Please specify a command: struct, platdata",
                       str(e.exception))
 
@@ -739,6 +772,6 @@ U_BOOT_DEVICE(spl_test2) = {
         dtb_file = get_dtb_file('dtoc_test_simple.dts')
         output = tools.GetOutputFilename('output')
         with self.assertRaises(ValueError) as e:
-            dtb_platdata.run_steps(['invalid-cmd'], dtb_file, False, output)
+            self.run_test(['invalid-cmd'], dtb_file, output)
         self.assertIn("Unknown command 'invalid-cmd': (use: struct, platdata)",
                       str(e.exception))
-- 
2.20.1

^ permalink raw reply related	[flat|nested] 46+ messages in thread

* [PATCH v4 06/14] dm: doc: update of-plat with the support for driver aliases
  2020-06-25  4:10 [PATCH v4 00/14] improve OF_PLATDATA support Walter Lozano
                   ` (4 preceding siblings ...)
  2020-06-25  4:10 ` [PATCH v4 05/14] dtoc: add option to disable warnings Walter Lozano
@ 2020-06-25  4:10 ` Walter Lozano
  2020-06-26  1:43   ` Simon Glass
  2020-07-06  1:31   ` Simon Glass
  2020-06-25  4:10 ` [PATCH v4 07/14] core: drop const for struct driver_info Walter Lozano
                   ` (7 subsequent siblings)
  13 siblings, 2 replies; 46+ messages in thread
From: Walter Lozano @ 2020-06-25  4:10 UTC (permalink / raw)
  To: u-boot

Update the documentation with the support for driver aliases using
U_BOOT_DRIVER_ALIAS.

Signed-off-by: Walter Lozano <walter.lozano@collabora.com>
---

 doc/driver-model/of-plat.rst | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/doc/driver-model/of-plat.rst b/doc/driver-model/of-plat.rst
index 034a68bb4e..376d4409a5 100644
--- a/doc/driver-model/of-plat.rst
+++ b/doc/driver-model/of-plat.rst
@@ -183,6 +183,17 @@ via U_BOOT_DRIVER(). This effectively means that a U_BOOT_DRIVER() with a
 it to a valid name for C) is needed, so a dedicated driver is required for
 each 'compatible' string.
 
+In order to make this a bit more flexible U_BOOT_DRIVER_ALIAS macro can be
+used to declare an alias for a driver name, typically a 'compatible' string.
+This macro produces no code, but it is by dtoc tool.
+
+During the build process dtoc parses both U_BOOT_DRIVER and U_BOOT_DRIVER_ALIAS
+to build a list of valid driver names and driver aliases. If the 'compatible'
+string used for a device does not not match a valid driver name, it will be
+checked against the list of driver aliases in order to get the right driver
+name to use. If in this step there is no match found a warning is issued to
+avoid run-time failures.
+
 Where a node has multiple compatible strings, a #define is used to make them
 equivalent, e.g.:
 
@@ -269,7 +280,7 @@ For example:
     };
 
     U_BOOT_DRIVER(mmc_drv) = {
-            .name           = "vendor_mmc",  /* matches compatible string */
+            .name           = "mmc_drv",
             .id             = UCLASS_MMC,
             .of_match       = mmc_ids,
             .ofdata_to_platdata = mmc_ofdata_to_platdata,
@@ -278,6 +289,7 @@ For example:
             .platdata_auto_alloc_size = sizeof(struct mmc_platdata),
     };
 
+    U_BOOT_DRIVER_ALIAS(mmc_drv, vendor_mmc) /* matches compatible string */
 
 Note that struct mmc_platdata is defined in the C file, not in a header. This
 is to avoid needing to include dt-structs.h in a header file. The idea is to
-- 
2.20.1

^ permalink raw reply related	[flat|nested] 46+ messages in thread

* [PATCH v4 07/14] core: drop const for struct driver_info
  2020-06-25  4:10 [PATCH v4 00/14] improve OF_PLATDATA support Walter Lozano
                   ` (5 preceding siblings ...)
  2020-06-25  4:10 ` [PATCH v4 06/14] dm: doc: update of-plat with the support for driver aliases Walter Lozano
@ 2020-06-25  4:10 ` Walter Lozano
  2020-06-26  1:43   ` Simon Glass
  2020-07-06  1:31   ` Simon Glass
  2020-06-25  4:10 ` [PATCH v4 08/14] core: extend struct driver_info to point to device Walter Lozano
                   ` (6 subsequent siblings)
  13 siblings, 2 replies; 46+ messages in thread
From: Walter Lozano @ 2020-06-25  4:10 UTC (permalink / raw)
  To: u-boot

In order to prepare for a new support of phandle when OF_PLATDATA is used
drop the const for struct driver_info as this struct will need to be
updated on runtime.

Signed-off-by: Walter Lozano <walter.lozano@collabora.com>
---

 drivers/core/device.c        | 2 +-
 drivers/core/root.c          | 2 +-
 include/dm/device-internal.h | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/core/device.c b/drivers/core/device.c
index 0157bb1fe0..a0ad080aaf 100644
--- a/drivers/core/device.c
+++ b/drivers/core/device.c
@@ -246,7 +246,7 @@ int device_bind_ofnode(struct udevice *parent, const struct driver *drv,
 }
 
 int device_bind_by_name(struct udevice *parent, bool pre_reloc_only,
-			const struct driver_info *info, struct udevice **devp)
+			struct driver_info *info, struct udevice **devp)
 {
 	struct driver *drv;
 	uint platdata_size = 0;
diff --git a/drivers/core/root.c b/drivers/core/root.c
index 14df16c280..c9ee56478a 100644
--- a/drivers/core/root.c
+++ b/drivers/core/root.c
@@ -25,7 +25,7 @@
 
 DECLARE_GLOBAL_DATA_PTR;
 
-static const struct driver_info root_info = {
+static struct driver_info root_info = {
 	.name		= "root_driver",
 };
 
diff --git a/include/dm/device-internal.h b/include/dm/device-internal.h
index 294d6c1810..5145fb4e14 100644
--- a/include/dm/device-internal.h
+++ b/include/dm/device-internal.h
@@ -81,7 +81,7 @@ int device_bind_with_driver_data(struct udevice *parent,
  * @return 0 if OK, -ve on error
  */
 int device_bind_by_name(struct udevice *parent, bool pre_reloc_only,
-			const struct driver_info *info, struct udevice **devp);
+			struct driver_info *info, struct udevice **devp);
 
 /**
  * device_ofdata_to_platdata() - Read platform data for a device
-- 
2.20.1

^ permalink raw reply related	[flat|nested] 46+ messages in thread

* [PATCH v4 08/14] core: extend struct driver_info to point to device
  2020-06-25  4:10 [PATCH v4 00/14] improve OF_PLATDATA support Walter Lozano
                   ` (6 preceding siblings ...)
  2020-06-25  4:10 ` [PATCH v4 07/14] core: drop const for struct driver_info Walter Lozano
@ 2020-06-25  4:10 ` Walter Lozano
  2020-06-26  1:43   ` Simon Glass
  2020-07-06  1:31   ` Simon Glass
  2020-06-25  4:10 ` [PATCH v4 09/14] sandbox: Move section u_boot_list to make it RW Walter Lozano
                   ` (5 subsequent siblings)
  13 siblings, 2 replies; 46+ messages in thread
From: Walter Lozano @ 2020-06-25  4:10 UTC (permalink / raw)
  To: u-boot

Currently when creating an U_BOOT_DEVICE entry a struct driver_info
is declared, which contains the data needed to instantiate the device.
However, the actual device is created at runtime and there is no proper
way to get the device based on its struct driver_info.

This patch extends struct driver_info adding a pointer to udevice which
is populated during the bind process, allowing to generate a set of
functions to get the device based on its struct driver_info.

Signed-off-by: Walter Lozano <walter.lozano@collabora.com>
---

 drivers/core/device.c | 26 +++++++++++++++++++++++---
 drivers/core/root.c   |  4 ++++
 include/dm/device.h   | 15 +++++++++++++++
 include/dm/platdata.h | 14 ++++++++++++++
 4 files changed, 56 insertions(+), 3 deletions(-)

diff --git a/drivers/core/device.c b/drivers/core/device.c
index a0ad080aaf..4f8c97a195 100644
--- a/drivers/core/device.c
+++ b/drivers/core/device.c
@@ -250,6 +250,7 @@ int device_bind_by_name(struct udevice *parent, bool pre_reloc_only,
 {
 	struct driver *drv;
 	uint platdata_size = 0;
+	int ret;
 
 	drv = lists_driver_lookup_name(info->name);
 	if (!drv)
@@ -260,9 +261,16 @@ int device_bind_by_name(struct udevice *parent, bool pre_reloc_only,
 #if CONFIG_IS_ENABLED(OF_PLATDATA)
 	platdata_size = info->platdata_size;
 #endif
-	return device_bind_common(parent, drv, info->name,
-			(void *)info->platdata, 0, ofnode_null(), platdata_size,
-			devp);
+	ret = device_bind_common(parent, drv, info->name,
+				 (void *)info->platdata, 0, ofnode_null(),
+				 platdata_size, devp);
+	if (ret)
+		return ret;
+#if CONFIG_IS_ENABLED(OF_PLATDATA)
+	info->dev = *devp;
+#endif
+
+	return ret;
 }
 
 static void *alloc_priv(int size, uint flags)
@@ -727,6 +735,18 @@ int device_get_global_by_ofnode(ofnode ofnode, struct udevice **devp)
 	return device_get_device_tail(dev, dev ? 0 : -ENOENT, devp);
 }
 
+#if CONFIG_IS_ENABLED(OF_PLATDATA)
+int device_get_by_driver_info(const struct driver_info *info,
+			      struct udevice **devp)
+{
+	struct udevice *dev;
+
+	dev = info->dev;
+
+	return device_get_device_tail(dev, dev ? 0 : -ENOENT, devp);
+}
+#endif
+
 int device_find_first_child(const struct udevice *parent, struct udevice **devp)
 {
 	if (list_empty(&parent->child_head)) {
diff --git a/drivers/core/root.c b/drivers/core/root.c
index c9ee56478a..2643ef68a7 100644
--- a/drivers/core/root.c
+++ b/drivers/core/root.c
@@ -346,6 +346,10 @@ int dm_init_and_scan(bool pre_reloc_only)
 {
 	int ret;
 
+#if CONFIG_IS_ENABLED(OF_PLATDATA)
+	dm_populate_phandle_data();
+#endif
+
 	ret = dm_init(IS_ENABLED(CONFIG_OF_LIVE));
 	if (ret) {
 		debug("dm_init() failed: %d\n", ret);
diff --git a/include/dm/device.h b/include/dm/device.h
index 2cfe10766f..f5738a0cee 100644
--- a/include/dm/device.h
+++ b/include/dm/device.h
@@ -538,6 +538,21 @@ int device_find_global_by_ofnode(ofnode node, struct udevice **devp);
  */
 int device_get_global_by_ofnode(ofnode node, struct udevice **devp);
 
+/**
+ * device_get_by_driver_info() - Get a device based on driver_info
+ *
+ * Locates a device by its struct driver_info, by using its reference which
+ * is updated during the bind process.
+ *
+ * The device is probed to activate it ready for use.
+ *
+ * @info: Struct driver_info
+ * @devp: Returns pointer to device if found, otherwise this is set to NULL
+ * @return 0 if OK, -ve on error
+ */
+int device_get_by_driver_info(const struct driver_info *info,
+			      struct udevice **devp);
+
 /**
  * device_find_first_child() - Find the first child of a device
  *
diff --git a/include/dm/platdata.h b/include/dm/platdata.h
index c972fa6936..cab93b071b 100644
--- a/include/dm/platdata.h
+++ b/include/dm/platdata.h
@@ -22,12 +22,14 @@
  * @name:	Driver name
  * @platdata:	Driver-specific platform data
  * @platdata_size: Size of platform data structure
+ * @dev:	Device created from this structure data
  */
 struct driver_info {
 	const char *name;
 	const void *platdata;
 #if CONFIG_IS_ENABLED(OF_PLATDATA)
 	uint platdata_size;
+	struct udevice *dev;
 #endif
 };
 
@@ -43,4 +45,16 @@ struct driver_info {
 #define U_BOOT_DEVICES(__name)						\
 	ll_entry_declare_list(struct driver_info, __name, driver_info)
 
+/* Get a pointer to a given driver */
+#define DM_GET_DEVICE(__name)						\
+	ll_entry_get(struct driver_info, __name, driver_info)
+
+/**
+ * dm_populate_phandle_data() - Populates phandle data in platda
+ *
+ * This populates phandle data with an U_BOOT_DEVICE entry get by
+ * DM_GET_DEVICE. The implementation of this function will be done
+ * by dtoc when parsing dtb.
+ */
+void dm_populate_phandle_data(void);
 #endif
-- 
2.20.1

^ permalink raw reply related	[flat|nested] 46+ messages in thread

* [PATCH v4 09/14] sandbox: Move section u_boot_list to make it RW
  2020-06-25  4:10 [PATCH v4 00/14] improve OF_PLATDATA support Walter Lozano
                   ` (7 preceding siblings ...)
  2020-06-25  4:10 ` [PATCH v4 08/14] core: extend struct driver_info to point to device Walter Lozano
@ 2020-06-25  4:10 ` Walter Lozano
  2020-06-26  1:43   ` Simon Glass
  2020-07-06  1:31   ` Simon Glass
  2020-06-25  4:10 ` [PATCH v4 10/14] dtoc: extend dtoc to use struct driver_info when linking nodes Walter Lozano
                   ` (4 subsequent siblings)
  13 siblings, 2 replies; 46+ messages in thread
From: Walter Lozano @ 2020-06-25  4:10 UTC (permalink / raw)
  To: u-boot

In order to be able to update data in u_boot_list, move this section to
make it RW.

Signed-off-by: Walter Lozano <walter.lozano@collabora.com>
---

 arch/sandbox/cpu/u-boot-spl.lds | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/sandbox/cpu/u-boot-spl.lds b/arch/sandbox/cpu/u-boot-spl.lds
index de65b01b33..c60eb109b1 100644
--- a/arch/sandbox/cpu/u-boot-spl.lds
+++ b/arch/sandbox/cpu/u-boot-spl.lds
@@ -20,4 +20,4 @@ SECTIONS
 	__bss_start = .;
 }
 
-INSERT BEFORE .data;
+INSERT AFTER .data;
-- 
2.20.1

^ permalink raw reply related	[flat|nested] 46+ messages in thread

* [PATCH v4 10/14] dtoc: extend dtoc to use struct driver_info when linking nodes
  2020-06-25  4:10 [PATCH v4 00/14] improve OF_PLATDATA support Walter Lozano
                   ` (8 preceding siblings ...)
  2020-06-25  4:10 ` [PATCH v4 09/14] sandbox: Move section u_boot_list to make it RW Walter Lozano
@ 2020-06-25  4:10 ` Walter Lozano
  2020-06-26  1:43   ` Simon Glass
  2020-06-25  4:10 ` [PATCH v4 11/14] dm: doc: update of-plat with new phandle support Walter Lozano
                   ` (3 subsequent siblings)
  13 siblings, 1 reply; 46+ messages in thread
From: Walter Lozano @ 2020-06-25  4:10 UTC (permalink / raw)
  To: u-boot

In the current implementation, when dtoc parses a dtb to generate a struct
platdata it converts the information related to linked nodes as pointers
to struct platdata of destination nodes. By doing this, it makes
difficult to get pointer to udevices created based on these
information.

This patch extends dtoc to use struct driver_info when populating
information about linked nodes, which makes it easier to later get
the devices created. In this context, reimplement functions like
clk_get_by_index_platdata() which made use of the previous approach.

Signed-off-by: Walter Lozano <walter.lozano@collabora.com>
---

 drivers/clk/clk-uclass.c            |  11 ++-
 drivers/misc/irq-uclass.c           |  10 ++-
 drivers/mmc/ftsdc010_mci.c          |   2 +-
 drivers/mmc/rockchip_dw_mmc.c       |   2 +-
 drivers/mmc/rockchip_sdhci.c        |   2 +-
 drivers/ram/rockchip/sdram_rk3399.c |   2 +-
 drivers/spi/rk_spi.c                |   2 +-
 include/clk.h                       |   4 +-
 tools/dtoc/dtb_platdata.py          |  26 ++++++-
 tools/dtoc/test_dtoc.py             | 104 ++++++++++++++++------------
 10 files changed, 100 insertions(+), 65 deletions(-)

diff --git a/drivers/clk/clk-uclass.c b/drivers/clk/clk-uclass.c
index 71878474eb..412f26cd29 100644
--- a/drivers/clk/clk-uclass.c
+++ b/drivers/clk/clk-uclass.c
@@ -25,17 +25,16 @@ static inline const struct clk_ops *clk_dev_ops(struct udevice *dev)
 
 #if CONFIG_IS_ENABLED(OF_CONTROL)
 # if CONFIG_IS_ENABLED(OF_PLATDATA)
-int clk_get_by_index_platdata(struct udevice *dev, int index,
-			      struct phandle_1_arg *cells, struct clk *clk)
+int clk_get_by_driver_info(struct udevice *dev, struct phandle_1_arg *cells,
+			   struct clk *clk)
 {
 	int ret;
 
-	if (index != 0)
-		return -ENOSYS;
-	ret = uclass_get_device(UCLASS_CLK, 0, &clk->dev);
+	ret = device_get_by_driver_info((struct driver_info *)cells->node,
+					&clk->dev);
 	if (ret)
 		return ret;
-	clk->id = cells[0].arg[0];
+	clk->id = cells->arg[0];
 
 	return 0;
 }
diff --git a/drivers/misc/irq-uclass.c b/drivers/misc/irq-uclass.c
index 61aa10e465..3c38681108 100644
--- a/drivers/misc/irq-uclass.c
+++ b/drivers/misc/irq-uclass.c
@@ -63,17 +63,15 @@ int irq_read_and_clear(struct irq *irq)
 }
 
 #if CONFIG_IS_ENABLED(OF_PLATDATA)
-int irq_get_by_index_platdata(struct udevice *dev, int index,
-			      struct phandle_1_arg *cells, struct irq *irq)
+int irq_get_by_driver_info(struct udevice *dev,
+			   struct phandle_1_arg *cells, struct irq *irq)
 {
 	int ret;
 
-	if (index != 0)
-		return -ENOSYS;
-	ret = uclass_get_device(UCLASS_IRQ, 0, &irq->dev);
+	ret = device_get_by_driver_info(cells->node, &irq->dev);
 	if (ret)
 		return ret;
-	irq->id = cells[0].arg[0];
+	irq->id = cells->arg[0];
 
 	return 0;
 }
diff --git a/drivers/mmc/ftsdc010_mci.c b/drivers/mmc/ftsdc010_mci.c
index 9c15eb36d6..efa92d48be 100644
--- a/drivers/mmc/ftsdc010_mci.c
+++ b/drivers/mmc/ftsdc010_mci.c
@@ -437,7 +437,7 @@ static int ftsdc010_mmc_probe(struct udevice *dev)
 	chip->priv = dev;
 	chip->dev_index = 1;
 	memcpy(priv->minmax, dtplat->clock_freq_min_max, sizeof(priv->minmax));
-	ret = clk_get_by_index_platdata(dev, 0, dtplat->clocks, &priv->clk);
+	ret = clk_get_by_driver_info(dev, dtplat->clocks, &priv->clk);
 	if (ret < 0)
 		return ret;
 #endif
diff --git a/drivers/mmc/rockchip_dw_mmc.c b/drivers/mmc/rockchip_dw_mmc.c
index ac710324c8..80432ddbbc 100644
--- a/drivers/mmc/rockchip_dw_mmc.c
+++ b/drivers/mmc/rockchip_dw_mmc.c
@@ -120,7 +120,7 @@ static int rockchip_dwmmc_probe(struct udevice *dev)
 	priv->minmax[0] = 400000;  /*  400 kHz */
 	priv->minmax[1] = dtplat->max_frequency;
 
-	ret = clk_get_by_index_platdata(dev, 0, dtplat->clocks, &priv->clk);
+	ret = clk_get_by_driver_info(dev, dtplat->clocks, &priv->clk);
 	if (ret < 0)
 		return ret;
 #else
diff --git a/drivers/mmc/rockchip_sdhci.c b/drivers/mmc/rockchip_sdhci.c
index b440996b26..b073f1a08d 100644
--- a/drivers/mmc/rockchip_sdhci.c
+++ b/drivers/mmc/rockchip_sdhci.c
@@ -46,7 +46,7 @@ static int arasan_sdhci_probe(struct udevice *dev)
 	host->name = dev->name;
 	host->ioaddr = map_sysmem(dtplat->reg[0], dtplat->reg[1]);
 	max_frequency = dtplat->max_frequency;
-	ret = clk_get_by_index_platdata(dev, 0, dtplat->clocks, &clk);
+	ret = clk_get_by_driver_info(dev, dtplat->clocks, &clk);
 #else
 	max_frequency = dev_read_u32_default(dev, "max-frequency", 0);
 	ret = clk_get_by_index(dev, 0, &clk);
diff --git a/drivers/ram/rockchip/sdram_rk3399.c b/drivers/ram/rockchip/sdram_rk3399.c
index d69ef01d08..87ec25f893 100644
--- a/drivers/ram/rockchip/sdram_rk3399.c
+++ b/drivers/ram/rockchip/sdram_rk3399.c
@@ -3125,7 +3125,7 @@ static int rk3399_dmc_init(struct udevice *dev)
 	      priv->cic, priv->pmugrf, priv->pmusgrf, priv->pmucru, priv->pmu);
 
 #if CONFIG_IS_ENABLED(OF_PLATDATA)
-	ret = clk_get_by_index_platdata(dev, 0, dtplat->clocks, &priv->ddr_clk);
+	ret = clk_get_by_driver_info(dev, dtplat->clocks, &priv->ddr_clk);
 #else
 	ret = clk_get_by_index(dev, 0, &priv->ddr_clk);
 #endif
diff --git a/drivers/spi/rk_spi.c b/drivers/spi/rk_spi.c
index 0ac7f767ca..3a85f6d98c 100644
--- a/drivers/spi/rk_spi.c
+++ b/drivers/spi/rk_spi.c
@@ -181,7 +181,7 @@ static int conv_of_platdata(struct udevice *dev)
 
 	plat->base = dtplat->reg[0];
 	plat->frequency = 20000000;
-	ret = clk_get_by_index_platdata(dev, 0, dtplat->clocks, &priv->clk);
+	ret = clk_get_by_driver_info(dev, dtplat->clocks, &priv->clk);
 	if (ret < 0)
 		return ret;
 	dev->req_seq = 0;
diff --git a/include/clk.h b/include/clk.h
index c6a2713f62..a62e2efa2c 100644
--- a/include/clk.h
+++ b/include/clk.h
@@ -89,8 +89,8 @@ struct clk_bulk {
 
 #if CONFIG_IS_ENABLED(OF_CONTROL) && CONFIG_IS_ENABLED(CLK)
 struct phandle_1_arg;
-int clk_get_by_index_platdata(struct udevice *dev, int index,
-			      struct phandle_1_arg *cells, struct clk *clk);
+int clk_get_by_driver_info(struct udevice *dev,
+			   struct phandle_1_arg *cells, struct clk *clk);
 
 /**
  * clk_get_by_index - Get/request a clock by integer index.
diff --git a/tools/dtoc/dtb_platdata.py b/tools/dtoc/dtb_platdata.py
index d0cd4bf9bd..f6579fd655 100644
--- a/tools/dtoc/dtb_platdata.py
+++ b/tools/dtoc/dtb_platdata.py
@@ -151,6 +151,7 @@ class DtbPlatdata(object):
             key: Driver alias declared with
                 U_BOOT_DRIVER_ALIAS(driver_alias, driver_name)
             value: Driver name declared with U_BOOT_DRIVER(driver_name)
+        _links: List of links to be included in dm_populate_phandle_data()
     """
     def __init__(self, dtb_fname, include_disabled, warning_disabled):
         self._fdt = None
@@ -163,6 +164,7 @@ class DtbPlatdata(object):
         self._aliases = {}
         self._drivers = []
         self._driver_aliases = {}
+        self._links = []
 
     def get_normalized_compat_name(self, node):
         """Get a node's normalized compat name
@@ -551,7 +553,7 @@ class DtbPlatdata(object):
         """
         struct_name, _ = self.get_normalized_compat_name(node)
         var_name = conv_name_to_c(node.name)
-        self.buf('static const struct %s%s %s%s = {\n' %
+        self.buf('static struct %s%s %s%s = {\n' %
                  (STRUCT_PREFIX, struct_name, VAL_PREFIX, var_name))
         for pname in sorted(node.props):
             prop = node.props[pname]
@@ -570,6 +572,7 @@ class DtbPlatdata(object):
                 if info:
                     # Process the list as pairs of (phandle, id)
                     pos = 0
+                    item = 0
                     for args in info.args:
                         phandle_cell = prop.value[pos]
                         phandle = fdt_util.fdt32_to_cpu(phandle_cell)
@@ -579,8 +582,16 @@ class DtbPlatdata(object):
                         for i in range(args):
                             arg_values.append(str(fdt_util.fdt32_to_cpu(prop.value[pos + 1 + i])))
                         pos += 1 + args
-                        vals.append('\t{&%s%s, {%s}}' % (VAL_PREFIX, name,
-                                                     ', '.join(arg_values)))
+                        # node member is filled with NULL as the real value
+                        # will be update at run-time during dm_init_and_scan()
+                        # by dm_populate_phandle_data()
+                        vals.append('\t{NULL, {%s}}' % (', '.join(arg_values)))
+                        var_node = '%s%s.%s[%d].node' % \
+                                    (VAL_PREFIX, var_name, member_name, item)
+                        # Save the the link information to be use to define
+                        # dm_populate_phandle_data()
+                        self._links.append({'var_node': var_node, 'dev_name': name})
+                        item += 1
                     for val in vals:
                         self.buf('\n\t\t%s,' % val)
                 else:
@@ -636,6 +647,15 @@ class DtbPlatdata(object):
             self.output_node(node)
             nodes_to_output.remove(node)
 
+        # Define dm_populate_phandle_data() which will add the linking between
+        # nodes using DM_GET_DEVICE
+        # dtv_dmc_at_xxx.clocks[0].node = DM_GET_DEVICE(clock_controller_at_xxx)
+        self.buf('void dm_populate_phandle_data(void) {\n')
+        for l in self._links:
+            self.buf('\t%s = DM_GET_DEVICE(%s);\n' % (l['var_node'], l['dev_name']))
+        self.buf('}\n')
+
+        self.out(''.join(self.get_buf()))
 
 def run_steps(args, dtb_file, include_disabled, output, warning_disabled=False):
     """Run all the steps of the dtoc tool
diff --git a/tools/dtoc/test_dtoc.py b/tools/dtoc/test_dtoc.py
index ae3ec509c1..209542c849 100755
--- a/tools/dtoc/test_dtoc.py
+++ b/tools/dtoc/test_dtoc.py
@@ -48,6 +48,9 @@ C_HEADER = '''/*
 #include <dt-structs.h>
 '''
 
+C_EMPTY_POPULATE_PHANDLE_DATA = '''void dm_populate_phandle_data(void) {
+}
+'''
 
 
 def get_dtb_file(dts_fname, capture_stderr=False):
@@ -167,7 +170,8 @@ class TestDtoc(unittest.TestCase):
         self.run_test(['platdata'], dtb_file, output)
         with open(output) as infile:
             lines = infile.read().splitlines()
-        self.assertEqual(C_HEADER.splitlines() + [''], lines)
+        self.assertEqual(C_HEADER.splitlines() + [''] +
+                         C_EMPTY_POPULATE_PHANDLE_DATA.splitlines(), lines)
 
     def test_simple(self):
         """Test output from some simple nodes with various types of data"""
@@ -202,7 +206,7 @@ struct dtd_sandbox_spl_test_2 {
         with open(output) as infile:
             data = infile.read()
         self._CheckStrings(C_HEADER + '''
-static const struct dtd_sandbox_spl_test dtv_spl_test = {
+static struct dtd_sandbox_spl_test dtv_spl_test = {
 \t.boolval\t\t= true,
 \t.bytearray\t\t= {0x6, 0x0, 0x0},
 \t.byteval\t\t= 0x5,
@@ -220,7 +224,7 @@ U_BOOT_DEVICE(spl_test) = {
 \t.platdata_size\t= sizeof(dtv_spl_test),
 };
 
-static const struct dtd_sandbox_spl_test dtv_spl_test2 = {
+static struct dtd_sandbox_spl_test dtv_spl_test2 = {
 \t.bytearray\t\t= {0x1, 0x23, 0x34},
 \t.byteval\t\t= 0x8,
 \t.intarray\t\t= {0x5, 0x0, 0x0, 0x0},
@@ -236,7 +240,7 @@ U_BOOT_DEVICE(spl_test2) = {
 \t.platdata_size\t= sizeof(dtv_spl_test2),
 };
 
-static const struct dtd_sandbox_spl_test dtv_spl_test3 = {
+static struct dtd_sandbox_spl_test dtv_spl_test3 = {
 \t.stringarray\t\t= {"one", "", ""},
 };
 U_BOOT_DEVICE(spl_test3) = {
@@ -245,7 +249,7 @@ U_BOOT_DEVICE(spl_test3) = {
 \t.platdata_size\t= sizeof(dtv_spl_test3),
 };
 
-static const struct dtd_sandbox_spl_test_2 dtv_spl_test4 = {
+static struct dtd_sandbox_spl_test_2 dtv_spl_test4 = {
 };
 U_BOOT_DEVICE(spl_test4) = {
 \t.name\t\t= "sandbox_spl_test_2",
@@ -253,7 +257,7 @@ U_BOOT_DEVICE(spl_test4) = {
 \t.platdata_size\t= sizeof(dtv_spl_test4),
 };
 
-static const struct dtd_sandbox_i2c_test dtv_i2c_at_0 = {
+static struct dtd_sandbox_i2c_test dtv_i2c_at_0 = {
 };
 U_BOOT_DEVICE(i2c_at_0) = {
 \t.name\t\t= "sandbox_i2c_test",
@@ -261,7 +265,7 @@ U_BOOT_DEVICE(i2c_at_0) = {
 \t.platdata_size\t= sizeof(dtv_i2c_at_0),
 };
 
-static const struct dtd_sandbox_pmic_test dtv_pmic_at_9 = {
+static struct dtd_sandbox_pmic_test dtv_pmic_at_9 = {
 \t.low_power\t\t= true,
 \t.reg\t\t\t= {0x9, 0x0},
 };
@@ -271,7 +275,7 @@ U_BOOT_DEVICE(pmic_at_9) = {
 \t.platdata_size\t= sizeof(dtv_pmic_at_9),
 };
 
-''', data)
+''' + C_EMPTY_POPULATE_PHANDLE_DATA, data)
 
     def test_driver_alias(self):
         """Test output from a device tree file with a driver alias"""
@@ -293,7 +297,7 @@ struct dtd_sandbox_gpio {
         with open(output) as infile:
             data = infile.read()
         self._CheckStrings(C_HEADER + '''
-static const struct dtd_sandbox_gpio dtv_gpios_at_0 = {
+static struct dtd_sandbox_gpio dtv_gpios_at_0 = {
 \t.gpio_bank_name\t\t= "a",
 \t.gpio_controller\t= true,
 \t.sandbox_gpio_count\t= 0x14,
@@ -304,6 +308,8 @@ U_BOOT_DEVICE(gpios_at_0) = {
 \t.platdata_size\t= sizeof(dtv_gpios_at_0),
 };
 
+void dm_populate_phandle_data(void) {
+}
 ''', data)
 
     def test_invalid_driver(self):
@@ -324,7 +330,7 @@ struct dtd_invalid {
         with open(output) as infile:
             data = infile.read()
         self._CheckStrings(C_HEADER + '''
-static const struct dtd_invalid dtv_spl_test = {
+static struct dtd_invalid dtv_spl_test = {
 };
 U_BOOT_DEVICE(spl_test) = {
 \t.name\t\t= "invalid",
@@ -332,6 +338,8 @@ U_BOOT_DEVICE(spl_test) = {
 \t.platdata_size\t= sizeof(dtv_spl_test),
 };
 
+void dm_populate_phandle_data(void) {
+}
 ''', data)
 
     def test_phandle(self):
@@ -354,7 +362,7 @@ struct dtd_target {
         with open(output) as infile:
             data = infile.read()
         self._CheckStrings(C_HEADER + '''
-static const struct dtd_target dtv_phandle_target = {
+static struct dtd_target dtv_phandle_target = {
 \t.intval\t\t\t= 0x0,
 };
 U_BOOT_DEVICE(phandle_target) = {
@@ -363,7 +371,7 @@ U_BOOT_DEVICE(phandle_target) = {
 \t.platdata_size\t= sizeof(dtv_phandle_target),
 };
 
-static const struct dtd_target dtv_phandle2_target = {
+static struct dtd_target dtv_phandle2_target = {
 \t.intval\t\t\t= 0x1,
 };
 U_BOOT_DEVICE(phandle2_target) = {
@@ -372,7 +380,7 @@ U_BOOT_DEVICE(phandle2_target) = {
 \t.platdata_size\t= sizeof(dtv_phandle2_target),
 };
 
-static const struct dtd_target dtv_phandle3_target = {
+static struct dtd_target dtv_phandle3_target = {
 \t.intval\t\t\t= 0x2,
 };
 U_BOOT_DEVICE(phandle3_target) = {
@@ -381,12 +389,12 @@ U_BOOT_DEVICE(phandle3_target) = {
 \t.platdata_size\t= sizeof(dtv_phandle3_target),
 };
 
-static const struct dtd_source dtv_phandle_source = {
+static struct dtd_source dtv_phandle_source = {
 \t.clocks\t\t\t= {
-\t\t\t{&dtv_phandle_target, {}},
-\t\t\t{&dtv_phandle2_target, {11}},
-\t\t\t{&dtv_phandle3_target, {12, 13}},
-\t\t\t{&dtv_phandle_target, {}},},
+\t\t\t{NULL, {}},
+\t\t\t{NULL, {11}},
+\t\t\t{NULL, {12, 13}},
+\t\t\t{NULL, {}},},
 };
 U_BOOT_DEVICE(phandle_source) = {
 \t.name\t\t= "source",
@@ -394,9 +402,9 @@ U_BOOT_DEVICE(phandle_source) = {
 \t.platdata_size\t= sizeof(dtv_phandle_source),
 };
 
-static const struct dtd_source dtv_phandle_source2 = {
+static struct dtd_source dtv_phandle_source2 = {
 \t.clocks\t\t\t= {
-\t\t\t{&dtv_phandle_target, {}},},
+\t\t\t{NULL, {}},},
 };
 U_BOOT_DEVICE(phandle_source2) = {
 \t.name\t\t= "source",
@@ -404,6 +412,13 @@ U_BOOT_DEVICE(phandle_source2) = {
 \t.platdata_size\t= sizeof(dtv_phandle_source2),
 };
 
+void dm_populate_phandle_data(void) {
+\tdtv_phandle_source.clocks[0].node = DM_GET_DEVICE(phandle_target);
+\tdtv_phandle_source.clocks[1].node = DM_GET_DEVICE(phandle2_target);
+\tdtv_phandle_source.clocks[2].node = DM_GET_DEVICE(phandle3_target);
+\tdtv_phandle_source.clocks[3].node = DM_GET_DEVICE(phandle_target);
+\tdtv_phandle_source2.clocks[0].node = DM_GET_DEVICE(phandle_target);
+}
 ''', data)
 
     def test_phandle_single(self):
@@ -430,7 +445,7 @@ struct dtd_target {
         with open(output) as infile:
             data = infile.read()
         self._CheckStrings(C_HEADER + '''
-static const struct dtd_target dtv_phandle_target = {
+static struct dtd_target dtv_phandle_target = {
 };
 U_BOOT_DEVICE(phandle_target) = {
 \t.name\t\t= "target",
@@ -438,9 +453,9 @@ U_BOOT_DEVICE(phandle_target) = {
 \t.platdata_size\t= sizeof(dtv_phandle_target),
 };
 
-static const struct dtd_source dtv_phandle_source2 = {
+static struct dtd_source dtv_phandle_source2 = {
 \t.clocks\t\t\t= {
-\t\t\t{&dtv_phandle_target, {}},},
+\t\t\t{NULL, {}},},
 };
 U_BOOT_DEVICE(phandle_source2) = {
 \t.name\t\t= "source",
@@ -448,6 +463,9 @@ U_BOOT_DEVICE(phandle_source2) = {
 \t.platdata_size\t= sizeof(dtv_phandle_source2),
 };
 
+void dm_populate_phandle_data(void) {
+\tdtv_phandle_source2.clocks[0].node = DM_GET_DEVICE(phandle_target);
+}
 ''', data)
 
     def test_phandle_bad(self):
@@ -489,7 +507,7 @@ struct dtd_compat1 {
         with open(output) as infile:
             data = infile.read()
         self._CheckStrings(C_HEADER + '''
-static const struct dtd_compat1 dtv_spl_test = {
+static struct dtd_compat1 dtv_spl_test = {
 \t.intval\t\t\t= 0x1,
 };
 U_BOOT_DEVICE(spl_test) = {
@@ -498,7 +516,7 @@ U_BOOT_DEVICE(spl_test) = {
 \t.platdata_size\t= sizeof(dtv_spl_test),
 };
 
-''', data)
+''' + C_EMPTY_POPULATE_PHANDLE_DATA, data)
 
     def test_addresses64(self):
         """Test output from a node with a 'reg' property with na=2, ns=2"""
@@ -523,7 +541,7 @@ struct dtd_test3 {
         with open(output) as infile:
             data = infile.read()
         self._CheckStrings(C_HEADER + '''
-static const struct dtd_test1 dtv_test1 = {
+static struct dtd_test1 dtv_test1 = {
 \t.reg\t\t\t= {0x1234, 0x5678},
 };
 U_BOOT_DEVICE(test1) = {
@@ -532,7 +550,7 @@ U_BOOT_DEVICE(test1) = {
 \t.platdata_size\t= sizeof(dtv_test1),
 };
 
-static const struct dtd_test2 dtv_test2 = {
+static struct dtd_test2 dtv_test2 = {
 \t.reg\t\t\t= {0x1234567890123456, 0x9876543210987654},
 };
 U_BOOT_DEVICE(test2) = {
@@ -541,7 +559,7 @@ U_BOOT_DEVICE(test2) = {
 \t.platdata_size\t= sizeof(dtv_test2),
 };
 
-static const struct dtd_test3 dtv_test3 = {
+static struct dtd_test3 dtv_test3 = {
 \t.reg\t\t\t= {0x1234567890123456, 0x9876543210987654, 0x2, 0x3},
 };
 U_BOOT_DEVICE(test3) = {
@@ -550,7 +568,7 @@ U_BOOT_DEVICE(test3) = {
 \t.platdata_size\t= sizeof(dtv_test3),
 };
 
-''', data)
+''' + C_EMPTY_POPULATE_PHANDLE_DATA, data)
 
     def test_addresses32(self):
         """Test output from a node with a 'reg' property with na=1, ns=1"""
@@ -572,7 +590,7 @@ struct dtd_test2 {
         with open(output) as infile:
             data = infile.read()
         self._CheckStrings(C_HEADER + '''
-static const struct dtd_test1 dtv_test1 = {
+static struct dtd_test1 dtv_test1 = {
 \t.reg\t\t\t= {0x1234, 0x5678},
 };
 U_BOOT_DEVICE(test1) = {
@@ -581,7 +599,7 @@ U_BOOT_DEVICE(test1) = {
 \t.platdata_size\t= sizeof(dtv_test1),
 };
 
-static const struct dtd_test2 dtv_test2 = {
+static struct dtd_test2 dtv_test2 = {
 \t.reg\t\t\t= {0x12345678, 0x98765432, 0x2, 0x3},
 };
 U_BOOT_DEVICE(test2) = {
@@ -590,7 +608,7 @@ U_BOOT_DEVICE(test2) = {
 \t.platdata_size\t= sizeof(dtv_test2),
 };
 
-''', data)
+''' + C_EMPTY_POPULATE_PHANDLE_DATA, data)
 
     def test_addresses64_32(self):
         """Test output from a node with a 'reg' property with na=2, ns=1"""
@@ -615,7 +633,7 @@ struct dtd_test3 {
         with open(output) as infile:
             data = infile.read()
         self._CheckStrings(C_HEADER + '''
-static const struct dtd_test1 dtv_test1 = {
+static struct dtd_test1 dtv_test1 = {
 \t.reg\t\t\t= {0x123400000000, 0x5678},
 };
 U_BOOT_DEVICE(test1) = {
@@ -624,7 +642,7 @@ U_BOOT_DEVICE(test1) = {
 \t.platdata_size\t= sizeof(dtv_test1),
 };
 
-static const struct dtd_test2 dtv_test2 = {
+static struct dtd_test2 dtv_test2 = {
 \t.reg\t\t\t= {0x1234567890123456, 0x98765432},
 };
 U_BOOT_DEVICE(test2) = {
@@ -633,7 +651,7 @@ U_BOOT_DEVICE(test2) = {
 \t.platdata_size\t= sizeof(dtv_test2),
 };
 
-static const struct dtd_test3 dtv_test3 = {
+static struct dtd_test3 dtv_test3 = {
 \t.reg\t\t\t= {0x1234567890123456, 0x98765432, 0x2, 0x3},
 };
 U_BOOT_DEVICE(test3) = {
@@ -642,7 +660,7 @@ U_BOOT_DEVICE(test3) = {
 \t.platdata_size\t= sizeof(dtv_test3),
 };
 
-''', data)
+''' + C_EMPTY_POPULATE_PHANDLE_DATA, data)
 
     def test_addresses32_64(self):
         """Test output from a node with a 'reg' property with na=1, ns=2"""
@@ -667,7 +685,7 @@ struct dtd_test3 {
         with open(output) as infile:
             data = infile.read()
         self._CheckStrings(C_HEADER + '''
-static const struct dtd_test1 dtv_test1 = {
+static struct dtd_test1 dtv_test1 = {
 \t.reg\t\t\t= {0x1234, 0x567800000000},
 };
 U_BOOT_DEVICE(test1) = {
@@ -676,7 +694,7 @@ U_BOOT_DEVICE(test1) = {
 \t.platdata_size\t= sizeof(dtv_test1),
 };
 
-static const struct dtd_test2 dtv_test2 = {
+static struct dtd_test2 dtv_test2 = {
 \t.reg\t\t\t= {0x12345678, 0x9876543210987654},
 };
 U_BOOT_DEVICE(test2) = {
@@ -685,7 +703,7 @@ U_BOOT_DEVICE(test2) = {
 \t.platdata_size\t= sizeof(dtv_test2),
 };
 
-static const struct dtd_test3 dtv_test3 = {
+static struct dtd_test3 dtv_test3 = {
 \t.reg\t\t\t= {0x12345678, 0x9876543210987654, 0x2, 0x3},
 };
 U_BOOT_DEVICE(test3) = {
@@ -694,7 +712,7 @@ U_BOOT_DEVICE(test3) = {
 \t.platdata_size\t= sizeof(dtv_test3),
 };
 
-''', data)
+''' + C_EMPTY_POPULATE_PHANDLE_DATA, data)
 
     def test_bad_reg(self):
         """Test that a reg property with an invalid type generates an error"""
@@ -734,7 +752,7 @@ struct dtd_sandbox_spl_test {
         with open(output) as infile:
             data = infile.read()
         self._CheckStrings(C_HEADER + '''
-static const struct dtd_sandbox_spl_test dtv_spl_test = {
+static struct dtd_sandbox_spl_test dtv_spl_test = {
 \t.intval\t\t\t= 0x1,
 };
 U_BOOT_DEVICE(spl_test) = {
@@ -743,7 +761,7 @@ U_BOOT_DEVICE(spl_test) = {
 \t.platdata_size\t= sizeof(dtv_spl_test),
 };
 
-static const struct dtd_sandbox_spl_test dtv_spl_test2 = {
+static struct dtd_sandbox_spl_test dtv_spl_test2 = {
 \t.intarray\t\t= 0x5,
 };
 U_BOOT_DEVICE(spl_test2) = {
@@ -752,7 +770,7 @@ U_BOOT_DEVICE(spl_test2) = {
 \t.platdata_size\t= sizeof(dtv_spl_test2),
 };
 
-''', data)
+''' + C_EMPTY_POPULATE_PHANDLE_DATA, data)
 
     def testStdout(self):
         """Test output to stdout"""
-- 
2.20.1

^ permalink raw reply related	[flat|nested] 46+ messages in thread

* [PATCH v4 11/14] dm: doc: update of-plat with new phandle support
  2020-06-25  4:10 [PATCH v4 00/14] improve OF_PLATDATA support Walter Lozano
                   ` (9 preceding siblings ...)
  2020-06-25  4:10 ` [PATCH v4 10/14] dtoc: extend dtoc to use struct driver_info when linking nodes Walter Lozano
@ 2020-06-25  4:10 ` Walter Lozano
  2020-06-26  1:43   ` Simon Glass
  2020-07-06  1:31   ` Simon Glass
  2020-06-25  4:10 ` [PATCH v4 12/14] arm: dts: include gpio nodes for card detect Walter Lozano
                   ` (2 subsequent siblings)
  13 siblings, 2 replies; 46+ messages in thread
From: Walter Lozano @ 2020-06-25  4:10 UTC (permalink / raw)
  To: u-boot

Update documentation to reflect the new phandle support when OF_PLATDATA
is used. Now phandles are implemented as pointers to U_BOOT_DEVICE,
which makes it possible to get a pointer to the actual device.

Signed-off-by: Walter Lozano <walter.lozano@collabora.com>
---

 doc/driver-model/of-plat.rst | 24 ++++++++++++++++--------
 1 file changed, 16 insertions(+), 8 deletions(-)

diff --git a/doc/driver-model/of-plat.rst b/doc/driver-model/of-plat.rst
index 376d4409a5..1e3fad137b 100644
--- a/doc/driver-model/of-plat.rst
+++ b/doc/driver-model/of-plat.rst
@@ -69,9 +69,8 @@ strictly necessary. Notable problems include:
    - Correct relations between nodes are not implemented. This means that
      parent/child relations (like bus device iteration) do not work yet.
      Some phandles (those that are recognised as such) are converted into
-     a pointer to platform data. This pointer can potentially be used to
-     access the referenced device (by searching for the pointer value).
-     This feature is not yet implemented, however.
+     a pointer to struct driver_info. This pointer can be used to access
+     the referenced device.
 
 
 How it works
@@ -146,10 +145,10 @@ and the following device declaration:
             .clock_freq_min_max     = {0x61a80, 0x8f0d180},
             .vmmc_supply            = 0xb,
             .num_slots              = 0x1,
-            .clocks                 = {{&dtv_clock_controller_at_ff760000, 456},
-                                       {&dtv_clock_controller_at_ff760000, 68},
-                                       {&dtv_clock_controller_at_ff760000, 114},
-                                       {&dtv_clock_controller_at_ff760000, 118}},
+            .clocks                 = {{NULL, 456},
+                                       {NULL, 68},
+                                       {NULL, 114},
+                                       {NULL, 118}},
             .cap_mmc_highspeed      = true,
             .disable_wp             = true,
             .bus_width              = 0x4,
@@ -164,6 +163,13 @@ and the following device declaration:
             .platdata_size  = sizeof(dtv_dwmmc_at_ff0c0000),
     };
 
+    void dm_populate_phandle_data(void) {
+            dtv_dwmmc_at_ff0c0000.clocks[0].node = DM_GET_DEVICE(clock_controller_at_ff760000);
+            dtv_dwmmc_at_ff0c0000.clocks[1].node = DM_GET_DEVICE(clock_controller_at_ff760000);
+            dtv_dwmmc_at_ff0c0000.clocks[2].node = DM_GET_DEVICE(clock_controller_at_ff760000);
+            dtv_dwmmc_at_ff0c0000.clocks[3].node = DM_GET_DEVICE(clock_controller_at_ff760000);
+    }
+
 The device is then instantiated at run-time and the platform data can be
 accessed using:
 
@@ -329,7 +335,9 @@ prevents them being used inadvertently. All usage must be bracketed with
 #if CONFIG_IS_ENABLED(OF_PLATDATA).
 
 The dt-platdata.c file contains the device declarations and is is built in
-spl/dt-platdata.c.
+spl/dt-platdata.c. It additionally contains the definition of
+dm_populate_phandle_data() which is responsible of filling the phandle
+information by adding references to U_BOOT_DEVICE by using DM_GET_DEVICE
 
 The beginnings of a libfdt Python module are provided. So far this only
 implements a subset of the features.
-- 
2.20.1

^ permalink raw reply related	[flat|nested] 46+ messages in thread

* [PATCH v4 12/14] arm: dts: include gpio nodes for card detect
  2020-06-25  4:10 [PATCH v4 00/14] improve OF_PLATDATA support Walter Lozano
                   ` (10 preceding siblings ...)
  2020-06-25  4:10 ` [PATCH v4 11/14] dm: doc: update of-plat with new phandle support Walter Lozano
@ 2020-06-25  4:10 ` Walter Lozano
  2020-06-26  1:43   ` Simon Glass
  2020-06-26  4:37   ` Adam Ford
  2020-06-25  4:10 ` [PATCH v4 13/14] dtoc: update dtb_platdata to support cd-gpios Walter Lozano
  2020-06-25  4:10 ` [PATCH v4 14/14] dtoc: add test for cd-gpios Walter Lozano
  13 siblings, 2 replies; 46+ messages in thread
From: Walter Lozano @ 2020-06-25  4:10 UTC (permalink / raw)
  To: u-boot

Several MMC drivers use GPIO for card detection with cd-gpios property in
the MMC node pointing to a GPIO node. However, as U-Boot tries to save
space by keeping only required nodes using u-boot* properties, several
devices tree result in having only in the MMC node but not the GPIO node
associated to cd-gpios.

This patch, fixes several ocurrence of this issue.

Signed-off-by: Walter Lozano <walter.lozano@collabora.com>
---

 arch/arm/dts/da850-evm-u-boot.dtsi            |  4 ++++
 arch/arm/dts/da850-lcdk-u-boot.dtsi           |  4 ++++
 arch/arm/dts/rk3288-u-boot.dtsi               |  4 ++++
 arch/arm/dts/rk3288-veyron-speedy-u-boot.dtsi |  2 +-
 arch/arm/dts/rk3288-veyron-u-boot.dtsi        | 11 +++++++++++
 5 files changed, 24 insertions(+), 1 deletion(-)
 create mode 100644 arch/arm/dts/rk3288-veyron-u-boot.dtsi

diff --git a/arch/arm/dts/da850-evm-u-boot.dtsi b/arch/arm/dts/da850-evm-u-boot.dtsi
index d9afc5edf4..d588628641 100644
--- a/arch/arm/dts/da850-evm-u-boot.dtsi
+++ b/arch/arm/dts/da850-evm-u-boot.dtsi
@@ -39,3 +39,7 @@
 &spi1 {
 	u-boot,dm-spl;
 };
+
+&gpio {
+	u-boot,dm-spl;
+};
diff --git a/arch/arm/dts/da850-lcdk-u-boot.dtsi b/arch/arm/dts/da850-lcdk-u-boot.dtsi
index b372d06ca9..d50775c173 100644
--- a/arch/arm/dts/da850-lcdk-u-boot.dtsi
+++ b/arch/arm/dts/da850-lcdk-u-boot.dtsi
@@ -28,3 +28,7 @@
 &serial2 {
 	u-boot,dm-spl;
 };
+
+&gpio {
+	u-boot,dm-spl;
+};
diff --git a/arch/arm/dts/rk3288-u-boot.dtsi b/arch/arm/dts/rk3288-u-boot.dtsi
index 6d31735362..51b6e018bd 100644
--- a/arch/arm/dts/rk3288-u-boot.dtsi
+++ b/arch/arm/dts/rk3288-u-boot.dtsi
@@ -43,3 +43,7 @@
 &noc {
 	u-boot,dm-pre-reloc;
 };
+
+&gpio7 {
+	u-boot,dm-pre-reloc;
+};
diff --git a/arch/arm/dts/rk3288-veyron-speedy-u-boot.dtsi b/arch/arm/dts/rk3288-veyron-speedy-u-boot.dtsi
index eccc069368..251fbdee71 100644
--- a/arch/arm/dts/rk3288-veyron-speedy-u-boot.dtsi
+++ b/arch/arm/dts/rk3288-veyron-speedy-u-boot.dtsi
@@ -3,7 +3,7 @@
  * Copyright 2015 Google, Inc
  */
 
-#include "rk3288-u-boot.dtsi"
+#include "rk3288-veyron-u-boot.dtsi"
 
 &dmc {
 	rockchip,pctl-timing = <0x215 0xc8 0x0 0x35 0x26 0x2 0x70 0x2000d
diff --git a/arch/arm/dts/rk3288-veyron-u-boot.dtsi b/arch/arm/dts/rk3288-veyron-u-boot.dtsi
new file mode 100644
index 0000000000..899fe6e7a0
--- /dev/null
+++ b/arch/arm/dts/rk3288-veyron-u-boot.dtsi
@@ -0,0 +1,11 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+/*
+ * Copyright 2015 Google, Inc
+ */
+
+#include "rk3288-u-boot.dtsi"
+
+&gpio7 {
+	u-boot,dm-pre-reloc;
+};
+
-- 
2.20.1

^ permalink raw reply related	[flat|nested] 46+ messages in thread

* [PATCH v4 13/14] dtoc: update dtb_platdata to support cd-gpios
  2020-06-25  4:10 [PATCH v4 00/14] improve OF_PLATDATA support Walter Lozano
                   ` (11 preceding siblings ...)
  2020-06-25  4:10 ` [PATCH v4 12/14] arm: dts: include gpio nodes for card detect Walter Lozano
@ 2020-06-25  4:10 ` Walter Lozano
  2020-06-26  1:43   ` Simon Glass
  2020-07-06  1:29   ` Simon Glass
  2020-06-25  4:10 ` [PATCH v4 14/14] dtoc: add test for cd-gpios Walter Lozano
  13 siblings, 2 replies; 46+ messages in thread
From: Walter Lozano @ 2020-06-25  4:10 UTC (permalink / raw)
  To: u-boot

Currently dtoc does not support the property cd-gpios used to declare
the gpios for card detect in mmc.

This patch adds support to cd-gpios property.

Signed-off-by: Walter Lozano <walter.lozano@collabora.com>
---

 tools/dtoc/dtb_platdata.py | 16 ++++++++++------
 tools/dtoc/test_dtoc.py    |  2 +-
 2 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/tools/dtoc/dtb_platdata.py b/tools/dtoc/dtb_platdata.py
index f6579fd655..25ed7f50eb 100644
--- a/tools/dtoc/dtb_platdata.py
+++ b/tools/dtoc/dtb_platdata.py
@@ -258,7 +258,7 @@ class DtbPlatdata(object):
         Return:
             Number of argument cells is this is a phandle, else None
         """
-        if prop.name in ['clocks']:
+        if prop.name in ['clocks', 'cd-gpios']:
             if not isinstance(prop.value, list):
                 prop.value = [prop.value]
             val = prop.value
@@ -278,11 +278,14 @@ class DtbPlatdata(object):
                 if not target:
                     raise ValueError("Cannot parse '%s' in node '%s'" %
                                      (prop.name, node_name))
-                prop_name = '#clock-cells'
-                cells = target.props.get(prop_name)
+                cells = None
+                for prop_name in ['#clock-cells', '#gpio-cells']:
+                    cells = target.props.get(prop_name)
+                    if cells:
+                        break
                 if not cells:
-                    raise ValueError("Node '%s' has no '%s' property" %
-                            (target.name, prop_name))
+                    raise ValueError("Node '%s' has no cells property" %
+                            (target.name))
                 num_args = fdt_util.fdt32_to_cpu(cells.value)
                 max_args = max(max_args, num_args)
                 args.append(num_args)
@@ -652,7 +655,8 @@ class DtbPlatdata(object):
         # dtv_dmc_at_xxx.clocks[0].node = DM_GET_DEVICE(clock_controller_at_xxx)
         self.buf('void dm_populate_phandle_data(void) {\n')
         for l in self._links:
-            self.buf('\t%s = DM_GET_DEVICE(%s);\n' % (l['var_node'], l['dev_name']))
+            self.buf('\t%s = DM_GET_DEVICE(%s);\n' %
+                     (l['var_node'], l['dev_name']))
         self.buf('}\n')
 
         self.out(''.join(self.get_buf()))
diff --git a/tools/dtoc/test_dtoc.py b/tools/dtoc/test_dtoc.py
index 209542c849..67ca9a8da1 100755
--- a/tools/dtoc/test_dtoc.py
+++ b/tools/dtoc/test_dtoc.py
@@ -485,7 +485,7 @@ void dm_populate_phandle_data(void) {
         output = tools.GetOutputFilename('output')
         with self.assertRaises(ValueError) as e:
             self.run_test(['struct'], dtb_file, output)
-        self.assertIn("Node 'phandle-target' has no '#clock-cells' property",
+        self.assertIn("Node 'phandle-target' has no cells property",
                       str(e.exception))
 
     def test_aliases(self):
-- 
2.20.1

^ permalink raw reply related	[flat|nested] 46+ messages in thread

* [PATCH v4 14/14] dtoc: add test for cd-gpios
  2020-06-25  4:10 [PATCH v4 00/14] improve OF_PLATDATA support Walter Lozano
                   ` (12 preceding siblings ...)
  2020-06-25  4:10 ` [PATCH v4 13/14] dtoc: update dtb_platdata to support cd-gpios Walter Lozano
@ 2020-06-25  4:10 ` Walter Lozano
  2020-06-26  1:43   ` Simon Glass
  2020-07-06  1:29   ` sjg at chromium.org
  13 siblings, 2 replies; 46+ messages in thread
From: Walter Lozano @ 2020-06-25  4:10 UTC (permalink / raw)
  To: u-boot

Add a test for dtoc taking into account the cd-gpios property.

Signed-off-by: Walter Lozano <walter.lozano@collabora.com>
---

 tools/dtoc/dtoc_test_phandle_cd_gpios.dts | 42 ++++++++++++++
 tools/dtoc/test_dtoc.py                   | 67 +++++++++++++++++++++++
 2 files changed, 109 insertions(+)
 create mode 100644 tools/dtoc/dtoc_test_phandle_cd_gpios.dts

diff --git a/tools/dtoc/dtoc_test_phandle_cd_gpios.dts b/tools/dtoc/dtoc_test_phandle_cd_gpios.dts
new file mode 100644
index 0000000000..241743e73e
--- /dev/null
+++ b/tools/dtoc/dtoc_test_phandle_cd_gpios.dts
@@ -0,0 +1,42 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Test device tree file for dtoc
+ *
+ * Copyright 2020 Collabora Ltd.
+ */
+
+/dts-v1/;
+
+/ {
+	phandle: phandle-target {
+		u-boot,dm-pre-reloc;
+		compatible = "target";
+		intval = <0>;
+		#gpio-cells = <0>;
+	};
+
+	phandle_1: phandle2-target {
+		u-boot,dm-pre-reloc;
+		compatible = "target";
+		intval = <1>;
+		#gpio-cells = <1>;
+	};
+	phandle_2: phandle3-target {
+		u-boot,dm-pre-reloc;
+		compatible = "target";
+		intval = <2>;
+		#gpio-cells = <2>;
+	};
+
+	phandle-source {
+		u-boot,dm-pre-reloc;
+		compatible = "source";
+		cd-gpios = <&phandle &phandle_1 11 &phandle_2 12 13 &phandle>;
+	};
+
+	phandle-source2 {
+		u-boot,dm-pre-reloc;
+		compatible = "source";
+		cd-gpios = <&phandle>;
+	};
+};
diff --git a/tools/dtoc/test_dtoc.py b/tools/dtoc/test_dtoc.py
index 67ca9a8da1..3c8e343b1f 100755
--- a/tools/dtoc/test_dtoc.py
+++ b/tools/dtoc/test_dtoc.py
@@ -466,6 +466,73 @@ U_BOOT_DEVICE(phandle_source2) = {
 void dm_populate_phandle_data(void) {
 \tdtv_phandle_source2.clocks[0].node = DM_GET_DEVICE(phandle_target);
 }
+''', data)
+
+    def test_phandle_cd_gpio(self):
+        """Test that phandle targets are generated when unsing cd-gpios"""
+        dtb_file = get_dtb_file('dtoc_test_phandle_cd_gpios.dts')
+        output = tools.GetOutputFilename('output')
+        dtb_platdata.run_steps(['platdata'], dtb_file, False, output, True)
+        with open(output) as infile:
+            data = infile.read()
+        self._CheckStrings(C_HEADER + '''
+static struct dtd_target dtv_phandle_target = {
+\t.intval\t\t\t= 0x0,
+};
+U_BOOT_DEVICE(phandle_target) = {
+\t.name\t\t= "target",
+\t.platdata\t= &dtv_phandle_target,
+\t.platdata_size\t= sizeof(dtv_phandle_target),
+};
+
+static struct dtd_target dtv_phandle2_target = {
+\t.intval\t\t\t= 0x1,
+};
+U_BOOT_DEVICE(phandle2_target) = {
+\t.name\t\t= "target",
+\t.platdata\t= &dtv_phandle2_target,
+\t.platdata_size\t= sizeof(dtv_phandle2_target),
+};
+
+static struct dtd_target dtv_phandle3_target = {
+\t.intval\t\t\t= 0x2,
+};
+U_BOOT_DEVICE(phandle3_target) = {
+\t.name\t\t= "target",
+\t.platdata\t= &dtv_phandle3_target,
+\t.platdata_size\t= sizeof(dtv_phandle3_target),
+};
+
+static struct dtd_source dtv_phandle_source = {
+\t.cd_gpios\t\t= {
+\t\t\t{NULL, {}},
+\t\t\t{NULL, {11}},
+\t\t\t{NULL, {12, 13}},
+\t\t\t{NULL, {}},},
+};
+U_BOOT_DEVICE(phandle_source) = {
+\t.name\t\t= "source",
+\t.platdata\t= &dtv_phandle_source,
+\t.platdata_size\t= sizeof(dtv_phandle_source),
+};
+
+static struct dtd_source dtv_phandle_source2 = {
+\t.cd_gpios\t\t= {
+\t\t\t{NULL, {}},},
+};
+U_BOOT_DEVICE(phandle_source2) = {
+\t.name\t\t= "source",
+\t.platdata\t= &dtv_phandle_source2,
+\t.platdata_size\t= sizeof(dtv_phandle_source2),
+};
+
+void dm_populate_phandle_data(void) {
+\tdtv_phandle_source.cd_gpios[0].node = DM_GET_DEVICE(phandle_target);
+\tdtv_phandle_source.cd_gpios[1].node = DM_GET_DEVICE(phandle2_target);
+\tdtv_phandle_source.cd_gpios[2].node = DM_GET_DEVICE(phandle3_target);
+\tdtv_phandle_source.cd_gpios[3].node = DM_GET_DEVICE(phandle_target);
+\tdtv_phandle_source2.cd_gpios[0].node = DM_GET_DEVICE(phandle_target);
+}
 ''', data)
 
     def test_phandle_bad(self):
-- 
2.20.1

^ permalink raw reply related	[flat|nested] 46+ messages in thread

* [PATCH v4 01/14] drivers: rename drivers to match compatible string
  2020-06-25  4:10 ` [PATCH v4 01/14] drivers: rename drivers to match compatible string Walter Lozano
@ 2020-06-26  1:42   ` Simon Glass
  0 siblings, 0 replies; 46+ messages in thread
From: Simon Glass @ 2020-06-26  1:42 UTC (permalink / raw)
  To: u-boot

On Wed, 24 Jun 2020 at 22:10, Walter Lozano <walter.lozano@collabora.com> wrote:
>
> When using OF_PLATDATA, the bind process between devices and drivers
> is performed trying to match compatible string with driver names.
> However driver names are not strictly defined, and also there are different
> names used when declaring a driver with U_BOOT_DRIVER, the name of the
> symbol used in the linker list and the used in the struct driver_info.
>
> In order to make things a bit more clear, rename the drivers names. This
> will also help for further OF_PLATDATA improvements, such as checking
> for valid driver names.
>
> Signed-off-by: Walter Lozano <walter.lozano@collabora.com>
> ---
>
>  .../mach-at91/arm926ejs/at91sam9260_devices.c |  6 +--
>  .../arm926ejs/at91sam9m10g45_devices.c        | 10 ++--
>  arch/arm/mach-rockchip/rk3328/syscon_rk3328.c |  4 +-
>  board/davinci/da8xxevm/omapl138_lcdk.c        |  2 +-
>  board/sandbox/sandbox.c                       |  2 +-
>  drivers/clk/at91/clk-master.c                 |  4 +-
>  drivers/clk/at91/clk-peripheral.c             |  4 +-
>  drivers/clk/at91/pmc.c                        |  4 +-
>  drivers/core/simple-bus.c                     |  4 +-
>  drivers/gpio/at91_gpio.c                      |  4 +-
>  drivers/gpio/da8xx_gpio.c                     |  4 +-
>  drivers/gpio/mxs_gpio.c                       |  6 +--
>  drivers/gpio/rk_gpio.c                        |  4 +-
>  drivers/gpio/sandbox.c                        |  4 +-
>  drivers/i2c/rk_i2c.c                          |  4 +-
>  drivers/input/cros_ec_keyb.c                  |  4 +-
>  drivers/misc/cros_ec_sandbox.c                |  4 +-
>  drivers/mmc/davinci_mmc.c                     |  4 +-
>  drivers/mmc/mxsmmc.c                          |  6 +--
>  drivers/mmc/rockchip_dw_mmc.c                 |  2 +-
>  drivers/mtd/spi/sf-uclass.c                   |  2 +-
>  drivers/mtd/spi/sf_probe.c                    |  4 +-
>  drivers/pinctrl/nxp/pinctrl-mxs.c             |  4 +-
>  drivers/pinctrl/pinctrl-at91.c                |  4 +-
>  drivers/pinctrl/rockchip/pinctrl-rk3188.c     |  2 +-
>  drivers/pinctrl/rockchip/pinctrl-rk3288.c     |  2 +-
>  drivers/pinctrl/rockchip/pinctrl-rk3328.c     |  2 +-
>  drivers/pinctrl/rockchip/pinctrl-rk3368.c     |  2 +-
>  drivers/power/pmic/rk8xx.c                    |  4 +-
>  drivers/power/regulator/fixed.c               |  4 +-
>  drivers/ram/rockchip/dmc-rk3368.c             |  2 +-
>  drivers/ram/rockchip/sdram_rk3188.c           |  2 +-
>  drivers/ram/rockchip/sdram_rk3288.c           |  2 +-
>  drivers/ram/rockchip/sdram_rk3328.c           |  2 +-
>  drivers/serial/sandbox.c                      |  6 +--
>  drivers/spi/mxs_spi.c                         |  6 +--
>  drivers/spi/rk_spi.c                          |  6 +--
>  drivers/spi/sandbox_spi.c                     |  4 +-
>  drivers/tpm/tpm_tis_sandbox.c                 |  4 +-
>  drivers/video/rockchip/rk3288_vop.c           |  4 +-
>  drivers/video/sandbox_sdl.c                   |  4 +-
>  drivers/watchdog/at91sam9_wdt.c               |  4 +-
>  test/dm/gpio.c                                |  2 +-
>  test/dm/spi.c                                 |  6 +--
>  test/py/tests/test_bind.py                    | 54 +++++++++----------
>  45 files changed, 104 insertions(+), 120 deletions(-)

Reviewed-by: Simon Glass <sjg@chromium.org>

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [PATCH v4 02/14] dtoc: add missing code comments
  2020-06-25  4:10 ` [PATCH v4 02/14] dtoc: add missing code comments Walter Lozano
@ 2020-06-26  1:42   ` Simon Glass
  2020-06-26 13:18     ` Walter Lozano
  0 siblings, 1 reply; 46+ messages in thread
From: Simon Glass @ 2020-06-26  1:42 UTC (permalink / raw)
  To: u-boot

On Wed, 24 Jun 2020 at 22:10, Walter Lozano <walter.lozano@collabora.com> wrote:
>
> Add missing information about internal class members in order to make
> the code easier to follow.
>
> Signed-off-by: Walter Lozano <walter.lozano@collabora.com>
> ---
>
>  tools/dtoc/dtb_platdata.py | 3 +++
>  1 file changed, 3 insertions(+)
>
Reviewed-by: Simon Glass <sjg@chromium.org>

BTW if there was a review tag from last version, please add it to your commit.

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [PATCH v4 03/14] core: add support for U_BOOT_DRIVER_ALIAS
  2020-06-25  4:10 ` [PATCH v4 03/14] core: add support for U_BOOT_DRIVER_ALIAS Walter Lozano
@ 2020-06-26  1:43   ` Simon Glass
  0 siblings, 0 replies; 46+ messages in thread
From: Simon Glass @ 2020-06-26  1:43 UTC (permalink / raw)
  To: u-boot

On Wed, 24 Jun 2020 at 22:10, Walter Lozano <walter.lozano@collabora.com> wrote:
>
> Currently when using OF_PLATDATA the binding between devices and drivers
> is done trying to match the compatible string in the node with a driver
> name. However, usually a single driver supports multiple compatible strings
> which causes that only devices which its compatible string matches a
> driver name get bound.
>
> To overcome this issue, this patch adds the U_BOOT_DRIVER_ALIAS macro,
> which generates no code at all, but allows an easy way to declare driver
> name aliases. Thanks to this, dtoc could be improve to look for the driver
> name based on its alias when it populates the U_BOOT_DEVICE entry.
>
> Signed-off-by: Walter Lozano <walter.lozano@collabora.com>
> ---
>
>  drivers/clk/at91/pmc.c            | 2 ++
>  drivers/gpio/mxs_gpio.c           | 2 ++
>  drivers/gpio/sandbox.c            | 2 ++
>  drivers/i2c/rk_i2c.c              | 2 ++
>  drivers/mmc/mxsmmc.c              | 1 +
>  drivers/mmc/rockchip_dw_mmc.c     | 3 +++
>  drivers/mtd/spi/sf_probe.c        | 2 ++
>  drivers/pinctrl/nxp/pinctrl-mxs.c | 2 ++
>  drivers/pinctrl/pinctrl-at91.c    | 2 ++
>  drivers/power/pmic/rk8xx.c        | 2 ++
>  drivers/serial/ns16550.c          | 4 ++++
>  drivers/spi/mxs_spi.c             | 2 ++
>  drivers/spi/rk_spi.c              | 2 ++
>  include/dm/device.h               | 7 +++++++
>  14 files changed, 35 insertions(+)
>

Reviewed-by: Simon Glass <sjg@chromium.org>

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [PATCH v4 04/14] dtoc: add support to scan drivers
  2020-06-25  4:10 ` [PATCH v4 04/14] dtoc: add support to scan drivers Walter Lozano
@ 2020-06-26  1:43   ` Simon Glass
  2020-07-02 19:47     ` Simon Glass
  0 siblings, 1 reply; 46+ messages in thread
From: Simon Glass @ 2020-06-26  1:43 UTC (permalink / raw)
  To: u-boot

On Wed, 24 Jun 2020 at 22:10, Walter Lozano <walter.lozano@collabora.com> wrote:
>
> Currently dtoc scans dtbs to convert them to struct platdata and
> to generate U_BOOT_DEVICE entries. These entries need to be filled
> with the driver name, but at this moment the information used is the
> compatible name present in the dtb. This causes that only nodes with
> a compatible name that matches a driver name generate a working
> entry.
>
> In order to improve this behaviour, this patch adds to dtoc the
> capability of scan drivers source code to generate a list of valid driver
> names and aliases. This allows to generate U_BOOT_DEVICE entries using
> valid driver names and rise a warning in the case a name is not valid.
>
> Signed-off-by: Walter Lozano <walter.lozano@collabora.com>
> ---
>
>  tools/dtoc/dtb_platdata.py | 91 ++++++++++++++++++++++++++++++++++++--
>  tools/dtoc/test_dtoc.py    | 33 ++++++++++++++
>  2 files changed, 120 insertions(+), 4 deletions(-)
>

Reviewed-by: Simon Glass <sjg@chromium.org>

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [PATCH v4 05/14] dtoc: add option to disable warnings
  2020-06-25  4:10 ` [PATCH v4 05/14] dtoc: add option to disable warnings Walter Lozano
@ 2020-06-26  1:43   ` Simon Glass
  2020-07-06  1:31   ` Simon Glass
  1 sibling, 0 replies; 46+ messages in thread
From: Simon Glass @ 2020-06-26  1:43 UTC (permalink / raw)
  To: u-boot

On Wed, 24 Jun 2020 at 22:11, Walter Lozano <walter.lozano@collabora.com> wrote:
>
> As dtoc now performs checks for valid driver names, when running dtoc
> tests several warnings arise as these tests don't use valid driver
> names.
>
> This patch adds an option to disable those warning, which is only
> intended for running tests.
>
> Signed-off-by: Walter Lozano <walter.lozano@collabora.com>
> ---
>
>  tools/dtoc/dtb_platdata.py              | 13 ++--
>  tools/dtoc/dtoc_test_invalid_driver.dts | 15 ++++
>  tools/dtoc/test_dtoc.py                 | 91 +++++++++++++++++--------
>  3 files changed, 85 insertions(+), 34 deletions(-)
>  create mode 100644 tools/dtoc/dtoc_test_invalid_driver.dts

Reviewed-by: Simon Glass <sjg@chromium.org>

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [PATCH v4 06/14] dm: doc: update of-plat with the support for driver aliases
  2020-06-25  4:10 ` [PATCH v4 06/14] dm: doc: update of-plat with the support for driver aliases Walter Lozano
@ 2020-06-26  1:43   ` Simon Glass
  2020-07-06  1:31   ` Simon Glass
  1 sibling, 0 replies; 46+ messages in thread
From: Simon Glass @ 2020-06-26  1:43 UTC (permalink / raw)
  To: u-boot

On Wed, 24 Jun 2020 at 22:11, Walter Lozano <walter.lozano@collabora.com> wrote:
>
> Update the documentation with the support for driver aliases using
> U_BOOT_DRIVER_ALIAS.
>
> Signed-off-by: Walter Lozano <walter.lozano@collabora.com>
> ---
>
>  doc/driver-model/of-plat.rst | 14 +++++++++++++-
>  1 file changed, 13 insertions(+), 1 deletion(-)

Reviewed-by: Simon Glass <sjg@chromium.org>

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [PATCH v4 07/14] core: drop const for struct driver_info
  2020-06-25  4:10 ` [PATCH v4 07/14] core: drop const for struct driver_info Walter Lozano
@ 2020-06-26  1:43   ` Simon Glass
  2020-07-06  1:31   ` Simon Glass
  1 sibling, 0 replies; 46+ messages in thread
From: Simon Glass @ 2020-06-26  1:43 UTC (permalink / raw)
  To: u-boot

On Wed, 24 Jun 2020 at 22:11, Walter Lozano <walter.lozano@collabora.com> wrote:
>
> In order to prepare for a new support of phandle when OF_PLATDATA is used
> drop the const for struct driver_info as this struct will need to be
> updated on runtime.
>
> Signed-off-by: Walter Lozano <walter.lozano@collabora.com>
> ---
>
>  drivers/core/device.c        | 2 +-
>  drivers/core/root.c          | 2 +-
>  include/dm/device-internal.h | 2 +-
>  3 files changed, 3 insertions(+), 3 deletions(-)

Reviewed-by: Simon Glass <sjg@chromium.org>

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [PATCH v4 08/14] core: extend struct driver_info to point to device
  2020-06-25  4:10 ` [PATCH v4 08/14] core: extend struct driver_info to point to device Walter Lozano
@ 2020-06-26  1:43   ` Simon Glass
  2020-07-06  1:31   ` Simon Glass
  1 sibling, 0 replies; 46+ messages in thread
From: Simon Glass @ 2020-06-26  1:43 UTC (permalink / raw)
  To: u-boot

On Wed, 24 Jun 2020 at 22:11, Walter Lozano <walter.lozano@collabora.com> wrote:
>
> Currently when creating an U_BOOT_DEVICE entry a struct driver_info
> is declared, which contains the data needed to instantiate the device.
> However, the actual device is created at runtime and there is no proper
> way to get the device based on its struct driver_info.
>
> This patch extends struct driver_info adding a pointer to udevice which
> is populated during the bind process, allowing to generate a set of
> functions to get the device based on its struct driver_info.
>
> Signed-off-by: Walter Lozano <walter.lozano@collabora.com>
> ---
>
>  drivers/core/device.c | 26 +++++++++++++++++++++++---
>  drivers/core/root.c   |  4 ++++
>  include/dm/device.h   | 15 +++++++++++++++
>  include/dm/platdata.h | 14 ++++++++++++++
>  4 files changed, 56 insertions(+), 3 deletions(-)


Reviewed-by: Simon Glass <sjg@chromium.org>

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [PATCH v4 09/14] sandbox: Move section u_boot_list to make it RW
  2020-06-25  4:10 ` [PATCH v4 09/14] sandbox: Move section u_boot_list to make it RW Walter Lozano
@ 2020-06-26  1:43   ` Simon Glass
  2020-07-06  1:31   ` Simon Glass
  1 sibling, 0 replies; 46+ messages in thread
From: Simon Glass @ 2020-06-26  1:43 UTC (permalink / raw)
  To: u-boot

On Wed, 24 Jun 2020 at 22:11, Walter Lozano <walter.lozano@collabora.com> wrote:
>
> In order to be able to update data in u_boot_list, move this section to
> make it RW.
>
> Signed-off-by: Walter Lozano <walter.lozano@collabora.com>
> ---
>
>  arch/sandbox/cpu/u-boot-spl.lds | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)

Reviewed-by: Simon Glass <sjg@chromium.org>

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [PATCH v4 10/14] dtoc: extend dtoc to use struct driver_info when linking nodes
  2020-06-25  4:10 ` [PATCH v4 10/14] dtoc: extend dtoc to use struct driver_info when linking nodes Walter Lozano
@ 2020-06-26  1:43   ` Simon Glass
  0 siblings, 0 replies; 46+ messages in thread
From: Simon Glass @ 2020-06-26  1:43 UTC (permalink / raw)
  To: u-boot

On Wed, 24 Jun 2020 at 22:11, Walter Lozano <walter.lozano@collabora.com> wrote:
>
> In the current implementation, when dtoc parses a dtb to generate a struct
> platdata it converts the information related to linked nodes as pointers
> to struct platdata of destination nodes. By doing this, it makes
> difficult to get pointer to udevices created based on these
> information.
>
> This patch extends dtoc to use struct driver_info when populating
> information about linked nodes, which makes it easier to later get
> the devices created. In this context, reimplement functions like
> clk_get_by_index_platdata() which made use of the previous approach.
>
> Signed-off-by: Walter Lozano <walter.lozano@collabora.com>
> ---
>
>  drivers/clk/clk-uclass.c            |  11 ++-
>  drivers/misc/irq-uclass.c           |  10 ++-
>  drivers/mmc/ftsdc010_mci.c          |   2 +-
>  drivers/mmc/rockchip_dw_mmc.c       |   2 +-
>  drivers/mmc/rockchip_sdhci.c        |   2 +-
>  drivers/ram/rockchip/sdram_rk3399.c |   2 +-
>  drivers/spi/rk_spi.c                |   2 +-
>  include/clk.h                       |   4 +-
>  tools/dtoc/dtb_platdata.py          |  26 ++++++-
>  tools/dtoc/test_dtoc.py             | 104 ++++++++++++++++------------
>  10 files changed, 100 insertions(+), 65 deletions(-)
>

Reviewed-by: Simon Glass <sjg@chromium.org>

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [PATCH v4 11/14] dm: doc: update of-plat with new phandle support
  2020-06-25  4:10 ` [PATCH v4 11/14] dm: doc: update of-plat with new phandle support Walter Lozano
@ 2020-06-26  1:43   ` Simon Glass
  2020-07-06  1:31   ` Simon Glass
  1 sibling, 0 replies; 46+ messages in thread
From: Simon Glass @ 2020-06-26  1:43 UTC (permalink / raw)
  To: u-boot

On Wed, 24 Jun 2020 at 22:11, Walter Lozano <walter.lozano@collabora.com> wrote:
>
> Update documentation to reflect the new phandle support when OF_PLATDATA
> is used. Now phandles are implemented as pointers to U_BOOT_DEVICE,
> which makes it possible to get a pointer to the actual device.
>
> Signed-off-by: Walter Lozano <walter.lozano@collabora.com>
> ---
>
>  doc/driver-model/of-plat.rst | 24 ++++++++++++++++--------
>  1 file changed, 16 insertions(+), 8 deletions(-)
>

Reviewed-by: Simon Glass <sjg@chromium.org>

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [PATCH v4 12/14] arm: dts: include gpio nodes for card detect
  2020-06-25  4:10 ` [PATCH v4 12/14] arm: dts: include gpio nodes for card detect Walter Lozano
@ 2020-06-26  1:43   ` Simon Glass
  2020-06-26  4:37   ` Adam Ford
  1 sibling, 0 replies; 46+ messages in thread
From: Simon Glass @ 2020-06-26  1:43 UTC (permalink / raw)
  To: u-boot

On Wed, 24 Jun 2020 at 22:11, Walter Lozano <walter.lozano@collabora.com> wrote:
>
> Several MMC drivers use GPIO for card detection with cd-gpios property in
> the MMC node pointing to a GPIO node. However, as U-Boot tries to save
> space by keeping only required nodes using u-boot* properties, several
> devices tree result in having only in the MMC node but not the GPIO node
> associated to cd-gpios.
>
> This patch, fixes several ocurrence of this issue.
>
> Signed-off-by: Walter Lozano <walter.lozano@collabora.com>
> ---
>
>  arch/arm/dts/da850-evm-u-boot.dtsi            |  4 ++++
>  arch/arm/dts/da850-lcdk-u-boot.dtsi           |  4 ++++
>  arch/arm/dts/rk3288-u-boot.dtsi               |  4 ++++
>  arch/arm/dts/rk3288-veyron-speedy-u-boot.dtsi |  2 +-
>  arch/arm/dts/rk3288-veyron-u-boot.dtsi        | 11 +++++++++++
>  5 files changed, 24 insertions(+), 1 deletion(-)
>  create mode 100644 arch/arm/dts/rk3288-veyron-u-boot.dtsi

Reviewed-by: Simon Glass <sjg@chromium.org>

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [PATCH v4 13/14] dtoc: update dtb_platdata to support cd-gpios
  2020-06-25  4:10 ` [PATCH v4 13/14] dtoc: update dtb_platdata to support cd-gpios Walter Lozano
@ 2020-06-26  1:43   ` Simon Glass
  2020-07-06  1:29   ` Simon Glass
  1 sibling, 0 replies; 46+ messages in thread
From: Simon Glass @ 2020-06-26  1:43 UTC (permalink / raw)
  To: u-boot

On Wed, 24 Jun 2020 at 22:11, Walter Lozano <walter.lozano@collabora.com> wrote:
>
> Currently dtoc does not support the property cd-gpios used to declare
> the gpios for card detect in mmc.
>
> This patch adds support to cd-gpios property.
>
> Signed-off-by: Walter Lozano <walter.lozano@collabora.com>
> ---
>
>  tools/dtoc/dtb_platdata.py | 16 ++++++++++------
>  tools/dtoc/test_dtoc.py    |  2 +-
>  2 files changed, 11 insertions(+), 7 deletions(-)
>

Reviewed-by: Simon Glass <sjg@chromium.org>

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [PATCH v4 14/14] dtoc: add test for cd-gpios
  2020-06-25  4:10 ` [PATCH v4 14/14] dtoc: add test for cd-gpios Walter Lozano
@ 2020-06-26  1:43   ` Simon Glass
  2020-07-06  1:29   ` sjg at chromium.org
  1 sibling, 0 replies; 46+ messages in thread
From: Simon Glass @ 2020-06-26  1:43 UTC (permalink / raw)
  To: u-boot

On Wed, 24 Jun 2020 at 22:11, Walter Lozano <walter.lozano@collabora.com> wrote:
>
> Add a test for dtoc taking into account the cd-gpios property.
>
> Signed-off-by: Walter Lozano <walter.lozano@collabora.com>
> ---
>
>  tools/dtoc/dtoc_test_phandle_cd_gpios.dts | 42 ++++++++++++++
>  tools/dtoc/test_dtoc.py                   | 67 +++++++++++++++++++++++
>  2 files changed, 109 insertions(+)
>  create mode 100644 tools/dtoc/dtoc_test_phandle_cd_gpios.dts

Reviewed-by: Simon Glass <sjg@chromium.org>

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [PATCH v4 12/14] arm: dts: include gpio nodes for card detect
  2020-06-25  4:10 ` [PATCH v4 12/14] arm: dts: include gpio nodes for card detect Walter Lozano
  2020-06-26  1:43   ` Simon Glass
@ 2020-06-26  4:37   ` Adam Ford
  2020-06-26 12:26     ` Adam Ford
  1 sibling, 1 reply; 46+ messages in thread
From: Adam Ford @ 2020-06-26  4:37 UTC (permalink / raw)
  To: u-boot

On Wed, Jun 24, 2020 at 11:11 PM Walter Lozano
<walter.lozano@collabora.com> wrote:
>
> Several MMC drivers use GPIO for card detection with cd-gpios property in
> the MMC node pointing to a GPIO node. However, as U-Boot tries to save
> space by keeping only required nodes using u-boot* properties, several
> devices tree result in having only in the MMC node but not the GPIO node
> associated to cd-gpios.
>
> This patch, fixes several ocurrence of this issue.
>
> Signed-off-by: Walter Lozano <walter.lozano@collabora.com>
> ---
>
>  arch/arm/dts/da850-evm-u-boot.dtsi            |  4 ++++
>  arch/arm/dts/da850-lcdk-u-boot.dtsi           |  4 ++++
>  arch/arm/dts/rk3288-u-boot.dtsi               |  4 ++++
>  arch/arm/dts/rk3288-veyron-speedy-u-boot.dtsi |  2 +-
>  arch/arm/dts/rk3288-veyron-u-boot.dtsi        | 11 +++++++++++
>  5 files changed, 24 insertions(+), 1 deletion(-)
>  create mode 100644 arch/arm/dts/rk3288-veyron-u-boot.dtsi
>
> diff --git a/arch/arm/dts/da850-evm-u-boot.dtsi b/arch/arm/dts/da850-evm-u-boot.dtsi
> index d9afc5edf4..d588628641 100644
> --- a/arch/arm/dts/da850-evm-u-boot.dtsi
> +++ b/arch/arm/dts/da850-evm-u-boot.dtsi
> @@ -39,3 +39,7 @@
>  &spi1 {
>         u-boot,dm-spl;
>  };
> +
> +&gpio {
> +       u-boot,dm-spl;
> +};

I don't know that this is needed for the da850-evm since it doesn't
boot from sd/mmc.  It can boot from SPI, NAND or NOR Flash depending
on the config option selected, but none of them need the gpio during
SPL.  The gpio is loaded during normal U-Boot.  I will try to run some
tests to make sure it still boots in the next few days.  I know space
is getting tight in SPL.

> diff --git a/arch/arm/dts/da850-lcdk-u-boot.dtsi b/arch/arm/dts/da850-lcdk-u-boot.dtsi
> index b372d06ca9..d50775c173 100644
> --- a/arch/arm/dts/da850-lcdk-u-boot.dtsi
> +++ b/arch/arm/dts/da850-lcdk-u-boot.dtsi
> @@ -28,3 +28,7 @@
>  &serial2 {
>         u-boot,dm-spl;
>  };
> +
> +&gpio {
> +       u-boot,dm-spl;
> +};
> diff --git a/arch/arm/dts/rk3288-u-boot.dtsi b/arch/arm/dts/rk3288-u-boot.dtsi
> index 6d31735362..51b6e018bd 100644
> --- a/arch/arm/dts/rk3288-u-boot.dtsi
> +++ b/arch/arm/dts/rk3288-u-boot.dtsi
> @@ -43,3 +43,7 @@
>  &noc {
>         u-boot,dm-pre-reloc;
>  };
> +
> +&gpio7 {
> +       u-boot,dm-pre-reloc;
> +};
> diff --git a/arch/arm/dts/rk3288-veyron-speedy-u-boot.dtsi b/arch/arm/dts/rk3288-veyron-speedy-u-boot.dtsi
> index eccc069368..251fbdee71 100644
> --- a/arch/arm/dts/rk3288-veyron-speedy-u-boot.dtsi
> +++ b/arch/arm/dts/rk3288-veyron-speedy-u-boot.dtsi
> @@ -3,7 +3,7 @@
>   * Copyright 2015 Google, Inc
>   */
>
> -#include "rk3288-u-boot.dtsi"
> +#include "rk3288-veyron-u-boot.dtsi"
>
>  &dmc {
>         rockchip,pctl-timing = <0x215 0xc8 0x0 0x35 0x26 0x2 0x70 0x2000d
> diff --git a/arch/arm/dts/rk3288-veyron-u-boot.dtsi b/arch/arm/dts/rk3288-veyron-u-boot.dtsi
> new file mode 100644
> index 0000000000..899fe6e7a0
> --- /dev/null
> +++ b/arch/arm/dts/rk3288-veyron-u-boot.dtsi
> @@ -0,0 +1,11 @@
> +// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
> +/*
> + * Copyright 2015 Google, Inc
> + */
> +
> +#include "rk3288-u-boot.dtsi"
> +
> +&gpio7 {
> +       u-boot,dm-pre-reloc;
> +};
> +
> --
> 2.20.1
>

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [PATCH v4 12/14] arm: dts: include gpio nodes for card detect
  2020-06-26  4:37   ` Adam Ford
@ 2020-06-26 12:26     ` Adam Ford
  2020-06-26 13:11       ` Walter Lozano
  2020-07-06  1:31       ` Simon Glass
  0 siblings, 2 replies; 46+ messages in thread
From: Adam Ford @ 2020-06-26 12:26 UTC (permalink / raw)
  To: u-boot

On Thu, Jun 25, 2020 at 11:37 PM Adam Ford <aford173@gmail.com> wrote:
>
> On Wed, Jun 24, 2020 at 11:11 PM Walter Lozano
> <walter.lozano@collabora.com> wrote:
> >
> > Several MMC drivers use GPIO for card detection with cd-gpios property in
> > the MMC node pointing to a GPIO node. However, as U-Boot tries to save
> > space by keeping only required nodes using u-boot* properties, several
> > devices tree result in having only in the MMC node but not the GPIO node
> > associated to cd-gpios.
> >
> > This patch, fixes several ocurrence of this issue.
> >
> > Signed-off-by: Walter Lozano <walter.lozano@collabora.com>
> > ---
> >
> >  arch/arm/dts/da850-evm-u-boot.dtsi            |  4 ++++
> >  arch/arm/dts/da850-lcdk-u-boot.dtsi           |  4 ++++
> >  arch/arm/dts/rk3288-u-boot.dtsi               |  4 ++++
> >  arch/arm/dts/rk3288-veyron-speedy-u-boot.dtsi |  2 +-
> >  arch/arm/dts/rk3288-veyron-u-boot.dtsi        | 11 +++++++++++
> >  5 files changed, 24 insertions(+), 1 deletion(-)
> >  create mode 100644 arch/arm/dts/rk3288-veyron-u-boot.dtsi
> >
> > diff --git a/arch/arm/dts/da850-evm-u-boot.dtsi b/arch/arm/dts/da850-evm-u-boot.dtsi
> > index d9afc5edf4..d588628641 100644
> > --- a/arch/arm/dts/da850-evm-u-boot.dtsi
> > +++ b/arch/arm/dts/da850-evm-u-boot.dtsi
> > @@ -39,3 +39,7 @@
> >  &spi1 {
> >         u-boot,dm-spl;
> >  };
> > +
> > +&gpio {
> > +       u-boot,dm-spl;
> > +};
>
> I don't know that this is needed for the da850-evm since it doesn't
> boot from sd/mmc.  It can boot from SPI, NAND or NOR Flash depending
> on the config option selected, but none of them need the gpio during
> SPL.  The gpio is loaded during normal U-Boot.  I will try to run some
> tests to make sure it still boots in the next few days.  I know space
> is getting tight in SPL.

I applied your patches and built.
FYI, "git am" didn't let them apply nicely, but there could be some
missing dependent patches I was missing.  I was able to patch with
"patch"
The board booted as expected.

I examined the generated dtb for SPL since this board doesn't use
OF_PLATDATA.  It looks like we could remove both the GPIO and the MMC
modes from SPL, but I'm not going to worry about it unless we can't
boot any more.  If/when that happens, I'll spend more time trying to
free up space in SPL.
For now,, for the series...

Tested-by: Adam Ford <aford173@gmail.com> #da850-evm

adam
>
> > diff --git a/arch/arm/dts/da850-lcdk-u-boot.dtsi b/arch/arm/dts/da850-lcdk-u-boot.dtsi
> > index b372d06ca9..d50775c173 100644
> > --- a/arch/arm/dts/da850-lcdk-u-boot.dtsi
> > +++ b/arch/arm/dts/da850-lcdk-u-boot.dtsi
> > @@ -28,3 +28,7 @@
> >  &serial2 {
> >         u-boot,dm-spl;
> >  };
> > +
> > +&gpio {
> > +       u-boot,dm-spl;
> > +};
> > diff --git a/arch/arm/dts/rk3288-u-boot.dtsi b/arch/arm/dts/rk3288-u-boot.dtsi
> > index 6d31735362..51b6e018bd 100644
> > --- a/arch/arm/dts/rk3288-u-boot.dtsi
> > +++ b/arch/arm/dts/rk3288-u-boot.dtsi
> > @@ -43,3 +43,7 @@
> >  &noc {
> >         u-boot,dm-pre-reloc;
> >  };
> > +
> > +&gpio7 {
> > +       u-boot,dm-pre-reloc;
> > +};
> > diff --git a/arch/arm/dts/rk3288-veyron-speedy-u-boot.dtsi b/arch/arm/dts/rk3288-veyron-speedy-u-boot.dtsi
> > index eccc069368..251fbdee71 100644
> > --- a/arch/arm/dts/rk3288-veyron-speedy-u-boot.dtsi
> > +++ b/arch/arm/dts/rk3288-veyron-speedy-u-boot.dtsi
> > @@ -3,7 +3,7 @@
> >   * Copyright 2015 Google, Inc
> >   */
> >
> > -#include "rk3288-u-boot.dtsi"
> > +#include "rk3288-veyron-u-boot.dtsi"
> >
> >  &dmc {
> >         rockchip,pctl-timing = <0x215 0xc8 0x0 0x35 0x26 0x2 0x70 0x2000d
> > diff --git a/arch/arm/dts/rk3288-veyron-u-boot.dtsi b/arch/arm/dts/rk3288-veyron-u-boot.dtsi
> > new file mode 100644
> > index 0000000000..899fe6e7a0
> > --- /dev/null
> > +++ b/arch/arm/dts/rk3288-veyron-u-boot.dtsi
> > @@ -0,0 +1,11 @@
> > +// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
> > +/*
> > + * Copyright 2015 Google, Inc
> > + */
> > +
> > +#include "rk3288-u-boot.dtsi"
> > +
> > +&gpio7 {
> > +       u-boot,dm-pre-reloc;
> > +};
> > +
> > --
> > 2.20.1
> >

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [PATCH v4 12/14] arm: dts: include gpio nodes for card detect
  2020-06-26 12:26     ` Adam Ford
@ 2020-06-26 13:11       ` Walter Lozano
  2020-07-06  1:31       ` Simon Glass
  1 sibling, 0 replies; 46+ messages in thread
From: Walter Lozano @ 2020-06-26 13:11 UTC (permalink / raw)
  To: u-boot

Hi Adam,

On 26/6/20 09:26, Adam Ford wrote:
> On Thu, Jun 25, 2020 at 11:37 PM Adam Ford <aford173@gmail.com> wrote:
>> On Wed, Jun 24, 2020 at 11:11 PM Walter Lozano
>> <walter.lozano@collabora.com> wrote:
>>> Several MMC drivers use GPIO for card detection with cd-gpios property in
>>> the MMC node pointing to a GPIO node. However, as U-Boot tries to save
>>> space by keeping only required nodes using u-boot* properties, several
>>> devices tree result in having only in the MMC node but not the GPIO node
>>> associated to cd-gpios.
>>>
>>> This patch, fixes several ocurrence of this issue.
>>>
>>> Signed-off-by: Walter Lozano <walter.lozano@collabora.com>
>>> ---
>>>
>>>   arch/arm/dts/da850-evm-u-boot.dtsi            |  4 ++++
>>>   arch/arm/dts/da850-lcdk-u-boot.dtsi           |  4 ++++
>>>   arch/arm/dts/rk3288-u-boot.dtsi               |  4 ++++
>>>   arch/arm/dts/rk3288-veyron-speedy-u-boot.dtsi |  2 +-
>>>   arch/arm/dts/rk3288-veyron-u-boot.dtsi        | 11 +++++++++++
>>>   5 files changed, 24 insertions(+), 1 deletion(-)
>>>   create mode 100644 arch/arm/dts/rk3288-veyron-u-boot.dtsi
>>>
>>> diff --git a/arch/arm/dts/da850-evm-u-boot.dtsi b/arch/arm/dts/da850-evm-u-boot.dtsi
>>> index d9afc5edf4..d588628641 100644
>>> --- a/arch/arm/dts/da850-evm-u-boot.dtsi
>>> +++ b/arch/arm/dts/da850-evm-u-boot.dtsi
>>> @@ -39,3 +39,7 @@
>>>   &spi1 {
>>>          u-boot,dm-spl;
>>>   };
>>> +
>>> +&gpio {
>>> +       u-boot,dm-spl;
>>> +};
>> I don't know that this is needed for the da850-evm since it doesn't
>> boot from sd/mmc.  It can boot from SPI, NAND or NOR Flash depending
>> on the config option selected, but none of them need the gpio during
>> SPL.  The gpio is loaded during normal U-Boot.  I will try to run some
>> tests to make sure it still boots in the next few days.  I know space
>> is getting tight in SPL.
> I applied your patches and built.
> FYI, "git am" didn't let them apply nicely, but there could be some
> missing dependent patches I was missing.  I was able to patch with
> "patch"
> The board booted as expected.


Thanks for your feedback and testing.


> I examined the generated dtb for SPL since this board doesn't use
> OF_PLATDATA.  It looks like we could remove both the GPIO and the MMC
> modes from SPL, but I'm not going to worry about it unless we can't
> boot any more.  If/when that happens, I'll spend more time trying to
> free up space in SPL.
> For now,, for the series...
>
> Tested-by: Adam Ford <aford173@gmail.com> #da850-evm
>   

I found this possible issue while testing different configurations, but 
it is more related to omapl138_lcdk_defconfig (da850-lcdk) which seems 
to use OF_PLATDATA. In the case of da850-evm, if there are issue with 
space in SPL, maybe we can consider removing both MMC and GPIO node and 
also enable OF_PLATDATA, hopefully if omapl138_lcdk_defconfig works as 
expected the effort would be little.

Regards,

Walter

>>> diff --git a/arch/arm/dts/da850-lcdk-u-boot.dtsi b/arch/arm/dts/da850-lcdk-u-boot.dtsi
>>> index b372d06ca9..d50775c173 100644
>>> --- a/arch/arm/dts/da850-lcdk-u-boot.dtsi
>>> +++ b/arch/arm/dts/da850-lcdk-u-boot.dtsi
>>> @@ -28,3 +28,7 @@
>>>   &serial2 {
>>>          u-boot,dm-spl;
>>>   };
>>> +
>>> +&gpio {
>>> +       u-boot,dm-spl;
>>> +};
>>> diff --git a/arch/arm/dts/rk3288-u-boot.dtsi b/arch/arm/dts/rk3288-u-boot.dtsi
>>> index 6d31735362..51b6e018bd 100644
>>> --- a/arch/arm/dts/rk3288-u-boot.dtsi
>>> +++ b/arch/arm/dts/rk3288-u-boot.dtsi
>>> @@ -43,3 +43,7 @@
>>>   &noc {
>>>          u-boot,dm-pre-reloc;
>>>   };
>>> +
>>> +&gpio7 {
>>> +       u-boot,dm-pre-reloc;
>>> +};
>>> diff --git a/arch/arm/dts/rk3288-veyron-speedy-u-boot.dtsi b/arch/arm/dts/rk3288-veyron-speedy-u-boot.dtsi
>>> index eccc069368..251fbdee71 100644
>>> --- a/arch/arm/dts/rk3288-veyron-speedy-u-boot.dtsi
>>> +++ b/arch/arm/dts/rk3288-veyron-speedy-u-boot.dtsi
>>> @@ -3,7 +3,7 @@
>>>    * Copyright 2015 Google, Inc
>>>    */
>>>
>>> -#include "rk3288-u-boot.dtsi"
>>> +#include "rk3288-veyron-u-boot.dtsi"
>>>
>>>   &dmc {
>>>          rockchip,pctl-timing = <0x215 0xc8 0x0 0x35 0x26 0x2 0x70 0x2000d
>>> diff --git a/arch/arm/dts/rk3288-veyron-u-boot.dtsi b/arch/arm/dts/rk3288-veyron-u-boot.dtsi
>>> new file mode 100644
>>> index 0000000000..899fe6e7a0
>>> --- /dev/null
>>> +++ b/arch/arm/dts/rk3288-veyron-u-boot.dtsi
>>> @@ -0,0 +1,11 @@
>>> +// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
>>> +/*
>>> + * Copyright 2015 Google, Inc
>>> + */
>>> +
>>> +#include "rk3288-u-boot.dtsi"
>>> +
>>> +&gpio7 {
>>> +       u-boot,dm-pre-reloc;
>>> +};
>>> +
>>> --
>>> 2.20.1
>>>

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [PATCH v4 02/14] dtoc: add missing code comments
  2020-06-26  1:42   ` Simon Glass
@ 2020-06-26 13:18     ` Walter Lozano
  2020-06-29 17:26       ` Simon Glass
  2020-07-06  1:31       ` Simon Glass
  0 siblings, 2 replies; 46+ messages in thread
From: Walter Lozano @ 2020-06-26 13:18 UTC (permalink / raw)
  To: u-boot

Hi Simon,

On 25/6/20 22:42, Simon Glass wrote:
> On Wed, 24 Jun 2020 at 22:10, Walter Lozano <walter.lozano@collabora.com> wrote:
>> Add missing information about internal class members in order to make
>> the code easier to follow.
>>
>> Signed-off-by: Walter Lozano <walter.lozano@collabora.com>
>> ---
>>
>>   tools/dtoc/dtb_platdata.py | 3 +++
>>   1 file changed, 3 insertions(+)
>>
> Reviewed-by: Simon Glass <sjg@chromium.org>
>
> BTW if there was a review tag from last version, please add it to your commit.


Thanks for pointing that, I'll take you advice for those commit that 
doesn't change at all. Also thank you for all the time you spent 
reviewing this series and sharing suggestions.

Regards,

Walter

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [PATCH v4 02/14] dtoc: add missing code comments
  2020-06-26 13:18     ` Walter Lozano
@ 2020-06-29 17:26       ` Simon Glass
  2020-07-06  1:31       ` Simon Glass
  1 sibling, 0 replies; 46+ messages in thread
From: Simon Glass @ 2020-06-29 17:26 UTC (permalink / raw)
  To: u-boot

Hi Walter,

On Fri, 26 Jun 2020 at 07:18, Walter Lozano <walter.lozano@collabora.com> wrote:
>
> Hi Simon,
>
> On 25/6/20 22:42, Simon Glass wrote:
> > On Wed, 24 Jun 2020 at 22:10, Walter Lozano <walter.lozano@collabora.com> wrote:
> >> Add missing information about internal class members in order to make
> >> the code easier to follow.
> >>
> >> Signed-off-by: Walter Lozano <walter.lozano@collabora.com>
> >> ---
> >>
> >>   tools/dtoc/dtb_platdata.py | 3 +++
> >>   1 file changed, 3 insertions(+)
> >>
> > Reviewed-by: Simon Glass <sjg@chromium.org>
> >
> > BTW if there was a review tag from last version, please add it to your commit.
>
>
> Thanks for pointing that, I'll take you advice for those commit that
> doesn't change at all. Also thank you for all the time you spent
> reviewing this series and sharing suggestions.

You're welcome. It's a great improvement to of-platdata! You can add
it the tag unless you make a major change to a commit.

Regards,
Simon

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [PATCH v4 04/14] dtoc: add support to scan drivers
  2020-06-26  1:43   ` Simon Glass
@ 2020-07-02 19:47     ` Simon Glass
  2020-07-03 11:08       ` Walter Lozano
  0 siblings, 1 reply; 46+ messages in thread
From: Simon Glass @ 2020-07-02 19:47 UTC (permalink / raw)
  To: u-boot

Hi Walter,

On Thu, 25 Jun 2020 at 19:43, Simon Glass <sjg@chromium.org> wrote:
>
> On Wed, 24 Jun 2020 at 22:10, Walter Lozano <walter.lozano@collabora.com> wrote:
> >
> > Currently dtoc scans dtbs to convert them to struct platdata and
> > to generate U_BOOT_DEVICE entries. These entries need to be filled
> > with the driver name, but at this moment the information used is the
> > compatible name present in the dtb. This causes that only nodes with
> > a compatible name that matches a driver name generate a working
> > entry.
> >
> > In order to improve this behaviour, this patch adds to dtoc the
> > capability of scan drivers source code to generate a list of valid driver
> > names and aliases. This allows to generate U_BOOT_DEVICE entries using
> > valid driver names and rise a warning in the case a name is not valid.
> >
> > Signed-off-by: Walter Lozano <walter.lozano@collabora.com>
> > ---
> >
> >  tools/dtoc/dtb_platdata.py | 91 ++++++++++++++++++++++++++++++++++++--
> >  tools/dtoc/test_dtoc.py    | 33 ++++++++++++++
> >  2 files changed, 120 insertions(+), 4 deletions(-)
> >
>
> Reviewed-by: Simon Glass <sjg@chromium.org>

Unfortunately this patch seems to be missing a file
dtoc_test_driver_alias.dts without which the tests fail. Can you
please resend just this patch?

Regards,
Simon

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [PATCH v4 04/14] dtoc: add support to scan drivers
  2020-07-02 19:47     ` Simon Glass
@ 2020-07-03 11:08       ` Walter Lozano
  0 siblings, 0 replies; 46+ messages in thread
From: Walter Lozano @ 2020-07-03 11:08 UTC (permalink / raw)
  To: u-boot


On 2/7/20 16:47, Simon Glass wrote:
> Hi Walter,
>
> On Thu, 25 Jun 2020 at 19:43, Simon Glass <sjg@chromium.org> wrote:
>> On Wed, 24 Jun 2020 at 22:10, Walter Lozano <walter.lozano@collabora.com> wrote:
>>> Currently dtoc scans dtbs to convert them to struct platdata and
>>> to generate U_BOOT_DEVICE entries. These entries need to be filled
>>> with the driver name, but at this moment the information used is the
>>> compatible name present in the dtb. This causes that only nodes with
>>> a compatible name that matches a driver name generate a working
>>> entry.
>>>
>>> In order to improve this behaviour, this patch adds to dtoc the
>>> capability of scan drivers source code to generate a list of valid driver
>>> names and aliases. This allows to generate U_BOOT_DEVICE entries using
>>> valid driver names and rise a warning in the case a name is not valid.
>>>
>>> Signed-off-by: Walter Lozano <walter.lozano@collabora.com>
>>> ---
>>>
>>>   tools/dtoc/dtb_platdata.py | 91 ++++++++++++++++++++++++++++++++++++--
>>>   tools/dtoc/test_dtoc.py    | 33 ++++++++++++++
>>>   2 files changed, 120 insertions(+), 4 deletions(-)
>>>
>> Reviewed-by: Simon Glass <sjg@chromium.org>
> Unfortunately this patch seems to be missing a file
> dtoc_test_driver_alias.dts without which the tests fail. Can you
> please resend just this patch?
>

Sorry for the mistake. I've just sent the patch.

Thanks for your time and deep review.

Regards,

Walter

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [PATCH v4 14/14] dtoc: add test for cd-gpios
  2020-06-25  4:10 ` [PATCH v4 14/14] dtoc: add test for cd-gpios Walter Lozano
  2020-06-26  1:43   ` Simon Glass
@ 2020-07-06  1:29   ` sjg at chromium.org
  1 sibling, 0 replies; 46+ messages in thread
From: sjg at chromium.org @ 2020-07-06  1:29 UTC (permalink / raw)
  To: u-boot

On Wed, 24 Jun 2020 at 22:11, Walter Lozano <walter.lozano@collabora.com> wrote:
>
> Add a test for dtoc taking into account the cd-gpios property.
>
> Signed-off-by: Walter Lozano <walter.lozano@collabora.com>
> ---
>
>  tools/dtoc/dtoc_test_phandle_cd_gpios.dts | 42 ++++++++++++++
>  tools/dtoc/test_dtoc.py                   | 67 +++++++++++++++++++++++
>  2 files changed, 109 insertions(+)
>  create mode 100644 tools/dtoc/dtoc_test_phandle_cd_gpios.dts

Reviewed-by: Simon Glass <sjg@chromium.org>

Applied to u-boot-dm, thanks!

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [PATCH v4 13/14] dtoc: update dtb_platdata to support cd-gpios
  2020-06-25  4:10 ` [PATCH v4 13/14] dtoc: update dtb_platdata to support cd-gpios Walter Lozano
  2020-06-26  1:43   ` Simon Glass
@ 2020-07-06  1:29   ` Simon Glass
  1 sibling, 0 replies; 46+ messages in thread
From: Simon Glass @ 2020-07-06  1:29 UTC (permalink / raw)
  To: u-boot

On Wed, 24 Jun 2020 at 22:11, Walter Lozano <walter.lozano@collabora.com> wrote:
>
> Currently dtoc does not support the property cd-gpios used to declare
> the gpios for card detect in mmc.
>
> This patch adds support to cd-gpios property.
>
> Signed-off-by: Walter Lozano <walter.lozano@collabora.com>
> ---
>
>  tools/dtoc/dtb_platdata.py | 16 ++++++++++------
>  tools/dtoc/test_dtoc.py    |  2 +-
>  2 files changed, 11 insertions(+), 7 deletions(-)
>

Reviewed-by: Simon Glass <sjg@chromium.org>

Applied to u-boot-dm, thanks!

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [PATCH v4 12/14] arm: dts: include gpio nodes for card detect
  2020-06-26 12:26     ` Adam Ford
  2020-06-26 13:11       ` Walter Lozano
@ 2020-07-06  1:31       ` Simon Glass
  1 sibling, 0 replies; 46+ messages in thread
From: Simon Glass @ 2020-07-06  1:31 UTC (permalink / raw)
  To: u-boot

Hi Adam,

On 26/6/20 09:26, Adam Ford wrote:
> On Thu, Jun 25, 2020 at 11:37 PM Adam Ford <aford173@gmail.com> wrote:
>> On Wed, Jun 24, 2020 at 11:11 PM Walter Lozano
>> <walter.lozano@collabora.com> wrote:
>>> Several MMC drivers use GPIO for card detection with cd-gpios property in
>>> the MMC node pointing to a GPIO node. However, as U-Boot tries to save
>>> space by keeping only required nodes using u-boot* properties, several
>>> devices tree result in having only in the MMC node but not the GPIO node
>>> associated to cd-gpios.
>>>
>>> This patch, fixes several ocurrence of this issue.
>>>
>>> Signed-off-by: Walter Lozano <walter.lozano@collabora.com>
>>> ---
>>>
>>>   arch/arm/dts/da850-evm-u-boot.dtsi            |  4 ++++
>>>   arch/arm/dts/da850-lcdk-u-boot.dtsi           |  4 ++++
>>>   arch/arm/dts/rk3288-u-boot.dtsi               |  4 ++++
>>>   arch/arm/dts/rk3288-veyron-speedy-u-boot.dtsi |  2 +-
>>>   arch/arm/dts/rk3288-veyron-u-boot.dtsi        | 11 +++++++++++
>>>   5 files changed, 24 insertions(+), 1 deletion(-)
>>>   create mode 100644 arch/arm/dts/rk3288-veyron-u-boot.dtsi
>>>
Applied to u-boot-dm/next, thanks!

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [PATCH v4 11/14] dm: doc: update of-plat with new phandle support
  2020-06-25  4:10 ` [PATCH v4 11/14] dm: doc: update of-plat with new phandle support Walter Lozano
  2020-06-26  1:43   ` Simon Glass
@ 2020-07-06  1:31   ` Simon Glass
  1 sibling, 0 replies; 46+ messages in thread
From: Simon Glass @ 2020-07-06  1:31 UTC (permalink / raw)
  To: u-boot

On Wed, 24 Jun 2020 at 22:11, Walter Lozano <walter.lozano@collabora.com> wrote:
>
> Update documentation to reflect the new phandle support when OF_PLATDATA
> is used. Now phandles are implemented as pointers to U_BOOT_DEVICE,
> which makes it possible to get a pointer to the actual device.
>
> Signed-off-by: Walter Lozano <walter.lozano@collabora.com>
> ---
>
>  doc/driver-model/of-plat.rst | 24 ++++++++++++++++--------
>  1 file changed, 16 insertions(+), 8 deletions(-)
>

Reviewed-by: Simon Glass <sjg@chromium.org>

Applied to u-boot-dm/next, thanks!

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [PATCH v4 09/14] sandbox: Move section u_boot_list to make it RW
  2020-06-25  4:10 ` [PATCH v4 09/14] sandbox: Move section u_boot_list to make it RW Walter Lozano
  2020-06-26  1:43   ` Simon Glass
@ 2020-07-06  1:31   ` Simon Glass
  1 sibling, 0 replies; 46+ messages in thread
From: Simon Glass @ 2020-07-06  1:31 UTC (permalink / raw)
  To: u-boot

On Wed, 24 Jun 2020 at 22:11, Walter Lozano <walter.lozano@collabora.com> wrote:
>
> In order to be able to update data in u_boot_list, move this section to
> make it RW.
>
> Signed-off-by: Walter Lozano <walter.lozano@collabora.com>
> ---
>
>  arch/sandbox/cpu/u-boot-spl.lds | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)

Reviewed-by: Simon Glass <sjg@chromium.org>

Applied to u-boot-dm/next, thanks!

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [PATCH v4 08/14] core: extend struct driver_info to point to device
  2020-06-25  4:10 ` [PATCH v4 08/14] core: extend struct driver_info to point to device Walter Lozano
  2020-06-26  1:43   ` Simon Glass
@ 2020-07-06  1:31   ` Simon Glass
  1 sibling, 0 replies; 46+ messages in thread
From: Simon Glass @ 2020-07-06  1:31 UTC (permalink / raw)
  To: u-boot

On Wed, 24 Jun 2020 at 22:11, Walter Lozano <walter.lozano@collabora.com> wrote:
>
> Currently when creating an U_BOOT_DEVICE entry a struct driver_info
> is declared, which contains the data needed to instantiate the device.
> However, the actual device is created at runtime and there is no proper
> way to get the device based on its struct driver_info.
>
> This patch extends struct driver_info adding a pointer to udevice which
> is populated during the bind process, allowing to generate a set of
> functions to get the device based on its struct driver_info.
>
> Signed-off-by: Walter Lozano <walter.lozano@collabora.com>
> ---
>
>  drivers/core/device.c | 26 +++++++++++++++++++++++---
>  drivers/core/root.c   |  4 ++++
>  include/dm/device.h   | 15 +++++++++++++++
>  include/dm/platdata.h | 14 ++++++++++++++
>  4 files changed, 56 insertions(+), 3 deletions(-)


Reviewed-by: Simon Glass <sjg@chromium.org>

Applied to u-boot-dm/next, thanks!

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [PATCH v4 07/14] core: drop const for struct driver_info
  2020-06-25  4:10 ` [PATCH v4 07/14] core: drop const for struct driver_info Walter Lozano
  2020-06-26  1:43   ` Simon Glass
@ 2020-07-06  1:31   ` Simon Glass
  1 sibling, 0 replies; 46+ messages in thread
From: Simon Glass @ 2020-07-06  1:31 UTC (permalink / raw)
  To: u-boot

On Wed, 24 Jun 2020 at 22:11, Walter Lozano <walter.lozano@collabora.com> wrote:
>
> In order to prepare for a new support of phandle when OF_PLATDATA is used
> drop the const for struct driver_info as this struct will need to be
> updated on runtime.
>
> Signed-off-by: Walter Lozano <walter.lozano@collabora.com>
> ---
>
>  drivers/core/device.c        | 2 +-
>  drivers/core/root.c          | 2 +-
>  include/dm/device-internal.h | 2 +-
>  3 files changed, 3 insertions(+), 3 deletions(-)

Reviewed-by: Simon Glass <sjg@chromium.org>

Applied to u-boot-dm/next, thanks!

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [PATCH v4 06/14] dm: doc: update of-plat with the support for driver aliases
  2020-06-25  4:10 ` [PATCH v4 06/14] dm: doc: update of-plat with the support for driver aliases Walter Lozano
  2020-06-26  1:43   ` Simon Glass
@ 2020-07-06  1:31   ` Simon Glass
  1 sibling, 0 replies; 46+ messages in thread
From: Simon Glass @ 2020-07-06  1:31 UTC (permalink / raw)
  To: u-boot

On Wed, 24 Jun 2020 at 22:11, Walter Lozano <walter.lozano@collabora.com> wrote:
>
> Update the documentation with the support for driver aliases using
> U_BOOT_DRIVER_ALIAS.
>
> Signed-off-by: Walter Lozano <walter.lozano@collabora.com>
> ---
>
>  doc/driver-model/of-plat.rst | 14 +++++++++++++-
>  1 file changed, 13 insertions(+), 1 deletion(-)

Reviewed-by: Simon Glass <sjg@chromium.org>

Applied to u-boot-dm/next, thanks!

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [PATCH v4 05/14] dtoc: add option to disable warnings
  2020-06-25  4:10 ` [PATCH v4 05/14] dtoc: add option to disable warnings Walter Lozano
  2020-06-26  1:43   ` Simon Glass
@ 2020-07-06  1:31   ` Simon Glass
  1 sibling, 0 replies; 46+ messages in thread
From: Simon Glass @ 2020-07-06  1:31 UTC (permalink / raw)
  To: u-boot

On Wed, 24 Jun 2020 at 22:11, Walter Lozano <walter.lozano@collabora.com> wrote:
>
> As dtoc now performs checks for valid driver names, when running dtoc
> tests several warnings arise as these tests don't use valid driver
> names.
>
> This patch adds an option to disable those warning, which is only
> intended for running tests.
>
> Signed-off-by: Walter Lozano <walter.lozano@collabora.com>
> ---
>
>  tools/dtoc/dtb_platdata.py              | 13 ++--
>  tools/dtoc/dtoc_test_invalid_driver.dts | 15 ++++
>  tools/dtoc/test_dtoc.py                 | 91 +++++++++++++++++--------
>  3 files changed, 85 insertions(+), 34 deletions(-)
>  create mode 100644 tools/dtoc/dtoc_test_invalid_driver.dts

Reviewed-by: Simon Glass <sjg@chromium.org>

Applied to u-boot-dm/next, thanks!

^ permalink raw reply	[flat|nested] 46+ messages in thread

* [PATCH v4 02/14] dtoc: add missing code comments
  2020-06-26 13:18     ` Walter Lozano
  2020-06-29 17:26       ` Simon Glass
@ 2020-07-06  1:31       ` Simon Glass
  1 sibling, 0 replies; 46+ messages in thread
From: Simon Glass @ 2020-07-06  1:31 UTC (permalink / raw)
  To: u-boot

Hi Walter,

On Fri, 26 Jun 2020 at 07:18, Walter Lozano <walter.lozano@collabora.com> wrote:
>
> Hi Simon,
>
> On 25/6/20 22:42, Simon Glass wrote:
> > On Wed, 24 Jun 2020 at 22:10, Walter Lozano <walter.lozano@collabora.com> wrote:
> >> Add missing information about internal class members in order to make
> >> the code easier to follow.
> >>
> >> Signed-off-by: Walter Lozano <walter.lozano@collabora.com>
> >> ---
> >>
> >>   tools/dtoc/dtb_platdata.py | 3 +++
> >>   1 file changed, 3 insertions(+)
> >>
> > Reviewed-by: Simon Glass <sjg@chromium.org>
> >
> > BTW if there was a review tag from last version, please add it to your commit.
>
>
> Thanks for pointing that, I'll take you advice for those commit that
> doesn't change at all. Also thank you for all the time you spent
> reviewing this series and sharing suggestions.

You're welcome. It's a great improvement to of-platdata! You can add
it the tag unless you make a major change to a commit.

Regards,
Simon

Applied to u-boot-dm/next, thanks!

^ permalink raw reply	[flat|nested] 46+ messages in thread

end of thread, other threads:[~2020-07-06  1:31 UTC | newest]

Thread overview: 46+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-06-25  4:10 [PATCH v4 00/14] improve OF_PLATDATA support Walter Lozano
2020-06-25  4:10 ` [PATCH v4 01/14] drivers: rename drivers to match compatible string Walter Lozano
2020-06-26  1:42   ` Simon Glass
2020-06-25  4:10 ` [PATCH v4 02/14] dtoc: add missing code comments Walter Lozano
2020-06-26  1:42   ` Simon Glass
2020-06-26 13:18     ` Walter Lozano
2020-06-29 17:26       ` Simon Glass
2020-07-06  1:31       ` Simon Glass
2020-06-25  4:10 ` [PATCH v4 03/14] core: add support for U_BOOT_DRIVER_ALIAS Walter Lozano
2020-06-26  1:43   ` Simon Glass
2020-06-25  4:10 ` [PATCH v4 04/14] dtoc: add support to scan drivers Walter Lozano
2020-06-26  1:43   ` Simon Glass
2020-07-02 19:47     ` Simon Glass
2020-07-03 11:08       ` Walter Lozano
2020-06-25  4:10 ` [PATCH v4 05/14] dtoc: add option to disable warnings Walter Lozano
2020-06-26  1:43   ` Simon Glass
2020-07-06  1:31   ` Simon Glass
2020-06-25  4:10 ` [PATCH v4 06/14] dm: doc: update of-plat with the support for driver aliases Walter Lozano
2020-06-26  1:43   ` Simon Glass
2020-07-06  1:31   ` Simon Glass
2020-06-25  4:10 ` [PATCH v4 07/14] core: drop const for struct driver_info Walter Lozano
2020-06-26  1:43   ` Simon Glass
2020-07-06  1:31   ` Simon Glass
2020-06-25  4:10 ` [PATCH v4 08/14] core: extend struct driver_info to point to device Walter Lozano
2020-06-26  1:43   ` Simon Glass
2020-07-06  1:31   ` Simon Glass
2020-06-25  4:10 ` [PATCH v4 09/14] sandbox: Move section u_boot_list to make it RW Walter Lozano
2020-06-26  1:43   ` Simon Glass
2020-07-06  1:31   ` Simon Glass
2020-06-25  4:10 ` [PATCH v4 10/14] dtoc: extend dtoc to use struct driver_info when linking nodes Walter Lozano
2020-06-26  1:43   ` Simon Glass
2020-06-25  4:10 ` [PATCH v4 11/14] dm: doc: update of-plat with new phandle support Walter Lozano
2020-06-26  1:43   ` Simon Glass
2020-07-06  1:31   ` Simon Glass
2020-06-25  4:10 ` [PATCH v4 12/14] arm: dts: include gpio nodes for card detect Walter Lozano
2020-06-26  1:43   ` Simon Glass
2020-06-26  4:37   ` Adam Ford
2020-06-26 12:26     ` Adam Ford
2020-06-26 13:11       ` Walter Lozano
2020-07-06  1:31       ` Simon Glass
2020-06-25  4:10 ` [PATCH v4 13/14] dtoc: update dtb_platdata to support cd-gpios Walter Lozano
2020-06-26  1:43   ` Simon Glass
2020-07-06  1:29   ` Simon Glass
2020-06-25  4:10 ` [PATCH v4 14/14] dtoc: add test for cd-gpios Walter Lozano
2020-06-26  1:43   ` Simon Glass
2020-07-06  1:29   ` sjg at chromium.org

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.