---------------------------------------
SRIO and PCIE Boot on Corenet Platforms
---------------------------------------

For some PowerPC processors with SRIO or PCIE interface, boot location can be
configured to SRIO or PCIE by RCW. The processor booting from SRIO or PCIE can
do without flash for u-boot image, ucode and ENV. All the images can be fetched
from another processor's memory space by SRIO or PCIE link connected between
them.

This document describes the processes based on an example implemented on P4080DS
platforms and a RCW example with boot from SRIO or PCIE configuration.

Environment of the SRIO or PCIE boot:
	a) Master and slave can be SOCs in one board or SOCs in separate boards.
	b) They are connected with SRIO or PCIE links, whether 1x, 2x or 4x, and
	   directly or through switch system.
	c) Only Master has NorFlash for booting, and all the Master's and Slave's
	   U-Boot images, UCodes will be stored in this flash.
	d) Slave has its own EEPROM for RCW and PBI.
	e) Slave's RCW should configure the SerDes for SRIO or PCIE boot port, set
	   the boot location to SRIO or PCIE, and holdoff all the cores.

	-----------       -----------             -----------
	|         |       |         |             |         |
	|         |       |         |             |         |
	| NorFlash|<----->| Master  |SRIO or PCIE |  Slave  |<---->[EEPROM]
	|         |       |         |<===========>|         |
	|         |       |         |             |         |
	-----------       -----------             -----------

The example based on P4080DS platform:
	Two P4080DS platforms can be used to implement the boot from SRIO or PCIE.
	Their SRIO or PCIE ports 1 will be connected directly and will be used for
	the boot from SRIO or PCIE.

	1. Slave's RCW example for boot from SRIO port 1 and all cores in holdoff.
		00000000: aa55 aa55 010e 0100 0c58 0000 0000 0000
		00000010: 1818 1818 0000 8888 7440 4000 0000 2000
		00000020: f440 0000 0100 0000 0000 0000 0000 0000
		00000030: 0000 0000 0083 0000 0000 0000 0000 0000
		00000040: 0000 0000 0000 0000 0813 8040 063c 778f

	2. Slave's RCW example for boot from PCIE port 1 and all cores in holdoff.
		00000000: aa55 aa55 010e 0100 0c58 0000 0000 0000
		00000010: 1818 1818 0000 8888 1440 4000 0000 2000
		00000020: f040 0000 0100 0000 0020 0000 0000 0000
		00000030: 0000 0000 0083 0000 0000 0000 0000 0000
		00000040: 0000 0000 0000 0000 0813 8040 547e ffc9

	3. Sequence in Step by Step.
		a) Update RCW for slave with boot from SRIO or PCIE port 1 configuration.
		b) Program slave's U-Boot image, UCode, and ENV parameters into master's
		   NorFlash.
		c) Set environment variable "bootmaster" to "SRIO1" or "PCIE1" and save
		   environment for master.
					setenv bootmaster SRIO1
				or
					setenv bootmaster PCIE1
					saveenv
		d) Restart up master and it will boot up normally from its NorFlash.
		   Then, it will finish necessary configurations for slave's boot from
		   SRIO or PCIE port 1.
		e) Master will set inbound SRIO or PCIE windows covered slave's U-Boot
		   image stored in master's NorFlash.
		f) Master will set an inbound SRIO or PCIE window covered slave's UCode
		   and ENV stored in master's NorFlash.
		g) Master will set outbound SRIO or PCIE  windows in order to configure
		   slave's registers for the core's releasing.
		h) Since all cores of slave in holdoff, slave should be powered on before
		   all the above master's steps, and wait to be released by master. In the
		   startup phase of the slave from SRIO or PCIE, it will finish some
		   necessary configurations.
		i) Slave will set a specific TLB entry for the boot process.
		j) Slave will set a LAW entry with the TargetID SRIO or PCIE port 1 for
		   the boot.
		k) Slave will set a specific TLB entry in order to fetch UCode and ENV
		   from master.
		l) Slave will set a LAW entry with the TargetID SRIO or PCIE port 1 for
		   UCode and ENV.

How to use this feature:
	To use this feature, you need to focus those points.

	1. Slave's RCW with SRIO or PCIE boot configurations, and all cores in holdoff
	   configurations.
	   Please refer to the examples given above.

	2. U-Boot image's compilation.
	   For master, U-Boot image should be generated normally.

	   For example, master U-Boot image used on P4080DS should be compiled with

				make P4080DS_config.

	   For slave, U-Boot image should be generated specifically by

				make xxxx_SRIO_PCIE_BOOT_config.

	   For example, slave U-Boot image used on P4080DS should be compiled with

				make P4080DS_SRIO_PCIE_BOOT_config.

	3. Necessary modifications based on a specific environment.
	   For a specific environment, the addresses of the slave's U-Boot image,
	   UCode, ENV stored in master's NorFlash, and any other configurations
	   can be modified in the file:
				include/configs/corenet_ds.h.

	4. Set and save the environment variable "bootmaster" with "SRIO1", "SRIO2"
	   or "PCIE1", "PCIE2", "PCIE3" for master, and then restart it in order to
	   perform the role as a master for boot from SRIO or PCIE.

NOTE: When the Slave's ENV parameters are stored in Master's NorFlash,
      it can fetch them through PCIE or SRIO interface. But the ENV
      parameters can not be modified by "saveenv" or other commands under
      the Slave's u-boot environment, because the Slave can not erase,
      write Master's NorFlash by PCIE or SRIO link.
