blob: 2f91a0525c4b9697a028e9eabf455a70dc06399d [file] [log] [blame]
Tom Rini10e47792018-05-06 17:58:06 -04001// SPDX-License-Identifier: GPL-2.0+
Fabio Estevama7b1dc92011-05-13 03:15:11 +00002/*
3 * (C) Copyright 2011 Freescale Semiconductor, Inc.
Fabio Estevama7b1dc92011-05-13 03:15:11 +00004 */
5
6#include <common.h>
Simon Glass8e16b1e2019-12-28 10:45:05 -07007#include <init.h>
Simon Glass3ba929a2020-10-30 21:38:53 -06008#include <asm/global_data.h>
Fabio Estevama7b1dc92011-05-13 03:15:11 +00009#include <asm/io.h>
10#include <asm/arch/imx-regs.h>
Fabio Estevama7b1dc92011-05-13 03:15:11 +000011#include <asm/arch/sys_proto.h>
12#include <asm/arch/crm_regs.h>
Benoît Thébaudeauc58ff342012-10-01 08:36:25 +000013#include <asm/arch/clock.h>
Benoît Thébaudeau821e30f2013-05-03 10:32:35 +000014#include <asm/arch/iomux-mx53.h>
Masahiro Yamada56a931c2016-09-21 11:28:55 +090015#include <linux/errno.h>
Fabio Estevama7b1dc92011-05-13 03:15:11 +000016#include <netdev.h>
17#include <mmc.h>
Yangbo Lu73340382019-06-21 11:42:28 +080018#include <fsl_esdhc_imx.h>
Stefano Babic7afafd02011-08-21 10:56:57 +020019#include <asm/gpio.h>
Fabio Estevama7b1dc92011-05-13 03:15:11 +000020
21DECLARE_GLOBAL_DATA_PTR;
22
Fabio Estevama7b1dc92011-05-13 03:15:11 +000023int dram_init(void)
24{
25 u32 size1, size2;
26
Albert ARIBAUDa9606732011-07-03 05:55:33 +000027 size1 = get_ram_size((void *)PHYS_SDRAM_1, PHYS_SDRAM_1_SIZE);
28 size2 = get_ram_size((void *)PHYS_SDRAM_2, PHYS_SDRAM_2_SIZE);
Fabio Estevama7b1dc92011-05-13 03:15:11 +000029
30 gd->ram_size = size1 + size2;
31
32 return 0;
33}
Simon Glass2f949c32017-03-31 08:40:32 -060034int dram_init_banksize(void)
Fabio Estevama7b1dc92011-05-13 03:15:11 +000035{
36 gd->bd->bi_dram[0].start = PHYS_SDRAM_1;
37 gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE;
38
39 gd->bd->bi_dram[1].start = PHYS_SDRAM_2;
40 gd->bd->bi_dram[1].size = PHYS_SDRAM_2_SIZE;
Simon Glass2f949c32017-03-31 08:40:32 -060041
42 return 0;
Fabio Estevama7b1dc92011-05-13 03:15:11 +000043}
44
Benoît Thébaudeau821e30f2013-05-03 10:32:35 +000045#define UART_PAD_CTRL (PAD_CTL_HYS | PAD_CTL_DSE_HIGH | \
46 PAD_CTL_PUS_100K_UP | PAD_CTL_ODE)
47
Fabio Estevama7b1dc92011-05-13 03:15:11 +000048static void setup_iomux_uart(void)
49{
Benoît Thébaudeau821e30f2013-05-03 10:32:35 +000050 static const iomux_v3_cfg_t uart_pads[] = {
51 NEW_PAD_CTRL(MX53_PAD_CSI0_DAT11__UART1_RXD_MUX, UART_PAD_CTRL),
52 NEW_PAD_CTRL(MX53_PAD_CSI0_DAT10__UART1_TXD_MUX, UART_PAD_CTRL),
53 };
Fabio Estevama7b1dc92011-05-13 03:15:11 +000054
Benoît Thébaudeau821e30f2013-05-03 10:32:35 +000055 imx_iomux_v3_setup_multiple_pads(uart_pads, ARRAY_SIZE(uart_pads));
Fabio Estevama7b1dc92011-05-13 03:15:11 +000056}
57
58static void setup_iomux_fec(void)
59{
Benoît Thébaudeau821e30f2013-05-03 10:32:35 +000060 static const iomux_v3_cfg_t fec_pads[] = {
61 NEW_PAD_CTRL(MX53_PAD_FEC_MDIO__FEC_MDIO, PAD_CTL_HYS |
62 PAD_CTL_DSE_HIGH | PAD_CTL_PUS_22K_UP | PAD_CTL_ODE),
63 NEW_PAD_CTRL(MX53_PAD_FEC_MDC__FEC_MDC, PAD_CTL_DSE_HIGH),
64 NEW_PAD_CTRL(MX53_PAD_FEC_RXD1__FEC_RDATA_1,
65 PAD_CTL_HYS | PAD_CTL_PKE),
66 NEW_PAD_CTRL(MX53_PAD_FEC_RXD0__FEC_RDATA_0,
67 PAD_CTL_HYS | PAD_CTL_PKE),
68 NEW_PAD_CTRL(MX53_PAD_FEC_TXD1__FEC_TDATA_1, PAD_CTL_DSE_HIGH),
69 NEW_PAD_CTRL(MX53_PAD_FEC_TXD0__FEC_TDATA_0, PAD_CTL_DSE_HIGH),
70 NEW_PAD_CTRL(MX53_PAD_FEC_TX_EN__FEC_TX_EN, PAD_CTL_DSE_HIGH),
71 NEW_PAD_CTRL(MX53_PAD_FEC_REF_CLK__FEC_TX_CLK,
72 PAD_CTL_HYS | PAD_CTL_PKE),
73 NEW_PAD_CTRL(MX53_PAD_FEC_RX_ER__FEC_RX_ER,
74 PAD_CTL_HYS | PAD_CTL_PKE),
75 NEW_PAD_CTRL(MX53_PAD_FEC_CRS_DV__FEC_RX_DV,
76 PAD_CTL_HYS | PAD_CTL_PKE),
77 };
Fabio Estevama7b1dc92011-05-13 03:15:11 +000078
Benoît Thébaudeau821e30f2013-05-03 10:32:35 +000079 imx_iomux_v3_setup_multiple_pads(fec_pads, ARRAY_SIZE(fec_pads));
Fabio Estevama7b1dc92011-05-13 03:15:11 +000080}
81
Yangbo Lu73340382019-06-21 11:42:28 +080082#ifdef CONFIG_FSL_ESDHC_IMX
Fabio Estevama7b1dc92011-05-13 03:15:11 +000083struct fsl_esdhc_cfg esdhc_cfg[1] = {
Benoît Thébaudeauc08d11c2012-08-13 07:28:16 +000084 {MMC_SDHC1_BASE_ADDR},
Fabio Estevama7b1dc92011-05-13 03:15:11 +000085};
86
Thierry Redingd7aebf42012-01-02 01:15:36 +000087int board_mmc_getcd(struct mmc *mmc)
Fabio Estevama7b1dc92011-05-13 03:15:11 +000088{
Benoît Thébaudeau821e30f2013-05-03 10:32:35 +000089 imx_iomux_v3_setup_pad(MX53_PAD_EIM_DA13__GPIO3_13);
Ashok Kumar Reddy7d04bd72012-08-28 07:39:38 +053090 gpio_direction_input(IMX_GPIO_NR(3, 13));
91 return !gpio_get_value(IMX_GPIO_NR(3, 13));
Fabio Estevama7b1dc92011-05-13 03:15:11 +000092}
93
Benoît Thébaudeau821e30f2013-05-03 10:32:35 +000094#define SD_CMD_PAD_CTRL (PAD_CTL_HYS | PAD_CTL_DSE_HIGH | \
95 PAD_CTL_PUS_100K_UP)
96#define SD_PAD_CTRL (PAD_CTL_HYS | PAD_CTL_PUS_47K_UP | \
97 PAD_CTL_DSE_HIGH)
98
Masahiro Yamadaf7ed78b2020-06-26 15:13:33 +090099int board_mmc_init(struct bd_info *bis)
Fabio Estevama7b1dc92011-05-13 03:15:11 +0000100{
Benoît Thébaudeau821e30f2013-05-03 10:32:35 +0000101 static const iomux_v3_cfg_t sd1_pads[] = {
102 NEW_PAD_CTRL(MX53_PAD_SD1_CMD__ESDHC1_CMD, SD_CMD_PAD_CTRL),
103 NEW_PAD_CTRL(MX53_PAD_SD1_CLK__ESDHC1_CLK, SD_PAD_CTRL),
104 NEW_PAD_CTRL(MX53_PAD_SD1_DATA0__ESDHC1_DAT0, SD_PAD_CTRL),
105 NEW_PAD_CTRL(MX53_PAD_SD1_DATA1__ESDHC1_DAT1, SD_PAD_CTRL),
106 NEW_PAD_CTRL(MX53_PAD_SD1_DATA2__ESDHC1_DAT2, SD_PAD_CTRL),
107 NEW_PAD_CTRL(MX53_PAD_SD1_DATA3__ESDHC1_DAT3, SD_PAD_CTRL),
108 MX53_PAD_EIM_DA13__GPIO3_13,
109 };
110
Fabio Estevama7b1dc92011-05-13 03:15:11 +0000111 u32 index;
Fabio Estevam14d6e4d2014-11-20 16:35:18 -0200112 int ret;
Fabio Estevama7b1dc92011-05-13 03:15:11 +0000113
Benoît Thébaudeauc58ff342012-10-01 08:36:25 +0000114 esdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC_CLK);
115
Fabio Estevama7b1dc92011-05-13 03:15:11 +0000116 for (index = 0; index < CONFIG_SYS_FSL_ESDHC_NUM; index++) {
117 switch (index) {
118 case 0:
Benoît Thébaudeau821e30f2013-05-03 10:32:35 +0000119 imx_iomux_v3_setup_multiple_pads(sd1_pads,
120 ARRAY_SIZE(sd1_pads));
Fabio Estevama7b1dc92011-05-13 03:15:11 +0000121 break;
122
123 default:
124 printf("Warning: you configured more ESDHC controller"
125 "(%d) as supported by the board(1)\n",
126 CONFIG_SYS_FSL_ESDHC_NUM);
Fabio Estevam14d6e4d2014-11-20 16:35:18 -0200127 return -EINVAL;
Fabio Estevama7b1dc92011-05-13 03:15:11 +0000128 }
Fabio Estevam14d6e4d2014-11-20 16:35:18 -0200129 ret = fsl_esdhc_initialize(bis, &esdhc_cfg[index]);
130 if (ret)
131 return ret;
Fabio Estevama7b1dc92011-05-13 03:15:11 +0000132 }
133
Fabio Estevam14d6e4d2014-11-20 16:35:18 -0200134 return 0;
Fabio Estevama7b1dc92011-05-13 03:15:11 +0000135}
136#endif
137
138int board_early_init_f(void)
139{
140 setup_iomux_uart();
141 setup_iomux_fec();
142
143 return 0;
144}
145
146int board_init(void)
147{
Fabio Estevama7b1dc92011-05-13 03:15:11 +0000148 /* address of boot parameters */
149 gd->bd->bi_boot_params = PHYS_SDRAM_1 + 0x100;
150
151 return 0;
152}
153
154int checkboard(void)
155{
156 puts("Board: MX53SMD\n");
157
158 return 0;
159}