[U-Boot] [PATCH 0/4] davinci: omapl138-lcdk: enable CONFIG_SPL_DM

From: Bartosz Golaszewski bgolaszewski@baylibre.com
This series enables the driver model in SPL on omapl138-lcdk. First two patches enable size-reducing options in defconfig. The third patch is just a cleanup of the board file. Last patch enables the driver model and defines the serial device so that we don't have to disable CONFIG_SPL_DM_SERIAL which is enabled by default when selecting CONFIG_SPL_DM.
Bartosz Golaszewski (4): davinci: omapl138-lcdk: enable SPL_SYS_MALLOC_SIMPLE davinci: omapl138-lcdk: enable CONFIG_USE_TINY_PRINTF davinci: omapl138-lcdk: remove unneeded includes davinci: omapl138-lcdk: enable driver-model in SPL
board/davinci/da8xxevm/omapl138_lcdk.c | 18 ++++++++++++++++-- configs/omapl138_lcdk_defconfig | 7 +++++++ 2 files changed, 23 insertions(+), 2 deletions(-)

From: Bartosz Golaszewski bgolaszewski@baylibre.com
We're working towards enabling the driver model in SPL for da850-lcdk. Enable SPL_SYS_MALLOC_SIMPLE in defconfig to reduce SPL size.
Signed-off-by: Bartosz Golaszewski bgolaszewski@baylibre.com --- configs/omapl138_lcdk_defconfig | 1 + 1 file changed, 1 insertion(+)
diff --git a/configs/omapl138_lcdk_defconfig b/configs/omapl138_lcdk_defconfig index e43141844a..c8c20b0de1 100644 --- a/configs/omapl138_lcdk_defconfig +++ b/configs/omapl138_lcdk_defconfig @@ -19,6 +19,7 @@ CONFIG_VERSION_VARIABLE=y CONFIG_BOARD_EARLY_INIT_F=y CONFIG_SPL_TEXT_BASE=0x80000000 CONFIG_SPL_BOARD_INIT=y +CONFIG_SPL_SYS_MALLOC_SIMPLE=y CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR=0xb5 CONFIG_SPL_NAND_SUPPORT=y CONFIG_HUSH_PARSER=y

From: Bartosz Golaszewski bgolaszewski@baylibre.com
We're working towards enabling the driver-model in SPL for da850-lcdk. Enable CONFIG_USE_TINY_PRINTF in defconfig to reduce SPL size.
Signed-off-by: Bartosz Golaszewski bgolaszewski@baylibre.com --- configs/omapl138_lcdk_defconfig | 1 + 1 file changed, 1 insertion(+)
diff --git a/configs/omapl138_lcdk_defconfig b/configs/omapl138_lcdk_defconfig index c8c20b0de1..b375da50df 100644 --- a/configs/omapl138_lcdk_defconfig +++ b/configs/omapl138_lcdk_defconfig @@ -57,3 +57,4 @@ CONFIG_DM_SERIAL=y CONFIG_SYS_NS16550=y CONFIG_SPI=y CONFIG_DAVINCI_SPI=y +CONFIG_USE_TINY_PRINTF=y

From: Bartosz Golaszewski bgolaszewski@baylibre.com
There's no SPI on da850-lcdk. Remove unnecessary includes.
Signed-off-by: Bartosz Golaszewski bgolaszewski@baylibre.com --- board/davinci/da8xxevm/omapl138_lcdk.c | 2 -- 1 file changed, 2 deletions(-)
diff --git a/board/davinci/da8xxevm/omapl138_lcdk.c b/board/davinci/da8xxevm/omapl138_lcdk.c index 2c2f885d43..156d61d9fb 100644 --- a/board/davinci/da8xxevm/omapl138_lcdk.c +++ b/board/davinci/da8xxevm/omapl138_lcdk.c @@ -12,8 +12,6 @@ #include <i2c.h> #include <net.h> #include <netdev.h> -#include <spi.h> -#include <spi_flash.h> #include <asm/arch/hardware.h> #include <asm/ti-common/davinci_nand.h> #include <asm/io.h>

From: Bartosz Golaszewski bgolaszewski@baylibre.com
Enable CONFIG_SPL_DM and enable the driver model for serial by defining an appropriate device in the board file for da850-lcdk.
Signed-off-by: Bartosz Golaszewski bgolaszewski@baylibre.com --- board/davinci/da8xxevm/omapl138_lcdk.c | 16 ++++++++++++++++ configs/omapl138_lcdk_defconfig | 5 +++++ 2 files changed, 21 insertions(+)
diff --git a/board/davinci/da8xxevm/omapl138_lcdk.c b/board/davinci/da8xxevm/omapl138_lcdk.c index 156d61d9fb..b20747ba01 100644 --- a/board/davinci/da8xxevm/omapl138_lcdk.c +++ b/board/davinci/da8xxevm/omapl138_lcdk.c @@ -15,6 +15,8 @@ #include <asm/arch/hardware.h> #include <asm/ti-common/davinci_nand.h> #include <asm/io.h> +#include <ns16550.h> +#include <dm/platdata.h> #include <linux/errno.h> #include <asm/mach-types.h> #include <asm/arch/davinci_misc.h> @@ -369,3 +371,17 @@ int board_mmc_init(bd_t *bis) } #endif #endif + +#ifdef CONFIG_SPL_BUILD +static const struct ns16550_platdata serial_pdata = { + .base = DAVINCI_UART2_BASE, + .reg_shift = 2, + .clock = 228000000, + .fcr = UART_FCR_DEFVAL, +}; + +U_BOOT_DEVICE(omapl138_uart) = { + .name = "ns16550_serial", + .platdata = &serial_pdata, +}; +#endif diff --git a/configs/omapl138_lcdk_defconfig b/configs/omapl138_lcdk_defconfig index b375da50df..f53a51321c 100644 --- a/configs/omapl138_lcdk_defconfig +++ b/configs/omapl138_lcdk_defconfig @@ -33,10 +33,13 @@ CONFIG_CMD_MTDPARTS=y CONFIG_CMD_DIAG=y CONFIG_CMD_UBI=y CONFIG_OF_CONTROL=y +CONFIG_SPL_OF_CONTROL=y CONFIG_DEFAULT_DEVICE_TREE="da850-lcdk" +CONFIG_SPL_OF_PLATDATA=y CONFIG_ENV_IS_IN_NAND=y CONFIG_NET_RANDOM_ETHADDR=y CONFIG_DM=y +CONFIG_SPL_DM=y CONFIG_DM_I2C=y CONFIG_DM_I2C_COMPAT=y CONFIG_SYS_I2C_DAVINCI=y @@ -53,8 +56,10 @@ CONFIG_SPI_FLASH_STMICRO=y CONFIG_SPI_FLASH_WINBOND=y CONFIG_MII=y CONFIG_DRIVER_TI_EMAC=y +CONFIG_SPECIFY_CONSOLE_INDEX=y CONFIG_DM_SERIAL=y CONFIG_SYS_NS16550=y CONFIG_SPI=y CONFIG_DAVINCI_SPI=y CONFIG_USE_TINY_PRINTF=y +# CONFIG_SPL_OF_LIBFDT is not set

