All of lore.kernel.org
 help / color / mirror / Atom feed
From: Michal Simek <monstr@monstr.eu>
To: u-boot@lists.denx.de
Subject: [U-Boot] SPL DM
Date: Tue, 03 Feb 2015 16:46:13 +0100	[thread overview]
Message-ID: <54D0ED45.9090506@monstr.eu> (raw)
In-Reply-To: <CAPnjgZ16DD77SE8-O-kdN_jkpizCh431KXKFCNA9fB5r+GhsLw@mail.gmail.com>

Hi Simon,

On 02/03/2015 03:11 PM, Simon Glass wrote:
> Hi Michal,
> 
> On 3 February 2015 at 06:16, Michal Simek <monstr@monstr.eu> wrote:
>> Hi Simon,
>>
>> I am playing with driver model and I have moved uartlite to it and
>> it is working fine for normal u-boot +10k but SPL size is dramatically
>> bigger. Without DM I can fit to 3k but now it has ~16k.
>>
>> microblaze-generic:  all +10759  bss +4  data +560  rodata +1379
>> spl/u-boot-spl:all +9100  spl/u-boot-spl:bss -4  spl/u-boot-spl:data -48
>>  spl/u-boot-spl:rodata +5660  spl/u-boot-spl:text +3492  text +8816
>>
>> This 9k is after removing all printf calling which is adding 6kB.
>>
>>
>> diff --git a/common/malloc_simple.c b/common/malloc_simple.c
>> index afdacff80d8e..a9e4d96738a0 100644
>> --- a/common/malloc_simple.c
>> +++ b/common/malloc_simple.c
>> @@ -19,7 +19,7 @@ void *malloc_simple(size_t bytes)
>>
>>         new_ptr = gd->malloc_ptr + bytes;
>>         if (new_ptr > gd->malloc_limit)
>> -               panic("Out of pre-reloc memory");
>> +               puts("Out of pre-reloc memory");
>>         ptr = map_sysmem(gd->malloc_base + gd->malloc_ptr, bytes);
>>         gd->malloc_ptr = ALIGN(new_ptr, sizeof(new_ptr));
>>         return ptr;
>> diff --git a/drivers/serial/serial-uclass.c b/drivers/serial/serial-uclass.c
>> index 3fc7104359d3..d56fafcb8ee2 100644
>> --- a/drivers/serial/serial-uclass.c
>> +++ b/drivers/serial/serial-uclass.c
>> @@ -72,7 +72,7 @@ static void serial_find_console_or_panic(void)
>>         if (uclass_get_device_by_seq(UCLASS_SERIAL, INDEX, &dev) &&
>>             uclass_get_device(UCLASS_SERIAL, INDEX, &dev) &&
>>             (uclass_first_device(UCLASS_SERIAL, &dev) || !dev))
>> -               panic("No serial driver found");
>> +               puts("No serial driver found");
>>  #undef INDEX
>>         gd->cur_serial_dev = dev;
>>  }
>>
>>
>> Here is diff between versions. I have setup CONFIG_SYS_MALLOC_SIMPLE
>> Simon: Have you tried to to reduce size in this too?
>> Interesting part is that new uartlite functions are not called that's why I am expecting
>> any other problem.
>>
>>                  spl-u-boot-spl: add: 27/-13, grow: 2/-1 bytes: 4024/-576 (3448)
>>                  function                                   old     new   delta
>>                  device_bind                                  -     596    +596
>>                  device_probe_child                           -     508    +508
>>                  uclass_get                                   -     296    +296
>>                  lists_bind_drivers                           -     212    +212
>>                  uclass_resolve_seq                           -     188    +188
>>                  uclass_bind_device                           -     180    +180
>>                  uclass_find_device_by_seq                    -     172    +172
>>                  device_bind_by_name                          -     152    +152
>>                  uclass_get_device_by_seq                     -     140    +140
>>                  serial_find_console_or_panic                 -     136    +136
>>                  uclass_find_device                           -     132    +132
>>                  lists_driver_lookup_name                     -     128    +128
>>                  uclass_first_device                          -     108    +108
>>                  dm_init                                      -      96     +96
>>                  _serial_putc                                 -      96     +96
>>                  uclass_unbind_device                         -      92     +92
>>                  malloc_simple                                -      92     +92
>>                  uclass_get_device                            -      88     +88
>>                  lists_uclass_lookup                          -      80     +80
>>                  dm_init_and_scan                             -      80     +80
>>                  calloc                                       -      80     +80
>>                  uclass_find                                  -      72     +72
>>                  uclass_pre_probe_child                       -      60     +60
>>                  uclass_post_probe_device                     -      52     +52
>>                  strcmp                                       -      52     +52
>>                  dm_scan_platdata                             -      52     +52
>>                  serial_puts                                 44      80     +36
>>                  device_probe                                 -      32     +32
>>                  board_init_r                               232     248     +16
>>                  serial_current                               4       -      -4
>>                  userial0_setbrg                              8       -      -8
>>                  serial_init                                 56      48      -8
>>                  userial0_tstc                               20       -     -20
>>                  userial0_puts                               32       -     -32
>>                  userial0_putc                               32       -     -32
>>                  userial0_init                               32       -     -32
>>                  userial0_getc                               32       -     -32
>>                  uartlite_serial_getc                        40       -     -40
>>                  uartlite_serial0_device                     48       -     -48
>>                  uartlite_serial_init                        52       -     -52
>>                  uartlite_serial_puts                        80       -     -80
>>                  uartlite_serial_putc                        92       -     -92
>>                  get_current                                 96       -     -96
> 
> I took a look at this quite recently and your numbers (4KB) are
> similar to mine - for ARM. I suppose. Actually on Tegra I see 5KB but
> I think that is due to GPIOs being used too. I expect Thumb will cut
> this by 20% or so.
> 
> There is also a bug in gcc which causes the rodata to blow up. You
> might be seeing that also.
> 
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=54303
> 
> I just got a response with a possible patch on the gcc mailing list.

