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