|
|
|
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 Alternate 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, assuming 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 <serverip>
|
|
|
|
=> setenv <ipaddr>
|
|
|
|
=> 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.
|