147c3e074SFabio Estevam /*
247c3e074SFabio Estevam * (C) Copyright 2011 Freescale Semiconductor, Inc.
347c3e074SFabio Estevam *
41a459660SWolfgang Denk * SPDX-License-Identifier: GPL-2.0+
547c3e074SFabio Estevam */
647c3e074SFabio Estevam
747c3e074SFabio Estevam #include <common.h>
847c3e074SFabio Estevam #include <asm/io.h>
947c3e074SFabio Estevam #include <asm/arch/imx-regs.h>
1047c3e074SFabio Estevam #include <asm/arch/sys_proto.h>
1147c3e074SFabio Estevam #include <asm/arch/crm_regs.h>
12a2ac1b3aSBenoît Thébaudeau #include <asm/arch/clock.h>
135053b593SBenoît Thébaudeau #include <asm/arch/iomux-mx53.h>
141221ce45SMasahiro Yamada #include <linux/errno.h>
1547c3e074SFabio Estevam #include <netdev.h>
1647c3e074SFabio Estevam #include <mmc.h>
1747c3e074SFabio Estevam #include <fsl_esdhc.h>
1800c07fe6SStefano Babic #include <asm/gpio.h>
1947c3e074SFabio Estevam
205c8d14dfSFabio Estevam #define ETHERNET_INT IMX_GPIO_NR(2, 31)
2147c3e074SFabio Estevam
2247c3e074SFabio Estevam DECLARE_GLOBAL_DATA_PTR;
2347c3e074SFabio Estevam
dram_init(void)2447c3e074SFabio Estevam int dram_init(void)
2547c3e074SFabio Estevam {
2647c3e074SFabio Estevam u32 size1, size2;
2747c3e074SFabio Estevam
28a55d23ccSAlbert ARIBAUD size1 = get_ram_size((void *)PHYS_SDRAM_1, PHYS_SDRAM_1_SIZE);
29a55d23ccSAlbert ARIBAUD size2 = get_ram_size((void *)PHYS_SDRAM_2, PHYS_SDRAM_2_SIZE);
3047c3e074SFabio Estevam
3147c3e074SFabio Estevam gd->ram_size = size1 + size2;
3247c3e074SFabio Estevam
3347c3e074SFabio Estevam return 0;
3447c3e074SFabio Estevam }
dram_init_banksize(void)35*76b00acaSSimon Glass int dram_init_banksize(void)
3647c3e074SFabio Estevam {
3747c3e074SFabio Estevam gd->bd->bi_dram[0].start = PHYS_SDRAM_1;
3847c3e074SFabio Estevam gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE;
3947c3e074SFabio Estevam
4047c3e074SFabio Estevam gd->bd->bi_dram[1].start = PHYS_SDRAM_2;
4147c3e074SFabio Estevam gd->bd->bi_dram[1].size = PHYS_SDRAM_2_SIZE;
42*76b00acaSSimon Glass
43*76b00acaSSimon Glass return 0;
4447c3e074SFabio Estevam }
4547c3e074SFabio Estevam
4668fbc0e6SBenoît Thébaudeau #ifdef CONFIG_NAND_MXC
setup_iomux_nand(void)4768fbc0e6SBenoît Thébaudeau static void setup_iomux_nand(void)
4868fbc0e6SBenoît Thébaudeau {
495053b593SBenoît Thébaudeau static const iomux_v3_cfg_t nand_pads[] = {
505053b593SBenoît Thébaudeau NEW_PAD_CTRL(MX53_PAD_NANDF_CS0__EMI_NANDF_CS_0,
515053b593SBenoît Thébaudeau PAD_CTL_DSE_HIGH),
525053b593SBenoît Thébaudeau NEW_PAD_CTRL(MX53_PAD_NANDF_CS1__EMI_NANDF_CS_1,
535053b593SBenoît Thébaudeau PAD_CTL_DSE_HIGH),
545053b593SBenoît Thébaudeau NEW_PAD_CTRL(MX53_PAD_NANDF_RB0__EMI_NANDF_RB_0,
555053b593SBenoît Thébaudeau PAD_CTL_PUS_100K_UP),
565053b593SBenoît Thébaudeau NEW_PAD_CTRL(MX53_PAD_NANDF_CLE__EMI_NANDF_CLE,
575053b593SBenoît Thébaudeau PAD_CTL_DSE_HIGH),
585053b593SBenoît Thébaudeau NEW_PAD_CTRL(MX53_PAD_NANDF_ALE__EMI_NANDF_ALE,
595053b593SBenoît Thébaudeau PAD_CTL_DSE_HIGH),
605053b593SBenoît Thébaudeau NEW_PAD_CTRL(MX53_PAD_NANDF_WP_B__EMI_NANDF_WP_B,
615053b593SBenoît Thébaudeau PAD_CTL_PUS_100K_UP),
625053b593SBenoît Thébaudeau NEW_PAD_CTRL(MX53_PAD_NANDF_RE_B__EMI_NANDF_RE_B,
635053b593SBenoît Thébaudeau PAD_CTL_DSE_HIGH),
645053b593SBenoît Thébaudeau NEW_PAD_CTRL(MX53_PAD_NANDF_WE_B__EMI_NANDF_WE_B,
655053b593SBenoît Thébaudeau PAD_CTL_DSE_HIGH),
665053b593SBenoît Thébaudeau NEW_PAD_CTRL(MX53_PAD_EIM_DA0__EMI_NAND_WEIM_DA_0,
675053b593SBenoît Thébaudeau PAD_CTL_PKE | PAD_CTL_DSE_HIGH),
685053b593SBenoît Thébaudeau NEW_PAD_CTRL(MX53_PAD_EIM_DA1__EMI_NAND_WEIM_DA_1,
695053b593SBenoît Thébaudeau PAD_CTL_PKE | PAD_CTL_DSE_HIGH),
705053b593SBenoît Thébaudeau NEW_PAD_CTRL(MX53_PAD_EIM_DA2__EMI_NAND_WEIM_DA_2,
715053b593SBenoît Thébaudeau PAD_CTL_PKE | PAD_CTL_DSE_HIGH),
725053b593SBenoît Thébaudeau NEW_PAD_CTRL(MX53_PAD_EIM_DA3__EMI_NAND_WEIM_DA_3,
735053b593SBenoît Thébaudeau PAD_CTL_PKE | PAD_CTL_DSE_HIGH),
745053b593SBenoît Thébaudeau NEW_PAD_CTRL(MX53_PAD_EIM_DA4__EMI_NAND_WEIM_DA_4,
755053b593SBenoît Thébaudeau PAD_CTL_PKE | PAD_CTL_DSE_HIGH),
765053b593SBenoît Thébaudeau NEW_PAD_CTRL(MX53_PAD_EIM_DA5__EMI_NAND_WEIM_DA_5,
775053b593SBenoît Thébaudeau PAD_CTL_PKE | PAD_CTL_DSE_HIGH),
785053b593SBenoît Thébaudeau NEW_PAD_CTRL(MX53_PAD_EIM_DA6__EMI_NAND_WEIM_DA_6,
795053b593SBenoît Thébaudeau PAD_CTL_PKE | PAD_CTL_DSE_HIGH),
805053b593SBenoît Thébaudeau NEW_PAD_CTRL(MX53_PAD_EIM_DA7__EMI_NAND_WEIM_DA_7,
815053b593SBenoît Thébaudeau PAD_CTL_PKE | PAD_CTL_DSE_HIGH),
825053b593SBenoît Thébaudeau };
835053b593SBenoît Thébaudeau
8468fbc0e6SBenoît Thébaudeau u32 i, reg;
8568fbc0e6SBenoît Thébaudeau
8668fbc0e6SBenoît Thébaudeau reg = __raw_readl(M4IF_BASE_ADDR + 0xc);
8768fbc0e6SBenoît Thébaudeau reg &= ~M4IF_GENP_WEIM_MM_MASK;
8868fbc0e6SBenoît Thébaudeau __raw_writel(reg, M4IF_BASE_ADDR + 0xc);
8968fbc0e6SBenoît Thébaudeau for (i = 0x4; i < 0x94; i += 0x18) {
9068fbc0e6SBenoît Thébaudeau reg = __raw_readl(WEIM_BASE_ADDR + i);
9168fbc0e6SBenoît Thébaudeau reg &= ~WEIM_GCR2_MUX16_BYP_GRANT_MASK;
9268fbc0e6SBenoît Thébaudeau __raw_writel(reg, WEIM_BASE_ADDR + i);
9368fbc0e6SBenoît Thébaudeau }
9468fbc0e6SBenoît Thébaudeau
955053b593SBenoît Thébaudeau imx_iomux_v3_setup_multiple_pads(nand_pads, ARRAY_SIZE(nand_pads));
9668fbc0e6SBenoît Thébaudeau }
9768fbc0e6SBenoît Thébaudeau #else
setup_iomux_nand(void)9868fbc0e6SBenoît Thébaudeau static void setup_iomux_nand(void)
9968fbc0e6SBenoît Thébaudeau {
10068fbc0e6SBenoît Thébaudeau }
10168fbc0e6SBenoît Thébaudeau #endif
10268fbc0e6SBenoît Thébaudeau
1035053b593SBenoît Thébaudeau #define UART_PAD_CTRL (PAD_CTL_HYS | PAD_CTL_DSE_HIGH | \
1045053b593SBenoît Thébaudeau PAD_CTL_PUS_100K_UP | PAD_CTL_ODE)
1055053b593SBenoît Thébaudeau
setup_iomux_uart(void)10647c3e074SFabio Estevam static void setup_iomux_uart(void)
10747c3e074SFabio Estevam {
1085053b593SBenoît Thébaudeau static const iomux_v3_cfg_t uart_pads[] = {
1095053b593SBenoît Thébaudeau NEW_PAD_CTRL(MX53_PAD_PATA_DMACK__UART1_RXD_MUX, UART_PAD_CTRL),
1105053b593SBenoît Thébaudeau NEW_PAD_CTRL(MX53_PAD_PATA_DIOW__UART1_TXD_MUX, UART_PAD_CTRL),
1115053b593SBenoît Thébaudeau };
11247c3e074SFabio Estevam
1135053b593SBenoît Thébaudeau imx_iomux_v3_setup_multiple_pads(uart_pads, ARRAY_SIZE(uart_pads));
11447c3e074SFabio Estevam }
11547c3e074SFabio Estevam
11647c3e074SFabio Estevam #ifdef CONFIG_FSL_ESDHC
11747c3e074SFabio Estevam struct fsl_esdhc_cfg esdhc_cfg[2] = {
11816e43f35SBenoît Thébaudeau {MMC_SDHC1_BASE_ADDR},
11916e43f35SBenoît Thébaudeau {MMC_SDHC2_BASE_ADDR},
12047c3e074SFabio Estevam };
12147c3e074SFabio Estevam
board_mmc_getcd(struct mmc * mmc)122314284b1SThierry Reding int board_mmc_getcd(struct mmc *mmc)
12347c3e074SFabio Estevam {
12447c3e074SFabio Estevam struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv;
125314284b1SThierry Reding int ret;
12647c3e074SFabio Estevam
1275053b593SBenoît Thébaudeau imx_iomux_v3_setup_pad(MX53_PAD_GPIO_1__GPIO1_1);
12892550708SAshok Kumar Reddy gpio_direction_input(IMX_GPIO_NR(1, 1));
1295053b593SBenoît Thébaudeau imx_iomux_v3_setup_pad(MX53_PAD_GPIO_4__GPIO1_4);
13092550708SAshok Kumar Reddy gpio_direction_input(IMX_GPIO_NR(1, 4));
131d59c33a1SFabio Estevam
13247c3e074SFabio Estevam if (cfg->esdhc_base == MMC_SDHC1_BASE_ADDR)
13392550708SAshok Kumar Reddy ret = !gpio_get_value(IMX_GPIO_NR(1, 1));
13447c3e074SFabio Estevam else
13592550708SAshok Kumar Reddy ret = !gpio_get_value(IMX_GPIO_NR(1, 4));
13647c3e074SFabio Estevam
137314284b1SThierry Reding return ret;
13847c3e074SFabio Estevam }
13947c3e074SFabio Estevam
1405053b593SBenoît Thébaudeau #define SD_CMD_PAD_CTRL (PAD_CTL_HYS | PAD_CTL_DSE_HIGH | \
1415053b593SBenoît Thébaudeau PAD_CTL_PUS_100K_UP)
1425053b593SBenoît Thébaudeau #define SD_CLK_PAD_CTRL (PAD_CTL_PUS_47K_UP | PAD_CTL_DSE_HIGH)
1435053b593SBenoît Thébaudeau #define SD_PAD_CTRL (PAD_CTL_HYS | PAD_CTL_PUS_47K_UP | \
1445053b593SBenoît Thébaudeau PAD_CTL_DSE_HIGH)
1455053b593SBenoît Thébaudeau
board_mmc_init(bd_t * bis)14647c3e074SFabio Estevam int board_mmc_init(bd_t *bis)
14747c3e074SFabio Estevam {
1485053b593SBenoît Thébaudeau static const iomux_v3_cfg_t sd1_pads[] = {
1495053b593SBenoît Thébaudeau NEW_PAD_CTRL(MX53_PAD_SD1_CMD__ESDHC1_CMD, SD_CMD_PAD_CTRL),
1505053b593SBenoît Thébaudeau NEW_PAD_CTRL(MX53_PAD_SD1_CLK__ESDHC1_CLK, SD_CLK_PAD_CTRL),
1515053b593SBenoît Thébaudeau NEW_PAD_CTRL(MX53_PAD_SD1_DATA0__ESDHC1_DAT0, SD_PAD_CTRL),
1525053b593SBenoît Thébaudeau NEW_PAD_CTRL(MX53_PAD_SD1_DATA1__ESDHC1_DAT1, SD_PAD_CTRL),
1535053b593SBenoît Thébaudeau NEW_PAD_CTRL(MX53_PAD_SD1_DATA2__ESDHC1_DAT2, SD_PAD_CTRL),
1545053b593SBenoît Thébaudeau NEW_PAD_CTRL(MX53_PAD_SD1_DATA3__ESDHC1_DAT3, SD_PAD_CTRL),
1555053b593SBenoît Thébaudeau };
1565053b593SBenoît Thébaudeau
1575053b593SBenoît Thébaudeau static const iomux_v3_cfg_t sd2_pads[] = {
1585053b593SBenoît Thébaudeau NEW_PAD_CTRL(MX53_PAD_SD2_CMD__ESDHC2_CMD, SD_CMD_PAD_CTRL),
1595053b593SBenoît Thébaudeau NEW_PAD_CTRL(MX53_PAD_SD2_CLK__ESDHC2_CLK, SD_CLK_PAD_CTRL),
1605053b593SBenoît Thébaudeau NEW_PAD_CTRL(MX53_PAD_SD2_DATA0__ESDHC2_DAT0, SD_PAD_CTRL),
1615053b593SBenoît Thébaudeau NEW_PAD_CTRL(MX53_PAD_SD2_DATA1__ESDHC2_DAT1, SD_PAD_CTRL),
1625053b593SBenoît Thébaudeau NEW_PAD_CTRL(MX53_PAD_SD2_DATA2__ESDHC2_DAT2, SD_PAD_CTRL),
1635053b593SBenoît Thébaudeau NEW_PAD_CTRL(MX53_PAD_SD2_DATA3__ESDHC2_DAT3, SD_PAD_CTRL),
1645053b593SBenoît Thébaudeau NEW_PAD_CTRL(MX53_PAD_PATA_DATA12__ESDHC2_DAT4, SD_PAD_CTRL),
1655053b593SBenoît Thébaudeau NEW_PAD_CTRL(MX53_PAD_PATA_DATA13__ESDHC2_DAT5, SD_PAD_CTRL),
1665053b593SBenoît Thébaudeau NEW_PAD_CTRL(MX53_PAD_PATA_DATA14__ESDHC2_DAT6, SD_PAD_CTRL),
1675053b593SBenoît Thébaudeau NEW_PAD_CTRL(MX53_PAD_PATA_DATA15__ESDHC2_DAT7, SD_PAD_CTRL),
1685053b593SBenoît Thébaudeau };
1695053b593SBenoît Thébaudeau
17047c3e074SFabio Estevam u32 index;
1717bf38161SFabio Estevam int ret;
17247c3e074SFabio Estevam
173a2ac1b3aSBenoît Thébaudeau esdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC_CLK);
174a2ac1b3aSBenoît Thébaudeau esdhc_cfg[1].sdhc_clk = mxc_get_clock(MXC_ESDHC2_CLK);
175a2ac1b3aSBenoît Thébaudeau
17647c3e074SFabio Estevam for (index = 0; index < CONFIG_SYS_FSL_ESDHC_NUM; index++) {
17747c3e074SFabio Estevam switch (index) {
17847c3e074SFabio Estevam case 0:
1795053b593SBenoît Thébaudeau imx_iomux_v3_setup_multiple_pads(sd1_pads,
1805053b593SBenoît Thébaudeau ARRAY_SIZE(sd1_pads));
18147c3e074SFabio Estevam break;
18247c3e074SFabio Estevam case 1:
1835053b593SBenoît Thébaudeau imx_iomux_v3_setup_multiple_pads(sd2_pads,
1845053b593SBenoît Thébaudeau ARRAY_SIZE(sd2_pads));
18547c3e074SFabio Estevam break;
18647c3e074SFabio Estevam default:
18747c3e074SFabio Estevam printf("Warning: you configured more ESDHC controller"
18847c3e074SFabio Estevam "(%d) as supported by the board(2)\n",
18947c3e074SFabio Estevam CONFIG_SYS_FSL_ESDHC_NUM);
1907bf38161SFabio Estevam return -EINVAL;
19147c3e074SFabio Estevam }
1927bf38161SFabio Estevam ret = fsl_esdhc_initialize(bis, &esdhc_cfg[index]);
1937bf38161SFabio Estevam if (ret)
1947bf38161SFabio Estevam return ret;
19547c3e074SFabio Estevam }
19647c3e074SFabio Estevam
1977bf38161SFabio Estevam return 0;
19847c3e074SFabio Estevam }
19947c3e074SFabio Estevam #endif
20047c3e074SFabio Estevam
weim_smc911x_iomux(void)20147c3e074SFabio Estevam static void weim_smc911x_iomux(void)
20247c3e074SFabio Estevam {
2035053b593SBenoît Thébaudeau static const iomux_v3_cfg_t weim_smc911x_pads[] = {
20447c3e074SFabio Estevam /* Data bus */
2055053b593SBenoît Thébaudeau NEW_PAD_CTRL(MX53_PAD_EIM_D16__EMI_WEIM_D_16,
2065053b593SBenoît Thébaudeau PAD_CTL_PKE | PAD_CTL_DSE_HIGH),
2075053b593SBenoît Thébaudeau NEW_PAD_CTRL(MX53_PAD_EIM_D17__EMI_WEIM_D_17,
2085053b593SBenoît Thébaudeau PAD_CTL_PKE | PAD_CTL_DSE_HIGH),
2095053b593SBenoît Thébaudeau NEW_PAD_CTRL(MX53_PAD_EIM_D18__EMI_WEIM_D_18,
2105053b593SBenoît Thébaudeau PAD_CTL_PKE | PAD_CTL_DSE_HIGH),
2115053b593SBenoît Thébaudeau NEW_PAD_CTRL(MX53_PAD_EIM_D19__EMI_WEIM_D_19,
2125053b593SBenoît Thébaudeau PAD_CTL_PKE | PAD_CTL_DSE_HIGH),
2135053b593SBenoît Thébaudeau NEW_PAD_CTRL(MX53_PAD_EIM_D20__EMI_WEIM_D_20,
2145053b593SBenoît Thébaudeau PAD_CTL_PKE | PAD_CTL_DSE_HIGH),
2155053b593SBenoît Thébaudeau NEW_PAD_CTRL(MX53_PAD_EIM_D21__EMI_WEIM_D_21,
2165053b593SBenoît Thébaudeau PAD_CTL_PKE | PAD_CTL_DSE_HIGH),
2175053b593SBenoît Thébaudeau NEW_PAD_CTRL(MX53_PAD_EIM_D22__EMI_WEIM_D_22,
2185053b593SBenoît Thébaudeau PAD_CTL_PKE | PAD_CTL_DSE_HIGH),
2195053b593SBenoît Thébaudeau NEW_PAD_CTRL(MX53_PAD_EIM_D23__EMI_WEIM_D_23,
2205053b593SBenoît Thébaudeau PAD_CTL_PKE | PAD_CTL_DSE_HIGH),
2215053b593SBenoît Thébaudeau NEW_PAD_CTRL(MX53_PAD_EIM_D24__EMI_WEIM_D_24,
2225053b593SBenoît Thébaudeau PAD_CTL_PKE | PAD_CTL_DSE_HIGH),
2235053b593SBenoît Thébaudeau NEW_PAD_CTRL(MX53_PAD_EIM_D25__EMI_WEIM_D_25,
2245053b593SBenoît Thébaudeau PAD_CTL_PKE | PAD_CTL_DSE_HIGH),
2255053b593SBenoît Thébaudeau NEW_PAD_CTRL(MX53_PAD_EIM_D26__EMI_WEIM_D_26,
2265053b593SBenoît Thébaudeau PAD_CTL_PKE | PAD_CTL_DSE_HIGH),
2275053b593SBenoît Thébaudeau NEW_PAD_CTRL(MX53_PAD_EIM_D27__EMI_WEIM_D_27,
2285053b593SBenoît Thébaudeau PAD_CTL_PKE | PAD_CTL_DSE_HIGH),
2295053b593SBenoît Thébaudeau NEW_PAD_CTRL(MX53_PAD_EIM_D28__EMI_WEIM_D_28,
2305053b593SBenoît Thébaudeau PAD_CTL_PKE | PAD_CTL_DSE_HIGH),
2315053b593SBenoît Thébaudeau NEW_PAD_CTRL(MX53_PAD_EIM_D29__EMI_WEIM_D_29,
2325053b593SBenoît Thébaudeau PAD_CTL_PKE | PAD_CTL_DSE_HIGH),
2335053b593SBenoît Thébaudeau NEW_PAD_CTRL(MX53_PAD_EIM_D30__EMI_WEIM_D_30,
2345053b593SBenoît Thébaudeau PAD_CTL_PKE | PAD_CTL_DSE_HIGH),
2355053b593SBenoît Thébaudeau NEW_PAD_CTRL(MX53_PAD_EIM_D31__EMI_WEIM_D_31,
2365053b593SBenoît Thébaudeau PAD_CTL_PKE | PAD_CTL_DSE_HIGH),
23747c3e074SFabio Estevam
23847c3e074SFabio Estevam /* Address lines */
2395053b593SBenoît Thébaudeau NEW_PAD_CTRL(MX53_PAD_EIM_DA0__EMI_NAND_WEIM_DA_0,
2405053b593SBenoît Thébaudeau PAD_CTL_PKE | PAD_CTL_DSE_HIGH),
2415053b593SBenoît Thébaudeau NEW_PAD_CTRL(MX53_PAD_EIM_DA1__EMI_NAND_WEIM_DA_1,
2425053b593SBenoît Thébaudeau PAD_CTL_PKE | PAD_CTL_DSE_HIGH),
2435053b593SBenoît Thébaudeau NEW_PAD_CTRL(MX53_PAD_EIM_DA2__EMI_NAND_WEIM_DA_2,
2445053b593SBenoît Thébaudeau PAD_CTL_PKE | PAD_CTL_DSE_HIGH),
2455053b593SBenoît Thébaudeau NEW_PAD_CTRL(MX53_PAD_EIM_DA3__EMI_NAND_WEIM_DA_3,
2465053b593SBenoît Thébaudeau PAD_CTL_PKE | PAD_CTL_DSE_HIGH),
2475053b593SBenoît Thébaudeau NEW_PAD_CTRL(MX53_PAD_EIM_DA4__EMI_NAND_WEIM_DA_4,
2485053b593SBenoît Thébaudeau PAD_CTL_PKE | PAD_CTL_DSE_HIGH),
2495053b593SBenoît Thébaudeau NEW_PAD_CTRL(MX53_PAD_EIM_DA5__EMI_NAND_WEIM_DA_5,
2505053b593SBenoît Thébaudeau PAD_CTL_PKE | PAD_CTL_DSE_HIGH),
2515053b593SBenoît Thébaudeau NEW_PAD_CTRL(MX53_PAD_EIM_DA6__EMI_NAND_WEIM_DA_6,
2525053b593SBenoît Thébaudeau PAD_CTL_PKE | PAD_CTL_DSE_HIGH),
25347c3e074SFabio Estevam
25447c3e074SFabio Estevam /* other EIM signals for ethernet */
2555053b593SBenoît Thébaudeau MX53_PAD_EIM_OE__EMI_WEIM_OE,
2565053b593SBenoît Thébaudeau MX53_PAD_EIM_RW__EMI_WEIM_RW,
2575053b593SBenoît Thébaudeau MX53_PAD_EIM_CS1__EMI_WEIM_CS_1,
2585053b593SBenoît Thébaudeau };
2595053b593SBenoît Thébaudeau
2605053b593SBenoît Thébaudeau /* ETHERNET_INT as GPIO2_31 */
2615053b593SBenoît Thébaudeau imx_iomux_v3_setup_pad(MX53_PAD_EIM_EB3__GPIO2_31);
2625053b593SBenoît Thébaudeau gpio_direction_input(ETHERNET_INT);
2635053b593SBenoît Thébaudeau
2645053b593SBenoît Thébaudeau /* WEIM bus */
2655053b593SBenoît Thébaudeau imx_iomux_v3_setup_multiple_pads(weim_smc911x_pads,
2665053b593SBenoît Thébaudeau ARRAY_SIZE(weim_smc911x_pads));
26747c3e074SFabio Estevam }
26847c3e074SFabio Estevam
weim_cs1_settings(void)26947c3e074SFabio Estevam static void weim_cs1_settings(void)
27047c3e074SFabio Estevam {
27147c3e074SFabio Estevam struct weim *weim_regs = (struct weim *)WEIM_BASE_ADDR;
27247c3e074SFabio Estevam
27347c3e074SFabio Estevam writel(MX53ARD_CS1GCR1, &weim_regs->cs1gcr1);
27447c3e074SFabio Estevam writel(0x0, &weim_regs->cs1gcr2);
27547c3e074SFabio Estevam writel(MX53ARD_CS1RCR1, &weim_regs->cs1rcr1);
27647c3e074SFabio Estevam writel(MX53ARD_CS1RCR2, &weim_regs->cs1rcr2);
27747c3e074SFabio Estevam writel(MX53ARD_CS1WCR1, &weim_regs->cs1wcr1);
27847c3e074SFabio Estevam writel(0x0, &weim_regs->cs1wcr2);
27947c3e074SFabio Estevam writel(0x0, &weim_regs->wcr);
28047c3e074SFabio Estevam
28147c3e074SFabio Estevam set_chipselect_size(CS0_64M_CS1_64M);
28247c3e074SFabio Estevam }
28347c3e074SFabio Estevam
board_early_init_f(void)28447c3e074SFabio Estevam int board_early_init_f(void)
28547c3e074SFabio Estevam {
28668fbc0e6SBenoît Thébaudeau setup_iomux_nand();
28747c3e074SFabio Estevam setup_iomux_uart();
28847c3e074SFabio Estevam return 0;
28947c3e074SFabio Estevam }
29047c3e074SFabio Estevam
board_init(void)29147c3e074SFabio Estevam int board_init(void)
29247c3e074SFabio Estevam {
29347c3e074SFabio Estevam /* address of boot parameters */
29447c3e074SFabio Estevam gd->bd->bi_boot_params = PHYS_SDRAM_1 + 0x100;
29547c3e074SFabio Estevam
29647c3e074SFabio Estevam return 0;
29747c3e074SFabio Estevam }
29847c3e074SFabio Estevam
board_eth_init(bd_t * bis)29947c3e074SFabio Estevam int board_eth_init(bd_t *bis)
30047c3e074SFabio Estevam {
30119db9be4SFabio Estevam int rc = -ENODEV;
30247c3e074SFabio Estevam
30347c3e074SFabio Estevam weim_smc911x_iomux();
30447c3e074SFabio Estevam weim_cs1_settings();
30547c3e074SFabio Estevam
30647c3e074SFabio Estevam #ifdef CONFIG_SMC911X
30747c3e074SFabio Estevam rc = smc911x_initialize(0, CONFIG_SMC911X_BASE);
30847c3e074SFabio Estevam #endif
30947c3e074SFabio Estevam return rc;
31047c3e074SFabio Estevam }
31147c3e074SFabio Estevam
checkboard(void)31247c3e074SFabio Estevam int checkboard(void)
31347c3e074SFabio Estevam {
31447c3e074SFabio Estevam puts("Board: MX53ARD\n");
31547c3e074SFabio Estevam
31647c3e074SFabio Estevam return 0;
31747c3e074SFabio Estevam }
318