1 /* 2 * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/ 3 * 4 * Based on da830evm.c. Original Copyrights follow: 5 * 6 * Copyright (C) 2009 Nick Thompson, GE Fanuc, Ltd. <nick.thompson@gefanuc.com> 7 * Copyright (C) 2007 Sergey Kubushyn <ksi@koi8.net> 8 * 9 * This program is free software; you can redistribute it and/or modify 10 * it under the terms of the GNU General Public License as published by 11 * the Free Software Foundation; either version 2 of the License, or 12 * (at your option) any later version. 13 * 14 * This program is distributed in the hope that it will be useful, 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 * GNU General Public License for more details. 18 * 19 * You should have received a copy of the GNU General Public License 20 * along with this program; if not, write to the Free Software 21 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 22 */ 23 24 #include <common.h> 25 #include <i2c.h> 26 #include <asm/arch/hardware.h> 27 #include <asm/io.h> 28 #include "../common/misc.h" 29 #include "common.h" 30 31 DECLARE_GLOBAL_DATA_PTR; 32 33 #define pinmux(x) (&davinci_syscfg_regs->pinmux[x]) 34 35 /* SPI0 pin muxer settings */ 36 static const struct pinmux_config spi1_pins[] = { 37 { pinmux(5), 1, 1 }, 38 { pinmux(5), 1, 2 }, 39 { pinmux(5), 1, 4 }, 40 { pinmux(5), 1, 5 } 41 }; 42 43 /* UART pin muxer settings */ 44 static const struct pinmux_config uart_pins[] = { 45 { pinmux(0), 4, 6 }, 46 { pinmux(0), 4, 7 }, 47 { pinmux(4), 2, 4 }, 48 { pinmux(4), 2, 5 } 49 }; 50 51 /* I2C pin muxer settings */ 52 static const struct pinmux_config i2c_pins[] = { 53 { pinmux(4), 2, 2 }, 54 { pinmux(4), 2, 3 } 55 }; 56 57 static const struct pinmux_resource pinmuxes[] = { 58 #ifdef CONFIG_SPI_FLASH 59 PINMUX_ITEM(spi1_pins), 60 #endif 61 PINMUX_ITEM(uart_pins), 62 PINMUX_ITEM(i2c_pins), 63 }; 64 65 static const struct lpsc_resource lpsc[] = { 66 { DAVINCI_LPSC_AEMIF }, /* NAND, NOR */ 67 { DAVINCI_LPSC_SPI1 }, /* Serial Flash */ 68 { DAVINCI_LPSC_EMAC }, /* image download */ 69 { DAVINCI_LPSC_UART2 }, /* console */ 70 { DAVINCI_LPSC_GPIO }, 71 }; 72 73 int board_init(void) 74 { 75 #ifndef CONFIG_USE_IRQ 76 irq_init(); 77 #endif 78 79 /* arch number of the board */ 80 gd->bd->bi_arch_number = MACH_TYPE_DAVINCI_DA850_EVM; 81 82 /* address of boot parameters */ 83 gd->bd->bi_boot_params = LINUX_BOOT_PARAM_ADDR; 84 85 /* 86 * Power on required peripherals 87 * ARM does not have access by default to PSC0 and PSC1 88 * assuming here that the DSP bootloader has set the IOPU 89 * such that PSC access is available to ARM 90 */ 91 if (da8xx_configure_lpsc_items(lpsc, ARRAY_SIZE(lpsc))) 92 return 1; 93 94 /* setup the SUSPSRC for ARM to control emulation suspend */ 95 writel(readl(&davinci_syscfg_regs->suspsrc) & 96 ~(DAVINCI_SYSCFG_SUSPSRC_EMAC | DAVINCI_SYSCFG_SUSPSRC_I2C | 97 DAVINCI_SYSCFG_SUSPSRC_SPI1 | DAVINCI_SYSCFG_SUSPSRC_TIMER0 | 98 DAVINCI_SYSCFG_SUSPSRC_UART2), 99 &davinci_syscfg_regs->suspsrc); 100 101 /* configure pinmux settings */ 102 if (davinci_configure_pin_mux_items(pinmuxes, ARRAY_SIZE(pinmuxes))) 103 return 1; 104 105 /* enable the console UART */ 106 writel((DAVINCI_UART_PWREMU_MGMT_FREE | DAVINCI_UART_PWREMU_MGMT_URRST | 107 DAVINCI_UART_PWREMU_MGMT_UTRST), 108 &davinci_uart2_ctrl_regs->pwremu_mgmt); 109 110 return 0; 111 } 112