On Tue, May 28, 2019 at 2:58 AM Bartosz Golaszewski brgl@bgdev.pl wrote:
From: Bartosz Golaszewski bgolaszewski@baylibre.com
Enable CONFIG_SPL_DM and enable the driver model for serial by defining an appropriate device in the board file for da850-lcdk.
Signed-off-by: Bartosz Golaszewski bgolaszewski@baylibre.com
board/davinci/da8xxevm/omapl138_lcdk.c | 16 ++++++++++++++++ configs/omapl138_lcdk_defconfig | 5 +++++ 2 files changed, 21 insertions(+)
diff --git a/board/davinci/da8xxevm/omapl138_lcdk.c b/board/davinci/da8xxevm/omapl138_lcdk.c index 156d61d9fb..b20747ba01 100644 --- a/board/davinci/da8xxevm/omapl138_lcdk.c +++ b/board/davinci/da8xxevm/omapl138_lcdk.c @@ -15,6 +15,8 @@ #include <asm/arch/hardware.h> #include <asm/ti-common/davinci_nand.h> #include <asm/io.h> +#include <ns16550.h> +#include <dm/platdata.h> #include <linux/errno.h> #include <asm/mach-types.h> #include <asm/arch/davinci_misc.h> @@ -369,3 +371,17 @@ int board_mmc_init(bd_t *bis) } #endif #endif
+#ifdef CONFIG_SPL_BUILD +static const struct ns16550_platdata serial_pdata = {
.base = DAVINCI_UART2_BASE,
.reg_shift = 2,
.clock = 228000000,
.fcr = UART_FCR_DEFVAL,
+};
+U_BOOT_DEVICE(omapl138_uart) = {
.name = "ns16550_serial",
.platdata = &serial_pdata,
+}; +#endif diff --git a/configs/omapl138_lcdk_defconfig b/configs/omapl138_lcdk_defconfig index b375da50df..f53a51321c 100644 --- a/configs/omapl138_lcdk_defconfig +++ b/configs/omapl138_lcdk_defconfig @@ -33,10 +33,13 @@ CONFIG_CMD_MTDPARTS=y CONFIG_CMD_DIAG=y CONFIG_CMD_UBI=y CONFIG_OF_CONTROL=y +CONFIG_SPL_OF_CONTROL=y
If SPL_OF_CONTROL is being added, why do you need to manually add the stuff above for the serial port? Checkout the da850-evm-u-boot.dtsi file. I adds the device tree entries for the serial port to appear in the SPL DTB.
See http://git.denx.de/?p=u-boot.git;a=commit;h=f7c1d53605d9ec528abacda9ba1763c6...
CONFIG_DEFAULT_DEVICE_TREE="da850-lcdk" +CONFIG_SPL_OF_PLATDATA=y CONFIG_ENV_IS_IN_NAND=y CONFIG_NET_RANDOM_ETHADDR=y CONFIG_DM=y +CONFIG_SPL_DM=y CONFIG_DM_I2C=y CONFIG_DM_I2C_COMPAT=y CONFIG_SYS_I2C_DAVINCI=y @@ -53,8 +56,10 @@ CONFIG_SPI_FLASH_STMICRO=y CONFIG_SPI_FLASH_WINBOND=y CONFIG_MII=y CONFIG_DRIVER_TI_EMAC=y +CONFIG_SPECIFY_CONSOLE_INDEX=y CONFIG_DM_SERIAL=y CONFIG_SYS_NS16550=y CONFIG_SPI=y CONFIG_DAVINCI_SPI=y CONFIG_USE_TINY_PRINTF=y
+# CONFIG_SPL_OF_LIBFDT is not set
2.21.0

