Overview -------- P2020RDB is a Low End Dual core platform supporting the P2020 processor of QorIQ series. P2020 is an e500 based dual core SOC. Building U-boot ----------- To build the u-boot for P2020RDB: make P2020RDB_config make NOR Flash Banks ----------- RDB board for P2020 has two flash banks. They are both present on boot. Booting by default is always from the boot bank at 0xef00_0000. Memory Map ---------- 0xef00_0000 - 0xef7f_ffff Alernate bank 8MB 0xe800_0000 - 0xefff_ffff Boot bank 8MB 0xef78_0000 - 0xef7f_ffff Alternate u-boot address 512KB 0xeff8_0000 - 0xefff_ffff Boot u-boot address 512KB Switch settings to boot from the NOR flash banks ------------------------------------------------ SW4[8]=0 default NOR Flash bank SW4[8]=1 Alternate NOR Flash bank Flashing Images --------------- To place a new u-boot image in the alternate flash bank and then boot with that new image temporarily, use this: tftp 1000000 u-boot.bin erase ef780000 ef7fffff cp.b 1000000 ef780000 80000 Now to boot from the alternate bank change the SW4[8] from 0 to 1. To program the image in the boot flash bank: tftp 1000000 u-boot.bin protect off all erase eff80000 ffffffff cp.b 1000000 eff80000 80000 Using the Device Tree Source File --------------------------------- To create the DTB (Device Tree Binary) image file, use a command similar to this: dtc -b 0 -f -I dts -O dtb p2020rdb.dts > p2020rdb.dtb Likely, that .dts file will come from here; linux-2.6/arch/powerpc/boot/dts/p2020rdb.dts Booting Linux ------------- Place a linux uImage in the TFTP disk area. tftp 1000000 uImage.p2020rdb tftp 2000000 rootfs.ext2.gz.uboot tftp c00000 p2020rdb.dtb bootm 1000000 2000000 c00000 Implementing AMP(Asymmetric MultiProcessing) --------------------------------------------- 1. Build kernel image for core0: a. $ make 85xx/p1_p2_rdb_defconfig b. $ make menuconfig - un-select "Processor support"-> "Symetric multi-processing support" c. $ make uImage d. $ cp arch/powerpc/boot/uImage /tftpboot/uImage.core0 2. Build kernel image for core1: a. $ make 85xx/p1_p2_rdb_defconfig b. $ make menuconfig - Un-select "Processor support"-> "Symetric multi-processing support" - Select "Advanced setup" -> "Prompt for advanced kernel configuration options" - Select "Set physical address where the kernel is loaded" and set it to 0x20000000, asssuming core1 will start from 512MB. - Select "Set custom page offset address" - Select "Set custom kernel base address" - Select "Set maximum low memory" - "Exit" and save the selection. c. $ make uImage d. $ cp arch/powerpc/boot/uImage /tftpboot/uImage.core1 3. Create dtb for core0: $ dtc -I dts -O dtb -f -b 0 arch/powerpc/boot/dts/p2020rdb_camp_core0.dts > /tftpboot/p2020rdb_camp_core0.dtb 4. Create dtb for core1: $ dtc -I dts -O dtb -f -b 1 arch/powerpc/boot/dts/p2020rdb_camp_core1.dts > /tftpboot/p2020rdb_camp_core1.dtb 5. Bring up two cores separately: a. Power on the board, under u-boot prompt: => setenv => setenv => setenv bootargs root=/dev/ram rw console=ttyS0,115200 b. Bring up core1's kernel first: => setenv bootm_low 0x20000000 => setenv bootm_size 0x10000000 => tftp 21000000 uImage.core1 => tftp 22000000 ramdiskfile => tftp 20c00000 p2020rdb_camp_core1.dtb => interrupts off => bootm start 21000000 22000000 20c00000 => bootm loados => bootm ramdisk => bootm fdt => fdt boardsetup => fdt chosen $initrd_start $initrd_end => bootm prep => cpu 1 release $bootm_low - $fdtaddr - c. Bring up core0's kernel(on the same u-boot console): => setenv bootm_low 0 => setenv bootm_size 0x20000000 => tftp 1000000 uImage.core0 => tftp 2000000 ramdiskfile => tftp c00000 p2020rdb_camp_core0.dtb => bootm 1000000 2000000 c00000 Please note only core0 will run u-boot, core1 starts kernel directly after "cpu release" command is issued.