xref: /openbmc/u-boot/board/freescale/mx25pdk/mx25pdk.c (revision af2a4093cb141f9c5ea433c41ab06a528a7792a6)
1419adbfbSFabio Estevam /*
2419adbfbSFabio Estevam  * (C) Copyright 2011 Freescale Semiconductor, Inc.
3419adbfbSFabio Estevam  *
4419adbfbSFabio Estevam  * Author: Fabio Estevam <fabio.estevam@freescale.com>
5419adbfbSFabio Estevam  *
6419adbfbSFabio Estevam  * See file CREDITS for list of people who contributed to this
7419adbfbSFabio Estevam  * project.
8419adbfbSFabio Estevam  *
9419adbfbSFabio Estevam  * This program is free software; you can redistribute it and/or
10419adbfbSFabio Estevam  * modify it under the terms of the GNU General Public License as
11419adbfbSFabio Estevam  * published by the Free Software Foundation; either version 2 of
12419adbfbSFabio Estevam  * the License, or (at your option) any later version.
13419adbfbSFabio Estevam  *
14419adbfbSFabio Estevam  * This program is distributed in the hope that it will be useful,
15419adbfbSFabio Estevam  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16419adbfbSFabio Estevam  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17419adbfbSFabio Estevam  * GNU General Public License for more details.
18419adbfbSFabio Estevam  */
19419adbfbSFabio Estevam 
20419adbfbSFabio Estevam #include <common.h>
21419adbfbSFabio Estevam #include <asm/io.h>
22*af2a4093SFabio Estevam #include <asm/gpio.h>
23419adbfbSFabio Estevam #include <asm/arch/imx-regs.h>
24419adbfbSFabio Estevam #include <asm/arch/imx25-pinmux.h>
25419adbfbSFabio Estevam #include <asm/arch/sys_proto.h>
26*af2a4093SFabio Estevam #include <asm/arch/clock.h>
27*af2a4093SFabio Estevam #include <mmc.h>
28*af2a4093SFabio Estevam #include <fsl_esdhc.h>
29*af2a4093SFabio Estevam 
30*af2a4093SFabio Estevam #define CARD_DETECT		IMX_GPIO_NR(2, 1)
31419adbfbSFabio Estevam 
32419adbfbSFabio Estevam DECLARE_GLOBAL_DATA_PTR;
33419adbfbSFabio Estevam 
34*af2a4093SFabio Estevam #ifdef CONFIG_FSL_ESDHC
35*af2a4093SFabio Estevam struct fsl_esdhc_cfg esdhc_cfg[1] = {
36*af2a4093SFabio Estevam 	{IMX_MMC_SDHC1_BASE},
37*af2a4093SFabio Estevam };
38*af2a4093SFabio Estevam #endif
39*af2a4093SFabio Estevam 
40419adbfbSFabio Estevam int dram_init(void)
41419adbfbSFabio Estevam {
42419adbfbSFabio Estevam 	/* dram_init must store complete ramsize in gd->ram_size */
43419adbfbSFabio Estevam 	gd->ram_size = get_ram_size((void *)CONFIG_SYS_SDRAM_BASE,
44419adbfbSFabio Estevam 				PHYS_SDRAM_1_SIZE);
45419adbfbSFabio Estevam 	return 0;
46419adbfbSFabio Estevam }
47419adbfbSFabio Estevam 
48419adbfbSFabio Estevam int board_early_init_f(void)
49419adbfbSFabio Estevam {
50419adbfbSFabio Estevam 	mx25_uart1_init_pins();
51419adbfbSFabio Estevam 
52419adbfbSFabio Estevam 	return 0;
53419adbfbSFabio Estevam }
54419adbfbSFabio Estevam 
55419adbfbSFabio Estevam int board_init(void)
56419adbfbSFabio Estevam {
57419adbfbSFabio Estevam 	/* address of boot parameters */
58419adbfbSFabio Estevam 	gd->bd->bi_boot_params = PHYS_SDRAM_1 + 0x100;
59419adbfbSFabio Estevam 
60419adbfbSFabio Estevam 	return 0;
61419adbfbSFabio Estevam }
62419adbfbSFabio Estevam 
63*af2a4093SFabio Estevam #ifdef CONFIG_FSL_ESDHC
64*af2a4093SFabio Estevam int board_mmc_getcd(struct mmc *mmc)
65*af2a4093SFabio Estevam {
66*af2a4093SFabio Estevam 	struct iomuxc_mux_ctl *muxctl;
67*af2a4093SFabio Estevam 	struct iomuxc_pad_ctl *padctl;
68*af2a4093SFabio Estevam 	u32 gpio_mux_mode = MX25_PIN_MUX_MODE(5);
69*af2a4093SFabio Estevam 
70*af2a4093SFabio Estevam 	/*
71*af2a4093SFabio Estevam 	 * Set up the Card Detect pin.
72*af2a4093SFabio Estevam 	 *
73*af2a4093SFabio Estevam 	 * SD1_GPIO_CD: gpio2_1 is ALT 5 mode of pin A15
74*af2a4093SFabio Estevam 	 *
75*af2a4093SFabio Estevam 	 */
76*af2a4093SFabio Estevam 	muxctl = (struct iomuxc_mux_ctl *)IMX_IOPADMUX_BASE;
77*af2a4093SFabio Estevam 	padctl = (struct iomuxc_pad_ctl *)IMX_IOPADCTL_BASE;
78*af2a4093SFabio Estevam 
79*af2a4093SFabio Estevam 	writel(gpio_mux_mode, &muxctl->pad_a15);
80*af2a4093SFabio Estevam 	writel(0x0, &padctl->pad_a15);
81*af2a4093SFabio Estevam 
82*af2a4093SFabio Estevam 	gpio_direction_input(CARD_DETECT);
83*af2a4093SFabio Estevam 	return !gpio_get_value(CARD_DETECT);
84*af2a4093SFabio Estevam }
85*af2a4093SFabio Estevam 
86*af2a4093SFabio Estevam int board_mmc_init(bd_t *bis)
87*af2a4093SFabio Estevam {
88*af2a4093SFabio Estevam 	struct iomuxc_mux_ctl *muxctl;
89*af2a4093SFabio Estevam 	u32 sdhc1_mux_mode = MX25_PIN_MUX_MODE(0) | MX25_PIN_MUX_SION;
90*af2a4093SFabio Estevam 
91*af2a4093SFabio Estevam 	muxctl = (struct iomuxc_mux_ctl *)IMX_IOPADMUX_BASE;
92*af2a4093SFabio Estevam 	writel(sdhc1_mux_mode, &muxctl->pad_sd1_cmd);
93*af2a4093SFabio Estevam 	writel(sdhc1_mux_mode, &muxctl->pad_sd1_clk);
94*af2a4093SFabio Estevam 	writel(sdhc1_mux_mode, &muxctl->pad_sd1_data0);
95*af2a4093SFabio Estevam 	writel(sdhc1_mux_mode, &muxctl->pad_sd1_data1);
96*af2a4093SFabio Estevam 	writel(sdhc1_mux_mode, &muxctl->pad_sd1_data2);
97*af2a4093SFabio Estevam 	writel(sdhc1_mux_mode, &muxctl->pad_sd1_data3);
98*af2a4093SFabio Estevam 
99*af2a4093SFabio Estevam 	esdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC1_CLK);
100*af2a4093SFabio Estevam 	return fsl_esdhc_initialize(bis, &esdhc_cfg[0]);
101*af2a4093SFabio Estevam }
102*af2a4093SFabio Estevam #endif
103*af2a4093SFabio Estevam 
104419adbfbSFabio Estevam int checkboard(void)
105419adbfbSFabio Estevam {
106419adbfbSFabio Estevam 	puts("Board: MX25PDK\n");
107419adbfbSFabio Estevam 
108419adbfbSFabio Estevam 	return 0;
109419adbfbSFabio Estevam }
110