[U-Boot-Users] libfdt problem when loading device tree

I get this when I try to boot my board: ## Booting image at 00200000 ... Image Name: oskernel02a:p1a:99 Created: 2007-12-13 9:59:43 UTC Image Type: PowerPC Linux Kernel Image (gzip compressed) Data Size: 1238992 Bytes = 1.2 MB Load Address: 00000000 Entry Point: 00000000 Verifying Checksum ... OK Uncompressing Kernel Image ... OK Loading Device Tree to 007fe000, end 007ff6f9 ... OK WARNING: could not create /bd_t FDT_ERR_NOSPACE. fdt_bd_t: FDT_ERR_NOSPACE ERROR: /bd_t node create failed - must RESET the board to recover. Resetting the board.
I have tried different combinations of -S and -R options to dtc, but nothing helps: dtc -S 2000 -R 2000 -f of-tmcu.dts -O asm > of-tmcu.S
If I remove the chosen node from my dts file, I get the error when libfdt tries to create a chosen node.
I am using dtc 1.0.0 and u-boot 1.3.1
Jocke

On Dec 13, 2007, at 10:24 AM, Joakim Tjernlund wrote:
I get this when I try to boot my board: ## Booting image at 00200000 ... Image Name: oskernel02a:p1a:99 Created: 2007-12-13 9:59:43 UTC Image Type: PowerPC Linux Kernel Image (gzip compressed) Data Size: 1238992 Bytes = 1.2 MB Load Address: 00000000 Entry Point: 00000000 Verifying Checksum ... OK Uncompressing Kernel Image ... OK Loading Device Tree to 007fe000, end 007ff6f9 ... OK WARNING: could not create /bd_t FDT_ERR_NOSPACE. fdt_bd_t: FDT_ERR_NOSPACE ERROR: /bd_t node create failed - must RESET the board to recover. Resetting the board.
I have tried different combinations of -S and -R options to dtc, but nothing helps: dtc -S 2000 -R 2000 -f of-tmcu.dts -O asm > of-tmcu.S
If I remove the chosen node from my dts file, I get the error when libfdt tries to create a chosen node.
I am using dtc 1.0.0 and u-boot 1.3.1
How big is the .dtb if you don't specify -S? The -R should only be something like 8.
- k

On Thu, 2007-12-13 at 10:34 -0600, Kumar Gala wrote:
On Dec 13, 2007, at 10:24 AM, Joakim Tjernlund wrote:
I get this when I try to boot my board: ## Booting image at 00200000 ... Image Name: oskernel02a:p1a:99 Created: 2007-12-13 9:59:43 UTC Image Type: PowerPC Linux Kernel Image (gzip compressed) Data Size: 1238992 Bytes = 1.2 MB Load Address: 00000000 Entry Point: 00000000 Verifying Checksum ... OK Uncompressing Kernel Image ... OK Loading Device Tree to 007fe000, end 007ff6f9 ... OK WARNING: could not create /bd_t FDT_ERR_NOSPACE. fdt_bd_t: FDT_ERR_NOSPACE ERROR: /bd_t node create failed - must RESET the board to recover. Resetting the board.
I have tried different combinations of -S and -R options to dtc, but nothing helps: dtc -S 2000 -R 2000 -f of-tmcu.dts -O asm > of-tmcu.S
If I remove the chosen node from my dts file, I get the error when libfdt tries to create a chosen node.
I am using dtc 1.0.0 and u-boot 1.3.1
How big is the .dtb if you don't specify -S? The -R should only be something like 8.
dtc -R 8 -f of-tmcu.dts -O asm > of-tmcu.S makes ls -s of-tmcu.S 24 of-tmcu.S and size of-tmcu.o text data bss dec hex filename 5696 0 0 5696 1640 of-tmcu.o
Jocke