wt., 28 maj 2019 o 17:05 Adam Ford aford173@gmail.com napisał(a):
On Tue, May 28, 2019 at 2:58 AM Bartosz Golaszewski brgl@bgdev.pl wrote:
From: Bartosz Golaszewski bgolaszewski@baylibre.com
Enable CONFIG_SPL_DM and enable the driver model for serial by defining an appropriate device in the board file for da850-lcdk.
Signed-off-by: Bartosz Golaszewski bgolaszewski@baylibre.com
board/davinci/da8xxevm/omapl138_lcdk.c | 16 ++++++++++++++++ configs/omapl138_lcdk_defconfig | 5 +++++ 2 files changed, 21 insertions(+)
diff --git a/board/davinci/da8xxevm/omapl138_lcdk.c b/board/davinci/da8xxevm/omapl138_lcdk.c index 156d61d9fb..b20747ba01 100644 --- a/board/davinci/da8xxevm/omapl138_lcdk.c +++ b/board/davinci/da8xxevm/omapl138_lcdk.c @@ -15,6 +15,8 @@ #include <asm/arch/hardware.h> #include <asm/ti-common/davinci_nand.h> #include <asm/io.h> +#include <ns16550.h> +#include <dm/platdata.h> #include <linux/errno.h> #include <asm/mach-types.h> #include <asm/arch/davinci_misc.h> @@ -369,3 +371,17 @@ int board_mmc_init(bd_t *bis) } #endif #endif
+#ifdef CONFIG_SPL_BUILD +static const struct ns16550_platdata serial_pdata = {
.base = DAVINCI_UART2_BASE,
.reg_shift = 2,
.clock = 228000000,
.fcr = UART_FCR_DEFVAL,
+};
+U_BOOT_DEVICE(omapl138_uart) = {
.name = "ns16550_serial",
.platdata = &serial_pdata,
+}; +#endif diff --git a/configs/omapl138_lcdk_defconfig b/configs/omapl138_lcdk_defconfig index b375da50df..f53a51321c 100644 --- a/configs/omapl138_lcdk_defconfig +++ b/configs/omapl138_lcdk_defconfig @@ -33,10 +33,13 @@ CONFIG_CMD_MTDPARTS=y CONFIG_CMD_DIAG=y CONFIG_CMD_UBI=y CONFIG_OF_CONTROL=y +CONFIG_SPL_OF_CONTROL=y
If SPL_OF_CONTROL is being added, why do you need to manually add the stuff above for the serial port? Checkout the da850-evm-u-boot.dtsi file. I adds the device tree entries for the serial port to appear in the SPL DTB.
See http://git.denx.de/?p=u-boot.git;a=commit;h=f7c1d53605d9ec528abacda9ba1763c6...
I tried to follow the example from this patch but for some reason adding u-boot,dm-spl; to the soc@1c00000 node in da850-lcdk-u-boot.dtsi results in the final image being reported as corrupted by the aisimage tool:
[...] COPY spl/u-boot-spl.dtb CC spl/common/spl/spl.o LD spl/common/spl/built-in.o CC spl/lib/display_options.o LD spl/lib/built-in.o LD spl/u-boot-spl OBJCOPY spl/u-boot-spl-nodtb.bin CAT spl/u-boot-spl-dtb.bin COPY spl/u-boot-spl.bin MKIMAGE spl/u-boot-spl.ais Error: - AIS Image corrupted CAT u-boot.ais CFGCHK u-boot.cfg
The image doen't boot (or at least there's nothing on the console).
I'm not sure what's causing it. Any idea?
Bart
CONFIG_DEFAULT_DEVICE_TREE="da850-lcdk" +CONFIG_SPL_OF_PLATDATA=y CONFIG_ENV_IS_IN_NAND=y CONFIG_NET_RANDOM_ETHADDR=y CONFIG_DM=y +CONFIG_SPL_DM=y CONFIG_DM_I2C=y CONFIG_DM_I2C_COMPAT=y CONFIG_SYS_I2C_DAVINCI=y @@ -53,8 +56,10 @@ CONFIG_SPI_FLASH_STMICRO=y CONFIG_SPI_FLASH_WINBOND=y CONFIG_MII=y CONFIG_DRIVER_TI_EMAC=y +CONFIG_SPECIFY_CONSOLE_INDEX=y CONFIG_DM_SERIAL=y CONFIG_SYS_NS16550=y CONFIG_SPI=y CONFIG_DAVINCI_SPI=y CONFIG_USE_TINY_PRINTF=y
+# CONFIG_SPL_OF_LIBFDT is not set
2.21.0

