All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tim Harvey <tharvey@gateworks.com>
To: Simon Glass <sjg@chromium.org>
Cc: u-boot <u-boot@lists.denx.de>
Subject: Re: using binman fails boot
Date: Fri, 16 Jul 2021 14:43:34 -0700	[thread overview]
Message-ID: <CAJ+vNU2tBDZ_m+39GNob31B9c4mbdGQoL1AOC7baV2gtFhai3g@mail.gmail.com> (raw)
In-Reply-To: <CAPnjgZ0KnpJ49aUB_FjuAjweVY2Vef3xVW+WuPkHz8ZH-TZZCw@mail.gmail.com>

On Thu, Jul 15, 2021 at 9:30 PM Simon Glass <sjg@chromium.org> wrote:
>
> Hi Tim,
>
> On Thu, 15 Jul 2021 at 16:58, Tim Harvey <tharvey@gateworks.com> wrote:
> >
> > Greetings,
> >
> > I'm taking a look at moving imx8mm-venice to use binman for packaging.
> > After doing so U-Boot proper fails to boot:
> >
> > U-Boot SPL 2021.07-00475-g1126252f40 (Jul 15 2021 - 11:09:02 -0700)
> > GSC     : v58 0xf098 RST:VIN Thermal Protection Disabled
> > Model   : GW7300-00-B1B
> > Serial  : 852420
> > MFGDate : 10-26-2020
> > RTC     : 122
> > PMIC    : MP5416
> > DRAM    : LPDDR4 1 GiB
> > WDT:   Not starting
> > Trying to boot from MMC1
> > DTB     : imx8mm-venice-gw73xx-0x
> >
> >
> > U-Boot 2021.07-00475-g1126252f40 (Jul 15 2021 - 11:09:02 -0700)
> >
> > CPU:   Freescale i.MX8MMQ rev1.0 1600 MHz (running at 1200 MHz)
> > CPU:   Industrial temperature grade (-40C to 105C) at 43C
> > Reset cause: POR
> > Model: Gateworks Venice GW73xx-0x i.MX8MM Development Kit
> > DRAM:  1 GiB
> > temp    : 38.3C
> > vdd_bat : 0.000V
> > vdd_vin : 15.731V
> > vdd_adc1: 0.000V
> > vdd_adc2: 0.000V
> > vdd_dram: 1.093V
> > vdd_1p2 : 1.193V
> > vdd_1p0 : 0.985V
> > vdd_2p5 : 2.470V
> > vdd_3p3 : 3.250V
> > vdd_0p95: 0.948V
> > vdd_1p8 : 1.799V
> > vdd_gsc : 3.262V
> > initcall sequence 000000007ffc4f58 failed at call 0000000040255910 (err=-2)
> > ### ERROR ### Please RESET the board ###
> >
> > Any ideas what this could be?
>
> I don't have much idea. What is the initcall that is failing? Can you
> check u-boot.map ? That might give a clue as to what is failing. I
> assume the DT is passed to U-Boot somehow from SPL?
>

Simon,

Thanks for the help!

The initcall addr doesn't match anything in u-boot.map (maybe
u-boot.map doesn't show what's in lib/binman.o?) but I was able to
track it down to initr_binman() failing due to
binman_init()->find_image_node(&binman->image)' returning -EINVAL.
This is because my imx8mm-venice-gw73xx-0x-uboot.dtsi doesn't have a
binman node (my CONFIG_DEFAULT_DEVICE_TREE did but not my actual
dtbs). So I have it working now!