Kumar Gala wrote:
On Dec 13, 2007, at 10:24 AM, Joakim Tjernlund wrote:
I get this when I try to boot my board: ## Booting image at 00200000 ... Image Name: oskernel02a:p1a:99 Created: 2007-12-13 9:59:43 UTC Image Type: PowerPC Linux Kernel Image (gzip compressed) Data Size: 1238992 Bytes = 1.2 MB Load Address: 00000000 Entry Point: 00000000 Verifying Checksum ... OK Uncompressing Kernel Image ... OK Loading Device Tree to 007fe000, end 007ff6f9 ... OK WARNING: could not create /bd_t FDT_ERR_NOSPACE. fdt_bd_t: FDT_ERR_NOSPACE ERROR: /bd_t node create failed - must RESET the board to recover. Resetting the board.
I have tried different combinations of -S and -R options to dtc, but nothing helps: dtc -S 2000 -R 2000 -f of-tmcu.dts -O asm > of-tmcu.S
If I remove the chosen node from my dts file, I get the error when libfdt tries to create a chosen node.
I am using dtc 1.0.0 and u-boot 1.3.1
How big is the .dtb if you don't specify -S? The -R should only be something like 8.
- k
More trivia for Jocke:
Note that there now also is a "-s nnnn" option (IIRC and if you have the latest dtc) which *adds* nnnn bytes to the blob rather than making the blob a fixed size nnnn (IIRC, Kumar created it). Depending on your circumstances and preferences, this could be a better choice than -S.
Having the /chosen node already in the blob has severe limitations. Improving that is in my "todo" list: "...a suggestion by Scott Wood to make the /chosen handling finer grained: if the /chosen node exists, currently u-boot-fdt bails out. A better methodology is to not overwrite pre-existing properties on a per-property basis, so if /chosen exists but a necessary /chosen/property doesn't, it gets created."
IOW, if you create a blob with /chosen, you must have *everything* necessary in it because it won't be fixed up at runtime.
Tip: if you do "fdt chosen" and then "fdt print /chosen", it will tell you exactly what your board fixup code put in the /chosen node.
FWIIW, I created a patch to implement Scott's suggestion, but it needs to be resurrected, rebased, and tested.
gvb

-----Original Message----- From: Jerry Van Baren [mailto:gerald.vanbaren@ge.com] Sent: den 13 december 2007 20:00 To: Kumar Gala Cc: joakim.tjernlund@transmode.se; U-BOOT Subject: Re: [U-Boot-Users] libfdt problem when loading device tree
Kumar Gala wrote:
On Dec 13, 2007, at 10:24 AM, Joakim Tjernlund wrote:
I get this when I try to boot my board: ## Booting image at 00200000 ... Image Name: oskernel02a:p1a:99 Created: 2007-12-13 9:59:43 UTC Image Type: PowerPC Linux Kernel Image (gzip compressed) Data Size: 1238992 Bytes = 1.2 MB Load Address: 00000000 Entry Point: 00000000 Verifying Checksum ... OK Uncompressing Kernel Image ... OK Loading Device Tree to 007fe000, end 007ff6f9 ... OK WARNING: could not create /bd_t FDT_ERR_NOSPACE. fdt_bd_t: FDT_ERR_NOSPACE ERROR: /bd_t node create failed - must RESET the board to recover. Resetting the board.
I have tried different combinations of -S and -R options to dtc, but nothing helps: dtc -S 2000 -R 2000 -f of-tmcu.dts -O asm > of-tmcu.S
If I remove the chosen node from my dts file, I get the error when libfdt tries to create a chosen node.
I am using dtc 1.0.0 and u-boot 1.3.1
How big is the .dtb if you don't specify -S? The -R should
only be
something like 8.
- k
More trivia for Jocke:
Thanks for telling me this
Note that there now also is a "-s nnnn" option (IIRC and if you have the latest dtc) which *adds* nnnn bytes to the blob rather than making the blob a fixed size nnnn (IIRC, Kumar created it). Depending on your circumstances and preferences, this could be a better choice than -S.
I was about to suggest this after my mishap but got distracted. It is a useful option and I will probably use it in the future. Perhaps you should error out if the space is too small when using -S? That would have saved me some time.
Having the /chosen node already in the blob has severe limitations. Improving that is in my "todo" list: "...a suggestion by Scott Wood to make the /chosen handling finer grained: if the /chosen node exists, currently u-boot-fdt bails out. A better methodology is to not overwrite pre-existing properties on a per-property basis, so if /chosen exists but a necessary /chosen/property doesn't, it gets created."
IOW, if you create a blob with /chosen, you must have *everything* necessary in it because it won't be fixed up at runtime.
I don't need a chosen node in my dts, I just added it to get futher. Maybe others do.
Tip: if you do "fdt chosen" and then "fdt print /chosen", it will tell you exactly what your board fixup code put in the /chosen node.
Will have a look tmw, still very behind on device tree stuff.
FWIIW, I created a patch to implement Scott's suggestion, but it needs to be resurrected, rebased, and tested.
Good luck and thanks again.
Jocke