On Wed, May 29, 2019 at 4:40 AM Bartosz Golaszewski brgl@bgdev.pl wrote:
wt., 28 maj 2019 o 17:05 Adam Ford aford173@gmail.com napisał(a):
On Tue, May 28, 2019 at 2:58 AM Bartosz Golaszewski brgl@bgdev.pl wrote:
From: Bartosz Golaszewski bgolaszewski@baylibre.com
Enable CONFIG_SPL_DM and enable the driver model for serial by defining an appropriate device in the board file for da850-lcdk.
Signed-off-by: Bartosz Golaszewski bgolaszewski@baylibre.com
board/davinci/da8xxevm/omapl138_lcdk.c | 16 ++++++++++++++++ configs/omapl138_lcdk_defconfig | 5 +++++ 2 files changed, 21 insertions(+)
diff --git a/board/davinci/da8xxevm/omapl138_lcdk.c b/board/davinci/da8xxevm/omapl138_lcdk.c index 156d61d9fb..b20747ba01 100644 --- a/board/davinci/da8xxevm/omapl138_lcdk.c +++ b/board/davinci/da8xxevm/omapl138_lcdk.c @@ -15,6 +15,8 @@ #include <asm/arch/hardware.h> #include <asm/ti-common/davinci_nand.h> #include <asm/io.h> +#include <ns16550.h> +#include <dm/platdata.h> #include <linux/errno.h> #include <asm/mach-types.h> #include <asm/arch/davinci_misc.h> @@ -369,3 +371,17 @@ int board_mmc_init(bd_t *bis) } #endif #endif
+#ifdef CONFIG_SPL_BUILD +static const struct ns16550_platdata serial_pdata = {
.base = DAVINCI_UART2_BASE,
.reg_shift = 2,
.clock = 228000000,
.fcr = UART_FCR_DEFVAL,
+};
+U_BOOT_DEVICE(omapl138_uart) = {
.name = "ns16550_serial",
.platdata = &serial_pdata,
+}; +#endif diff --git a/configs/omapl138_lcdk_defconfig b/configs/omapl138_lcdk_defconfig index b375da50df..f53a51321c 100644 --- a/configs/omapl138_lcdk_defconfig +++ b/configs/omapl138_lcdk_defconfig @@ -33,10 +33,13 @@ CONFIG_CMD_MTDPARTS=y CONFIG_CMD_DIAG=y CONFIG_CMD_UBI=y CONFIG_OF_CONTROL=y +CONFIG_SPL_OF_CONTROL=y
If SPL_OF_CONTROL is being added, why do you need to manually add the stuff above for the serial port? Checkout the da850-evm-u-boot.dtsi file. I adds the device tree entries for the serial port to appear in the SPL DTB.
See http://git.denx.de/?p=u-boot.git;a=commit;h=f7c1d53605d9ec528abacda9ba1763c6...
I tried to follow the example from this patch but for some reason adding u-boot,dm-spl; to the soc@1c00000 node in da850-lcdk-u-boot.dtsi results in the final image being reported as corrupted by the aisimage tool:
[...] COPY spl/u-boot-spl.dtb CC spl/common/spl/spl.o LD spl/common/spl/built-in.o CC spl/lib/display_options.o LD spl/lib/built-in.o LD spl/u-boot-spl OBJCOPY spl/u-boot-spl-nodtb.bin CAT spl/u-boot-spl-dtb.bin COPY spl/u-boot-spl.bin MKIMAGE spl/u-boot-spl.ais Error: - AIS Image corrupted CAT u-boot.ais CFGCHK u-boot.cfg
The image doen't boot (or at least there's nothing on the console).
I'm not sure what's causing it. Any idea?
I got the same 'AIS Image corrupted' message if the SPL + DTB image is too large.
I enabled SPL_SYS_MALLOC_SIMPLE along with USE_TINY_PRINTF reduced my code size: (see commit c4fa049a121457ff38b74daac32e18d7afbd4538) Original: text data bss dec hex filename 20760 1216 80 22056 5628 spl/u-boot-spl
Tiny Printf text data bss dec hex filename 17947 1216 80 19243 4b2b spl/u-boot-spl
Malloc Simple + Tiny Printf text data bss dec hex filename 15187 176 28 15391 3c1f spl/u-boot-spl
I think you can also setup CONFIG_SPL_SYS_THUMB_BUILD to also reduce size. The DA850 evm has that and CONFIG_SYS_THUMB_BUILD set to shrink U-Boot. I just ran some checks and disabling CONFIG_SPL_SYS_THUMB_BUILD makes the u-boot-spl file overflow the space requirements. With it enabled, it builds text data bss dec hex filename 24356 1144 24 25524 63b4 spl/u-boot-spl
For U-Boot proper, the difference between CONFIG_SYS_THUMB_BUILD and not using it is
with CONFIG_SYS_THUMB_BUILD text data bss dec hex filename 324147 19700 58256 402103 622b7 u-boot
(not using it) text data bss dec hex filename 423167 19700 58248 501115 7a57b u-boot
So the size is about 25% smaller with it enabled.
Unrelated to size, but something you want to consider is to increase your available malloc pool size to accommodate the device tree stuff once you've managed to shrink the code. For da850evm, SPL_SYS_MALLOC_F_LEN = 0x800
adam
Bart
CONFIG_DEFAULT_DEVICE_TREE="da850-lcdk" +CONFIG_SPL_OF_PLATDATA=y CONFIG_ENV_IS_IN_NAND=y CONFIG_NET_RANDOM_ETHADDR=y CONFIG_DM=y +CONFIG_SPL_DM=y CONFIG_DM_I2C=y CONFIG_DM_I2C_COMPAT=y CONFIG_SYS_I2C_DAVINCI=y @@ -53,8 +56,10 @@ CONFIG_SPI_FLASH_STMICRO=y CONFIG_SPI_FLASH_WINBOND=y CONFIG_MII=y CONFIG_DRIVER_TI_EMAC=y +CONFIG_SPECIFY_CONSOLE_INDEX=y CONFIG_DM_SERIAL=y CONFIG_SYS_NS16550=y CONFIG_SPI=y CONFIG_DAVINCI_SPI=y CONFIG_USE_TINY_PRINTF=y
+# CONFIG_SPL_OF_LIBFDT is not set
2.21.0

