1*83d290c5STom Rini // SPDX-License-Identifier: GPL-2.0+ 28b0044ffSOleksandr G Zhadan /* 38b0044ffSOleksandr G Zhadan * Copyright 2013-2015 Arcturus Networks, Inc. 48b0044ffSOleksandr G Zhadan * http://www.arcturusnetworks.com/products/ucp1020/ 58b0044ffSOleksandr G Zhadan * based on board/freescale/p1_p2_rdb_pc/spl_minimal.c 68b0044ffSOleksandr G Zhadan * original copyright follows: 78b0044ffSOleksandr G Zhadan * Copyright 2011 Freescale Semiconductor, Inc. 88b0044ffSOleksandr G Zhadan */ 98b0044ffSOleksandr G Zhadan 108b0044ffSOleksandr G Zhadan #include <common.h> 118b0044ffSOleksandr G Zhadan #include <ns16550.h> 128b0044ffSOleksandr G Zhadan #include <asm/io.h> 138b0044ffSOleksandr G Zhadan #include <nand.h> 148b0044ffSOleksandr G Zhadan #include <linux/compiler.h> 158b0044ffSOleksandr G Zhadan #include <asm/fsl_law.h> 168b0044ffSOleksandr G Zhadan #include <fsl_ddr_sdram.h> 178b0044ffSOleksandr G Zhadan #include <asm/global_data.h> 188b0044ffSOleksandr G Zhadan 198b0044ffSOleksandr G Zhadan DECLARE_GLOBAL_DATA_PTR; 208b0044ffSOleksandr G Zhadan 218b0044ffSOleksandr G Zhadan void board_init_f(ulong bootflag) 228b0044ffSOleksandr G Zhadan { 238b0044ffSOleksandr G Zhadan u32 plat_ratio; 248b0044ffSOleksandr G Zhadan ccsr_gur_t *gur = (void *)CONFIG_SYS_MPC85xx_GUTS_ADDR; 258b0044ffSOleksandr G Zhadan 268b0044ffSOleksandr G Zhadan #if defined(CONFIG_SYS_NAND_BR_PRELIM) && defined(CONFIG_SYS_NAND_OR_PRELIM) 278b0044ffSOleksandr G Zhadan set_lbc_br(0, CONFIG_SYS_NAND_BR_PRELIM); 288b0044ffSOleksandr G Zhadan set_lbc_or(0, CONFIG_SYS_NAND_OR_PRELIM); 298b0044ffSOleksandr G Zhadan #endif 308b0044ffSOleksandr G Zhadan 318b0044ffSOleksandr G Zhadan /* initialize selected port with appropriate baud rate */ 328b0044ffSOleksandr G Zhadan plat_ratio = in_be32(&gur->porpllsr) & MPC85xx_PORPLLSR_PLAT_RATIO; 338b0044ffSOleksandr G Zhadan plat_ratio >>= 1; 348b0044ffSOleksandr G Zhadan gd->bus_clk = CONFIG_SYS_CLK_FREQ * plat_ratio; 358b0044ffSOleksandr G Zhadan 368b0044ffSOleksandr G Zhadan NS16550_init((NS16550_t)CONFIG_SYS_NS16550_COM1, 378b0044ffSOleksandr G Zhadan gd->bus_clk / 16 / CONFIG_BAUDRATE); 388b0044ffSOleksandr G Zhadan 398b0044ffSOleksandr G Zhadan puts("\nNAND boot... "); 408b0044ffSOleksandr G Zhadan 418b0044ffSOleksandr G Zhadan /* copy code to RAM and jump to it - this should not return */ 428b0044ffSOleksandr G Zhadan /* NOTE - code has to be copied out of NAND buffer before 438b0044ffSOleksandr G Zhadan * other blocks can be read. 448b0044ffSOleksandr G Zhadan */ 458b0044ffSOleksandr G Zhadan relocate_code(CONFIG_SPL_RELOC_STACK, 0, CONFIG_SPL_RELOC_TEXT_BASE); 468b0044ffSOleksandr G Zhadan } 478b0044ffSOleksandr G Zhadan 488b0044ffSOleksandr G Zhadan void board_init_r(gd_t *gd, ulong dest_addr) 498b0044ffSOleksandr G Zhadan { 508b0044ffSOleksandr G Zhadan puts("\nSecond program loader running in sram..."); 518b0044ffSOleksandr G Zhadan nand_boot(); 528b0044ffSOleksandr G Zhadan } 538b0044ffSOleksandr G Zhadan 548b0044ffSOleksandr G Zhadan void putc(char c) 558b0044ffSOleksandr G Zhadan { 568b0044ffSOleksandr G Zhadan if (c == '\n') 578b0044ffSOleksandr G Zhadan NS16550_putc((NS16550_t)CONFIG_SYS_NS16550_COM1, '\r'); 588b0044ffSOleksandr G Zhadan 598b0044ffSOleksandr G Zhadan NS16550_putc((NS16550_t)CONFIG_SYS_NS16550_COM1, c); 608b0044ffSOleksandr G Zhadan } 618b0044ffSOleksandr G Zhadan 628b0044ffSOleksandr G Zhadan void puts(const char *str) 638b0044ffSOleksandr G Zhadan { 648b0044ffSOleksandr G Zhadan while (*str) 658b0044ffSOleksandr G Zhadan putc(*str++); 668b0044ffSOleksandr G Zhadan } 67