U-Boot
Threads by month
- ----- 2025 -----
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2003 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2002 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2001 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2000 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
November 2008
- 168 participants
- 480 discussions
Hi all,
I'm using a flash with the top sectors smaller then the others. The
flash has got four 32kb sector and 255 sectors of 128kb. I'd like to use
the small sectors to deploy there the environment. I've got a doubt
about the configuration, is it possible to have CFG_ENV_SIZE bigger then
CFG_ENV_SECT_SIZE? I'd like to have the last sector splitted in two
little partition of 64kb, so I think I should set:
#define CFG_ENV_IS_IN_FLASH
#define CFG_ENV_SECT_SIZE (0x00008000) /* 32kb */
#define CFG_ENV_SIZE (0x00010000) /* 64kb */
#define CFG_ENV_ADDR (CFG_FLASH_BASE + CFG_FLASH_SIZE -
(CFG_ENV_SECT_SIZE*4))
#define CFG_ENV_ADDR_REDUND (CFG_FLASH_BASE + CFG_FLASH_SIZE -
(CFG_ENV_SECT_SIZE*2))
#define CFG_ENV_SIZE_REDUND (CFG_ENV_SIZE)
is it right? I'd like to use 64kb+64kb instead of 32kb+32kb for the
environment so as not to waste 64kb of flash. Thanks.
Regards,
Marco
1
0