Joakim Tjernlund wrote:
I get this when I try to boot my board: ## Booting image at 00200000 ... Image Name: oskernel02a:p1a:99 Created: 2007-12-13 9:59:43 UTC Image Type: PowerPC Linux Kernel Image (gzip compressed) Data Size: 1238992 Bytes = 1.2 MB Load Address: 00000000 Entry Point: 00000000 Verifying Checksum ... OK Uncompressing Kernel Image ... OK Loading Device Tree to 007fe000, end 007ff6f9 ... OK WARNING: could not create /bd_t FDT_ERR_NOSPACE. fdt_bd_t: FDT_ERR_NOSPACE ERROR: /bd_t node create failed - must RESET the board to recover. Resetting the board.
I have tried different combinations of -S and -R options to dtc, but nothing helps: dtc -S 2000 -R 2000 -f of-tmcu.dts -O asm > of-tmcu.S
-S 2000 may be too small, I found I needed -S 3000. If you run dtc without the -S option and add in a verbose/info option(?), dtc will tell you how big your blob is without any padding. Obviously, you need to pad it.
-R 2000 is big time overkill, I've found -R 8 is plenty. These are the memory reserve slots.
If I remove the chosen node from my dts file, I get the error when libfdt tries to create a chosen node.
I don't believe having a /chosen node in the source is recommended. The idea is that u-boot's board configuration customization should create the /chosen node with the proper values either from a-priori knowledge or from probing.
I am using dtc 1.0.0 and u-boot 1.3.1
Jocke
Sounds like a bug with the move operation from flash to RAM. What happens if you copy the blob from flash to RAM from the u-boot command line?
(from memory so I may be wrong)
fdt move <source> <ramblobaddr> bootm <ramdisk> <ramblobaddr>
gvb