śr., 29 maj 2019 o 15:04 Adam Ford aford173@gmail.com napisał(a):
On Wed, May 29, 2019 at 4:40 AM Bartosz Golaszewski brgl@bgdev.pl wrote:
wt., 28 maj 2019 o 17:05 Adam Ford aford173@gmail.com napisał(a):
On Tue, May 28, 2019 at 2:58 AM Bartosz Golaszewski brgl@bgdev.pl wrote:
From: Bartosz Golaszewski bgolaszewski@baylibre.com
Enable CONFIG_SPL_DM and enable the driver model for serial by defining an appropriate device in the board file for da850-lcdk.
Signed-off-by: Bartosz Golaszewski bgolaszewski@baylibre.com
board/davinci/da8xxevm/omapl138_lcdk.c | 16 ++++++++++++++++ configs/omapl138_lcdk_defconfig | 5 +++++ 2 files changed, 21 insertions(+)
diff --git a/board/davinci/da8xxevm/omapl138_lcdk.c b/board/davinci/da8xxevm/omapl138_lcdk.c index 156d61d9fb..b20747ba01 100644 --- a/board/davinci/da8xxevm/omapl138_lcdk.c +++ b/board/davinci/da8xxevm/omapl138_lcdk.c @@ -15,6 +15,8 @@ #include <asm/arch/hardware.h> #include <asm/ti-common/davinci_nand.h> #include <asm/io.h> +#include <ns16550.h> +#include <dm/platdata.h> #include <linux/errno.h> #include <asm/mach-types.h> #include <asm/arch/davinci_misc.h> @@ -369,3 +371,17 @@ int board_mmc_init(bd_t *bis) } #endif #endif
+#ifdef CONFIG_SPL_BUILD +static const struct ns16550_platdata serial_pdata = {
.base = DAVINCI_UART2_BASE,
.reg_shift = 2,
.clock = 228000000,
.fcr = UART_FCR_DEFVAL,
+};
+U_BOOT_DEVICE(omapl138_uart) = {
.name = "ns16550_serial",
.platdata = &serial_pdata,
+}; +#endif diff --git a/configs/omapl138_lcdk_defconfig b/configs/omapl138_lcdk_defconfig index b375da50df..f53a51321c 100644 --- a/configs/omapl138_lcdk_defconfig +++ b/configs/omapl138_lcdk_defconfig @@ -33,10 +33,13 @@ CONFIG_CMD_MTDPARTS=y CONFIG_CMD_DIAG=y CONFIG_CMD_UBI=y CONFIG_OF_CONTROL=y +CONFIG_SPL_OF_CONTROL=y
If SPL_OF_CONTROL is being added, why do you need to manually add the stuff above for the serial port? Checkout the da850-evm-u-boot.dtsi file. I adds the device tree entries for the serial port to appear in the SPL DTB.
See http://git.denx.de/?p=u-boot.git;a=commit;h=f7c1d53605d9ec528abacda9ba1763c6...
I tried to follow the example from this patch but for some reason adding u-boot,dm-spl; to the soc@1c00000 node in da850-lcdk-u-boot.dtsi results in the final image being reported as corrupted by the aisimage tool:
[...] COPY spl/u-boot-spl.dtb CC spl/common/spl/spl.o LD spl/common/spl/built-in.o CC spl/lib/display_options.o LD spl/lib/built-in.o LD spl/u-boot-spl OBJCOPY spl/u-boot-spl-nodtb.bin CAT spl/u-boot-spl-dtb.bin COPY spl/u-boot-spl.bin MKIMAGE spl/u-boot-spl.ais Error: - AIS Image corrupted CAT u-boot.ais CFGCHK u-boot.cfg
The image doen't boot (or at least there's nothing on the console).
I'm not sure what's causing it. Any idea?
I got the same 'AIS Image corrupted' message if the SPL + DTB image is too large.
I enabled SPL_SYS_MALLOC_SIMPLE along with USE_TINY_PRINTF reduced my code size: (see commit c4fa049a121457ff38b74daac32e18d7afbd4538) Original: text data bss dec hex filename 20760 1216 80 22056 5628 spl/u-boot-spl
Tiny Printf text data bss dec hex filename 17947 1216 80 19243 4b2b spl/u-boot-spl Malloc Simple + Tiny Printf text data bss dec hex filename 15187 176 28 15391 3c1f spl/u-boot-spl
I think you can also setup CONFIG_SPL_SYS_THUMB_BUILD to also reduce size. The DA850 evm has that and CONFIG_SYS_THUMB_BUILD set to shrink U-Boot. I just ran some checks and disabling CONFIG_SPL_SYS_THUMB_BUILD makes the u-boot-spl file overflow the space requirements. With it enabled, it builds text data bss dec hex filename 24356 1144 24 25524 63b4 spl/u-boot-spl
For U-Boot proper, the difference between CONFIG_SYS_THUMB_BUILD and not using it is
with CONFIG_SYS_THUMB_BUILD text data bss dec hex filename 324147 19700 58256 402103 622b7 u-boot
(not using it) text data bss dec hex filename 423167 19700 58248 501115 7a57b u-boot
Even with THUMB and other code shrinking options I still get the same error. In fact I even disabled MMC support in SPL just to see if it'll work and I still get the same error despite the size of the resulting SPL image being well within limit:
text data bss dec hex filename 19269 3692 1368 24329 5f09 spl/u-boot-spl
as opposed to
text data bss dec hex filename 27766 4008 1368 33142 8176 spl/u-boot-spl
with MMC in SPL.
Also this error pops up only when extending the soc node of the device tree. If I do this:
/ { aliases { i2c0 = &i2c0; };
foo { compatible = "foo"; };
bar { compatible = "bar"; }; };
It builds fine. I think the culprit is somewhere else here.
Bart
So the size is about 25% smaller with it enabled.
Unrelated to size, but something you want to consider is to increase your available malloc pool size to accommodate the device tree stuff once you've managed to shrink the code. For da850evm, SPL_SYS_MALLOC_F_LEN = 0x800
adam
Bart
CONFIG_DEFAULT_DEVICE_TREE="da850-lcdk" +CONFIG_SPL_OF_PLATDATA=y CONFIG_ENV_IS_IN_NAND=y CONFIG_NET_RANDOM_ETHADDR=y CONFIG_DM=y +CONFIG_SPL_DM=y CONFIG_DM_I2C=y CONFIG_DM_I2C_COMPAT=y CONFIG_SYS_I2C_DAVINCI=y @@ -53,8 +56,10 @@ CONFIG_SPI_FLASH_STMICRO=y CONFIG_SPI_FLASH_WINBOND=y CONFIG_MII=y CONFIG_DRIVER_TI_EMAC=y +CONFIG_SPECIFY_CONSOLE_INDEX=y CONFIG_DM_SERIAL=y CONFIG_SYS_NS16550=y CONFIG_SPI=y CONFIG_DAVINCI_SPI=y CONFIG_USE_TINY_PRINTF=y
+# CONFIG_SPL_OF_LIBFDT is not set
2.21.0

