
Add new directory for da830evm board
Provides initial support for TI OMAP-L137/DA830 SoC devices on a Spectrum Digital EVM board. See http://www.spectrumdigital.com/
Provides: Initial boot and configuration. Support for i2c. UART support (console).
Signed-off-by: Nick Thompson nick.thompson@gefanuc.com
Applies to u-boot-ti
It should be broken up into multiple patches because you are adding DA830 EVM specific stuff and some enhancements for PINMUX which could be used by all DaVinci's
diff --git a/board/davinci/common/misc.c b/board/davinci/common/misc.c index ffdc20b..5e12bb0 100644 --- a/board/davinci/common/misc.c +++ b/board/davinci/common/misc.c @@ -1,6 +1,7 @@ /*
- Miscelaneous DaVinci functions.
- Copyright (C) 2009 Nick Thompson, GE Fanuc Ltd,
- Copyright (C) 2007 Sergey Kubushyn ksi@koi8.net
- Copyright (C) 2008 Lyrtech <www.lyrtech.com>
- Copyright (C) 2004 Texas Instruments.
@@ -27,7 +28,8 @@ #include <i2c.h> #include <net.h> #include <asm/arch/hardware.h>
+#include <asm/io.h> +#include "misc.h"
DECLARE_GLOBAL_DATA_PTR;
@@ -109,3 +111,45 @@ void dv_configure_mac_address(uint8_t *rom_enetaddr) }
#endif /* DAVINCI_EMAC */
+/*
- Change the setting of a pin multiplexer field.
- Takes an array of pinmux settings similar to:
- struct pinmux_config uart_pins[] = {
- { PINMUX8, 2, 7 },
- { PINMUX9, 2, 0 }
- };
- Stepping through the array, each PINMUXn register has the given value
- set in the pin mux field specified.
- The number of pins in the array must be passed (ARRAY_SIZE can provide
- this value conveniently).
- Returns 0 if all field numbers and values are in the correct range,
- else returns -1.
- */
+int dv_configure_pin_mux(const struct pinmux_config *pins, int n_pins) +{
- int i;
- for (i = 0; i < n_pins; i++) {
unsigned int mux = pins[i].mux;
unsigned int mask = PIN_MUX_FIELD_MASK;
int value = pins[i].value;
int offset = pins[i].field * PIN_MUX_FIELD_SIZE;
if (pins[i].field < PIN_MUX_NUM_FIELDS &&
(value & ~PIN_MUX_FIELD_MASK) == 0) {
mask <<= offset;
value <<= offset;
writel(value | (readl(mux) & (~mask)), mux);
} else {
return -1;
}
- }
- return 0;
+} diff --git a/board/davinci/common/misc.h b/board/davinci/common/misc.h index dc3cc41..d0fca65 100644 --- a/board/davinci/common/misc.h +++ b/board/davinci/common/misc.h @@ -1,4 +1,5 @@ /*
- Copyright (C) 2009 Nick Thompson, GE Fanuc Ltd,
- Copyright (C) 2008 Lyrtech <www.lyrtech.com>
- See file CREDITS for list of people who contributed to this
@@ -22,8 +23,20 @@ #ifndef __MISC_H #define __MISC_H
+/* pin muxer definitions */ +#define PIN_MUX_NUM_FIELDS 8 /* Per register */ +#define PIN_MUX_FIELD_SIZE 4 /* n in bits */ +#define PIN_MUX_FIELD_MASK 0xf /* mask n field bits */
+/* pin definition */ +struct pinmux_config {
- unsigned int mux; /* Address of mux register */
- unsigned char value; /* Value to set in field */
- unsigned char field; /* field number */
+};
int dvevm_read_mac_address(uint8_t *buf); void dv_configure_mac_address(uint8_t *rom_enetaddr); +int dv_configure_pin_mux(const struct pinmux_config *pins, int n_pins);
What about actually having the prefix davinci.
And I can see that there are other functions above(not added by you) that need a similar rename.
#endif /* __MISC_H */ diff --git a/board/davinci/da830evm/Makefile b/board/davinci/da830evm/Makefile new file mode 100644 index 0000000..02636fa --- /dev/null +++ b/board/davinci/da830evm/Makefile @@ -0,0 +1,51 @@ +# +# (C) Copyright 2000, 2001, 2002 +# Wolfgang Denk, DENX Software Engineering, wd@denx.de. +# +# Copyright (C) 2007 Sergey Kubushyn ksi@koi8.net +# +# 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., 59 Temple Place, Suite 330, Boston, +# MA 02111-1307 USA +#
+include $(TOPDIR)/config.mk
+LIB = $(obj)lib$(BOARD).a
+COBJS := da830evm.o
+SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c) +OBJS := $(addprefix $(obj),$(COBJS)) +SOBJS := $(addprefix $(obj),$(SOBJS))
+$(LIB): $(obj).depend $(OBJS) $(SOBJS)
- $(AR) $(ARFLAGS) $@ $(OBJS) $(SOBJS)
+clean:
- rm -f $(SOBJS) $(OBJS)
+distclean: clean
- rm -f $(LIB) core *.bak *~ .depend
+######################################################################### +# This is for $(obj).depend target +include $(SRCTREE)/rules.mk
+sinclude $(obj).depend
+######################################################################### diff --git a/board/davinci/da830evm/config.mk b/board/davinci/da830evm/config.mk new file mode 100644 index 0000000..f05e36a --- /dev/null +++ b/board/davinci/da830evm/config.mk @@ -0,0 +1,45 @@ +# +# (C) Copyright 2008 Sekhar Nori, Texas Instruments, Inc. nsekhar@ti.com +# +# Copyright (C) 2007 Sergey Kubushyn ksi@koi8.net +# +# (C) Copyright 2003 Swaminathan, Texas Instruments, swami.iyer@ti.com +# +# (C) Copyright 2002 +# Gary Jennejohn, DENX Software Engineering, gj@denx.de +# David Mueller, ELSOFT AG, d.mueller@elsoft.ch +# +# 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., 59 Temple Place, Suite 330, Boston, +# MA 02111-1307 USA +#
+# Texas Instruments DA8xx EVM board (ARM925EJS) cpu +# see http://www.ti.com/ for more information on Texas Instruments +# +# DA8xx EVM has 1 bank of 64 MB SDRAM (2 16Meg x16 chips). +# Physical Address: +# C000'0000 to C400'0000 +# +# Linux-Kernel is expected to be at C000'8000, entry C000'8000 +# (mem base + reserved) +# +# we load ourself to C108 '0000
+#Provide at least 16MB spacing between us and the Linux Kernel image +TEXT_BASE = 0xC1080000 diff --git a/board/davinci/da830evm/da830evm.c b/board/davinci/da830evm/da830evm.c new file mode 100644 index 0000000..23e4e1a --- /dev/null +++ b/board/davinci/da830evm/da830evm.c @@ -0,0 +1,126 @@ +/*
- Copyright (C) 2009 Nick Thompson, GE Fanuc, Ltd.
- Base on code from TI. Original Notices follow:
- Copyright (C) 2008 Sekhar Nori, Texas Instruments, Inc.
- Modified for DA8xx EVM.
- Copyright (C) 2007 Sergey Kubushyn ksi@koi8.net
- Parts are shamelessly stolen from various TI sources, original
copyright
- follows:
- Copyright (C) 2004 Texas Instruments.
- 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 <i2c.h> +#include <asm/arch/hardware.h> +#include <asm/io.h> +#include "../common/misc.h"
+DECLARE_GLOBAL_DATA_PTR;
+#ifdef CONFIG_SPI_FLASH +/* SPI0 pin muxer settings */ +const struct pinmux_config spi0_pins[] = {
- { PINMUX7, 1, 3 },
- { PINMUX7, 1, 4 },
- { PINMUX7, 1, 5 },
- { PINMUX7, 1, 6 },
- { PINMUX7, 1, 7 }
+}; +#endif
+/* UART pin muxer settings */ +const struct pinmux_config uart_pins[] = {
- { PINMUX8, 2, 7 },
- { PINMUX9, 2, 0 }
+};
+/* I2C pin muxer settings */ +const struct pinmux_config i2c_pins[] = {
- { PINMUX9, 2, 3 },
- { PINMUX9, 2, 4 }
+};
+int board_init(void) +{
+#ifndef CONFIG_USE_IRQ
- /*
* Mask all IRQs by clearing the global enable and setting
* the enable clear for all the 90 interrupts.
*/
- writel(0, INTC_GLB_EN);
- writel(0, INTC_HINT_EN + 0x0);
- writel(0, INTC_HINT_EN + 0x4);
- writel(0, INTC_HINT_EN + 0x8);
- writel(0xffffffff, INTC_EN_CLR0 + 0x0);
- writel(0xffffffff, INTC_EN_CLR0 + 0x4);
- writel(0xffffffff, INTC_EN_CLR0 + 0x8);
+#endif
- /* arch number of the board */
- gd->bd->bi_arch_number = MACH_TYPE_DAVINCI_DA830_EVM;
- /* address of boot parameters */
- gd->bd->bi_boot_params = LINUX_BOOT_PARAM_ADDR;
- /*
* Power on required peripherals
* ARM does not have access by default to PSC0 and PSC1
* assuming here that the DSP bootloader has set the IOPU
* such that PSC access is available to ARM
*/
- lpsc_on(DAVINCI_LPSC_AEMIF); /* NAND, NOR */
- lpsc_on(DAVINCI_LPSC_SPI0); /* Serial Flash */
- lpsc_on(DAVINCI_LPSC_EMAC); /* image download */
- lpsc_on(DAVINCI_LPSC_UART2); /* console */
- lpsc_on(DAVINCI_LPSC_GPIO);
- /* Pin Muxing support */
- /* setup the SUSPSRC for ARM to control emulation suspend */
- writel(readl(SUSPSRC) & ~(SUSPSRC_EMAC | SUSPSRC_I2C | SUSPSRC_SPI0
|
SUSPSRC_TIMER0 | SUSPSRC_UART2), SUSPSRC);
+#ifdef CONFIG_SPI_FLASH
- if (dv_configure_pin_mux(spi0_pins, ARRAY_SIZE(spi0_pins)) != 0)
return 1;
+#endif
- if (dv_configure_pin_mux(uart_pins, ARRAY_SIZE(uart_pins)) != 0)
return 1;
- if (dv_configure_pin_mux(i2c_pins, ARRAY_SIZE(i2c_pins)) != 0)
return 1;
- /* enable the console UART */
- writel(PWREMU_MGMT_FREE | PWREMU_MGMT_URRST | PWREMU_MGMT_UTRST,
DAVINCI_UART2_BASE + PWREMU_MGMT_BASE);
- return(0);
+}