xref: /OK3568_Linux_fs/u-boot/board/freescale/s32v234evb/s32v234evb.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * (C) Copyright 2013-2015, Freescale Semiconductor, Inc.
3*4882a593Smuzhiyun  *
4*4882a593Smuzhiyun  * SPDX-License-Identifier:	GPL-2.0+
5*4882a593Smuzhiyun  */
6*4882a593Smuzhiyun 
7*4882a593Smuzhiyun #include <common.h>
8*4882a593Smuzhiyun #include <asm/io.h>
9*4882a593Smuzhiyun #include <asm/arch/imx-regs.h>
10*4882a593Smuzhiyun #include <asm/arch/siul.h>
11*4882a593Smuzhiyun #include <asm/arch/lpddr2.h>
12*4882a593Smuzhiyun #include <asm/arch/clock.h>
13*4882a593Smuzhiyun #include <mmc.h>
14*4882a593Smuzhiyun #include <fsl_esdhc.h>
15*4882a593Smuzhiyun #include <miiphy.h>
16*4882a593Smuzhiyun #include <netdev.h>
17*4882a593Smuzhiyun #include <i2c.h>
18*4882a593Smuzhiyun 
19*4882a593Smuzhiyun DECLARE_GLOBAL_DATA_PTR;
20*4882a593Smuzhiyun 
setup_iomux_ddr(void)21*4882a593Smuzhiyun void setup_iomux_ddr(void)
22*4882a593Smuzhiyun {
23*4882a593Smuzhiyun 	lpddr2_config_iomux(DDR0);
24*4882a593Smuzhiyun 	lpddr2_config_iomux(DDR1);
25*4882a593Smuzhiyun 
26*4882a593Smuzhiyun }
27*4882a593Smuzhiyun 
ddr_phy_init(void)28*4882a593Smuzhiyun void ddr_phy_init(void)
29*4882a593Smuzhiyun {
30*4882a593Smuzhiyun }
31*4882a593Smuzhiyun 
ddr_ctrl_init(void)32*4882a593Smuzhiyun void ddr_ctrl_init(void)
33*4882a593Smuzhiyun {
34*4882a593Smuzhiyun 	config_mmdc(0);
35*4882a593Smuzhiyun 	config_mmdc(1);
36*4882a593Smuzhiyun }
37*4882a593Smuzhiyun 
dram_init(void)38*4882a593Smuzhiyun int dram_init(void)
39*4882a593Smuzhiyun {
40*4882a593Smuzhiyun 	setup_iomux_ddr();
41*4882a593Smuzhiyun 
42*4882a593Smuzhiyun 	ddr_ctrl_init();
43*4882a593Smuzhiyun 
44*4882a593Smuzhiyun 	gd->ram_size = get_ram_size((void *)PHYS_SDRAM, PHYS_SDRAM_SIZE);
45*4882a593Smuzhiyun 
46*4882a593Smuzhiyun 	return 0;
47*4882a593Smuzhiyun }
48*4882a593Smuzhiyun 
setup_iomux_uart(void)49*4882a593Smuzhiyun static void setup_iomux_uart(void)
50*4882a593Smuzhiyun {
51*4882a593Smuzhiyun 	/* Muxing for linflex */
52*4882a593Smuzhiyun 	/* Replace the magic values after bringup */
53*4882a593Smuzhiyun 
54*4882a593Smuzhiyun 	/* set TXD - MSCR[12] PA12 */
55*4882a593Smuzhiyun 	writel(SIUL2_UART_TXD, SIUL2_MSCRn(SIUL2_UART0_TXD_PAD));
56*4882a593Smuzhiyun 
57*4882a593Smuzhiyun 	/* set RXD - MSCR[11] - PA11 */
58*4882a593Smuzhiyun 	writel(SIUL2_UART_MSCR_RXD, SIUL2_MSCRn(SIUL2_UART0_MSCR_RXD_PAD));
59*4882a593Smuzhiyun 
60*4882a593Smuzhiyun 	/* set RXD - IMCR[200] - 200 */
61*4882a593Smuzhiyun 	writel(SIUL2_UART_IMCR_RXD, SIUL2_IMCRn(SIUL2_UART0_IMCR_RXD_PAD));
62*4882a593Smuzhiyun }
63*4882a593Smuzhiyun 
setup_iomux_enet(void)64*4882a593Smuzhiyun static void setup_iomux_enet(void)
65*4882a593Smuzhiyun {
66*4882a593Smuzhiyun }
67*4882a593Smuzhiyun 
setup_iomux_i2c(void)68*4882a593Smuzhiyun static void setup_iomux_i2c(void)
69*4882a593Smuzhiyun {
70*4882a593Smuzhiyun }
71*4882a593Smuzhiyun 
72*4882a593Smuzhiyun #ifdef CONFIG_SYS_USE_NAND
setup_iomux_nfc(void)73*4882a593Smuzhiyun void setup_iomux_nfc(void)
74*4882a593Smuzhiyun {
75*4882a593Smuzhiyun }
76*4882a593Smuzhiyun #endif
77*4882a593Smuzhiyun 
78*4882a593Smuzhiyun #ifdef CONFIG_FSL_ESDHC
79*4882a593Smuzhiyun struct fsl_esdhc_cfg esdhc_cfg[1] = {
80*4882a593Smuzhiyun 	{USDHC_BASE_ADDR},
81*4882a593Smuzhiyun };
82*4882a593Smuzhiyun 
board_mmc_getcd(struct mmc * mmc)83*4882a593Smuzhiyun int board_mmc_getcd(struct mmc *mmc)
84*4882a593Smuzhiyun {
85*4882a593Smuzhiyun 	/* eSDHC1 is always present */
86*4882a593Smuzhiyun 	return 1;
87*4882a593Smuzhiyun }
88*4882a593Smuzhiyun 
board_mmc_init(bd_t * bis)89*4882a593Smuzhiyun int board_mmc_init(bd_t * bis)
90*4882a593Smuzhiyun {
91*4882a593Smuzhiyun 	esdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_USDHC_CLK);
92*4882a593Smuzhiyun 
93*4882a593Smuzhiyun 	/* Set iomux PADS for USDHC */
94*4882a593Smuzhiyun 
95*4882a593Smuzhiyun 	/* PK6 pad: uSDHC clk */
96*4882a593Smuzhiyun 	writel(SIUL2_USDHC_PAD_CTRL_CLK, SIUL2_MSCRn(150));
97*4882a593Smuzhiyun 	writel(0x3, SIUL2_MSCRn(902));
98*4882a593Smuzhiyun 
99*4882a593Smuzhiyun 	/* PK7 pad: uSDHC CMD */
100*4882a593Smuzhiyun 	writel(SIUL2_USDHC_PAD_CTRL_CMD, SIUL2_MSCRn(151));
101*4882a593Smuzhiyun 	writel(0x3, SIUL2_MSCRn(901));
102*4882a593Smuzhiyun 
103*4882a593Smuzhiyun 	/* PK8 pad: uSDHC DAT0 */
104*4882a593Smuzhiyun 	writel(SIUL2_USDHC_PAD_CTRL_DAT0_3, SIUL2_MSCRn(152));
105*4882a593Smuzhiyun 	writel(0x3, SIUL2_MSCRn(903));
106*4882a593Smuzhiyun 
107*4882a593Smuzhiyun 	/* PK9 pad: uSDHC DAT1 */
108*4882a593Smuzhiyun 	writel(SIUL2_USDHC_PAD_CTRL_DAT0_3, SIUL2_MSCRn(153));
109*4882a593Smuzhiyun 	writel(0x3, SIUL2_MSCRn(904));
110*4882a593Smuzhiyun 
111*4882a593Smuzhiyun 	/* PK10 pad: uSDHC DAT2 */
112*4882a593Smuzhiyun 	writel(SIUL2_USDHC_PAD_CTRL_DAT0_3, SIUL2_MSCRn(154));
113*4882a593Smuzhiyun 	writel(0x3, SIUL2_MSCRn(905));
114*4882a593Smuzhiyun 
115*4882a593Smuzhiyun 	/* PK11 pad: uSDHC DAT3 */
116*4882a593Smuzhiyun 	writel(SIUL2_USDHC_PAD_CTRL_DAT0_3, SIUL2_MSCRn(155));
117*4882a593Smuzhiyun 	writel(0x3, SIUL2_MSCRn(906));
118*4882a593Smuzhiyun 
119*4882a593Smuzhiyun 	/* PK15 pad: uSDHC DAT4 */
120*4882a593Smuzhiyun 	writel(SIUL2_USDHC_PAD_CTRL_DAT4_7, SIUL2_MSCRn(159));
121*4882a593Smuzhiyun 	writel(0x3, SIUL2_MSCRn(907));
122*4882a593Smuzhiyun 
123*4882a593Smuzhiyun 	/* PL0 pad: uSDHC DAT5 */
124*4882a593Smuzhiyun 	writel(SIUL2_USDHC_PAD_CTRL_DAT4_7, SIUL2_MSCRn(160));
125*4882a593Smuzhiyun 	writel(0x3, SIUL2_MSCRn(908));
126*4882a593Smuzhiyun 
127*4882a593Smuzhiyun 	/* PL1 pad: uSDHC DAT6 */
128*4882a593Smuzhiyun 	writel(SIUL2_USDHC_PAD_CTRL_DAT4_7, SIUL2_MSCRn(161));
129*4882a593Smuzhiyun 	writel(0x3, SIUL2_MSCRn(909));
130*4882a593Smuzhiyun 
131*4882a593Smuzhiyun 	/* PL2 pad: uSDHC DAT7 */
132*4882a593Smuzhiyun 	writel(SIUL2_USDHC_PAD_CTRL_DAT4_7, SIUL2_MSCRn(162));
133*4882a593Smuzhiyun 	writel(0x3, SIUL2_MSCRn(910));
134*4882a593Smuzhiyun 
135*4882a593Smuzhiyun 	return fsl_esdhc_initialize(bis, &esdhc_cfg[0]);
136*4882a593Smuzhiyun }
137*4882a593Smuzhiyun #endif
138*4882a593Smuzhiyun 
mscm_init(void)139*4882a593Smuzhiyun static void mscm_init(void)
140*4882a593Smuzhiyun {
141*4882a593Smuzhiyun 	struct mscm_ir *mscmir = (struct mscm_ir *)MSCM_BASE_ADDR;
142*4882a593Smuzhiyun 	int i;
143*4882a593Smuzhiyun 
144*4882a593Smuzhiyun 	for (i = 0; i < MSCM_IRSPRC_NUM; i++)
145*4882a593Smuzhiyun 		writew(MSCM_IRSPRC_CPn_EN, &mscmir->irsprc[i]);
146*4882a593Smuzhiyun }
147*4882a593Smuzhiyun 
board_phy_config(struct phy_device * phydev)148*4882a593Smuzhiyun int board_phy_config(struct phy_device *phydev)
149*4882a593Smuzhiyun {
150*4882a593Smuzhiyun 	if (phydev->drv->config)
151*4882a593Smuzhiyun 		phydev->drv->config(phydev);
152*4882a593Smuzhiyun 
153*4882a593Smuzhiyun 	return 0;
154*4882a593Smuzhiyun }
155*4882a593Smuzhiyun 
board_early_init_f(void)156*4882a593Smuzhiyun int board_early_init_f(void)
157*4882a593Smuzhiyun {
158*4882a593Smuzhiyun 	clock_init();
159*4882a593Smuzhiyun 	mscm_init();
160*4882a593Smuzhiyun 
161*4882a593Smuzhiyun 	setup_iomux_uart();
162*4882a593Smuzhiyun 	setup_iomux_enet();
163*4882a593Smuzhiyun 	setup_iomux_i2c();
164*4882a593Smuzhiyun #ifdef CONFIG_SYS_USE_NAND
165*4882a593Smuzhiyun 	setup_iomux_nfc();
166*4882a593Smuzhiyun #endif
167*4882a593Smuzhiyun 	return 0;
168*4882a593Smuzhiyun }
169*4882a593Smuzhiyun 
board_init(void)170*4882a593Smuzhiyun int board_init(void)
171*4882a593Smuzhiyun {
172*4882a593Smuzhiyun 	/* address of boot parameters */
173*4882a593Smuzhiyun 	gd->bd->bi_boot_params = PHYS_SDRAM + 0x100;
174*4882a593Smuzhiyun 
175*4882a593Smuzhiyun 	return 0;
176*4882a593Smuzhiyun }
177*4882a593Smuzhiyun 
checkboard(void)178*4882a593Smuzhiyun int checkboard(void)
179*4882a593Smuzhiyun {
180*4882a593Smuzhiyun 	puts("Board: s32v234evb\n");
181*4882a593Smuzhiyun 
182*4882a593Smuzhiyun 	return 0;
183*4882a593Smuzhiyun }
184