[U-Boot-Users] A simple howto boot sequoia (ARCH=powerpc) using flattened device tree (FDT)

Larry Johnson lrj at arlinx.com
Thu May 22 18:58:57 CEST 2008


Hi Niklaus, Stefan, and all,

Niklaus Giger wrote:
> Hi
> 
> It took me a evening to put everything together. Therefore I send this mail
> hoping it may help somebody else. Hopefully some of the content will find
> its way into the DULG/FAQ, may as point 14.3.30. "Booting using flattened device tree (FDT)"

Niklaus, thank you for putting together this howto.  It did help me.

I also have a couple of comments and questions.
 
> First one needs a recent U-boot with FDT support compiled into, e.g 
> 1.3.2-rc3-g772003e4-dirty (Apr 11 2008 - 15:56:0 for the sequoia board.
> 
> Secone one needs a recent Linux kernel made using "ARCH=powerpc", e.g. from 
> 2.6.25-00002-ga9bf9f0 from  git://www.denx.de/git/linux-2.6-denx.git.
> 
> Third one needs a recent dtc (Device Tree Compiler). The following commands
> $ git clone http://www.jdl.com/software/dtc.git
> $ cd dtc && make && sudo cp dtc /usr/local/bin
> should do the job.
> 
> Now you are ready to compile the device tree blob. I used the commands given in
> http://www.denx.de/wiki/view/DULG/LinuxFDTBlob
> dtc -b 0 -V 17 -R 4 -S 0x3000 -I dts -O dtb -f arch/powerpc/boot/dts/sequoia.dts \
>> /tftpboot/sequoia/sequoia.dtb

BTW, because the ">" before "/tftpboot/sequoia/sequoia.dtb" is the first
character on the line, Thunderbird displays it as a quote.

> Now power up your sequoia board and execute the following commands to start a
> Linux kernel on a NFS root device. The following commands did the job for me:
> 
>> Hit any key to stop autoboot:  0
>> => tftp  200000 /tftpboot/sequoia/uImage
>> Waiting for PHY auto negotiation to complete.. done
>> ENET Speed is 100 Mbps - FULL duplex connection (EMAC0)
>> Using ppc_4xx_eth0 device
>> TFTP from server 172.25.1.3; our IP address is 172.25.1.88
>> Filename '/tftpboot/sequoia/uImage'.
>> Load address: 0x200000
>> Loading: #################################################################
>>          ######################
>> done
>> Bytes transferred = 1277067 (137c8b hex)
>> => tftp 1000000 /tftpboot/sequoia/sequoia.dtb
>> ENET Speed is 100 Mbps - FULL duplex connection (EMAC0)
>> Using ppc_4xx_eth0 device
>> TFTP from server 172.25.1.3; our IP address is 172.25.1.88
>> Filename '/tftpboot/sequoia/sequoia.dtb'.
>> Load address: 0x1000000
>> Loading: #
>> done
>> Bytes transferred = 12288 (3000 hex)
>> => run nfsargs addip addtty
>> => printenv bootargs
>> bootargs=root=/dev/nfs rw nfsroot=172.25.1.3:/opt/eldk/ppc_4xxFP
>> ip=172.25.1.88:172.25.1.3:::sequoia:eth0:off panic=1 console=ttyS0,115200

The "sequoia.dts" file in linux-2.6-denx contains a line specifying
"bootargs", and this apparently overrides the environment variable, as
can be seen by typing "cat /proc/cmdline" under Linux.

>> => fdt addr 1000000
>> => fdt chosen
>> => fdt list
> <...>
>> => fdt print
> <...>
>> => bootm 200000 - 1000000
>> ## Booting image at 00200000 ...

When I run this using U-Boot 1.3.3, it tells me that it's booting a
"Legacy Image".  Is this correct?

>>    Image Name:   Linux-2.6.25-00002-ga9bf9f0
>>    Image Type:   PowerPC Linux Kernel Image (gzip compressed)
>>    Data Size:    1277003 Bytes =  1.2 MB
>>    Load Address: 00000000
>>    Entry Point:  00000000
>>    Verifying Checksum ... OK
>>    Uncompressing Kernel Image ... OK
>>    Booting using the fdt at 0x1000000
>>    Loading Device Tree to 007fc000, end 007fefff ... OK
>> Using Sequoia machine description
> <...>
> 
> Thats it. Now you should boot into your shiny new Linux kernel. Attached is
> a gzipped output of my startup (for the curious).
> 
> Once my kernel started I used the following commands to update my u-boot
> environment:
>> setenv ftd_get 'tftp 200000 ${bootfile};tftp 1000000 sequoia/sequoia.dtb;fdt addr 1000000;' 
>> setenv net_nfs 'run ftd_get nfsargs addip addtty; fdt chosen;bootm 200000 - 1000000' 
>> saveenv 
> 
> Best regards
> 
> Niklaus

I normally test Linux by booting Sequoia from the flash images
distributed by AMCC.  The flash partition information in "sequoia.dts"
is for an early distribution (Rev. 2, I think).  The latest distribution
I have is Rev. 6.  (Is there anything later?)  The following patch
updates the partition information for Rev 6.  It also comments out the
"bootargs" definition, so I can specify it from U-Boot.


diff --git a/arch/powerpc/boot/dts/sequoia.dts b/arch/powerpc/boot/dts/sequoia.dts
index 96dbe49..181b796 100644
--- a/arch/powerpc/boot/dts/sequoia.dts
+++ b/arch/powerpc/boot/dts/sequoia.dts
@@ -168,32 +168,36 @@
 				nor_flash at 0,0 {
 					compatible = "amd,s29gl256n", "cfi-flash";
 					bank-width = <2>;
-					reg = <0 000000 4000000>;
+					reg = <0 0000000 4000000>;
 					#address-cells = <1>;
 					#size-cells = <1>;
-					partition at 0 {
+					partition at 0000000 {
 						label = "Kernel";
-						reg = <0 180000>;
+						reg = <0000000 0200000>;
 					};
-					partition at 180000 {
+					partition at 0200000 {
+						label = "kozio";
+						reg = <0200000 0200000>;
+					};
+					partition at 0400000 {
 						label = "ramdisk";
-						reg = <180000 200000>;
+						reg = <0400000 1400000>;
 					};
-					partition at 380000 {
+					partition at 1800000 {
 						label = "file system";
-						reg = <380000 3aa0000>;
+						reg = <1800000 0400000>;
 					};
-					partition at 3e20000 {
-						label = "kozio";
-						reg = <3e20000 140000>;
+					partition at 1c00000 {
+						label = "unused";
+						reg = <1c00000 2360000>;
 					};
 					partition at 3f60000 {
 						label = "env";
-						reg = <3f60000 40000>;
+						reg = <3f60000 0040000>;
 					};
 					partition at 3fa0000 {
 						label = "u-boot";
-						reg = <3fa0000 60000>;
+						reg = <3fa0000 0060000>;
 					};
 				};
 
@@ -359,6 +363,6 @@
 
 	chosen {
 		linux,stdout-path = "/plb/opb/serial at ef600300";
-		bootargs = "console=ttyS0,115200";
+/*		bootargs = "console=ttyS0,115200"; */
 	};
 };


Best regards,
Larry





More information about the U-Boot mailing list