Merge branch 'master' of git://git.denx.de/u-boot-arm
This commit is contained in:
@@ -75,7 +75,7 @@ void at91_serial_hw_init(void)
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef CONFIG_HAS_DATAFLASH
|
||||
#if defined(CONFIG_HAS_DATAFLASH) || defined(CONFIG_ATMEL_SPI)
|
||||
void at91_spi0_hw_init(unsigned long cs_mask)
|
||||
{
|
||||
at91_set_A_periph(AT91_PIN_PA0, 0); /* SPI0_MISO */
|
||||
|
||||
@@ -29,6 +29,7 @@ LIB = $(obj)lib$(SOC).a
|
||||
|
||||
COBJS-y += cpu.o timer.o psc.o
|
||||
COBJS-$(CONFIG_SOC_DM355) += dm355.o
|
||||
COBJS-$(CONFIG_SOC_DM365) += dm365.o
|
||||
COBJS-$(CONFIG_SOC_DM644X) += dm644x.o
|
||||
COBJS-$(CONFIG_DRIVER_TI_EMAC) += lxt972.o dp83848.o
|
||||
|
||||
|
||||
35
cpu/arm926ejs/davinci/dm365.c
Normal file
35
cpu/arm926ejs/davinci/dm365.c
Normal file
@@ -0,0 +1,35 @@
|
||||
/*
|
||||
* SoC-specific code for tms320dm365 and similar chips
|
||||
*
|
||||
* See file CREDITS for list of people who contributed to this
|
||||
* project.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <asm/arch/hardware.h>
|
||||
|
||||
void davinci_enable_uart0(void)
|
||||
{
|
||||
lpsc_on(DAVINCI_LPSC_UART0);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_DRIVER_DAVINCI_I2C
|
||||
void davinci_enable_i2c(void)
|
||||
{
|
||||
lpsc_on(DAVINCI_LPSC_I2C);
|
||||
}
|
||||
#endif
|
||||
@@ -195,6 +195,78 @@ int kw_config_mpp(u32 mpp0_7, u32 mpp8_15, u32 mpp16_23, u32 mpp24_31,
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* SYSRSTn Duration Counter Support
|
||||
*
|
||||
* Kirkwood SoC implements a hardware-based SYSRSTn duration counter.
|
||||
* When SYSRSTn is asserted low, a SYSRSTn duration counter is running.
|
||||
* The SYSRSTn duration counter is useful for implementing a manufacturer
|
||||
* or factory reset. Upon a long reset assertion that is greater than a
|
||||
* pre-configured environment variable value for sysrstdelay,
|
||||
* The counter value is stored in the SYSRSTn Length Counter Register
|
||||
* The counter is based on the 25-MHz reference clock (40ns)
|
||||
* It is a 29-bit counter, yielding a maximum counting duration of
|
||||
* 2^29/25 MHz (21.4 seconds). When the counter reach its maximum value,
|
||||
* it remains at this value until counter reset is triggered by setting
|
||||
* bit 31 of KW_REG_SYSRST_CNT
|
||||
*/
|
||||
static void kw_sysrst_action(void)
|
||||
{
|
||||
int ret;
|
||||
char *s = getenv("sysrstcmd");
|
||||
|
||||
if (!s) {
|
||||
debug("Error.. %s failed, check sysrstcmd\n",
|
||||
__FUNCTION__);
|
||||
return;
|
||||
}
|
||||
|
||||
debug("Starting %s process...\n", __FUNCTION__);
|
||||
#if !defined(CONFIG_SYS_HUSH_PARSER)
|
||||
ret = run_command (s, 0);
|
||||
#else
|
||||
ret = parse_string_outer(s, FLAG_PARSE_SEMICOLON
|
||||
| FLAG_EXIT_FROM_LOOP);
|
||||
#endif
|
||||
if (ret < 0)
|
||||
debug("Error.. %s failed\n", __FUNCTION__);
|
||||
else
|
||||
debug("%s process finished\n", __FUNCTION__);
|
||||
}
|
||||
|
||||
static void kw_sysrst_check(void)
|
||||
{
|
||||
u32 sysrst_cnt, sysrst_dly;
|
||||
char *s;
|
||||
|
||||
/*
|
||||
* no action if sysrstdelay environment variable is not defined
|
||||
*/
|
||||
s = getenv("sysrstdelay");
|
||||
if (s == NULL)
|
||||
return;
|
||||
|
||||
/* read sysrstdelay value */
|
||||
sysrst_dly = (u32) simple_strtoul(s, NULL, 10);
|
||||
|
||||
/* read SysRst Length counter register (bits 28:0) */
|
||||
sysrst_cnt = (0x1fffffff & readl(KW_REG_SYSRST_CNT));
|
||||
debug("H/w Rst hold time: %d.%d secs\n",
|
||||
sysrst_cnt / SYSRST_CNT_1SEC_VAL,
|
||||
sysrst_cnt % SYSRST_CNT_1SEC_VAL);
|
||||
|
||||
/* clear the counter for next valid read*/
|
||||
writel(1 << 31, KW_REG_SYSRST_CNT);
|
||||
|
||||
/*
|
||||
* sysrst_action:
|
||||
* if H/w Reset key is pressed and hold for time
|
||||
* more than sysrst_dly in seconds
|
||||
*/
|
||||
if (sysrst_cnt >= SYSRST_CNT_1SEC_VAL * sysrst_dly)
|
||||
kw_sysrst_action();
|
||||
}
|
||||
|
||||
#if defined(CONFIG_DISPLAY_CPUINFO)
|
||||
int print_cpuinfo(void)
|
||||
{
|
||||
@@ -298,6 +370,9 @@ int arch_misc_init(void)
|
||||
temp = get_cr();
|
||||
set_cr(temp & ~CR_V);
|
||||
|
||||
/* checks and execute resset to factory event */
|
||||
kw_sysrst_check();
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif /* CONFIG_ARCH_MISC_INIT */
|
||||
|
||||
@@ -264,3 +264,68 @@ void imx_gpio_mode(int gpio_mode)
|
||||
®s->port[port].iconfb2);
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef CONFIG_MXC_UART
|
||||
void mx27_uart_init_pins(void)
|
||||
{
|
||||
int i;
|
||||
unsigned int mode[] = {
|
||||
PE12_PF_UART1_TXD,
|
||||
PE13_PF_UART1_RXD,
|
||||
};
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(mode); i++)
|
||||
imx_gpio_mode(mode[i]);
|
||||
|
||||
}
|
||||
#endif /* CONFIG_MXC_UART */
|
||||
|
||||
#ifdef CONFIG_FEC_MXC
|
||||
void mx27_fec_init_pins(void)
|
||||
{
|
||||
int i;
|
||||
unsigned int mode[] = {
|
||||
PD0_AIN_FEC_TXD0,
|
||||
PD1_AIN_FEC_TXD1,
|
||||
PD2_AIN_FEC_TXD2,
|
||||
PD3_AIN_FEC_TXD3,
|
||||
PD4_AOUT_FEC_RX_ER,
|
||||
PD5_AOUT_FEC_RXD1,
|
||||
PD6_AOUT_FEC_RXD2,
|
||||
PD7_AOUT_FEC_RXD3,
|
||||
PD8_AF_FEC_MDIO,
|
||||
PD9_AIN_FEC_MDC | GPIO_PUEN,
|
||||
PD10_AOUT_FEC_CRS,
|
||||
PD11_AOUT_FEC_TX_CLK,
|
||||
PD12_AOUT_FEC_RXD0,
|
||||
PD13_AOUT_FEC_RX_DV,
|
||||
PD14_AOUT_FEC_CLR,
|
||||
PD15_AOUT_FEC_COL,
|
||||
PD16_AIN_FEC_TX_ER,
|
||||
PF23_AIN_FEC_TX_EN,
|
||||
};
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(mode); i++)
|
||||
imx_gpio_mode(mode[i]);
|
||||
}
|
||||
#endif /* CONFIG_FEC_MXC */
|
||||
|
||||
#ifdef CONFIG_MXC_MMC
|
||||
void mx27_sd2_init_pins(void)
|
||||
{
|
||||
int i;
|
||||
unsigned int mode[] = {
|
||||
PB4_PF_SD2_D0,
|
||||
PB5_PF_SD2_D1,
|
||||
PB6_PF_SD2_D2,
|
||||
PB7_PF_SD2_D3,
|
||||
PB8_PF_SD2_CMD,
|
||||
PB9_PF_SD2_CLK,
|
||||
};
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(mode); i++)
|
||||
imx_gpio_mode(mode[i]);
|
||||
|
||||
}
|
||||
#endif /* CONFIG_MXC_MMC */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user