xref: /openbmc/u-boot/board/freescale/mx6slevk/mx6slevk.c (revision 7e2173cf82d0bc235b695460c56d46927febdf36)
157ca432fSFabio Estevam /*
257ca432fSFabio Estevam  * Copyright (C) 2013 Freescale Semiconductor, Inc.
357ca432fSFabio Estevam  *
457ca432fSFabio Estevam  * Author: Fabio Estevam <fabio.estevam@freescale.com>
557ca432fSFabio Estevam  *
657ca432fSFabio Estevam  * This program is free software; you can redistribute it and/or
757ca432fSFabio Estevam  * modify it under the terms of the GNU General Public License as
857ca432fSFabio Estevam  * published by the Free Software Foundation; either version 2 of
957ca432fSFabio Estevam  * the License, or (at your option) any later version.
1057ca432fSFabio Estevam  */
1157ca432fSFabio Estevam 
1257ca432fSFabio Estevam #include <asm/arch/clock.h>
1357ca432fSFabio Estevam #include <asm/arch/iomux.h>
1457ca432fSFabio Estevam #include <asm/arch/imx-regs.h>
1557ca432fSFabio Estevam #include <asm/arch/mx6-pins.h>
1657ca432fSFabio Estevam #include <asm/arch/sys_proto.h>
1757ca432fSFabio Estevam #include <asm/gpio.h>
1857ca432fSFabio Estevam #include <asm/imx-common/iomux-v3.h>
1957ca432fSFabio Estevam #include <asm/io.h>
2057ca432fSFabio Estevam #include <asm/sizes.h>
2157ca432fSFabio Estevam #include <common.h>
2257ca432fSFabio Estevam #include <fsl_esdhc.h>
2357ca432fSFabio Estevam #include <mmc.h>
2457ca432fSFabio Estevam 
2557ca432fSFabio Estevam DECLARE_GLOBAL_DATA_PTR;
2657ca432fSFabio Estevam 
27*7e2173cfSBenoît Thébaudeau #define UART_PAD_CTRL  (PAD_CTL_PUS_100K_UP |			\
28*7e2173cfSBenoît Thébaudeau 	PAD_CTL_SPEED_MED | PAD_CTL_DSE_40ohm |			\
29*7e2173cfSBenoît Thébaudeau 	PAD_CTL_SRE_FAST  | PAD_CTL_HYS)
3057ca432fSFabio Estevam 
31*7e2173cfSBenoît Thébaudeau #define USDHC_PAD_CTRL (PAD_CTL_PUS_22K_UP |			\
32*7e2173cfSBenoît Thébaudeau 	PAD_CTL_SPEED_LOW | PAD_CTL_DSE_80ohm |			\
33*7e2173cfSBenoît Thébaudeau 	PAD_CTL_SRE_FAST  | PAD_CTL_HYS)
3457ca432fSFabio Estevam 
3557ca432fSFabio Estevam int dram_init(void)
3657ca432fSFabio Estevam {
3757ca432fSFabio Estevam 	gd->ram_size = get_ram_size((void *)PHYS_SDRAM, PHYS_SDRAM_SIZE);
3857ca432fSFabio Estevam 
3957ca432fSFabio Estevam 	return 0;
4057ca432fSFabio Estevam }
4157ca432fSFabio Estevam 
4257ca432fSFabio Estevam static iomux_v3_cfg_t const uart1_pads[] = {
4357ca432fSFabio Estevam 	MX6_PAD_UART1_TXD__UART1_TXD | MUX_PAD_CTRL(UART_PAD_CTRL),
4457ca432fSFabio Estevam 	MX6_PAD_UART1_RXD__UART1_RXD | MUX_PAD_CTRL(UART_PAD_CTRL),
4557ca432fSFabio Estevam };
4657ca432fSFabio Estevam 
4757ca432fSFabio Estevam static iomux_v3_cfg_t const usdhc2_pads[] = {
4857ca432fSFabio Estevam 	MX6_PAD_SD2_CLK__USDHC2_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL),
4957ca432fSFabio Estevam 	MX6_PAD_SD2_CMD__USDHC2_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL),
5057ca432fSFabio Estevam 	MX6_PAD_SD2_DAT0__USDHC2_DAT0 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
5157ca432fSFabio Estevam 	MX6_PAD_SD2_DAT1__USDHC2_DAT1 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
5257ca432fSFabio Estevam 	MX6_PAD_SD2_DAT2__USDHC2_DAT2 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
5357ca432fSFabio Estevam 	MX6_PAD_SD2_DAT3__USDHC2_DAT3 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
5457ca432fSFabio Estevam };
5557ca432fSFabio Estevam 
5657ca432fSFabio Estevam static void setup_iomux_uart(void)
5757ca432fSFabio Estevam {
5857ca432fSFabio Estevam 	imx_iomux_v3_setup_multiple_pads(uart1_pads, ARRAY_SIZE(uart1_pads));
5957ca432fSFabio Estevam }
6057ca432fSFabio Estevam 
6157ca432fSFabio Estevam static struct fsl_esdhc_cfg usdhc_cfg[1] = {
6257ca432fSFabio Estevam 	{USDHC2_BASE_ADDR},
6357ca432fSFabio Estevam };
6457ca432fSFabio Estevam 
6557ca432fSFabio Estevam int board_mmc_getcd(struct mmc *mmc)
6657ca432fSFabio Estevam {
6757ca432fSFabio Estevam 	return 1;	/* Assume boot SD always present */
6857ca432fSFabio Estevam }
6957ca432fSFabio Estevam 
7057ca432fSFabio Estevam int board_mmc_init(bd_t *bis)
7157ca432fSFabio Estevam {
7257ca432fSFabio Estevam 	imx_iomux_v3_setup_multiple_pads(usdhc2_pads, ARRAY_SIZE(usdhc2_pads));
7357ca432fSFabio Estevam 
7457ca432fSFabio Estevam 	usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC2_CLK);
7557ca432fSFabio Estevam 	return fsl_esdhc_initialize(bis, &usdhc_cfg[0]);
7657ca432fSFabio Estevam }
7757ca432fSFabio Estevam 
7857ca432fSFabio Estevam int board_early_init_f(void)
7957ca432fSFabio Estevam {
8057ca432fSFabio Estevam 	setup_iomux_uart();
8157ca432fSFabio Estevam 	return 0;
8257ca432fSFabio Estevam }
8357ca432fSFabio Estevam 
8457ca432fSFabio Estevam int board_init(void)
8557ca432fSFabio Estevam {
8657ca432fSFabio Estevam 	/* address of boot parameters */
8757ca432fSFabio Estevam 	gd->bd->bi_boot_params = PHYS_SDRAM + 0x100;
8857ca432fSFabio Estevam 
8957ca432fSFabio Estevam 	return 0;
9057ca432fSFabio Estevam }
9157ca432fSFabio Estevam 
9257ca432fSFabio Estevam u32 get_board_rev(void)
9357ca432fSFabio Estevam {
9457ca432fSFabio Estevam 	return get_cpu_rev();
9557ca432fSFabio Estevam }
9657ca432fSFabio Estevam 
9757ca432fSFabio Estevam int checkboard(void)
9857ca432fSFabio Estevam {
9957ca432fSFabio Estevam 	puts("Board: MX6SLEVK\n");
10057ca432fSFabio Estevam 
10157ca432fSFabio Estevam 	return 0;
10257ca432fSFabio Estevam }
103