I don't think this is a problem on microblaze - or at least can't see
any problem related to that.


I put SPL to DDR and it is loading image from NOR flash and it is working
with DM enabled.

U-Boot SPL 2015.04-rc1-00030-g705afe6b99a2 (Feb 03 2015 - 15:48:09)


U-Boot 2015.04-rc1-00030-g705afe6b99a2 (Feb 03 2015 - 15:48:09)

DRAM:  128 MiB
Flash: 32 MiB
*** Warning - bad CRC, using default environment

In:    serial
Out:   serial
Err:   serial
Net:   Xelite.40e00000
U-BOOT for Xilinx-SP605-AXI-lite-14.7

U-Boot-mONStR>
U-Boot-mONStR>

I have done some changes in SPL to support DM


> So this is very much work-in-progress. I see a few options:
> 
> 1. Reduce functionality further, like the existing
> CONFIG_DM_WARN/DEVICE_REMOVE/STDIO but operating on things like
> device_bind/probe(). I have not seriously looked at this but I suspect
> it would be painful.

DM_WARN is printf at the end - that's why disable it. DEVICE_REMOVE
is disable for me - don't want to remove devices.

STDIO is disabled for SPL too.

> 
> 2. Support for static binding, i.e. declare a struct udevice directly,
> using const static init and perhaps some sort of macro to help thread
> tings together. Then we could add CONFIG_DM_BIND (to support binding
> new devices) and disable it for SPL. A bit ick but it might get us
> closer to running in a 4KB SRAM.
> 
> If you have ideas/patches please send them through. Right now I need
> to get Kconfig support v2 landed, and we still need a few more gdata
> patches before we can enable DM in SPL anyway (Tom is looking at
> that).

