
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