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