On Wed, May 29, 2019 at 8:23 AM Bartosz Golaszewski brgl@bgdev.pl wrote:
śr., 29 maj 2019 o 15:04 Adam Ford aford173@gmail.com napisał(a):
On Wed, May 29, 2019 at 4:40 AM Bartosz Golaszewski brgl@bgdev.pl wrote:
wt., 28 maj 2019 o 17:05 Adam Ford aford173@gmail.com napisał(a):
On Tue, May 28, 2019 at 2:58 AM Bartosz Golaszewski brgl@bgdev.pl wrote:
From: Bartosz Golaszewski bgolaszewski@baylibre.com
Enable CONFIG_SPL_DM and enable the driver model for serial by defining an appropriate device in the board file for da850-lcdk.
Signed-off-by: Bartosz Golaszewski bgolaszewski@baylibre.com
board/davinci/da8xxevm/omapl138_lcdk.c | 16 ++++++++++++++++ configs/omapl138_lcdk_defconfig | 5 +++++ 2 files changed, 21 insertions(+)
diff --git a/board/davinci/da8xxevm/omapl138_lcdk.c b/board/davinci/da8xxevm/omapl138_lcdk.c index 156d61d9fb..b20747ba01 100644 --- a/board/davinci/da8xxevm/omapl138_lcdk.c +++ b/board/davinci/da8xxevm/omapl138_lcdk.c @@ -15,6 +15,8 @@ #include <asm/arch/hardware.h> #include <asm/ti-common/davinci_nand.h> #include <asm/io.h> +#include <ns16550.h> +#include <dm/platdata.h> #include <linux/errno.h> #include <asm/mach-types.h> #include <asm/arch/davinci_misc.h> @@ -369,3 +371,17 @@ int board_mmc_init(bd_t *bis) } #endif #endif
+#ifdef CONFIG_SPL_BUILD +static const struct ns16550_platdata serial_pdata = {
.base = DAVINCI_UART2_BASE,
.reg_shift = 2,
.clock = 228000000,
.fcr = UART_FCR_DEFVAL,
+};
+U_BOOT_DEVICE(omapl138_uart) = {
.name = "ns16550_serial",
.platdata = &serial_pdata,
+}; +#endif diff --git a/configs/omapl138_lcdk_defconfig b/configs/omapl138_lcdk_defconfig index b375da50df..f53a51321c 100644 --- a/configs/omapl138_lcdk_defconfig +++ b/configs/omapl138_lcdk_defconfig @@ -33,10 +33,13 @@ CONFIG_CMD_MTDPARTS=y CONFIG_CMD_DIAG=y CONFIG_CMD_UBI=y CONFIG_OF_CONTROL=y +CONFIG_SPL_OF_CONTROL=y
If SPL_OF_CONTROL is being added, why do you need to manually add the stuff above for the serial port? Checkout the da850-evm-u-boot.dtsi file. I adds the device tree entries for the serial port to appear in the SPL DTB.
See http://git.denx.de/?p=u-boot.git;a=commit;h=f7c1d53605d9ec528abacda9ba1763c6...
I tried to follow the example from this patch but for some reason adding u-boot,dm-spl; to the soc@1c00000 node in da850-lcdk-u-boot.dtsi results in the final image being reported as corrupted by the aisimage tool:
[...] COPY spl/u-boot-spl.dtb CC spl/common/spl/spl.o LD spl/common/spl/built-in.o CC spl/lib/display_options.o LD spl/lib/built-in.o LD spl/u-boot-spl OBJCOPY spl/u-boot-spl-nodtb.bin CAT spl/u-boot-spl-dtb.bin COPY spl/u-boot-spl.bin MKIMAGE spl/u-boot-spl.ais Error: - AIS Image corrupted CAT u-boot.ais CFGCHK u-boot.cfg
The image doen't boot (or at least there's nothing on the console).
I'm not sure what's causing it. Any idea?
I got the same 'AIS Image corrupted' message if the SPL + DTB image is too large.
I enabled SPL_SYS_MALLOC_SIMPLE along with USE_TINY_PRINTF reduced my code size: (see commit c4fa049a121457ff38b74daac32e18d7afbd4538) Original: text data bss dec hex filename 20760 1216 80 22056 5628 spl/u-boot-spl
Tiny Printf text data bss dec hex filename 17947 1216 80 19243 4b2b spl/u-boot-spl Malloc Simple + Tiny Printf text data bss dec hex filename 15187 176 28 15391 3c1f spl/u-boot-spl
I think you can also setup CONFIG_SPL_SYS_THUMB_BUILD to also reduce size. The DA850 evm has that and CONFIG_SYS_THUMB_BUILD set to shrink U-Boot. I just ran some checks and disabling CONFIG_SPL_SYS_THUMB_BUILD makes the u-boot-spl file overflow the space requirements. With it enabled, it builds text data bss dec hex filename 24356 1144 24 25524 63b4 spl/u-boot-spl
For U-Boot proper, the difference between CONFIG_SYS_THUMB_BUILD and not using it is
with CONFIG_SYS_THUMB_BUILD text data bss dec hex filename 324147 19700 58256 402103 622b7 u-boot
(not using it) text data bss dec hex filename 423167 19700 58248 501115 7a57b u-boot
Even with THUMB and other code shrinking options I still get the same error. In fact I even disabled MMC support in SPL just to see if it'll work and I still get the same error despite the size of the resulting SPL image being well within limit:
text data bss dec hex filename 19269 3692 1368 24329 5f09 spl/u-boot-spl
as opposed to
text data bss dec hex filename 27766 4008 1368 33142 8176 spl/u-boot-spl
with MMC in SPL.
Also this error pops up only when extending the soc node of the device tree. If I do this:
/ { aliases { i2c0 = &i2c0; };
foo { compatible = "foo"; }; bar { compatible = "bar"; };
};
It builds fine. I think the culprit is somewhere else here.
Maybe keeping the DM chunks of C code as starting point is better. Once it's all merged, it can always be improved later. I threw out the idea as a suggestion, but it's clearly not as simple as I original thought.
adam
Bart
So the size is about 25% smaller with it enabled.
Unrelated to size, but something you want to consider is to increase your available malloc pool size to accommodate the device tree stuff once you've managed to shrink the code. For da850evm, SPL_SYS_MALLOC_F_LEN = 0x800
adam
Bart
CONFIG_DEFAULT_DEVICE_TREE="da850-lcdk" +CONFIG_SPL_OF_PLATDATA=y CONFIG_ENV_IS_IN_NAND=y CONFIG_NET_RANDOM_ETHADDR=y CONFIG_DM=y +CONFIG_SPL_DM=y CONFIG_DM_I2C=y CONFIG_DM_I2C_COMPAT=y CONFIG_SYS_I2C_DAVINCI=y @@ -53,8 +56,10 @@ CONFIG_SPI_FLASH_STMICRO=y CONFIG_SPI_FLASH_WINBOND=y CONFIG_MII=y CONFIG_DRIVER_TI_EMAC=y +CONFIG_SPECIFY_CONSOLE_INDEX=y CONFIG_DM_SERIAL=y CONFIG_SYS_NS16550=y CONFIG_SPI=y CONFIG_DAVINCI_SPI=y CONFIG_USE_TINY_PRINTF=y
+# CONFIG_SPL_OF_LIBFDT is not set
2.21.0