15 Nov '08
This is required to work around ARM erratum 621766, affecting
Cortex-A8 r1p0-3:
When a sequence of Neon load instructions is intermixed with several
branches, some of which are mispredicted, it is possible for the
processor to deadlock due to Neon loads on the speculative path not
being properly flushed from the Neon load queue.
Signed-off-by: Mans Rullgard <mans(a)mansr.com>
---
cpu/arm_cortexa8/omap3/board.c | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/cpu/arm_cortexa8/omap3/board.c b/cpu/arm_cortexa8/omap3/board.c
index 90809a6..7c2a7ea 100644
--- a/cpu/arm_cortexa8/omap3/board.c
+++ b/cpu/arm_cortexa8/omap3/board.c
@@ -139,6 +139,8 @@ void setup_auxcr()
__asm__ __volatile__("mrc p15, 0, r0, c1, c0, 1");
/* Enabling ASA */
__asm__ __volatile__("orr r0, r0, #0x10");
+ /* Enable L1NEON */
+ __asm__ __volatile__("orr r0, r0, #1<<5");
/* SMI instruction to call ROM Code API */
__asm__ __volatile__(".word 0xE1600070");
__asm__ __volatile__("mov r0, %0":"=r"(i));
--
1.6.0.3
2
1
This patch will create a new board, SIMPC8313, from Sheldon Instruments. This board boots from NAND devices and is configureable for either large or small page devices. The board supports non-soldered DDR2, one ethernet port, a Marvell 88E1118 PHY, and PCI host support. The board also has a FPGA connected to the eLBC providing glue logic to a TMS320C67xx DSP.
Signed-off-by: Ron Madrid <ron_madrid(a)sbcglobal.net>
---
MAINTAINERS | 4 +
MAKEALL | 3 +-
Makefile | 15 +
board/sheldon/simpc8313/Makefile | 50 +++
board/sheldon/simpc8313/config.mk | 13 +
board/sheldon/simpc8313/sdram.c | 193 ++++++++++
board/sheldon/simpc8313/simpc8313.c | 134 +++++++
doc/README.simpc8313 | 80 ++++
include/configs/SIMPC8313.h | 544 +++++++++++++++++++++++++++
nand_spl/board/sheldon/simpc8313/Makefile | 101 +++++
nand_spl/board/sheldon/simpc8313/u-boot.lds | 52 +++
11 files changed, 1188 insertions(+), 1 deletions(-)
create mode 100644 board/sheldon/simpc8313/Makefile
create mode 100644 board/sheldon/simpc8313/config.mk
create mode 100644 board/sheldon/simpc8313/sdram.c
create mode 100644 board/sheldon/simpc8313/simpc8313.c
create mode 100644 doc/README.simpc8313
create mode 100644 include/configs/SIMPC8313.h
create mode 100644 nand_spl/board/sheldon/simpc8313/Makefile
create mode 100644 nand_spl/board/sheldon/simpc8313/u-boot.lds
diff --git a/MAINTAINERS b/MAINTAINERS
index 127604b..2211747 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -263,6 +263,10 @@ Jon Loeliger <jdl(a)freescale.com>
MPC8641HPCN MPC8641D
+Ron Madrid <info(a)sheldoninst.com>
+
+ SIMPC8313 MPC8313
+
Dan Malek <dan(a)embeddedalley.com>
stxgp3 MPC85xx
diff --git a/MAKEALL b/MAKEALL
index dbed268..82b8231 100755
--- a/MAKEALL
+++ b/MAKEALL
@@ -1,4 +1,4 @@
-#!/bin/sh
+8#!/bin/sh
: ${JOBS:=}
@@ -343,6 +343,7 @@ LIST_83xx=" \
MPC837XERDB \
MVBLM7 \
sbc8349 \
+ SIMPC8313_LP \
TQM834x \
"
diff --git a/Makefile b/Makefile
index e4a184f..95dfed8 100644
--- a/Makefile
+++ b/Makefile
@@ -2314,6 +2314,21 @@ MVBLM7_config: unconfig
sbc8349_config: unconfig
@$(MKCONFIG) $(@:_config=) ppc mpc83xx sbc8349
+SIMPC8313_LP_config \
+SIMPC8313_SP_config: unconfig
+ @mkdir -p $(obj)include
+ @mkdir -p $(obj)board/sheldon/simpc8313
+ @if [ "$(findstring _LP_,$@)" ] ; then \
+ $(XECHO) -n "...Large Page NAND..." ; \
+ echo "#define CONFIG_NAND_LP" >> $(obj)include/config.h ; \
+ fi ; \
+ if [ "$(findstring _SP_,$@)" ] ; then \
+ $(XECHO) -n "...Small Page NAND..." ; \
+ echo "#define CONFIG_NAND_SP" >> $(obj)include/config.h ; \
+ fi ;
+ @$(MKCONFIG) -a SIMPC8313 ppc mpc83xx simpc8313 sheldon
+ @echo "CONFIG_NAND_U_BOOT = y" >> $(obj)include/config.mk
+
TQM834x_config: unconfig
@$(MKCONFIG) $(@:_config=) ppc mpc83xx tqm834x tqc
diff --git a/board/sheldon/simpc8313/Makefile b/board/sheldon/simpc8313/Makefile
new file mode 100644
index 0000000..7c34c5e
--- /dev/null
+++ b/board/sheldon/simpc8313/Makefile
@@ -0,0 +1,50 @@
+#
+# (C) Copyright 2006
+# Wolfgang Denk, DENX Software Engineering, wd(a)denx.de.
+#
+# 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 := $(BOARD).o sdram.o
+
+SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c)
+OBJS := $(addprefix $(obj),$(COBJS))
+SOBJS := $(addprefix $(obj),$(SOBJS))
+
+$(LIB): $(obj).depend $(OBJS)
+ $(AR) $(ARFLAGS) $@ $(OBJS)
+
+clean:
+ rm -f $(SOBJS) $(OBJS)
+
+distclean: clean
+ rm -f $(LIB) core *.bak $(obj).depend
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/board/sheldon/simpc8313/config.mk b/board/sheldon/simpc8313/config.mk
new file mode 100644
index 0000000..ce1c0d8
--- /dev/null
+++ b/board/sheldon/simpc8313/config.mk
@@ -0,0 +1,13 @@
+ifndef NAND_SPL
+sinclude $(OBJTREE)/board/$(BOARDDIR)/config.tmp
+endif
+
+ifndef TEXT_BASE
+TEXT_BASE = 0x00100000
+endif
+
+ifdef CONFIG_NAND_LP
+PAD_TO = 0xFFF20000
+else
+PAD_TO = 0xFFF04000
+endif
diff --git a/board/sheldon/simpc8313/sdram.c b/board/sheldon/simpc8313/sdram.c
new file mode 100644
index 0000000..f7fa234
--- /dev/null
+++ b/board/sheldon/simpc8313/sdram.c
@@ -0,0 +1,193 @@
+/*
+ * Copyright (C) Freescale Semiconductor, Inc. 2006-2007
+ * Copyright (C) Sheldon Instruments, Inc. 2008
+ *
+ * Author: Ron Madrid <info(a)sheldoninst.com>
+ *
+ * (C) Copyright 2006
+ * Wolfgang Denk, DENX Software Engineering, wd(a)denx.de.
+ *
+ * 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 <common.h>
+#include <mpc83xx.h>
+#include <spd_sdram.h>
+#include <asm/bitops.h>
+#include <asm/io.h>
+#include <asm/processor.h>
+#include <asm/mmu.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+static long fixed_sdram(void);
+
+#if defined(CONFIG_NAND_SPL)
+void si_wait_i2c(void)
+{
+ volatile immap_t *im = (immap_t *) CONFIG_SYS_IMMR;
+
+ while (!(__raw_readb(&im->i2c[0].sr) & 0x02))
+ ;
+
+ __raw_writeb(0x00, &im->i2c[0].sr);
+
+ sync();
+
+ return;
+}
+
+void si_read_i2c(u32 lbyte, int count, u8 *buffer)
+{
+ volatile immap_t *im = (immap_t *) CONFIG_SYS_IMMR;
+ u32 i;
+ u8 chip = 0x50 << 1; /* boot sequencer I2C */
+ u32 ubyte = (lbyte & 0xff00) >> 8;
+
+ lbyte &= 0xff;
+
+ /*
+ * Set up controller
+ */
+ __raw_writeb(0x3f, &im->i2c[0].fdr);
+ __raw_writeb(0x00, &im->i2c[0].adr);
+ __raw_writeb(0x00, &im->i2c[0].sr);
+ __raw_writeb(0x00, &im->i2c[0].dr);
+
+ while (__raw_readb(&im->i2c[0].sr) & 0x20)
+ ;
+
+ /*
+ * Writing address to device
+ */
+ __raw_writeb(0xb0, &im->i2c[0].cr);
+ sync();
+ __raw_writeb(chip, &im->i2c[0].dr);
+ si_wait_i2c();
+
+ __raw_writeb(0xb0, &im->i2c[0].cr);
+ sync();
+ __raw_writeb(ubyte, &im->i2c[0].dr);
+ si_wait_i2c();
+
+ __raw_writeb(lbyte, &im->i2c[0].dr);
+ si_wait_i2c();
+
+ __raw_writeb(0xb4, &im->i2c[0].cr);
+ sync();
+ __raw_writeb(chip + 1, &im->i2c[0].dr);
+ si_wait_i2c();
+
+ __raw_writeb(0xa0, &im->i2c[0].cr);
+ sync();
+
+ /*
+ * Dummy read
+ */
+ __raw_readb(&im->i2c[0].dr);
+
+ si_wait_i2c();
+
+ /*
+ * Read actual data
+ */
+ for (i = 0; i < count; i++)
+ {
+ if (i == (count - 2)) /* Reached next to last byte, No ACK */
+ __raw_writeb(0xa8, &im->i2c[0].cr);
+ if (i == (count - 1)) /* Reached last byte, STOP */
+ __raw_writeb(0x88, &im->i2c[0].cr);
+
+ /* Read byte of data */
+ buffer[i] = __raw_readb(&im->i2c[0].dr);
+
+ if (i == (count - 1))
+ break;
+ si_wait_i2c();
+ }
+
+ return;
+}
+#endif /* CONFIG_NAND_SPL */
+
+phys_size_t initdram(int board_type)
+{
+ volatile immap_t *im = (immap_t *) CONFIG_SYS_IMMR;
+ volatile fsl_lbus_t *lbc= &im->lbus;
+ u32 msize;
+
+ if ((__raw_readl(&im->sysconf.immrbar) & IMMRBAR_BASE_ADDR) != (u32) im)
+ return -1;
+
+ /* DDR SDRAM - Main SODIMM */
+ __raw_writel(CONFIG_SYS_DDR_BASE & LAWBAR_BAR, &im->sysconf.ddrlaw[0].bar);
+
+ msize = fixed_sdram();
+
+ /* Local Bus setup lbcr and mrtpr */
+ __raw_writel(CONFIG_SYS_LBC_LBCR, &lbc->lbcr);
+ __raw_writel(CONFIG_SYS_LBC_MRTPR, &lbc->mrtpr);
+ sync();
+
+ /* return total bus SDRAM size(bytes) -- DDR */
+ return (msize * 1024 * 1024);
+}
+
+/*************************************************************************
+ * fixed sdram init -- reads values from boot sequencer I2C
+ ************************************************************************/
+static long fixed_sdram(void)
+{
+ volatile immap_t *im = (immap_t *) CONFIG_SYS_IMMR;
+ u32 msizelog2, msize = 1;
+#if defined(CONFIG_NAND_SPL)
+ u32 i;
+ const u8 bytecount = 135;
+ u8 buffer[bytecount];
+ u32 addr, data;
+
+ si_read_i2c(0, bytecount, buffer);
+
+ for (i = 18; i < bytecount; i += 7){
+ addr = (u32)buffer[i];
+ addr <<= 8;
+ addr |= (u32)buffer[i + 1];
+ addr <<= 2;
+ data = (u32)buffer[i + 2];
+ data <<= 8;
+ data |= (u32)buffer[i + 3];
+ data <<= 8;
+ data |= (u32)buffer[i + 4];
+ data <<= 8;
+ data |= (u32)buffer[i + 5];
+
+ __raw_writel(data, (u32 *)(CONFIG_SYS_IMMR + addr));
+ }
+
+ sync();
+
+ /* enable DDR controller */
+ __raw_writel((__raw_readl(&im->ddr.sdram_cfg) | SDRAM_CFG_MEM_EN), &im->ddr.sdram_cfg);
+#endif /* (CONFIG_NAND_SPL) */
+
+ msizelog2 = ((__raw_readl(&im->sysconf.ddrlaw[0].ar) & LAWAR_SIZE) + 1);
+ msize <<= (msizelog2 - 20);
+
+ return msize;
+}
diff --git a/board/sheldon/simpc8313/simpc8313.c b/board/sheldon/simpc8313/simpc8313.c
new file mode 100644
index 0000000..25e5c24
--- /dev/null
+++ b/board/sheldon/simpc8313/simpc8313.c
@@ -0,0 +1,134 @@
+/*
+ * Copyright (C) Freescale Semiconductor, Inc. 2006-2007
+ * Copyright (C) Sheldon Instruments, Inc. 2008
+ *
+ * Author: Ron Madrid <info(a)sheldoninst.com>
+ *
+ * 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 <common.h>
+#include <libfdt.h>
+#include <pci.h>
+#include <mpc83xx.h>
+#include <ns16550.h>
+#include <nand.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+int checkboard(void)
+{
+ puts("Board: Sheldon Instruments SIMPC8313\n");
+ return 0;
+}
+
+#ifndef CONFIG_NAND_SPL
+static struct pci_region pci_regions[] = {
+ {
+ bus_start: CONFIG_SYS_PCI1_MEM_BASE,
+ phys_start: CONFIG_SYS_PCI1_MEM_PHYS,
+ size: CONFIG_SYS_PCI1_MEM_SIZE,
+ flags: PCI_REGION_MEM | PCI_REGION_PREFETCH
+ },
+ {
+ bus_start: CONFIG_SYS_PCI1_MMIO_BASE,
+ phys_start: CONFIG_SYS_PCI1_MMIO_PHYS,
+ size: CONFIG_SYS_PCI1_MMIO_SIZE,
+ flags: PCI_REGION_MEM
+ },
+ {
+ bus_start: CONFIG_SYS_PCI1_IO_BASE,
+ phys_start: CONFIG_SYS_PCI1_IO_PHYS,
+ size: CONFIG_SYS_PCI1_IO_SIZE,
+ flags: PCI_REGION_IO
+ }
+};
+
+void pci_init_board(void)
+{
+ volatile immap_t *immr = (volatile immap_t *)CONFIG_SYS_IMMR;
+ volatile clk83xx_t *clk = (volatile clk83xx_t *)&immr->clk;
+ volatile law83xx_t *pci_law = immr->sysconf.pcilaw;
+ struct pci_region *reg[] = { pci_regions };
+ int warmboot;
+
+ /* Enable all 3 PCI_CLK_OUTPUTs. */
+ clk->occr |= 0xe0000000;
+
+ /*
+ * Configure PCI Local Access Windows
+ */
+ pci_law[0].bar = CONFIG_SYS_PCI1_MEM_PHYS & LAWBAR_BAR;
+ pci_law[0].ar = LBLAWAR_EN | LBLAWAR_512MB;
+
+ pci_law[1].bar = CONFIG_SYS_PCI1_IO_PHYS & LAWBAR_BAR;
+ pci_law[1].ar = LBLAWAR_EN | LBLAWAR_1MB;
+
+ warmboot = gd->bd->bi_bootflags & BOOTFLAG_WARM;
+
+ mpc83xx_pci_init(1, reg, warmboot);
+}
+
+/*
+ * Miscellaneous late-boot configurations
+ */
+int misc_init_r(void)
+{
+ int rc = 0;
+
+ return rc;
+}
+
+#if defined(CONFIG_OF_BOARD_SETUP)
+void ft_board_setup(void *blob, bd_t *bd)
+{
+ ft_cpu_setup(blob, bd);
+#ifdef CONFIG_PCI
+ ft_pci_setup(blob, bd);
+#endif
+}
+#endif
+#else /* CONFIG_NAND_SPL */
+void board_init_f(ulong bootflag)
+{
+ NS16550_init((NS16550_t)(CONFIG_SYS_IMMR + 0x4500),
+ CONFIG_SYS_NS16550_CLK / 16 / CONFIG_BAUDRATE);
+ puts("NAND boot... ");
+ init_timebase();
+ initdram(0);
+ relocate_code(CONFIG_SYS_NAND_U_BOOT_RELOC + 0x10000, (gd_t *)gd,
+ CONFIG_SYS_NAND_U_BOOT_RELOC);
+}
+
+void board_init_r(gd_t *gd, ulong dest_addr)
+{
+ nand_boot();
+}
+
+void putc(char c)
+{
+ if (gd->flags & GD_FLG_SILENT)
+ return;
+
+ if (c == '\n')
+ NS16550_putc((NS16550_t)(CONFIG_SYS_IMMR + 0x4500), '\r');
+
+ NS16550_putc((NS16550_t)(CONFIG_SYS_IMMR + 0x4500), c);
+}
+#endif
diff --git a/doc/README.simpc8313 b/doc/README.simpc8313
new file mode 100644
index 0000000..b362c6a
--- /dev/null
+++ b/doc/README.simpc8313
@@ -0,0 +1,80 @@
+Sheldon Instruments SIMPC8313 Board
+-----------------------------------------
+
+1. Board Switches and Jumpers
+
+ S2 is used to set CFG_RESET_SOURCE.
+
+ To boot the image in Large page NAND flash, use these DIP
+ switch settings for S2:
+
+ +----------+ ON
+ | * * **** |
+ | * * |
+ +----------+
+ 12345678
+
+ To boot the image in Small page NAND flash, use these DIP
+ switch settings for S2:
+
+ +----------+ ON
+ | *** **** |
+ | * |
+ +----------+
+ 12345678
+ (where the '*' indicates the position of the tab of the switch.)
+
+2. Memory Map
+ The memory map looks like this:
+
+ 0x0000_0000 0x1fff_ffff DDR 512M
+ 0x8000_0000 0x8fff_ffff PCI MEM 256M
+ 0x9000_0000 0x9fff_ffff PCI_MMIO 256M
+ 0xe000_0000 0xe00f_ffff IMMR 1M
+ 0xe200_0000 0xe20f_ffff PCI IO 16M
+ 0xe280_0000 0xe280_7fff NAND FLASH (CS0) 32K
+ or
+ 0xe280_0000 0xe281_ffff NAND FLASH (CS0) 128K
+ 0xff00_0000 0xff00_7fff FPGA (CS1) 1M
+
+3. Compilation
+
+ Assuming you're using BASH (or similar) as your shell:
+
+ export CROSS_COMPILE=your-cross-compiler-prefix-
+ make distclean
+ make SIMPC8313_LP_config
+ (or make SIMPC8313_SP_config, depending on the page size
+ of your NAND flash)
+ make
+
+4. Downloading and Flashing Images
+
+4.1 Reflash U-boot Image using U-boot
+
+ =>run update_uboot
+
+ You may want to try
+ =>tftp $loadaddr $uboot
+ first, to make sure that the TFTP load will succeed before it
+ goes ahead and wipes out your current firmware. And of course,
+ if the new u-boot doesn't boot, you can plug the board into
+ your PCI slot and with the supplied driver and sample app
+ you can reburn a working u-boot.
+
+4.2 Downloading and Booting Linux Kernel
+
+ Ensure that all networking-related environment variables are set
+ properly (including ipaddr, serverip, gatewayip (if needed),
+ netmask, ethaddr, eth1addr, fdtfile, and bootfile).
+
+ =>tftp $loadaddr uImage
+ =>nand write $loadaddr kernel $filesize
+ =>tftp $loadaddr $fdtfile
+ =>nand write $loadaddr 7e0000 1800
+
+ =>boot
+
+5 Notes
+
+ The console baudrate for SIMPC8313 is 115200bps.
diff --git a/include/configs/SIMPC8313.h b/include/configs/SIMPC8313.h
new file mode 100644
index 0000000..04845ef
--- /dev/null
+++ b/include/configs/SIMPC8313.h
@@ -0,0 +1,544 @@
+/*
+ * Copyright (C) Sheldon Instruments, Inc. 2008
+ *
+ * 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
+ */
+/*
+ * simpc8313 board configuration file
+ */
+
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+/*
+ * High Level Configuration Options
+ */
+#define CONFIG_NAND_U_BOOT
+
+#define CONFIG_E300 1
+#define CONFIG_MPC83XX 1
+#define CONFIG_MPC831X 1
+#define CONFIG_MPC8313 1
+
+#define CONFIG_PCI
+#define CONFIG_83XX_GENERIC_PCI
+
+#define CONFIG_MISC_INIT_R
+
+/*
+ * On-board devices
+ *
+ * TSEC1 is Marvell PHY 88E1118
+ */
+
+#define CONFIG_SYS_33MHZ
+
+#define CONFIG_83XX_CLKIN 33333333 /* in Hz */
+
+#define CONFIG_SYS_CLK_FREQ CONFIG_83XX_CLKIN
+
+#define CONFIG_SYS_IMMR 0xE0000000
+
+#if defined(CONFIG_NAND_U_BOOT) && !defined(CONFIG_NAND_SPL)
+#define CONFIG_DEFAULT_IMMR CONFIG_SYS_IMMR
+#endif
+
+#define CONFIG_SYS_MEMTEST_START 0x00001000
+#define CONFIG_SYS_MEMTEST_END 0x07f00000
+
+#define CONFIG_SYS_ACR_PIPE_DEP 3 /* Arbiter pipeline depth (0-3) */
+#define CONFIG_SYS_ACR_RPTCNT 3 /* Arbiter repeat count (0-7) */
+
+/*
+ * Device configurations
+ */
+#define CONFIG_TSEC1
+
+/*
+ * DDR Setup
+ */
+#define CONFIG_SYS_DDR_BASE 0x00000000 /* DDR is system memory*/
+#define CONFIG_SYS_SDRAM_BASE CONFIG_SYS_DDR_BASE
+#define CONFIG_SYS_DDR_SDRAM_BASE CONFIG_SYS_DDR_BASE
+
+#define CONFIG_VERY_BIG_RAM
+#define CONFIG_MAX_MEM_MAPPED (512 << 20)
+
+#define CONFIG_SYS_DDRCDR ( DDRCDR_EN \
+ | DDRCDR_PZ_NOMZ \
+ | DDRCDR_NZ_NOMZ \
+ | DDRCDR_M_ODR )
+ /* 0x73000002 TODO ODR & DRN ? */
+
+/*
+ * FLASH on the Local Bus
+ */
+#define CONFIG_SYS_NO_FLASH
+
+#define CONFIG_SYS_MONITOR_BASE TEXT_BASE /* start of monitor */
+
+#if !defined(CONFIG_NAND_SPL)
+#define CONFIG_SYS_RAMBOOT
+#endif
+
+#define CONFIG_SYS_INIT_RAM_LOCK 1
+#define CONFIG_SYS_INIT_RAM_ADDR 0xFD000000 /* Initial RAM address */
+#define CONFIG_SYS_INIT_RAM_END 0x1000 /* End of used area in RAM*/
+
+#define CONFIG_SYS_GBL_DATA_SIZE 0x100 /* num bytes initial data */
+#define CONFIG_SYS_GBL_DATA_OFFSET (CONFIG_SYS_INIT_RAM_END - CONFIG_SYS_GBL_DATA_SIZE)
+#define CONFIG_SYS_INIT_SP_OFFSET CONFIG_SYS_GBL_DATA_OFFSET
+
+/* CONFIG_SYS_MONITOR_LEN must be a multiple of CONFIG_ENV_SECT_SIZE */
+#define CONFIG_SYS_MONITOR_LEN (256 * 1024) /* Reserve 256 kB for Mon */
+#define CONFIG_SYS_MALLOC_LEN (512 * 1024) /* Reserved for malloc */
+
+/*
+ * Local Bus LCRR and LBCR regs
+ */
+#define CONFIG_SYS_LCRR (LCRR_DBYP | LCRR_EADC_1 | LCRR_CLKDIV_2)
+#define CONFIG_SYS_LBC_LBCR (0x00040000 /* TODO */ \
+ | (0xFF << LBCR_BMT_SHIFT) \
+ | 0xF ) /* 0x0004ff0f */
+
+#define CONFIG_SYS_LBC_MRTPR 0x20000000 /*TODO */ /* LB refresh timer prescal, 266MHz/32 */
+
+/* drivers/mtd/nand/nand.c */
+#ifdef CONFIG_NAND_SPL
+#define CONFIG_SYS_NAND_BASE 0xFFF00000
+#else
+#define CONFIG_SYS_NAND_BASE 0xE2800000
+#endif
+
+#define CONFIG_SYS_MAX_NAND_DEVICE 1
+#define NAND_MAX_CHIPS 1
+#define CONFIG_MTD_NAND_VERIFY_WRITE
+#define CONFIG_CMD_NAND 1
+#define CONFIG_NAND_FSL_ELBC 1
+
+#define CONFIG_SYS_NAND_U_BOOT_SIZE (512 << 10)
+#define CONFIG_SYS_NAND_U_BOOT_DST 0x00100000
+#define CONFIG_SYS_NAND_U_BOOT_START 0x00100100
+#define CONFIG_SYS_NAND_U_BOOT_RELOC 0x00010000
+
+#define CONFIG_SYS_NAND_BR_PRELIM ( CONFIG_SYS_NAND_BASE \
+ | (2<<BR_DECC_SHIFT) /* Use HW ECC */ \
+ | BR_PS_8 /* Port Size = 8 bit */ \
+ | BR_MS_FCM /* MSEL = FCM */ \
+ | BR_V ) /* valid */
+
+#ifdef CONFIG_NAND_SP
+#define CONFIG_SYS_NAND_OR_PRELIM ( 0xFFFF8000 /* length 32K */ \
+ | OR_FCM_CSCT \
+ | OR_FCM_CST \
+ | OR_FCM_CHT \
+ | OR_FCM_SCY_1 \
+ | OR_FCM_TRLX \
+ | OR_FCM_EHTR )
+#define CONFIG_SYS_LBLAWAR0_PRELIM 0x8000000E /* 32KB */
+#define CONFIG_SYS_NAND_PAGE_SIZE (512) /* NAND chip page size */
+#define CONFIG_SYS_NAND_BLOCK_SIZE (16 << 10) /* NAND chip block size */
+#define NAND_CACHE_PAGES 32
+#elif defined(CONFIG_NAND_LP)
+#define CONFIG_SYS_NAND_OR_PRELIM ( 0xFFFC0000 /* length 256K */ \
+ | OR_FCM_PGS \
+ | OR_FCM_CSCT \
+ | OR_FCM_CST \
+ | OR_FCM_CHT \
+ | OR_FCM_SCY_1 \
+ | OR_FCM_TRLX \
+ | OR_FCM_EHTR )
+#define CONFIG_SYS_LBLAWAR0_PRELIM 0x80000011 /* 256KB */
+#define CONFIG_SYS_NAND_PAGE_SIZE (2048) /* NAND chip page size */
+#define CONFIG_SYS_NAND_BLOCK_SIZE (128 << 10) /* NAND chip block size */
+#define NAND_CACHE_PAGES 64
+#else
+#error Page size of NAND not defined.
+#endif /* CONFIG_NAND_SP */
+
+#define CONFIG_SYS_NAND_U_BOOT_OFFS CONFIG_SYS_NAND_BLOCK_SIZE
+
+#define CONFIG_SYS_BR0_PRELIM CONFIG_SYS_NAND_BR_PRELIM
+#define CONFIG_SYS_OR0_PRELIM CONFIG_SYS_NAND_OR_PRELIM
+
+#define CONFIG_SYS_LBLAWBAR0_PRELIM CONFIG_SYS_NAND_BASE
+
+#define CONFIG_SYS_NAND_LBLAWBAR_PRELIM CONFIG_SYS_LBLAWBAR0_PRELIM
+#define CONFIG_SYS_NAND_LBLAWAR_PRELIM CONFIG_SYS_LBLAWAR0_PRELIM
+
+/*
+ * JFFS2 configuration
+ */
+#define CONFIG_JFFS2_NAND
+#define CONFIG_JFFS2_DEV "nand0"
+
+/* mtdparts command line support */
+#define CONFIG_JFFS2_CMDLINE
+#define MTDIDS_DEFAULT "nand0=nand0"
+#define MTDPARTS_DEFAULT "mtdparts=nand0:2M(u-boot),6M(kernel),-(jffs2)"
+
+/* pass open firmware flat tree */
+#define CONFIG_OF_LIBFDT 1
+#define CONFIG_OF_BOARD_SETUP 1
+#define CONFIG_OF_STDOUT_VIA_ALIAS 1
+
+/*
+ * Serial Port
+ */
+#define CONFIG_CONS_INDEX 1
+#define CONFIG_SYS_NS16550
+#define CONFIG_SYS_NS16550_SERIAL
+#define CONFIG_SYS_NS16550_REG_SIZE 1
+
+#define CONFIG_SYS_BAUDRATE_TABLE \
+ {300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 115200}
+
+#define CONFIG_SYS_NS16550_COM1 (CONFIG_SYS_IMMR+0x4500)
+#define CONFIG_SYS_NS16550_COM2 (CONFIG_SYS_IMMR+0x4600)
+
+/* Use the HUSH parser */
+#define CONFIG_SYS_HUSH_PARSER
+#define CONFIG_SYS_PROMPT_HUSH_PS2 "> "
+
+/* I2C */
+#define CONFIG_HARD_I2C /* I2C with hardware support*/
+#define CONFIG_FSL_I2C
+#define CONFIG_I2C_MULTI_BUS
+#define CONFIG_I2C_CMD_TREE
+#define CONFIG_SYS_I2C_SPEED 400000 /* I2C speed and slave address */
+#define CONFIG_SYS_I2C_SLAVE 0x7F
+#define CONFIG_SYS_I2C_NOPROBES {{0,0x69}} /* Don't probe these addrs */
+#define CONFIG_SYS_I2C_OFFSET 0x3000
+#define CONFIG_SYS_I2C2_OFFSET 0x3100
+
+/*
+ * General PCI
+ * Addresses are mapped 1-1.
+ */
+#define CONFIG_SYS_PCI1_MEM_BASE 0x80000000
+#define CONFIG_SYS_PCI1_MEM_PHYS CONFIG_SYS_PCI1_MEM_BASE
+#define CONFIG_SYS_PCI1_MEM_SIZE 0x10000000 /* 256M */
+#define CONFIG_SYS_PCI1_MMIO_BASE 0x90000000
+#define CONFIG_SYS_PCI1_MMIO_PHYS CONFIG_SYS_PCI1_MMIO_BASE
+#define CONFIG_SYS_PCI1_MMIO_SIZE 0x10000000 /* 256M */
+#define CONFIG_SYS_PCI1_IO_BASE 0x00000000
+#define CONFIG_SYS_PCI1_IO_PHYS 0xE2000000
+#define CONFIG_SYS_PCI1_IO_SIZE 0x00100000 /* 1M */
+
+#define CONFIG_PCI_PNP /* do pci plug-and-play */
+#define CONFIG_SYS_PCI_SUBSYS_VENDORID 0x1057 /* Motorola */
+
+/*
+ * TSEC
+ */
+#define CONFIG_TSEC_ENET /* TSEC ethernet support */
+
+#define CONFIG_NET_MULTI
+#define CONFIG_GMII /* MII PHY management */
+
+#ifdef CONFIG_TSEC1
+#define CONFIG_HAS_ETH0
+#define CONFIG_TSEC1_NAME "TSEC0"
+#define CONFIG_SYS_TSEC1_OFFSET 0x24000
+#define TSEC1_PHY_ADDR 0x1c
+#define TSEC1_FLAGS TSEC_GIGABIT
+#define TSEC1_PHYIDX 0
+#endif
+
+#ifdef CONFIG_TSEC2
+#define CONFIG_HAS_ETH1
+#define CONFIG_TSEC2_NAME "TSEC1"
+#define CONFIG_SYS_TSEC2_OFFSET 0x25000
+#define TSEC2_PHY_ADDR 4
+#define TSEC2_FLAGS TSEC_GIGABIT
+#define TSEC2_PHYIDX 0
+#endif
+
+
+/* Options are: TSEC[0-1] */
+#define CONFIG_ETHPRIME "TSEC1"
+
+/*
+ * Configure on-board RTC
+ */
+#define CONFIG_RTC_DS1337
+#define CONFIG_SYS_I2C_RTC_ADDR 0x68
+
+/*
+ * Environment
+ */
+#if defined(CONFIG_NAND_U_BOOT)
+ #define CONFIG_ENV_IS_IN_NAND 1
+ #define CONFIG_ENV_OFFSET (768 * 1024)
+ #define CONFIG_ENV_SECT_SIZE CONFIG_SYS_NAND_BLOCK_SIZE
+ #define CONFIG_ENV_SIZE CONFIG_ENV_SECT_SIZE
+ #define CONFIG_ENV_SIZE_REDUND CONFIG_ENV_SIZE
+ #define CONFIG_ENV_RANGE (CONFIG_ENV_SECT_SIZE * 4)
+ #define CONFIG_ENV_OFFSET_REDUND (CONFIG_ENV_OFFSET + CONFIG_ENV_RANGE)
+#elif !defined(CONFIG_SYS_RAMBOOT)
+ #define CONFIG_ENV_IS_IN_FLASH 1
+ #define CONFIG_ENV_ADDR (CONFIG_SYS_MONITOR_BASE + CONFIG_SYS_MONITOR_LEN)
+ #define CONFIG_ENV_SECT_SIZE 0x10000 /* 64K(one sector) for env */
+ #define CONFIG_ENV_SIZE 0x2000
+
+/* Address and size of Redundant Environment Sector */
+#else
+ #define CONFIG_ENV_IS_NOWHERE 1 /* Store ENV in memory only */
+ #define CONFIG_ENV_ADDR (CONFIG_SYS_MONITOR_BASE - 0x1000)
+ #define CONFIG_ENV_SIZE 0x2000
+#endif
+
+#define CONFIG_LOADS_ECHO 1 /* echo on for serial download */
+#define CONFIG_SYS_LOADS_BAUD_CHANGE 1 /* allow baudrate change */
+
+/*
+ * BOOTP options
+ */
+#define CONFIG_BOOTP_BOOTFILESIZE
+#define CONFIG_BOOTP_BOOTPATH
+#define CONFIG_BOOTP_GATEWAY
+#define CONFIG_BOOTP_HOSTNAME
+
+
+/*
+ * Command line configuration.
+ */
+#include <config_cmd_default.h>
+#undef CONFIG_CMD_IMLS
+#undef CONFIG_CMD_FLASH
+
+#define CONFIG_CMD_PING
+#define CONFIG_CMD_DHCP
+#define CONFIG_CMD_I2C
+#define CONFIG_CMD_MII
+#define CONFIG_CMD_DATE
+#define CONFIG_CMD_PCI
+#define CONFIG_CMD_JFFS2
+
+#if defined(CONFIG_SYS_RAMBOOT) && !defined(CONFIG_NAND_U_BOOT)
+ #undef CONFIG_CMD_ENV
+ #undef CONFIG_CMD_LOADS
+#endif
+
+#define CONFIG_CMDLINE_EDITING 1
+
+
+/*
+ * Miscellaneous configurable options
+ */
+#define CONFIG_SYS_LONGHELP /* undef to save memory */
+#define CONFIG_SYS_LOAD_ADDR 0x2000000 /* default load address */
+#define CONFIG_SYS_PROMPT "=> " /* Monitor Command Prompt */
+#define CONFIG_SYS_CBSIZE 1024 /* Console I/O Buffer Size */
+
+#define CONFIG_SYS_PBSIZE ( CONFIG_SYS_CBSIZE \
+ + sizeof(CONFIG_SYS_PROMPT) \
+ + 16 ) /* Print Buffer Size */
+#define CONFIG_SYS_MAXARGS 16 /* max number of command args */
+#define CONFIG_SYS_BARGSIZE CONFIG_SYS_CBSIZE /* Boot Argument Buffer Size */
+#define CONFIG_SYS_HZ 1000 /* decrementer freq: 1ms ticks */
+
+/*
+ * For booting Linux, the board info and command line data
+ * have to be in the first 8 MB of memory, since this is
+ * the maximum mapped by the Linux kernel during initialization.
+ */
+#define CONFIG_SYS_BOOTMAPSZ (8 << 20) /* Initial Memory map for Linux*/
+
+#define CONFIG_SYS_RCWH_PCIHOST 0x80000000 /* PCIHOST */
+
+#define CONFIG_SYS_HRCW_LOW ( HRCWL_LCL_BUS_TO_SCB_CLK_1X1 \
+ | 0x20000000 /* reserved */ \
+ | HRCWL_DDR_TO_SCB_CLK_2X1 \
+ | HRCWL_CSB_TO_CLKIN_4X1 \
+ | HRCWL_CORE_TO_CSB_2_5X1 )
+
+#define CONFIG_SYS_NS16550_CLK (CONFIG_83XX_CLKIN * 4)
+
+#define CONFIG_SYS_HRCW_HIGH_BASE ( HRCWH_PCI_HOST \
+ | HRCWH_PCI1_ARBITER_ENABLE \
+ | HRCWH_CORE_ENABLE \
+ | HRCWH_BOOTSEQ_DISABLE \
+ | HRCWH_SW_WATCHDOG_DISABLE \
+ | HRCWH_TSEC1M_IN_RGMII \
+ | HRCWH_TSEC2M_IN_RGMII \
+ | HRCWH_BIG_ENDIAN \
+ | HRCWH_LALE_NORMAL )
+
+#ifdef CONFIG_NAND_LP
+#define CONFIG_SYS_HRCW_HIGH ( CONFIG_SYS_HRCW_HIGH_BASE \
+ | HRCWH_FROM_0XFFF00100 \
+ | HRCWH_ROM_LOC_NAND_LP_8BIT \
+ | HRCWH_RL_EXT_NAND)
+#else
+#define CONFIG_SYS_HRCW_HIGH ( CONFIG_SYS_HRCW_HIGH_BASE \
+ | HRCWH_FROM_0XFFF00100 \
+ | HRCWH_ROM_LOC_NAND_SP_8BIT \
+ | HRCWH_RL_EXT_NAND )
+#endif
+
+/* System IO Config */
+#define CONFIG_SYS_SICRH ( SICRH_ETSEC2_B \
+ | SICRH_ETSEC2_C \
+ | SICRH_ETSEC2_D \
+ | SICRH_ETSEC2_E \
+ | SICRH_ETSEC2_F \
+ | SICRH_ETSEC2_G \
+ | SICRH_TSOBI1 \
+ | SICRH_TSOBI2 )
+#define CONFIG_SYS_SICRL (SICRL_USBDR \
+ | SICRL_ETSEC2_A )
+
+#define CONFIG_SYS_HID0_INIT 0x000000000
+#define CONFIG_SYS_HID0_FINAL (HID0_ENABLE_MACHINE_CHECK \
+ | HID0_ENABLE_DYNAMIC_POWER_MANAGMENT )
+
+#define CONFIG_SYS_HID2 HID2_HBE
+
+#define CONFIG_HIGH_BATS 1 /* High BATs supported */
+
+/* DDR @ 0x00000000 */
+#define CONFIG_SYS_IBAT0L (CONFIG_SYS_SDRAM_BASE | BATL_PP_10)
+#define CONFIG_SYS_IBAT0U (CONFIG_SYS_SDRAM_BASE | BATU_BL_256M | BATU_VS | BATU_VP)
+#define CONFIG_SYS_IBAT1L ((CONFIG_SYS_SDRAM_BASE + 0x10000000) | BATL_PP_10)
+#define CONFIG_SYS_IBAT1U ((CONFIG_SYS_SDRAM_BASE + 0x10000000) | BATU_BL_256M | BATU_VS | BATU_VP)
+
+/* PCI @ 0x80000000 */
+#define CONFIG_SYS_IBAT2L (CONFIG_SYS_PCI1_MEM_BASE | BATL_PP_10)
+#define CONFIG_SYS_IBAT2U (CONFIG_SYS_PCI1_MEM_BASE | BATU_BL_256M | BATU_VS | BATU_VP)
+#define CONFIG_SYS_IBAT3L (CONFIG_SYS_PCI1_MMIO_BASE | BATL_PP_10 | BATL_CACHEINHIBIT | BATL_GUARDEDSTORAGE)
+#define CONFIG_SYS_IBAT3U (CONFIG_SYS_PCI1_MMIO_BASE | BATU_BL_256M | BATU_VS | BATU_VP)
+
+/* PCI2 not supported on 8313 */
+#define CONFIG_SYS_IBAT4L (0)
+#define CONFIG_SYS_IBAT4U (0)
+
+/* IMMRBAR @ 0xE0000000, PCI IO @ 0xE2000000 */
+#define CONFIG_SYS_IBAT5L (CONFIG_SYS_IMMR | BATL_PP_10 | BATL_CACHEINHIBIT | BATL_GUARDEDSTORAGE)
+#define CONFIG_SYS_IBAT5U (CONFIG_SYS_IMMR | BATU_BL_256M | BATU_VS | BATU_VP)
+
+/* SDRAM @ 0xF0000000, stack in DCACHE 0xFDF00000 & FLASH @ 0xFE000000 */
+#define CONFIG_SYS_IBAT6L (0xF0000000 | BATL_PP_10)
+#define CONFIG_SYS_IBAT6U (0xF0000000 | BATU_BL_256M | BATU_VS | BATU_VP)
+
+#define CONFIG_SYS_IBAT7L (0)
+#define CONFIG_SYS_IBAT7U (0)
+
+#define CONFIG_SYS_DBAT0L CONFIG_SYS_IBAT0L
+#define CONFIG_SYS_DBAT0U CONFIG_SYS_IBAT0U
+#define CONFIG_SYS_DBAT1L CONFIG_SYS_IBAT1L
+#define CONFIG_SYS_DBAT1U CONFIG_SYS_IBAT1U
+#define CONFIG_SYS_DBAT2L CONFIG_SYS_IBAT2L
+#define CONFIG_SYS_DBAT2U CONFIG_SYS_IBAT2U
+#define CONFIG_SYS_DBAT3L CONFIG_SYS_IBAT3L
+#define CONFIG_SYS_DBAT3U CONFIG_SYS_IBAT3U
+#define CONFIG_SYS_DBAT4L CONFIG_SYS_IBAT4L
+#define CONFIG_SYS_DBAT4U CONFIG_SYS_IBAT4U
+#define CONFIG_SYS_DBAT5L CONFIG_SYS_IBAT5L
+#define CONFIG_SYS_DBAT5U CONFIG_SYS_IBAT5U
+#define CONFIG_SYS_DBAT6L CONFIG_SYS_IBAT6L
+#define CONFIG_SYS_DBAT6U CONFIG_SYS_IBAT6U
+#define CONFIG_SYS_DBAT7L CONFIG_SYS_IBAT7L
+#define CONFIG_SYS_DBAT7U CONFIG_SYS_IBAT7U
+
+/*
+ * Internal Definitions
+ *
+ * Boot Flags
+ */
+#define BOOTFLAG_COLD 0x01 /* Normal Power-On: Boot from FLASH */
+#define BOOTFLAG_WARM 0x02 /* Software reboot */
+
+/*
+ * Environment Configuration
+ */
+#define CONFIG_ENV_OVERWRITE
+
+#define CONFIG_NETDEV eth1
+
+#define CONFIG_HOSTNAME simpc8313
+#define CONFIG_ROOTPATH /tftpboot/
+#define CONFIG_BOOTFILE /tftpboot/uImage
+#define CONFIG_UBOOTPATH u-boot-nand.bin /* U-Boot image on TFTP server */
+#define CONFIG_FDTFILE simpc8313.dtb
+
+#define CONFIG_LOADADDR 500000 /* default location for tftp and bootm */
+#define CONFIG_BOOTDELAY 5 /* 5 second delay */
+#define CONFIG_BAUDRATE 115200
+
+#define CONFIG_BOOTCOMMAND "nand read $loadaddr kernel 600000;bootm $loadaddr - $fdtaddr"
+
+#define XMK_STR(x) #x
+#define MK_STR(x) XMK_STR(x)
+
+#define CONFIG_EXTRA_ENV_SETTINGS \
+ "netdev=" MK_STR(CONFIG_NETDEV) "\0" \
+ "ethprime=TSEC1\0" \
+ "uboot=" MK_STR(CONFIG_UBOOTPATH) "\0" \
+ "tftpflash=tftpboot $loadaddr $uboot; " \
+ "protect off " MK_STR(TEXT_BASE) " +$filesize; " \
+ "erase " MK_STR(TEXT_BASE) " +$filesize; " \
+ "cp.b $loadaddr " MK_STR(TEXT_BASE) " $filesize; " \
+ "protect on " MK_STR(TEXT_BASE) " +$filesize; " \
+ "cmp.b $loadaddr " MK_STR(TEXT_BASE) " $filesize\0" \
+ "fdtaddr=ae0000\0" \
+ "fdtfile=" MK_STR(CONFIG_FDTFILE) "\0" \
+ "console=ttyS0\0" \
+ "setbootargs=setenv bootargs " \
+ "root=$rootdev rw console=$console,$baudrate $othbootargs\0" \
+ "setipargs=setenv bootargs nfsroot=$serverip:$rootpath " \
+ "ip=$ipaddr:$serverip:$gatewayip:$netmask:$hostname:$netdev:off " \
+ "root=$rootdev rw console=$console,$baudrate $othbootargs\0" \
+ "load_uboot=tftp 100000 u-boot-nand.bin\0" \
+ "burn_uboot=nand erase u-boot 80000; " \
+ "nand write 100000 u-boot $filesize\0" \
+ "update_uboot=run load_uboot;run burn_uboot\0" \
+ "mtdids=nand0=nand0\0" \
+ "mtdparts=mtdparts=nand0:2M(u-boot),6M(kernel),-(jffs2)\0" \
+ "nfsargs=setenv bootargs root=/dev/nfs rw " \
+ "nfsroot=${serverip}:${rootpath}\0" \
+ "ramargs=setenv bootargs root=/dev/ram rw\0" \
+ "addip=setenv bootargs ${bootargs} " \
+ "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}" \
+ ":${hostname}:${netdev}:off panic=1\0" \
+ "addtty=setenv bootargs ${bootargs} console=ttyS0,${baudrate}\0" \
+ "bootargs=root=/dev/mtdblock2 rootfstype=jffs2 rw " \
+ "console=ttyS0,115200\0" \
+ ""
+
+#define CONFIG_NFSBOOTCOMMAND \
+ "setenv rootdev /dev/nfs;" \
+ "run setbootargs;" \
+ "run setipargs;" \
+ "tftp $loadaddr $bootfile;" \
+ "tftp $fdtaddr $fdtfile;" \
+ "bootm $loadaddr - $fdtaddr"
+
+#define CONFIG_RAMBOOTCOMMAND \
+ "setenv rootdev /dev/ram;" \
+ "run setbootargs;" \
+ "tftp $ramdiskaddr $ramdiskfile;" \
+ "tftp $loadaddr $bootfile;" \
+ "tftp $fdtaddr $fdtfile;" \
+ "bootm $loadaddr $ramdiskaddr $fdtaddr"
+
+#undef MK_STR
+#undef XMK_STR
+
+#endif /* __CONFIG_H */
diff --git a/nand_spl/board/sheldon/simpc8313/Makefile b/nand_spl/board/sheldon/simpc8313/Makefile
new file mode 100644
index 0000000..3044b5d
--- /dev/null
+++ b/nand_spl/board/sheldon/simpc8313/Makefile
@@ -0,0 +1,101 @@
+#
+# (C) Copyright 2007
+# Stefan Roese, DENX Software Engineering, sr(a)denx.de.
+# (C) Copyright 2008 Freescale Semiconductor
+# (C) Copyright Sheldon Instruments, Inc. 2008
+#
+# 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
+#
+
+NAND_SPL := y
+TEXT_BASE := 0xfff00000
+
+include $(TOPDIR)/config.mk
+
+LDSCRIPT= $(TOPDIR)/nand_spl/board/$(BOARDDIR)/u-boot.lds
+LDFLAGS = -Bstatic -T $(LDSCRIPT) -Ttext $(TEXT_BASE) $(PLATFORM_LDFLAGS)
+AFLAGS += -DCONFIG_NAND_SPL
+CFLAGS += -DCONFIG_NAND_SPL
+
+SOBJS = start.o ticks.o
+COBJS = nand_boot_fsl_elbc.o $(BOARD).o sdram.o ns16550.o nand_init.o time.o
+
+SRCS := $(addprefix $(obj),$(SOBJS:.o=.S) $(COBJS:.o=.c))
+OBJS := $(addprefix $(obj),$(SOBJS) $(COBJS))
+__OBJS := $(SOBJS) $(COBJS)
+LNDIR := $(OBJTREE)/nand_spl/board/$(BOARDDIR)
+
+nandobj := $(OBJTREE)/nand_spl/
+
+ALL = $(nandobj)u-boot-spl $(nandobj)u-boot-spl.bin $(nandobj)u-boot-spl-16k.bin
+
+all: $(obj).depend $(ALL)
+
+$(nandobj)u-boot-spl-16k.bin: $(nandobj)u-boot-spl
+ $(OBJCOPY) ${OBJCFLAGS} --pad-to=$(PAD_TO) -O binary $< $@
+
+$(nandobj)u-boot-spl.bin: $(nandobj)u-boot-spl
+ $(OBJCOPY) ${OBJCFLAGS} -O binary $< $@
+
+$(nandobj)u-boot-spl: $(OBJS)
+ cd $(LNDIR) && $(LD) $(LDFLAGS) $(__OBJS) \
+ -Map $(nandobj)u-boot-spl.map \
+ -o $(nandobj)u-boot-spl
+
+# create symbolic links for common files
+
+$(obj)start.S:
+ ln -sf $(SRCTREE)/cpu/mpc83xx/start.S $(obj)start.S
+
+$(obj)nand_boot_fsl_elbc.c:
+ ln -sf $(SRCTREE)/nand_spl/nand_boot_fsl_elbc.c \
+ $(obj)nand_boot_fsl_elbc.c
+
+$(obj)sdram.c:
+ ln -sf $(SRCTREE)/board/$(BOARDDIR)/sdram.c $(obj)sdram.c
+
+$(obj)$(BOARD).c:
+ ln -sf $(SRCTREE)/board/$(BOARDDIR)/$(BOARD).c $(obj)$(BOARD).c
+
+$(obj)ns16550.c:
+ ln -sf $(SRCTREE)/drivers/serial/ns16550.c $(obj)ns16550.c
+
+$(obj)nand_init.c:
+ ln -sf $(SRCTREE)/cpu/mpc83xx/nand_init.c $(obj)nand_init.c
+
+$(obj)time.c:
+ ln -sf $(SRCTREE)/lib_ppc/time.c $(obj)time.c
+
+$(obj)ticks.S:
+ ln -sf $(SRCTREE)/lib_ppc/ticks.S $(obj)ticks.S
+
+#########################################################################
+
+$(obj)%.o: $(obj)%.S
+ $(CC) $(AFLAGS) -c -o $@ $<
+
+$(obj)%.o: $(obj)%.c
+ $(CC) $(CFLAGS) -c -o $@ $<
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/nand_spl/board/sheldon/simpc8313/u-boot.lds b/nand_spl/board/sheldon/simpc8313/u-boot.lds
new file mode 100644
index 0000000..40c4145
--- /dev/null
+++ b/nand_spl/board/sheldon/simpc8313/u-boot.lds
@@ -0,0 +1,52 @@
+/*
+ * (C) Copyright 2006
+ * Wolfgang Denk, DENX Software Engineering, wd(a)denx.de.
+ *
+ * Copyright 2008 Freescale Semiconductor, Inc.
+ *
+ * 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
+ */
+
+OUTPUT_ARCH(powerpc)
+SECTIONS
+{
+ . = 0xfff00000;
+ .text : {
+ *(.text*)
+ . = ALIGN(16);
+ *(.rodata*)
+ *(.eh_frame)
+ }
+
+ . = ALIGN(8);
+ .data : {
+ *(.data*)
+ *(.sdata*)
+ _GOT2_TABLE_ = .;
+ *(.got2)
+ __got2_entries = (. - _GOT2_TABLE_) >> 2;
+ }
+
+ . = ALIGN(8);
+ __bss_start = .;
+ .bss (NOLOAD) : { *(.*bss) }
+ _end = .;
+}
+ENTRY(_start)
+ASSERT(_end <= 0xfff01000, "NAND bootstrap too big");
--
1.5.5.1
2
1

