aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwdenk <wdenk>2004-06-09 21:50:45 +0000
committerwdenk <wdenk>2004-06-09 21:50:45 +0000
commit2d24a3a787c2376c2c2c86a511eee78ef170923f (patch)
treedb949ae010577426e1ead185352703cdb68a36c7
parente63c8ee3dcde0992377df434ab5af486dd866866 (diff)
downloadu-boot-linaro-stable-2d24a3a787c2376c2c2c86a511eee78ef170923f.tar.gz
* Patch by Yuli Barcohen, 09 Jun 2004:
Add support for Analogue&Micro Adder87x and the older AdderII board. * Patch by Ming-Len Wu, 09 Jun 2004: Add suppport for MC9328 (Dargonball) CPU and Motorola MX1ADS board
-rw-r--r--CHANGELOG6
-rw-r--r--CREDITS28
-rw-r--r--MAINTAINERS1
-rw-r--r--MAKEALL10
-rw-r--r--Makefile38
-rw-r--r--board/adder/Makefile46
-rw-r--r--board/adder/adder.c107
-rw-r--r--board/adder/config.mk27
-rw-r--r--board/adder/u-boot.lds122
-rw-r--r--board/mx1ads/Makefile50
-rw-r--r--board/mx1ads/config.mk28
-rw-r--r--board/mx1ads/memsetup.S82
-rw-r--r--board/mx1ads/mx1ads.c183
-rw-r--r--board/mx1ads/syncflash.c334
-rw-r--r--board/mx1ads/u-boot.lds58
-rw-r--r--cpu/mc9328/Makefile43
-rw-r--r--cpu/mc9328/config.mk27
-rw-r--r--cpu/mc9328/cpu.c183
-rw-r--r--cpu/mc9328/interrupts.c250
-rw-r--r--cpu/mc9328/serial.c146
-rw-r--r--cpu/mc9328/start.S388
-rw-r--r--include/configs/Adder.h185
-rw-r--r--include/configs/mx1ads.h185
-rw-r--r--include/flash.h1
-rw-r--r--include/mc9328.h1221
25 files changed, 3723 insertions, 26 deletions
diff --git a/CHANGELOG b/CHANGELOG
index a74b79dff..aa5893ddb 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -2,6 +2,12 @@
Changes since U-Boot 1.1.1:
======================================================================
+* Patch by Yuli Barcohen, 09 Jun 2004:
+ Add support for Analogue&Micro Adder87x and the older AdderII board.
+
+* Patch by Ming-Len Wu, 09 Jun 2004:
+ Add suppport for MC9328 (Dargonball) CPU and Motorola MX1ADS board
+
* Patch by Sam Song, 09 Jun 2004:
- Add support for RPXlite_DW board
- Update FLASH driver for 4*AM29DL323DB90VI
diff --git a/CREDITS b/CREDITS
index b077a2954..8f0057c09 100644
--- a/CREDITS
+++ b/CREDITS
@@ -39,6 +39,7 @@ E: yuli@arabellasw.com
D: Unified support for Motorola MPC826xADS/MPC8272ADS/PQ2FADS boards.
D: Support for Zephyr Engineering ZPC.1900 board.
D: Support for Interphase iSPAN boards.
+D: Support for Analogue&Micro Adder boards.
W: http://www.arabellasw.com
N: Jerry van Baren
@@ -307,6 +308,10 @@ N: Erwin Rol
E: erwin@muffin.org
D: boot support for RTEMS
+N: Paul Ruhland
+E: pruhland@rochester.rr.com
+D: Port to Logic Zoom LH7A40x SDK board(s)
+
N: Neil Russell
E: caret@c-side.com
D: Author of LiMon-1.4.2, which contributed some ideas
@@ -347,13 +352,22 @@ N: David Updegraff
E: dave@cray.com
D: Port to Cray L1 board; DHCP vendor extensions
+N: Christian Vejlbo
+E: christian.vejlbo@tellabs.com
+D: FADS860T ethernet support
+
N: Martin Winistoerfer
E: martinwinistoerfer@gmx.ch
D: Port to MPC555/556 microcontrollers and support for cmi board
-N: Christian Vejlbo
-E: christian.vejlbo@tellabs.com
-D: FADS860T ethernet support
+N: Ming-Len Wu
+E: minglen_wu@techware.com.tw
+D: Motorola MX1ADS board support
+W: http://www.techware.com.tw/
+
+N: Xianghua Xiao
+E: x.xiao@motorola.com
+D: Support for Motorola 85xx(PowerQUICC III) chip, MPC8540ADS and MPC8560ADS boards.
N: John Zhan
E: zhanz@sinovee.com
@@ -363,11 +377,3 @@ N: Alex Zuepke
E: azu@sysgo.de
D: Overall improvements on StrongARM, ARM720TDMI; Support for Tuxscreen; initial PCMCIA support for ARM
W: www.elinos.com
-
-N: Xianghua Xiao
-E: x.xiao@motorola.com
-D: Support for Motorola 85xx(PowerQUICC III) chip, MPC8540ADS and MPC8560ADS boards.
-
-N: Paul Ruhland
-E: pruhland@rochester.rr.com
-D: Port to Logic Zoom LH7A40x SDK board(s)
diff --git a/MAINTAINERS b/MAINTAINERS
index 58d99b80e..4c8bb2a9c 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -27,6 +27,7 @@ Pantelis Antoniou <panto@intracom.gr>
Yuli Barcohen <yuli@arabellasw.com>
+ Adder MPC87x/MPC852T
ISPAN MPC8260
MPC8260ADS MPC826x/MPC827x/MPC8280
ZPC1900 MPC8265
diff --git a/MAKEALL b/MAKEALL
index 4d9b90050..d2fe82e10 100644
--- a/MAKEALL
+++ b/MAKEALL
@@ -33,6 +33,7 @@ LIST_5xxx=" \
#########################################################################
LIST_8xx=" \
+ Adder GENIETV MBX860T RBC823 \
AdderII GTH MHPC rmu \
ADS860 hermes MPC86xADS RPXClassic \
AMX860 IAD210 MPC885ADS RPXlite \
@@ -49,7 +50,6 @@ LIST_8xx=" \
FPS850L LANTEC QS850 TQM855L \
GEN860T lwmon QS860T TQM860L \
GEN860T_SC MBX R360MPI v37 \
- GENIETV MBX860T RBC823 \
"
#########################################################################
@@ -139,10 +139,10 @@ LIST_ARM7="B2 ep7312 impa7"
LIST_ARM9=" \
at91rm9200dk integratorcp integratorap \
- lpd7a400 omap1510inn omap1610h2 \
- omap1610inn omap730p2 smdk2400 \
- smdk2410 trab VCMA9 \
- versatile \
+ lpd7a400 mx1ads omap1510inn \
+ omap1610h2 omap1610inn omap730p2 \
+ smdk2400 smdk2410 trab \
+ VCMA9 versatile \
"
#########################################################################
diff --git a/Makefile b/Makefile
index 32bd06b95..457832ef9 100644
--- a/Makefile
+++ b/Makefile
@@ -262,6 +262,14 @@ PM520_config: unconfig
## MPC8xx Systems
#########################################################################
+Adder_config \
+Adder87x_config \
+Adder852_config \
+ : unconfig
+ $(if $(findstring 852,$@), \
+ @echo "#define CONFIG_MPC852T" > include/config.h)
+ @./mkconfig -a Adder ppc mpc8xx adder
+
AdderII_config: unconfig
@./mkconfig $(@:_config=) ppc mpc8xx adderII
@@ -1048,17 +1056,14 @@ xtract_omap1610xxx = $(subst _cs0boot,,$(subst _cs3boot,,$(subst _cs_autoboot,,$
xtract_omap730p2 = $(subst _cs0boot,,$(subst _cs3boot,, $(subst _config,,$1)))
-SX1_config : unconfig
- @./mkconfig $(@:_config=) arm arm925t sx1
-
integratorcp_config : unconfig
@./mkconfig $(@:_config=) arm arm926ejs integratorcp
integratorap_config : unconfig
@./mkconfig $(@:_config=) arm arm926ejs integratorap
-versatile_config : unconfig
- @./mkconfig $(@:_config=) arm arm926ejs versatile
+lpd7a400_config: unconfig
+ @./mkconfig $(@:_config=) arm lh7a40x lpd7a40x
omap1510inn_config : unconfig
@./mkconfig $(@:_config=) arm arm925t omap1510inn
@@ -1104,6 +1109,12 @@ smdk2400_config : unconfig
smdk2410_config : unconfig
@./mkconfig $(@:_config=) arm arm920t smdk2410
+SX1_config : unconfig
+ @./mkconfig $(@:_config=) arm arm925t sx1
+
+mx1ads_config : unconfig
+ @./mkconfig $(@:_config=) arm mc9328 mx1ads
+
# TRAB default configuration: 8 MB Flash, 32 MB RAM
trab_config \
trab_bigram_config \
@@ -1132,8 +1143,8 @@ trab_old_config: unconfig
VCMA9_config : unconfig
@./mkconfig $(@:_config=) arm arm920t vcma9 mpl
-lpd7a400_config: unconfig
- @./mkconfig $(@:_config=) arm lh7a40x lpd7a40x
+versatile_config : unconfig
+ @./mkconfig $(@:_config=) arm arm926ejs versatile
#########################################################################
## S3C44B0 Systems
@@ -1143,15 +1154,22 @@ B2_config : unconfig
@./mkconfig $(@:_config=) arm s3c44b0 B2 dave
#########################################################################
-## ARM720T Systems
+## MC9328 (Dragonball) Systems
#########################################################################
-impa7_config : unconfig
- @./mkconfig $(@:_config=) arm arm720t impa7
+mx1ads_config : unconfig
+ @./mkconfig $(@:_config=) arm mc9328 mx1ads
+
+#########################################################################
+## ARM720T Systems
+#########################################################################
ep7312_config : unconfig
@./mkconfig $(@:_config=) arm arm720t ep7312
+impa7_config : unconfig
+ @./mkconfig $(@:_config=) arm arm720t impa7
+
modnet50_config : unconfig
@./mkconfig $(@:_config=) arm arm720t modnet50
diff --git a/board/adder/Makefile b/board/adder/Makefile
new file mode 100644
index 000000000..9123a8026
--- /dev/null
+++ b/board/adder/Makefile
@@ -0,0 +1,46 @@
+#
+# Copyright (C) 2004 Arabella Software Ltd.
+# Yuli Barcohen <yuli@arabellasw.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 = lib$(BOARD).a
+
+OBJS := $(BOARD).o
+
+$(LIB): $(OBJS) $(SOBJS)
+ $(AR) crv $@ $(OBJS)
+
+clean:
+ rm -f $(SOBJS) $(OBJS)
+
+distclean: clean
+ rm -f $(LIB) core *.bak .depend
+
+#########################################################################
+
+.depend: Makefile $(SOBJS:.o=.S) $(OBJS:.o=.c)
+ $(CC) -M $(CPPFLAGS) $(SOBJS:.o=.S) $(OBJS:.o=.c) > $@
+
+-include .depend
+
+#########################################################################
diff --git a/board/adder/adder.c b/board/adder/adder.c
new file mode 100644
index 000000000..cab6e2f66
--- /dev/null
+++ b/board/adder/adder.c
@@ -0,0 +1,107 @@
+/*
+ * Copyright (C) 2004 Arabella Software Ltd.
+ * Yuli Barcohen <yuli@arabellasw.com>
+ *
+ * Support for Analogue&Micro Adder boards family.
+ * Tested on AdderII and Adder87x.
+ *
+ * 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 <mpc8xx.h>
+
+/*
+ * SDRAM is single Samsung K4S643232F-T70 chip.
+ * Minimal CPU frequency is 40MHz.
+ */
+static uint sdram_table[] = {
+ /* Single read (offset 0x00 in UPM RAM) */
+ 0x1f07fc24, 0xe0aefc04, 0x10adfc04, 0xe0bbbc00,
+ 0x10f77c44, 0xf3fffc07, 0xfffffc04, 0xfffffc04,
+
+ /* Burst read (offset 0x08 in UPM RAM) */
+ 0x1f07fc24, 0xe0aefc04, 0x10adfc04, 0xf0affc00,
+ 0xf0affc00, 0xf0affc00, 0xf0affc00, 0x10a77c44,
+ 0xf7bffc47, 0xfffffc35, 0xfffffc34, 0xfffffc35,
+ 0xfffffc35, 0x1ff77c35, 0xfffffc34, 0x1fb57c35,
+
+ /* Single write (offset 0x18 in UPM RAM) */
+ 0x1f27fc24, 0xe0aebc04, 0x00b93c00, 0x13f77c47,
+ 0xfffdfc04, 0xfffffc04, 0xfffffc04, 0xfffffc04,
+
+ /* Burst write (offset 0x20 in UPM RAM) */
+ 0x1f07fc24, 0xeeaebc00, 0x10ad7c00, 0xf0affc00,
+ 0xf0affc00, 0xe0abbc00, 0x1fb77c47, 0xfffffc04,
+ 0xfffffc04, 0xfffffc04, 0xfffffc04, 0xfffffc04,
+ 0xfffffc04, 0xfffffc04, 0xfffffc04, 0xfffffc04,
+
+ /* Refresh (offset 0x30 in UPM RAM) */
+ 0x1ff5fca4, 0xfffffc04, 0xfffffc04, 0xfffffc04,
+ 0xfffffc84, 0xfffffc07, 0xfffffc04, 0xfffffc04,
+ 0xfffffc04, 0xfffffc04, 0xfffffc04, 0xfffffc04,
+
+ /* Exception (offset 0x3C in UPM RAM) */
+ 0xfffffc27, 0xfffffc04, 0xfffffc04, 0xfffffc04
+};
+
+long int initdram (int board_type)
+{
+ long int msize = CFG_SDRAM_SIZE;
+ volatile immap_t *immap = (volatile immap_t *)CFG_IMMR;
+ volatile memctl8xx_t *memctl = &immap->im_memctl;
+
+ upmconfig(UPMA, sdram_table, sizeof(sdram_table) / sizeof(uint));
+
+ /* Configure SDRAM refresh */
+ memctl->memc_mptpr = MPTPR_PTP_DIV32; /* BRGCLK/32 */
+
+ memctl->memc_mamr = (94 << 24) | CFG_MAMR;
+ memctl->memc_mar = 0x0;
+ udelay(200);
+
+ /* Run precharge from location 0x15 */
+ memctl->memc_mcr = 0x80002115;
+ udelay(200);
+
+ /* Run 8 refresh cycles */
+ memctl->memc_mcr = 0x80002830;
+ udelay(200);
+
+ memctl->memc_mar = 0x88;
+ udelay(200);
+
+ /* Run MRS pattern from location 0x16 */
+ memctl->memc_mcr = 0x80002116;
+ udelay(200);
+
+ return msize;
+}
+
+int checkboard( void )
+{
+ puts("Board: Adder");
+#if defined(CONFIG_MPC885_FAMILY)
+ puts("87x\n");
+#elif defined(CONFIG_MPC866_FAMILY)
+ puts("II\n");
+#endif
+
+ return 0;
+}
diff --git a/board/adder/config.mk b/board/adder/config.mk
new file mode 100644
index 000000000..4691a69ef
--- /dev/null
+++ b/board/adder/config.mk
@@ -0,0 +1,27 @@
+#
+# Copyright (C) 2004 Arabella Software Ltd.
+# Yuli Barcohen <yuli@arabellasw.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
+#
+
+#
+# Analogue&Micro Adder boards family
+#
+TEXT_BASE = 0xFE000000
diff --git a/board/adder/u-boot.lds b/board/adder/u-boot.lds
new file mode 100644
index 000000000..1d2a7d764
--- /dev/null
+++ b/board/adder/u-boot.lds
@@ -0,0 +1,122 @@
+/*
+ * (C) Copyright 2001-2003
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * Modified by Yuli Barcohen <yuli@arabellasw.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
+ */
+
+OUTPUT_ARCH(powerpc)
+SECTIONS
+{
+ /* Read-only sections, merged into text segment: */
+ . = + SIZEOF_HEADERS;
+ .interp : { *(.interp) }
+ .hash : { *(.hash) }
+ .dynsym : { *(.dynsym) }
+ .dynstr : { *(.dynstr) }
+ .rel.text : { *(.rel.text) }
+ .rela.text : { *(.rela.text) }
+ .rel.data : { *(.rel.data) }
+ .rela.data : { *(.rela.data) }
+ .rel.rodata : { *(.rel.rodata) }
+ .rela.rodata : { *(.rela.rodata) }
+ .rel.got : { *(.rel.got) }
+ .rela.got : { *(.rela.got) }
+ .rel.ctors : { *(.rel.ctors) }
+ .rela.ctors : { *(.rela.ctors) }
+ .rel.dtors : { *(.rel.dtors) }
+ .rela.dtors : { *(.rela.dtors) }
+ .rel.bss : { *(.rel.bss) }
+ .rela.bss : { *(.rela.bss) }
+ .rel.plt : { *(.rel.plt) }
+ .rela.plt : { *(.rela.plt) }
+ .init : { *(.init) }
+ .plt : { *(.plt) }
+ .text :
+ {
+ cpu/mpc8xx/start.o (.text)
+ *(.text)
+ *(.fixup)
+ *(.got1)
+ . = ALIGN(16);
+ *(.rodata)
+ *(.rodata1)
+ *(.rodata.str1.4)
+ }
+ .fini : { *(.fini) } =0
+ .ctors : { *(.ctors) }
+ .dtors : { *(.dtors) }
+
+ /* Read-write section, merged into data segment: */
+ . = (. + 0x0FFF) & 0xFFFFF000;
+ _erotext = .;
+ PROVIDE (erotext = .);
+ .reloc :
+ {
+ *(.got)
+ _GOT2_TABLE_ = .;
+ *(.got2)
+ _FIXUP_TABLE_ = .;
+ *(.fixup)
+ }
+ __got2_entries = (_FIXUP_TABLE_ - _GOT2_TABLE_) >> 2;
+ __fixup_entries = (. - _FIXUP_TABLE_) >> 2;
+
+ .data :
+ {
+ *(.data)
+ *(.data1)
+ *(.sdata)
+ *(.sdata2)
+ *(.dynamic)
+ CONSTRUCTORS
+ }
+ _edata = .;
+ PROVIDE (edata = .);
+
+ __u_boot_cmd_start = .;
+ .u_boot_cmd : { *(.u_boot_cmd) }
+ __u_boot_cmd_end = .;
+
+
+ __start___ex_table = .;
+ __ex_table : { *(__ex_table) }
+ __stop___ex_table = .;
+
+ . = ALIGN(4096);
+ __init_begin = .;
+ .text.init : { *(.text.init) }
+ .data.init : { *(.data.init) }
+ . = ALIGN(4096);
+ __init_end = .;
+
+ __bss_start = .;
+ .bss :
+ {
+ *(.sbss) *(.scommon)
+ *(.dynbss)
+ *(.bss)
+ *(COMMON)
+ }
+ _end = . ;
+ PROVIDE (end = .);
+}
+ENTRY(_start)
diff --git a/board/mx1ads/Makefile b/board/mx1ads/Makefile
new file mode 100644
index 000000000..8a17702d0
--- /dev/null
+++ b/board/mx1ads/Makefile
@@ -0,0 +1,50 @@
+#/*
+#* board/mx1ads/Makefile
+#*
+#* (c) Copyright 2004
+#* Techware Information Technology, Inc.
+#* http://www.techware.com.tw/
+#*
+#* Ming-Len Wu <minglen_wu@techware.com.tw>
+#*
+#* 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 = lib$(BOARD).a
+
+OBJS := mx1ads.o syncflash.o
+SOBJS := memsetup.o
+
+$(LIB): $(OBJS) $(SOBJS)
+ $(AR) crv $@ $(OBJS) $(SOBJS)
+
+clean:
+ rm -f $(SOBJS) $(OBJS)
+
+distclean: clean
+ rm -f $(LIB) core *.bak .depend
+
+#########################################################################
+
+.depend: Makefile $(SOBJS:.o=.S) $(OBJS:.o=.c)
+ $(CC) -M $(CPPFLAGS) $(SOBJS:.o=.S) $(OBJS:.o=.c) > $@
+
+-include .depend
+
+#########################################################################
diff --git a/board/mx1ads/config.mk b/board/mx1ads/config.mk
new file mode 100644
index 000000000..16a0b84b2
--- /dev/null
+++ b/board/mx1ads/config.mk
@@ -0,0 +1,28 @@
+#/*
+#* board/mx1ads/config.mk
+#*
+#* (c) Copyright 2004
+#* Techware Information Technology, Inc.
+#* http://www.techware.com.tw/
+#*
+#* Ming-Len Wu <minglen_wu@techware.com.tw>
+#*
+#* 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
+#*/
+
+
+TEXT_BASE = 0x08400000
+
diff --git a/board/mx1ads/memsetup.S b/board/mx1ads/memsetup.S
new file mode 100644
index 000000000..39b71fefe
--- /dev/null
+++ b/board/mx1ads/memsetup.S
@@ -0,0 +1,82 @@
+/*
+ * board/mx1ads/memsetup.S
+ *
+ * (c) Copyright 2004
+ * Techware Information Technology, Inc.
+ * http://www.techware.com.tw/
+ *
+ * Ming-Len Wu <minglen_wu@techware.com.tw>
+ *
+ * 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 <config.h>
+#include <version.h>
+
+#define SDCTL0 0x221000
+#define SDCTL1 0x221004
+
+
+_TEXT_BASE:
+ .word TEXT_BASE
+
+.globl memsetup
+memsetup:
+/* memory controller init */
+
+ ldr r1, =SDCTL0
+
+/* Set Precharge Command */
+
+ ldr r3, =0x92120200
+/* ldr r3, =0x92120251
+*/
+ str r3, [r1]
+
+/* Issue Precharge All Commad */
+ ldr r3, =0x8200000
+ ldr r2, [r3]
+
+/* Set AutoRefresh Command */
+ ldr r3, =0xA2120200
+ str r3, [r1]
+
+/* Issue AutoRefresh Command */
+ ldr r3, =0x8000000
+ ldr r2, [r3]
+ ldr r2, [r3]
+ ldr r2, [r3]
+ ldr r2, [r3]
+ ldr r2, [r3]
+ ldr r2, [r3]
+ ldr r2, [r3]
+ ldr r2, [r3]
+
+/* Set Mode Register */
+ ldr r3, =0xB2120200
+ str r3, [r1]
+
+/* Issue Mode Register Command */
+ ldr r3, =0x08111800 /* Mode Register Value */
+ ldr r2, [r3]
+
+/* Set Normal Mode */
+ ldr r3, =0x82124200
+ str r3, [r1]
+
+/* everything is fine now */
+ mov pc, lr
+
diff --git a/board/mx1ads/mx1ads.c b/board/mx1ads/mx1ads.c
new file mode 100644
index 000000000..567f88a7b
--- /dev/null
+++ b/board/mx1ads/mx1ads.c
@@ -0,0 +1,183 @@
+/*
+ * board/mx1ads/mx1ads.c
+ *
+ * (c) Copyright 2004
+ * Techware Information Technology, Inc.
+ * http://www.techware.com.tw/
+ *
+ * Ming-Len Wu <minglen_wu@techware.com.tw>
+ *
+ * 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 <mc9328.h>
+
+/* ------------------------------------------------------------------------- */
+
+#define FCLK_SPEED 1
+
+#if FCLK_SPEED==0 /* Fout = 203MHz, Fin = 12MHz for Audio */
+#define M_MDIV 0xC3
+#define M_PDIV 0x4
+#define M_SDIV 0x1
+#elif FCLK_SPEED==1 /* Fout = 202.8MHz */
+#define M_MDIV 0xA1
+#define M_PDIV 0x3
+#define M_SDIV 0x1
+#endif
+
+#define USB_CLOCK 1
+
+#if USB_CLOCK==0
+#define U_M_MDIV 0xA1
+#define U_M_PDIV 0x3
+#define U_M_SDIV 0x1
+#elif USB_CLOCK==1
+#define U_M_MDIV 0x48
+#define U_M_PDIV 0x3
+#define U_M_SDIV 0x2
+#endif
+
+#if 0
+
+static inline void delay (unsigned long loops) {
+ __asm__ volatile ("1:\n"
+ "subs %0, %1, #1\n"
+ "bne 1b":"=r" (loops):"0" (loops));
+}
+
+#endif
+
+/*
+ * Miscellaneous platform dependent initialisations
+ */
+
+
+void SetAsynchMode(void) {
+ __asm__ (
+ "mrc p15,0,r0,c1,c0,0 \n"
+ "mov r2, #0xC0000000 \n"
+ "orr r0,r2,r0 \n"
+ "mcr p15,0,r0,c1,c0,0 \n"
+ );
+}
+
+static u32 mc9328sid;
+
+int board_init (void) {
+
+ DECLARE_GLOBAL_DATA_PTR;
+
+ volatile unsigned int tmp;
+
+ mc9328sid = MX1_SIDR;
+
+ MX1_GPCR = 0x000003AB; /* I/O pad driving strength */
+
+/* MX1_CS1U = 0x00000A00; */ /* SRAM initialization */
+/* MX1_CS1L = 0x11110601; */
+
+
+ MX1_MPCTL0 = 0x04632410; /* setting for 150 MHz MCU PLL CLK */
+
+/* MX1_MPCTL0 = 0x003f1437; *//* setting for 192 MHz MCU PLL CLK */
+
+
+
+/* set FCLK divider 1 (i.e. FCLK to MCU PLL CLK) and
+ * BCLK divider to 2 (i.e. BCLK to 48 MHz)
+ */
+ MX1_CSCR = 0xAF000403;
+
+ MX1_CSCR |= 0x00200000; /* Trigger the restart bit(bit 21) */
+ MX1_CSCR &= 0xFFFF7FFF; /* Program PRESC bit(bit 15) to 0 to divide-by-1 */
+
+/* setup cs4 for cs8900 ethernet */
+
+ MX1_CS4U = 0x00000F00; /* Initialize CS4 for CS8900 ethernet */
+ MX1_CS4L = 0x00001501;
+
+ MX1_GIUS_A &= 0xFF3FFFFF;
+ MX1_GPR_A &= 0xFF3FFFFF;
+
+ tmp = *(unsigned int *)(0x1500000C);
+ tmp = *(unsigned int *)(0x1500000C);
+
+/* setup timer 1 as system timer */
+
+ MX1_TPRER1 = 0x1f; /* divide by 32 */
+ MX1_TCTL1 = 0x19; /* clock in from 32k Osc. */
+
+
+ SetAsynchMode();
+
+ gd->bd->bi_arch_number = 160; /* Arch number of MX1ADS Board */
+
+ gd->bd->bi_boot_params = 0x08000100; /* adress of boot parameters */
+
+ icache_enable();
+ dcache_enable();
+
+/* set PERCLKs */
+ MX1_PCDR = 0x00000055; /* set PERCLKS */
+
+/* PERCLK3 is only used by SSI so the SSI driver can set it any value it likes
+ * PERCLK1 and PERCLK2 are shared so DO NOT change it in any other place
+ * all sources selected as normal interrupt
+ */
+ MX1_INTTYPEH = 0;
+ MX1_INTTYPEL = 0;
+
+ return 0;
+}
+
+
+int board_late_init(void) {
+
+ setenv("stdout", "serial");
+ setenv("stderr", "serial");
+
+ switch (mc9328sid) {
+ case 0x0005901d :
+ printf ("MX1ADS board with MC9328 MX1 (0L44N), Silicon ID 0x%08x \n\n",mc9328sid);
+ break;
+ case 0x04d4c01d :
+ printf ("MX1ADS board with MC9328 MXL (1L45N), Silicon ID 0x%08x \n\n",mc9328sid);
+ break;
+ case 0x00d4c01d :
+ printf ("MX1ADS board with MC9328 MXL (2L45N), Silicon ID 0x%08x \n\n",mc9328sid);
+ break;
+
+ default :
+ printf ("MX1ADS board with UNKNOWN MC9328 cpu, Silicon ID 0x%08x \n",mc9328sid);
+ break;
+
+ }
+
+ return 0;
+}
+
+
+int dram_init (void) {
+ DECLARE_GLOBAL_DATA_PTR;
+
+ gd->bd->bi_dram[0].start = PHYS_SDRAM_1;
+ gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE;
+
+ return 0;
+}
diff --git a/board/mx1ads/syncflash.c b/board/mx1ads/syncflash.c
new file mode 100644
index 000000000..afbe78653
--- /dev/null
+++ b/board/mx1ads/syncflash.c
@@ -0,0 +1,334 @@
+/*
+ * board/mx1ads/syncflash.c
+ *
+ * (c) Copyright 2004
+ * Techware Information Technology, Inc.
+ * http://www.techware.com.tw/
+ *
+ * Ming-Len Wu <minglen_wu@techware.com.tw>
+ *
+ * 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 <mc9328.h>
+
+typedef unsigned long * p_u32;
+
+/* 4Mx16x2 IAM=0 CSD1 */
+
+flash_info_t flash_info[CFG_MAX_FLASH_BANKS]; /* info for FLASH chips */
+
+/* Following Setting is for CSD1 */
+#define SFCTL 0x00221004
+#define reg_SFCTL __REG(SFCTL)
+
+#define SYNCFLASH_A10 (0x00100000)
+
+#define CMD_NORMAL (0x81020300) /* Normal Mode */
+#define CMD_PREC (CMD_NORMAL + 0x10000000) /* Precharge Command */
+#define CMD_AUTO (CMD_NORMAL + 0x20000000) /* Auto Refresh Command */
+#define CMD_LMR (CMD_NORMAL + 0x30000000) /* Load Mode Register Command */
+#define CMD_LCR (CMD_NORMAL + 0x60000000) /* LCR Command */
+#define CMD_PROGRAM (CMD_NORMAL + 0x70000000)
+
+#define MODE_REG_VAL (CFG_FLASH_BASE+0x0008CC00) /* Cas Latency 3 */
+
+/* LCR Command */
+#define LCR_READSTATUS (0x0001C000) /* 0x70 */
+#define LCR_ERASE_CONFIRM (0x00008000) /* 0x20 */
+#define LCR_ERASE_NVMODE (0x0000C000) /* 0x30 */
+#define LCR_PROG_NVMODE (0x00028000) /* 0xA0 */
+#define LCR_SR_CLEAR (0x00014000) /* 0x50 */
+
+
+/* Get Status register */
+u32 SF_SR(void) {
+ u32 tmp,tmp1;
+
+ reg_SFCTL = CMD_PROGRAM;
+ tmp = __REG(CFG_FLASH_BASE);
+
+ reg_SFCTL = CMD_NORMAL;
+
+ reg_SFCTL = CMD_LCR; /* Activate LCR Mode */
+ tmp1 = __REG(CFG_FLASH_BASE + LCR_SR_CLEAR);
+
+ return tmp;
+}
+
+/* check if SyncFlash is ready */
+u8 SF_Ready(void) {
+ u32 tmp;
+
+ tmp = SF_SR();
+
+ if ((tmp & 0x00800000) && (tmp & 0x001C0000)) {
+ printf ("SyncFlash Error code %08x\n",tmp);
+ };
+
+ if ((tmp & 0x00000080) && (tmp & 0x0000001C)) {
+ printf ("SyncFlash Error code %08x\n",tmp);
+
+ };
+
+ if (tmp == 0x00800080) /* Test Bit 7 of SR */
+ return 1;
+ else
+ return 0;
+}
+
+/* Issue the precharge all command */
+void SF_PrechargeAll(void) {
+
+ u32 tmp;
+
+ reg_SFCTL = CMD_PREC; /* Set Precharge Command */
+ tmp = __REG(CFG_FLASH_BASE + SYNCFLASH_A10); /* Issue Precharge All Command */
+
+}
+
+/* set SyncFlash to normal mode */
+void SF_Normal(void) {
+
+ SF_PrechargeAll();
+
+ reg_SFCTL = CMD_NORMAL;
+}
+
+/* Erase SyncFlash */
+void SF_Erase(u32 RowAddress) {
+ u32 tmp;
+
+ reg_SFCTL = CMD_NORMAL;
+ tmp = __REG(RowAddress);
+
+ reg_SFCTL = CMD_PREC;
+ tmp = __REG(RowAddress);
+
+ reg_SFCTL = CMD_LCR; /* Set LCR mode */
+ __REG(RowAddress + LCR_ERASE_CONFIRM) = 0; /* Issue Erase Setup Command */
+
+ reg_SFCTL = CMD_NORMAL; /* return to Normal mode */
+ __REG(RowAddress) = 0xD0D0D0D0; /* Confirm */
+
+ while(!SF_Ready());
+}
+
+
+void SF_NvmodeErase(void) {
+ SF_PrechargeAll();
+
+ reg_SFCTL = CMD_LCR; /* Set to LCR mode */
+ __REG(CFG_FLASH_BASE + LCR_ERASE_NVMODE) = 0; /* Issue Erase Nvmode Reg Command */
+
+ reg_SFCTL = CMD_NORMAL; /* Return to Normal mode */
+ __REG(CFG_FLASH_BASE + LCR_ERASE_NVMODE) = 0xC0C0C0C0; /* Confirm */
+
+ while(!SF_Ready());
+}
+
+void SF_NvmodeWrite(void) {
+ SF_PrechargeAll();
+
+ reg_SFCTL = CMD_LCR; /* Set to LCR mode */
+ __REG(CFG_FLASH_BASE+LCR_PROG_NVMODE) = 0; /* Issue Program Nvmode reg command */
+
+ reg_SFCTL = CMD_NORMAL; /* Return to Normal mode */
+ __REG(CFG_FLASH_BASE+LCR_PROG_NVMODE) = 0xC0C0C0C0; /* Confirm not needed */
+
+}
+
+
+/****************************************************************************************/
+
+ulong flash_init(void) {
+ int i, j;
+ u32 tmp;
+
+/* Turn on CSD1 for negating RESETSF of SyncFLash */
+
+ reg_SFCTL |= 0x80000000; /* enable CSD1 for SyncFlash */
+ udelay(200);
+
+ reg_SFCTL = CMD_LMR; /* Set Load Mode Register Command */
+ tmp = __REG(MODE_REG_VAL); /* Issue Load Mode Register Command */
+
+ SF_Normal();
+
+ i = 0;
+
+ flash_info[i].flash_id = FLASH_MAN_MT | FLASH_MT28S4M16LC;
+
+ flash_info[i].size = FLASH_BANK_SIZE;
+ flash_info[i].sector_count = CFG_MAX_FLASH_SECT;
+
+ memset(flash_info[i].protect, 0, CFG_MAX_FLASH_SECT);
+
+ for (j = 0; j < flash_info[i].sector_count; j++) {
+ flash_info[i].start[j] = CFG_FLASH_BASE + j * 0x00100000;
+ }
+
+ flash_protect(FLAG_PROTECT_SET,
+ CFG_FLASH_BASE,
+ CFG_FLASH_BASE + monitor_flash_len - 1,
+ &flash_info[0]);
+
+ flash_protect(FLAG_PROTECT_SET,
+ CFG_ENV_ADDR,
+ CFG_ENV_ADDR + CFG_ENV_SIZE - 1,
+ &flash_info[0]);
+
+ return FLASH_BANK_SIZE;
+}
+
+
+void flash_print_info (flash_info_t *info) {
+
+ int i;
+
+ switch (info->flash_id & FLASH_VENDMASK) {
+ case (FLASH_MAN_MT & FLASH_VENDMASK):
+ printf("Micron: ");
+ break;
+ default:
+ printf("Unknown Vendor ");
+ break;
+ }
+
+
+ switch (info->flash_id & FLASH_TYPEMASK) {
+ case (FLASH_MT28S4M16LC & FLASH_TYPEMASK):
+ printf("2x FLASH_MT28S4M16LC (16MB Total)\n");
+ break;
+ default:
+ printf("Unknown Chip Type\n");
+ return;
+ break;
+ }
+
+ printf(" Size: %ld MB in %d Sectors\n",
+ info->size >> 20, info->sector_count);
+
+ printf(" Sector Start Addresses: ");
+
+ for (i = 0; i < info->sector_count; i++) {
+ if ((i % 5) == 0)
+ printf ("\n ");
+
+ printf (" %08lX%s", info->start[i],
+ info->protect[i] ? " (RO)" : " ");
+ }
+
+ printf ("\n");
+}
+
+
+/*-----------------------------------------------------------------------*/
+
+int flash_erase (flash_info_t *info, int s_first, int s_last) {
+ int iflag, cflag, prot, sect;
+ int rc = ERR_OK;
+
+/* first look for protection bits */
+
+ if (info->flash_id == FLASH_UNKNOWN)
+ return ERR_UNKNOWN_FLASH_TYPE;
+
+ if ((s_first < 0) || (s_first > s_last))
+ return ERR_INVAL;
+
+ if ((info->flash_id & FLASH_VENDMASK) != (FLASH_MAN_MT & FLASH_VENDMASK))
+ return ERR_UNKNOWN_FLASH_VENDOR;
+
+ prot = 0;
+
+ for (sect = s_first; sect <= s_last; ++sect) {
+ if (info->protect[sect])
+ prot++;
+ }
+
+ if (prot) {
+ printf("protected!\n");
+ return ERR_PROTECTED;
+ }
+/*
+ * Disable interrupts which might cause a timeout
+ * here. Remember that our exception vectors are
+ * at address 0 in the flash, and we don't want a
+ * (ticker) exception to happen while the flash
+ * chip is in programming mode.
+ */
+
+ cflag = icache_status();
+ icache_disable();
+ iflag = disable_interrupts();
+
+/* Start erase on unprotected sectors */
+ for (sect = s_first; sect <= s_last && !ctrlc(); sect++) {
+
+ printf("Erasing sector %2d ... ", sect);
+
+/* arm simple, non interrupt dependent timer */
+
+ reset_timer_masked();
+
+ SF_NvmodeErase();
+ SF_NvmodeWrite();
+
+ SF_Erase(CFG_FLASH_BASE + (0x0100000 * sect));
+ SF_Normal();
+
+ printf("ok.\n");
+ }
+
+ if (ctrlc())
+ printf("User Interrupt!\n");
+
+ if (iflag)
+ enable_interrupts();
+
+ if (cflag)
+ icache_enable();
+
+ return rc;
+}
+
+
+
+/*-----------------------------------------------------------------------
+ * Copy memory to flash.
+ */
+
+int write_buff (flash_info_t *info, uchar *src, ulong addr, ulong cnt) {
+ int i;
+
+ for(i = 0; i < cnt; i += 4) {
+
+ SF_PrechargeAll();
+
+ reg_SFCTL = CMD_PROGRAM; /* Enter SyncFlash Program mode */
+ __REG(addr + i) = __REG((u32)src + i);
+
+ while(!SF_Ready());
+ }
+
+ SF_Normal();
+
+ return ERR_OK;
+}
+
+
diff --git a/board/mx1ads/u-boot.lds b/board/mx1ads/u-boot.lds
new file mode 100644
index 000000000..946994d50
--- /dev/null
+++ b/board/mx1ads/u-boot.lds
@@ -0,0 +1,58 @@
+/*
+ * board/mx1ads/u-boot.lds
+ *
+ * (c) Copyright 2004
+ * Techware Information Technology, Inc.
+ * http://www.techware.com.tw/
+ *
+ * Ming-Len Wu <minglen_wu@techware.com.tw>
+ *
+ * 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_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SECTIONS
+{
+ . = 0x00000000;
+
+ . = ALIGN(4);
+ .text :
+ {
+ cpu/mc9328/start.o (.text)
+ *(.text)
+ }
+
+ . = ALIGN(4);
+ .rodata : { *(.rodata) }
+
+ . = ALIGN(4);
+ .data : { *(.data) }
+
+ . = ALIGN(4);
+ .got : { *(.got) }
+
+ __u_boot_cmd_start = .;
+ .u_boot_cmd : { *(.u_boot_cmd) }
+ __u_boot_cmd_end = .;
+
+ . = ALIGN(4);
+ __bss_start = .;
+ .bss : { *(.bss) }
+ _end = .;
+}
diff --git a/cpu/mc9328/Makefile b/cpu/mc9328/Makefile
new file mode 100644
index 000000000..0261ba6e7
--- /dev/null
+++ b/cpu/mc9328/Makefile
@@ -0,0 +1,43 @@
+#
+# (C) Copyright 2000, 2001, 2002
+# Wolfgang Denk, DENX Software Engineering, wd@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 = lib$(CPU).a
+
+START = start.o
+OBJS = serial.o interrupts.o cpu.o
+
+all: .depend $(START) $(LIB)
+
+$(LIB): $(OBJS)
+ $(AR) crv $@ $(OBJS)
+
+#########################################################################
+
+.depend: Makefile $(START:.o=.S) $(OBJS:.o=.c)
+ $(CC) -M $(CFLAGS) $(START:.o=.S) $(OBJS:.o=.c) > $@
+
+sinclude .depend
+
+#########################################################################
diff --git a/cpu/mc9328/config.mk b/cpu/mc9328/config.mk
new file mode 100644
index 000000000..cef7d26f1
--- /dev/null
+++ b/cpu/mc9328/config.mk
@@ -0,0 +1,27 @@
+#
+# (C) Copyright 2002
+# Gary Jennejohn, DENX Software Engineering, <gj@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
+#
+
+PLATFORM_RELFLAGS += -fno-strict-aliasing -fno-common -ffixed-r8 \
+ -mshort-load-bytes -msoft-float
+
+PLATFORM_CPPFLAGS += -mapcs-32 -march=armv4
diff --git a/cpu/mc9328/cpu.c b/cpu/mc9328/cpu.c
new file mode 100644
index 000000000..2a2b57801
--- /dev/null
+++ b/cpu/mc9328/cpu.c
@@ -0,0 +1,183 @@
+/*
+ * (C) Copyright 2002
+ * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
+ * Marius Groeger <mgroeger@sysgo.de>
+ *
+ * (C) Copyright 2002
+ * Gary Jennejohn, DENX Software Engineering, <gj@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
+ */
+
+/*
+ * CPU specific code
+ */
+
+#include <common.h>
+#include <command.h>
+#include <arm920t.h>
+
+/* read co-processor 15, register #1 (control register) */
+static unsigned long read_p15_c1 (void)
+{
+ unsigned long value;
+
+ __asm__ __volatile__(
+ "mrc p15, 0, %0, c1, c0, 0 @ read control reg\n"
+ : "=r" (value)
+ :
+ : "memory");
+
+#ifdef MMU_DEBUG
+ printf ("p15/c1 is = %08lx\n", value);
+#endif
+ return value;
+}
+
+/* write to co-processor 15, register #1 (control register) */
+static void write_p15_c1 (unsigned long value)
+{
+#ifdef MMU_DEBUG
+ printf ("write %08lx to p15/c1\n", value);
+#endif
+ __asm__ __volatile__(
+ "mcr p15, 0, %0, c1, c0, 0 @ write it back\n"
+ :
+ : "r" (value)
+ : "memory");
+
+ read_p15_c1 ();
+}
+
+static void cp_delay (void)
+{
+ volatile int i;
+
+ /* copro seems to need some delay between reading and writing */
+ for (i = 0; i < 100; i++);
+}
+
+/* See also ARM Ref. Man. */
+#define C1_MMU (1<<0) /* mmu off/on */
+#define C1_ALIGN (1<<1) /* alignment faults off/on */
+#define C1_DC (1<<2) /* dcache off/on */
+#define C1_BIG_ENDIAN (1<<7) /* big endian off/on */
+#define C1_SYS_PROT (1<<8) /* system protection */
+#define C1_ROM_PROT (1<<9) /* ROM protection */
+#define C1_IC (1<<12) /* icache off/on */
+#define C1_HIGH_VECTORS (1<<13) /* location of vectors: low/high addresses */
+#define RESERVED_1 (0xf << 3) /* must be 111b for R/W */
+
+int cpu_init (void)
+{
+ /*
+ * setup up stacks if necessary
+ */
+#ifdef CONFIG_USE_IRQ
+ DECLARE_GLOBAL_DATA_PTR;
+
+ IRQ_STACK_START = _armboot_start - CFG_MALLOC_LEN - CFG_GBL_DATA_SIZE - 4;
+ FIQ_STACK_START = IRQ_STACK_START - CONFIG_STACKSIZE_IRQ;
+#endif
+ return 0;
+}
+
+int cleanup_before_linux (void)
+{
+ /*
+ * this function is called just before we call linux
+ * it prepares the processor for linux
+ *
+ * we turn off caches etc ...
+ */
+
+ unsigned long i;
+
+ disable_interrupts ();
+
+ /* turn off I/D-cache */
+ asm ("mrc p15, 0, %0, c1, c0, 0":"=r" (i));
+ i &= ~(C1_DC | C1_IC);
+ asm ("mcr p15, 0, %0, c1, c0, 0": :"r" (i));
+
+ /* flush I/D-cache */
+ i = 0;
+ asm ("mcr p15, 0, %0, c7, c7, 0": :"r" (i));
+ return (0);
+}
+
+int do_reset (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+ extern void reset_cpu (ulong addr);
+
+ disable_interrupts ();
+ reset_cpu (0);
+ /*NOTREACHED*/
+ return (0);
+}
+
+void icache_enable (void)
+{
+ ulong reg;
+
+ reg = read_p15_c1 ();
+ cp_delay ();
+ write_p15_c1 (reg | C1_IC);
+}
+
+void icache_disable (void)
+{
+ ulong reg;
+
+ reg = read_p15_c1 ();
+ cp_delay ();
+ write_p15_c1 (reg & ~C1_IC);
+}
+
+int icache_status (void)
+{
+ return (read_p15_c1 () & C1_IC) != 0;
+}
+
+#ifdef USE_920T_MMU
+/* It makes no sense to use the dcache if the MMU is not enabled */
+void dcache_enable (void)
+{
+ ulong reg;
+
+ reg = read_p15_c1 ();
+ cp_delay ();
+ write_p15_c1 (reg | C1_DC);
+}
+
+void dcache_disable (void)
+{
+ ulong reg;
+
+ reg = read_p15_c1 ();
+ cp_delay ();
+ reg &= ~C1_DC;
+ write_p15_c1 (reg);
+}
+
+int dcache_status (void)
+{
+ return (read_p15_c1 () & C1_DC) != 0;
+}
+#endif
diff --git a/cpu/mc9328/interrupts.c b/cpu/mc9328/interrupts.c
new file mode 100644
index 000000000..3a922cfc4
--- /dev/null
+++ b/cpu/mc9328/interrupts.c
@@ -0,0 +1,250 @@
+/*
+ * (C) Copyright 2002
+ * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
+ * Marius Groeger <mgroeger@sysgo.de>
+ *
+ * (C) Copyright 2002
+ * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
+ * Alex Zuepke <azu@sysgo.de>
+ *
+ * (C) Copyright 2002
+ * Gary Jennejohn, DENX Software Engineering, <gj@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 <arm920t.h>
+#include <mc9328.h>
+
+#include <asm/proc-armv/ptrace.h>
+
+extern void reset_cpu(ulong addr);
+int timer_load_val = 0;
+
+#ifdef CONFIG_USE_IRQ
+/* enable IRQ interrupts */
+void enable_interrupts (void)
+{
+ unsigned long temp;
+ __asm__ __volatile__("mrs %0, cpsr\n"
+ "bic %0, %0, #0x80\n"
+ "msr cpsr_c, %0"
+ : "=r" (temp)
+ :
+ : "memory");
+}
+
+
+/*
+ * disable IRQ/FIQ interrupts
+ * returns true if interrupts had been enabled before we disabled them
+ */
+int disable_interrupts (void)
+{
+ unsigned long old,temp;
+ __asm__ __volatile__("mrs %0, cpsr\n"
+ "orr %1, %0, #0xc0\n"
+ "msr cpsr_c, %1"
+ : "=r" (old), "=r" (temp)
+ :
+ : "memory");
+ return (old & 0x80) == 0;
+}
+#else
+void enable_interrupts (void)
+{
+ return;
+}
+int disable_interrupts (void)
+{
+ return 0;
+}
+#endif
+
+
+void bad_mode (void)
+{
+ panic ("Resetting CPU ...\n");
+ reset_cpu (0);
+}
+
+void show_regs (struct pt_regs *regs)
+{
+ unsigned long flags;
+ const char *processor_modes[] = {
+ "USER_26", "FIQ_26", "IRQ_26", "SVC_26",
+ "UK4_26", "UK5_26", "UK6_26", "UK7_26",
+ "UK8_26", "UK9_26", "UK10_26", "UK11_26",
+ "UK12_26", "UK13_26", "UK14_26", "UK15_26",
+ "USER_32", "FIQ_32", "IRQ_32", "SVC_32",
+ "UK4_32", "UK5_32", "UK6_32", "ABT_32",
+ "UK8_32", "UK9_32", "UK10_32", "UND_32",
+ "UK12_32", "UK13_32", "UK14_32", "SYS_32",
+ };
+
+ flags = condition_codes (regs);
+
+ printf ("pc : [<%08lx>] lr : [<%08lx>]\n"
+ "sp : %08lx ip : %08lx fp : %08lx\n",
+ instruction_pointer (regs),
+ regs->ARM_lr, regs->ARM_sp, regs->ARM_ip, regs->ARM_fp);
+ printf ("r10: %08lx r9 : %08lx r8 : %08lx\n",
+ regs->ARM_r10, regs->ARM_r9, regs->ARM_r8);
+ printf ("r7 : %08lx r6 : %08lx r5 : %08lx r4 : %08lx\n",
+ regs->ARM_r7, regs->ARM_r6, regs->ARM_r5, regs->ARM_r4);
+ printf ("r3 : %08lx r2 : %08lx r1 : %08lx r0 : %08lx\n",
+ regs->ARM_r3, regs->ARM_r2, regs->ARM_r1, regs->ARM_r0);
+ printf ("Flags: %c%c%c%c",
+ flags & CC_N_BIT ? 'N' : 'n',
+ flags & CC_Z_BIT ? 'Z' : 'z',
+ flags & CC_C_BIT ? 'C' : 'c', flags & CC_V_BIT ? 'V' : 'v');
+ printf (" IRQs %s FIQs %s Mode %s%s\n",
+ interrupts_enabled (regs) ? "on" : "off",
+ fast_interrupts_enabled (regs) ? "on" : "off",
+ processor_modes[processor_mode (regs)],
+ thumb_mode (regs) ? " (T)" : "");
+}
+
+void do_undefined_instruction (struct pt_regs *pt_regs)
+{
+ printf ("undefined instruction\n");
+ show_regs (pt_regs);
+ bad_mode ();
+}
+
+void do_software_interrupt (struct pt_regs *pt_regs)
+{
+ printf ("software interrupt\n");
+ show_regs (pt_regs);
+ bad_mode ();
+}
+
+void do_prefetch_abort (struct pt_regs *pt_regs)
+{
+ printf ("prefetch abort\n");
+ show_regs (pt_regs);
+ bad_mode ();
+}
+
+void do_data_abort (struct pt_regs *pt_regs)
+{
+ printf ("data abort\n");
+ show_regs (pt_regs);
+ bad_mode ();
+}
+
+void do_not_used (struct pt_regs *pt_regs)
+{
+ printf ("not used\n");
+ show_regs (pt_regs);
+ bad_mode ();
+}
+
+void do_fiq (struct pt_regs *pt_regs)
+{
+ printf ("fast interrupt request\n");
+ show_regs (pt_regs);
+ bad_mode ();
+}
+
+void do_irq (struct pt_regs *pt_regs)
+{
+ printf ("interrupt request\n");
+ show_regs (pt_regs);
+ bad_mode ();
+}
+
+
+int interrupt_init (void)
+{
+
+/* we don't use interrupt */
+ return(0);
+}
+
+/*
+ * timer without interrupts
+ */
+
+void reset_timer (void)
+{
+ reset_timer_masked ();
+}
+
+ulong get_timer (ulong base)
+{
+ return get_timer_masked ();
+}
+
+void set_timer (ulong t)
+{
+/* Nop */
+}
+
+void udelay (unsigned long usec)
+{
+ udelay_masked (usec);
+}
+
+void reset_timer_masked (void)
+{
+ u32 tmp;
+ MX1_TCTL1 = 0x09;
+ tmp = 0x1f; /* a little delay for timer to reset */
+ MX1_TPRER1 = 0x1f;
+ MX1_TCTL1 = 0x19;
+}
+
+ulong get_timer_masked (void)
+{
+ return MX1_TCN1;
+}
+
+void udelay_masked (unsigned long usec)
+{
+ ulong tmo;
+
+ tmo = usec / 1000;
+ tmo *= CFG_HZ;
+ tmo /= 1000;
+
+ reset_timer_masked ();
+
+ while (get_timer_masked () < tmo);
+}
+
+/*
+ * This function is derived from PowerPC code (read timebase as long long).
+ * On ARM it just returns the timer value.
+ */
+unsigned long long get_ticks(void)
+{
+ return get_timer(0);
+}
+
+/*
+ * This function is derived from PowerPC code (timebase clock frequency).
+ * On ARM it returns the number of timer ticks per second.
+ */
+
+ulong get_tbclk (void) {
+ return CFG_HZ;
+}
+
diff --git a/cpu/mc9328/serial.c b/cpu/mc9328/serial.c
new file mode 100644
index 000000000..45b6f8afd
--- /dev/null
+++ b/cpu/mc9328/serial.c
@@ -0,0 +1,146 @@
+/*
+ * cpu/mc9328/serial.c
+ *
+ * (c) Copyright 2004
+ * Techware Information Technology, Inc.
+ * http://www.techware.com.tw/
+ *
+ * Ming-Len Wu <minglen_wu@techware.com.tw>
+ *
+ * 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 <mc9328.h>
+
+#if defined(CONFIG_UART1)
+/* GPIO PORT B */
+
+#define reg_GIUS MX1_GIUS_C
+#define reg_GPR MX1_GPR_B
+#define GPIO_MASK 0xFFFFE1FF
+#define UART_BASE 0x00206000
+
+
+#elif defined (CONFIG_UART2)
+/* GPIO PORT C */
+
+#define reg_GIUS MX1_GIUS_C
+#define reg_GPR MX1_GPR_C
+#define GPIO_MASK 0x0FFFFFFF
+#define UART_BASE 0x207000
+
+#endif
+
+#define reg_URXD (*((volatile u32 *)(UART_BASE+0x00)))
+#define reg_UTXD (*((volatile u32 *)(UART_BASE+0x40)))
+#define reg_UCR1 (*((volatile u32 *)(UART_BASE+0x80)))
+#define reg_UCR2 (*((volatile u32 *)(UART_BASE+0x84)))
+#define reg_UCR3 (*((volatile u32 *)(UART_BASE+0x88)))
+#define reg_UCR4 (*((volatile u32 *)(UART_BASE+0x8C)))
+#define reg_UFCR (*((volatile u32 *)(UART_BASE+0x90)))
+#define reg_USR1 (*((volatile u32 *)(UART_BASE+0x94)))
+#define reg_USR2 (*((volatile u32 *)(UART_BASE+0x98)))
+#define reg_UESC (*((volatile u32 *)(UART_BASE+0x9C)))
+#define reg_UTIM (*((volatile u32 *)(UART_BASE+0xA0)))
+#define reg_UBIR (*((volatile u32 *)(UART_BASE+0xA4)))
+#define reg_UBMR (*((volatile u32 *)(UART_BASE+0xA8)))
+#define reg_UBRC (*((volatile u32 *)(UART_BASE+0xAC)))
+
+#define TXFE_MASK 0x4000 /* Tx buffer empty */
+#define RDR_MASK 0x0001 /* receive data ready */
+
+
+void serial_setbrg (void) {
+
+/* config I/O pins for UART */
+
+ reg_GIUS &= GPIO_MASK;
+ reg_GPR &= GPIO_MASK;
+
+/* config UART */
+
+ reg_UCR1 = 5;
+ reg_UCR2 = 0x4027;
+ reg_UCR4 = 1;
+ reg_UFCR = 0xA81;
+
+ reg_UBIR = 0xF;
+ reg_UBMR = 0x8A;
+ reg_UBRC = 8;
+}
+
+
+
+/*
+ * Initialise the serial port with the given baudrate. The settings
+ * are always 8 data bits, no parity, 1 stop bit, no start bits.
+ *
+ */
+
+int serial_init (void) {
+ serial_setbrg ();
+
+ return (0);
+}
+
+
+
+/*
+ * Read a single byte from the serial port. Returns 1 on success, 0
+ * otherwise. When the function is succesfull, the character read is
+ * written into its argument c.
+ */
+int serial_getc (void) {
+
+ while (!(reg_USR2 & RDR_MASK)) ; /* wait until RDR bit set */
+
+ return (u8)reg_URXD;
+}
+
+
+/*
+ * Output a single byte to the serial port.
+ */
+void serial_putc (const char c) {
+
+ while (!(reg_USR2 & TXFE_MASK)); /* wait until TXFE bit set */
+
+ reg_UTXD = (u16) c;
+
+ if (c == '\n') { /* carriage return ? append line-feed */
+ while (!(reg_USR2 & TXFE_MASK)); /* wait until TXFE bit set */
+ reg_UTXD = '\r';
+ }
+
+}
+
+
+/*
+ * Test whether a character is in the RX buffer
+ */
+int serial_tstc (void) {
+ return reg_USR2 & RDR_MASK;
+}
+
+
+void serial_puts (const char *s) {
+ while (*s) {
+ serial_putc (*s++);
+ }
+}
+
diff --git a/cpu/mc9328/start.S b/cpu/mc9328/start.S
new file mode 100644
index 000000000..edfce121b
--- /dev/null
+++ b/cpu/mc9328/start.S
@@ -0,0 +1,388 @@
+/*
+ * armboot - Startup Code for ARM920 CPU-core
+ *
+ * Copyright (c) 2001 Marius Gröger <mag@sysgo.de>
+ * Copyright (c) 2002 Alex Züpke <azu@sysgo.de>
+ * Copyright (c) 2002 Gary Jennejohn <gj@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 <config.h>
+#include <version.h>
+
+
+/*
+ *************************************************************************
+ *
+ * Jump vector table as in table 3.1 in [1]
+ *
+ *************************************************************************
+ */
+
+
+.globl _start
+_start: b reset
+ ldr pc, _undefined_instruction
+ ldr pc, _software_interrupt
+ ldr pc, _prefetch_abort
+ ldr pc, _data_abort
+ ldr pc, _not_used
+ ldr pc, _irq
+ ldr pc, _fiq
+
+_undefined_instruction: .word undefined_instruction
+_software_interrupt: .word software_interrupt
+_prefetch_abort: .word prefetch_abort
+_data_abort: .word data_abort
+_not_used: .word not_used
+_irq: .word irq
+_fiq: .word fiq
+
+ .balignl 16,0xdeadbeef
+
+
+/*
+ *************************************************************************
+ *
+ * Startup Code (reset vector)
+ *
+ * do important init only if we don't start from memory!
+ * relocate armboot to ram
+ * setup stack
+ * jump to second stage
+ *
+ *************************************************************************
+ */
+
+_TEXT_BASE:
+ .word TEXT_BASE
+
+.globl _armboot_start
+_armboot_start:
+ .word _start
+
+/*
+ * These are defined in the board-specific linker script.
+ */
+.globl _bss_start
+_bss_start:
+ .word __bss_start
+
+.globl _bss_end
+_bss_end:
+ .word _end
+
+#ifdef CONFIG_USE_IRQ
+/* IRQ stack memory (calculated at run-time) */
+.globl IRQ_STACK_START
+IRQ_STACK_START:
+ .word 0x0badc0de
+
+/* IRQ stack memory (calculated at run-time) */
+.globl FIQ_STACK_START
+FIQ_STACK_START:
+ .word 0x0badc0de
+#endif
+
+
+/*
+ * the actual reset code
+ */
+
+reset:
+ /*
+ * set the cpu to SVC32 mode
+ */
+ mrs r0,cpsr
+ bic r0,r0,#0x1f
+ orr r0,r0,#0xd3
+ msr cpsr,r0
+
+ /*
+ * we do sys-critical inits only at reboot,
+ * not when booting from ram!
+ */
+#ifdef CONFIG_INIT_CRITICAL
+ bl cpu_init_crit
+#endif
+
+relocate: /* relocate U-Boot to RAM */
+ adr r0, _start /* r0 <- current position of code */
+ ldr r1, _TEXT_BASE /* test if we run from flash or RAM */
+ cmp r0, r1 /* don't reloc during debug */
+ beq stack_setup
+
+ ldr r2, _armboot_start
+ ldr r3, _bss_start
+ sub r2, r3, r2 /* r2 <- size of armboot */
+ add r2, r0, r2 /* r2 <- source end address */
+
+copy_loop:
+ ldmia r0!, {r3-r10} /* copy from source address [r0] */
+ stmia r1!, {r3-r10} /* copy to target address [r1] */
+ cmp r0, r2 /* until source end addreee [r2] */
+ ble copy_loop
+
+ /* Set up the stack */
+stack_setup:
+ ldr r0, _TEXT_BASE /* upper 128 KiB: relocated uboot */
+ sub r0, r0, #CFG_MALLOC_LEN /* malloc area */
+ sub r0, r0, #CFG_GBL_DATA_SIZE /* bdinfo */
+#ifdef CONFIG_USE_IRQ
+ sub r0, r0, #(CONFIG_STACKSIZE_IRQ+CONFIG_STACKSIZE_FIQ)
+#endif
+ sub sp, r0, #12 /* leave 3 words for abort-stack */
+
+clear_bss:
+ ldr r0, _bss_start /* find start of bss segment */
+ ldr r1, _bss_end /* stop here */
+ mov r2, #0x00000000 /* clear */
+
+clbss_l:str r2, [r0] /* clear loop... */
+ add r0, r0, #4
+ cmp r0, r1
+ bne clbss_l
+
+ ldr pc, _start_armboot
+
+_start_armboot: .word start_armboot
+
+
+/*
+ *************************************************************************
+ *
+ * CPU_init_critical registers
+ *
+ * setup important registers
+ * setup memory timing
+ *
+ *************************************************************************
+ */
+
+
+cpu_init_crit:
+ /*
+ * flush v4 I/D caches
+ */
+ mov r0, #0
+ mcr p15, 0, r0, c7, c7, 0 /* flush v3/v4 cache */
+ mcr p15, 0, r0, c8, c7, 0 /* flush v4 TLB */
+
+ /*
+ * disable MMU stuff and caches
+ */
+ mrc p15, 0, r0, c1, c0, 0
+ bic r0, r0, #0x00002300 @ clear bits 13, 9:8 (--V- --RS)
+ bic r0, r0, #0x00000087 @ clear bits 7, 2:0 (B--- -CAM)
+ orr r0, r0, #0x00000002 @ set bit 2 (A) Align
+ orr r0, r0, #0x00001000 @ set bit 12 (I) I-Cache
+ mcr p15, 0, r0, c1, c0, 0
+
+
+ /*
+ * before relocating, we have to setup RAM timing
+ * because memory timing is board-dependend, you will
+ * find a memsetup.S in your board directory.
+ */
+ mov ip, lr
+ bl memsetup
+ mov lr, ip
+
+ mov pc, lr
+
+
+/*
+ *************************************************************************
+ *
+ * Interrupt handling
+ *
+ *************************************************************************
+ */
+
+@
+@ IRQ stack frame.
+@
+#define S_FRAME_SIZE 72
+
+#define S_OLD_R0 68
+#define S_PSR 64
+#define S_PC 60
+#define S_LR 56
+#define S_SP 52
+
+#define S_IP 48
+#define S_FP 44
+#define S_R10 40
+#define S_R9 36
+#define S_R8 32
+#define S_R7 28
+#define S_R6 24
+#define S_R5 20
+#define S_R4 16
+#define S_R3 12
+#define S_R2 8
+#define S_R1 4
+#define S_R0 0
+
+#define MODE_SVC 0x13
+#define I_BIT 0x80
+
+/*
+ * use bad_save_user_regs for abort/prefetch/undef/swi ...
+ * use irq_save_user_regs / irq_restore_user_regs for IRQ/FIQ handling
+ */
+
+ .macro bad_save_user_regs
+ sub sp, sp, #S_FRAME_SIZE
+ stmia sp, {r0 - r12} @ Calling r0-r12
+ ldr r2, _armboot_start
+ sub r2, r2, #(CONFIG_STACKSIZE+CFG_MALLOC_LEN)
+ sub r2, r2, #(CFG_GBL_DATA_SIZE+8) @ set base 2 words into abort stack
+ ldmia r2, {r2 - r3} @ get pc, cpsr
+ add r0, sp, #S_FRAME_SIZE @ restore sp_SVC
+
+ add r5, sp, #S_SP
+ mov r1, lr
+ stmia r5, {r0 - r3} @ save sp_SVC, lr_SVC, pc, cpsr
+ mov r0, sp
+ .endm
+
+ .macro irq_save_user_regs
+ sub sp, sp, #S_FRAME_SIZE
+ stmia sp, {r0 - r12} @ Calling r0-r12
+ add r8, sp, #S_PC
+ stmdb r8, {sp, lr}^ @ Calling SP, LR
+ str lr, [r8, #0] @ Save calling PC
+ mrs r6, spsr
+ str r6, [r8, #4] @ Save CPSR
+ str r0, [r8, #8] @ Save OLD_R0
+ mov r0, sp
+ .endm
+
+ .macro irq_restore_user_regs
+ ldmia sp, {r0 - lr}^ @ Calling r0 - lr
+ mov r0, r0
+ ldr lr, [sp, #S_PC] @ Get PC
+ add sp, sp, #S_FRAME_SIZE
+ subs pc, lr, #4 @ return & move spsr_svc into cpsr
+ .endm
+
+ .macro get_bad_stack
+ ldr r13, _armboot_start @ setup our mode stack
+ sub r13, r13, #(CONFIG_STACKSIZE+CFG_MALLOC_LEN)
+ sub r13, r13, #(CFG_GBL_DATA_SIZE+8) @ reserved a couple spots in abort stack
+
+ str lr, [r13] @ save caller lr / spsr
+ mrs lr, spsr
+ str lr, [r13, #4]
+
+ mov r13, #MODE_SVC @ prepare SVC-Mode
+ @ msr spsr_c, r13
+ msr spsr, r13
+ mov lr, pc
+ movs pc, lr
+ .endm
+
+ .macro get_irq_stack @ setup IRQ stack
+ ldr sp, IRQ_STACK_START
+ .endm
+
+ .macro get_fiq_stack @ setup FIQ stack
+ ldr sp, FIQ_STACK_START
+ .endm
+
+/*
+ * exception handlers
+ */
+ .align 5
+undefined_instruction:
+ get_bad_stack
+ bad_save_user_regs
+ bl do_undefined_instruction
+
+ .align 5
+software_interrupt:
+ get_bad_stack
+ bad_save_user_regs
+ bl do_software_interrupt
+
+ .align 5
+prefetch_abort:
+ get_bad_stack
+ bad_save_user_regs
+ bl do_prefetch_abort
+
+ .align 5
+data_abort:
+ get_bad_stack
+ bad_save_user_regs
+ bl do_data_abort
+
+ .align 5
+not_used:
+ get_bad_stack
+ bad_save_user_regs
+ bl do_not_used
+
+#ifdef CONFIG_USE_IRQ
+
+ .align 5
+irq:
+ get_irq_stack
+ irq_save_user_regs
+ bl do_irq
+ irq_restore_user_regs
+
+ .align 5
+fiq:
+ get_fiq_stack
+ /* someone ought to write a more effiction fiq_save_user_regs */
+ irq_save_user_regs
+ bl do_fiq
+ irq_restore_user_regs
+
+#else
+
+ .align 5
+irq:
+ get_bad_stack
+ bad_save_user_regs
+ bl do_irq
+
+ .align 5
+fiq:
+ get_bad_stack
+ bad_save_user_regs
+ bl do_fiq
+
+#endif
+
+ .align 5
+.globl reset_cpu
+reset_cpu:
+ mov ip, #0
+ mcr p15, 0, ip, c7, c7, 0 @ invalidate cache
+ mcr p15, 0, ip, c8, c7, 0 @ flush TLB (v4)
+ mrc p15, 0, ip, c1, c0, 0 @ get ctrl register
+ bic ip, ip, #0x000f @ ............wcam
+ bic ip, ip, #0x2100 @ ..v....s........
+ mcr p15, 0, ip, c1, c0, 0 @ ctrl register
+ mov pc, r0
diff --git a/include/configs/Adder.h b/include/configs/Adder.h
new file mode 100644
index 000000000..11a82c9fc
--- /dev/null
+++ b/include/configs/Adder.h
@@ -0,0 +1,185 @@
+/*
+ * Copyright (C) 2004 Arabella Software Ltd.
+ * Yuli Barcohen <yuli@arabellasw.com>
+ *
+ * Support for Analogue&Micro Adder boards family.
+ * Tested on AdderII and Adder87x.
+ *
+ * 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
+
+#if !defined(CONFIG_MPC875) && !defined(CONFIG_MPC852T)
+#define CONFIG_MPC875
+#endif
+
+#define CONFIG_ADDER /* Analogue&Micro Adder board */
+
+#define CONFIG_8xx_CONS_SMC1 1 /* Console is on SMC1 */
+#define CONFIG_BAUDRATE 38400
+
+#define CONFIG_FEC_ENET /* Ethernet is on FEC */
+#ifdef CONFIG_FEC_ENET
+#define CFG_DISCOVER_PHY
+#define FEC_ENET
+#endif /* CONFIG_FEC_ENET */
+
+#define CONFIG_8xx_OSCLK 10000000 /* 10 MHz oscillator on EXTCLK */
+
+#define CONFIG_COMMANDS (CONFIG_CMD_DFL \
+ | CFG_CMD_DHCP \
+ | CFG_CMD_IMMAP \
+ | CFG_CMD_MII \
+ | CFG_CMD_PING \
+ )
+
+/* This must be included AFTER the definition of CONFIG_COMMANDS */
+#include <cmd_confdefs.h>
+
+#define CONFIG_BOOTDELAY 5 /* Autoboot after 5 seconds */
+#define CONFIG_BOOTCOMMAND "bootm fe040000" /* Autoboot command */
+#define CONFIG_BOOTARGS "root=/dev/mtdblock2 rw"
+
+#define CONFIG_BZIP2 /* Include support for bzip2 compressed images */
+#undef CONFIG_WATCHDOG /* Disable platform specific watchdog */
+
+/*-----------------------------------------------------------------------
+ * Miscellaneous configurable options
+ */
+#define CFG_PROMPT "=> " /* Monitor Command Prompt */
+#define CFG_HUSH_PARSER
+#define CFG_PROMPT_HUSH_PS2 "> "
+#define CFG_LONGHELP /* #undef to save memory */
+#define CFG_CBSIZE 256 /* Console I/O Buffer Size */
+#define CFG_PBSIZE (CFG_CBSIZE + sizeof(CFG_PROMPT) + 16) /* Print Buffer Size */
+#define CFG_MAXARGS 16 /* Max number of command args */
+#define CFG_BARGSIZE CFG_CBSIZE /* Boot Argument Buffer Size */
+
+#define CFG_LOAD_ADDR 0x100000 /* Default load address */
+
+#define CFG_HZ 1000 /* Decrementer freq: 1 ms ticks */
+
+#define CFG_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200 }
+
+/*-----------------------------------------------------------------------
+ * RAM configuration (note that CFG_SDRAM_BASE must be zero)
+ */
+#define CFG_SDRAM_BASE 0x00000000
+#define CFG_SDRAM_SIZE 0x00800000 /* 8 Mbyte */
+
+#define CFG_OR1_PRELIM (0xFF800000 | OR_CSNT_SAM | OR_ACS_DIV2)
+#define CFG_BR1_PRELIM (CFG_SDRAM_BASE | BR_PS_32 | BR_MS_UPMA | BR_V)
+
+#define CFG_MAMR 0x00802114
+
+#define CFG_MEMTEST_START 0x00100000 /* memtest works on */
+#define CFG_MEMTEST_END 0x00700000 /* 1 ... 7 MB in SDRAM */
+
+#define CFG_RESET_ADDRESS 0x09900000
+
+/*-----------------------------------------------------------------------
+ * 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 CFG_BOOTMAPSZ (8 << 20) /* Initial Memory map for Linux */
+
+#define CFG_MONITOR_BASE TEXT_BASE
+#define CFG_MONITOR_LEN (192 << 10) /* Reserve 192 KB for Monitor */
+#ifdef CONFIG_BZIP2
+#define CFG_MALLOC_LEN (2500 << 10) /* Reserve ~2.5 MB for malloc() */
+#else
+#define CFG_MALLOC_LEN (128 << 10) /* Reserve 128 KB for malloc() */
+#endif /* CONFIG_BZIP2 */
+
+/*-----------------------------------------------------------------------
+ * Flash organisation
+ */
+#define CFG_FLASH_BASE 0xFE000000
+#define CFG_FLASH_CFI /* The flash is CFI compatible */
+#define CFG_FLASH_CFI_DRIVER /* Use common CFI driver */
+#define CFG_MAX_FLASH_BANKS 1 /* Max number of flash banks */
+#define CFG_MAX_FLASH_SECT 128 /* Max num of sects on one chip */
+
+/* Environment is in flash */
+#define CFG_ENV_IS_IN_FLASH
+#define CFG_ENV_SECT_SIZE 0x10000 /* We use one complete sector */
+#define CFG_ENV_ADDR (CFG_MONITOR_BASE + CFG_MONITOR_LEN)
+
+#define CFG_OR0_PRELIM 0xFF000774
+#define CFG_BR0_PRELIM (CFG_FLASH_BASE | BR_PS_16 | BR_MS_GPCM | BR_V)
+
+/*-----------------------------------------------------------------------
+ * Internal Memory Map Register
+ */
+#define CFG_IMMR 0xFF000000
+
+/*-----------------------------------------------------------------------
+ * Definitions for initial stack pointer and data area (in DPRAM)
+ */
+#define CFG_INIT_RAM_ADDR CFG_IMMR
+#define CFG_INIT_RAM_END 0x2F00 /* End of used area in DPRAM */
+#define CFG_GBL_DATA_SIZE 128 /* Size in bytes reserved for initial data */
+#define CFG_GBL_DATA_OFFSET (CFG_INIT_RAM_END - CFG_GBL_DATA_SIZE)
+#define CFG_INIT_SP_OFFSET CFG_GBL_DATA_OFFSET
+
+/*-----------------------------------------------------------------------
+ * Configuration registers
+ */
+#ifdef CONFIG_WATCHDOG
+#define CFG_SYPCR (SYPCR_SWTC | SYPCR_BMT | SYPCR_BME | \
+ SYPCR_SWF | SYPCR_SWE | SYPCR_SWRI | \
+ SYPCR_SWP)
+#else
+#define CFG_SYPCR (SYPCR_SWTC | SYPCR_BMT | SYPCR_BME | \
+ SYPCR_SWF | SYPCR_SWP)
+#endif /* CONFIG_WATCHDOG */
+
+#define CFG_SIUMCR (SIUMCR_MLRC01 | SIUMCR_DBGC11)
+
+/* TBSCR - Time Base Status and Control Register */
+#define CFG_TBSCR (TBSCR_TBF | TBSCR_TBE)
+
+/* PISCR - Periodic Interrupt Status and Control */
+#define CFG_PISCR (PISCR_PS | PISCR_PITF)
+
+/* PLPRCR - PLL, Low-Power, and Reset Control Register */
+/* #define CFG_PLPRCR PLPRCR_TEXPS */
+
+/* SCCR - System Clock and reset Control Register */
+#define SCCR_MASK SCCR_EBDF11
+#define CFG_SCCR SCCR_RTSEL
+
+#define CFG_DER 0
+
+/*-----------------------------------------------------------------------
+ * Cache Configuration
+ */
+#define CFG_CACHELINE_SIZE 16 /* For all MPC8xx chips */
+
+/*-----------------------------------------------------------------------
+ * Internal Definitions
+ *
+ * Boot Flags
+ */
+#define BOOTFLAG_COLD 0x01 /* Normal Power-On: Boot from flash */
+#define BOOTFLAG_WARM 0x02 /* Software reboot */
+
+#endif /* __CONFIG_H */
diff --git a/include/configs/mx1ads.h b/include/configs/mx1ads.h
new file mode 100644
index 000000000..9d4ab2b52
--- /dev/null
+++ b/include/configs/mx1ads.h
@@ -0,0 +1,185 @@
+/*
+ * include/configs/mx1ads.h
+ *
+ * (c) Copyright 2004
+ * Techware Information Technology, Inc.
+ * http://www.techware.com.tw/
+ *
+ * Ming-Len Wu <minglen_wu@techware.com.tw>
+ *
+ * This is the Configuration setting for Motorola MX1ADS board
+ *
+ * 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
+
+/*
+ * If we are developing, we might want to start armboot from ram
+ * so we MUST NOT initialize critical regs like mem-timing ...
+ */
+#define CONFIG_INIT_CRITICAL /* undef for developing */
+
+/*
+ * High Level Configuration Options
+ * (easy to change)
+ */
+#define CONFIG_ARM920T 1 /* This is an ARM920T Core */
+#define CONFIG_MC9328 1 /* It's a Motorola MC9328 SoC */
+#define CONFIG_MX1ADS 1 /* on a Motorola MX1ADS Board */
+
+#define BOARD_LATE_INIT 1
+
+
+#define USE_920T_MMU 1
+#undef CONFIG_USE_IRQ /* we don't need IRQ/FIQ stuff */
+
+#if 0
+#define CFG_MX1_GPCR 0x000003AB /* for MX1ADS 0L44N */
+#define CFG_MX1_GPCR 0x000003AB /* for MX1ADS 0L44N */
+#define CFG_MX1_GPCR 0x000003AB /* for MX1ADS 0L44N */
+#endif
+
+/*
+ * Size of malloc() pool
+ */
+
+#define CFG_MALLOC_LEN (CFG_ENV_SIZE + 128*1024)
+#define CFG_GBL_DATA_SIZE 128 /* size in bytes reserved for initial data */
+
+/*
+ * CS8900 Ethernet drivers
+ */
+#define CONFIG_DRIVER_CS8900 1 /* we have a CS8900 on-board */
+#define CS8900_BASE 0x15000300
+#define CS8900_BUS16 1 /* the Linux driver does accesses as shorts */
+
+/*
+ * select serial console configuration
+ */
+
+#define CONFIG_UART1 1
+/* #define CONFIG_UART2 1 */
+
+#define CONFIG_BAUDRATE 115200
+
+/***********************************************************
+ * Command definition
+ ***********************************************************/
+
+#define CONFIG_COMMANDS \
+ (CONFIG_CMD_DFL | \
+ CFG_CMD_CACHE | \
+ /*CFG_CMD_NAND |*/ \
+ /*CFG_CMD_EEPROM |*/ \
+ /*CFG_CMD_I2C |*/ \
+ /*CFG_CMD_USB |*/ \
+ CFG_CMD_REGINFO | \
+ CFG_CMD_ELF)
+
+/* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
+#include <cmd_confdefs.h>
+
+#define CONFIG_BOOTDELAY 3
+#define CONFIG_BOOTARGS "root=/dev/docbp mem=48M"
+#define CONFIG_ETHADDR 08:00:3e:26:0a:5c
+#define CONFIG_NETMASK 255.255.255.0
+#define CONFIG_IPADDR 192.168.0.22
+#define CONFIG_SERVERIP 192.168.0.11
+#define CONFIG_BOOTFILE "mx1ads"
+/*#define CONFIG_BOOTCOMMAND "tftp; bootm" */
+
+#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
+#define CONFIG_KGDB_BAUDRATE 115200 /* speed to run kgdb serial port */
+ /* what's this ? it's not used anywhere */
+#define CONFIG_KGDB_SER_INDEX 1 /* which serial port to use */
+#endif
+
+/*
+ * Miscellaneous configurable options
+ */
+
+#define CFG_HUSH_PARSER 1
+#define CFG_PROMPT_HUSH_PS2 "> "
+
+#define CFG_LONGHELP /* undef to save memory */
+
+#ifdef CFG_HUSH_PARSER
+#define CFG_PROMPT "MX1ADS$ " /* Monitor Command Prompt */
+#else
+#define CFG_PROMPT "MX1ADS=> " /* Monitor Command Prompt */
+#endif
+
+#define CFG_CBSIZE 256 /* Console I/O Buffer Size */
+#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16)
+ /* Print Buffer Size */
+#define CFG_MAXARGS 16 /* max number of command args */
+#define CFG_BARGSIZE CFG_CBSIZE /* Boot Argument Buffer Size */
+
+#define CFG_MEMTEST_START 0x09000000 /* memtest works on */
+#define CFG_MEMTEST_END 0x0AF00000 /* 63 MB in DRAM */
+
+#undef CFG_CLKS_IN_HZ /* everything, incl board info, in Hz */
+
+#define CFG_LOAD_ADDR 0x08800000 /* default load address */
+
+
+#define CFG_HZ 1000
+
+/* valid baudrates */
+#define CFG_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200 }
+
+/*-----------------------------------------------------------------------
+ * Stack sizes
+ *
+ * The stack sizes are set up in start.S using the settings below
+ */
+#define CONFIG_STACKSIZE (128*1024) /* regular stack */
+#ifdef CONFIG_USE_IRQ
+#define CONFIG_STACKSIZE_IRQ (4*1024) /* IRQ stack */
+#define CONFIG_STACKSIZE_FIQ (4*1024) /* FIQ stack */
+#endif
+
+/*-----------------------------------------------------------------------
+ * Physical Memory Map
+ */
+
+
+#define CONFIG_NR_DRAM_BANKS 1 /* we have 1 bank of SDRAM */
+#define PHYS_SDRAM_1 0x08000000 /* SDRAM on CSD0 */
+#define PHYS_SDRAM_1_SIZE 0x04000000 /* 64 MB */
+
+#define CFG_MAX_FLASH_BANKS 1 /* 1 bank of SyncFlash */
+#define CFG_FLASH_BASE 0x0C000000 /* SyncFlash on CSD1 */
+#define FLASH_BANK_SIZE 0x01000000 /* 16 MB Total */
+
+
+/*-----------------------------------------------------------------------
+ * FLASH and environment organization
+ */
+
+
+#define CONFIG_SYNCFLASH 1
+#define PHYS_FLASH_SIZE 0x01000000
+#define CFG_MAX_FLASH_SECT (16)
+#define CFG_ENV_ADDR (CFG_FLASH_BASE+0x00ff0000)
+
+#define CFG_ENV_IS_IN_FLASH 1
+#define CFG_ENV_SIZE 0x0f000 /* Total Size of Environment Sector */
+#define CFG_ENV_SECT_SIZE 0x100000
+#endif /* __CONFIG_H */
diff --git a/include/flash.h b/include/flash.h
index 190eb17d0..ddba7e51e 100644
--- a/include/flash.h
+++ b/include/flash.h
@@ -372,6 +372,7 @@ extern void flash_read_factory_serial(flash_info_t * info, void * buffer, int of
#define FLASH_FUJLV650 0x00B4 /* Fujitsu MBM 29LV650UE/651UE */
+#define FLASH_MT28S4M16LC 0x00B5 /* Micron MT28S4M16LC */
#define FLASH_UNKNOWN 0xFFFF /* unknown flash type */
diff --git a/include/mc9328.h b/include/mc9328.h
new file mode 100644
index 000000000..5adbf2c6c
--- /dev/null
+++ b/include/mc9328.h
@@ -0,0 +1,1221 @@
+/*
+ * include/mc9328.h
+ *
+ * (c) Copyright 2004
+ * Techware Information Technology, Inc.
+ * http://www.techware.com.tw/
+ *
+ * Ming-Len Wu <minglen_wu@techware.com.tw>
+ *
+ * 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 __MC9328_H__
+#define __MC9328_H__
+
+typedef volatile unsigned long VU32;
+typedef VU32 * P_VU32;
+
+#define __REG(x) (*((volatile u32 *)(x)))
+
+
+/*
+ * MX1 Chip selects & internal memory's
+ */
+
+
+#define MX1_DMI_PHYS 0x00000000 /* double map image */
+#define MX1_BROM_PHYS 0x00100000 /* Bootstrape ROM */
+#define MX1_ESRAM_PHYS 0x00300000 /* Embedded SRAM (128KB)*/
+
+#define MX1_CSD0_PHYS 0x08000000 /* CSD0 64MB (SDRAM) */
+#define MX1_CSD1_PHYS 0x0C000000 /* CSD1 64MB (SDRAM) */
+#define MX1_CS0_PHYS 0x10000000 /* CS0 32MB (Flash) */
+#define MX1_CS1_PHYS 0x12000000 /* CS1 16MB (Flash) */
+#define MX1_CS2_PHYS 0x13000000 /* CS2 16MB (Ext SRAM) */
+#define MX1_CS3_PHYS 0x14000000 /* CS3 16MB (Spare) */
+#define MX1_CS4_PHYS 0x15000000 /* CS4 16MB (Spare) */
+#define MX1_CS5_PHYS 0x16000000 /* CS5 16MB (Spare) */
+
+
+
+/*
+ * MX1 Watchdog registers
+ */
+
+#define MX1_WCR __REG(0x00201000) /* Watchdog Control Register */
+#define MX1_WSR __REG(0x00201004) /* Watchdog Service Register */
+#define MX1_WSTR __REG(0x00201008) /* Watchdog Status Register */
+
+
+
+/*
+ * MX1 Timer registers
+ */
+
+#define MX1_TCTL1 __REG(0x00202000) /* Timer 1 Control Register */
+#define MX1_TPRER1 __REG(0x00202004) /* Timer 1 Prescaler Register */
+#define MX1_TCMP1 __REG(0x00202008) /* Timer 1 Compare Register */
+#define MX1_TCR1 __REG(0x0020200C) /* Timer 1 Capture Register */
+#define MX1_TCN1 __REG(0x00202010) /* Timer 1 Counter Register */
+#define MX1_TSTAT1 __REG(0x00202014) /* Timer 1 Status Register */
+
+
+#define MX1_TCTL2 __REG(0x00203000) /* Timer 2 Control Register */
+#define MX1_TPRER2 __REG(0x00203004) /* Timer 2 Prescaler Register */
+#define MX1_TCMP2 __REG(0x00203008) /* Timer 2 Compare Register */
+#define MX1_TCR2 __REG(0x0020300C) /* Timer 2 Capture Register */
+#define MX1_TCN2 __REG(0x00203010) /* Timer 2 Counter Register */
+#define MX1_TSTAT2 __REG(0x00203014) /* Timer 2 Status Register */
+
+
+
+/*
+ * MX1 RTC registers
+ */
+
+#define MX1_HOURMIN __REG(0x00204000) /* RTC Hour & Min Counter Registers */
+#define MX1_SECONDS __REG(0x00204004) /* RTC Seconds Counter Registers */
+#define MX1_ALRM_HM __REG(0x00204008) /* RTC Hour & Min Alarm Registers */
+#define MX1_ALRM_SEC __REG(0x0020400C) /* RTC Seconds Alarm Registers */
+#define MX1_RCCTL __REG(0x00204010) /* RTC Control Registers */
+#define MX1_RTCISR __REG(0x00204014) /* RTC Interrupt Status Registers */
+#define MX1_RTCIENR __REG(0x00204018) /* RTC Interrupt Enable Registers */
+#define MX1_STPWCH __REG(0x0020401C) /* RTC Stopwatch Minutes Registers */
+#define MX1_DAYR __REG(0x00204020) /* RTC Days Counter Registers */
+#define MX1_DAYALARM __REG(0x00204020) /* RTC Day Alarm Registers */
+
+
+/*
+ * MX1 LCD Controller registers
+ */
+
+#define MX1_SSA __REG(0x00205000) /* Screen Start Address Register */
+#define MX1_SIZE __REG(0x00205004) /* Size Register */
+#define MX1_VPW __REG(0x00205008) /* Virtual Page Width Register */
+#define MX1_CPOS __REG(0x0020500C) /* LCD Cursor Position Register */
+#define MX1_LCWHB __REG(0x00205010) /* LCD Cursor Width Height & Blink Register */
+#define MX1_LCHCC __REG(0x00205014) /* LCD Color Cursor Mapping Register */
+#define MX1_PCR __REG(0x00205018) /* LCD Panel Configuration Register */
+#define MX1_HCR __REG(0x0020501C) /* Horizontal Configuration Register */
+#define MX1_VCR __REG(0x00205020) /* Vertical Configuration Register */
+#define MX1_POS __REG(0x00205024) /* Panning Offset Register */
+#define MX1_LGPMR __REG(0x00205028) /* LCD Gray Palette Mapping Register */
+#define MX1_PWMR __REG(0x0020502C) /* PWM Contrast Control Register */
+#define MX1_DMACR __REG(0x00205030) /* DMA Control Register */
+#define MX1_RMCR __REG(0x00205034) /* Refresh Mode Control Register */
+#define MX1_LCDICR __REG(0x00205038) /* Interrupt Configuration Register */
+#define MX1_LCDISR __REG(0x00205040) /* Interrupt Status Register */
+
+
+/*
+ * MX1 UART registers
+ */
+
+/* UART 1 */
+#define MX1_URX0D_1 __REG(0x00206000) /* UART 1 Receiver Register 0 */
+#define MX1_URX1D_1 __REG(0x00206004) /* UART 1 Receiver Register 1 */
+#define MX1_URX2D_1 __REG(0x00206008) /* UART 1 Receiver Register 2 */
+#define MX1_URX3D_1 __REG(0x0020600C) /* UART 1 Receiver Register 3 */
+#define MX1_URX4D_1 __REG(0x00206010) /* UART 1 Receiver Register 4 */
+#define MX1_URX5D_1 __REG(0x00206014) /* UART 1 Receiver Register 5 */
+#define MX1_URX6D_1 __REG(0x00206018) /* UART 1 Receiver Register 6 */
+#define MX1_URX7D_1 __REG(0x0020601C) /* UART 1 Receiver Register 7 */
+#define MX1_URX8D_1 __REG(0x00206020) /* UART 1 Receiver Register 8 */
+#define MX1_URX9D_1 __REG(0x00206024) /* UART 1 Receiver Register 9 */
+#define MX1_URX10D_1 __REG(0x00206028) /* UART 1 Receiver Register 10 */
+#define MX1_URX11D_1 __REG(0x0020602C) /* UART 1 Receiver Register 11 */
+#define MX1_URX12D_1 __REG(0x00206030) /* UART 1 Receiver Register 12 */
+#define MX1_URX13D_1 __REG(0x00206034) /* UART 1 Receiver Register 13 */
+#define MX1_URX14D_1 __REG(0x00206038) /* UART 1 Receiver Register 14 */
+#define MX1_URX15D_1 __REG(0x0020603c) /* UART 1 Receiver Register 15 */
+
+
+#define MX1_UTX0D_1 __REG(0x00206040) /* UART 1 Transmitter Register 0 */
+#define MX1_UTX1D_1 __REG(0x00206044) /* UART 1 Transmitter Register 1 */
+#define MX1_UTX2D_1 __REG(0x00206048) /* UART 1 Transmitter Register 2 */
+#define MX1_UTX3D_1 __REG(0x0020604C) /* UART 1 Transmitter Register 3 */
+#define MX1_UTX4D_1 __REG(0x00206050) /* UART 1 Transmitter Register 4 */
+#define MX1_UTX5D_1 __REG(0x00206054) /* UART 1 Transmitter Register 5 */
+#define MX1_UTX6D_1 __REG(0x00206058) /* UART 1 Transmitter Register 6 */
+#define MX1_UTX7D_1 __REG(0x0020605C) /* UART 1 Transmitter Register 7 */
+#define MX1_UTX8D_1 __REG(0x00206060) /* UART 1 Transmitter Register 8 */
+#define MX1_UTX9D_1 __REG(0x00206064) /* UART 1 Transmitter Register 9 */
+#define MX1_UTX10D_1 __REG(0x00206068) /* UART 1 Transmitter Register 10 */
+#define MX1_UTX11D_1 __REG(0x0020606C) /* UART 1 Transmitter Register 11 */
+#define MX1_UTX12D_1 __REG(0x00206060) /* UART 1 Transmitter Register 12 */
+#define MX1_UTX13D_1 __REG(0x00206074) /* UART 1 Transmitter Register 13 */
+#define MX1_UTX14D_1 __REG(0x00206078) /* UART 1 Transmitter Register 14 */
+#define MX1_UTX15D_1 __REG(0x0020607c) /* UART 1 Transmitter Register 15 */
+
+#define MX1_UCR1_1 __REG(0x00206080) /* UART 1 Control Register 1 */
+#define MX1_UCR2_1 __REG(0x00206084) /* UART 1 Control Register 2 */
+#define MX1_UCR3_1 __REG(0x00206088) /* UART 1 Control Register 3 */
+#define MX1_UCR4_1 __REG(0x0020608C) /* UART 1 Control Register 4 */
+#define MX1_UFCR_1 __REG(0x00206090) /* UART 1 FIFO Control Register */
+#define MX1_USR1_1 __REG(0x00206094) /* UART 1 Status Register 1 */
+#define MX1_USR2_1 __REG(0x00206098) /* UART 1 Status Register 2 */
+#define MX1_UESC_1 __REG(0x0020609C) /* UART 1 Escape Character Register */
+#define MX1_UTIM_1 __REG(0x002060A0) /* UART 1 Escape Timer Register */
+#define MX1_UBIR_1 __REG(0x002060A4) /* UART 1 BRM Incremental Register */
+#define MX1_UBMR_1 __REG(0x002060A8) /* UART 1 BRM Modulator Register */
+#define MX1_UBRC_1 __REG(0x002060AC) /* UART 1 Baud Rate Count Register */
+#define MX1_BIPR1_1 __REG(0x002060B0) /* UART 1 BRM Incremental Preset Register 1 */
+#define MX1_BIPR2_1 __REG(0x002060B4) /* UART 1 BRM Incremental Preset Register 2 */
+#define MX1_BIPR3_1 __REG(0x002060B8) /* UART 1 BRM Incremental Preset Register 3 */
+#define MX1_BIPR4_1 __REG(0x002060BC) /* UART 1 BRM Incremental Preset Register 4 */
+#define MX1_BMPR1_1 __REG(0x002060C0) /* UART 1 BRM Modulator Preset Register 1 */
+#define MX1_BMPR2_1 __REG(0x002060C4) /* UART 1 BRM Modulator Preset Register 2 */
+#define MX1_BMPR3_1 __REG(0x002060C8) /* UART 1 BRM Modulator Preset Register 3 */
+#define MX1_BMPR4_1 __REG(0x002060CC) /* UART 1 BRM Modulator Preset Register 4 */
+#define MX1_UTS_1 __REG(0x002060D0) /* UART 1 Test Register 1 */
+
+
+/* UART 2 */
+#define MX1_URX0D_2 __REG(0x00207000) /* UART 2 Receiver Register 0 */
+#define MX1_URX1D_2 __REG(0x00207004) /* UART 2 Receiver Register 1 */
+#define MX1_URX2D_2 __REG(0x00207008) /* UART 2 Receiver Register 2 */
+#define MX1_URX3D_2 __REG(0x0020700C) /* UART 2 Receiver Register 3 */
+#define MX1_URX4D_2 __REG(0x00207010) /* UART 2 Receiver Register 4 */
+#define MX1_URX5D_2 __REG(0x00207014) /* UART 2 Receiver Register 5 */
+#define MX1_URX6D_2 __REG(0x00207018) /* UART 2 Receiver Register 6 */
+#define MX1_URX7D_2 __REG(0x0020701C) /* UART 2 Receiver Register 7 */
+#define MX1_URX8D_2 __REG(0x00207020) /* UART 2 Receiver Register 8 */
+#define MX1_URX9D_2 __REG(0x00207024) /* UART 2 Receiver Register 9 */
+#define MX1_URX10D_2 __REG(0x00207028) /* UART 2 Receiver Register 10 */
+#define MX1_URX11D_2 __REG(0x0020702C) /* UART 2 Receiver Register 11 */
+#define MX1_URX12D_2 __REG(0x00207030) /* UART 2 Receiver Register 12 */
+#define MX1_URX13D_2 __REG(0x00207034) /* UART 2 Receiver Register 13 */
+#define MX1_URX14D_2 __REG(0x00207038) /* UART 2 Receiver Register 14 */
+#define MX1_URX15D_2 __REG(0x0020703c) /* UART 2 Receiver Register 15 */
+
+
+#define MX1_UTX0D_2 __REG(0x00207040) /* UART 2 Transmitter Register 0 */
+#define MX1_UTX1D_2 __REG(0x00207044) /* UART 2 Transmitter Register 1 */
+#define MX1_UTX2D_2 __REG(0x00207048) /* UART 2 Transmitter Register 2 */
+#define MX1_UTX3D_2 __REG(0x0020704C) /* UART 2 Transmitter Register 3 */
+#define MX1_UTX4D_2 __REG(0x00207050) /* UART 2 Transmitter Register 4 */
+#define MX1_UTX5D_2 __REG(0x00207054) /* UART 2 Transmitter Register 5 */
+#define MX1_UTX6D_2 __REG(0x00207058) /* UART 2 Transmitter Register 6 */
+#define MX1_UTX7D_2 __REG(0x0020705C) /* UART 2 Transmitter Register 7 */
+#define MX1_UTX8D_2 __REG(0x00207060) /* UART 2 Transmitter Register 8 */
+#define MX1_UTX9D_2 __REG(0x00207064) /* UART 2 Transmitter Register 9 */
+#define MX1_UTX10D_2 __REG(0x00207068) /* UART 2 Transmitter Register 10 */
+#define MX1_UTX11D_2 __REG(0x0020706C) /* UART 2 Transmitter Register 11 */
+#define MX1_UTX12D_2 __REG(0x00207060) /* UART 2 Transmitter Register 12 */
+#define MX1_UTX13D_2 __REG(0x00207074) /* UART 2 Transmitter Register 13 */
+#define MX1_UTX14D_2 __REG(0x00207078) /* UART 2 Transmitter Register 14 */
+#define MX1_UTX15D_2 __REG(0x0020707c) /* UART 2 Transmitter Register 15 */
+
+#define MX1_UCR1_2 __REG(0x00207080) /* UART 2 Control Register 1 */
+#define MX1_UCR2_2 __REG(0x00207084) /* UART 2 Control Register 2 */
+#define MX1_UCR3_2 __REG(0x00207088) /* UART 2 Control Register 3 */
+#define MX1_UCR4_2 __REG(0x0020708C) /* UART 2 Control Register 4 */
+#define MX1_UFCR_2 __REG(0x00207090) /* UART 2 FIFO Control Register */
+#define MX1_USR1_2 __REG(0x00207094) /* UART 2 Status Register 1 */
+#define MX1_USR2_2 __REG(0x00207098) /* UART 2 Status Register 2 */
+#define MX1_UESC_2 __REG(0x0020709C) /* UART 2 Escape Character Register */
+#define MX1_UTIM_2 __REG(0x002070A0) /* UART 2 Escape Timer Register */
+#define MX1_UBIR_2 __REG(0x002070A4) /* UART 2 BRM Incremental Register */
+#define MX1_UBMR_2 __REG(0x002070A8) /* UART 2 BRM Modulator Register */
+#define MX1_UBRC_2 __REG(0x002070AC) /* UART 2 Baud Rate Count Register */
+#define MX1_BIPR1_2 __REG(0x002070B0) /* UART 2 BRM Incremental Preset Register 1 */
+#define MX1_BIPR2_2 __REG(0x002070B4) /* UART 2 BRM Incremental Preset Register 2 */
+#define MX1_BIPR3_2 __REG(0x002070B8) /* UART 2 BRM Incremental Preset Register 3 */
+#define MX1_BIPR4_2 __REG(0x002070BC) /* UART 2 BRM Incremental Preset Register 4 */
+#define MX1_BMPR1_2 __REG(0x002070C0) /* UART 2 BRM Modulator Preset Register 1 */
+#define MX1_BMPR2_2 __REG(0x002070C4) /* UART 2 BRM Modulator Preset Register 2 */
+#define MX1_BMPR3_2 __REG(0x002070C8) /* UART 2 BRM Modulator Preset Register 3 */
+#define MX1_BMPR4_2 __REG(0x002070CC) /* UART 2 BRM Modulator Preset Register 4 */
+#define MX1_UTS_2 __REG(0x002070D0) /* UART 2 Test Register 1 */
+
+
+/*
+ * MX1 PWM registers
+ */
+
+#define MX1_PWMC __REG(0x00208000) /* PWM Control Register */
+#define MX1_PWMS __REG(0x00208004) /* PWM Sample Register */
+#define MX1_PWMP __REG(0x00208008) /* PWM Period Register */
+#define MX1_PWMCNT __REG(0x0020800C) /* PWM Counter Register */
+
+
+
+/*
+ * MX1 DMAC registers
+ */
+
+#define MX1_DCR __REG(0x00209000) /* DMA Control Register */
+#define MX1_DISR __REG(0x00209004) /* DMA Interrupt Status Register */
+#define MX1_DIMR __REG(0x00209008) /* DMA Interrupt Mask Register */
+#define MX1_DBTOSR __REG(0x0020900C) /* DMA Burst Time-Out Status Register */
+#define MX1_DRTOSR __REG(0x00209010) /* DMA Request Time-Out Status Register */
+#define MX1_DSESR __REG(0x00209014) /* DMA Request Time-Out Status Register */
+#define MX1_DBOSR __REG(0x00209018) /* DMA Buffer Overflow Status Register */
+#define MX1_DBTOCR __REG(0x0020901C) /* DMA Burst Time-Out Control Register */
+
+#define MX1_WSRA __REG(0x00209040) /* DMA W-Size Register A */
+#define MX1_XSRA __REG(0x00209044) /* DMA X-Size Register A */
+#define MX1_YSRA __REG(0x00209048) /* DMA Y-Size Register A */
+
+#define MX1_WSRB __REG(0x0020904C) /* DMA W-Size Register B */
+#define MX1_XSRB __REG(0x00209050) /* DMA X-Size Register B */
+#define MX1_YSRB __REG(0x00209054) /* DMA Y-Size Register B */
+
+/* Channel 0 */
+
+#define MX1_SAR0 __REG(0x00209080) /* Channel 0 Source Address Register */
+#define MX1_DAR0 __REG(0x00209084) /* Channel 0 Destination Address Register */
+#define MX1_CNTR0 __REG(0x00209088) /* Channel 0 Count Register */
+#define MX1_CCR0 __REG(0x0020908C) /* Channel 0 Control Register */
+#define MX1_RSSR0 __REG(0x00209090) /* Channel 0 Request Source Select Register */
+#define MX1_BLR0 __REG(0x00209094) /* Channel 0 Burst Length Register */
+#define MX1_RTOR0 __REG(0x00209098) /* Channel 0 Request Time-Out Register */
+#define MX1_BUCR0 __REG(0x00209098) /* Channel 0 Bus Utilization Control Register */
+
+
+/* Channel 1 */
+
+#define MX1_SAR1 __REG(0x002090C0) /* Channel 1 Source Address Register */
+#define MX1_DAR1 __REG(0x002090C4) /* Channel 1 Destination Address Register */
+#define MX1_CNTR1 __REG(0x002090C8) /* Channel 1 Count Register */
+#define MX1_CCR1 __REG(0x002090CC) /* Channel 1 Control Register */
+#define MX1_RSSR1 __REG(0x002090D0) /* Channel 1 Request Source Select Register */
+#define MX1_BLR1 __REG(0x002090D4) /* Channel 1 Burst Length Register */
+#define MX1_RTOR1 __REG(0x002090D8) /* Channel 1 Request Time-Out Register */
+#define MX1_BUCR1 __REG(0x002090D8) /* Channel 1 Bus Utilization Control Register */
+
+
+/* Channel 2 */
+
+#define MX1_SAR2 __REG(0x00209100) /* Channel 2 Source Address Register */
+#define MX1_DAR2 __REG(0x00209104) /* Channel 2 Destination Address Register */
+#define MX1_CNTR2 __REG(0x00209108) /* Channel 2 Count Register */
+#define MX1_CCR2 __REG(0x0020910C) /* Channel 2 Control Register */
+#define MX1_RSSR2 __REG(0x00209110) /* Channel 2 Request Source Select Register */
+#define MX1_BLR2 __REG(0x00209114) /* Channel 2 Burst Length Register */
+#define MX1_RTOR2 __REG(0x00209118) /* Channel 2 Request Time-Out Register */
+#define MX1_BUCR2 __REG(0x00209118) /* Channel 2 Bus Utilization Control Register */
+
+
+
+/* Channel 3 */
+
+#define MX1_SAR3 __REG(0x00209140) /* Channel 3 Source Address Register */
+#define MX1_DAR3 __REG(0x00209144) /* Channel 3 Destination Address Register */
+#define MX1_CNTR3 __REG(0x00209148) /* Channel 3 Count Register */
+#define MX1_CCR3 __REG(0x0020914C) /* Channel 3 Control Register */
+#define MX1_RSSR3 __REG(0x00209150) /* Channel 3 Request Source Select Register */
+#define MX1_BLR3 __REG(0x00209154) /* Channel 3 Burst Length Register */
+#define MX1_RTOR3 __REG(0x00209158) /* Channel 3 Request Time-Out Register */
+#define MX1_BUCR3 __REG(0x00209158) /* Channel 3 Bus Utilization Control Register */
+
+
+/* Channel 4 */
+
+#define MX1_SAR4 __REG(0x00209180) /* Channel 4 Source Address Register */
+#define MX1_DAR4 __REG(0x00209184) /* Channel 4 Destination Address Register */
+#define MX1_CNTR4 __REG(0x00209188) /* Channel 4 Count Register */
+#define MX1_CCR4 __REG(0x0020918C) /* Channel 4 Control Register */
+#define MX1_RSSR4 __REG(0x00209190) /* Channel 4 Request Source Select Register */
+#define MX1_BLR4 __REG(0x00209194) /* Channel 4 Burst Length Register */
+#define MX1_RTOR4 __REG(0x00209198) /* Channel 4 Request Time-Out Register */
+#define MX1_BUCR4 __REG(0x00209198) /* Channel 4 Bus Utilization Control Register */
+
+
+/* Channel 5 */
+
+#define MX1_SAR5 __REG(0x002091C0) /* Channel 5 Source Address Register */
+#define MX1_DAR5 __REG(0x002091C4) /* Channel 5 Destination Address Register */
+#define MX1_CNTR5 __REG(0x002091C8) /* Channel 5 Count Register */
+#define MX1_CCR5 __REG(0x002091CC) /* Channel 5 Control Register */
+#define MX1_RSSR5 __REG(0x002091D0) /* Channel 5 Request Source Select Register */
+#define MX1_BLR5 __REG(0x002091D4) /* Channel 5 Burst Length Register */
+#define MX1_RTOR5 __REG(0x002091D8) /* Channel 5 Request Time-Out Register */
+#define MX1_BUCR5 __REG(0x002091D8) /* Channel 5 Bus Utilization Control Register */
+
+
+/* Channel 6 */
+
+#define MX1_SAR6 __REG(0x00209200) /* Channel 6 Source Address Register */
+#define MX1_DAR6 __REG(0x00209204) /* Channel 6 Destination Address Register */
+#define MX1_CNTR6 __REG(0x00209208) /* Channel 6 Count Register */
+#define MX1_CCR6 __REG(0x0020920C) /* Channel 6 Control Register */
+#define MX1_RSSR6 __REG(0x00209210) /* Channel 6 Request Source Select Register */
+#define MX1_BLR6 __REG(0x00209214) /* Channel 6 Burst Length Register */
+#define MX1_RTOR6 __REG(0x00209218) /* Channel 6 Request Time-Out Register */
+#define MX1_BUCR6 __REG(0x00209218) /* Channel 6 Bus Utilization Control Register */
+
+
+/* Channel 7 */
+
+#define MX1_SAR7 __REG(0x00209240) /* Channel 7 Source Address Register */
+#define MX1_DAR7 __REG(0x00209244) /* Channel 7 Destination Address Register */
+#define MX1_CNTR7 __REG(0x00209248) /* Channel 7 Count Register */
+#define MX1_CCR7 __REG(0x0020924C) /* Channel 7 Control Register */
+#define MX1_RSSR7 __REG(0x00209250) /* Channel 7 Request Source Select Register */
+#define MX1_BLR7 __REG(0x00209254) /* Channel 7 Burst Length Register */
+#define MX1_RTOR7 __REG(0x00209258) /* Channel 7 Request Time-Out Register */
+#define MX1_BUCR7 __REG(0x00209258) /* Channel 7 Bus Utilization Control Register */
+
+
+/* Channel 8 */
+
+#define MX1_SAR8 __REG(0x00209280) /* Channel 8 Source Address Register */
+#define MX1_DAR8 __REG(0x00209284) /* Channel 8 Destination Address Register */
+#define MX1_CNTR8 __REG(0x00209288) /* Channel 8 Count Register */
+#define MX1_CCR8 __REG(0x0020928C) /* Channel 8 Control Register */
+#define MX1_RSSR8 __REG(0x00209290) /* Channel 8 Request Source Select Register */
+#define MX1_BLR8 __REG(0x00209294) /* Channel 8 Burst Length Register */
+#define MX1_RTOR8 __REG(0x00209298) /* Channel 8 Request Time-Out Register */
+#define MX1_BUCR8 __REG(0x00209298) /* Channel 8 Bus Utilization Control Register */
+
+
+/* Channel 9 */
+
+#define MX1_SAR9 __REG(0x002092C0) /* Channel 9 Source Address Register */
+#define MX1_DAR9 __REG(0x002092C4) /* Channel 9 Destination Address Register */
+#define MX1_CNTR9 __REG(0x002092C8) /* Channel 9 Count Register */
+#define MX1_CCR9 __REG(0x002092CC) /* Channel 9 Control Register */
+#define MX1_RSSR9 __REG(0x002092D0) /* Channel 9 Request Source Select Register */
+#define MX1_BLR9 __REG(0x002092D4) /* Channel 9 Burst Length Register */
+#define MX1_RTOR9 __REG(0x002092D8) /* Channel 9 Request Time-Out Register */
+#define MX1_BUCR9 __REG(0x002092D8) /* Channel 9 Bus Utilization Control Register */
+
+
+/* Channel 10 */
+
+#define MX1_SAR10 __REG(0x00209300) /* Channel 10 Source Address Register */
+#define MX1_DAR10 __REG(0x00209304) /* Channel 10 Destination Address Register */
+#define MX1_CNTR10 __REG(0x00209308) /* Channel 10 Count Register */
+#define MX1_CCR10 __REG(0x0020930C) /* Channel 10 Control Register */
+#define MX1_RSSR10 __REG(0x00209310) /* Channel 10 Request Source Select Register */
+#define MX1_BLR10 __REG(0x00209314) /* Channel 10 Burst Length Register */
+#define MX1_RTOR10 __REG(0x00209318) /* Channel 10 Request Time-Out Register */
+#define MX1_BUCR10 __REG(0x00209318) /* Channel 10 Bus Utilization Control Register */
+
+
+#define MX1_TCR __REG(0x00209340) /* Test Control Register */
+#define MX1_TFIFOAR __REG(0x00209344) /* Test FIFO A Register */
+#define MX1_TDRR __REG(0x00209348) /* Test DMA Request Register */
+#define MX1_TDIPR __REG(0x0020934C) /* Test DMA In Progress Register */
+#define MX1_TFIFOBR __REG(0x00209350) /* Test FIFO B Register */
+
+
+
+/*
+ * MX1 SIM registers
+ */
+
+#define MX1_PORT_CNTL __REG(0x00211000) /* Port Control Register */
+#define MX1_CNTL __REG(0x00211004) /* Control Register */
+#define MX1_RCV_THRESHOLD __REG(0x00211008)/* Receive Threshold Register */
+#define MX1_ENABLE __REG(0x0021100C) /* Transmit/Receive Enable Register */
+#define MX1_XMT_STATUS __REG(0x00211010) /* Transmit Status Register */
+#define MX1_RCV_STATUS __REG(0x00211014) /* Receive Status Register */
+#define MX1_SIM_INT_MASK __REG(0x00211018) /* Interrupt Mask Register */
+#define MX1_XMT_BUF __REG(0x0021101C) /* Port Transmit Buffer Register */
+#define MX1_RCV_BUF __REG(0x00211020) /* Receive Buffer Register */
+#define MX1_PORT_DETECT __REG(0x00211024) /* Detect Register */
+#define MX1_XMT_THRESHOLD __REG(0x00211028)/* Transmit Threshold Register */
+#define MX1_GUARD_CNTL __REG(0x0021102C) /* Transmit Guard Control Register */
+#define MX1_OD_CONFIG __REG(0x00211030) /* Open-Drain Configuration Control Register */
+#define MX1_RESET_CNTL __REG(0x00211034) /* Reset Control Register */
+#define MX1_CHAR_WAIT __REG(0x00211038) /* Charactor Wait Timer Register */
+#define MX1_GPCNT __REG(0x0021103C) /* General Purpose Counter Register */
+#define MX1_DIVISOR __REG(0x00211040) /* Divisor Register */
+
+
+/*
+ * MX1 USBD registers
+ */
+
+#define MX1_USB_FRAME __REG(0x00212000) /* USB Frame Number and Match Register */
+#define MX1_USB_SPEC __REG(0x00212004) /* USB Spec & Release Number Register */
+#define MX1_USB_STAT __REG(0x00212008) /* USB Status Register */
+#define MX1_USB_CTRL __REG(0x0021200C) /* USB Control Register */
+#define MX1_USB_DADR __REG(0x00212010) /* USB Descriptor RAM Address Register */
+#define MX1_USB_DDAT __REG(0x00212014) /* USB Descriptor RAM/Endpoint buffer Data Register */
+#define MX1_USB_INTR __REG(0x00212018) /* USB Interrupt Status Register */
+#define MX1_USB_MASK __REG(0x0021201C) /* USB Interrupt Mask Register */
+#define MX1_USB_ENAB __REG(0x00212024) /* USB Enable Register */
+
+
+/* Endpoint 0 */
+#define MX1_USB_EP0_STAT __REG(0x00212030) /* Endpoint 0 Status/Control Register */
+#define MX1_USB_EP0_INTR __REG(0x00212034) /* Endpoint 0 Interrupt Status Register */
+#define MX1_USB_EP0_MASK __REG(0x00212038) /* Endpoint 0 Interrupt Mask Register */
+#define MX1_USB_EP0_FDAT __REG(0x0021203C) /* Endpoint 0 FIFO Data Register */
+#define MX1_USB_EP0_FSTAT __REG(0x00212040) /* Endpoint 0 FIFO Status Register */
+#define MX1_USB_EP0_FCTRL __REG(0x00212044) /* Endpoint 0 FIFO Control Register */
+#define MX1_USB_EP0_LRFP __REG(0x00212048) /* Endpoint 0 Last Read Frame Pointer Register */
+#define MX1_USB_EP0_LWFP __REG(0x0021204C) /* Endpoint 0 Last Write Frame Pointer Register */
+#define MX1_USB_EP0_FALRM __REG(0x00212050) /* Endpoint 0 FIFO Alarm Register */
+#define MX1_USB_EP0_FRDP __REG(0x00212054) /* Endpoint 0 FIFO Read Pointer Register */
+#define MX1_USB_EP0_FWRP __REG(0x00212058) /* Endpoint 0 FIFO Write Pointer Register */
+
+
+/* Endpoint 1 */
+#define MX1_USB_EP1_STAT __REG(0x00212060) /* Endpoint 1 Status/Control Register */
+#define MX1_USB_EP1_INTR __REG(0x00212064) /* Endpoint 1 Interrupt Status Register */
+#define MX1_USB_EP1_MASK __REG(0x00212068) /* Endpoint 1 Interrupt Mask Register */
+#define MX1_USB_EP1_FDAT __REG(0x0021206C) /* Endpoint 1 FIFO Data Register */
+#define MX1_USB_EP1_FSTAT __REG(0x00212070) /* Endpoint 1 FIFO Status Register */
+#define MX1_USB_EP1_FCTRL __REG(0x00212074) /* Endpoint 1 FIFO Control Register */
+#define MX1_USB_EP1_LRFP __REG(0x00212078) /* Endpoint 1 Last Read Frame Pointer Register */
+#define MX1_USB_EP1_LWFP __REG(0x0021207C) /* Endpoint 1 Last Write Frame Pointer Register */
+#define MX1_USB_EP1_FALRM __REG(0x00212080) /* Endpoint 1 FIFO Alarm Register */
+#define MX1_USB_EP1_FRDP __REG(0x00212084) /* Endpoint 1 FIFO Read Pointer Register */
+#define MX1_USB_EP1_FWRP __REG(0x00212088) /* Endpoint 1 FIFO Write Pointer Register */
+
+
+/* Endpoint 2 */
+#define MX1_USB_EP2_STAT __REG(0x00212090) /* Endpoint 2 Status/Control Register */
+#define MX1_USB_EP2_INTR __REG(0x00212094) /* Endpoint 2 Interrupt Status Register */
+#define MX1_USB_EP2_MASK __REG(0x00212098) /* Endpoint 2 Interrupt Mask Register */
+#define MX1_USB_EP2_FDAT __REG(0x0021209C) /* Endpoint 2 FIFO Data Register */
+#define MX1_USB_EP2_FSTAT __REG(0x002120A0) /* Endpoint 2 FIFO Status Register */
+#define MX1_USB_EP2_FCTRL __REG(0x002120A4) /* Endpoint 2 FIFO Control Register */
+#define MX1_USB_EP2_LRFP __REG(0x002120A8) /* Endpoint 2 Last Read Frame Pointer Register */
+#define MX1_USB_EP2_LWFP __REG(0x002120AC) /* Endpoint 2 Last Write Frame Pointer Register */
+#define MX1_USB_EP2_FALRM __REG(0x002120B0) /* Endpoint 2 FIFO Alarm Register */
+#define MX1_USB_EP2_FRDP __REG(0x002120B4) /* Endpoint 2 FIFO Read Pointer Register */
+#define MX1_USB_EP2_FWRP __REG(0x002120B8) /* Endpoint 2 FIFO Write Pointer Register */
+
+
+/* Endpoint 3 */
+#define MX1_USB_EP3_STAT __REG(0x002120C0) /* Endpoint 3 Status/Control Register */
+#define MX1_USB_EP3_INTR __REG(0x002120C4) /* Endpoint 3 Interrupt Status Register */
+#define MX1_USB_EP3_MASK __REG(0x002120C8) /* Endpoint 3 Interrupt Mask Register */
+#define MX1_USB_EP3_FDAT __REG(0x002120CC) /* Endpoint 3 FIFO Data Register */
+#define MX1_USB_EP3_FSTAT __REG(0x002120D0) /* Endpoint 3 FIFO Status Register */
+#define MX1_USB_EP3_FCTRL __REG(0x002120D4) /* Endpoint 3 FIFO Control Register */
+#define MX1_USB_EP3_LRFP __REG(0x002120D8) /* Endpoint 3 Last Read Frame Pointer Register */
+#define MX1_USB_EP3_LWFP __REG(0x002120DC) /* Endpoint 3 Last Write Frame Pointer Register */
+#define MX1_USB_EP3_FALRM __REG(0x002120E0) /* Endpoint 3 FIFO Alarm Register */
+#define MX1_USB_EP3_FRDP __REG(0x002120E4) /* Endpoint 3 FIFO Read Pointer Register */
+#define MX1_USB_EP3_FWRP __REG(0x002120E8) /* Endpoint 3 FIFO Write Pointer Register */
+
+
+
+/* Endpoint 4 */
+#define MX1_USB_EP4_STAT __REG(0x002120F0) /* Endpoint 4 Status/Control Register */
+#define MX1_USB_EP4_INTR __REG(0x002120F4) /* Endpoint 4 Interrupt Status Register */
+#define MX1_USB_EP4_MASK __REG(0x002120F8) /* Endpoint 4 Interrupt Mask Register */
+#define MX1_USB_EP4_FDAT __REG(0x002120FC) /* Endpoint 4 FIFO Data Register */
+#define MX1_USB_EP4_FSTAT __REG(0x00212100) /* Endpoint 4 FIFO Status Register */
+#define MX1_USB_EP4_FCTRL __REG(0x00212104) /* Endpoint 4 FIFO Control Register */
+#define MX1_USB_EP4_LRFP __REG(0x00212108) /* Endpoint 4 Last Read Frame Pointer Register */
+#define MX1_USB_EP4_LWFP __REG(0x0021210C) /* Endpoint 4 Last Write Frame Pointer Register */
+#define MX1_USB_EP4_FALRM __REG(0x00212110) /* Endpoint 4 FIFO Alarm Register */
+#define MX1_USB_EP4_FRDP __REG(0x00212114) /* Endpoint 4 FIFO Read Pointer Register */
+#define MX1_USB_EP4_FWRP __REG(0x00212118) /* Endpoint 4 FIFO Write Pointer Register */
+
+
+
+/* Endpoint 5 */
+#define MX1_USB_EP5_STAT __REG(0x00212120) /* Endpoint 5 Status/Control Register */
+#define MX1_USB_EP5_INTR __REG(0x00212124) /* Endpoint 5 Interrupt Status Register */
+#define MX1_USB_EP5_MASK __REG(0x00212128) /* Endpoint 5 Interrupt Mask Register */
+#define MX1_USB_EP5_FDAT __REG(0x0021212C) /* Endpoint 5 FIFO Data Register */
+#define MX1_USB_EP5_FSTAT __REG(0x00212130) /* Endpoint 5 FIFO Status Register */
+#define MX1_USB_EP5_FCTRL __REG(0x00212134) /* Endpoint 5 FIFO Control Register */
+#define MX1_USB_EP5_LRFP __REG(0x00212138) /* Endpoint 5 Last Read Frame Pointer Register */
+#define MX1_USB_EP5_LWFP __REG(0x0021213C) /* Endpoint 5 Last Write Frame Pointer Register */
+#define MX1_USB_EP5_FALRM __REG(0x00212140) /* Endpoint 5 FIFO Alarm Register */
+#define MX1_USB_EP5_FRDP __REG(0x00212144) /* Endpoint 5 FIFO Read Pointer Register */
+#define MX1_USB_EP5_FWRP __REG(0x00212148) /* Endpoint 5 FIFO Write Pointer Register */
+
+
+
+
+/*
+ * MX1 SPI 1 registers
+ */
+
+#define MX1_RXDATAREG1 __REG(0x00213000) /* SPI 1 Rx Data Register */
+#define MX1_TXDATAREG1 __REG(0x00213004) /* SPI 1 Tx Data Register */
+#define MX1_CONTROLREG1 __REG(0x00213008) /* SPI 1 Control Register */
+#define MX1_INTREG1 __REG(0x0021300C) /* SPI 1 Interrupt Control/Status Register */
+#define MX1_TESTREG1 __REG(0x00213010) /* SPI 1 Test Register */
+#define MX1_PERIODREG1 __REG(0x00213014) /* SPI 1 Sample Period Control Register */
+#define MX1_DMAREG1 __REG(0x00213018) /* SPI 1 DMA Control Register */
+#define MX1_RESETREG1 __REG(0x00213018) /* SPI 1 Soft Reset Register */
+
+
+
+
+/*
+ * MX1 MMC/SDHC registers
+ */
+
+#define MX1_STR_STP_CLK __REG(0x00214000) /* MMC/SD Clock Control Register */
+#define MX1_STATUS __REG(0x00214004) /* MMC/SD Status Register */
+#define MX1_CLK_RATE __REG(0x00214008) /* MMC/SD Clock Rate Register */
+#define MX1_CMD_DAT_CONT __REG(0x0021400C) /* MMC/SD Command & Data Control Register */
+#define MX1_RES_TO __REG(0x00214010) /* MMC/SD Response Time Out Register */
+#define MX1_READ_TO __REG(0x00214014) /* MMC/SD Read Time Out Register */
+#define MX1_BLK_LEN __REG(0x00214018) /* MMC/SD Block Length Register */
+#define MX1_NOB __REG(0x0021401C) /* MMC/SD Number of Block Register */
+#define MX1_REV_NO __REG(0x00214020) /* MMC/SD Revision Number Register */
+#define MX1_MMC_INT_MASK __REG(0x00214024) /* MMC/SD Interrupt Mask Register */
+#define MX1_CMD __REG(0x00214028) /* MMC/SD Command Number Register */
+#define MX1_ARGH __REG(0x0021402C) /* MMC/SD Higher Argument Register */
+#define MX1_ARGL __REG(0x00214030) /* MMC/SD Lower Argument Register */
+#define MX1_RES_FIFO __REG(0x00214034) /* MMC/SD Response FIFO Register */
+#define MX1_BUFFER_ACCESS __REG(0x00214038) /* MMC/SD Buffer Access Register */
+
+
+
+/*
+ * MX1 ASP registers
+ */
+
+#define MX1_ASP_PADFIFO __REG(0x00215000) /* Pen Sample FIFO */
+#define MX1_ASP_VADFIFO __REG(0x00215004) /* Voice ADC Register */
+#define MX1_ASP_VDAFIFO __REG(0x00215008) /* Voice DAC Register */
+#define MX1_ASP_VADCOEF __REG(0x0021500C) /* Voice ADC FIR Coefficients RAM */
+#define MX1_ASP_ACNTLCR __REG(0x00215010) /* Control Register */
+#define MX1_ASP_PSMPLRG __REG(0x00215014) /* Pen A/D Sample Rate Control Register */
+#define MX1_ASP_ICNTLR __REG(0x00215018) /* Interrupt Control Register */
+#define MX1_ASP_ISTATR __REG(0x0021501C) /* Interrupt/Error Status Register */
+#define MX1_ASP_VADGAIN __REG(0x00215020) /* Voice ADC Control Register */
+#define MX1_ASP_VDAGAIN __REG(0x00215024) /* Voice DAC Control Register */
+#define MX1_ASP_VDACOEF __REG(0x00215028) /* Voice DAC FIR Coefficients RAM */
+#define MX1_ASP_CLKDIV __REG(0x0021502C) /* Clock Divide Register */
+#define MX1_ASP_CMPCNTL __REG(0x0021502C) /* Compare Control Register */
+
+
+
+/*
+ * MX1 BTA registers
+ */
+
+
+/*
+ * MX1 I2C registers
+ */
+
+#define MX1_IADR __REG(0x00217000) /* I2C Address Register */
+#define MX1_IFDR __REG(0x00217004) /* I2C Frequency Divider Register */
+#define MX1_I2CR __REG(0x00217008) /* I2C Control Register */
+#define MX1_I2CSR __REG(0x0021700C) /* I2C Status Register */
+#define MX1_I2DR __REG(0x00217010) /* I2C Data I/O Register */
+
+
+
+/*
+ * MX1 SSI registers
+ */
+
+#define MX1_STX __REG(0x00218000) /* SSI Transmit Data Register */
+#define MX1_SRX __REG(0x00218004) /* SSI Receive Data Register */
+#define MX1_SCSR __REG(0x00218008) /* SSI Control/Status Register */
+#define MX1_STCR __REG(0x0021800C) /* SSI Transmit Configuration Register */
+#define MX1_SRCR __REG(0x00218010) /* SSI Recieve Configuration Register */
+#define MX1_STCCR __REG(0x00218014) /* SSI Transmit Clock Control Register */
+#define MX1_SRCCR __REG(0x00218018) /* SSI Receive Clock Control Register */
+#define MX1_STSR __REG(0x0021801C) /* SSI Time Slot Register */
+#define MX1_SFCSR __REG(0x00218020) /* SSI FIFO Control/Status Register */
+#define MX1_SOR __REG(0x00218024) /* SSI Option Register */
+
+
+
+/*
+ * MX1 SPI 2 registers
+ */
+
+#define MX1_RXDATAREG2 __REG(0x00219000) /* SPI 2 Rx Data Register */
+#define MX1_TXDATAREG2 __REG(0x00219004) /* SPI 2 Tx Data Register */
+#define MX1_CONTROLREG2 __REG(0x00219008) /* SPI 2 Control Register */
+#define MX1_INTREG2 __REG(0x0021900C) /* SPI 2 Interrupt Control/Status Register */
+#define MX1_TESTREG2 __REG(0x00219010) /* SPI 2 Test Register */
+#define MX1_PERIODREG2 __REG(0x00219014) /* SPI 2 Sample Period Control Register */
+#define MX1_DMAREG2 __REG(0x00219018) /* SPI 2 DMA Control Register */
+#define MX1_RESETREG2 __REG(0x00219018) /* SPI 2 Soft Reset Register */
+
+
+
+/*
+ * MX1 MSHC registers
+ */
+
+#define MX1_MSCMD __REG(0x0021A000) /* Memory Stick Command Register */
+#define MX1_MSCS __REG(0x0021A002) /* Memory Stick Control/Status Register */
+#define MX1_MSTDATA __REG(0x0021A004) /* Memory Stick Transmit FIFO Data Register */
+#define MX1_MSRDATA __REG(0x0021A004) /* Memory Stick Recieve FIFO Data Register */
+#define MX1_MSICS __REG(0x0021A006) /* Memory Stick Interrupt Control/Status Register */
+#define MX1_MSPPCD __REG(0x0021A008) /* Memory Stick Parallel Port Control/Data Register */
+#define MX1_MSC2 __REG(0x0021A00A) /* Memory Stick Control 2 Register */
+#define MX1_MSACD __REG(0x0021A00C) /* Memory Stick Auto Command Register */
+#define MX1_MSFAECS __REG(0x0021A00E) /* Memory Stick FIFO Access Error Control/Status Register */
+#define MX1_MSCLKD __REG(0x0021A010) /* Memory Stick Serial Clock divider Register */
+#define MX1_MSDRQC __REG(0x0021A012) /* Memory Stick DMA Request Control Register */
+
+
+
+/*
+ * MX1 PLLCLK registers
+ */
+
+#define MX1_CSCR __REG(0x0021B000) /* Clock Source Control Register */
+#define MX1_MPCTL0 __REG(0x0021B004) /* MCU PLL Control Register 0 */
+#define MX1_MPCTL1 __REG(0x0021B008) /* MCU PLL & System Clock Control Register 1 */
+#define MX1_UPCTL0 __REG(0x0021B00C) /* USB PLL Control Register 0 */
+#define MX1_UPCTL1 __REG(0x0021B010) /* USB PLL Control Register 1 */
+#define MX1_PCDR __REG(0x0021B020) /* Peripheral Clock Divider Register */
+
+
+/*
+ * MX1 RESET registers
+ */
+
+#define MX1_RSR __REG(0x0021B800) /* Reset Source Register */
+
+
+
+/*
+ * MX1 SYS CTRL registers
+ */
+
+#define MX1_SIDR __REG(0x0021B804) /* Silicon ID Register */
+#define MX1_FMCR __REG(0x0021B808) /* Function MultiPlexing Control Register */
+#define MX1_GPCR __REG(0x0021B80C) /* Global Peripheral Control Register */
+
+
+/*
+ * MX1 GPIO registers
+ */
+
+/* Port A */
+#define MX1_DDIR_A __REG(0x0021C000) /* Port A Data Direction Register */
+#define MX1_OCR1_A __REG(0x0021C004) /* Port A Output Configuration Register 1 */
+#define MX1_OCR2_A __REG(0x0021C008) /* Port A Output Configuration Register 2 */
+#define MX1_ICONFA1_A __REG(0x0021C00C) /* Port A Input Configuration Register A1 */
+#define MX1_ICONFA2_A __REG(0x0021C010) /* Port A Input Configuration Register A2 */
+#define MX1_ICONFB1_A __REG(0x0021C014) /* Port A Input Configuration Register B1 */
+#define MX1_ICONFB2_A __REG(0x0021C018) /* Port A Input Configuration Register B2 */
+#define MX1_DR_A __REG(0x0021C01C) /* Port A Data Register */
+#define MX1_GIUS_A __REG(0x0021C020) /* Port A GPIO In Use Register */
+#define MX1_SSR_A __REG(0x0021C024) /* Port A Sample Status Register */
+#define MX1_ICR1_A __REG(0x0021C028) /* Port A Interrupt Configuration Register 1 */
+#define MX1_ICR2_A __REG(0x0021C02C) /* Port A Interrupt Configuration Register 2 */
+#define MX1_IMR_A __REG(0x0021C030) /* Port A Interrupt Mask Register */
+#define MX1_ISR_A __REG(0x0021C034) /* Port A Interrupt Status Register */
+#define MX1_GPR_A __REG(0x0021C038) /* Port A General Purpose Register */
+#define MX1_SWR_A __REG(0x0021C03C) /* Port A Software Reset Register */
+#define MX1_PUEN_A __REG(0x0021C040) /* Port A Pull Up Enable Register */
+
+
+/* Port B */
+#define MX1_DDIR_B __REG(0x0021C100) /* Port B Data Direction Register */
+#define MX1_OCR1_B __REG(0x0021C104) /* Port B Output Configuration Register 1 */
+#define MX1_OCR2_B __REG(0x0021C108) /* Port B Output Configuration Register 2 */
+#define MX1_ICONFA1_B __REG(0x0021C10C) /* Port B Input Configuration Register A1 */
+#define MX1_ICONFA2_B __REG(0x0021C110) /* Port B Input Configuration Register A2 */
+#define MX1_ICONFB1_B __REG(0x0021C114) /* Port B Input Configuration Register B1 */
+#define MX1_ICONFB2_B __REG(0x0021C118) /* Port B Input Configuration Register B2 */
+#define MX1_DR_B __REG(0x0021C11C) /* Port B Data Register */
+#define MX1_GIUS_B __REG(0x0021C120) /* Port B GPIO In Use Register */
+#define MX1_SSR_B __REG(0x0021C124) /* Port B Sample Status Register */
+#define MX1_ICR1_B __REG(0x0021C128) /* Port B Interrupt Configuration Register 1 */
+#define MX1_ICR2_B __REG(0x0021C12C) /* Port B Interrupt Configuration Register 2 */
+#define MX1_IMR_B __REG(0x0021C130) /* Port B Interrupt Mask Register */
+#define MX1_ISR_B __REG(0x0021C134) /* Port B Interrupt Status Register */
+#define MX1_GPR_B __REG(0x0021C138) /* Port B General Purpose Register */
+#define MX1_SWR_B __REG(0x0021C13C) /* Port B Software Reset Register */
+#define MX1_PUEN_B __REG(0x0021C140) /* Port B Pull Up Enable Register */
+
+
+
+/* Port C */
+#define MX1_DDIR_C __REG(0x0021C200) /* Port C Data Direction Register */
+#define MX1_OCR1_C __REG(0x0021C204) /* Port C Output Configuration Register 1 */
+#define MX1_OCR2_C __REG(0x0021C208) /* Port C Output Configuration Register 2 */
+#define MX1_ICONFA1_C __REG(0x0021C20C) /* Port C Input Configuration Register A1 */
+#define MX1_ICONFA2_C __REG(0x0021C210) /* Port C Input Configuration Register A2 */
+#define MX1_ICONFB1_C __REG(0x0021C214) /* Port C Input Configuration Register B1 */
+#define MX1_ICONFB2_C __REG(0x0021C218) /* Port C Input Configuration Register B2 */
+#define MX1_DR_C __REG(0x0021C21C) /* Port C Data Register */
+#define MX1_GIUS_C __REG(0x0021C220) /* Port C GPIO In Use Register */
+#define MX1_SSR_C __REG(0x0021C224) /* Port C Sample Status Register */
+#define MX1_ICR1_C __REG(0x0021C228) /* Port C Interrupt Configuration Register 1 */
+#define MX1_ICR2_C __REG(0x0021C22C) /* Port C Interrupt Configuration Register 2 */
+#define MX1_IMR_C __REG(0x0021C230) /* Port C Interrupt Mask Register */
+#define MX1_ISR_C __REG(0x0021C234) /* Port C Interrupt Status Register */
+#define MX1_GPR_C __REG(0x0021C238) /* Port C General Purpose Register */
+#define MX1_SWR_C __REG(0x0021C23C) /* Port C Software Reset Register */
+#define MX1_PUEN_C __REG(0x0021C240) /* Port C Pull Up Enable Register */
+
+
+
+/* Port D */
+#define MX1_DDIR_D __REG(0x0021C300) /* Port D Data Direction Register */
+#define MX1_OCR1_D __REG(0x0021C304) /* Port D Output Configuration Register 1 */
+#define MX1_OCR2_D __REG(0x0021C308) /* Port D Output Configuration Register 2 */
+#define MX1_ICONFA1_D __REG(0x0021C30C) /* Port D Input Configuration Register A1 */
+#define MX1_ICONFA2_D __REG(0x0021C310) /* Port D Input Configuration Register A2 */
+#define MX1_ICONFB1_D __REG(0x0021C314) /* Port D Input Configuration Register B1 */
+#define MX1_ICONFB2_D __REG(0x0021C318) /* Port D Input Configuration Register B2 */
+#define MX1_DR_D __REG(0x0021C31C) /* Port D Data Register */
+#define MX1_GIUS_D __REG(0x0021C320) /* Port D GPIO In Use Register */
+#define MX1_SSR_D __REG(0x0021C324) /* Port D Sample Status Register */
+#define MX1_ICR1_D __REG(0x0021C328) /* Port D Interrupt Configuration Register 1 */
+#define MX1_ICR2_D __REG(0x0021C32C) /* Port D Interrupt Configuration Register 2 */
+#define MX1_IMR_D __REG(0x0021C330) /* Port D Interrupt Mask Register */
+#define MX1_ISR_D __REG(0x0021C334) /* Port D Interrupt Status Register */
+#define MX1_GPR_D __REG(0x0021C338) /* Port D General Purpose Register */
+#define MX1_SWR_D __REG(0x0021C33C) /* Port D Software Reset Register */
+#define MX1_PUEN_D __REG(0x0021C340) /* Port D Pull Up Enable Register */
+
+
+
+/*
+ * MX1 EIM registers
+ */
+
+#define MX1_CS0U __REG(0x00220000) /* Chip Select 0 Upper Control Register */
+#define MX1_CS0L __REG(0x00220004) /* Chip Select 0 Lower Control Register */
+#define MX1_CS1U __REG(0x00220008) /* Chip Select 1 Upper Control Register */
+#define MX1_CS1L __REG(0x0022000C) /* Chip Select 1 Lower Control Register */
+#define MX1_CS2U __REG(0x00220010) /* Chip Select 2 Upper Control Register */
+#define MX1_CS2L __REG(0x00220014) /* Chip Select 2 Lower Control Register */
+#define MX1_CS3U __REG(0x00220018) /* Chip Select 3 Upper Control Register */
+#define MX1_CS3L __REG(0x0022001C) /* Chip Select 3 Lower Control Register */
+#define MX1_CS4U __REG(0x00220020) /* Chip Select 4 Upper Control Register */
+#define MX1_CS4L __REG(0x00220024) /* Chip Select 4 Lower Control Register */
+#define MX1_CS5U __REG(0x00220028) /* Chip Select 5 Upper Control Register */
+#define MX1_CS5L __REG(0x0022002C) /* Chip Select 5 Lower Control Register */
+#define MX1_WEIM __REG(0x00220030) /* weim cONFIGURATION Register */
+
+
+
+/*
+ * MX1 SDRAMC registers
+ */
+
+#define MX1_SDCTL0 __REG(0x00221000) /* SDRAM 0 Control Register */
+#define MX1_SDCTL1 __REG(0x00221004) /* SDRAM 1 Control Register */
+#define MX1_MISCELLANEOUS __REG(0x00221014) /* Miscellaneous Register */
+#define MX1_SDRST __REG(0x00221018) /* SDRAM Reset Register */
+
+
+
+/*
+ * MX1 MMA registers
+ */
+
+#define MX1_MMA_MAC_MOD __REG(0x00222000) /* MMA MAC Module Register */
+#define MX1_MMA_MAC_CTRL __REG(0x00222004) /* MMA MAC Control Register */
+#define MX1_MMA_MAC_MULT __REG(0x00222008) /* MMA MAC Multiply Counter Register */
+#define MX1_MMA_MAC_ACCU __REG(0x0022200C) /* MMA MAC Accumulate Counter Register */
+#define MX1_MMA_MAC_INTR __REG(0x00222010) /* MMA MAC Interrupt Register */
+#define MX1_MMA_MAC_INTR_MASK __REG(0x00222014) /* MMA MAC Interrupt Mask Register */
+#define MX1_MMA_MAC_FIFO __REG(0x00222018) /* MMA MAC FIFO Register */
+#define MX1_MMA_MAC_FIFO_STAT __REG(0x0022201C) /* MMA MAC FIFO Status Register */
+#define MX1_MMA_MAC_BURST __REG(0x00222020) /* MMA MAC Burst Count Register */
+#define MX1_MMA_MAC_BITSEL __REG(0x00222024) /* MMA MAC Bit Select Register */
+
+#define MX1_MMA_MAC_XBASE __REG(0x00222200) /* MMA MAC X Base Address Register */
+#define MX1_MMA_MAC_XINDEX __REG(0x00222204) /* MMA MAC X Index Register */
+#define MX1_MMA_MAC_XLENGTH __REG(0x00222208) /* MMA MAC X Length Register */
+#define MX1_MMA_MAC_XMODIFY __REG(0x0022220C) /* MMA MAC X Modify Register */
+#define MX1_MMA_MAC_XINCR __REG(0x00222210) /* MMA MAC X Increment Register */
+#define MX1_MMA_MAC_XCOUNT __REG(0x00222214) /* MMA MAC X Count Register */
+
+
+#define MX1_MMA_MAC_YBASE __REG(0x00222300) /* MMA MAC Y Base Address Register */
+#define MX1_MMA_MAC_YINDEX __REG(0x00222304) /* MMA MAC Y Index Register */
+#define MX1_MMA_MAC_YLENGTH __REG(0x00222308) /* MMA MAC Y Length Register */
+#define MX1_MMA_MAC_YMODIFY __REG(0x0022230C) /* MMA MAC Y Modify Register */
+#define MX1_MMA_MAC_YINCR __REG(0x00222310) /* MMA MAC Y Increment Register */
+#define MX1_MMA_MAC_YCOUNT __REG(0x00222314) /* MMA MAC Y Count Register */
+
+
+#define MX1_MMA_DCTCTRL __REG(0x00222400) /* DCT/iDCT Control Register */
+#define MX1_MMA_DCTVERSION __REG(0x00222404) /* DCT/iDCT Version Register */
+#define MX1_MMA_DCTIRQENA __REG(0x00222408) /* DCT/iDCT IRQ Enable Register */
+#define MX1_MMA_DCTIRQSTAT __REG(0x0022240C) /* DCT/iDCT IRQ Status Register */
+#define MX1_MMA_DCTSRCDATA __REG(0x00222410) /* DCT/iDCT Source Data Address */
+#define MX1_MMA_DCTDESDATA __REG(0x00222414) /* DCT/iDCT Destination Data Address */
+#define MX1_MMA_DCTXOFF __REG(0x00222418) /* DCT/iDCT X-Offset Address */
+#define MX1_MMA_DCTYOFF __REG(0x0022241C) /* DCT/iDCT Y-Offset Address */
+#define MX1_MMA_DCTXYCNT __REG(0x00222420) /* DCT/iDCT XY Count */
+#define MX1_MMA_DCTSKIP __REG(0x00222424) /* DCT/iDCT Skip Address */
+#define MX1_MMA_DCTFIFO __REG(0x00222500) /* DCT/iDCT Data FIFO */
+
+
+
+
+/*
+ * MX1 AITC registers
+ */
+
+#define MX1_INTCNTL __REG(0x00223000) /* Interrupt Control Register */
+#define MX1_NIMASK __REG(0x00223004) /* Normal Interrupt Mask Register */
+#define MX1_INTENNUM __REG(0x00223008) /* Interrupt Enable Number Register */
+#define MX1_INTDISNUM __REG(0x0022300C) /* Interrupt Disable Number Register */
+#define MX1_INTENABLEH __REG(0x00223010) /* Interrupt Enable Register High */
+#define MX1_INTENABLEL __REG(0x00223014) /* Interrupt Enable Register Low */
+#define MX1_INTTYPEH __REG(0x00223018) /* Interrupt Type Register High */
+#define MX1_INTTYPEL __REG(0x0022301C) /* Interrupt Type Register Low */
+#define MX1_NIPRIORITY7 __REG(0x00223020) /* Normal Interrupt Priority Level Register 7*/
+#define MX1_NIPRIORITY6 __REG(0x00223024) /* Normal Interrupt Priority Level Register 6*/
+#define MX1_NIPRIORITY5 __REG(0x00223028) /* Normal Interrupt Priority Level Register 5*/
+#define MX1_NIPRIORITY4 __REG(0x0022302C) /* Normal Interrupt Priority Level Register 4*/
+#define MX1_NIPRIORITY3 __REG(0x00223030) /* Normal Interrupt Priority Level Register 3*/
+#define MX1_NIPRIORITY2 __REG(0x00223034) /* Normal Interrupt Priority Level Register 2*/
+#define MX1_NIPRIORITY1 __REG(0x00223038) /* Normal Interrupt Priority Level Register 1*/
+#define MX1_NIPRIORITY0 __REG(0x0022303C) /* Normal Interrupt Priority Level Register 0*/
+#define MX1_NIVECSR __REG(0x00223040) /* Normal Interrupt Vector & Status Register */
+#define MX1_FIVECSR __REG(0x00223044) /* Fast Interrupt Vector & Status Register */
+#define MX1_INTSRCH __REG(0x00223048) /* Interrupt Source Register High */
+#define MX1_INTSRCL __REG(0x0022304C) /* Interrupt Source Register Low */
+#define MX1_INTFRCH __REG(0x00223050) /* Interrupt Force Register High */
+#define MX1_INTFRCL __REG(0x00223054) /* Interrupt Force Register Low */
+#define MX1_NIPNDH __REG(0x00223058) /* Normal Interrupt Pending Register High */
+#define MX1_NIPNDL __REG(0x0022305C) /* Normal Interrupt Pending Register Low */
+#define MX1_FIPNDH __REG(0x00223060) /* Fast Interrupt Pending Register High */
+#define MX1_FIPNDL __REG(0x00223064) /* Fast Interrupt Pending Register Low */
+
+
+/*
+ * MX1 CSI registers
+ */
+
+#define MX1_CSICR1 __REG(0x00224000) /* CSI Control Register 1 */
+#define MX1_CSICR2 __REG(0x00224004) /* CSI Control Register 2 */
+#define MX1_CSISR __REG(0x00224008) /* CSI Status Register 1 */
+#define MX1_CSISTATR __REG(0x0022400C) /* CSI Statistic FIFO Register 1 */
+#define MX1_CSIRXR __REG(0x00224010) /* CSI RxFIFO Register 1 */
+
+
+
+#endif /* __MC9328_H__ */
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#if 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+/*
+ MX1 dma definition
+*/
+
+#define MAX_DMA_ADDRESS 0xffffffff
+
+//#define MAX_DMA_CHANNELS 0
+
+#define MAX_DMA_CHANNELS 11
+#define MAX_DMA_2D_REGSET 2
+
+/* MX1 DMA module registers' address */
+
+#define MX1_DMA_BASE IO_ADDRESS(0x00209000)
+#define MX1_DMA_DCR (MX1_DMA_BASE + 0x00) // DMA control register
+#define MX1_DMA_DISR (MX1_DMA_BASE + 0x04) // DMA interrupt status register
+#define MX1_DMA_DIMR (MX1_DMA_BASE + 0x08) // DMA interrupt mask register
+#define MX1_DMA_DBTOSR (MX1_DMA_BASE + 0x0C) // DMA burst time-out status register
+#define MX1_DMA_DRTOSR (MX1_DMA_BASE + 0x10) // DMA request time-out status register
+#define MX1_DMA_DSESR (MX1_DMA_BASE + 0x14) // DMA transfer error status register
+#define MX1_DMA_DBOSR (MX1_DMA_BASE + 0x18) // DMA buffer overflow status register
+#define MX1_DMA_DBTOCR (MX1_DMA_BASE + 0x1C) // DMA burst time-out control register
+#define MX1_DMA_WSRA (MX1_DMA_BASE + 0x40) // W-size register A
+#define MX1_DMA_XSRA (MX1_DMA_BASE + 0x44) // X-size register A
+#define MX1_DMA_YSRA (MX1_DMA_BASE + 0x48) // Y-size register A
+#define MX1_DMA_WSRB (MX1_DMA_BASE + 0x4C) // W-size register B
+#define MX1_DMA_XSRB (MX1_DMA_BASE + 0x50) // X-size register B
+#define MX1_DMA_YSRB (MX1_DMA_BASE + 0x54) // Y-size register B
+
+#define MX1_DMA_SAR0 (MX1_DMA_BASE + 0x80) // source address register 0
+#define MX1_DMA_DAR0 (MX1_DMA_BASE + 0x84) // destination address register 0
+#define MX1_DMA_CNTR0 (MX1_DMA_BASE + 0x88) // count register 0
+#define MX1_DMA_CCR0 (MX1_DMA_BASE + 0x8C) // channel control register 0
+#define MX1_DMA_RSSR0 (MX1_DMA_BASE + 0x90) // request source select register 0
+#define MX1_DMA_BLR0 (MX1_DMA_BASE + 0x94) // burst length register 0
+#define MX1_DMA_RTOR0 (MX1_DMA_BASE + 0x98) // request time-out register 0
+#define MX1_DMA_BUCR0 (MX1_DMA_BASE + 0x98) // bus utilization control register 0
+
+/* register set 1 to 10 are offseted by 0x40 each = 0x10 pointers away */
+
+#define DMA_REG_SET_OFS 0x10
+
+
+/* MX1 DMA module registers */
+#define _reg_DMA_DCR (*((P_VU32)MX1_DMA_DCR))
+#define _reg_DMA_DISR (*((P_VU32)MX1_DMA_DISR))
+#define _reg_DMA_DIMR (*((P_VU32)MX1_DMA_DIMR))
+#define _reg_DMA_DBTOSR (*((P_VU32)MX1_DMA_DBTOSR))
+#define _reg_DMA_DRTOSR (*((P_VU32)MX1_DMA_DRTOSR))
+#define _reg_DMA_DSESR (*((P_VU32)MX1_DMA_DSESR))
+#define _reg_DMA_DBOSR (*((P_VU32)MX1_DMA_DBOSR))
+#define _reg_DMA_DBTOCR (*((P_VU32)MX1_DMA_DBTOCR))
+#define _reg_DMA_WSRA (*((P_VU32)MX1_DMA_WSRA))
+#define _reg_DMA_XSRA (*((P_VU32)MX1_DMA_XSRA))
+#define _reg_DMA_YSRA (*((P_VU32)MX1_DMA_YSRA))
+#define _reg_DMA_WSRB (*((P_VU32)MX1_DMA_WSRB))
+#define _reg_DMA_XSRB (*((P_VU32)MX1_DMA_XSRB))
+#define _reg_DMA_YSRB (*((P_VU32)MX1_DMA_YSRB))
+#define _reg_DMA_SAR0 (*((P_VU32)MX1_DMA_SAR0))
+#define _reg_DMA_DAR0 (*((P_VU32)MX1_DMA_DAR0))
+#define _reg_DMA_CNTR0 (*((P_VU32)MX1_DMA_CNTR0))
+#define _reg_DMA_CCR0 (*((P_VU32)MX1_DMA_CCR0))
+#define _reg_DMA_RSSR0 (*((P_VU32)MX1_DMA_RSSR0))
+#define _reg_DMA_BLR0 (*((P_VU32)MX1_DMA_BLR0))
+#define _reg_DMA_RTOR0 (*((P_VU32)MX1_DMA_RTOR0))
+#define _reg_DMA_BUCR0 (*((P_VU32)MX1_DMA_BUCR0))
+
+/* DMA error type definition */
+#define MX1_DMA_ERR_BTO 0 // burst time-out
+#define MX1_DMA_ERR_RTO 1 // request time-out
+#define MX1_DMA_ERR_TE 2 // transfer error
+#define MX1_DMA_ERR_BO 3 // buffer overflow
+
+
+/* Embedded SRAM */
+
+#define MX1_SRAM_BASE 0x00300000
+#define MX1_SRAM_SIZE 0x00020000
+
+#define
+
+
+#define MX1ADS_SFLASH_BASE 0x0C000000
+#define MX1ADS_SFLASH_SIZE SZ_16M
+
+#define MX1ADS_IO_BASE 0x00200000
+#define MX1ADS_IO_SIZE SZ_256K
+
+#define MX1ADS_VID_BASE 0x00300000
+#define MX1ADS_VID_SIZE 0x26000
+
+#define MX1ADS_VID_START IO_ADDRESS(MX1ADS_VID_BASE)
+
+#define MX1_GPIO_BASE 0x0021C000 // GPIO
+#define MX1_EXT_UART_BASE 0x15000000 // external UART
+#define MX1_TMR1_BASE 0x00202000 // Timer1
+#define MX1ADS_FLASH_BASE 0x0C000000 // sync FLASH
+#define MX1_ESRAM_BASE 0x00300000 // embedded SRAM
+#define MX1ADS_SDRAM_DISK_BASE 0x0B000000 // SDRAM disk base (last 16M of SDRAM)
+
+/* ------------------------------------------------------------------------
+ * Motorola MX1 system registers
+ * ------------------------------------------------------------------------
+ *
+ */
+
+/*
+ * Register offests.
+ *
+ */
+
+#define MX1ADS_AIPI1_OFFSET 0x00000
+#define MX1ADS_WDT_OFFSET 0x01000
+#define MX1ADS_TIM1_OFFSET 0x02000
+#define MX1ADS_TIM2_OFFSET 0x03000
+#define MX1ADS_RTC_OFFSET 0x04000
+#define MX1ADS_LCDC_OFFSET 0x05000
+#define MX1ADS_UART1_OFFSET 0x06000
+#define MX1ADS_UART2_OFFSET 0x07000
+#define MX1ADS_PWM_OFFSET 0x08000
+#define MX1ADS_DMAC_OFFSET 0x09000
+#define MX1ADS_AIPI2_OFFSET 0x10000
+#define MX1ADS_SIM_OFFSET 0x11000
+#define MX1ADS_USBD_OFFSET 0x12000
+#define MX1ADS_SPI1_OFFSET 0x13000
+#define MX1ADS_MMC_OFFSET 0x14000
+#define MX1ADS_ASP_OFFSET 0x15000
+#define MX1ADS_BTA_OFFSET 0x16000
+#define MX1ADS_I2C_OFFSET 0x17000
+#define MX1ADS_SSI_OFFSET 0x18000
+#define MX1ADS_SPI2_OFFSET 0x19000
+#define MX1ADS_MSHC_OFFSET 0x1A000
+#define MX1ADS_PLL_OFFSET 0x1B000
+#define MX1ADS_GPIO_OFFSET 0x1C000
+#define MX1ADS_EIM_OFFSET 0x20000
+#define MX1ADS_SDRAMC_OFFSET 0x21000
+#define MX1ADS_MMA_OFFSET 0x22000
+#define MX1ADS_AITC_OFFSET 0x23000
+#define MX1ADS_CSI_OFFSET 0x24000
+
+
+/*
+ * Register BASEs, based on OFFSETs
+ *
+ */
+
+#define MX1ADS_AIPI1_BASE (MX1ADS_AIPI1_OFFSET + MX1ADS_IO_BASE)
+#define MX1ADS_WDT_BASE (MX1ADS_WDT_OFFSET + MX1ADS_IO_BASE)
+#define MX1ADS_TIM1_BASE (MX1ADS_TIM1_OFFSET + MX1ADS_IO_BASE)
+#define MX1ADS_TIM2_BASE (MX1ADS_TIM2_OFFSET + MX1ADS_IO_BASE)
+#define MX1ADS_RTC_BASE (MX1ADS_RTC_OFFSET + MX1ADS_IO_BASE)
+#define MX1ADS_LCDC_BASE (MX1ADS_LCDC_OFFSET + MX1ADS_IO_BASE)
+#define MX1ADS_UART1_BASE (MX1ADS_UART1_OFFSET + MX1ADS_IO_BASE)
+#define MX1ADS_UART2_BASE (MX1ADS_UART2_OFFSET + MX1ADS_IO_BASE)
+#define MX1ADS_PWM_BASE (MX1ADS_PWM_OFFSET + MX1ADS_IO_BASE)
+#define MX1ADS_DMAC_BASE (MX1ADS_DMAC_OFFSET + MX1ADS_IO_BASE)
+#define MX1ADS_AIPI2_BASE (MX1ADS_AIPI2_OFFSET + MX1ADS_IO_BASE)
+#define MX1ADS_SIM_BASE (MX1ADS_SIM_OFFSET + MX1ADS_IO_BASE)
+#define MX1ADS_USBD_BASE (MX1ADS_USBD_OFFSET + MX1ADS_IO_BASE)
+#define MX1ADS_SPI1_BASE (MX1ADS_SPI1_OFFSET + MX1ADS_IO_BASE)
+#define MX1ADS_MMC_BASE (MX1ADS_MMC_OFFSET + MX1ADS_IO_BASE)
+#define MX1ADS_ASP_BASE (MX1ADS_ASP_OFFSET + MX1ADS_IO_BASE)
+#define MX1ADS_BTA_BASE (MX1ADS_BTA_OFFSET + MX1ADS_IO_BASE)
+#define MX1ADS_I2C_BASE (MX1ADS_I2C_OFFSET + MX1ADS_IO_BASE)
+#define MX1ADS_SSI_BASE (MX1ADS_SSI_OFFSET + MX1ADS_IO_BASE)
+#define MX1ADS_SPI2_BASE (MX1ADS_SPI2_OFFSET + MX1ADS_IO_BASE)
+#define MX1ADS_MSHC_BASE (MX1ADS_MSHC_OFFSET + MX1ADS_IO_BASE)
+#define MX1ADS_PLL_BASE (MX1ADS_PLL_OFFSET + MX1ADS_IO_BASE)
+#define MX1ADS_GPIO_BASE (MX1ADS_GPIO_OFFSET + MX1ADS_IO_BASE)
+#define MX1ADS_EIM_BASE (MX1ADS_EIM_OFFSET + MX1ADS_IO_BASE)
+#define MX1ADS_SDRAMC_BASE (MX1ADS_SDRAMC_OFFSET + MX1ADS_IO_BASE)
+#define MX1ADS_MMA_BASE (MX1ADS_MMA_OFFSET + MX1ADS_IO_BASE)
+#define MX1ADS_AITC_BASE (MX1ADS_AITC_OFFSET + MX1ADS_IO_BASE)
+#define MX1ADS_CSI_BASE (MX1ADS_CSI_OFFSET + MX1ADS_IO_BASE)
+
+
+/*
+ * MX1 Interrupt numbers
+ *
+ */
+#define INT_SOFTINT 0
+#define CSI_INT 6
+#define DSPA_MAC_INT 7
+#define DSPA_INT 8
+#define COMP_INT 9
+#define MSHC_XINT 10
+#define GPIO_INT_PORTA 11
+#define GPIO_INT_PORTB 12
+#define GPIO_INT_PORTC 13
+#define LCDC_INT 14
+#define SIM_INT 15
+#define SIM_DATA_INT 16
+#define RTC_INT 17
+#define RTC_SAMINT 18
+#define UART2_MINT_PFERR 19
+#define UART2_MINT_RTS 20
+#define UART2_MINT_DTR 21
+#define UART2_MINT_UARTC 22
+#define UART2_MINT_TX 23
+#define UART2_MINT_RX 24
+#define UART1_MINT_PFERR 25
+#define UART1_MINT_RTS 26
+#define UART1_MINT_DTR 27
+#define UART1_MINT_UARTC 28
+#define UART1_MINT_TX 29
+#define UART1_MINT_RX 30
+#define VOICE_DAC_INT 31
+#define VOICE_ADC_INT 32
+#define PEN_DATA_INT 33
+#define PWM_INT 34
+#define SDHC_INT 35
+#define I2C_INT 39
+#define CSPI_INT 41
+#define SSI_TX_INT 42
+#define SSI_TX_ERR_INT 43
+#define SSI_RX_INT 44
+#define SSI_RX_ERR_INT 45
+#define TOUCH_INT 46
+#define USBD_INT0 47
+#define USBD_INT1 48
+#define USBD_INT2 49
+#define USBD_INT3 50
+#define USBD_INT4 51
+#define USBD_INT5 52
+#define USBD_INT6 53
+#define BTSYS_INT 55
+#define BTTIM_INT 56
+#define BTWUI_INT 57
+#define TIMER2_INT 58
+#define TIMER1_INT 59
+#define DMA_ERR 60
+#define DMA_INT 61
+#define GPIO_INT_PORTD 62
+
+
+#define MAXIRQNUM 62
+#define MAXFIQNUM 62
+#define MAXSWINUM 62
+
+
+#define TICKS_PER_uSEC 24
+
+/*
+ * These are useconds NOT ticks.
+ *
+ */
+#define mSEC_1 1000
+#define mSEC_5 (mSEC_1 * 5)
+#define mSEC_10 (mSEC_1 * 10)
+#define mSEC_25 (mSEC_1 * 25)
+#define SEC_1 (mSEC_1 * 1000)
+
+
+#endif
+
+