The whole DM code is new for me but I will see what I can do with it.
Definitely any example will be more then helpful

This is stat for the current version.


               spl-u-boot-spl: add: 39/-11, grow: 4/-1 bytes: 4668/-444 (4224)
                 function                                   old     new   delta
                 device_bind                                  -     596    +596
                 device_probe_child                           -     508    +508
                 uclass_get                                   -     296    +296
                 lists_bind_drivers                           -     212    +212
                 uclass_resolve_seq                           -     188    +188
                 uclass_bind_device                           -     180    +180
                 uclass_find_device_by_seq                    -     172    +172
                 device_bind_by_name                          -     152    +152
                 uclass_get_device_by_seq                     -     140    +140
                 serial_find_console_or_panic                 -     136    +136
                 uclass_find_device                           -     132    +132
                 lists_driver_lookup_name                     -     128    +128
                 memset                                       -     124    +124
                 uclass_first_device                          -     108    +108
                 dm_init                                      -      96     +96
                 _serial_putc                                 -      96     +96
                 uclass_unbind_device                         -      92     +92
                 malloc_simple                                -      92     +92
                 uclass_get_device                            -      88     +88
                 lists_uclass_lookup                          -      80     +80
                 dm_init_and_scan                             -      80     +80
                 calloc                                       -      80     +80
                 uclass_find                                  -      72     +72
                 uartlite_serial_probe                        -      68     +68
                 _u_boot_list_2_driver_2_uartlite_serial       -      68     +68
                 _u_boot_list_2_driver_2_root_driver          -      68     +68
                 uartlite_serial_tstc                         -      64     +64
                 _u_boot_list_2_uclass_2_serial               -      64     +64
                 _u_boot_list_2_uclass_2_root                 -      64     +64
                 uclass_pre_probe_child                       -      60     +60
                 serial_post_probe                            -      56     +56
                 uclass_post_probe_device                     -      52     +52
                 strcmp                                       -      52     +52
                 dm_scan_platdata                             -      52     +52
                 serial_puts                                 44      80     +36
                 device_probe                                 -      32     +32
                 dev_get_platdata                             -      20     +20
                 uartlite_serial_getc                        40      56     +16
                 board_init_r                               216     232     +16
                 uartlite_serial_putc                        92     104     +12
                 serial_pre_remove                            -       8      +8
                 _u_boot_list_2_driver_info_2_uartlite0       -       8      +8
                 plat_uartlite_0                              -       4      +4
                 serial_current                               4       -      -4
                 userial0_setbrg                              8       -      -8
                 serial_init                                 56      48      -8
                 userial0_tstc                               20       -     -20
                 userial0_puts                               32       -     -32
                 userial0_putc                               32       -     -32
                 userial0_init                               32       -     -32
                 userial0_getc                               32       -     -32
                 uartlite_serial0_device                     48       -     -48
                 uartlite_serial_init                        52       -     -52
                 uartlite_serial_puts                        80       -     -80
                 get_current                                 96       -     -96

Thanks,
Michal


-- 
Michal Simek, Ing. (M.Eng), OpenPGP -> KeyID: FE3D1F91
w: www.monstr.eu p: +42-0-721842854
Maintainer of Linux kernel - Microblaze cpu - http://www.monstr.eu/fdt/
Maintainer of Linux kernel - Xilinx Zynq ARM architecture
Microblaze U-BOOT custodian and responsible for u-boot arm zynq platform


-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: OpenPGP digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20150203/a6a3d021/attachment.sig>

  reply	other threads:[~2015-02-03 15:46 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-02-03 13:16 [U-Boot] SPL DM Michal Simek
2015-02-03 14:11 ` Simon Glass
2015-02-03 15:46   ` Michal Simek [this message]
2015-02-04  0:33     ` Simon Glass

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=54D0ED45.9090506@monstr.eu \
    --to=monstr@monstr.eu \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.