> >
<snip>
> >
> > A follow-on question is that I would like to investigate using binman
> > in the SPL to dynamically access the IMX8M ddr training blobs so that
> > we don't have to waste padding space taking them onto the end of the
> > SPL which is currently done. The lpddr4 training blobs I'm using
> > currently take up 57k without padding compared to 81k with padding.
> > The location of them is handled in ddr_load_train_firmware.
> >
> > If I add the following to my SPL:
> > diff --git a/board/gateworks/venice/spl.c b/board/gateworks/venice/spl.c
> > index d0a490b0e6..62eb67fa5e 100644
> > --- a/board/gateworks/venice/spl.c
> > +++ b/board/gateworks/venice/spl.c
> > @@ -3,6 +3,7 @@
> >   * Copyright 2021 Gateworks Corporation
> >   */
> >
> > +#include <binman_sym.h>
> >  #include <common.h>
> >  #include <cpu_func.h>
> >  #include <hang.h>
> > @@ -252,6 +253,8 @@ static int power_init_board(void)
> >         return 0;
> >  }
> >
> > +binman_sym_declare(ulong, blob_1, image_pos);
> > +
> >  void board_init_f(ulong dummy)
> >  {
> >         struct udevice *dev;
> > @@ -291,6 +294,8 @@ void board_init_f(ulong dummy)
> >         gpio_request(PCIE_RSTN, "perst#");
> >         gpio_direction_output(PCIE_RSTN, 0);
> >
> > +       printf("%s: blob_1:0x%0lx\n", __func__, binman_sym(ulong,
> > blob_1, image_pos));
> > +
> >         /* GSC */
> >         dram_sz = gsc_init(0);
> >
> > I get 'blob_1:0x0' which is not what I expected.
> >
> > If I understand correctly binman is using linker symbols to determine
> > where things are in the image? What I don't quite understand is what
> > symbols are valid to use assuming my dtsi above. The binman.rst docs
> > talk use 'u_boot_any' as an example which apparently can match
> > 'u-boot.bin', 'u-boot.img', and 'u-boot-nodtb.bin' but I can't find
> > the code that somehow translates this meaning.
>
> Actually any symbol can be used. It basically depends on the name of
> the entry in your image description. So here it would be
> blob-ext@1...I think that translates to blob_ext_1 but I'm not sure
> about the @. You could try blob-ext-1 instead. It does not know about
> phandles or labels.
>
> If you pass BINMAN_VERBOSE=4 to the build you should see it talking
> about writing symbols into the SPL image.
>

For the following:
         u-boot-spl-ddr {
                filename = "u-boot-spl-ddr.bin";
                pad-byte = <0xff>;
                align-size = <4>;
                align = <4>;

                u-boot-spl {
                        align-end = <4>;
                };

                blob-ext@1 {
                        filename = "lpddr4_pmu_train_1d_imem.bin";
                        size = <0x8000>;
                };

                blob-ext@2 {
                        filename = "lpddr4_pmu_train_1d_dmem.bin";
                        size = <0x4000>;
                };

                blob-ext@3 {
                        filename = "lpddr4_pmu_train_2d_imem.bin";
                        size = <0x8000>;
                };

                blob-ext@4 {
                        filename = "lpddr4_pmu_train_2d_dmem.bin";
                        size = <0x4000>;
                };
        };

I tried 'blob_ext_1' and 'blob_ext1' and both formats resolve to 0x0.
The 'ext-blob' is an entry type supported by binman so if I had
multiple they must be called blob-ext@1, blob-ext@2, ... right?

The entry_name used in binman_sym_declare/binman_sym certainly can't
support non C varname characters so '-' and '@' characters must get
translated somewhere. Where would that be done in order to figure out
what to use?

BINMAN_VERBOSE=4 indeed prints out a tone of stuff but I'm not seeing
anything for 'blob' below that would seem to indicate one node name vs
another:
  BINMAN  flash.bin
Node '/binman/u-boot-spl-ddr/u-boot-spl': etype 'u-boot-spl':
u-boot-spl-expanded selected
Node '/binman/u-boot-spl-ddr/u-boot-spl/u-boot-spl-nodtb': Packing:
offset=None, size=None, content_size=215d0
Node '/binman/u-boot-spl-ddr/u-boot-spl/u-boot-spl-nodtb':    -
packed: offset=0x0, size=0x215d0, content_size=0x215d0,
next_offset=215d0
Node '/binman/u-boot-spl-ddr/u-boot-spl/u-boot-spl-dtb': Packing:
offset=None, size=None, content_size=131c
Node '/binman/u-boot-spl-ddr/u-boot-spl/u-boot-spl-dtb':    - packed:
offset=0x215d0, size=0x131c, content_size=0x131c, next_offset=228ec
Node '/binman/u-boot-spl-ddr/u-boot-spl/u-boot-spl-nodtb': GetData: size 0x215d0
Node '/binman/u-boot-spl-ddr/u-boot-spl': GetPaddedDataForEntry: size None
Node '/binman/u-boot-spl-ddr/u-boot-spl/u-boot-spl-dtb': GetData: size 0x131c
Node '/binman/u-boot-spl-ddr/u-boot-spl': GetPaddedDataForEntry: size None
Node '/binman/u-boot-spl-ddr/u-boot-spl': GetData: 2 entries, total size 0x228ec
 Node '/binman/u-boot-spl-ddr': GetPaddedDataForEntry: size None
Node '/binman/u-boot-spl-ddr/u-boot-spl': Packing: offset=None,
size=0x228ec, content_size=228ec
Node '/binman/u-boot-spl-ddr/u-boot-spl':    - packed: offset=0x0,
size=0x228ec, content_size=0x228ec, next_offset=228ec
Node '/binman/u-boot-spl-ddr/blob-ext@1': Packing: offset=None,
size=0x8000, content_size=7df4
Node '/binman/u-boot-spl-ddr/blob-ext@1':    - packed: offset=0x228ec,
size=0x8000, content_size=0x7df4, next_offset=2a8ec
Node '/binman/u-boot-spl-ddr/blob-ext@2': Packing: offset=None,
size=0x4000, content_size=684
Node '/binman/u-boot-spl-ddr/blob-ext@2':    - packed: offset=0x2a8ec,
size=0x4000, content_size=0x684, next_offset=2e8ec
Node '/binman/u-boot-spl-ddr/blob-ext@3': Packing: offset=None,
size=0x8000, content_size=5ac0
Node '/binman/u-boot-spl-ddr/blob-ext@3':    - packed: offset=0x2e8ec,
size=0x8000, content_size=0x5ac0, next_offset=368ec
Node '/binman/u-boot-spl-ddr/blob-ext@4': Packing: offset=None,
size=0x4000, content_size=564
Node '/binman/u-boot-spl-ddr/blob-ext@4':    - packed: offset=0x368ec,
size=0x4000, content_size=0x564, next_offset=3a8ec
Node '/binman/u-boot-spl-ddr/u-boot-spl/u-boot-spl-nodtb': GetData: size 0x215d0
Node '/binman/u-boot-spl-ddr/u-boot-spl': GetPaddedDataForEntry: size 0x228ec
Node '/binman/u-boot-spl-ddr/u-boot-spl/u-boot-spl-dtb': GetData: size 0x131c
Node '/binman/u-boot-spl-ddr/u-boot-spl': GetPaddedDataForEntry: size 0x228ec
Node '/binman/u-boot-spl-ddr/u-boot-spl': GetData: 2 entries, total size 0x228ec
 Node '/binman/u-boot-spl-ddr': GetPaddedDataForEntry: size None
Node '/binman/u-boot-spl-ddr/blob-ext@1': GetData: size 0x7df4
 Node '/binman/u-boot-spl-ddr': GetPaddedDataForEntry: size None
Node '/binman/u-boot-spl-ddr/blob-ext@2': GetData: size 0x684
 Node '/binman/u-boot-spl-ddr': GetPaddedDataForEntry: size None
Node '/binman/u-boot-spl-ddr/blob-ext@3': GetData: size 0x5ac0
 Node '/binman/u-boot-spl-ddr': GetPaddedDataForEntry: size None
Node '/binman/u-boot-spl-ddr/blob-ext@4': GetData: size 0x564
 Node '/binman/u-boot-spl-ddr': GetPaddedDataForEntry: size None
 Node '/binman/u-boot-spl-ddr': GetData: 5 entries, total size 0x3a8ec
 Node '/binman/u-boot-spl-ddr': GetPaddedDataForEntry: size 0x3a8ec
 Node '/binman/u-boot-spl-ddr': Packing: offset=None, size=0x3a8ec,
content_size=3a8ec
 Node '/binman/u-boot-spl-ddr':    - packed: offset=0x0, size=0x3a8ec,
content_size=0x3a8ec, next_offset=3a8ec
File ./u-boot.dtb.out: Update node '/binman/u-boot-spl-ddr' prop 'offset' to 0x0
File ./u-boot.dtb.out: Update node '/binman/u-boot-spl-ddr' prop
'size' to 0x3a8ec
File ./u-boot.dtb.out: Update node '/binman/u-boot-spl-ddr' prop
'image-pos' to 0x0
File ./u-boot.dtb.out: Update node '/binman/u-boot-spl-ddr/u-boot-spl'
prop 'offset' to 0x0
File ./u-boot.dtb.out: Update node '/binman/u-boot-spl-ddr/u-boot-spl'
prop 'size' to 0x228ec
File ./u-boot.dtb.out: Update node '/binman/u-boot-spl-ddr/u-boot-spl'
prop 'image-pos' to 0x0
File ./u-boot.dtb.out: Update node
'/binman/u-boot-spl-ddr/u-boot-spl/u-boot-spl-nodtb' prop 'offset' to
0x0
File ./u-boot.dtb.out: Update node
'/binman/u-boot-spl-ddr/u-boot-spl/u-boot-spl-nodtb' prop 'size' to
0x215d0
File ./u-boot.dtb.out: Update node
'/binman/u-boot-spl-ddr/u-boot-spl/u-boot-spl-nodtb' prop 'image-pos'
to 0x0
File ./u-boot.dtb.out: Update node
'/binman/u-boot-spl-ddr/u-boot-spl/u-boot-spl-dtb' prop 'offset' to
0x215d0
File ./u-boot.dtb.out: Update node
'/binman/u-boot-spl-ddr/u-boot-spl/u-boot-spl-dtb' prop 'size' to
0x131c
File ./u-boot.dtb.out: Update node
'/binman/u-boot-spl-ddr/u-boot-spl/u-boot-spl-dtb' prop 'image-pos' to
0x215d0
File ./u-boot.dtb.out: Update node '/binman/u-boot-spl-ddr/blob-ext@1'
prop 'offset' to 0x228ec
File ./u-boot.dtb.out: Update node '/binman/u-boot-spl-ddr/blob-ext@1'
prop 'size' to 0x8000
File ./u-boot.dtb.out: Update node '/binman/u-boot-spl-ddr/blob-ext@1'
prop 'image-pos' to 0x228ec
File ./u-boot.dtb.out: Update node '/binman/u-boot-spl-ddr/blob-ext@2'
prop 'offset' to 0x2a8ec
File ./u-boot.dtb.out: Update node '/binman/u-boot-spl-ddr/blob-ext@2'
prop 'size' to 0x4000
File ./u-boot.dtb.out: Update node '/binman/u-boot-spl-ddr/blob-ext@2'
prop 'image-pos' to 0x2a8ec
File ./u-boot.dtb.out: Update node '/binman/u-boot-spl-ddr/blob-ext@3'
prop 'offset' to 0x2e8ec
File ./u-boot.dtb.out: Update node '/binman/u-boot-spl-ddr/blob-ext@3'
prop 'size' to 0x8000
File ./u-boot.dtb.out: Update node '/binman/u-boot-spl-ddr/blob-ext@3'
prop 'image-pos' to 0x2e8ec
File ./u-boot.dtb.out: Update node '/binman/u-boot-spl-ddr/blob-ext@4'
prop 'offset' to 0x368ec
File ./u-boot.dtb.out: Update node '/binman/u-boot-spl-ddr/blob-ext@4'
prop 'size' to 0x4000
File ./u-boot.dtb.out: Update node '/binman/u-boot-spl-ddr/blob-ext@4'
prop 'image-pos' to 0x368ec
Pack completed after 1 pass(es)
Writing image to './u-boot-spl-ddr.bin'
Node '/binman/u-boot-spl-ddr/u-boot-spl/u-boot-spl-nodtb': GetData: size 0x215d0
Node '/binman/u-boot-spl-ddr/u-boot-spl': GetPaddedDataForEntry: size 0x228ec
Node '/binman/u-boot-spl-ddr/u-boot-spl/u-boot-spl-dtb': GetData: size 0x131c
Node '/binman/u-boot-spl-ddr/u-boot-spl': GetPaddedDataForEntry: size 0x228ec
Node '/binman/u-boot-spl-ddr/u-boot-spl': GetData: 2 entries, total size 0x228ec
 Node '/binman/u-boot-spl-ddr': GetPaddedDataForEntry: size 0x3a8ec
Node '/binman/u-boot-spl-ddr/blob-ext@1': GetData: size 0x7df4
 Node '/binman/u-boot-spl-ddr': GetPaddedDataForEntry: size 0x3a8ec
Node '/binman/u-boot-spl-ddr/blob-ext@2': GetData: size 0x684
 Node '/binman/u-boot-spl-ddr': GetPaddedDataForEntry: size 0x3a8ec
Node '/binman/u-boot-spl-ddr/blob-ext@3': GetData: size 0x5ac0
 Node '/binman/u-boot-spl-ddr': GetPaddedDataForEntry: size 0x3a8ec
Node '/binman/u-boot-spl-ddr/blob-ext@4': GetData: size 0x564
 Node '/binman/u-boot-spl-ddr': GetPaddedDataForEntry: size 0x3a8ec
 Node '/binman/u-boot-spl-ddr': GetData: 5 entries, total size 0x3a8ec
 Node '/binman/u-boot-spl-ddr': GetPaddedDataForEntry: size 0x3a8ec
Wrote 0x3a8ec bytes
Node '/binman/flash/mkimage/blob': GetData: size 0x3a8ec
  Node '/binman/flash/mkimage': Packing: offset=None, size=None,
content_size=3ca00
  Node '/binman/flash/mkimage':    - packed: offset=0x0, size=0x3ca00,
content_size=0x3ca00, next_offset=3ca00
  Node '/binman/flash/mkimage': GetData: size 0x3ca00
          Node '/binman/flash': GetPaddedDataForEntry: size None
          Node '/binman/flash': GetData: 1 entries, total size 0x3ca00
          Node '/binman/flash': GetPaddedDataForEntry: size 0x3ca00
          Node '/binman/flash': Packing: offset=None, size=0x3ca00,
content_size=3ca00
          Node '/binman/flash':    - packed: offset=0x0, size=0x3ca00,
content_size=0x3ca00, next_offset=3ca00
File ./u-boot.dtb.out: Update node '/binman/flash' prop 'offset' to 0x0
File ./u-boot.dtb.out: Update node '/binman/flash' prop 'size' to 0x3ca00
File ./u-boot.dtb.out: Update node '/binman/flash' prop 'image-pos' to 0x0
File ./u-boot.dtb.out: Update node '/binman/flash/mkimage' prop 'offset' to 0x0
File ./u-boot.dtb.out: Update node '/binman/flash/mkimage' prop 'size'
to 0x3ca00
File ./u-boot.dtb.out: Update node '/binman/flash/mkimage' prop
'image-pos' to 0x0
Pack completed after 1 pass(es)
Writing image to './flash.bin'
  Node '/binman/flash/mkimage': GetData: size 0x3ca00
          Node '/binman/flash': GetPaddedDataForEntry: size 0x3ca00
          Node '/binman/flash': GetData: 1 entries, total size 0x3ca00
          Node '/binman/flash': GetPaddedDataForEntry: size 0x3ca00
Wrote 0x3ca00 bytes
Node '/binman/itb/fit/images/uboot/blob-ext': Packing: offset=None,
size=None, content_size=aa978
Node '/binman/itb/fit/images/uboot/blob-ext':    - packed: offset=0x0,
size=0xaa978, content_size=0xaa978, next_offset=aa978
Node '/binman/itb/fit/images/uboot/blob-ext': GetData: size 0xaa978
Node '/binman/itb/fit/images/uboot': GetPaddedDataForEntry: size None
Node '/binman/itb/fit/images/uboot': GetData: 1 entries, total size 0xaa978
            Node '/binman/itb': GetPaddedDataForEntry: size None
Node '/binman/itb/fit/images/uboot': Packing: offset=None,
size=0xaa978, content_size=aa978
Node '/binman/itb/fit/images/uboot':    - packed: offset=0x0,
size=0xaa978, content_size=0xaa978, next_offset=aa978
Node '/binman/itb/fit/images/uboot/blob-ext': GetData: size 0xaa978
Node '/binman/itb/fit/images/uboot': GetPaddedDataForEntry: size 0xaa978
Node '/binman/itb/fit/images/uboot': GetData: 1 entries, total size 0xaa978
Node '/binman/itb/fit/images/atf/blob-ext': Packing: offset=None,
size=None, content_size=9159
Node '/binman/itb/fit/images/atf/blob-ext':    - packed: offset=0x0,
size=0x9159, content_size=0x9159, next_offset=9159
Node '/binman/itb/fit/images/atf/blob-ext': GetData: size 0x9159
Node '/binman/itb/fit/images/atf': GetPaddedDataForEntry: size None
Node '/binman/itb/fit/images/atf': GetData: 1 entries, total size 0x9159
            Node '/binman/itb': GetPaddedDataForEntry: size None
Node '/binman/itb/fit/images/atf': Packing: offset=None, size=0x9159,
content_size=9159
Node '/binman/itb/fit/images/atf':    - packed: offset=0x0,
size=0x9159, content_size=0x9159, next_offset=9159
Node '/binman/itb/fit/images/atf/blob-ext': GetData: size 0x9159
Node '/binman/itb/fit/images/atf': GetPaddedDataForEntry: size 0x9159
Node '/binman/itb/fit/images/atf': GetData: 1 entries, total size 0x9159
        Node '/binman/itb/fit': Packing: offset=None, size=None,
content_size=e5f64
        Node '/binman/itb/fit':    - packed: offset=0x0, size=0xe5f64,
content_size=0xe5f64, next_offset=e5f64
        Node '/binman/itb/fit': GetData: size 0xe5f64
            Node '/binman/itb': GetPaddedDataForEntry: size None
            Node '/binman/itb': GetData: 1 entries, total size 0xe5f64
            Node '/binman/itb': GetPaddedDataForEntry: size 0xe5f64
            Node '/binman/itb': Packing: offset=None, size=0xe5f64,
content_size=e5f64
            Node '/binman/itb':    - packed: offset=0x0, size=0xe5f64,
content_size=0xe5f64, next_offset=e5f64
File ./u-boot.dtb.out: Update node '/binman/itb' prop 'offset' to 0x0
File ./u-boot.dtb.out: Update node '/binman/itb' prop 'size' to 0xe5f64
File ./u-boot.dtb.out: Update node '/binman/itb' prop 'image-pos' to 0x0
File ./u-boot.dtb.out: Update node '/binman/itb/fit' prop 'offset' to 0x0
File ./u-boot.dtb.out: Update node '/binman/itb/fit' prop 'size' to 0xe5f64
File ./u-boot.dtb.out: Update node '/binman/itb/fit' prop 'image-pos' to 0x0
Pack completed after 1 pass(es)

Regards,

Tim

  reply	other threads:[~2021-07-16 21:44 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-07-15 22:57 using binman fails boot Tim Harvey
2021-07-16  4:30 ` Simon Glass
2021-07-16 21:43   ` Tim Harvey [this message]
2021-07-16 22:11     ` Simon Glass
2021-07-16 23:15       ` Tim Harvey
2021-07-18  2:22         ` Simon Glass
2021-07-19 23:23           ` Tim Harvey
2021-07-23  3:07             ` Simon Glass
2021-07-23 21:06               ` Tim Harvey
2021-07-23 21:41                 ` Simon Glass
2021-07-23 22:51                   ` Tim Harvey
2021-07-24 22:01                     ` Simon Glass
2021-07-26 18:42                       ` Tim Harvey
2021-07-28  2:46                         ` 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=CAJ+vNU2tBDZ_m+39GNob31B9c4mbdGQoL1AOC7baV2gtFhai3g@mail.gmail.com \
    --to=tharvey@gateworks.com \
    --cc=sjg@chromium.org \
    --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.