mirror of
https://github.com/linux-sunxi/u-boot-sunxi.git
synced 2024-02-12 11:16:03 +08:00
powerpc/t4qds: Slave module for boot from SRIO and PCIE
When a T4 board boots from SRIO or PCIE, it needs to finish these processes: 1. Set all the cores in holdoff status. 2. Set the boot location to one PCIE or SRIO interface by RCW. 3. Set a specific TLB entry for the boot process. 4. Set a LAW entry with the TargetID of one PCIE or SRIO for the boot. 5. Set a specific TLB entry in order to fetch ucode and ENV from master. 6. Set a LAW entry with the TargetID one of the PCIE ports for ucode and ENV. 7. Slave's u-boot image should be generated specifically by make xxxx_SRIO_PCIE_BOOT_config. This will set SYS_TEXT_BASE=0xFFF80000 and other configurations. For more information about the feature of Boot from SRIO/PCIE, please refer to the document doc/README.srio-pcie-boot-corenet. Signed-off-by: Liu Gang <Gang.Liu@freescale.com> Signed-off-by: Andy Fleming <afleming@freescale.com>
This commit is contained in:
@ -1839,6 +1839,7 @@ typedef struct ccsr_gur {
|
|||||||
#define FSL_CORENET2_RCWSR4_SRDS3_PRTCL_SHIFT 11
|
#define FSL_CORENET2_RCWSR4_SRDS3_PRTCL_SHIFT 11
|
||||||
#define FSL_CORENET2_RCWSR4_SRDS4_PRTCL 0x000000f8
|
#define FSL_CORENET2_RCWSR4_SRDS4_PRTCL 0x000000f8
|
||||||
#define FSL_CORENET2_RCWSR4_SRDS4_PRTCL_SHIFT 3
|
#define FSL_CORENET2_RCWSR4_SRDS4_PRTCL_SHIFT 3
|
||||||
|
#define FSL_CORENET_RCWSR6_BOOT_LOC 0x0f800000
|
||||||
#elif defined(CONFIG_PPC_B4860) || defined(CONFIG_PPC_B4420)
|
#elif defined(CONFIG_PPC_B4860) || defined(CONFIG_PPC_B4420)
|
||||||
#define FSL_CORENET2_RCWSR4_SRDS1_PRTCL 0xfe000000
|
#define FSL_CORENET2_RCWSR4_SRDS1_PRTCL 0xfe000000
|
||||||
#define FSL_CORENET2_RCWSR4_SRDS1_PRTCL_SHIFT 25
|
#define FSL_CORENET2_RCWSR4_SRDS1_PRTCL_SHIFT 25
|
||||||
|
@ -55,6 +55,15 @@ struct fsl_e_tlb_entry tlb_table[] = {
|
|||||||
SET_TLB_ENTRY(1, CONFIG_SYS_INIT_L3_ADDR, CONFIG_SYS_INIT_L3_ADDR,
|
SET_TLB_ENTRY(1, CONFIG_SYS_INIT_L3_ADDR, CONFIG_SYS_INIT_L3_ADDR,
|
||||||
MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
|
MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
|
||||||
0, 0, BOOKE_PAGESZ_1M, 1),
|
0, 0, BOOKE_PAGESZ_1M, 1),
|
||||||
|
#elif defined(CONFIG_SRIO_PCIE_BOOT_SLAVE)
|
||||||
|
/*
|
||||||
|
* SRIO_PCIE_BOOT-SLAVE. When slave boot, the address of the
|
||||||
|
* space is at 0xfff00000, it covered the 0xfffff000.
|
||||||
|
*/
|
||||||
|
SET_TLB_ENTRY(1, CONFIG_SYS_SRIO_PCIE_BOOT_SLAVE_ADDR,
|
||||||
|
CONFIG_SYS_SRIO_PCIE_BOOT_SLAVE_ADDR_PHYS,
|
||||||
|
MAS3_SX|MAS3_SW|MAS3_SR, MAS2_W|MAS2_G,
|
||||||
|
0, 0, BOOKE_PAGESZ_1M, 1),
|
||||||
#else
|
#else
|
||||||
SET_TLB_ENTRY(1, 0xfffff000, 0xfffff000,
|
SET_TLB_ENTRY(1, 0xfffff000, 0xfffff000,
|
||||||
MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
|
MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
|
||||||
@ -130,6 +139,16 @@ struct fsl_e_tlb_entry tlb_table[] = {
|
|||||||
SET_TLB_ENTRY(1, QIXIS_BASE, QIXIS_BASE_PHYS,
|
SET_TLB_ENTRY(1, QIXIS_BASE, QIXIS_BASE_PHYS,
|
||||||
MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
|
MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
|
||||||
0, 17, BOOKE_PAGESZ_4K, 1),
|
0, 17, BOOKE_PAGESZ_4K, 1),
|
||||||
|
#ifdef CONFIG_SRIO_PCIE_BOOT_SLAVE
|
||||||
|
/*
|
||||||
|
* SRIO_PCIE_BOOT-SLAVE. 1M space from 0xffe00000 for
|
||||||
|
* fetching ucode and ENV from master
|
||||||
|
*/
|
||||||
|
SET_TLB_ENTRY(1, CONFIG_SYS_SRIO_PCIE_BOOT_UCODE_ENV_ADDR,
|
||||||
|
CONFIG_SYS_SRIO_PCIE_BOOT_UCODE_ENV_ADDR_PHYS,
|
||||||
|
MAS3_SX|MAS3_SW|MAS3_SR, MAS2_G,
|
||||||
|
0, 18, BOOKE_PAGESZ_1M, 1),
|
||||||
|
#endif
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -917,6 +917,7 @@ stxssa_4M powerpc mpc85xx stxssa stx
|
|||||||
T4240QDS powerpc mpc85xx t4qds freescale - T4240QDS:PPC_T4240
|
T4240QDS powerpc mpc85xx t4qds freescale - T4240QDS:PPC_T4240
|
||||||
T4240QDS_SDCARD powerpc mpc85xx t4qds freescale - T4240QDS:PPC_T4240,RAMBOOT_PBL,SDCARD,SYS_TEXT_BASE=0xFFF80000
|
T4240QDS_SDCARD powerpc mpc85xx t4qds freescale - T4240QDS:PPC_T4240,RAMBOOT_PBL,SDCARD,SYS_TEXT_BASE=0xFFF80000
|
||||||
T4240QDS_SPIFLASH powerpc mpc85xx t4qds freescale - T4240QDS:PPC_T4240,RAMBOOT_PBL,SPIFLASH,SYS_TEXT_BASE=0xFFF80000
|
T4240QDS_SPIFLASH powerpc mpc85xx t4qds freescale - T4240QDS:PPC_T4240,RAMBOOT_PBL,SPIFLASH,SYS_TEXT_BASE=0xFFF80000
|
||||||
|
T4240QDS_SRIO_PCIE_BOOT powerpc mpc85xx t4qds freescale - T4240QDS:PPC_T4240,SRIO_PCIE_BOOT_SLAVE,SYS_TEXT_BASE=0xFFF80000
|
||||||
T4160QDS powerpc mpc85xx t4qds freescale - T4240QDS:PPC_T4160
|
T4160QDS powerpc mpc85xx t4qds freescale - T4240QDS:PPC_T4160
|
||||||
T4160QDS_SDCARD powerpc mpc85xx t4qds freescale - T4240QDS:PPC_T4160,RAMBOOT_PBL,SDCARD,SYS_TEXT_BASE=0xFFF80000
|
T4160QDS_SDCARD powerpc mpc85xx t4qds freescale - T4240QDS:PPC_T4160,RAMBOOT_PBL,SDCARD,SYS_TEXT_BASE=0xFFF80000
|
||||||
T4160QDS_SPIFLASH powerpc mpc85xx t4qds freescale - T4240QDS:PPC_T4160,RAMBOOT_PBL,SPIFLASH,SYS_TEXT_BASE=0xFFF80000
|
T4160QDS_SPIFLASH powerpc mpc85xx t4qds freescale - T4240QDS:PPC_T4160,RAMBOOT_PBL,SPIFLASH,SYS_TEXT_BASE=0xFFF80000
|
||||||
|
@ -33,6 +33,15 @@
|
|||||||
#define CONFIG_PBLRCW_CONFIG $(SRCTREE)/board/freescale/t4qds/t4_rcw.cfg
|
#define CONFIG_PBLRCW_CONFIG $(SRCTREE)/board/freescale/t4qds/t4_rcw.cfg
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_SRIO_PCIE_BOOT_SLAVE
|
||||||
|
/* Set 1M boot space */
|
||||||
|
#define CONFIG_SYS_SRIO_PCIE_BOOT_SLAVE_ADDR (CONFIG_SYS_TEXT_BASE & 0xfff00000)
|
||||||
|
#define CONFIG_SYS_SRIO_PCIE_BOOT_SLAVE_ADDR_PHYS \
|
||||||
|
(0x300000000ull | CONFIG_SYS_SRIO_PCIE_BOOT_SLAVE_ADDR)
|
||||||
|
#define CONFIG_RESET_VECTOR_ADDRESS 0xfffffffc
|
||||||
|
#define CONFIG_SYS_NO_FLASH
|
||||||
|
#endif
|
||||||
|
|
||||||
#define CONFIG_CMD_REGINFO
|
#define CONFIG_CMD_REGINFO
|
||||||
|
|
||||||
/* High Level Configuration Options */
|
/* High Level Configuration Options */
|
||||||
@ -72,14 +81,15 @@
|
|||||||
#define CONFIG_ENV_OVERWRITE
|
#define CONFIG_ENV_OVERWRITE
|
||||||
|
|
||||||
#ifdef CONFIG_SYS_NO_FLASH
|
#ifdef CONFIG_SYS_NO_FLASH
|
||||||
|
#if !defined(CONFIG_SRIO_PCIE_BOOT_SLAVE) && !defined(CONFIG_RAMBOOT_PBL)
|
||||||
#define CONFIG_ENV_IS_NOWHERE
|
#define CONFIG_ENV_IS_NOWHERE
|
||||||
|
#endif
|
||||||
#else
|
#else
|
||||||
#define CONFIG_FLASH_CFI_DRIVER
|
#define CONFIG_FLASH_CFI_DRIVER
|
||||||
#define CONFIG_SYS_FLASH_CFI
|
#define CONFIG_SYS_FLASH_CFI
|
||||||
#define CONFIG_SYS_FLASH_USE_BUFFER_WRITE
|
#define CONFIG_SYS_FLASH_USE_BUFFER_WRITE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef CONFIG_SYS_NO_FLASH
|
|
||||||
#if defined(CONFIG_SPIFLASH)
|
#if defined(CONFIG_SPIFLASH)
|
||||||
#define CONFIG_SYS_EXTRA_ENV_RELOC
|
#define CONFIG_SYS_EXTRA_ENV_RELOC
|
||||||
#define CONFIG_ENV_IS_IN_SPI_FLASH
|
#define CONFIG_ENV_IS_IN_SPI_FLASH
|
||||||
@ -101,18 +111,18 @@
|
|||||||
#define CONFIG_ENV_IS_IN_NAND
|
#define CONFIG_ENV_IS_IN_NAND
|
||||||
#define CONFIG_ENV_SIZE CONFIG_SYS_NAND_BLOCK_SIZE
|
#define CONFIG_ENV_SIZE CONFIG_SYS_NAND_BLOCK_SIZE
|
||||||
#define CONFIG_ENV_OFFSET (5 * CONFIG_SYS_NAND_BLOCK_SIZE)
|
#define CONFIG_ENV_OFFSET (5 * CONFIG_SYS_NAND_BLOCK_SIZE)
|
||||||
|
#elif defined(CONFIG_SRIO_PCIE_BOOT_SLAVE)
|
||||||
|
#define CONFIG_ENV_IS_IN_REMOTE
|
||||||
|
#define CONFIG_ENV_ADDR 0xffe20000
|
||||||
|
#define CONFIG_ENV_SIZE 0x2000
|
||||||
|
#elif defined(CONFIG_ENV_IS_NOWHERE)
|
||||||
|
#define CONFIG_ENV_SIZE 0x2000
|
||||||
#else
|
#else
|
||||||
#define CONFIG_ENV_IS_IN_FLASH
|
#define CONFIG_ENV_IS_IN_FLASH
|
||||||
#define CONFIG_ENV_ADDR (CONFIG_SYS_MONITOR_BASE - CONFIG_ENV_SECT_SIZE)
|
#define CONFIG_ENV_ADDR (CONFIG_SYS_MONITOR_BASE - CONFIG_ENV_SECT_SIZE)
|
||||||
#define CONFIG_ENV_SIZE 0x2000
|
#define CONFIG_ENV_SIZE 0x2000
|
||||||
#define CONFIG_ENV_SECT_SIZE 0x20000 /* 128K (one sector) */
|
#define CONFIG_ENV_SECT_SIZE 0x20000 /* 128K (one sector) */
|
||||||
#endif
|
#endif
|
||||||
#else /* CONFIG_SYS_NO_FLASH */
|
|
||||||
#define CONFIG_ENV_SIZE 0x2000
|
|
||||||
#define CONFIG_ENV_SECT_SIZE 0x20000 /* 128K (one sector) */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define CONFIG_SYS_CLK_FREQ get_board_sys_clk()
|
#define CONFIG_SYS_CLK_FREQ get_board_sys_clk()
|
||||||
#define CONFIG_DDR_CLK_FREQ get_board_ddr_clk()
|
#define CONFIG_DDR_CLK_FREQ get_board_ddr_clk()
|
||||||
@ -634,6 +644,16 @@ unsigned long get_board_ddr_clk(void);
|
|||||||
#elif defined(CONFIG_NAND)
|
#elif defined(CONFIG_NAND)
|
||||||
#define CONFIG_SYS_QE_FMAN_FW_IN_NAND
|
#define CONFIG_SYS_QE_FMAN_FW_IN_NAND
|
||||||
#define CONFIG_SYS_QE_FMAN_FW_ADDR (6 * CONFIG_SYS_NAND_BLOCK_SIZE)
|
#define CONFIG_SYS_QE_FMAN_FW_ADDR (6 * CONFIG_SYS_NAND_BLOCK_SIZE)
|
||||||
|
#elif defined(CONFIG_SRIO_PCIE_BOOT_SLAVE)
|
||||||
|
/*
|
||||||
|
* Slave has no ucode locally, it can fetch this from remote. When implementing
|
||||||
|
* in two corenet boards, slave's ucode could be stored in master's memory
|
||||||
|
* space, the address can be mapped from slave TLB->slave LAW->
|
||||||
|
* slave SRIO or PCIE outbound window->master inbound window->
|
||||||
|
* master LAW->the ucode address in master's memory space.
|
||||||
|
*/
|
||||||
|
#define CONFIG_SYS_QE_FMAN_FW_IN_REMOTE
|
||||||
|
#define CONFIG_SYS_QE_FMAN_FW_ADDR 0xFFE00000
|
||||||
#else
|
#else
|
||||||
#define CONFIG_SYS_QE_FMAN_FW_IN_NOR
|
#define CONFIG_SYS_QE_FMAN_FW_IN_NOR
|
||||||
#define CONFIG_SYS_QE_FMAN_FW_ADDR 0xEFF40000
|
#define CONFIG_SYS_QE_FMAN_FW_ADDR 0xEFF40000
|
||||||
|
Reference in New Issue
Block a user