śr., 29 maj 2019 o 15:47 Adam Ford aford173@gmail.com napisał(a):
On Wed, May 29, 2019 at 8:23 AM Bartosz Golaszewski brgl@bgdev.pl wrote:
śr., 29 maj 2019 o 15:04 Adam Ford aford173@gmail.com napisał(a):
On Wed, May 29, 2019 at 4:40 AM Bartosz Golaszewski brgl@bgdev.pl wrote:
wt., 28 maj 2019 o 17:05 Adam Ford aford173@gmail.com napisał(a):
On Tue, May 28, 2019 at 2:58 AM Bartosz Golaszewski brgl@bgdev.pl wrote:
From: Bartosz Golaszewski bgolaszewski@baylibre.com
Enable CONFIG_SPL_DM and enable the driver model for serial by defining an appropriate device in the board file for da850-lcdk.
Signed-off-by: Bartosz Golaszewski bgolaszewski@baylibre.com
board/davinci/da8xxevm/omapl138_lcdk.c | 16 ++++++++++++++++ configs/omapl138_lcdk_defconfig | 5 +++++ 2 files changed, 21 insertions(+)
diff --git a/board/davinci/da8xxevm/omapl138_lcdk.c b/board/davinci/da8xxevm/omapl138_lcdk.c index 156d61d9fb..b20747ba01 100644 --- a/board/davinci/da8xxevm/omapl138_lcdk.c +++ b/board/davinci/da8xxevm/omapl138_lcdk.c @@ -15,6 +15,8 @@ #include <asm/arch/hardware.h> #include <asm/ti-common/davinci_nand.h> #include <asm/io.h> +#include <ns16550.h> +#include <dm/platdata.h> #include <linux/errno.h> #include <asm/mach-types.h> #include <asm/arch/davinci_misc.h> @@ -369,3 +371,17 @@ int board_mmc_init(bd_t *bis) } #endif #endif
+#ifdef CONFIG_SPL_BUILD +static const struct ns16550_platdata serial_pdata = {
.base = DAVINCI_UART2_BASE,
.reg_shift = 2,
.clock = 228000000,
.fcr = UART_FCR_DEFVAL,
+};
+U_BOOT_DEVICE(omapl138_uart) = {
.name = "ns16550_serial",
.platdata = &serial_pdata,
+}; +#endif diff --git a/configs/omapl138_lcdk_defconfig b/configs/omapl138_lcdk_defconfig index b375da50df..f53a51321c 100644 --- a/configs/omapl138_lcdk_defconfig +++ b/configs/omapl138_lcdk_defconfig @@ -33,10 +33,13 @@ CONFIG_CMD_MTDPARTS=y CONFIG_CMD_DIAG=y CONFIG_CMD_UBI=y CONFIG_OF_CONTROL=y +CONFIG_SPL_OF_CONTROL=y
If SPL_OF_CONTROL is being added, why do you need to manually add the stuff above for the serial port? Checkout the da850-evm-u-boot.dtsi file. I adds the device tree entries for the serial port to appear in the SPL DTB.
See http://git.denx.de/?p=u-boot.git;a=commit;h=f7c1d53605d9ec528abacda9ba1763c6...
I tried to follow the example from this patch but for some reason adding u-boot,dm-spl; to the soc@1c00000 node in da850-lcdk-u-boot.dtsi results in the final image being reported as corrupted by the aisimage tool:
[...] COPY spl/u-boot-spl.dtb CC spl/common/spl/spl.o LD spl/common/spl/built-in.o CC spl/lib/display_options.o LD spl/lib/built-in.o LD spl/u-boot-spl OBJCOPY spl/u-boot-spl-nodtb.bin CAT spl/u-boot-spl-dtb.bin COPY spl/u-boot-spl.bin MKIMAGE spl/u-boot-spl.ais Error: - AIS Image corrupted CAT u-boot.ais CFGCHK u-boot.cfg
The image doen't boot (or at least there's nothing on the console).
I'm not sure what's causing it. Any idea?
I got the same 'AIS Image corrupted' message if the SPL + DTB image is too large.
I enabled SPL_SYS_MALLOC_SIMPLE along with USE_TINY_PRINTF reduced my code size: (see commit c4fa049a121457ff38b74daac32e18d7afbd4538) Original: text data bss dec hex filename 20760 1216 80 22056 5628 spl/u-boot-spl
Tiny Printf text data bss dec hex filename 17947 1216 80 19243 4b2b spl/u-boot-spl Malloc Simple + Tiny Printf text data bss dec hex filename 15187 176 28 15391 3c1f spl/u-boot-spl
I think you can also setup CONFIG_SPL_SYS_THUMB_BUILD to also reduce size. The DA850 evm has that and CONFIG_SYS_THUMB_BUILD set to shrink U-Boot. I just ran some checks and disabling CONFIG_SPL_SYS_THUMB_BUILD makes the u-boot-spl file overflow the space requirements. With it enabled, it builds text data bss dec hex filename 24356 1144 24 25524 63b4 spl/u-boot-spl
For U-Boot proper, the difference between CONFIG_SYS_THUMB_BUILD and not using it is
with CONFIG_SYS_THUMB_BUILD text data bss dec hex filename 324147 19700 58256 402103 622b7 u-boot
(not using it) text data bss dec hex filename 423167 19700 58248 501115 7a57b u-boot
Even with THUMB and other code shrinking options I still get the same error. In fact I even disabled MMC support in SPL just to see if it'll work and I still get the same error despite the size of the resulting SPL image being well within limit:
text data bss dec hex filename 19269 3692 1368 24329 5f09 spl/u-boot-spl
as opposed to
text data bss dec hex filename 27766 4008 1368 33142 8176 spl/u-boot-spl
with MMC in SPL.
Also this error pops up only when extending the soc node of the device tree. If I do this:
/ { aliases { i2c0 = &i2c0; };
foo { compatible = "foo"; }; bar { compatible = "bar"; };
};
It builds fine. I think the culprit is somewhere else here.
Maybe keeping the DM chunks of C code as starting point is better. Once it's all merged, it can always be improved later. I threw out the idea as a suggestion, but it's clearly not as simple as I original thought.
Thanks, I take it as an Ack. I'll try to get back to it once I convert the nand driver to using DM which won't be easy either as the nand node on the device-tree is a sub-node of the aemif device. On linux there's an actual aemif driver that populates its child nodes, but on u-boot I'll have to come up with some workaround.
Bart
adam
Bart
So the size is about 25% smaller with it enabled.
Unrelated to size, but something you want to consider is to increase your available malloc pool size to accommodate the device tree stuff once you've managed to shrink the code. For da850evm, SPL_SYS_MALLOC_F_LEN = 0x800
adam
Bart
CONFIG_DEFAULT_DEVICE_TREE="da850-lcdk" +CONFIG_SPL_OF_PLATDATA=y CONFIG_ENV_IS_IN_NAND=y CONFIG_NET_RANDOM_ETHADDR=y CONFIG_DM=y +CONFIG_SPL_DM=y CONFIG_DM_I2C=y CONFIG_DM_I2C_COMPAT=y CONFIG_SYS_I2C_DAVINCI=y @@ -53,8 +56,10 @@ CONFIG_SPI_FLASH_STMICRO=y CONFIG_SPI_FLASH_WINBOND=y CONFIG_MII=y CONFIG_DRIVER_TI_EMAC=y +CONFIG_SPECIFY_CONSOLE_INDEX=y CONFIG_DM_SERIAL=y CONFIG_SYS_NS16550=y CONFIG_SPI=y CONFIG_DAVINCI_SPI=y CONFIG_USE_TINY_PRINTF=y
+# CONFIG_SPL_OF_LIBFDT is not set
2.21.0

