From mboxrd@z Thu Jan 1 00:00:00 1970 From: Scott Wood Date: Wed, 26 Jun 2013 17:38:36 -0500 Subject: [U-Boot] [PATCH 7/7 v6] powerpc: p1022ds: support TPL on the P1022DS In-Reply-To: <1372231112-25185-7-git-send-email-ying.zhang@freescale.com> (from ying.zhang@freescale.com on Wed Jun 26 02:18:32 2013) Message-ID: <1372286316.8183.45@snotra> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de On 06/26/2013 02:18:32 AM, ying.zhang at freescale.com wrote: > diff --git a/Makefile b/Makefile > index 0513e4d..a3c7282 100644 > --- a/Makefile > +++ b/Makefile > @@ -895,7 +895,7 @@ clobber: tidy > @rm -f $(obj)spl/{u-boot-spl,u-boot-spl.bin,u-boot-spl.map} > @rm -f $(obj)spl/u-boot-spl.lds > @rm -f $(obj)tpl/{u-boot-tpl,u-boot-tpl.bin,u-boot-tpl.map} > - @rm -f $(obj)tpl/u-boot-tpl.lds > + @rm -f $(obj)tpl/u-boot-spl.lds Huh? > @rm -f $(obj)MLO MLO.byteswap > @rm -f $(obj)SPL > @rm -f $(obj)tools/xway-swap-bytes > @@ -906,6 +906,7 @@ clobber: tidy > @[ ! -d $(obj)nand_spl ] || find $(obj)nand_spl -name "*" -type > l -print | xargs rm -f > @rm -f $(obj)dts/*.tmp > @rm -f $(obj)spl/u-boot-spl{,-pad}.ais > + @rm -f $(obj)tpl/u-boot-tpl{,-pad}.ais Is there ever a TPL that ends in .ais? > diff --git a/board/freescale/p1022ds/tpl.c > b/board/freescale/p1022ds/tpl.c > new file mode 100644 > index 0000000..628b9e8 > --- /dev/null > +++ b/board/freescale/p1022ds/tpl.c > @@ -0,0 +1,102 @@ > +/* > + * Copyright 2013 Freescale Semiconductor, Inc. > + * > + * This program is free software; you can redistribute it and/or > + * modify it under the terms of the GNU General Public License as > + * published by the Free Software Foundation; either version 2 of > + * the License, or (at your option) any later version. > + * > + * This program is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * > + * GNU General Public License for more details. > + * > + * You should have received a copy of the GNU General Public License > + * along with this program; if not, write to the Free Software > + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, > + * MA 02111-1307 USA > + * > + */ > + > +#include > +#include > +#include > +#include > +#include > +#include "../common/ngpixis.h" > + > +DECLARE_GLOBAL_DATA_PTR; > + > +static const u32 sysclk_tbl[] = { > + 66666000, 7499900, 83332500, 8999900, > + 99999000, 11111000, 12499800, 13333200 > +}; > + > +ulong get_effective_memsize(void) > +{ > + return CONFIG_SYS_L2_SIZE; > +} > + > +void board_init_f(ulong bootflag) > +{ > + int px_spd; > + u32 plat_ratio, sys_clk, bus_clk; > + ccsr_gur_t *gur = (void *)CONFIG_SYS_MPC85xx_GUTS_ADDR; > + > + console_init_f(); > + /* Set pmuxcr to allow both i2c1 and i2c2 */ > + setbits_be32(&gur->pmuxcr, in_be32(&gur->pmuxcr) | 0x1000); > + setbits_be32(&gur->pmuxcr, > + in_be32(&gur->pmuxcr) | MPC85xx_PMUXCR_SD_DATA); > + > + /* Read back the register to synchronize the write. */ > + in_be32(&gur->pmuxcr); > + > + /* initialize selected port with appropriate baud rate */ > + px_spd = in_8((unsigned char *)(PIXIS_BASE + PIXIS_SPD)); > + sys_clk = sysclk_tbl[px_spd & PIXIS_SPD_SYSCLK_MASK]; > + plat_ratio = in_be32(&gur->porpllsr) & > MPC85xx_PORPLLSR_PLAT_RATIO; > + bus_clk = sys_clk * plat_ratio / 2; > + > + NS16550_init((NS16550_t)CONFIG_SYS_NS16550_COM1, > + bus_clk / 16 / CONFIG_BAUDRATE); > + /* 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. > + */ > + relocate_code(CONFIG_SYS_NAND_U_BOOT_RELOC_SP, 0, > + CONFIG_SYS_NAND_U_BOOT_RELOC); > +} > + > +void board_init_r(gd_t *gd, ulong dest_addr) > +{ > + /* Pointer is writable since we allocated a register for it */ > + gd = (gd_t *)CONFIG_SYS_GD_ADDR; > + bd_t *bd; > + > + memset(gd, 0, sizeof(gd_t)); > + bd = (bd_t *)(CONFIG_SYS_GD_ADDR + sizeof(gd_t)); > + memset(bd, 0, sizeof(bd_t)); > + gd->bd = bd; > + bd->bi_memstart = CONFIG_SYS_INIT_L2_ADDR; > + bd->bi_memsize = CONFIG_SYS_L2_SIZE; > + > + probecpu(); > + get_clocks(); > + mem_malloc_init(CONFIG_SYS_RELOC_MALLOC_ADDR, \ > + CONFIG_SYS_RELOC_MALLOC_SIZE); > + /* relocate environment function pointers etc. */ > + nand_load(CONFIG_ENV_OFFSET, CONFIG_ENV_SIZE, > + (uchar *)CONFIG_ENV_ADDR); > + > + gd->env_addr = (ulong)(CONFIG_ENV_ADDR); > + gd->env_valid = 1; > + > + i2c_init(CONFIG_SYS_I2C_SPEED, CONFIG_SYS_I2C_SLAVE); > + > + gd->ram_size = initdram(0); > + puts("Tertiary program loader running in sram..."); > + > + nand_boot(); > +} This looks a lot like board/freescale/p1022ds/spl.c. Find a way to share them. Don't hardcode that it's NAND boot. > diff --git a/drivers/mtd/nand/fsl_elbc_spl.c > b/drivers/mtd/nand/fsl_elbc_spl.c > index ab208fd..8924e2d 100644 > --- a/drivers/mtd/nand/fsl_elbc_spl.c > +++ b/drivers/mtd/nand/fsl_elbc_spl.c > @@ -50,7 +50,7 @@ static void nand_wait(void) > #ifdef CONFIG_SPL_BUILD > static > #endif > -int nand_load_image(uint32_t offs, unsigned int uboot_size, void > *vdst) > +int nand_load(uint32_t offs, unsigned int uboot_size, void *vdst) > { > fsl_lbc_t *regs = LBC_BASE_ADDR; > uchar *buf = (uchar *)CONFIG_SYS_NAND_BASE; > @@ -140,16 +140,16 @@ void nand_boot(void) > /* > * Load U-Boot image from NAND into RAM > */ > - nand_load_image(CONFIG_SYS_NAND_U_BOOT_OFFS, > + nand_load(CONFIG_SYS_NAND_U_BOOT_OFFS, > CONFIG_SYS_NAND_U_BOOT_SIZE, > (void *)CONFIG_SYS_NAND_U_BOOT_DST); > > #ifdef CONFIG_NAND_ENV_DST > - nand_load_image(CONFIG_ENV_OFFSET, CONFIG_ENV_SIZE, > + nand_load(CONFIG_ENV_OFFSET, CONFIG_ENV_SIZE, > (void *)CONFIG_NAND_ENV_DST); > > #ifdef CONFIG_ENV_OFFSET_REDUND > - nand_load_image(CONFIG_ENV_OFFSET_REDUND, CONFIG_ENV_SIZE, > + nand_load(CONFIG_ENV_OFFSET_REDUND, CONFIG_ENV_SIZE, > (void *)CONFIG_NAND_ENV_DST + CONFIG_ENV_SIZE); > #endif > #endif Why? -Scott