xref: /rk3399_rockchip-uboot/board/timll/devkit3250/devkit3250.c (revision f74dc51bcab924a30e41b33981a4f96af3f9dd57)
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 Zapolskiy void 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 Zapolskiy int 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 Zapolskiy int 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 Zapolskiy int 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