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