diff options
| author | Ying Zhang <b40530@freescale.com> | 2013-09-06 17:30:58 +0800 | 
|---|---|---|
| committer | York Sun <yorksun@freescale.com> | 2013-10-16 16:13:12 -0700 | 
| commit | 62c6ef336d8d315e3aed1fc7d4235db210e1c75d (patch) | |
| tree | 62f66f331ab8c868bb1ed1a0cf8781cb1009260f | |
| parent | d34e56241de299e12639ea39ef65c537cf0ded18 (diff) | |
| download | olio-uboot-2014.01-62c6ef336d8d315e3aed1fc7d4235db210e1c75d.tar.xz olio-uboot-2014.01-62c6ef336d8d315e3aed1fc7d4235db210e1c75d.zip | |
powerpc: p1_p2_rdb_pc: add TPL for p1_p2_rdb_pc nand boot
Enable TPL for p1_p2_rdb_pc nand boot.
Signed-off-by: Ying Zhang <b40530@freescale.com>
| -rw-r--r-- | board/freescale/p1_p2_rdb_pc/spl.c | 15 | ||||
| -rw-r--r-- | board/freescale/p1_p2_rdb_pc/spl_minimal.c | 83 | ||||
| -rw-r--r-- | board/freescale/p1_p2_rdb_pc/tlb.c | 8 | ||||
| -rw-r--r-- | include/configs/p1_p2_rdb_pc.h | 81 | 
4 files changed, 83 insertions, 104 deletions
| diff --git a/board/freescale/p1_p2_rdb_pc/spl.c b/board/freescale/p1_p2_rdb_pc/spl.c index 07fab4634..9bb071692 100644 --- a/board/freescale/p1_p2_rdb_pc/spl.c +++ b/board/freescale/p1_p2_rdb_pc/spl.c @@ -83,12 +83,21 @@ void board_init_r(gd_t *gd, ulong dest_addr)  	mem_malloc_init(CONFIG_SPL_RELOC_MALLOC_ADDR,  			CONFIG_SPL_RELOC_MALLOC_SIZE); +#ifndef CONFIG_SPL_NAND_BOOT  	env_init(); +#endif  #ifdef CONFIG_SPL_MMC_BOOT  	mmc_initialize(bd);  #endif  	/* relocate environment function pointers etc. */ +#ifdef CONFIG_SPL_NAND_BOOT +	nand_spl_load_image(CONFIG_ENV_OFFSET, CONFIG_ENV_SIZE, +			    (uchar *)CONFIG_ENV_ADDR); +	gd->env_addr  = (ulong)(CONFIG_ENV_ADDR); +	gd->env_valid = 1; +#else  	env_relocate(); +#endif  #ifdef CONFIG_SYS_I2C  	i2c_init_all(); @@ -97,11 +106,17 @@ void board_init_r(gd_t *gd, ulong dest_addr)  #endif  	gd->ram_size = initdram(0); +#ifdef CONFIG_SPL_NAND_BOOT +	puts("Tertiary program loader running in sram..."); +#else  	puts("Second program loader running in sram...\n"); +#endif  #ifdef CONFIG_SPL_MMC_BOOT  	mmc_boot();  #elif defined(CONFIG_SPL_SPI_BOOT)  	spi_boot(); +#elif defined(CONFIG_SPL_NAND_BOOT) +	nand_boot();  #endif  } diff --git a/board/freescale/p1_p2_rdb_pc/spl_minimal.c b/board/freescale/p1_p2_rdb_pc/spl_minimal.c index ac07572c8..adfa7b1e0 100644 --- a/board/freescale/p1_p2_rdb_pc/spl_minimal.c +++ b/board/freescale/p1_p2_rdb_pc/spl_minimal.c @@ -15,59 +15,14 @@  DECLARE_GLOBAL_DATA_PTR; -#ifndef CONFIG_SYS_INIT_L2_ADDR -/* - * Fixed sdram init -- doesn't use serial presence detect. - */ -static void sdram_init(void) -{ -	ccsr_ddr_t *ddr = (ccsr_ddr_t *)CONFIG_SYS_MPC8xxx_DDR_ADDR; - -	__raw_writel(CONFIG_SYS_DDR_CS0_BNDS, &ddr->cs0_bnds); -	__raw_writel(CONFIG_SYS_DDR_CS0_CONFIG, &ddr->cs0_config); -#if CONFIG_CHIP_SELECTS_PER_CTRL > 1 -	__raw_writel(CONFIG_SYS_DDR_CS1_BNDS, &ddr->cs1_bnds); -	__raw_writel(CONFIG_SYS_DDR_CS1_CONFIG, &ddr->cs1_config); -#endif -	__raw_writel(CONFIG_SYS_DDR_TIMING_3, &ddr->timing_cfg_3); -	__raw_writel(CONFIG_SYS_DDR_TIMING_0, &ddr->timing_cfg_0); -	__raw_writel(CONFIG_SYS_DDR_TIMING_1, &ddr->timing_cfg_1); -	__raw_writel(CONFIG_SYS_DDR_TIMING_2, &ddr->timing_cfg_2); - -	__raw_writel(CONFIG_SYS_DDR_CONTROL_2, &ddr->sdram_cfg_2); -	__raw_writel(CONFIG_SYS_DDR_MODE_1, &ddr->sdram_mode); -	__raw_writel(CONFIG_SYS_DDR_MODE_2, &ddr->sdram_mode_2); - -	__raw_writel(CONFIG_SYS_DDR_INTERVAL, &ddr->sdram_interval); -	__raw_writel(CONFIG_SYS_DDR_DATA_INIT, &ddr->sdram_data_init); -	__raw_writel(CONFIG_SYS_DDR_CLK_CTRL, &ddr->sdram_clk_cntl); - -	__raw_writel(CONFIG_SYS_DDR_TIMING_4, &ddr->timing_cfg_4); -	__raw_writel(CONFIG_SYS_DDR_TIMING_5, &ddr->timing_cfg_5); -	__raw_writel(CONFIG_SYS_DDR_ZQ_CONTROL, &ddr->ddr_zq_cntl); -	__raw_writel(CONFIG_SYS_DDR_WRLVL_CONTROL, &ddr->ddr_wrlvl_cntl); - -	/* Set, but do not enable the memory */ -	__raw_writel(CONFIG_SYS_DDR_CONTROL & ~SDRAM_CFG_MEM_EN, &ddr->sdram_cfg); - -	asm volatile("sync;isync"); -	udelay(500); - -	/* Let the controller go */ -	out_be32(&ddr->sdram_cfg, in_be32(&ddr->sdram_cfg) | SDRAM_CFG_MEM_EN); - -	set_next_law(0, CONFIG_SYS_SDRAM_SIZE_LAW, LAW_TRGT_IF_DDR_1); -} -#endif -  void board_init_f(ulong bootflag)  {  	u32 plat_ratio;  	ccsr_gur_t *gur = (void *)CONFIG_SYS_MPC85xx_GUTS_ADDR; -#ifndef CONFIG_QE -	ccsr_gpio_t *pgpio = (void *)(CONFIG_SYS_MPC85xx_GPIO_ADDR); -#elif defined(CONFIG_P1021RDB) -	par_io_t *par_io = (par_io_t *)&(gur->qe_par_io); + +#if defined(CONFIG_SYS_NAND_BR_PRELIM) && defined(CONFIG_SYS_NAND_OR_PRELIM) +	set_lbc_br(0, CONFIG_SYS_NAND_BR_PRELIM); +	set_lbc_or(0, CONFIG_SYS_NAND_OR_PRELIM);  #endif  	/* initialize selected port with appropriate baud rate */ @@ -80,35 +35,6 @@ void board_init_f(ulong bootflag)  	puts("\nNAND boot... "); -#ifndef CONFIG_QE -	/* init DDR3 reset signal */ -	__raw_writel(0x02000000, &pgpio->gpdir); -	__raw_writel(0x00200000, &pgpio->gpodr); -	__raw_writel(0x00000000, &pgpio->gpdat); -	udelay(1000); -	__raw_writel(0x00200000, &pgpio->gpdat); -	udelay(1000); -	__raw_writel(0x00000000, &pgpio->gpdir); -#elif defined(CONFIG_P1021RDB) -	/* init DDR3 reset signal CE_PB8 */ -	out_be32(&par_io[1].cpdir1, 0x00004000); -	out_be32(&par_io[1].cpodr, 0x00800000); -	out_be32(&par_io[1].cppar1, 0x00000000); -	/* reset DDR3 */ -	out_be32(&par_io[1].cpdat, 0x00800000); -	udelay(1000); -	out_be32(&par_io[1].cpdat, 0x00000000); -	udelay(1000); -	out_be32(&par_io[1].cpdat, 0x00800000); -	/* disable the CE_PB8 */ -	out_be32(&par_io[1].cpdir1, 0x00000000); -#endif - -#ifndef CONFIG_SYS_INIT_L2_ADDR -	/* Initialize the DDR3 */ -	sdram_init(); -#endif -  	/* copy code to RAM and jump to it - this should not return */  	/* NOTE - code has to be copied out of NAND buffer before  	 * other blocks can be read. @@ -118,6 +44,7 @@ void board_init_f(ulong bootflag)  void board_init_r(gd_t *gd, ulong dest_addr)  { +	puts("\nSecond program loader running in sram...");  	nand_boot();  } diff --git a/board/freescale/p1_p2_rdb_pc/tlb.c b/board/freescale/p1_p2_rdb_pc/tlb.c index d6afa7b6e..1c0008b2e 100644 --- a/board/freescale/p1_p2_rdb_pc/tlb.c +++ b/board/freescale/p1_p2_rdb_pc/tlb.c @@ -98,7 +98,13 @@ struct fsl_e_tlb_entry tlb_table[] = {  	/* *I*G - L2SRAM */  	SET_TLB_ENTRY(1, CONFIG_SYS_INIT_L2_ADDR, CONFIG_SYS_INIT_L2_ADDR_PHYS,  		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_G, -		      0, 11, BOOKE_PAGESZ_256K, 1) +		      0, 11, BOOKE_PAGESZ_256K, 1), +#if CONFIG_SYS_L2_SIZE >= (256 << 10) +	SET_TLB_ENTRY(1, CONFIG_SYS_INIT_L2_ADDR + 0x40000, +		      CONFIG_SYS_INIT_L2_ADDR_PHYS + 0x40000, +		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G, +		      0, 12, BOOKE_PAGESZ_256K, 1) +#endif  #endif  }; diff --git a/include/configs/p1_p2_rdb_pc.h b/include/configs/p1_p2_rdb_pc.h index 35d674665..a435f29c2 100644 --- a/include/configs/p1_p2_rdb_pc.h +++ b/include/configs/p1_p2_rdb_pc.h @@ -205,36 +205,45 @@  #ifdef CONFIG_NAND  #define CONFIG_SPL +#define CONFIG_TPL +#ifdef CONFIG_TPL_BUILD +#define CONFIG_SPL_NAND_BOOT +#define CONFIG_SPL_FLUSH_IMAGE +#define CONFIG_SPL_ENV_SUPPORT +#define CONFIG_SPL_NAND_INIT +#define CONFIG_SPL_SERIAL_SUPPORT +#define CONFIG_SPL_LIBGENERIC_SUPPORT +#define CONFIG_SPL_LIBCOMMON_SUPPORT +#define CONFIG_SPL_I2C_SUPPORT +#define CONFIG_SPL_NAND_SUPPORT +#define CONFIG_SPL_MPC8XXX_INIT_DDR_SUPPORT +#define CONFIG_SPL_COMMON_INIT_DDR +#define CONFIG_SPL_MAX_SIZE		(128 << 10) +#define CONFIG_SPL_TEXT_BASE		0xf8f81000 +#define CONFIG_SYS_MPC85XX_NO_RESETVEC +#define CONFIG_SYS_NAND_U_BOOT_SIZE	(576 << 10) +#define CONFIG_SYS_NAND_U_BOOT_DST	(0x11000000) +#define CONFIG_SYS_NAND_U_BOOT_START	(0x11000000) +#define CONFIG_SYS_NAND_U_BOOT_OFFS	((128 + 128) << 10) +#elif defined(CONFIG_SPL_BUILD)  #define CONFIG_SPL_INIT_MINIMAL  #define CONFIG_SPL_SERIAL_SUPPORT  #define CONFIG_SPL_NAND_SUPPORT  #define CONFIG_SPL_FLUSH_IMAGE  #define CONFIG_SPL_TARGET		"u-boot-with-spl.bin" - -#define CONFIG_SPL_TEXT_BASE		0xfffff000 +#define CONFIG_SPL_TEXT_BASE		0xff800000  #define CONFIG_SPL_MAX_SIZE		4096 +#define CONFIG_SYS_NAND_U_BOOT_SIZE	(128 << 10) +#define CONFIG_SYS_NAND_U_BOOT_DST	0xf8f80000 +#define CONFIG_SYS_NAND_U_BOOT_START	0xf8f80000 +#define CONFIG_SYS_NAND_U_BOOT_OFFS	(128 << 10) +#endif /* not CONFIG_TPL_BUILD */ -#ifdef CONFIG_SYS_INIT_L2_ADDR -/* We multiply CONFIG_SPL_MAX_SIZE by two to leave some room for BSS. */ -#define CONFIG_SYS_TEXT_BASE		0xf8f82000 -#define CONFIG_SPL_RELOC_TEXT_BASE	\ -	(CONFIG_SYS_INIT_L2_END - CONFIG_SPL_MAX_SIZE * 2) -#define CONFIG_SPL_RELOC_STACK		\ -	(CONFIG_SYS_INIT_L2_END - CONFIG_SPL_MAX_SIZE * 2) -#define CONFIG_SYS_NAND_U_BOOT_DST	(CONFIG_SYS_INIT_L2_ADDR) -#define CONFIG_SYS_NAND_U_BOOT_START	\ -	(CONFIG_SYS_INIT_L2_ADDR + CONFIG_SPL_MAX_SIZE) -#else -#define CONFIG_SYS_TEXT_BASE		0x00201000 -#define CONFIG_SPL_RELOC_TEXT_BASE	0x00100000 -#define CONFIG_SPL_RELOC_STACK		0x00100000 -#define CONFIG_SYS_NAND_U_BOOT_DST	(0x00200000 - CONFIG_SPL_MAX_SIZE) -#define CONFIG_SYS_NAND_U_BOOT_START	0x00200000 -#endif - -#define CONFIG_SYS_NAND_U_BOOT_SIZE	((512 << 10) - 0x2000) -#define CONFIG_SYS_NAND_U_BOOT_OFFS	0 -#define CONFIG_SYS_LDSCRIPT		"arch/powerpc/cpu/mpc85xx/u-boot-nand.lds" +#define CONFIG_SPL_PAD_TO		0x20000 +#define CONFIG_TPL_PAD_TO		0x20000 +#define CONFIG_SPL_TARGET		"u-boot-with-spl.bin" +#define CONFIG_SYS_TEXT_BASE		0x11001000 +#define CONFIG_SYS_LDSCRIPT	"arch/powerpc/cpu/mpc85xx/u-boot-nand.lds"  #endif  #ifndef CONFIG_SYS_TEXT_BASE @@ -576,6 +585,23 @@  #define CONFIG_SPL_RELOC_MALLOC_ADDR	(CONFIG_SYS_INIT_L2_ADDR + 160 * 1024)  #define CONFIG_SPL_RELOC_MALLOC_SIZE	(96 << 10)  #define CONFIG_SPL_GD_ADDR		(CONFIG_SYS_INIT_L2_ADDR + 112 * 1024) +#elif defined(CONFIG_NAND) +#ifdef CONFIG_TPL_BUILD +#define CONFIG_SYS_INIT_L2_ADDR		0xf8f80000 +#define CONFIG_SYS_INIT_L2_ADDR_PHYS	CONFIG_SYS_INIT_L2_ADDR +#define CONFIG_SYS_INIT_L2_END	(CONFIG_SYS_INIT_L2_ADDR + CONFIG_SYS_L2_SIZE) +#define CONFIG_SPL_RELOC_TEXT_BASE	0xf8f81000 +#define CONFIG_SPL_RELOC_STACK		(CONFIG_SYS_INIT_L2_ADDR + 192 * 1024) +#define CONFIG_SPL_RELOC_MALLOC_ADDR	(CONFIG_SYS_INIT_L2_ADDR + 208 * 1024) +#define CONFIG_SPL_RELOC_MALLOC_SIZE	(48 << 10) +#define CONFIG_SPL_GD_ADDR		(CONFIG_SYS_INIT_L2_ADDR + 176 * 1024) +#else +#define CONFIG_SYS_INIT_L2_ADDR		0xf8f80000 +#define CONFIG_SYS_INIT_L2_ADDR_PHYS	CONFIG_SYS_INIT_L2_ADDR +#define CONFIG_SYS_INIT_L2_END	(CONFIG_SYS_INIT_L2_ADDR + CONFIG_SYS_L2_SIZE) +#define CONFIG_SPL_RELOC_TEXT_BASE	(CONFIG_SYS_INIT_L2_END - 0x2000) +#define CONFIG_SPL_RELOC_STACK		((CONFIG_SYS_INIT_L2_END - 1) & ~0xF) +#endif /* CONFIG_TPL_BUILD */  #endif  #endif @@ -801,9 +827,14 @@  #define CONFIG_ENV_SIZE		0x2000  #define CONFIG_SYS_MMC_ENV_DEV	0  #elif defined(CONFIG_NAND) -#define CONFIG_ENV_IS_IN_NAND +#ifdef CONFIG_TPL_BUILD +#define CONFIG_ENV_SIZE		0x2000 +#define CONFIG_ENV_ADDR		(CONFIG_SYS_INIT_L2_ADDR + (160 << 10)) +#else  #define CONFIG_ENV_SIZE		CONFIG_SYS_NAND_BLOCK_SIZE -#define CONFIG_ENV_OFFSET	((512 * 1024) + CONFIG_SYS_NAND_BLOCK_SIZE) +#endif +#define CONFIG_ENV_IS_IN_NAND +#define CONFIG_ENV_OFFSET	(1024 * 1024)  #define CONFIG_ENV_RANGE	(3 * CONFIG_ENV_SIZE)  #elif defined(CONFIG_SYS_RAMBOOT)  #define CONFIG_ENV_IS_NOWHERE	/* Store ENV in memory only */ |