1463ec1caSVladimir Zapolskiy /* 2463ec1caSVladimir Zapolskiy * Embest/Timll DevKit3250 board support 3463ec1caSVladimir Zapolskiy * 4768ddeeeSVladimir Zapolskiy * Copyright (C) 2011-2015 Vladimir Zapolskiy <vz@mleia.com> 5463ec1caSVladimir Zapolskiy * 61a459660SWolfgang Denk * SPDX-License-Identifier: GPL-2.0+ 7463ec1caSVladimir Zapolskiy */ 8463ec1caSVladimir Zapolskiy 9463ec1caSVladimir Zapolskiy #include <common.h> 10463ec1caSVladimir Zapolskiy #include <asm/arch/sys_proto.h> 11768ddeeeSVladimir Zapolskiy #include <asm/arch/clk.h> 12463ec1caSVladimir Zapolskiy #include <asm/arch/cpu.h> 13463ec1caSVladimir Zapolskiy #include <asm/arch/emc.h> 14768ddeeeSVladimir Zapolskiy #include <asm/arch/wdt.h> 15768ddeeeSVladimir Zapolskiy #include <asm/io.h> 16463ec1caSVladimir Zapolskiy 17463ec1caSVladimir Zapolskiy DECLARE_GLOBAL_DATA_PTR; 18463ec1caSVladimir Zapolskiy 19463ec1caSVladimir Zapolskiy static struct emc_regs *emc = (struct emc_regs *)EMC_BASE; 20768ddeeeSVladimir Zapolskiy static struct clk_pm_regs *clk = (struct clk_pm_regs *)CLK_PM_BASE; 21768ddeeeSVladimir Zapolskiy static struct wdt_regs *wdt = (struct wdt_regs *)WDT_BASE; 22768ddeeeSVladimir Zapolskiy reset_periph(void)23768ddeeeSVladimir Zapolskiyvoid reset_periph(void) 24768ddeeeSVladimir Zapolskiy { 25768ddeeeSVladimir Zapolskiy /* This function resets peripherals by triggering RESOUT_N */ 26768ddeeeSVladimir Zapolskiy setbits_le32(&clk->timclk_ctrl, CLK_TIMCLK_WATCHDOG); 27768ddeeeSVladimir Zapolskiy writel(WDTIM_MCTRL_RESFRC1, &wdt->mctrl); 28768ddeeeSVladimir Zapolskiy udelay(300); 29768ddeeeSVladimir Zapolskiy 30768ddeeeSVladimir Zapolskiy writel(0, &wdt->mctrl); 31768ddeeeSVladimir Zapolskiy clrbits_le32(&clk->timclk_ctrl, CLK_TIMCLK_WATCHDOG); 32768ddeeeSVladimir Zapolskiy 33768ddeeeSVladimir Zapolskiy /* Such a long delay is needed to initialize SMSC phy */ 34768ddeeeSVladimir Zapolskiy udelay(10000); 35768ddeeeSVladimir Zapolskiy } 36463ec1caSVladimir Zapolskiy board_early_init_f(void)37463ec1caSVladimir Zapolskiyint board_early_init_f(void) 38463ec1caSVladimir Zapolskiy { 39463ec1caSVladimir Zapolskiy lpc32xx_uart_init(CONFIG_SYS_LPC32XX_UART); 40768ddeeeSVladimir Zapolskiy lpc32xx_i2c_init(1); 41768ddeeeSVladimir Zapolskiy lpc32xx_i2c_init(2); 42768ddeeeSVladimir Zapolskiy lpc32xx_ssp_init(); 43768ddeeeSVladimir Zapolskiy lpc32xx_mac_init(); 44768ddeeeSVladimir Zapolskiy 45768ddeeeSVladimir Zapolskiy /* 46768ddeeeSVladimir Zapolskiy * nWP may be controlled by GPO19, but unpopulated by default R23 47768ddeeeSVladimir Zapolskiy * makes no sense to configure this GPIO level, nWP is always high 48768ddeeeSVladimir Zapolskiy */ 49768ddeeeSVladimir Zapolskiy lpc32xx_slc_nand_init(); 50463ec1caSVladimir Zapolskiy 51463ec1caSVladimir Zapolskiy return 0; 52463ec1caSVladimir Zapolskiy } 53463ec1caSVladimir Zapolskiy board_init(void)54463ec1caSVladimir Zapolskiyint board_init(void) 55463ec1caSVladimir Zapolskiy { 56463ec1caSVladimir Zapolskiy /* adress of boot parameters */ 57463ec1caSVladimir Zapolskiy gd->bd->bi_boot_params = CONFIG_SYS_SDRAM_BASE + 0x100; 58463ec1caSVladimir Zapolskiy 59463ec1caSVladimir Zapolskiy #ifdef CONFIG_SYS_FLASH_CFI 60463ec1caSVladimir Zapolskiy /* Use 16-bit memory interface for NOR Flash */ 61463ec1caSVladimir Zapolskiy emc->stat[0].config = EMC_STAT_CONFIG_PB | EMC_STAT_CONFIG_16BIT; 62463ec1caSVladimir Zapolskiy 63463ec1caSVladimir Zapolskiy /* Change the NOR timings to optimum value to get maximum bandwidth */ 64463ec1caSVladimir Zapolskiy emc->stat[0].waitwen = EMC_STAT_WAITWEN(1); 65*f0aa26f0SVladimir Zapolskiy emc->stat[0].waitoen = EMC_STAT_WAITOEN(0); 66463ec1caSVladimir Zapolskiy emc->stat[0].waitrd = EMC_STAT_WAITRD(12); 67463ec1caSVladimir Zapolskiy emc->stat[0].waitpage = EMC_STAT_WAITPAGE(12); 68463ec1caSVladimir Zapolskiy emc->stat[0].waitwr = EMC_STAT_WAITWR(5); 69463ec1caSVladimir Zapolskiy emc->stat[0].waitturn = EMC_STAT_WAITTURN(2); 70463ec1caSVladimir Zapolskiy #endif 71463ec1caSVladimir Zapolskiy 72463ec1caSVladimir Zapolskiy return 0; 73463ec1caSVladimir Zapolskiy } 74463ec1caSVladimir Zapolskiy dram_init(void)75463ec1caSVladimir Zapolskiyint dram_init(void) 76463ec1caSVladimir Zapolskiy { 77463ec1caSVladimir Zapolskiy gd->ram_size = get_ram_size((void *)CONFIG_SYS_SDRAM_BASE, 78463ec1caSVladimir Zapolskiy CONFIG_SYS_SDRAM_SIZE); 79463ec1caSVladimir Zapolskiy 80463ec1caSVladimir Zapolskiy return 0; 81463ec1caSVladimir Zapolskiy } 82