xref: /openbmc/u-boot/board/freescale/mx6slevk/mx6slevk.c (revision 57ca432fb9f59cea48d8cde1dc1d5cc2f80993c7)
1*57ca432fSFabio Estevam /*
2*57ca432fSFabio Estevam  * Copyright (C) 2013 Freescale Semiconductor, Inc.
3*57ca432fSFabio Estevam  *
4*57ca432fSFabio Estevam  * Author: Fabio Estevam <fabio.estevam@freescale.com>
5*57ca432fSFabio Estevam  *
6*57ca432fSFabio Estevam  * This program is free software; you can redistribute it and/or
7*57ca432fSFabio Estevam  * modify it under the terms of the GNU General Public License as
8*57ca432fSFabio Estevam  * published by the Free Software Foundation; either version 2 of
9*57ca432fSFabio Estevam  * the License, or (at your option) any later version.
10*57ca432fSFabio Estevam  */
11*57ca432fSFabio Estevam 
12*57ca432fSFabio Estevam #include <asm/arch/clock.h>
13*57ca432fSFabio Estevam #include <asm/arch/iomux.h>
14*57ca432fSFabio Estevam #include <asm/arch/imx-regs.h>
15*57ca432fSFabio Estevam #include <asm/arch/mx6-pins.h>
16*57ca432fSFabio Estevam #include <asm/arch/sys_proto.h>
17*57ca432fSFabio Estevam #include <asm/gpio.h>
18*57ca432fSFabio Estevam #include <asm/imx-common/iomux-v3.h>
19*57ca432fSFabio Estevam #include <asm/io.h>
20*57ca432fSFabio Estevam #include <asm/sizes.h>
21*57ca432fSFabio Estevam #include <common.h>
22*57ca432fSFabio Estevam #include <fsl_esdhc.h>
23*57ca432fSFabio Estevam #include <mmc.h>
24*57ca432fSFabio Estevam 
25*57ca432fSFabio Estevam DECLARE_GLOBAL_DATA_PTR;
26*57ca432fSFabio Estevam 
27*57ca432fSFabio Estevam #define UART_PAD_CTRL  (PAD_CTL_PKE | PAD_CTL_PUE |		\
28*57ca432fSFabio Estevam 	PAD_CTL_PUS_100K_UP | PAD_CTL_SPEED_MED |		\
29*57ca432fSFabio Estevam 	PAD_CTL_DSE_40ohm   | PAD_CTL_SRE_FAST  | PAD_CTL_HYS)
30*57ca432fSFabio Estevam 
31*57ca432fSFabio Estevam #define USDHC_PAD_CTRL (PAD_CTL_PKE | PAD_CTL_PUE |		\
32*57ca432fSFabio Estevam 	PAD_CTL_PUS_22K_UP  | PAD_CTL_SPEED_LOW |		\
33*57ca432fSFabio Estevam 	PAD_CTL_DSE_80ohm   | PAD_CTL_SRE_FAST  | PAD_CTL_HYS)
34*57ca432fSFabio Estevam 
35*57ca432fSFabio Estevam int dram_init(void)
36*57ca432fSFabio Estevam {
37*57ca432fSFabio Estevam 	gd->ram_size = get_ram_size((void *)PHYS_SDRAM, PHYS_SDRAM_SIZE);
38*57ca432fSFabio Estevam 
39*57ca432fSFabio Estevam 	return 0;
40*57ca432fSFabio Estevam }
41*57ca432fSFabio Estevam 
42*57ca432fSFabio Estevam static iomux_v3_cfg_t const uart1_pads[] = {
43*57ca432fSFabio Estevam 	MX6_PAD_UART1_TXD__UART1_TXD | MUX_PAD_CTRL(UART_PAD_CTRL),
44*57ca432fSFabio Estevam 	MX6_PAD_UART1_RXD__UART1_RXD | MUX_PAD_CTRL(UART_PAD_CTRL),
45*57ca432fSFabio Estevam };
46*57ca432fSFabio Estevam 
47*57ca432fSFabio Estevam static iomux_v3_cfg_t const usdhc2_pads[] = {
48*57ca432fSFabio Estevam 	MX6_PAD_SD2_CLK__USDHC2_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL),
49*57ca432fSFabio Estevam 	MX6_PAD_SD2_CMD__USDHC2_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL),
50*57ca432fSFabio Estevam 	MX6_PAD_SD2_DAT0__USDHC2_DAT0 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
51*57ca432fSFabio Estevam 	MX6_PAD_SD2_DAT1__USDHC2_DAT1 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
52*57ca432fSFabio Estevam 	MX6_PAD_SD2_DAT2__USDHC2_DAT2 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
53*57ca432fSFabio Estevam 	MX6_PAD_SD2_DAT3__USDHC2_DAT3 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
54*57ca432fSFabio Estevam };
55*57ca432fSFabio Estevam 
56*57ca432fSFabio Estevam static void setup_iomux_uart(void)
57*57ca432fSFabio Estevam {
58*57ca432fSFabio Estevam 	imx_iomux_v3_setup_multiple_pads(uart1_pads, ARRAY_SIZE(uart1_pads));
59*57ca432fSFabio Estevam }
60*57ca432fSFabio Estevam 
61*57ca432fSFabio Estevam static struct fsl_esdhc_cfg usdhc_cfg[1] = {
62*57ca432fSFabio Estevam 	{USDHC2_BASE_ADDR},
63*57ca432fSFabio Estevam };
64*57ca432fSFabio Estevam 
65*57ca432fSFabio Estevam int board_mmc_getcd(struct mmc *mmc)
66*57ca432fSFabio Estevam {
67*57ca432fSFabio Estevam 	return 1;	/* Assume boot SD always present */
68*57ca432fSFabio Estevam }
69*57ca432fSFabio Estevam 
70*57ca432fSFabio Estevam int board_mmc_init(bd_t *bis)
71*57ca432fSFabio Estevam {
72*57ca432fSFabio Estevam 	imx_iomux_v3_setup_multiple_pads(usdhc2_pads, ARRAY_SIZE(usdhc2_pads));
73*57ca432fSFabio Estevam 
74*57ca432fSFabio Estevam 	usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC2_CLK);
75*57ca432fSFabio Estevam 	return fsl_esdhc_initialize(bis, &usdhc_cfg[0]);
76*57ca432fSFabio Estevam }
77*57ca432fSFabio Estevam 
78*57ca432fSFabio Estevam int board_early_init_f(void)
79*57ca432fSFabio Estevam {
80*57ca432fSFabio Estevam 	setup_iomux_uart();
81*57ca432fSFabio Estevam 	return 0;
82*57ca432fSFabio Estevam }
83*57ca432fSFabio Estevam 
84*57ca432fSFabio Estevam int board_init(void)
85*57ca432fSFabio Estevam {
86*57ca432fSFabio Estevam 	/* address of boot parameters */
87*57ca432fSFabio Estevam 	gd->bd->bi_boot_params = PHYS_SDRAM + 0x100;
88*57ca432fSFabio Estevam 
89*57ca432fSFabio Estevam 	return 0;
90*57ca432fSFabio Estevam }
91*57ca432fSFabio Estevam 
92*57ca432fSFabio Estevam u32 get_board_rev(void)
93*57ca432fSFabio Estevam {
94*57ca432fSFabio Estevam 	return get_cpu_rev();
95*57ca432fSFabio Estevam }
96*57ca432fSFabio Estevam 
97*57ca432fSFabio Estevam int checkboard(void)
98*57ca432fSFabio Estevam {
99*57ca432fSFabio Estevam 	puts("Board: MX6SLEVK\n");
100*57ca432fSFabio Estevam 
101*57ca432fSFabio Estevam 	return 0;
102*57ca432fSFabio Estevam }
103