1 /* 2 * Embest/Timll DevKit3250 board support 3 * 4 * Copyright (C) 2011-2015 Vladimir Zapolskiy <vz@mleia.com> 5 * 6 * SPDX-License-Identifier: GPL-2.0+ 7 */ 8 9 #include <common.h> 10 #include <asm/arch/sys_proto.h> 11 #include <asm/arch/clk.h> 12 #include <asm/arch/cpu.h> 13 #include <asm/arch/emc.h> 14 #include <asm/arch/wdt.h> 15 #include <asm/io.h> 16 17 DECLARE_GLOBAL_DATA_PTR; 18 19 static struct emc_regs *emc = (struct emc_regs *)EMC_BASE; 20 static struct clk_pm_regs *clk = (struct clk_pm_regs *)CLK_PM_BASE; 21 static struct wdt_regs *wdt = (struct wdt_regs *)WDT_BASE; 22 23 void reset_periph(void) 24 { 25 /* This function resets peripherals by triggering RESOUT_N */ 26 setbits_le32(&clk->timclk_ctrl, CLK_TIMCLK_WATCHDOG); 27 writel(WDTIM_MCTRL_RESFRC1, &wdt->mctrl); 28 udelay(300); 29 30 writel(0, &wdt->mctrl); 31 clrbits_le32(&clk->timclk_ctrl, CLK_TIMCLK_WATCHDOG); 32 33 /* Such a long delay is needed to initialize SMSC phy */ 34 udelay(10000); 35 } 36 37 int board_early_init_f(void) 38 { 39 lpc32xx_uart_init(CONFIG_SYS_LPC32XX_UART); 40 lpc32xx_i2c_init(1); 41 lpc32xx_i2c_init(2); 42 lpc32xx_ssp_init(); 43 lpc32xx_mac_init(); 44 45 /* 46 * nWP may be controlled by GPO19, but unpopulated by default R23 47 * makes no sense to configure this GPIO level, nWP is always high 48 */ 49 lpc32xx_slc_nand_init(); 50 51 return 0; 52 } 53 54 int board_init(void) 55 { 56 /* adress of boot parameters */ 57 gd->bd->bi_boot_params = CONFIG_SYS_SDRAM_BASE + 0x100; 58 59 #ifdef CONFIG_SYS_FLASH_CFI 60 /* Use 16-bit memory interface for NOR Flash */ 61 emc->stat[0].config = EMC_STAT_CONFIG_PB | EMC_STAT_CONFIG_16BIT; 62 63 /* Change the NOR timings to optimum value to get maximum bandwidth */ 64 emc->stat[0].waitwen = EMC_STAT_WAITWEN(1); 65 emc->stat[0].waitoen = EMC_STAT_WAITOEN(0); 66 emc->stat[0].waitrd = EMC_STAT_WAITRD(12); 67 emc->stat[0].waitpage = EMC_STAT_WAITPAGE(12); 68 emc->stat[0].waitwr = EMC_STAT_WAITWR(5); 69 emc->stat[0].waitturn = EMC_STAT_WAITTURN(2); 70 #endif 71 72 return 0; 73 } 74 75 int dram_init(void) 76 { 77 gd->ram_size = get_ram_size((void *)CONFIG_SYS_SDRAM_BASE, 78 CONFIG_SYS_SDRAM_SIZE); 79 80 return 0; 81 } 82