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.