diff options
author | Tom Rix <Tom.Rix@windriver.com> | 2009-10-04 05:40:07 -0500 |
---|---|---|
committer | Tom Rix <Tom.Rix@windriver.com> | 2009-10-04 05:40:07 -0500 |
commit | 4d6c2dd7ed6c6bc4114ca5c7577560ea9ba50bd0 (patch) | |
tree | 676e49c06682ea211d2d909beb35cee5623d106e /nand_spl/board/freescale/mpc8536ds/nand_boot.c | |
parent | 300d1137161a47573b0f6504f32371c8065b8d37 (diff) | |
parent | 1d96cfe8f5eebfc6ea39d1a387f35ca4499e6b67 (diff) |
Merge branch 'arm/master' into arm/next
Conflicts:
board/AtmarkTechno/suzaku/Makefile
board/amcc/acadia/acadia.c
board/amcc/katmai/katmai.c
board/amcc/luan/luan.c
board/amcc/ocotea/ocotea.c
board/cm-bf537u/Makefile
board/cray/L1/L1.c
board/csb272/csb272.c
board/csb472/csb472.c
board/eric/eric.c
board/eric/init.S
board/eukrea/cpuat91/Makefile
board/exbitgen/exbitgen.c
board/exbitgen/init.S
board/freescale/mpc8536ds/config.mk
board/g2000/g2000.c
board/jse/sdram.c
board/mpl/mip405/mip405.c
board/mpl/pip405/pip405.c
board/netstal/hcu5/hcu5.c
board/netstal/mcu25/mcu25.c
board/sc3/sc3.c
board/w7o/init.S
board/w7o/w7o.c
common/cmd_reginfo.c
cpu/ppc4xx/40x_spd_sdram.c
cpu/ppc4xx/44x_spd_ddr.c
doc/README.sbc8548
drivers/misc/fsl_law.c
fs/ubifs/ubifs.c
include/asm-ppc/immap_85xx.h
Signed-off-by: Tom Rix <Tom.Rix@windriver.com>
Diffstat (limited to 'nand_spl/board/freescale/mpc8536ds/nand_boot.c')
-rw-r--r-- | nand_spl/board/freescale/mpc8536ds/nand_boot.c | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/nand_spl/board/freescale/mpc8536ds/nand_boot.c b/nand_spl/board/freescale/mpc8536ds/nand_boot.c new file mode 100644 index 0000000000..af29dc278f --- /dev/null +++ b/nand_spl/board/freescale/mpc8536ds/nand_boot.c @@ -0,0 +1,83 @@ +/* + * Copyright 2009 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 <common.h> +#include <ns16550.h> +#include <asm/io.h> +#include <nand.h> + +u32 sysclk_tbl[] = { + 33333000, 39999600, 49999500, 66666000, + 83332500, 99999000, 133332000, 166665000 +}; + +void board_init_f(ulong bootflag) +{ + int px_spd; + u32 plat_ratio, bus_clk, sys_clk; + ccsr_gur_t *gur = (void *)CONFIG_SYS_MPC85xx_GUTS_ADDR; + ccsr_lbc_t *lbc = (void *)CONFIG_SYS_MPC85xx_LBC_ADDR; + +#if defined(CONFIG_SYS_BR3_PRELIM) && defined(CONFIG_SYS_OR3_PRELIM) + /* for FPGA */ + out_be32(&lbc->br3, CONFIG_SYS_BR3_PRELIM); + out_be32(&lbc->or3, CONFIG_SYS_OR3_PRELIM); +#else +#error CONFIG_SYS_BR3_PRELIM, CONFIG_SYS_OR3_PRELIM must be defined +#endif + + /* 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]; + 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); + + puts("\nNAND boot... "); + + /* 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) +{ + nand_boot(); +} + +void putc(char c) +{ + if (c == '\n') + NS16550_putc((NS16550_t)CONFIG_SYS_NS16550_COM1, '\r'); + + NS16550_putc((NS16550_t)CONFIG_SYS_NS16550_COM1, c); +} + +void puts(const char *str) +{ + while (*str) + putc(*str++); +} |