14 Nov '08
Practicing Physicians in America
Physicians in many different specialties
you can sort by many different fields like primary or secondary specialty
Price for new customers - $394
!!!!!!! Included in the package are the four databases listed here: !!!!!!!
-> Dentists
-> Veterinarians
-> Physical Therapists
-> Visiting Nurses & RN's
email to:: Boggs(a)medcontactdata.com
exp. Nov 14 ~~~~~~~~~~~~~~~~~~~~ By emailing empty(a)medcontactdata.com you will have your email taken off
1
0
I am trying to boot kernel 2.6.23 on an MPC8572DS board.
It hangs on a bootm command after decompressing the kernel and the rootfs. I
added some printings to u-boot where I can see that it transfers control to
the kernel (can be seen in the attached file).
What could be the problem?
2
4

[U-Boot] [PATCH-OMAP3] OMAP3: Fix broken NAND ECC HW switch
by dirk.behmeï¼ googlemail.com 14 Nov '08
by dirk.behmeï¼ googlemail.com 14 Nov '08
14 Nov '08
Fix broken NAND ECC HW switch and invert logic of if(!hardware) for easier
reading.
Signed-off-by: Dirk Behme <dirk.behme(a)gmail.com>
---
drivers/mtd/nand/omap_gpmc.c | 21 ++++++++++++++++-----
1 files changed, 16 insertions(+), 5 deletions(-)
Index: u-boot-arm/drivers/mtd/nand/omap_gpmc.c
===================================================================
--- u-boot-arm.orig/drivers/mtd/nand/omap_gpmc.c
+++ u-boot-arm/drivers/mtd/nand/omap_gpmc.c
@@ -255,12 +255,17 @@ void omap_nand_switch_ecc(int32_t hardwa
nand->options = NAND_NO_PADDING | NAND_CACHEPRG | NAND_NO_AUTOINCR |
NAND_NO_AUTOINCR;
+ /* Reset ecc interface */
+ nand->ecc.read_page = NULL;
+ nand->ecc.write_page = NULL;
+ nand->ecc.read_oob = NULL;
+ nand->ecc.write_oob = NULL;
+ nand->ecc.hwctl = NULL;
+ nand->ecc.correct = NULL;
+ nand->ecc.calculate = NULL;
+
/* Setup the ecc configurations again */
- if (!hardware) {
- nand->ecc.mode = NAND_ECC_SOFT;
- /* Use mtd default settings */
- nand->ecc.layout = NULL;
- } else {
+ if (hardware) {
nand->ecc.mode = NAND_ECC_HW;
nand->ecc.layout = &hw_nand_oob;
nand->ecc.size = 512;
@@ -269,6 +274,12 @@ void omap_nand_switch_ecc(int32_t hardwa
nand->ecc.correct = omap_correct_data;
nand->ecc.calculate = omap_calculate_ecc;
omap_hwecc_init(nand);
+ printf("HW ECC selected\n");
+ } else {
+ nand->ecc.mode = NAND_ECC_SOFT;
+ /* Use mtd default settings */
+ nand->ecc.layout = NULL;
+ printf("SW ECC selected\n");
}
/* Update NAND handling after ECC mode switch */
2
1

14 Nov '08
Clean up system info:
- Move board dependent config to board header
- Clean up code and remove unused code
Signed-off-by: Dirk Behme <dirk.behme(a)gmail.com>
---
board/omap3/beagle/beagle.h | 6 +
board/omap3/evm/evm.h | 6 +
board/omap3/overo/overo.h | 6 +
cpu/arm_cortexa8/omap3/board.c | 7 +-
cpu/arm_cortexa8/omap3/sys_info.c | 102 ++++-----------------------------
include/asm-arm/arch-omap3/sys_proto.h | 4 -
6 files changed, 39 insertions(+), 92 deletions(-)
Index: u-boot-arm/board/omap3/beagle/beagle.h
===================================================================
--- u-boot-arm.orig/board/omap3/beagle/beagle.h
+++ u-boot-arm/board/omap3/beagle/beagle.h
@@ -26,8 +26,14 @@
const omap3_sysinfo sysinfo = {
SDP_3430_V1,
SDP_3430_V2,
+ DDR_STACKED,
"3530",
"OMAP3 Beagle board",
+#if defined(CONFIG_ENV_IS_IN_ONENAND)
+ "OneNAND",
+#else
+ "NAND",
+#endif
};
/*
Index: u-boot-arm/board/omap3/evm/evm.h
===================================================================
--- u-boot-arm.orig/board/omap3/evm/evm.h
+++ u-boot-arm/board/omap3/evm/evm.h
@@ -26,8 +26,14 @@
const omap3_sysinfo sysinfo = {
OMAP3EVM_V1,
OMAP3EVM_V2,
+ DDR_DISCRETE,
"35X-Family",
"OMAP3 EVM board",
+#if defined(CONFIG_ENV_IS_IN_ONENAND)
+ "OneNAND",
+#else
+ "NAND",
+#endif
};
static int setup_net_chip(void);
Index: u-boot-arm/board/omap3/overo/overo.h
===================================================================
--- u-boot-arm.orig/board/omap3/overo/overo.h
+++ u-boot-arm/board/omap3/overo/overo.h
@@ -26,8 +26,14 @@
const omap3_sysinfo sysinfo = {
SDP_3430_V1,
SDP_3430_V2,
+ DDR_STACKED,
"3503",
"Gumstix Overo board",
+#if defined(CONFIG_ENV_IS_IN_ONENAND)
+ "OneNAND",
+#else
+ "NAND",
+#endif
};
/*
Index: u-boot-arm/cpu/arm_cortexa8/omap3/board.c
===================================================================
--- u-boot-arm.orig/cpu/arm_cortexa8/omap3/board.c
+++ u-boot-arm/cpu/arm_cortexa8/omap3/board.c
@@ -44,6 +44,8 @@
#define UNLOCK_2 0x00000000
#define UNLOCK_3 0x0000FFFF
+extern omap3_sysinfo sysinfo;
+
/******************************************************************************
* Routine: delay
* Description: spinning delay to use before udelay works
@@ -265,10 +267,9 @@ int dram_init(void)
{
DECLARE_GLOBAL_DATA_PTR;
unsigned int size0 = 0, size1 = 0;
- u32 mtype, btype;
+ u32 btype;
btype = get_board_type();
- mtype = get_mem_type();
display_board_info(btype);
@@ -277,7 +278,7 @@ int dram_init(void)
* where it can be started. Early init code will init
* memory on CS0.
*/
- if ((mtype == DDR_COMBO) || (mtype == DDR_STACKED)) {
+ if ((sysinfo.mtype == DDR_COMBO) || (sysinfo.mtype == DDR_STACKED)) {
do_sdrc_init(SDRC_CS1_OSET, NOT_EARLY);
make_cs1_contiguous();
}
Index: u-boot-arm/cpu/arm_cortexa8/omap3/sys_info.c
===================================================================
--- u-boot-arm.orig/cpu/arm_cortexa8/omap3/sys_info.c
+++ u-boot-arm/cpu/arm_cortexa8/omap3/sys_info.c
@@ -34,28 +34,6 @@
extern omap3_sysinfo sysinfo;
static u32 *gpmc_base = (u32 *)GPMC_BASE;
-/**************************************************************************
- * get_gpmc0_type()
- ***************************************************************************/
-u32 get_gpmc0_type(void)
-{
-#if defined(CONFIG_ENV_IS_IN_ONENAND)
- return 1; /* OneNAND */
-#else
- return 2; /* NAND */
-#endif
-}
-
-/****************************************************
- * get_cpu_type() - low level get cpu type
- * - no C globals yet.
- ****************************************************/
-u32 get_cpu_type(void)
-{
- /* fixme, need to get register defines for OMAP3 */
- return CPU_3430;
-}
-
/******************************************
* get_cpu_rev(void) - extract version info
******************************************/
@@ -81,24 +59,11 @@ u32 get_cpu_rev(void)
****************************************************/
u32 is_mem_sdr(void)
{
- volatile u32 *burst = (volatile u32 *) (SDRC_MR_0 + SDRC_CS0_OSET);
- if (*burst == SDP_SDRC_MR_0_SDR)
+ if (readl(SDRC_MR_0 + SDRC_CS0_OSET) == SDP_SDRC_MR_0_SDR)
return 1;
return 0;
}
-/***********************************************************
- * get_mem_type() - identify type of mDDR part used.
- ***********************************************************/
-u32 get_mem_type(void)
-{
-#if defined(CONFIG_OMAP3_BEAGLE) || defined(CONFIG_OVERO)
- return DDR_STACKED;
-#else
- return DDR_DISCRETE;
-#endif
-}
-
/***********************************************************************
* get_cs0_size() - get size of chip select 0/1
************************************************************************/
@@ -189,68 +154,34 @@ u32 get_board_rev(void)
*********************************************************************/
void display_board_info(u32 btype)
{
- char *bootmode[] = {
- "NOR",
- "ONENAND",
- "NAND",
- "P2a",
- "NOR",
- "NOR",
- "P2a",
- "P2b",
- };
- u32 brev = get_board_rev();
- char db_ver[] = "0.0"; /* board type */
- char mem_sdr[] = "mSDR"; /* memory type */
- char mem_ddr[] = "LPDDR";
- char t_tst[] = "TST"; /* security level */
- char t_emu[] = "EMU";
- char t_hs[] = "HS";
- char t_gp[] = "GP";
- char unk[] = "?";
-#ifdef CONFIG_LED_INFO
- char led_string[CONFIG_LED_LEN] = { 0 };
-#endif
- char p_l3[] = "165";
- char p_cpu[] = "2";
-
- char *db_s, *mem_s, *sec_s;
- u32 cpu, rev, sec;
-
- rev = get_cpu_rev();
- cpu = get_cpu_type();
- sec = get_device_type();
+ char *mem_s, *sec_s;
if (is_mem_sdr())
- mem_s = mem_sdr;
+ mem_s = "mSDR";
else
- mem_s = mem_ddr;
+ mem_s = "LPDDR";
- db_s = db_ver;
- db_s[0] += (brev >> 4) & 0xF;
- db_s[2] += brev & 0xF;
-
- switch (sec) {
+ switch (get_device_type()) {
case TST_DEVICE:
- sec_s = t_tst;
+ sec_s = "TST";
break;
case EMU_DEVICE:
- sec_s = t_emu;
+ sec_s = "EMU";
break;
case HS_DEVICE:
- sec_s = t_hs;
+ sec_s = "HS";
break;
case GP_DEVICE:
- sec_s = t_gp;
+ sec_s = "GP";
break;
default:
- sec_s = unk;
+ sec_s = "?";
}
- printf("OMAP%s-%s rev %d, CPU-OPP%s L3-%sMHz\n", sysinfo.cpu_string,
- sec_s, rev, p_cpu, p_l3);
+ printf("OMAP%s-%s rev %d, CPU-OPP2 L3-165MHz\n", sysinfo.cpu_string,
+ sec_s, get_cpu_rev());
printf("%s + %s/%s\n", sysinfo.board_string,
- mem_s, bootmode[get_gpmc0_type()]);
+ mem_s, sysinfo.nand_string);
}
@@ -305,7 +236,7 @@ u32 is_running_in_sdram(void)
/***************************************************************
* get_boot_type() - Is this an XIP type device or a stream one
- * bits 4-0 specify type. Bit 5 sys mem/perif
+ * bits 4-0 specify type. Bit 5 says mem/perif
***************************************************************/
u32 get_boot_type(void)
{
@@ -317,8 +248,5 @@ u32 get_boot_type(void)
*************************************************************/
u32 get_device_type(void)
{
- int mode;
-
- mode = readl(CONTROL_STATUS) & (DEVICE_MASK);
- return mode >>= 8;
+ return ((readl(CONTROL_STATUS) & (DEVICE_MASK)) >> 8);
}
Index: u-boot-arm/include/asm-arm/arch-omap3/sys_proto.h
===================================================================
--- u-boot-arm.orig/include/asm-arm/arch-omap3/sys_proto.h
+++ u-boot-arm/include/asm-arm/arch-omap3/sys_proto.h
@@ -24,8 +24,10 @@
typedef struct {
u32 board_type_v1;
u32 board_type_v2;
+ u32 mtype;
char *cpu_string;
char *board_string;
+ char *nand_string;
} omap3_sysinfo;
void prcm_init(void);
@@ -39,11 +41,9 @@ void gpmc_init(void);
void watchdog_init(void);
void set_muxconf_regs(void);
-u32 get_cpu_type(void);
u32 get_cpu_rev(void);
u32 get_mem_type(void);
u32 get_sysboot_value(void);
-u32 get_gpmc0_base(void);
u32 is_gpmc_muxed(void);
u32 get_gpmc0_type(void);
u32 get_gpmc0_width(void);
2
1
Hi all,
I'd like to use the flash JS28F256P33B95, are there problems with the
uboot? The flash is asymmetric: 255 sectors of 128kb and the last sector
splitted in 4*32kb. What is the best uboot configuration to use that? Do
I have to set CFG_MAX_FLASH_SECT to 255 or 256? I'd like to use the
bottom of the flash to deploy the environment but how can I set the
uboot to perform that?
Thanks.
Regards,
Marco
1
0
I've upgrade the capacity of Ram size from 256M to 512M on my custom board
based on SEQUOIA.
(U-boot Version:2008.10-rc2)
I built a ramdisk image which is 72MB.( Also, I modified rd_size to 73728)
When I boot up my board, I've got a message like below.
.
.
RAMDISK: Compressed image found at block 0
crc error
EXT2-fs warning: mounting unchecked fs, running e2fsck is recommended
.
.
Why does "crc error" occur??
If I use ramdisk image which is 4MB, "crc error" is not appeared.
And also if I use u-boot for 256MB on 512MB board, "crc error" is not
appeared.
Here are my U-boot source which I modified to upgrade memory.
Sequoia.h
#define CFG_MBYTES_SDRAM (512)
Sdram.c
Everything Related DDR Control Register
Init.s
tlbentry( CFG_SDRAM_BASE_2nd, SZ_256M, CFG_SDRAM_BASE_2nd, 0,
AC_R|AC_W|AC_X|SA_G|SA_I )
amcc-common.h
#define CFG_SDRAM_BASE_2nd 0x10000000
Thanks.
2
1

[U-Boot] [PATCH] Added support for TMQ CAPD Board from Genesys Design <www.genesysdesign.com.au>
by Jared Holzman 14 Nov '08
by Jared Holzman 14 Nov '08
14 Nov '08
---
Makefile | 3 +
board/tmq/tmq_capd/Makefile | 61 +++
board/tmq/tmq_capd/config.mk | 1 +
board/tmq/tmq_capd/led.c | 56 +++
board/tmq/tmq_capd/nand.c | 83 +++++
board/tmq/tmq_capd/tmq_capd.c | 259 +++++++++++++
include/asm-arm/mach-types.h | 808 ++++++++++++++++++++++++++++++++++++++++-
include/configs/tmq_capd.h | 165 +++++++++
tools/Makefile | 3 +
tools/logos/tmqlogo.bmp | Bin 0 -> 20254 bytes
10 files changed, 1438 insertions(+), 1 deletions(-)
create mode 100644 board/tmq/tmq_capd/Makefile
create mode 100644 board/tmq/tmq_capd/config.mk
create mode 100644 board/tmq/tmq_capd/led.c
create mode 100644 board/tmq/tmq_capd/nand.c
create mode 100644 board/tmq/tmq_capd/tmq_capd.c
create mode 100644 include/configs/tmq_capd.h
create mode 100644 tools/logos/tmqlogo.bmp
diff --git a/Makefile b/Makefile
index e4a184f..dae3903 100644
--- a/Makefile
+++ b/Makefile
@@ -2587,6 +2587,9 @@ at91sam9263ek_config : unconfig
at91sam9rlek_config : unconfig
@$(MKCONFIG) $(@:_config=) arm arm926ejs at91sam9rlek atmel at91
+tmq_capd_config : unconfig
+ @$(MKCONFIG) $(@:_config=) arm arm926ejs tmq_capd tmq at91
+
########################################################################
## ARM Integrator boards - see doc/README-integrator for more info.
integratorap_config \
diff --git a/board/tmq/tmq_capd/Makefile b/board/tmq/tmq_capd/Makefile
new file mode 100644
index 0000000..3eee33a
--- /dev/null
+++ b/board/tmq/tmq_capd/Makefile
@@ -0,0 +1,61 @@
+#
+# (C) Copyright 2008-2009
+# Jared Holzman <j.holzman(a)genesysdesign.com.au>
+# Genesys Design <www.genesysdesign.com.au>
+# Copied from code by Stelian Pop (Original Copyright Below)
+#
+# (C) Copyright 2003-2008
+# Wolfgang Denk, DENX Software Engineering, wd(a)denx.de.
+#
+# (C) Copyright 2008
+# Stelian Pop <stelian.pop(a)leadtechdesign.com>
+# Lead Tech Design <www.leadtechdesign.com>
+#
+# 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-y += tmq_capd.o
+COBJS-y += led.o
+COBJS-$(CONFIG_CMD_NAND) += nand.o
+
+SRCS := $(SOBJS:.o=.S) $(COBJS-y:.o=.c)
+OBJS := $(addprefix $(obj),$(COBJS-y))
+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 $(obj).depend
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/board/tmq/tmq_capd/config.mk b/board/tmq/tmq_capd/config.mk
new file mode 100644
index 0000000..9ce161e
--- /dev/null
+++ b/board/tmq/tmq_capd/config.mk
@@ -0,0 +1 @@
+TEXT_BASE = 0x21f00000
diff --git a/board/tmq/tmq_capd/led.c b/board/tmq/tmq_capd/led.c
new file mode 100644
index 0000000..38acdd5
--- /dev/null
+++ b/board/tmq/tmq_capd/led.c
@@ -0,0 +1,56 @@
+/*
+ * (C) Copyright 2008-2009
+ * Jared Holzman <j.holzman(a)genesysdesign.com.au>
+ * Genesys Design <www.genesysdesign.com.au>
+ * Copied from code by Stelian Pop (Original Copyright Below)
+ *
+ * (C) Copyright 2007-2008
+ * Stelian Pop <stelian.pop(a)leadtechdesign.com>
+ * Lead Tech Design <www.leadtechdesign.com>
+ *
+ * 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 <common.h>
+#include <asm/arch/at91sam9263.h>
+#include <asm/arch/at91_pmc.h>
+#include <asm/arch/gpio.h>
+#include <asm/arch/io.h>
+
+#define RED_LED AT91_PIN_PE16 /* this is the power led */
+
+void red_LED_on(void)
+{
+ at91_set_gpio_value(RED_LED, 1);
+}
+
+void red_LED_off(void)
+{
+ at91_set_gpio_value(RED_LED, 0);
+}
+
+void coloured_LED_init(void)
+{
+ /* Enable clock */
+ at91_sys_write(AT91_PMC_PCER, 1 << AT91SAM9263_ID_PIOCDE);
+
+ at91_set_gpio_output(RED_LED, 1);
+
+ at91_set_gpio_value(RED_LED, 0);
+}
diff --git a/board/tmq/tmq_capd/nand.c b/board/tmq/tmq_capd/nand.c
new file mode 100644
index 0000000..2ac4cc7
--- /dev/null
+++ b/board/tmq/tmq_capd/nand.c
@@ -0,0 +1,83 @@
+/*
+ * (C) Copyright 2008-2009
+ * Jared Holzman <j.holzman(a)genesysdesign.com.au>
+ * Genesys Design <www.genesysdesign.com.au>
+ * Copied from code by Stelian Pop (Original Copyright Below)
+ *
+ * (C) Copyright 2007-2008
+ * Stelian Pop <stelian.pop(a)leadtechdesign.com>
+ * Lead Tech Design <www.leadtechdesign.com>
+ *
+ * (C) Copyright 2006 ATMEL Rousset, Lacressonniere Nicolas
+ *
+ * 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 <common.h>
+#include <asm/arch/at91sam9263.h>
+#include <asm/arch/gpio.h>
+#include <asm/arch/at91_pio.h>
+
+#include <nand.h>
+
+/*
+ * hardware specific access to control-lines
+ */
+#define MASK_ALE (1 << 21) /* our ALE is AD21 */
+#define MASK_CLE (1 << 22) /* our CLE is AD22 */
+
+static void capd_nand_hwcontrol(struct mtd_info *mtd,
+ int cmd, unsigned int ctrl)
+{
+ struct nand_chip *this = mtd->priv;
+
+ if (ctrl & NAND_CTRL_CHANGE) {
+ ulong IO_ADDR_W = (ulong) this->IO_ADDR_W;
+ IO_ADDR_W &= ~(MASK_ALE | MASK_CLE);
+
+ if (ctrl & NAND_CLE)
+ IO_ADDR_W |= MASK_CLE;
+ if (ctrl & NAND_ALE)
+ IO_ADDR_W |= MASK_ALE;
+
+ at91_set_gpio_value(AT91_PIN_PD15, !(ctrl & NAND_NCE));
+ this->IO_ADDR_W = (void *) IO_ADDR_W;
+ }
+
+ if (cmd != NAND_CMD_NONE)
+ writeb(cmd, this->IO_ADDR_W);
+}
+
+static int capd_nand_ready(struct mtd_info *mtd)
+{
+ return at91_get_gpio_value(AT91_PIN_PA22);
+}
+
+int board_nand_init(struct nand_chip *nand)
+{
+ nand->ecc.mode = NAND_ECC_SOFT;
+#ifdef CONFIG_SYS_NAND_DBW_16
+ nand->options = NAND_BUSWIDTH_16;
+#endif
+ nand->cmd_ctrl = capd_nand_hwcontrol;
+ nand->dev_ready = capd_nand_ready;
+ nand->chip_delay = 20;
+
+ return 0;
+}
diff --git a/board/tmq/tmq_capd/tmq_capd.c b/board/tmq/tmq_capd/tmq_capd.c
new file mode 100644
index 0000000..d59cf86
--- /dev/null
+++ b/board/tmq/tmq_capd/tmq_capd.c
@@ -0,0 +1,259 @@
+/*
+ * (C) Copyright 2008-2009
+ * Jared Holzman <j.holzman(a)genesysdesign.com.au>
+ * Genesys Design <www.genesysdesign.com.au>
+ * Copied from code by Stelian Pop (Original Copyright Below)
+ *
+ * (C) Copyright 2007-2008
+ * Stelian Pop <stelian.pop(a)leadtechdesign.com>
+ * Lead Tech Design <www.leadtechdesign.com>
+ *
+ * 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 <common.h>
+#include <asm/sizes.h>
+#include <asm/arch/at91sam9263.h>
+#include <asm/arch/at91sam9263_matrix.h>
+#include <asm/arch/at91sam9_smc.h>
+#include <asm/arch/at91_pmc.h>
+#include <asm/arch/at91_rstc.h>
+#include <asm/arch/gpio.h>
+#include <asm/arch/io.h>
+#include <lcd.h>
+#include <atmel_lcdc.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+/* ------------------------------------------------------------------------- */
+/*
+ * Miscelaneous platform dependent initialisations
+ */
+
+static void capd_serial_hw_init(void)
+{
+#ifdef CONFIG_USART0
+ at91_set_A_periph(AT91_PIN_PA26, 1); /* TXD0 */
+ at91_set_A_periph(AT91_PIN_PA27, 0); /* RXD0 */
+ at91_sys_write(AT91_PMC_PCER, 1 << AT91_ID_US0);
+#endif
+
+#ifdef CONFIG_USART1
+ at91_set_A_periph(AT91_PIN_PD0, 1); /* TXD1 */
+ at91_set_A_periph(AT91_PIN_PD1, 0); /* RXD1 */
+ at91_sys_write(AT91_PMC_PCER, 1 << AT91_ID_US1);
+#endif
+
+#ifdef CONFIG_USART2
+ at91_set_A_periph(AT91_PIN_PD2, 1); /* TXD2 */
+ at91_set_A_periph(AT91_PIN_PD3, 0); /* RXD2 */
+ at91_sys_write(AT91_PMC_PCER, 1 << AT91_ID_US2);
+#endif
+
+#ifdef CONFIG_USART3 /* DBGU */
+ at91_set_A_periph(AT91_PIN_PC30, 0); /* DRXD */
+ at91_set_A_periph(AT91_PIN_PC31, 1); /* DTXD */
+ at91_sys_write(AT91_PMC_PCER, 1 << AT91_ID_SYS);
+#endif
+}
+
+#ifdef CONFIG_CMD_NAND
+static void capd_nand_hw_init(void)
+{
+ unsigned long csa;
+
+ /* Enable CS3 */
+ csa = at91_sys_read(AT91_MATRIX_EBI0CSA);
+ at91_sys_write(AT91_MATRIX_EBI0CSA,
+ csa | AT91_MATRIX_EBI0_CS3A_SMC_SMARTMEDIA);
+
+ /* Configure SMC CS3 for NAND/SmartMedia */
+ at91_sys_write(AT91_SMC_SETUP(3),
+ AT91_SMC_NWESETUP_(1) | AT91_SMC_NCS_WRSETUP_(0) |
+ AT91_SMC_NRDSETUP_(1) | AT91_SMC_NCS_RDSETUP_(0));
+ at91_sys_write(AT91_SMC_PULSE(3),
+ AT91_SMC_NWEPULSE_(3) | AT91_SMC_NCS_WRPULSE_(3) |
+ AT91_SMC_NRDPULSE_(3) | AT91_SMC_NCS_RDPULSE_(3));
+ at91_sys_write(AT91_SMC_CYCLE(3),
+ AT91_SMC_NWECYCLE_(5) | AT91_SMC_NRDCYCLE_(5));
+ at91_sys_write(AT91_SMC_MODE(3),
+ AT91_SMC_READMODE | AT91_SMC_WRITEMODE |
+ AT91_SMC_EXNWMODE_DISABLE |
+#ifdef CONFIG_SYS_NAND_DBW_16
+ AT91_SMC_DBW_16 |
+#else /* CONFIG_NAND_DBW_8 */
+ AT91_SMC_DBW_8 |
+#endif
+ AT91_SMC_TDF_(2));
+
+ at91_sys_write(AT91_PMC_PCER, 1 << AT91SAM9263_ID_PIOA |
+ 1 << AT91SAM9263_ID_PIOCDE);
+
+ /* Configure RDY/BSY */
+ at91_set_gpio_input(AT91_PIN_PA22, 1);
+
+ /* Enable NandFlash */
+ at91_set_gpio_output(AT91_PIN_PD15, 1);
+}
+#endif
+
+#ifdef CONFIG_USB_OHCI_NEW
+static void capd_uhp_hw_init(void)
+{
+ /* Enable VBus on UHP ports */
+ at91_set_gpio_output(AT91_PIN_PA21, 0);
+ at91_set_gpio_output(AT91_PIN_PA24, 0);
+
+#ifdef SP2526_1_FITTED //SP2526-1 is Active High
+ at91_set_gpio_value(AT91_PIN_PA21, 1);
+ at91_set_gpio_value(AT91_PIN_PA24, 1);
+#else
+ at91_set_gpio_value(AT91_PIN_PA21, 0);
+ at91_set_gpio_value(AT91_PIN_PA24, 0);
+#endif
+
+
+}
+#endif
+
+#ifdef CONFIG_LCD
+//Settings for the ET057003DM6 LCD
+vidinfo_t panel_info = {
+ vl_col: 320,
+ vl_row: 240,
+ vl_clk: 5406000,
+ vl_sync: ATMEL_LCDC_INVCLK_INVERTED,
+ vl_bpix: 3,
+ vl_tft: 1,
+ vl_hsync_len: 30,
+ vl_left_margin: 38,
+ vl_right_margin:20,
+ vl_vsync_len: 5,
+ vl_upper_margin:15,
+ vl_lower_margin:5,
+ mmio: AT91SAM9263_LCDC_BASE,
+};
+
+void lcd_enable(void)
+{
+ at91_set_gpio_value(AT91_PIN_PA30, 1); /* power up */
+}
+
+void lcd_disable(void)
+{
+ at91_set_gpio_value(AT91_PIN_PA30, 0); /* power down */
+}
+
+static void capd_lcd_hw_init(void)
+{
+ at91_set_A_periph(AT91_PIN_PC0, 0); /* LCDVSYNC */
+ at91_set_A_periph(AT91_PIN_PC1, 0); /* LCDHSYNC */
+ at91_set_A_periph(AT91_PIN_PC2, 0); /* LCDDOTCK */
+ at91_set_A_periph(AT91_PIN_PC3, 0); /* LCDDEN */
+ at91_set_A_periph(AT91_PIN_PC4, 0); /* LCDD0 */
+ at91_set_A_periph(AT91_PIN_PC5, 0); /* LCDD1 */
+ at91_set_A_periph(AT91_PIN_PC6, 0); /* LCDD2 */
+ at91_set_A_periph(AT91_PIN_PC7, 0); /* LCDD3 */
+ at91_set_A_periph(AT91_PIN_PC8, 0); /* LCDD4 */
+ at91_set_A_periph(AT91_PIN_PC9, 0); /* LCDD5 */
+ at91_set_A_periph(AT91_PIN_PC10, 0); /* LCDD6 */
+ at91_set_A_periph(AT91_PIN_PC11, 0); /* LCDD7 */
+ at91_set_A_periph(AT91_PIN_PC12, 0); /* LCDD8 */
+ at91_set_A_periph(AT91_PIN_PC13, 0); /* LCDD9 */
+ at91_set_A_periph(AT91_PIN_PC14, 0); /* LCDD10 */
+ at91_set_A_periph(AT91_PIN_PC15, 0); /* LCDD11 */
+ at91_set_A_periph(AT91_PIN_PC16, 0); /* LCDD12 */
+ at91_set_A_periph(AT91_PIN_PC17, 0); /* LCDD13 */
+ at91_set_A_periph(AT91_PIN_PC18, 0); /* LCDD14 */
+ at91_set_A_periph(AT91_PIN_PC19, 0); /* LCDD15 */
+ at91_set_A_periph(AT91_PIN_PC20, 0); /* LCDD16 */
+ at91_set_A_periph(AT91_PIN_PC21, 0); /* LCDD17 */
+ at91_set_A_periph(AT91_PIN_PC22, 0); /* LCDD18 */
+ at91_set_A_periph(AT91_PIN_PC23, 0); /* LCDD19 */
+ at91_set_A_periph(AT91_PIN_PC24, 0); /* LCDD20 */
+ at91_set_A_periph(AT91_PIN_PC25, 0); /* LCDD21 */
+ at91_set_A_periph(AT91_PIN_PC26, 0); /* LCDD22 */
+ at91_set_A_periph(AT91_PIN_PC27, 0); /* LCDD23 */
+
+ at91_set_B_periph(AT91_PIN_PB9, 0); /* LCDCC */
+
+ at91_sys_write(AT91_PMC_PCER, 1 << AT91SAM9263_ID_LCDC);
+
+ gd->fb_base = AT91SAM9263_SRAM0_BASE;
+}
+
+#ifdef CONFIG_LCD_INFO
+#include <nand.h>
+#include <version.h>
+
+void lcd_show_board_info(void)
+{
+ ulong dram_size, nand_size;
+ int i;
+ char temp[32];
+
+ lcd_printf ("%s\n", U_BOOT_VERSION);
+ lcd_printf ("(C) 2008 Genesys Design\n");
+ lcd_printf ("j.holzman(a)genesysdesign.com.au\n");
+ lcd_printf ("%s CPU at %s MHz\n",
+ AT91_CPU_NAME,
+ strmhz(temp, AT91_MAIN_CLOCK));
+
+ dram_size = 0;
+ for (i = 0; i < CONFIG_NR_DRAM_BANKS; i++)
+ dram_size += gd->bd->bi_dram[i].size;
+ nand_size = 0;
+ for (i = 0; i < CONFIG_SYS_MAX_NAND_DEVICE; i++)
+ nand_size += nand_info[i].size;
+ lcd_printf (" %ld MB SDRAM, %ld MB NAND\n",
+ dram_size >> 20,
+ nand_size >> 20 );
+}
+#endif /* CONFIG_LCD_INFO */
+#endif
+
+int board_init(void)
+{
+ /* Enable Ctrlc */
+ console_init_f();
+
+ /* arch number of TMQ CAPD Board */
+ gd->bd->bi_arch_number = MACH_TYPE_TMQ_CAPD;
+ /* adress of boot parameters */
+ gd->bd->bi_boot_params = PHYS_SDRAM + 0x100;
+
+ capd_serial_hw_init();
+#ifdef CONFIG_CMD_NAND
+ capd_nand_hw_init();
+#endif
+#ifdef CONFIG_USB_OHCI_NEW
+ capd_uhp_hw_init();
+#endif
+#ifdef CONFIG_LCD
+ capd_lcd_hw_init();
+#endif
+ return 0;
+}
+
+int dram_init(void)
+{
+ gd->bd->bi_dram[0].start = PHYS_SDRAM;
+ gd->bd->bi_dram[0].size = PHYS_SDRAM_SIZE;
+ return 0;
+}
diff --git a/include/asm-arm/mach-types.h b/include/asm-arm/mach-types.h
index ce6d25f..94ad824 100644
--- a/include/asm-arm/mach-types.h
+++ b/include/asm-arm/mach-types.h
@@ -1,5 +1,5 @@
/*
- * This was automagically generated from arch/arm/tools/mach-types!
+ * This was automagically generated from mach-types!
* Do NOT edit
*/
@@ -1857,6 +1857,68 @@ extern unsigned int __machine_arch_type;
#define MACH_TYPE_IMX27IPCAM 1871
#define MACH_TYPE_NEMOC 1872
#define MACH_TYPE_GENEVA 1873
+#define MACH_TYPE_HTCPHAROS 1874
+#define MACH_TYPE_NEONC 1875
+#define MACH_TYPE_NAS7100 1876
+#define MACH_TYPE_TEUPHONE 1877
+#define MACH_TYPE_ANNAX_ETH2 1878
+#define MACH_TYPE_CSB733 1879
+#define MACH_TYPE_BK3 1880
+#define MACH_TYPE_OMAP_EM32 1881
+#define MACH_TYPE_ET9261CP 1882
+#define MACH_TYPE_JASPERC 1883
+#define MACH_TYPE_ISSI_ARM9 1884
+#define MACH_TYPE_UED 1885
+#define MACH_TYPE_ESIBLADE 1886
+#define MACH_TYPE_EYE02 1887
+#define MACH_TYPE_IMX27KBD 1888
+#define MACH_TYPE_SST61VC010_FPGA 1889
+#define MACH_TYPE_KIXVP435 1890
+#define MACH_TYPE_KIXNP435 1891
+#define MACH_TYPE_AFRICA 1892
+#define MACH_TYPE_NH233 1893
+#define MACH_TYPE_RD88F6183AP_GE 1894
+#define MACH_TYPE_BCM4760 1895
+#define MACH_TYPE_EDDY_V2 1896
+#define MACH_TYPE_REALVIEW_PBA8 1897
+#define MACH_TYPE_HID_A7 1898
+#define MACH_TYPE_HERO 1899
+#define MACH_TYPE_OMAP_POSEIDON 1900
+#define MACH_TYPE_REALVIEW_PBX 1901
+#define MACH_TYPE_MICRO9S 1902
+#define MACH_TYPE_MAKO 1903
+#define MACH_TYPE_XDAFLAME 1904
+#define MACH_TYPE_PHIDGET_SBC2 1905
+#define MACH_TYPE_LIMESTONE 1906
+#define MACH_TYPE_IPROBE_C32 1907
+#define MACH_TYPE_RUT100 1908
+#define MACH_TYPE_ASUSP535 1909
+#define MACH_TYPE_HTCRAPHAEL 1910
+#define MACH_TYPE_SYGDG1 1911
+#define MACH_TYPE_SYGDG2 1912
+#define MACH_TYPE_SEOUL 1913
+#define MACH_TYPE_SALERNO 1914
+#define MACH_TYPE_UCN_S3C64XX 1915
+#define MACH_TYPE_MSM7201A 1916
+#define MACH_TYPE_LPR1 1917
+#define MACH_TYPE_ARMADILLO500FX 1918
+#define MACH_TYPE_G3EVM 1919
+#define MACH_TYPE_Z3_DM355 1920
+#define MACH_TYPE_W90P910EVB 1921
+#define MACH_TYPE_W90P920EVB 1922
+#define MACH_TYPE_W90P950EVB 1923
+#define MACH_TYPE_W90N960EVB 1924
+#define MACH_TYPE_CAMHD 1925
+#define MACH_TYPE_MVC100 1926
+#define MACH_TYPE_ELECTRUM_200 1927
+#define MACH_TYPE_HTCJADE 1928
+#define MACH_TYPE_MEMPHIS 1929
+#define MACH_TYPE_IMX27SBC 1930
+#define MACH_TYPE_LEXTAR 1931
+#define MACH_TYPE_MV88F6281GTW_GE 1932
+#define MACH_TYPE_NCP 1933
+#define MACH_TYPE_Z32AN 1934
+#define MACH_TYPE_TMQ_CAPD 1935
#ifdef CONFIG_ARCH_EBSA110
# ifdef machine_arch_type
@@ -23998,6 +24060,750 @@ extern unsigned int __machine_arch_type;
# define machine_is_geneva() (0)
#endif
+#ifdef CONFIG_MACH_HTCPHAROS
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_HTCPHAROS
+# endif
+# define machine_is_htcpharos() (machine_arch_type == MACH_TYPE_HTCPHAROS)
+#else
+# define machine_is_htcpharos() (0)
+#endif
+
+#ifdef CONFIG_MACH_NEONC
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_NEONC
+# endif
+# define machine_is_neonc() (machine_arch_type == MACH_TYPE_NEONC)
+#else
+# define machine_is_neonc() (0)
+#endif
+
+#ifdef CONFIG_MACH_NAS7100
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_NAS7100
+# endif
+# define machine_is_nas7100() (machine_arch_type == MACH_TYPE_NAS7100)
+#else
+# define machine_is_nas7100() (0)
+#endif
+
+#ifdef CONFIG_MACH_TEUPHONE
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_TEUPHONE
+# endif
+# define machine_is_teuphone() (machine_arch_type == MACH_TYPE_TEUPHONE)
+#else
+# define machine_is_teuphone() (0)
+#endif
+
+#ifdef CONFIG_MACH_ANNAX_ETH2
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_ANNAX_ETH2
+# endif
+# define machine_is_annax_eth2() (machine_arch_type == MACH_TYPE_ANNAX_ETH2)
+#else
+# define machine_is_annax_eth2() (0)
+#endif
+
+#ifdef CONFIG_MACH_CSB733
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_CSB733
+# endif
+# define machine_is_csb733() (machine_arch_type == MACH_TYPE_CSB733)
+#else
+# define machine_is_csb733() (0)
+#endif
+
+#ifdef CONFIG_MACH_BK3
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_BK3
+# endif
+# define machine_is_bk3() (machine_arch_type == MACH_TYPE_BK3)
+#else
+# define machine_is_bk3() (0)
+#endif
+
+#ifdef CONFIG_MACH_OMAP_EM32
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_OMAP_EM32
+# endif
+# define machine_is_omap_em32() (machine_arch_type == MACH_TYPE_OMAP_EM32)
+#else
+# define machine_is_omap_em32() (0)
+#endif
+
+#ifdef CONFIG_MACH_ET9261CP
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_ET9261CP
+# endif
+# define machine_is_et9261cp() (machine_arch_type == MACH_TYPE_ET9261CP)
+#else
+# define machine_is_et9261cp() (0)
+#endif
+
+#ifdef CONFIG_MACH_JASPERC
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_JASPERC
+# endif
+# define machine_is_jasperc() (machine_arch_type == MACH_TYPE_JASPERC)
+#else
+# define machine_is_jasperc() (0)
+#endif
+
+#ifdef CONFIG_MACH_ISSI_ARM9
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_ISSI_ARM9
+# endif
+# define machine_is_issi_arm9() (machine_arch_type == MACH_TYPE_ISSI_ARM9)
+#else
+# define machine_is_issi_arm9() (0)
+#endif
+
+#ifdef CONFIG_MACH_UED
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_UED
+# endif
+# define machine_is_ued() (machine_arch_type == MACH_TYPE_UED)
+#else
+# define machine_is_ued() (0)
+#endif
+
+#ifdef CONFIG_MACH_ESIBLADE
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_ESIBLADE
+# endif
+# define machine_is_esiblade() (machine_arch_type == MACH_TYPE_ESIBLADE)
+#else
+# define machine_is_esiblade() (0)
+#endif
+
+#ifdef CONFIG_MACH_EYE02
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_EYE02
+# endif
+# define machine_is_eye02() (machine_arch_type == MACH_TYPE_EYE02)
+#else
+# define machine_is_eye02() (0)
+#endif
+
+#ifdef CONFIG_MACH_IMX27KBD
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_IMX27KBD
+# endif
+# define machine_is_imx27kbd() (machine_arch_type == MACH_TYPE_IMX27KBD)
+#else
+# define machine_is_imx27kbd() (0)
+#endif
+
+#ifdef CONFIG_MACH_SST61VC010_FPGA
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_SST61VC010_FPGA
+# endif
+# define machine_is_sst61vc010_fpga() (machine_arch_type == MACH_TYPE_SST61VC010_FPGA)
+#else
+# define machine_is_sst61vc010_fpga() (0)
+#endif
+
+#ifdef CONFIG_MACH_KIXVP435
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_KIXVP435
+# endif
+# define machine_is_kixvp435() (machine_arch_type == MACH_TYPE_KIXVP435)
+#else
+# define machine_is_kixvp435() (0)
+#endif
+
+#ifdef CONFIG_MACH_KIXNP435
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_KIXNP435
+# endif
+# define machine_is_kixnp435() (machine_arch_type == MACH_TYPE_KIXNP435)
+#else
+# define machine_is_kixnp435() (0)
+#endif
+
+#ifdef CONFIG_MACH_AFRICA
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_AFRICA
+# endif
+# define machine_is_africa() (machine_arch_type == MACH_TYPE_AFRICA)
+#else
+# define machine_is_africa() (0)
+#endif
+
+#ifdef CONFIG_MACH_NH233
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_NH233
+# endif
+# define machine_is_nh233() (machine_arch_type == MACH_TYPE_NH233)
+#else
+# define machine_is_nh233() (0)
+#endif
+
+#ifdef CONFIG_MACH_RD88F6183AP_GE
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_RD88F6183AP_GE
+# endif
+# define machine_is_rd88f6183ap_ge() (machine_arch_type == MACH_TYPE_RD88F6183AP_GE)
+#else
+# define machine_is_rd88f6183ap_ge() (0)
+#endif
+
+#ifdef CONFIG_MACH_BCM4760
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_BCM4760
+# endif
+# define machine_is_bcm4760() (machine_arch_type == MACH_TYPE_BCM4760)
+#else
+# define machine_is_bcm4760() (0)
+#endif
+
+#ifdef CONFIG_MACH_EDDY_V2
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_EDDY_V2
+# endif
+# define machine_is_eddy_v2() (machine_arch_type == MACH_TYPE_EDDY_V2)
+#else
+# define machine_is_eddy_v2() (0)
+#endif
+
+#ifdef CONFIG_MACH_REALVIEW_PBA8
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_REALVIEW_PBA8
+# endif
+# define machine_is_realview_pba8() (machine_arch_type == MACH_TYPE_REALVIEW_PBA8)
+#else
+# define machine_is_realview_pba8() (0)
+#endif
+
+#ifdef CONFIG_MACH_HID_A7
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_HID_A7
+# endif
+# define machine_is_hid_a7() (machine_arch_type == MACH_TYPE_HID_A7)
+#else
+# define machine_is_hid_a7() (0)
+#endif
+
+#ifdef CONFIG_MACH_HERO
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_HERO
+# endif
+# define machine_is_hero() (machine_arch_type == MACH_TYPE_HERO)
+#else
+# define machine_is_hero() (0)
+#endif
+
+#ifdef CONFIG_MACH_OMAP_POSEIDON
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_OMAP_POSEIDON
+# endif
+# define machine_is_omap_poseidon() (machine_arch_type == MACH_TYPE_OMAP_POSEIDON)
+#else
+# define machine_is_omap_poseidon() (0)
+#endif
+
+#ifdef CONFIG_MACH_REALVIEW_PBX
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_REALVIEW_PBX
+# endif
+# define machine_is_realview_pbx() (machine_arch_type == MACH_TYPE_REALVIEW_PBX)
+#else
+# define machine_is_realview_pbx() (0)
+#endif
+
+#ifdef CONFIG_MACH_MICRO9S
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_MICRO9S
+# endif
+# define machine_is_micro9s() (machine_arch_type == MACH_TYPE_MICRO9S)
+#else
+# define machine_is_micro9s() (0)
+#endif
+
+#ifdef CONFIG_MACH_MAKO
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_MAKO
+# endif
+# define machine_is_mako() (machine_arch_type == MACH_TYPE_MAKO)
+#else
+# define machine_is_mako() (0)
+#endif
+
+#ifdef CONFIG_MACH_XDAFLAME
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_XDAFLAME
+# endif
+# define machine_is_xdaflame() (machine_arch_type == MACH_TYPE_XDAFLAME)
+#else
+# define machine_is_xdaflame() (0)
+#endif
+
+#ifdef CONFIG_MACH_PHIDGET_SBC2
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_PHIDGET_SBC2
+# endif
+# define machine_is_phidget_sbc2() (machine_arch_type == MACH_TYPE_PHIDGET_SBC2)
+#else
+# define machine_is_phidget_sbc2() (0)
+#endif
+
+#ifdef CONFIG_MACH_LIMESTONE
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_LIMESTONE
+# endif
+# define machine_is_limestone() (machine_arch_type == MACH_TYPE_LIMESTONE)
+#else
+# define machine_is_limestone() (0)
+#endif
+
+#ifdef CONFIG_MACH_IPROBE_C32
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_IPROBE_C32
+# endif
+# define machine_is_iprobe_c32() (machine_arch_type == MACH_TYPE_IPROBE_C32)
+#else
+# define machine_is_iprobe_c32() (0)
+#endif
+
+#ifdef CONFIG_MACH_RUT100
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_RUT100
+# endif
+# define machine_is_rut100() (machine_arch_type == MACH_TYPE_RUT100)
+#else
+# define machine_is_rut100() (0)
+#endif
+
+#ifdef CONFIG_MACH_ASUSP535
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_ASUSP535
+# endif
+# define machine_is_asusp535() (machine_arch_type == MACH_TYPE_ASUSP535)
+#else
+# define machine_is_asusp535() (0)
+#endif
+
+#ifdef CONFIG_MACH_HTCRAPHAEL
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_HTCRAPHAEL
+# endif
+# define machine_is_htcraphael() (machine_arch_type == MACH_TYPE_HTCRAPHAEL)
+#else
+# define machine_is_htcraphael() (0)
+#endif
+
+#ifdef CONFIG_MACH_SYGDG1
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_SYGDG1
+# endif
+# define machine_is_sygdg1() (machine_arch_type == MACH_TYPE_SYGDG1)
+#else
+# define machine_is_sygdg1() (0)
+#endif
+
+#ifdef CONFIG_MACH_SYGDG2
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_SYGDG2
+# endif
+# define machine_is_sygdg2() (machine_arch_type == MACH_TYPE_SYGDG2)
+#else
+# define machine_is_sygdg2() (0)
+#endif
+
+#ifdef CONFIG_MACH_SEOUL
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_SEOUL
+# endif
+# define machine_is_seoul() (machine_arch_type == MACH_TYPE_SEOUL)
+#else
+# define machine_is_seoul() (0)
+#endif
+
+#ifdef CONFIG_MACH_SALERNO
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_SALERNO
+# endif
+# define machine_is_salerno() (machine_arch_type == MACH_TYPE_SALERNO)
+#else
+# define machine_is_salerno() (0)
+#endif
+
+#ifdef CONFIG_MACH_UCN_S3C64XX
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_UCN_S3C64XX
+# endif
+# define machine_is_ucn_s3c64xx() (machine_arch_type == MACH_TYPE_UCN_S3C64XX)
+#else
+# define machine_is_ucn_s3c64xx() (0)
+#endif
+
+#ifdef CONFIG_MACH_MSM7201A
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_MSM7201A
+# endif
+# define machine_is_msm7201a() (machine_arch_type == MACH_TYPE_MSM7201A)
+#else
+# define machine_is_msm7201a() (0)
+#endif
+
+#ifdef CONFIG_MACH_LPR1
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_LPR1
+# endif
+# define machine_is_lpr1() (machine_arch_type == MACH_TYPE_LPR1)
+#else
+# define machine_is_lpr1() (0)
+#endif
+
+#ifdef CONFIG_MACH_ARMADILLO500FX
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_ARMADILLO500FX
+# endif
+# define machine_is_armadillo500fx() (machine_arch_type == MACH_TYPE_ARMADILLO500FX)
+#else
+# define machine_is_armadillo500fx() (0)
+#endif
+
+#ifdef CONFIG_MACH_G3EVM
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_G3EVM
+# endif
+# define machine_is_g3evm() (machine_arch_type == MACH_TYPE_G3EVM)
+#else
+# define machine_is_g3evm() (0)
+#endif
+
+#ifdef CONFIG_MACH_Z3_DM355
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_Z3_DM355
+# endif
+# define machine_is_z3_dm355() (machine_arch_type == MACH_TYPE_Z3_DM355)
+#else
+# define machine_is_z3_dm355() (0)
+#endif
+
+#ifdef CONFIG_MACH_W90P910EVB
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_W90P910EVB
+# endif
+# define machine_is_w90p910evb() (machine_arch_type == MACH_TYPE_W90P910EVB)
+#else
+# define machine_is_w90p910evb() (0)
+#endif
+
+#ifdef CONFIG_MACH_W90P920EVB
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_W90P920EVB
+# endif
+# define machine_is_w90p920evb() (machine_arch_type == MACH_TYPE_W90P920EVB)
+#else
+# define machine_is_w90p920evb() (0)
+#endif
+
+#ifdef CONFIG_MACH_W90P950EVB
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_W90P950EVB
+# endif
+# define machine_is_w90p950evb() (machine_arch_type == MACH_TYPE_W90P950EVB)
+#else
+# define machine_is_w90p950evb() (0)
+#endif
+
+#ifdef CONFIG_MACH_W90N960EVB
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_W90N960EVB
+# endif
+# define machine_is_w90n960evb() (machine_arch_type == MACH_TYPE_W90N960EVB)
+#else
+# define machine_is_w90n960evb() (0)
+#endif
+
+#ifdef CONFIG_MACH_CAMHD
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_CAMHD
+# endif
+# define machine_is_camhd() (machine_arch_type == MACH_TYPE_CAMHD)
+#else
+# define machine_is_camhd() (0)
+#endif
+
+#ifdef CONFIG_MACH_MVC100
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_MVC100
+# endif
+# define machine_is_mvc100() (machine_arch_type == MACH_TYPE_MVC100)
+#else
+# define machine_is_mvc100() (0)
+#endif
+
+#ifdef CONFIG_MACH_ELECTRUM_200
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_ELECTRUM_200
+# endif
+# define machine_is_electrum_200() (machine_arch_type == MACH_TYPE_ELECTRUM_200)
+#else
+# define machine_is_electrum_200() (0)
+#endif
+
+#ifdef CONFIG_MACH_HTCJADE
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_HTCJADE
+# endif
+# define machine_is_htcjade() (machine_arch_type == MACH_TYPE_HTCJADE)
+#else
+# define machine_is_htcjade() (0)
+#endif
+
+#ifdef CONFIG_MACH_MEMPHIS
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_MEMPHIS
+# endif
+# define machine_is_memphis() (machine_arch_type == MACH_TYPE_MEMPHIS)
+#else
+# define machine_is_memphis() (0)
+#endif
+
+#ifdef CONFIG_MACH_IMX27SBC
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_IMX27SBC
+# endif
+# define machine_is_imx27sbc() (machine_arch_type == MACH_TYPE_IMX27SBC)
+#else
+# define machine_is_imx27sbc() (0)
+#endif
+
+#ifdef CONFIG_MACH_LEXTAR
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_LEXTAR
+# endif
+# define machine_is_lextar() (machine_arch_type == MACH_TYPE_LEXTAR)
+#else
+# define machine_is_lextar() (0)
+#endif
+
+#ifdef CONFIG_MACH_MV88F6281GTW_GE
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_MV88F6281GTW_GE
+# endif
+# define machine_is_mv88f6281gtw_ge() (machine_arch_type == MACH_TYPE_MV88F6281GTW_GE)
+#else
+# define machine_is_mv88f6281gtw_ge() (0)
+#endif
+
+#ifdef CONFIG_MACH_NCP
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_NCP
+# endif
+# define machine_is_ncp() (machine_arch_type == MACH_TYPE_NCP)
+#else
+# define machine_is_ncp() (0)
+#endif
+
+#ifdef CONFIG_MACH_Z32AN
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_Z32AN
+# endif
+# define machine_is_z32an_series() (machine_arch_type == MACH_TYPE_Z32AN)
+#else
+# define machine_is_z32an_series() (0)
+#endif
+
+#ifdef CONFIG_MACH_TMQ_CAPD
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_TMQ_CAPD
+# endif
+# define machine_is_tmq_capd() (machine_arch_type == MACH_TYPE_TMQ_CAPD)
+#else
+# define machine_is_tmq_capd() (0)
+#endif
+
/*
* These have not yet been registered
*/
diff --git a/include/configs/tmq_capd.h b/include/configs/tmq_capd.h
new file mode 100644
index 0000000..7d6cbcc
--- /dev/null
+++ b/include/configs/tmq_capd.h
@@ -0,0 +1,165 @@
+/*
+ * (C) Copyright 2007-2008
+ * Stelian Pop <stelian.pop(a)leadtechdesign.com>
+ * Lead Tech Design <www.leadtechdesign.com>
+ *
+ * Configuation settings for the AT91SAM9263EK board.
+ *
+ * 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
+ */
+
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+/* ARM asynchronous clock */
+#define AT91_CPU_NAME "AT91SAM9263"
+#define AT91_MAIN_CLOCK 198656000 /* from 18.432 MHz crystal */
+#define AT91_MASTER_CLOCK 99328000 /* peripheral = main / 2 */
+#define CONFIG_SYS_HZ 1000000 /* 1us resolution */
+
+#define AT91_SLOW_CLOCK 32768 /* slow clock */
+
+#define CONFIG_ARM926EJS 1 /* This is an ARM926EJS Core */
+#define CONFIG_AT91SAM9263 1 /* It's an Atmel AT91SAM9263 SoC*/
+#define CONFIG_TMQ_CAPD 1 /* on an TMQ CAPD Board */
+#undef CONFIG_USE_IRQ /* we don't need IRQ/FIQ stuff */
+
+#define CONFIG_CMDLINE_TAG 1 /* enable passing of ATAGs */
+#define CONFIG_SETUP_MEMORY_TAGS 1
+#define CONFIG_INITRD_TAG 1
+
+#define CONFIG_SKIP_LOWLEVEL_INIT
+#define CONFIG_SKIP_RELOCATE_UBOOT
+
+/*
+ * Hardware drivers
+ */
+#define CONFIG_ATMEL_USART 1
+#undef CONFIG_USART0
+#undef CONFIG_USART1
+#undef CONFIG_USART2
+#define CONFIG_USART3 1 /* USART 3 is DBGU */
+
+/* LCD */
+#define CONFIG_LCD 1
+#define LCD_BPP LCD_COLOR8
+#define CONFIG_LCD_LOGO 1
+#undef LCD_TEST_PATTERN
+#define CONFIG_LCD_INFO 1
+#define CONFIG_LCD_INFO_BELOW_LOGO 1
+#define CONFIG_SYS_WHITE_ON_BLACK 1
+#define CONFIG_ATMEL_LCD 1
+#define CONFIG_ATMEL_LCD_BGR555 1
+#define CONFIG_SYS_CONSOLE_IS_IN_ENV 1
+
+#define CONFIG_BOOTDELAY 3
+
+/*
+ * BOOTP options
+ */
+#define CONFIG_BOOTP_BOOTFILESIZE 1
+#define CONFIG_BOOTP_BOOTPATH 1
+#define CONFIG_BOOTP_GATEWAY 1
+#define CONFIG_BOOTP_HOSTNAME 1
+
+/*
+ * Command line configuration.
+ */
+#include <config_cmd_default.h>
+#undef CONFIG_CMD_BDI
+#undef CONFIG_CMD_IMI
+#undef CONFIG_CMD_AUTOSCRIPT
+#undef CONFIG_CMD_FPGA
+#undef CONFIG_CMD_LOADS
+#undef CONFIG_CMD_IMLS
+
+#undef CONFIG_CMD_NET
+#undef CONFIG_CMD_PING
+#undef CONFIG_CMD_DHCP
+#define CONFIG_CMD_NAND 1
+#define CONFIG_CMD_USB 1
+#define CONFIG_CMD_FAT 1
+
+/* SDRAM */
+#define CONFIG_NR_DRAM_BANKS 1
+#define PHYS_SDRAM 0x20000000
+#define PHYS_SDRAM_SIZE 0x02000000 /* 32 megs */
+
+#define CONFIG_SYS_NO_FLASH 1 /* No NOR Flash */
+
+/* NAND flash */
+#define NAND_MAX_CHIPS 1
+#define CONFIG_SYS_MAX_NAND_DEVICE 1
+#define CONFIG_SYS_NAND_BASE 0x40000000
+//#define CONFIG_SYS_NAND_DBW_8 1
+#define CONFIG_SYS_NAND_DBW_16 1 /* 16bit */
+
+/* USB */
+#define SP2526_1_FITTED 1
+#undef SP2526_2_FITTED
+#define CONFIG_USB_OHCI_NEW 1
+#define LITTLEENDIAN 1
+#define CONFIG_DOS_PARTITION 1
+#define CONFIG_SYS_USB_OHCI_CPU_INIT 1
+#define CONFIG_SYS_USB_OHCI_REGS_BASE 0x00a00000 /* AT91SAM9263_UHP_BASE */
+#define CONFIG_SYS_USB_OHCI_SLOT_NAME "at91sam9263"
+#define CONFIG_SYS_USB_OHCI_MAX_ROOT_PORTS 2
+#define CONFIG_USB_STORAGE 1
+
+#define CONFIG_SYS_LOAD_ADDR 0x21000000 /* load address */
+
+#define CONFIG_SYS_MEMTEST_START PHYS_SDRAM
+#define CONFIG_SYS_MEMTEST_END 0x21e00000
+
+/* bootstrap + u-boot + env + linux in nandflash */
+#define CONFIG_ENV_IS_IN_NAND 1
+#define CONFIG_ENV_OFFSET 0x60000
+#define CONFIG_ENV_OFFSET_REDUND 0x80000
+#define CONFIG_ENV_SIZE 0x20000 /* 1 sector = 128 kB */
+#define CONFIG_BOOTCOMMAND "nand read 21100000 100000 500000; bootm 21100000"
+#define CONFIG_BOOTARGS "console=ttyS0,115200 " \
+ "root=/dev/mtdblock5 " \
+ "mtdparts=at91_nand:128k(bootstrap)ro,256k(uboot)ro,128k(env1)ro,128k(env2)ro,2M(linux),-(root) " \
+ "rw rootfstype=jffs2"
+
+
+#define CONFIG_BAUDRATE 115200
+#define CONFIG_SYS_BAUDRATE_TABLE {115200 , 19200, 38400, 57600, 9600 }
+
+#define CONFIG_SYS_PROMPT "U-Boot> "
+#define CONFIG_SYS_CBSIZE 256
+#define CONFIG_SYS_MAXARGS 16
+#define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE + sizeof(CONFIG_SYS_PROMPT) + 16)
+#define CONFIG_SYS_LONGHELP 1
+#define CONFIG_CMDLINE_EDITING 1
+
+#define ROUND(A, B) (((A) + (B)) & ~((B) - 1))
+/*
+ * Size of malloc() pool
+ */
+#define CONFIG_SYS_MALLOC_LEN ROUND(3 * CONFIG_ENV_SIZE + 128*1024, 0x1000)
+#define CONFIG_SYS_GBL_DATA_SIZE 128 /* 128 bytes for initial data */
+
+#define CONFIG_STACKSIZE (32*1024) /* regular stack */
+
+#ifdef CONFIG_USE_IRQ
+#error CONFIG_USE_IRQ not supported
+#endif
+
+#endif
diff --git a/tools/Makefile b/tools/Makefile
index 9e9ee15..f1a0f9d 100644
--- a/tools/Makefile
+++ b/tools/Makefile
@@ -47,6 +47,9 @@ endif
ifeq ($(VENDOR),atmel)
LOGO_BMP= logos/atmel.bmp
endif
+ifeq ($(VENDOR),tmq)
+LOGO_BMP= logos/tmqlogo.bmp
+endif
#-------------------------------------------------------------------------
diff --git a/tools/logos/tmqlogo.bmp b/tools/logos/tmqlogo.bmp
new file mode 100644
index 0000000000000000000000000000000000000000..d28b666d3ee2f583dd983202edb93109d9d0b72e
GIT binary patch
literal 20254
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
literal 0
HcmV?d00001
--
1.6.0.4
2
1