wt., 28 maj 2019 o 11:58 Bartosz Golaszewski brgl@bgdev.pl napisał(a):
From: Bartosz Golaszewski bgolaszewski@baylibre.com
This series enables the driver model in SPL on omapl138-lcdk. First two patches enable size-reducing options in defconfig. The third patch is just a cleanup of the board file. Last patch enables the driver model and defines the serial device so that we don't have to disable CONFIG_SPL_DM_SERIAL which is enabled by default when selecting CONFIG_SPL_DM.
Bartosz Golaszewski (4): davinci: omapl138-lcdk: enable SPL_SYS_MALLOC_SIMPLE davinci: omapl138-lcdk: enable CONFIG_USE_TINY_PRINTF davinci: omapl138-lcdk: remove unneeded includes davinci: omapl138-lcdk: enable driver-model in SPL
board/davinci/da8xxevm/omapl138_lcdk.c | 18 ++++++++++++++++-- configs/omapl138_lcdk_defconfig | 7 +++++++ 2 files changed, 23 insertions(+), 2 deletions(-)
-- 2.21.0
Gentle ping
Bart

pon., 24 cze 2019 o 10:18 Bartosz Golaszewski brgl@bgdev.pl napisał(a):
wt., 28 maj 2019 o 11:58 Bartosz Golaszewski brgl@bgdev.pl napisał(a):
From: Bartosz Golaszewski bgolaszewski@baylibre.com
This series enables the driver model in SPL on omapl138-lcdk. First two patches enable size-reducing options in defconfig. The third patch is just a cleanup of the board file. Last patch enables the driver model and defines the serial device so that we don't have to disable CONFIG_SPL_DM_SERIAL which is enabled by default when selecting CONFIG_SPL_DM.
Bartosz Golaszewski (4): davinci: omapl138-lcdk: enable SPL_SYS_MALLOC_SIMPLE davinci: omapl138-lcdk: enable CONFIG_USE_TINY_PRINTF davinci: omapl138-lcdk: remove unneeded includes davinci: omapl138-lcdk: enable driver-model in SPL
board/davinci/da8xxevm/omapl138_lcdk.c | 18 ++++++++++++++++-- configs/omapl138_lcdk_defconfig | 7 +++++++ 2 files changed, 23 insertions(+), 2 deletions(-)
-- 2.21.0
Gentle ping
Bart
Ping again. Any objections to this series?
Bart

On Wed, Jul 03, 2019 at 03:00:37PM +0200, Bartosz Golaszewski wrote:
pon., 24 cze 2019 o 10:18 Bartosz Golaszewski brgl@bgdev.pl napisał(a):
wt., 28 maj 2019 o 11:58 Bartosz Golaszewski brgl@bgdev.pl napisał(a):
From: Bartosz Golaszewski bgolaszewski@baylibre.com
This series enables the driver model in SPL on omapl138-lcdk. First two patches enable size-reducing options in defconfig. The third patch is just a cleanup of the board file. Last patch enables the driver model and defines the serial device so that we don't have to disable CONFIG_SPL_DM_SERIAL which is enabled by default when selecting CONFIG_SPL_DM.
Bartosz Golaszewski (4): davinci: omapl138-lcdk: enable SPL_SYS_MALLOC_SIMPLE davinci: omapl138-lcdk: enable CONFIG_USE_TINY_PRINTF davinci: omapl138-lcdk: remove unneeded includes davinci: omapl138-lcdk: enable driver-model in SPL
board/davinci/da8xxevm/omapl138_lcdk.c | 18 ++++++++++++++++-- configs/omapl138_lcdk_defconfig | 7 +++++++ 2 files changed, 23 insertions(+), 2 deletions(-)
-- 2.21.0
Gentle ping
Bart
Ping again. Any objections to this series?
Seems fine, I'll pick it up post release, thanks!
participants (3)
-
Adam Ford
-
Bartosz Golaszewski
-
Tom Rini