On Thu, 2007-12-13 at 11:46 -0500, Jerry Van Baren wrote:
Joakim Tjernlund wrote:
I get this when I try to boot my board: ## Booting image at 00200000 ... Image Name: oskernel02a:p1a:99 Created: 2007-12-13 9:59:43 UTC Image Type: PowerPC Linux Kernel Image (gzip compressed) Data Size: 1238992 Bytes = 1.2 MB Load Address: 00000000 Entry Point: 00000000 Verifying Checksum ... OK Uncompressing Kernel Image ... OK Loading Device Tree to 007fe000, end 007ff6f9 ... OK WARNING: could not create /bd_t FDT_ERR_NOSPACE. fdt_bd_t: FDT_ERR_NOSPACE ERROR: /bd_t node create failed - must RESET the board to recover. Resetting the board.
I have tried different combinations of -S and -R options to dtc, but nothing helps: dtc -S 2000 -R 2000 -f of-tmcu.dts -O asm > of-tmcu.S
-S 2000 may be too small, I found I needed -S 3000. If you run dtc without the -S option and add in a verbose/info option(?), dtc will tell you how big your blob is without any padding. Obviously, you need to pad it.
-R 2000 is big time overkill, I've found -R 8 is plenty. These are the memory reserve slots.
Noted, set to 8 now. This was just a something I tried as noting would work
If I remove the chosen node from my dts file, I get the error when libfdt tries to create a chosen node.
I don't believe having a /chosen node in the source is recommended. The idea is that u-boot's board configuration customization should create the /chosen node with the proper values either from a-priori knowledge or from probing.
I didn't have one, but added one to workaround this problem.
I am using dtc 1.0.0 and u-boot 1.3.1
Jocke
Sounds like a bug with the move operation from flash to RAM. What happens if you copy the blob from flash to RAM from the u-boot command line?
(from memory so I may be wrong)
fdt move <source> <ramblobaddr> bootm <ramdisk> <ramblobaddr>
The same thing happens.
A few observations: fdt list only prints a few nodes: => fdt addr 0xf8026038 => fdt list / { model="TMCUTU"; compatible="MPC83xx"; #address-cells=<0x00000001>; #size-cells=<0x00000001>; chosen { }; board { }; flash@f8000000 { }; cpus { }; memory { }; soc8321@e0000000 { }; qe@e0100000 { }; };
If I produce a dtb file and compare: size of-tmcu.o text data bss dec hex filename 5696 0 0 5696 1640 of-tmcu.o ls -l of-tmcu.dtb -rw-r--r-- 1 jocke users 5690 2007-12-13 17:47 of-tmcu.dtb
The assembler version is 6 bytes bigger
Jocke
gvb

On Thu, 2007-12-13 at 11:46 -0500, Jerry Van Baren wrote:
Joakim Tjernlund wrote:
I get this when I try to boot my board: ## Booting image at 00200000 ... Image Name: oskernel02a:p1a:99 Created: 2007-12-13 9:59:43 UTC Image Type: PowerPC Linux Kernel Image (gzip compressed) Data Size: 1238992 Bytes = 1.2 MB Load Address: 00000000 Entry Point: 00000000 Verifying Checksum ... OK Uncompressing Kernel Image ... OK Loading Device Tree to 007fe000, end 007ff6f9 ... OK WARNING: could not create /bd_t FDT_ERR_NOSPACE. fdt_bd_t: FDT_ERR_NOSPACE ERROR: /bd_t node create failed - must RESET the board to recover. Resetting the board.
I have tried different combinations of -S and -R options to dtc, but nothing helps: dtc -S 2000 -R 2000 -f of-tmcu.dts -O asm > of-tmcu.S
-S 2000 may be too small, I found I needed -S 3000. If you run dtc without the -S option and add in a verbose/info option(?), dtc will tell you how big your blob is without any padding. Obviously, you need to pad it.
yes, that was it. Increasing to -S 0x4000 makes it work. I was noted this when producing a dtb, I got a warning. The asm version does not warn when the *.S is too small.
Jocke

On Thu, 2007-12-13 at 18:07 +0100, Joakim Tjernlund wrote:
On Thu, 2007-12-13 at 11:46 -0500, Jerry Van Baren wrote:
Joakim Tjernlund wrote:
I get this when I try to boot my board: ## Booting image at 00200000 ... Image Name: oskernel02a:p1a:99 Created: 2007-12-13 9:59:43 UTC Image Type: PowerPC Linux Kernel Image (gzip compressed) Data Size: 1238992 Bytes = 1.2 MB Load Address: 00000000 Entry Point: 00000000 Verifying Checksum ... OK Uncompressing Kernel Image ... OK Loading Device Tree to 007fe000, end 007ff6f9 ... OK WARNING: could not create /bd_t FDT_ERR_NOSPACE. fdt_bd_t: FDT_ERR_NOSPACE ERROR: /bd_t node create failed - must RESET the board to recover. Resetting the board.
I have tried different combinations of -S and -R options to dtc, but nothing helps: dtc -S 2000 -R 2000 -f of-tmcu.dts -O asm > of-tmcu.S
-S 2000 may be too small, I found I needed -S 3000. If you run dtc without the -S option and add in a verbose/info option(?), dtc will tell you how big your blob is without any padding. Obviously, you need to pad it.
yes, that was it. Increasing to -S 0x4000 makes it work. I was noted this when producing a dtb, I got a warning. The asm version does not warn when the *.S is too small.
Jocke
FYI, adding a chosen node to the dts file as below makes the boot fail. chosen { linux,stdout-path = "/soc8321@e0000000/serial@4500"; }; This is the same as my OF_STDOUT_PATH: #define OF_STDOUT_PATH "/soc8321@e0000000/serial@4500"
Jocke

Joakim Tjernlund wrote:
On Thu, 2007-12-13 at 11:46 -0500, Jerry Van Baren wrote:
Joakim Tjernlund wrote:
I get this when I try to boot my board: ## Booting image at 00200000 ... Image Name: oskernel02a:p1a:99 Created: 2007-12-13 9:59:43 UTC Image Type: PowerPC Linux Kernel Image (gzip compressed) Data Size: 1238992 Bytes = 1.2 MB Load Address: 00000000 Entry Point: 00000000 Verifying Checksum ... OK Uncompressing Kernel Image ... OK Loading Device Tree to 007fe000, end 007ff6f9 ... OK WARNING: could not create /bd_t FDT_ERR_NOSPACE. fdt_bd_t: FDT_ERR_NOSPACE ERROR: /bd_t node create failed - must RESET the board to recover. Resetting the board.
I have tried different combinations of -S and -R options to dtc, but nothing helps: dtc -S 2000 -R 2000 -f of-tmcu.dts -O asm > of-tmcu.S
-S 2000 may be too small, I found I needed -S 3000. If you run dtc without the -S option and add in a verbose/info option(?), dtc will tell you how big your blob is without any padding. Obviously, you need to pad it.
yes, that was it. Increasing to -S 0x4000 makes it work. I was noted this when producing a dtb, I got a warning. The asm version does not warn when the *.S is too small.
Jocke
Snoopy dance http://www.google.com/search?q=snoopy+dance :-)
WRT one of your previous messages, there are two fdt commands: "fdt print" does a full recursive print, "fdt list" only prints the given level, it does not print subnodes recursively.
gvb

On Thu, 2007-12-13 at 13:03 -0500, Jerry Van Baren wrote:
Joakim Tjernlund wrote:
On Thu, 2007-12-13 at 11:46 -0500, Jerry Van Baren wrote:
Joakim Tjernlund wrote:
I get this when I try to boot my board: ## Booting image at 00200000 ... Image Name: oskernel02a:p1a:99 Created: 2007-12-13 9:59:43 UTC Image Type: PowerPC Linux Kernel Image (gzip compressed) Data Size: 1238992 Bytes = 1.2 MB Load Address: 00000000 Entry Point: 00000000 Verifying Checksum ... OK Uncompressing Kernel Image ... OK Loading Device Tree to 007fe000, end 007ff6f9 ... OK WARNING: could not create /bd_t FDT_ERR_NOSPACE. fdt_bd_t: FDT_ERR_NOSPACE ERROR: /bd_t node create failed - must RESET the board to recover. Resetting the board.
I have tried different combinations of -S and -R options to dtc, but nothing helps: dtc -S 2000 -R 2000 -f of-tmcu.dts -O asm > of-tmcu.S
-S 2000 may be too small, I found I needed -S 3000. If you run dtc without the -S option and add in a verbose/info option(?), dtc will tell you how big your blob is without any padding. Obviously, you need to pad it.
yes, that was it. Increasing to -S 0x4000 makes it work. I was noted this when producing a dtb, I got a warning. The asm version does not warn when the *.S is too small.
Jocke
Snoopy dance http://www.google.com/search?q=snoopy+dance :-)
:)
WRT one of your previous messages, there are two fdt commands: "fdt print" does a full recursive print, "fdt list" only prints the given level, it does not print subnodes recursively.
yes, I see now once I actually read the help messages :)
BTW, if you have anything to say/add to the CFG_OF_TREE discussion I and WD had earlier, please do.
Jocke
participants (3)
-
Jerry Van Baren
-
Joakim Tjernlund
-
Kumar Gala