[U-Boot] [PATCH 4/4] davinci: omapl138-lcdk: enable driver-model in SPL

Adam Ford aford173 at gmail.com
Wed May 29 13:04:12 UTC 2019


On Wed, May 29, 2019 at 4:40 AM Bartosz Golaszewski <brgl at bgdev.pl> wrote:
>
> wt., 28 maj 2019 o 17:05 Adam Ford <aford173 at gmail.com> napisaƂ(a):
> >
> > On Tue, May 28, 2019 at 2:58 AM Bartosz Golaszewski <brgl at bgdev.pl> wrote:
> > >
> > > From: Bartosz Golaszewski <bgolaszewski at 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 at 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=f7c1d53605d9ec528abacda9ba1763c67221fc88
> >
>
> I tried to follow the example from this patch but for some reason
> adding u-boot,dm-spl; to the soc at 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
> > >


More information about the U-Boot mailing list