1c5fb70c9SStefano Babic /* 2c5fb70c9SStefano Babic * (C) Copyright 2009 Freescale Semiconductor, Inc. 3c5fb70c9SStefano Babic * 4c5fb70c9SStefano Babic * See file CREDITS for list of people who contributed to this 5c5fb70c9SStefano Babic * project. 6c5fb70c9SStefano Babic * 7c5fb70c9SStefano Babic * This program is free software; you can redistribute it and/or 8c5fb70c9SStefano Babic * modify it under the terms of the GNU General Public License as 9c5fb70c9SStefano Babic * published by the Free Software Foundation; either version 2 of 10c5fb70c9SStefano Babic * the License, or (at your option) any later version. 11c5fb70c9SStefano Babic * 12c5fb70c9SStefano Babic * This program is distributed in the hope that it will be useful, 13c5fb70c9SStefano Babic * but WITHOUT ANY WARRANTY; without even the implied warranty of 14c5fb70c9SStefano Babic * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15c5fb70c9SStefano Babic * GNU General Public License for more details. 16c5fb70c9SStefano Babic * 17c5fb70c9SStefano Babic * You should have received a copy of the GNU General Public License 18c5fb70c9SStefano Babic * along with this program; if not, write to the Free Software 19c5fb70c9SStefano Babic * Foundation, Inc., 59 Temple Place, Suite 330, Boston, 20c5fb70c9SStefano Babic * MA 02111-1307 USA 21c5fb70c9SStefano Babic */ 22c5fb70c9SStefano Babic 23c5fb70c9SStefano Babic #include <common.h> 24c5fb70c9SStefano Babic #include <asm/io.h> 25753fc2ebSStefano Babic #include <asm/gpio.h> 26c5fb70c9SStefano Babic #include <asm/arch/imx-regs.h> 27ff9f475dSJason Liu #include <asm/arch/mx5x_pins.h> 28c5fb70c9SStefano Babic #include <asm/arch/iomux.h> 29c5fb70c9SStefano Babic #include <asm/errno.h> 30e4d34492SStefano Babic #include <asm/arch/sys_proto.h> 31b4377e12SStefano Babic #include <asm/arch/crm_regs.h> 32a2ac1b3aSBenoît Thébaudeau #include <asm/arch/clock.h> 33*5d71bd21SVikram Narayanan #include <asm/imx-common/mx5_video.h> 34c5fb70c9SStefano Babic #include <i2c.h> 35c5fb70c9SStefano Babic #include <mmc.h> 36c5fb70c9SStefano Babic #include <fsl_esdhc.h> 375357265aSStefano Babic #include <pmic.h> 38b4377e12SStefano Babic #include <fsl_pmic.h> 39b4377e12SStefano Babic #include <mc13892.h> 40055d9693SWolfgang Grandegger #include <usb/ehci-fsl.h> 41c5fb70c9SStefano Babic 42c5fb70c9SStefano Babic DECLARE_GLOBAL_DATA_PTR; 43c5fb70c9SStefano Babic 44c5fb70c9SStefano Babic #ifdef CONFIG_FSL_ESDHC 45c5fb70c9SStefano Babic struct fsl_esdhc_cfg esdhc_cfg[2] = { 4616e43f35SBenoît Thébaudeau {MMC_SDHC1_BASE_ADDR}, 4716e43f35SBenoît Thébaudeau {MMC_SDHC2_BASE_ADDR}, 48c5fb70c9SStefano Babic }; 49c5fb70c9SStefano Babic #endif 50c5fb70c9SStefano Babic 51c5fb70c9SStefano Babic int dram_init(void) 52c5fb70c9SStefano Babic { 531ab027cbSShawn Guo /* dram_init must store complete ramsize in gd->ram_size */ 54a55d23ccSAlbert ARIBAUD gd->ram_size = get_ram_size((void *)CONFIG_SYS_SDRAM_BASE, 55c5fb70c9SStefano Babic PHYS_SDRAM_1_SIZE); 56c5fb70c9SStefano Babic return 0; 57c5fb70c9SStefano Babic } 58c5fb70c9SStefano Babic 59362635bdSBenoît Thébaudeau u32 get_board_rev(void) 60362635bdSBenoît Thébaudeau { 61362635bdSBenoît Thébaudeau u32 rev = get_cpu_rev(); 62362635bdSBenoît Thébaudeau if (!gpio_get_value(IMX_GPIO_NR(1, 22))) 63362635bdSBenoît Thébaudeau rev |= BOARD_REV_2_0 << BOARD_VER_OFFSET; 64362635bdSBenoît Thébaudeau return rev; 65362635bdSBenoît Thébaudeau } 66362635bdSBenoît Thébaudeau 67c5fb70c9SStefano Babic static void setup_iomux_uart(void) 68c5fb70c9SStefano Babic { 69c5fb70c9SStefano Babic unsigned int pad = PAD_CTL_HYS_ENABLE | PAD_CTL_PKE_ENABLE | 70c5fb70c9SStefano Babic PAD_CTL_PUE_PULL | PAD_CTL_DRV_HIGH; 71c5fb70c9SStefano Babic 72c5fb70c9SStefano Babic mxc_request_iomux(MX51_PIN_UART1_RXD, IOMUX_CONFIG_ALT0); 73c5fb70c9SStefano Babic mxc_iomux_set_pad(MX51_PIN_UART1_RXD, pad | PAD_CTL_SRE_FAST); 74c5fb70c9SStefano Babic mxc_request_iomux(MX51_PIN_UART1_TXD, IOMUX_CONFIG_ALT0); 75c5fb70c9SStefano Babic mxc_iomux_set_pad(MX51_PIN_UART1_TXD, pad | PAD_CTL_SRE_FAST); 76c5fb70c9SStefano Babic mxc_request_iomux(MX51_PIN_UART1_RTS, IOMUX_CONFIG_ALT0); 77c5fb70c9SStefano Babic mxc_iomux_set_pad(MX51_PIN_UART1_RTS, pad); 78c5fb70c9SStefano Babic mxc_request_iomux(MX51_PIN_UART1_CTS, IOMUX_CONFIG_ALT0); 79c5fb70c9SStefano Babic mxc_iomux_set_pad(MX51_PIN_UART1_CTS, pad); 80c5fb70c9SStefano Babic } 81c5fb70c9SStefano Babic 82c5fb70c9SStefano Babic static void setup_iomux_fec(void) 83c5fb70c9SStefano Babic { 84c5fb70c9SStefano Babic /*FEC_MDIO*/ 85c5fb70c9SStefano Babic mxc_request_iomux(MX51_PIN_EIM_EB2 , IOMUX_CONFIG_ALT3); 86c5fb70c9SStefano Babic mxc_iomux_set_pad(MX51_PIN_EIM_EB2 , 0x1FD); 87c5fb70c9SStefano Babic 88c5fb70c9SStefano Babic /*FEC_MDC*/ 89c5fb70c9SStefano Babic mxc_request_iomux(MX51_PIN_NANDF_CS3, IOMUX_CONFIG_ALT2); 90c5fb70c9SStefano Babic mxc_iomux_set_pad(MX51_PIN_NANDF_CS3, 0x2004); 91c5fb70c9SStefano Babic 92c5fb70c9SStefano Babic /* FEC RDATA[3] */ 93c5fb70c9SStefano Babic mxc_request_iomux(MX51_PIN_EIM_CS3, IOMUX_CONFIG_ALT3); 94c5fb70c9SStefano Babic mxc_iomux_set_pad(MX51_PIN_EIM_CS3, 0x180); 95c5fb70c9SStefano Babic 96c5fb70c9SStefano Babic /* FEC RDATA[2] */ 97c5fb70c9SStefano Babic mxc_request_iomux(MX51_PIN_EIM_CS2, IOMUX_CONFIG_ALT3); 98c5fb70c9SStefano Babic mxc_iomux_set_pad(MX51_PIN_EIM_CS2, 0x180); 99c5fb70c9SStefano Babic 100c5fb70c9SStefano Babic /* FEC RDATA[1] */ 101c5fb70c9SStefano Babic mxc_request_iomux(MX51_PIN_EIM_EB3, IOMUX_CONFIG_ALT3); 102c5fb70c9SStefano Babic mxc_iomux_set_pad(MX51_PIN_EIM_EB3, 0x180); 103c5fb70c9SStefano Babic 104c5fb70c9SStefano Babic /* FEC RDATA[0] */ 105c5fb70c9SStefano Babic mxc_request_iomux(MX51_PIN_NANDF_D9, IOMUX_CONFIG_ALT2); 106c5fb70c9SStefano Babic mxc_iomux_set_pad(MX51_PIN_NANDF_D9, 0x2180); 107c5fb70c9SStefano Babic 108c5fb70c9SStefano Babic /* FEC TDATA[3] */ 109c5fb70c9SStefano Babic mxc_request_iomux(MX51_PIN_NANDF_CS6, IOMUX_CONFIG_ALT2); 110c5fb70c9SStefano Babic mxc_iomux_set_pad(MX51_PIN_NANDF_CS6, 0x2004); 111c5fb70c9SStefano Babic 112c5fb70c9SStefano Babic /* FEC TDATA[2] */ 113c5fb70c9SStefano Babic mxc_request_iomux(MX51_PIN_NANDF_CS5, IOMUX_CONFIG_ALT2); 114c5fb70c9SStefano Babic mxc_iomux_set_pad(MX51_PIN_NANDF_CS5, 0x2004); 115c5fb70c9SStefano Babic 116c5fb70c9SStefano Babic /* FEC TDATA[1] */ 117c5fb70c9SStefano Babic mxc_request_iomux(MX51_PIN_NANDF_CS4, IOMUX_CONFIG_ALT2); 118c5fb70c9SStefano Babic mxc_iomux_set_pad(MX51_PIN_NANDF_CS4, 0x2004); 119c5fb70c9SStefano Babic 120c5fb70c9SStefano Babic /* FEC TDATA[0] */ 121c5fb70c9SStefano Babic mxc_request_iomux(MX51_PIN_NANDF_D8, IOMUX_CONFIG_ALT2); 122c5fb70c9SStefano Babic mxc_iomux_set_pad(MX51_PIN_NANDF_D8, 0x2004); 123c5fb70c9SStefano Babic 124c5fb70c9SStefano Babic /* FEC TX_EN */ 125c5fb70c9SStefano Babic mxc_request_iomux(MX51_PIN_NANDF_CS7, IOMUX_CONFIG_ALT1); 126c5fb70c9SStefano Babic mxc_iomux_set_pad(MX51_PIN_NANDF_CS7, 0x2004); 127c5fb70c9SStefano Babic 128c5fb70c9SStefano Babic /* FEC TX_ER */ 129c5fb70c9SStefano Babic mxc_request_iomux(MX51_PIN_NANDF_CS2, IOMUX_CONFIG_ALT2); 130c5fb70c9SStefano Babic mxc_iomux_set_pad(MX51_PIN_NANDF_CS2, 0x2004); 131c5fb70c9SStefano Babic 132c5fb70c9SStefano Babic /* FEC TX_CLK */ 133c5fb70c9SStefano Babic mxc_request_iomux(MX51_PIN_NANDF_RDY_INT, IOMUX_CONFIG_ALT1); 134c5fb70c9SStefano Babic mxc_iomux_set_pad(MX51_PIN_NANDF_RDY_INT, 0x2180); 135c5fb70c9SStefano Babic 136c5fb70c9SStefano Babic /* FEC TX_COL */ 137c5fb70c9SStefano Babic mxc_request_iomux(MX51_PIN_NANDF_RB2, IOMUX_CONFIG_ALT1); 138c5fb70c9SStefano Babic mxc_iomux_set_pad(MX51_PIN_NANDF_RB2, 0x2180); 139c5fb70c9SStefano Babic 140c5fb70c9SStefano Babic /* FEC RX_CLK */ 141c5fb70c9SStefano Babic mxc_request_iomux(MX51_PIN_NANDF_RB3, IOMUX_CONFIG_ALT1); 142c5fb70c9SStefano Babic mxc_iomux_set_pad(MX51_PIN_NANDF_RB3, 0x2180); 143c5fb70c9SStefano Babic 144c5fb70c9SStefano Babic /* FEC RX_CRS */ 145c5fb70c9SStefano Babic mxc_request_iomux(MX51_PIN_EIM_CS5, IOMUX_CONFIG_ALT3); 146c5fb70c9SStefano Babic mxc_iomux_set_pad(MX51_PIN_EIM_CS5, 0x180); 147c5fb70c9SStefano Babic 148c5fb70c9SStefano Babic /* FEC RX_ER */ 149c5fb70c9SStefano Babic mxc_request_iomux(MX51_PIN_EIM_CS4, IOMUX_CONFIG_ALT3); 150c5fb70c9SStefano Babic mxc_iomux_set_pad(MX51_PIN_EIM_CS4, 0x180); 151c5fb70c9SStefano Babic 152c5fb70c9SStefano Babic /* FEC RX_DV */ 153c5fb70c9SStefano Babic mxc_request_iomux(MX51_PIN_NANDF_D11, IOMUX_CONFIG_ALT2); 154c5fb70c9SStefano Babic mxc_iomux_set_pad(MX51_PIN_NANDF_D11, 0x2180); 155c5fb70c9SStefano Babic } 156c5fb70c9SStefano Babic 157b4377e12SStefano Babic #ifdef CONFIG_MXC_SPI 158b4377e12SStefano Babic static void setup_iomux_spi(void) 159b4377e12SStefano Babic { 160b4377e12SStefano Babic /* 000: Select mux mode: ALT0 mux port: MOSI of instance: ecspi1 */ 161b4377e12SStefano Babic mxc_request_iomux(MX51_PIN_CSPI1_MOSI, IOMUX_CONFIG_ALT0); 162b4377e12SStefano Babic mxc_iomux_set_pad(MX51_PIN_CSPI1_MOSI, 0x105); 163b4377e12SStefano Babic 164b4377e12SStefano Babic /* 000: Select mux mode: ALT0 mux port: MISO of instance: ecspi1. */ 165b4377e12SStefano Babic mxc_request_iomux(MX51_PIN_CSPI1_MISO, IOMUX_CONFIG_ALT0); 166b4377e12SStefano Babic mxc_iomux_set_pad(MX51_PIN_CSPI1_MISO, 0x105); 167b4377e12SStefano Babic 168b4377e12SStefano Babic /* de-select SS1 of instance: ecspi1. */ 169b4377e12SStefano Babic mxc_request_iomux(MX51_PIN_CSPI1_SS1, IOMUX_CONFIG_ALT3); 170b4377e12SStefano Babic mxc_iomux_set_pad(MX51_PIN_CSPI1_SS1, 0x85); 171b4377e12SStefano Babic 172b4377e12SStefano Babic /* 000: Select mux mode: ALT0 mux port: SS0 ecspi1 */ 173b4377e12SStefano Babic mxc_request_iomux(MX51_PIN_CSPI1_SS0, IOMUX_CONFIG_ALT0); 174b4377e12SStefano Babic mxc_iomux_set_pad(MX51_PIN_CSPI1_SS0, 0x185); 175b4377e12SStefano Babic 176b4377e12SStefano Babic /* 000: Select mux mode: ALT0 mux port: RDY of instance: ecspi1. */ 177b4377e12SStefano Babic mxc_request_iomux(MX51_PIN_CSPI1_RDY, IOMUX_CONFIG_ALT0); 178b4377e12SStefano Babic mxc_iomux_set_pad(MX51_PIN_CSPI1_RDY, 0x180); 179b4377e12SStefano Babic 180b4377e12SStefano Babic /* 000: Select mux mode: ALT0 mux port: SCLK of instance: ecspi1. */ 181b4377e12SStefano Babic mxc_request_iomux(MX51_PIN_CSPI1_SCLK, IOMUX_CONFIG_ALT0); 182b4377e12SStefano Babic mxc_iomux_set_pad(MX51_PIN_CSPI1_SCLK, 0x105); 183b4377e12SStefano Babic } 184b4377e12SStefano Babic #endif 185b4377e12SStefano Babic 186055d9693SWolfgang Grandegger #ifdef CONFIG_USB_EHCI_MX5 187055d9693SWolfgang Grandegger #define MX51EVK_USBH1_HUB_RST IOMUX_TO_GPIO(MX51_PIN_GPIO1_7) /* GPIO1_7 */ 188055d9693SWolfgang Grandegger #define MX51EVK_USBH1_STP IOMUX_TO_GPIO(MX51_PIN_USBH1_STP) /* GPIO1_27 */ 189055d9693SWolfgang Grandegger #define MX51EVK_USB_CLK_EN_B IOMUX_TO_GPIO(MX51_PIN_EIM_D18) /* GPIO2_1 */ 190055d9693SWolfgang Grandegger #define MX51EVK_USB_PHY_RESET IOMUX_TO_GPIO(MX51_PIN_EIM_D21) /* GPIO2_5 */ 191055d9693SWolfgang Grandegger 192055d9693SWolfgang Grandegger #define USBH1_PAD (PAD_CTL_SRE_FAST | PAD_CTL_DRV_HIGH | \ 193055d9693SWolfgang Grandegger PAD_CTL_100K_PU | PAD_CTL_PUE_PULL | \ 194055d9693SWolfgang Grandegger PAD_CTL_PKE_ENABLE | PAD_CTL_HYS_ENABLE) 195055d9693SWolfgang Grandegger #define GPIO_PAD (PAD_CTL_DRV_HIGH | PAD_CTL_PKE_ENABLE | \ 196055d9693SWolfgang Grandegger PAD_CTL_SRE_FAST) 197055d9693SWolfgang Grandegger #define NO_PAD (1 << 16) 198055d9693SWolfgang Grandegger 199055d9693SWolfgang Grandegger static void setup_usb_h1(void) 200055d9693SWolfgang Grandegger { 201055d9693SWolfgang Grandegger setup_iomux_usb_h1(); 202055d9693SWolfgang Grandegger 203055d9693SWolfgang Grandegger /* GPIO_1_7 for USBH1 hub reset */ 204055d9693SWolfgang Grandegger mxc_request_iomux(MX51_PIN_GPIO1_7, IOMUX_CONFIG_ALT0); 205055d9693SWolfgang Grandegger mxc_iomux_set_pad(MX51_PIN_GPIO1_7, NO_PAD); 206055d9693SWolfgang Grandegger 207055d9693SWolfgang Grandegger /* GPIO_2_1 */ 208055d9693SWolfgang Grandegger mxc_request_iomux(MX51_PIN_EIM_D17, IOMUX_CONFIG_ALT1); 209055d9693SWolfgang Grandegger mxc_iomux_set_pad(MX51_PIN_EIM_D17, GPIO_PAD); 210055d9693SWolfgang Grandegger 211055d9693SWolfgang Grandegger /* GPIO_2_5 for USB PHY reset */ 212055d9693SWolfgang Grandegger mxc_request_iomux(MX51_PIN_EIM_D21, IOMUX_CONFIG_ALT1); 213055d9693SWolfgang Grandegger mxc_iomux_set_pad(MX51_PIN_EIM_D21, GPIO_PAD); 214055d9693SWolfgang Grandegger } 215055d9693SWolfgang Grandegger 21660bae5efSAnatolij Gustschin int board_ehci_hcd_init(int port) 217055d9693SWolfgang Grandegger { 218055d9693SWolfgang Grandegger /* Set USBH1_STP to GPIO and toggle it */ 219055d9693SWolfgang Grandegger mxc_request_iomux(MX51_PIN_USBH1_STP, IOMUX_CONFIG_GPIO); 220055d9693SWolfgang Grandegger mxc_iomux_set_pad(MX51_PIN_USBH1_STP, USBH1_PAD); 221055d9693SWolfgang Grandegger 222055d9693SWolfgang Grandegger gpio_direction_output(MX51EVK_USBH1_STP, 0); 223055d9693SWolfgang Grandegger gpio_direction_output(MX51EVK_USB_PHY_RESET, 0); 224055d9693SWolfgang Grandegger mdelay(10); 225055d9693SWolfgang Grandegger gpio_set_value(MX51EVK_USBH1_STP, 1); 226055d9693SWolfgang Grandegger 227055d9693SWolfgang Grandegger /* Set back USBH1_STP to be function */ 228055d9693SWolfgang Grandegger mxc_request_iomux(MX51_PIN_USBH1_STP, IOMUX_CONFIG_ALT0); 229055d9693SWolfgang Grandegger mxc_iomux_set_pad(MX51_PIN_USBH1_STP, USBH1_PAD); 230055d9693SWolfgang Grandegger 231055d9693SWolfgang Grandegger /* De-assert USB PHY RESETB */ 232055d9693SWolfgang Grandegger gpio_set_value(MX51EVK_USB_PHY_RESET, 1); 233055d9693SWolfgang Grandegger 234055d9693SWolfgang Grandegger /* Drive USB_CLK_EN_B line low */ 235055d9693SWolfgang Grandegger gpio_direction_output(MX51EVK_USB_CLK_EN_B, 0); 236055d9693SWolfgang Grandegger 237055d9693SWolfgang Grandegger /* Reset USB hub */ 238055d9693SWolfgang Grandegger gpio_direction_output(MX51EVK_USBH1_HUB_RST, 0); 239055d9693SWolfgang Grandegger mdelay(2); 240055d9693SWolfgang Grandegger gpio_set_value(MX51EVK_USBH1_HUB_RST, 1); 24160bae5efSAnatolij Gustschin return 0; 242055d9693SWolfgang Grandegger } 243055d9693SWolfgang Grandegger #endif 244055d9693SWolfgang Grandegger 245b4377e12SStefano Babic static void power_init(void) 246b4377e12SStefano Babic { 247b4377e12SStefano Babic unsigned int val; 248b4377e12SStefano Babic struct mxc_ccm_reg *mxc_ccm = (struct mxc_ccm_reg *)MXC_CCM_BASE; 2495357265aSStefano Babic struct pmic *p; 2505357265aSStefano Babic 2515357265aSStefano Babic pmic_init(); 2525357265aSStefano Babic p = get_pmic(); 253b4377e12SStefano Babic 254b4377e12SStefano Babic /* Write needed to Power Gate 2 register */ 2555357265aSStefano Babic pmic_reg_read(p, REG_POWER_MISC, &val); 256b4377e12SStefano Babic val &= ~PWGT2SPIEN; 2575357265aSStefano Babic pmic_reg_write(p, REG_POWER_MISC, val); 258b4377e12SStefano Babic 259888b4f43SShawn Guo /* Externally powered */ 2605357265aSStefano Babic pmic_reg_read(p, REG_CHARGE, &val); 261888b4f43SShawn Guo val |= ICHRG0 | ICHRG1 | ICHRG2 | ICHRG3 | CHGAUTOB; 2625357265aSStefano Babic pmic_reg_write(p, REG_CHARGE, val); 263b4377e12SStefano Babic 264b4377e12SStefano Babic /* power up the system first */ 2655357265aSStefano Babic pmic_reg_write(p, REG_POWER_MISC, PWUP); 266b4377e12SStefano Babic 267b4377e12SStefano Babic /* Set core voltage to 1.1V */ 2685357265aSStefano Babic pmic_reg_read(p, REG_SW_0, &val); 269c4a3c744SMarek Vasut val = (val & ~SWx_VOLT_MASK) | SWx_1_100V; 2705357265aSStefano Babic pmic_reg_write(p, REG_SW_0, val); 271b4377e12SStefano Babic 272b4377e12SStefano Babic /* Setup VCC (SW2) to 1.25 */ 2735357265aSStefano Babic pmic_reg_read(p, REG_SW_1, &val); 274c4a3c744SMarek Vasut val = (val & ~SWx_VOLT_MASK) | SWx_1_250V; 2755357265aSStefano Babic pmic_reg_write(p, REG_SW_1, val); 276b4377e12SStefano Babic 277b4377e12SStefano Babic /* Setup 1V2_DIG1 (SW3) to 1.25 */ 2785357265aSStefano Babic pmic_reg_read(p, REG_SW_2, &val); 279c4a3c744SMarek Vasut val = (val & ~SWx_VOLT_MASK) | SWx_1_250V; 2805357265aSStefano Babic pmic_reg_write(p, REG_SW_2, val); 281b4377e12SStefano Babic udelay(50); 282b4377e12SStefano Babic 283b4377e12SStefano Babic /* Raise the core frequency to 800MHz */ 284b4377e12SStefano Babic writel(0x0, &mxc_ccm->cacrr); 285b4377e12SStefano Babic 286b4377e12SStefano Babic /* Set switchers in Auto in NORMAL mode & STANDBY mode */ 287b4377e12SStefano Babic /* Setup the switcher mode for SW1 & SW2*/ 2885357265aSStefano Babic pmic_reg_read(p, REG_SW_4, &val); 289b4377e12SStefano Babic val = (val & ~((SWMODE_MASK << SWMODE1_SHIFT) | 290b4377e12SStefano Babic (SWMODE_MASK << SWMODE2_SHIFT))); 291b4377e12SStefano Babic val |= (SWMODE_AUTO_AUTO << SWMODE1_SHIFT) | 292b4377e12SStefano Babic (SWMODE_AUTO_AUTO << SWMODE2_SHIFT); 2935357265aSStefano Babic pmic_reg_write(p, REG_SW_4, val); 294b4377e12SStefano Babic 295b4377e12SStefano Babic /* Setup the switcher mode for SW3 & SW4 */ 2965357265aSStefano Babic pmic_reg_read(p, REG_SW_5, &val); 297b4377e12SStefano Babic val = (val & ~((SWMODE_MASK << SWMODE3_SHIFT) | 298b4377e12SStefano Babic (SWMODE_MASK << SWMODE4_SHIFT))); 299b4377e12SStefano Babic val |= (SWMODE_AUTO_AUTO << SWMODE3_SHIFT) | 300b4377e12SStefano Babic (SWMODE_AUTO_AUTO << SWMODE4_SHIFT); 3015357265aSStefano Babic pmic_reg_write(p, REG_SW_5, val); 302b4377e12SStefano Babic 303b4377e12SStefano Babic /* Set VDIG to 1.65V, VGEN3 to 1.8V, VCAM to 2.6V */ 3045357265aSStefano Babic pmic_reg_read(p, REG_SETTING_0, &val); 305b4377e12SStefano Babic val &= ~(VCAM_MASK | VGEN3_MASK | VDIG_MASK); 306b4377e12SStefano Babic val |= VDIG_1_65 | VGEN3_1_8 | VCAM_2_6; 3075357265aSStefano Babic pmic_reg_write(p, REG_SETTING_0, val); 308b4377e12SStefano Babic 309b4377e12SStefano Babic /* Set VVIDEO to 2.775V, VAUDIO to 3V, VSD to 3.15V */ 3105357265aSStefano Babic pmic_reg_read(p, REG_SETTING_1, &val); 311b4377e12SStefano Babic val &= ~(VVIDEO_MASK | VSD_MASK | VAUDIO_MASK); 312b4377e12SStefano Babic val |= VSD_3_15 | VAUDIO_3_0 | VVIDEO_2_775; 3135357265aSStefano Babic pmic_reg_write(p, REG_SETTING_1, val); 314b4377e12SStefano Babic 315b4377e12SStefano Babic /* Configure VGEN3 and VCAM regulators to use external PNP */ 316b4377e12SStefano Babic val = VGEN3CONFIG | VCAMCONFIG; 3175357265aSStefano Babic pmic_reg_write(p, REG_MODE_1, val); 318b4377e12SStefano Babic udelay(200); 319b4377e12SStefano Babic 320b4377e12SStefano Babic /* Enable VGEN3, VCAM, VAUDIO, VVIDEO, VSD regulators */ 321b4377e12SStefano Babic val = VGEN3EN | VGEN3CONFIG | VCAMEN | VCAMCONFIG | 322b4377e12SStefano Babic VVIDEOEN | VAUDIOEN | VSDEN; 3235357265aSStefano Babic pmic_reg_write(p, REG_MODE_1, val); 324b4377e12SStefano Babic 325d736ebeaSFabio Estevam mxc_request_iomux(MX51_PIN_EIM_A20, IOMUX_CONFIG_ALT1); 32692550708SAshok Kumar Reddy gpio_direction_output(IMX_GPIO_NR(2, 14), 0); 327d736ebeaSFabio Estevam 328b4377e12SStefano Babic udelay(500); 329b4377e12SStefano Babic 33092550708SAshok Kumar Reddy gpio_set_value(IMX_GPIO_NR(2, 14), 1); 331b4377e12SStefano Babic } 332b4377e12SStefano Babic 333c5fb70c9SStefano Babic #ifdef CONFIG_FSL_ESDHC 334314284b1SThierry Reding int board_mmc_getcd(struct mmc *mmc) 335c5fb70c9SStefano Babic { 336c5fb70c9SStefano Babic struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv; 337314284b1SThierry Reding int ret; 338c5fb70c9SStefano Babic 33958aef72dSFabio Estevam mxc_request_iomux(MX51_PIN_GPIO1_0, IOMUX_CONFIG_ALT1); 34092550708SAshok Kumar Reddy gpio_direction_input(IMX_GPIO_NR(1, 0)); 34158aef72dSFabio Estevam mxc_request_iomux(MX51_PIN_GPIO1_6, IOMUX_CONFIG_ALT0); 34292550708SAshok Kumar Reddy gpio_direction_input(IMX_GPIO_NR(1, 6)); 34358aef72dSFabio Estevam 344c5fb70c9SStefano Babic if (cfg->esdhc_base == MMC_SDHC1_BASE_ADDR) 34592550708SAshok Kumar Reddy ret = !gpio_get_value(IMX_GPIO_NR(1, 0)); 346c5fb70c9SStefano Babic else 34792550708SAshok Kumar Reddy ret = !gpio_get_value(IMX_GPIO_NR(1, 6)); 348c5fb70c9SStefano Babic 349314284b1SThierry Reding return ret; 350c5fb70c9SStefano Babic } 351c5fb70c9SStefano Babic 352c5fb70c9SStefano Babic int board_mmc_init(bd_t *bis) 353c5fb70c9SStefano Babic { 354c5fb70c9SStefano Babic u32 index; 355c5fb70c9SStefano Babic s32 status = 0; 356c5fb70c9SStefano Babic 357a2ac1b3aSBenoît Thébaudeau esdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC_CLK); 358a2ac1b3aSBenoît Thébaudeau esdhc_cfg[1].sdhc_clk = mxc_get_clock(MXC_ESDHC2_CLK); 359a2ac1b3aSBenoît Thébaudeau 360c5fb70c9SStefano Babic for (index = 0; index < CONFIG_SYS_FSL_ESDHC_NUM; 361c5fb70c9SStefano Babic index++) { 362c5fb70c9SStefano Babic switch (index) { 363c5fb70c9SStefano Babic case 0: 364c5fb70c9SStefano Babic mxc_request_iomux(MX51_PIN_SD1_CMD, 365c5fb70c9SStefano Babic IOMUX_CONFIG_ALT0 | IOMUX_CONFIG_SION); 366c5fb70c9SStefano Babic mxc_request_iomux(MX51_PIN_SD1_CLK, 367c5fb70c9SStefano Babic IOMUX_CONFIG_ALT0 | IOMUX_CONFIG_SION); 368c5fb70c9SStefano Babic mxc_request_iomux(MX51_PIN_SD1_DATA0, 369c5fb70c9SStefano Babic IOMUX_CONFIG_ALT0 | IOMUX_CONFIG_SION); 370c5fb70c9SStefano Babic mxc_request_iomux(MX51_PIN_SD1_DATA1, 371c5fb70c9SStefano Babic IOMUX_CONFIG_ALT0 | IOMUX_CONFIG_SION); 372c5fb70c9SStefano Babic mxc_request_iomux(MX51_PIN_SD1_DATA2, 373c5fb70c9SStefano Babic IOMUX_CONFIG_ALT0 | IOMUX_CONFIG_SION); 374c5fb70c9SStefano Babic mxc_request_iomux(MX51_PIN_SD1_DATA3, 375c5fb70c9SStefano Babic IOMUX_CONFIG_ALT0 | IOMUX_CONFIG_SION); 376c5fb70c9SStefano Babic mxc_iomux_set_pad(MX51_PIN_SD1_CMD, 377c5fb70c9SStefano Babic PAD_CTL_DRV_MAX | PAD_CTL_DRV_VOT_HIGH | 378c5fb70c9SStefano Babic PAD_CTL_HYS_ENABLE | PAD_CTL_47K_PU | 379c5fb70c9SStefano Babic PAD_CTL_PUE_PULL | 380c5fb70c9SStefano Babic PAD_CTL_PKE_ENABLE | PAD_CTL_SRE_FAST); 381c5fb70c9SStefano Babic mxc_iomux_set_pad(MX51_PIN_SD1_CLK, 382c5fb70c9SStefano Babic PAD_CTL_DRV_MAX | PAD_CTL_DRV_VOT_HIGH | 383c5fb70c9SStefano Babic PAD_CTL_HYS_NONE | PAD_CTL_47K_PU | 384c5fb70c9SStefano Babic PAD_CTL_PUE_PULL | 385c5fb70c9SStefano Babic PAD_CTL_PKE_ENABLE | PAD_CTL_SRE_FAST); 386c5fb70c9SStefano Babic mxc_iomux_set_pad(MX51_PIN_SD1_DATA0, 387c5fb70c9SStefano Babic PAD_CTL_DRV_MAX | PAD_CTL_DRV_VOT_HIGH | 388c5fb70c9SStefano Babic PAD_CTL_HYS_ENABLE | PAD_CTL_47K_PU | 389c5fb70c9SStefano Babic PAD_CTL_PUE_PULL | 390c5fb70c9SStefano Babic PAD_CTL_PKE_ENABLE | PAD_CTL_SRE_FAST); 391c5fb70c9SStefano Babic mxc_iomux_set_pad(MX51_PIN_SD1_DATA1, 392c5fb70c9SStefano Babic PAD_CTL_DRV_MAX | PAD_CTL_DRV_VOT_HIGH | 393c5fb70c9SStefano Babic PAD_CTL_HYS_ENABLE | PAD_CTL_47K_PU | 394c5fb70c9SStefano Babic PAD_CTL_PUE_PULL | 395c5fb70c9SStefano Babic PAD_CTL_PKE_ENABLE | PAD_CTL_SRE_FAST); 396c5fb70c9SStefano Babic mxc_iomux_set_pad(MX51_PIN_SD1_DATA2, 397c5fb70c9SStefano Babic PAD_CTL_DRV_MAX | PAD_CTL_DRV_VOT_HIGH | 398c5fb70c9SStefano Babic PAD_CTL_HYS_ENABLE | PAD_CTL_47K_PU | 399c5fb70c9SStefano Babic PAD_CTL_PUE_PULL | 400c5fb70c9SStefano Babic PAD_CTL_PKE_ENABLE | PAD_CTL_SRE_FAST); 401c5fb70c9SStefano Babic mxc_iomux_set_pad(MX51_PIN_SD1_DATA3, 402c5fb70c9SStefano Babic PAD_CTL_DRV_MAX | PAD_CTL_DRV_VOT_HIGH | 403c5fb70c9SStefano Babic PAD_CTL_HYS_ENABLE | PAD_CTL_100K_PD | 404c5fb70c9SStefano Babic PAD_CTL_PUE_PULL | 405c5fb70c9SStefano Babic PAD_CTL_PKE_ENABLE | PAD_CTL_SRE_FAST); 406c5fb70c9SStefano Babic mxc_request_iomux(MX51_PIN_GPIO1_0, 407c5fb70c9SStefano Babic IOMUX_CONFIG_ALT0 | IOMUX_CONFIG_SION); 408c5fb70c9SStefano Babic mxc_iomux_set_pad(MX51_PIN_GPIO1_0, 409c5fb70c9SStefano Babic PAD_CTL_HYS_ENABLE); 410c5fb70c9SStefano Babic mxc_request_iomux(MX51_PIN_GPIO1_1, 411c5fb70c9SStefano Babic IOMUX_CONFIG_ALT0 | IOMUX_CONFIG_SION); 412c5fb70c9SStefano Babic mxc_iomux_set_pad(MX51_PIN_GPIO1_1, 413c5fb70c9SStefano Babic PAD_CTL_HYS_ENABLE); 414c5fb70c9SStefano Babic break; 415c5fb70c9SStefano Babic case 1: 416c5fb70c9SStefano Babic mxc_request_iomux(MX51_PIN_SD2_CMD, 417c5fb70c9SStefano Babic IOMUX_CONFIG_ALT0 | IOMUX_CONFIG_SION); 418c5fb70c9SStefano Babic mxc_request_iomux(MX51_PIN_SD2_CLK, 419c5fb70c9SStefano Babic IOMUX_CONFIG_ALT0 | IOMUX_CONFIG_SION); 420c5fb70c9SStefano Babic mxc_request_iomux(MX51_PIN_SD2_DATA0, 421c5fb70c9SStefano Babic IOMUX_CONFIG_ALT0); 422c5fb70c9SStefano Babic mxc_request_iomux(MX51_PIN_SD2_DATA1, 423c5fb70c9SStefano Babic IOMUX_CONFIG_ALT0); 424c5fb70c9SStefano Babic mxc_request_iomux(MX51_PIN_SD2_DATA2, 425c5fb70c9SStefano Babic IOMUX_CONFIG_ALT0); 426c5fb70c9SStefano Babic mxc_request_iomux(MX51_PIN_SD2_DATA3, 427c5fb70c9SStefano Babic IOMUX_CONFIG_ALT0); 428c5fb70c9SStefano Babic mxc_iomux_set_pad(MX51_PIN_SD2_CMD, 429c5fb70c9SStefano Babic PAD_CTL_DRV_MAX | PAD_CTL_22K_PU | 430c5fb70c9SStefano Babic PAD_CTL_SRE_FAST); 431c5fb70c9SStefano Babic mxc_iomux_set_pad(MX51_PIN_SD2_CLK, 432c5fb70c9SStefano Babic PAD_CTL_DRV_MAX | PAD_CTL_22K_PU | 433c5fb70c9SStefano Babic PAD_CTL_SRE_FAST); 434c5fb70c9SStefano Babic mxc_iomux_set_pad(MX51_PIN_SD2_DATA0, 435c5fb70c9SStefano Babic PAD_CTL_DRV_MAX | PAD_CTL_22K_PU | 436c5fb70c9SStefano Babic PAD_CTL_SRE_FAST); 437c5fb70c9SStefano Babic mxc_iomux_set_pad(MX51_PIN_SD2_DATA1, 438c5fb70c9SStefano Babic PAD_CTL_DRV_MAX | PAD_CTL_22K_PU | 439c5fb70c9SStefano Babic PAD_CTL_SRE_FAST); 440c5fb70c9SStefano Babic mxc_iomux_set_pad(MX51_PIN_SD2_DATA2, 441c5fb70c9SStefano Babic PAD_CTL_DRV_MAX | PAD_CTL_22K_PU | 442c5fb70c9SStefano Babic PAD_CTL_SRE_FAST); 443c5fb70c9SStefano Babic mxc_iomux_set_pad(MX51_PIN_SD2_DATA3, 444c5fb70c9SStefano Babic PAD_CTL_DRV_MAX | PAD_CTL_22K_PU | 445c5fb70c9SStefano Babic PAD_CTL_SRE_FAST); 446c5fb70c9SStefano Babic mxc_request_iomux(MX51_PIN_SD2_CMD, 447c5fb70c9SStefano Babic IOMUX_CONFIG_ALT0 | IOMUX_CONFIG_SION); 448c5fb70c9SStefano Babic mxc_request_iomux(MX51_PIN_GPIO1_6, 449c5fb70c9SStefano Babic IOMUX_CONFIG_ALT0 | IOMUX_CONFIG_SION); 450c5fb70c9SStefano Babic mxc_iomux_set_pad(MX51_PIN_GPIO1_6, 451c5fb70c9SStefano Babic PAD_CTL_HYS_ENABLE); 452c5fb70c9SStefano Babic mxc_request_iomux(MX51_PIN_GPIO1_5, 453c5fb70c9SStefano Babic IOMUX_CONFIG_ALT0 | IOMUX_CONFIG_SION); 454c5fb70c9SStefano Babic mxc_iomux_set_pad(MX51_PIN_GPIO1_5, 455c5fb70c9SStefano Babic PAD_CTL_HYS_ENABLE); 456c5fb70c9SStefano Babic break; 457c5fb70c9SStefano Babic default: 458c5fb70c9SStefano Babic printf("Warning: you configured more ESDHC controller" 459c5fb70c9SStefano Babic "(%d) as supported by the board(2)\n", 460c5fb70c9SStefano Babic CONFIG_SYS_FSL_ESDHC_NUM); 461c5fb70c9SStefano Babic return status; 462c5fb70c9SStefano Babic } 463c5fb70c9SStefano Babic status |= fsl_esdhc_initialize(bis, &esdhc_cfg[index]); 464c5fb70c9SStefano Babic } 465c5fb70c9SStefano Babic return status; 466c5fb70c9SStefano Babic } 467c5fb70c9SStefano Babic #endif 468c5fb70c9SStefano Babic 469877eb0f9SLiu Hui-R64343 int board_early_init_f(void) 470877eb0f9SLiu Hui-R64343 { 471877eb0f9SLiu Hui-R64343 setup_iomux_uart(); 472877eb0f9SLiu Hui-R64343 setup_iomux_fec(); 473055d9693SWolfgang Grandegger #ifdef CONFIG_USB_EHCI_MX5 474055d9693SWolfgang Grandegger setup_usb_h1(); 475055d9693SWolfgang Grandegger #endif 476*5d71bd21SVikram Narayanan setup_iomux_lcd(); 477877eb0f9SLiu Hui-R64343 478877eb0f9SLiu Hui-R64343 return 0; 479877eb0f9SLiu Hui-R64343 } 480877eb0f9SLiu Hui-R64343 481c5fb70c9SStefano Babic int board_init(void) 482c5fb70c9SStefano Babic { 483c5fb70c9SStefano Babic /* address of boot parameters */ 484c5fb70c9SStefano Babic gd->bd->bi_boot_params = PHYS_SDRAM_1 + 0x100; 485c5fb70c9SStefano Babic 486f1adefd2SFabio Estevam lcd_enable(); 487f1adefd2SFabio Estevam 488c5fb70c9SStefano Babic return 0; 489c5fb70c9SStefano Babic } 490c5fb70c9SStefano Babic 4919660e442SHelmut Raiger #ifdef CONFIG_BOARD_LATE_INIT 492b4377e12SStefano Babic int board_late_init(void) 493b4377e12SStefano Babic { 494b4377e12SStefano Babic #ifdef CONFIG_MXC_SPI 495b4377e12SStefano Babic setup_iomux_spi(); 496b4377e12SStefano Babic power_init(); 497b4377e12SStefano Babic #endif 498f1adefd2SFabio Estevam 499b4377e12SStefano Babic return 0; 500b4377e12SStefano Babic } 501b4377e12SStefano Babic #endif 502b4377e12SStefano Babic 5031e080988SFabio Estevam /* 5041e080988SFabio Estevam * Do not overwrite the console 5051e080988SFabio Estevam * Use always serial for U-Boot console 5061e080988SFabio Estevam */ 5071e080988SFabio Estevam int overwrite_console(void) 5081e080988SFabio Estevam { 5091e080988SFabio Estevam return 1; 5101e080988SFabio Estevam } 5111e080988SFabio Estevam 512c5fb70c9SStefano Babic int checkboard(void) 513c5fb70c9SStefano Babic { 51451958904SJason Liu puts("Board: MX51EVK\n"); 515c5fb70c9SStefano Babic 516c5fb70c9SStefano Babic return 0; 517c5fb70c9SStefano Babic } 518