summaryrefslogtreecommitdiff
path: root/target/u-boot
diff options
context:
space:
mode:
authorJohn Voltz <john.voltz@gmail.com>2008-03-11 18:26:07 +0000
committerJohn Voltz <john.voltz@gmail.com>2008-03-11 18:26:07 +0000
commit7f4141ae20e2db75b0a8ffcfe231dabeb25ce7b2 (patch)
tree5976c7dd2f1b21720399353f18860f1917baebc1 /target/u-boot
parent944e92856ac4dc38d2993ef98512955ad2bb9947 (diff)
separate u-boot for at91 arm and everything else
Diffstat (limited to 'target/u-boot')
-rw-r--r--target/u-boot/Config.in72
-rw-r--r--target/u-boot/Makefile.in148
-rw-r--r--target/u-boot/u-boot-1.3.0-avr32-100-atmel.2.patch3177
3 files changed, 3397 insertions, 0 deletions
diff --git a/target/u-boot/Config.in b/target/u-boot/Config.in
new file mode 100644
index 000000000..66ebaf50a
--- /dev/null
+++ b/target/u-boot/Config.in
@@ -0,0 +1,72 @@
+config BR2_TARGET_UBOOT
+ bool "Das U-Boot Boot Monitor"
+ depends on !BR2_TARGET_AT91
+ default n
+ help
+ Build "Das U-Boot" Boot Monitor
+
+config BR2_TARGET_UBOOT_BOARDNAME
+ string "board name"
+ depends on BR2_TARGET_UBOOT
+ default "$(BOARD_NAME)"
+ help
+ One of U-Boot supported boards to be built.
+ This will be suffixed with _config to meet U-Boot standard naming.
+
+config BR2_TARGET_UBOOT_CUSTOM_PATCH
+ string "custom patch"
+ depends on BR2_TARGET_UBOOT
+ help
+ If your board requires a custom patch, add the path to the file here.
+ Most users may leave this empty
+
+config BR2_TARGET_UBOOT_SERVERIP
+ string "server ip"
+ depends on BR2_TARGET_UBOOT
+ default "10.175.196.221"
+ help
+ TFTP server ip address
+
+config BR2_TARGET_UBOOT_IPADDR
+ string "ip address"
+ depends on BR2_TARGET_UBOOT
+ default "10.175.196.18"
+ help
+ Target ip address
+
+config BR2_TARGET_UBOOT_GATEWAY
+ string "gateway ip"
+ depends on BR2_TARGET_UBOOT
+ default "10.175.196.1"
+ help
+ Gateway ip address
+
+config BR2_TARGET_UBOOT_NETMASK
+ string "netmask"
+ depends on BR2_TARGET_UBOOT
+ default "255.255.255.0"
+ help
+ Network Mask
+
+config BR2_TARGET_UBOOT_ETHADDR
+ string "ethernet address"
+ depends on BR2_TARGET_UBOOT
+ default "04:25:fe:ed:00:18"
+ help
+ Target MAC address for the ethernet interface.
+ This should be changed for production units
+
+config BR2_TARGET_UBOOT_ETH1ADDR
+ string "ethernet 2 address"
+ depends on BR2_TARGET_UBOOT
+ depends on BR2_TARGET_AVR32
+ help
+ Target MAC address for the second ethernet interface.
+
+config BR2_TARGET_UBOOT_SILENT
+ bool "silent console"
+ depends on BR2_TARGET_UBOOT
+ default n
+ help
+ If the option has been enabled, the output can be
+ silenced by setting the environment variable "silent".
diff --git a/target/u-boot/Makefile.in b/target/u-boot/Makefile.in
new file mode 100644
index 000000000..8ae084bdf
--- /dev/null
+++ b/target/u-boot/Makefile.in
@@ -0,0 +1,148 @@
+#############################################################
+#
+# U-Boot
+#
+#############################################################
+U_BOOT_VERSION:=1.3.0
+U_BOOT_SOURCE:=u-boot-$(U_BOOT_VERSION).tar.bz2
+U_BOOT_SITE:=ftp://ftp.denx.de/pub/u-boot
+U_BOOT_DIR:=$(PROJECT_BUILD_DIR)/u-boot-$(U_BOOT_VERSION)
+U_BOOT_PATCH_DIR:=$(PROJECT_BUILD_DIR)/u-boot-patches
+U_BOOT_CAT:=$(BZCAT)
+U_BOOT_BIN:=u-boot.bin
+U_BOOT_TOOLS_BIN:=mkimage
+
+ifneq ($(BR2_TARGET_U_BOOT_CONFIG_BOARD),)
+U_BOOT_INC_CONF_FILE:=$(U_BOOT_DIR)/include/configs/$(subst _config,,$(BR2_TARGET_U_BOOT_CONFIG_BOARD)).h
+else
+U_BOOT_INC_CONF_FILE:=$(U_BOOT_DIR)/include/config.h
+endif
+
+# Define a helper function
+define insert_define
+@echo "#ifdef $(strip $(1))" >> $(U_BOOT_INC_CONF_FILE)
+@echo "#undef $(strip $(1))" >> $(U_BOOT_INC_CONF_FILE)
+@echo "#endif" >> $(U_BOOT_INC_CONF_FILE)
+@echo "#define $(strip $(1)) $(2)" >> $(U_BOOT_INC_CONF_FILE)
+endef
+
+$(DL_DIR)/$(U_BOOT_SOURCE):
+ $(WGET) -P $(DL_DIR) $(U_BOOT_SITE)/$(U_BOOT_SOURCE)
+
+$(U_BOOT_DIR)/.unpacked: $(DL_DIR)/$(U_BOOT_SOURCE)
+ $(U_BOOT_CAT) $(DL_DIR)/$(U_BOOT_SOURCE) \
+ | tar -C $(PROJECT_BUILD_DIR) $(TAR_OPTIONS) -
+ touch $@
+
+$(U_BOOT_DIR)/.patched: $(U_BOOT_DIR)/.unpacked
+ toolchain/patch-kernel.sh $(U_BOOT_DIR) target/u-boot/ \
+ u-boot-$(U_BOOT_VERSION)-$(BR2_ARCH)-\*.patch\*
+ifneq ($(strip $(BR2_TARGET_UBOOT_CUSTOM_PATCH)),"")
+ @mkdir -p $(U_BOOT_PATCH_DIR)
+ cp -dpr $(BR2_TARGET_UBOOT_CUSTOM_PATCH) $(U_BOOT_PATCH_DIR)
+ toolchain/patch-kernel.sh $(U_BOOT_DIR) $(U_BOOT_PATCH_DIR) *.patch
+endif
+ touch $@
+
+$(U_BOOT_DIR)/.header_copied: $(U_BOOT_DIR)/.patched
+ifneq ($(strip $(BR2_TARGET_U_BOOT_CONFIG_HEADER_FILE)),)
+ cp -dpf $(BR2_TARGET_U_BOOT_CONFIG_HEADER_FILE) $(U_BOOT_INC_CONF_FILE)
+endif
+ touch $@
+
+$(U_BOOT_DIR)/.configured: $(U_BOOT_DIR)/.header_copied
+ $(TARGET_CONFIGURE_OPTS) \
+ CFLAGS="$(TARGET_CFLAGS)" \
+ LDFLAGS="$(TARGET_LDFLAGS)" \
+ $(MAKE) -C $(U_BOOT_DIR) \
+ $(BR2_TARGET_UBOOT_BOARDNAME)_config
+ touch $@
+
+$(U_BOOT_DIR)/.header_modified: $(U_BOOT_DIR)/.configured
+ # Modify configuration header in $(U_BOOT_INC_CONF_FILE)
+
+ @echo >> $(U_BOOT_INC_CONF_FILE)
+ @echo "/* Add a wrapper around the values Buildroot sets. */" >> $(U_BOOT_INC_CONF_FILE)
+ @echo "#ifndef __BR2_ADDED_CONFIG_H" >> $(U_BOOT_INC_CONF_FILE)
+ @echo "#define __BR2_ADDED_CONFIG_H" >> $(U_BOOT_INC_CONF_FILE)
+ifneq ($(strip $(BR2_PROJECT)),"")
+ $(call insert_define, "CONFIG_HOSTNAME", $(BR2_PROJECT))
+endif
+ifneq ($(strip $(BR2_TARGET_UBOOT_SERVERIP)),"")
+ $(call insert_define, "CONFIG_SERVERIP", $(BR2_TARGET_UBOOT_SERVERIP))
+endif
+
+ifneq ($(strip $(BR2_TARGET_UBOOT_IPADDR)),"")
+ $(call insert_define, "CONFIG_IPADDR", $(BR2_TARGET_UBOOT_IPADDR))
+ifneq ($(strip $(BR2_TARGET_UBOOT_GATEWAY)),"")
+ $(call insert_define, "CONFIG_GATEWAYIP", $(BR2_TARGET_UBOOT_GATEWAY))
+endif
+ifneq ($(strip $(BR2_TARGET_UBOOT_NETMASK)),"")
+ $(call insert_define, "CONFIG_NETMASK", $(BR2_TARGET_UBOOT_NETMASK))
+endif
+endif # end BR2_TARGET_U_BOOT_IPADDR
+
+ifneq ($(strip $(BR2_TARGET_UBOOT_ETHADDR)),"")
+ $(call insert_define, "CONFIG_ETHADDR", $(BR2_TARGET_UBOOT_ETHADDR))
+endif
+ifneq ($(strip $(BR2_TARGET_UBOOT_ETH1ADDR)),"")
+ $(call insert_define "CONFIG_ETH2ADDR", $(BR2_TARGET_UBOOT_ETH1ADDR))
+endif
+ifneq ($(strip $(BR2_TARGET_UBOOT_BOOTARGS)),"")
+ $(call insert_define "CONFIG_BOOTARGS", $(BR2_TARGET_UBOOT_BOOTARGS))
+endif
+ifneq ($(strip $(BR2_TARGET_UBOOT_BOOTCMD)),"")
+ $(call insert_define "CONFIG_BOOTCOMMAND", $(BR2_TARGET_UBOOT_BOOTCMD))
+endif
+ifneq ($(strip $(BR2_TARGET_UBOOT_SILENT)),"")
+ $(call insert_define "CONFIG_SILENT_CONSOLE", "")
+endif
+ @echo "#endif /* __BR2_ADDED_CONFIG_H */" >> $(U_BOOT_INC_CONF_FILE)
+ touch $@
+
+$(U_BOOT_DIR)/$(U_BOOT_BIN): $(U_BOOT_DIR)/.header_modified
+ $(TARGET_CONFIGURE_OPTS) \
+ CFLAGS="$(TARGET_CFLAGS)" \
+ LDFLAGS="$(TARGET_LDFLAGS)" \
+ $(MAKE) -C $(U_BOOT_DIR)
+
+$(BINARIES_DIR)/$(U_BOOT_BIN): $(U_BOOT_DIR)/$(U_BOOT_BIN)
+ cp -dpf $(U_BOOT_DIR)/$(U_BOOT_BIN) $(BINARIES_DIR)
+ cp -dpf $(U_BOOT_DIR)/tools/$(U_BOOT_TOOLS_BIN) $(STAGING_DIR)/usr/bin/
+
+u-boot: gcc $(BINARIES_DIR)/$(U_BOOT_BIN)
+
+u-boot-clean:
+ $(MAKE) -C $(U_BOOT_DIR) clean
+
+u-boot-dirclean:
+ rm -rf $(U_BOOT_DIR)
+
+u-boot-source: $(DL_DIR)/$(U_BOOT_SOURCE)
+
+#############################################################
+#
+# Toplevel Makefile options
+#
+#############################################################
+ifeq ($(strip $(BR2_TARGET_UBOOT)),y)
+TARGETS+=u-boot
+endif
+
+u-boot-status:
+ @echo
+ @echo U_BOOT_INC_CONF_FILE = $(U_BOOT_INC_CONF_FILE)
+ @echo
+ @echo BR2_TARGET_U_BOOT_CONFIG_HEADER_FILE = $(BR2_TARGET_U_BOOT_CONFIG_HEADER_FILE)
+ @echo BR2_TARGET_U_BOOT_CONFIG_BOARD = $(BR2_TARGET_U_BOOT_CONFIG_BOARD)
+ @echo BR2_TARGET_UBOOT_SERVERIP = $(BR2_TARGET_UBOOT_SERVERIP)
+ @echo BR2_TARGET_UBOOT_IPADDR = $(BR2_TARGET_UBOOT_IPADDR)
+ @echo BR2_TARGET_UBOOT_GATEWAY = $(BR2_TARGET_UBOOT_GATEWAY)
+ @echo BR2_TARGET_UBOOT_NETMASK = $(BR2_TARGET_UBOOT_NETMASK)
+ @echo BR2_TARGET_UBOOT_ETH0ADDR = $(BR2_TARGET_UBOOT_ETHADDR)
+ @echo BR2_TARGET_UBOOT_ETH1ADDR = $(BR2_TARGET_UBOOT_ETH1ADDR)
+ @echo BR2_TARGET_UBOOT_BOOTARGS = $(BR2_TARGET_UBOOT_BOOTARGS)
+ @echo BR2_TARGET_UBOOT_BOOTCMD = $(BR2_TARGET_UBOOT_BOOTCMD)
+ @echo BR2_TARGET_UBOOT_SILENT = $(BR2_TARGET_UBOOT_SILENT)
+ @echo
+ @exit 0
diff --git a/target/u-boot/u-boot-1.3.0-avr32-100-atmel.2.patch b/target/u-boot/u-boot-1.3.0-avr32-100-atmel.2.patch
new file mode 100644
index 000000000..a6d484b2d
--- /dev/null
+++ b/target/u-boot/u-boot-1.3.0-avr32-100-atmel.2.patch
@@ -0,0 +1,3177 @@
+ MAINTAINERS | 6 +-
+ MAKEALL | 3 +
+ Makefile | 13 +-
+ README | 4 +-
+ board/atmel/atngw100/Makefile | 40 ++++
+ board/atmel/atngw100/atngw100.c | 73 +++++++
+ board/atmel/atngw100/config.mk | 3 +
+ board/atmel/atngw100/eth.c | 36 ++++
+ board/atmel/atngw100/flash.c | 232 +++++++++++++++++++++
+ board/atmel/atngw100/u-boot.lds | 80 +++++++
+ cpu/at32ap/at32ap7000/Makefile | 43 ----
+ cpu/at32ap/at32ap7000/gpio.c | 137 ------------
+ cpu/at32ap/at32ap700x/Makefile | 43 ++++
+ cpu/at32ap/at32ap700x/gpio.c | 144 +++++++++++++
+ cpu/at32ap/atmel_mci.c | 13 +-
+ include/asm-avr32/arch-at32ap7000/clk.h | 70 ------
+ include/asm-avr32/arch-at32ap7000/gpio.h | 212 -------------------
+ include/asm-avr32/arch-at32ap7000/hmatrix2.h | 232 ---------------------
+ include/asm-avr32/arch-at32ap7000/memory-map.h | 66 ------
+ include/asm-avr32/arch-at32ap7000/mmc.h | 96 ---------
+ include/asm-avr32/arch-at32ap700x/chip-features.h | 34 +++
+ include/asm-avr32/arch-at32ap700x/clk.h | 78 +++++++
+ include/asm-avr32/arch-at32ap700x/gpio.h | 220 +++++++++++++++++++
+ include/asm-avr32/arch-at32ap700x/hmatrix2.h | 232 +++++++++++++++++++++
+ include/asm-avr32/arch-at32ap700x/memory-map.h | 66 ++++++
+ include/asm-avr32/arch-at32ap700x/mmc.h | 96 +++++++++
+ include/configs/atngw100.h | 177 ++++++++++++++++
+ include/configs/atstk1002.h | 4 +-
+ include/configs/atstk1003.h | 184 ++++++++++++++++
+ include/configs/atstk1004.h | 185 ++++++++++++++++
+ lib_avr32/board.c | 10 +
+ net/eth.c | 4 +
+ 32 files changed, 1966 insertions(+), 870 deletions(-)
+ create mode 100644 board/atmel/atngw100/Makefile
+ create mode 100644 board/atmel/atngw100/atngw100.c
+ create mode 100644 board/atmel/atngw100/config.mk
+ create mode 100644 board/atmel/atngw100/eth.c
+ create mode 100644 board/atmel/atngw100/flash.c
+ create mode 100644 board/atmel/atngw100/u-boot.lds
+ delete mode 100644 cpu/at32ap/at32ap7000/Makefile
+ delete mode 100644 cpu/at32ap/at32ap7000/gpio.c
+ create mode 100644 cpu/at32ap/at32ap700x/Makefile
+ create mode 100644 cpu/at32ap/at32ap700x/gpio.c
+ delete mode 100644 include/asm-avr32/arch-at32ap7000/clk.h
+ delete mode 100644 include/asm-avr32/arch-at32ap7000/gpio.h
+ delete mode 100644 include/asm-avr32/arch-at32ap7000/hmatrix2.h
+ delete mode 100644 include/asm-avr32/arch-at32ap7000/memory-map.h
+ delete mode 100644 include/asm-avr32/arch-at32ap7000/mmc.h
+ create mode 100644 include/asm-avr32/arch-at32ap700x/chip-features.h
+ create mode 100644 include/asm-avr32/arch-at32ap700x/clk.h
+ create mode 100644 include/asm-avr32/arch-at32ap700x/gpio.h
+ create mode 100644 include/asm-avr32/arch-at32ap700x/hmatrix2.h
+ create mode 100644 include/asm-avr32/arch-at32ap700x/memory-map.h
+ create mode 100644 include/asm-avr32/arch-at32ap700x/mmc.h
+ create mode 100644 include/configs/atngw100.h
+ create mode 100644 include/configs/atstk1003.h
+ create mode 100644 include/configs/atstk1004.h
+
+diff --git a/MAINTAINERS b/MAINTAINERS
+index b8c1fdc..457dce3 100644
+--- a/MAINTAINERS
++++ b/MAINTAINERS
+@@ -630,7 +630,11 @@ Hayden Fraser <Hayden.Fraser@freescale.com>
+
+ Haavard Skinnemoen <hskinnemoen@atmel.com>
+
+- ATSTK1000 AT32AP7000
++ ATSTK1000 AT32AP7xxx
++ ATSTK1002 AT32AP7000
++ ATSTK1003 AT32AP7001
++ ATSTK1004 AT32AP7002
++ ATNGW100 AT32AP7000
+
+ #########################################################################
+ # End of MAINTAINERS list #
+diff --git a/MAKEALL b/MAKEALL
+index 20ef4e1..1538478 100755
+--- a/MAKEALL
++++ b/MAKEALL
+@@ -641,6 +641,9 @@ LIST_coldfire=" \
+
+ LIST_avr32=" \
+ atstk1002 \
++ atstk1003 \
++ atstk1004 \
++ atngw100 \
+ "
+
+ #########################################################################
+diff --git a/Makefile b/Makefile
+index ac4b430..2db97fd 100644
+--- a/Makefile
++++ b/Makefile
+@@ -24,7 +24,7 @@
+ VERSION = 1
+ PATCHLEVEL = 3
+ SUBLEVEL = 0
+-EXTRAVERSION =
++EXTRAVERSION = .atmel.2
+ U_BOOT_VERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
+ VERSION_FILE = $(obj)include/version_autogenerated.h
+
+@@ -2607,7 +2607,16 @@ bf561-ezkit_config: unconfig
+ #########################################################################
+
+ atstk1002_config : unconfig
+- @$(MKCONFIG) $(@:_config=) avr32 at32ap atstk1000 atmel at32ap7000
++ @$(MKCONFIG) $(@:_config=) avr32 at32ap atstk1000 atmel at32ap700x
++
++atstk1003_config : unconfig
++ @$(MKCONFIG) $(@:_config=) avr32 at32ap atstk1000 atmel at32ap700x
++
++atstk1004_config : unconfig
++ @$(MKCONFIG) $(@:_config=) avr32 at32ap atstk1000 atmel at32ap700x
++
++atngw100_config : unconfig
++ @$(MKCONFIG) $(@:_config=) avr32 at32ap atngw100 atmel at32ap700x
+
+ #########################################################################
+ #########################################################################
+diff --git a/README b/README
+index 3dad5fc..26f93c2 100644
+--- a/README
++++ b/README
+@@ -235,9 +235,7 @@ The following options need to be configured:
+ - Board Type: Define exactly one, e.g. CONFIG_MPC8540ADS.
+
+ - CPU Daughterboard Type: (if CONFIG_ATSTK1000 is defined)
+- Define exactly one of
+- CONFIG_ATSTK1002
+-
++ Define exactly one, e.g. CONFIG_ATSTK1002
+
+ - CPU Module Type: (if CONFIG_COGENT is defined)
+ Define exactly one of
+diff --git a/board/atmel/atngw100/Makefile b/board/atmel/atngw100/Makefile
+new file mode 100644
+index 0000000..f1ea6e6
+--- /dev/null
++++ b/board/atmel/atngw100/Makefile
+@@ -0,0 +1,40 @@
++#
++# Copyright (C) 2005-2006 Atmel Corporation
++#
++# See file CREDITS for list of people who contributed to this project.
++#
++# This program is free software; you can redistribute it and/or
++# modify it under the terms of the GNU General Public License as
++# published by the Free Software Foundation; either version 2 of
++# the License, or (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++# MA 02111-1307 USA
++
++include $(TOPDIR)/config.mk
++
++LIB := $(obj)lib$(BOARD).a
++
++COBJS := $(BOARD).o flash.o eth.o
++
++SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c)
++OBJS := $(addprefix $(obj),$(SOBJS) $(COBJS))
++
++$(LIB): $(obj).depend $(OBJS)
++ $(AR) $(ARFLAGS) $@ $(OBJS)
++
++#########################################################################
++
++# defines $(obj).depend target
++include $(SRCTREE)/rules.mk
++
++sinclude $(obj).depend
++
++#########################################################################
+diff --git a/board/atmel/atngw100/atngw100.c b/board/atmel/atngw100/atngw100.c
+new file mode 100644
+index 0000000..bd4b6b4
+--- /dev/null
++++ b/board/atmel/atngw100/atngw100.c
+@@ -0,0 +1,73 @@
++/*
++ * Copyright (C) 2006 Atmel Corporation
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++#include <common.h>
++
++#include <asm/io.h>
++#include <asm/sdram.h>
++#include <asm/arch/gpio.h>
++#include <asm/arch/hmatrix2.h>
++
++DECLARE_GLOBAL_DATA_PTR;
++
++static const struct sdram_info sdram = {
++ .phys_addr = CFG_SDRAM_BASE,
++ .row_bits = 13,
++ .col_bits = 9,
++ .bank_bits = 2,
++ .cas = 3,
++ .twr = 2,
++ .trc = 7,
++ .trp = 2,
++ .trcd = 2,
++ .tras = 5,
++ .txsr = 5,
++};
++
++int board_early_init_f(void)
++{
++ /* Set the SDRAM_ENABLE bit in the HEBI SFR */
++ hmatrix2_writel(SFR4, 1 << 1);
++
++ gpio_enable_ebi();
++ gpio_enable_usart1();
++
++#if defined(CONFIG_MACB)
++ gpio_enable_macb0();
++ gpio_enable_macb1();
++#endif
++#if defined(CONFIG_MMC)
++ gpio_enable_mmci();
++#endif
++
++ return 0;
++}
++
++long int initdram(int board_type)
++{
++ return sdram_init(&sdram);
++}
++
++void board_init_info(void)
++{
++ gd->bd->bi_phy_id[0] = 0x01;
++ gd->bd->bi_phy_id[1] = 0x03;
++}
+diff --git a/board/atmel/atngw100/config.mk b/board/atmel/atngw100/config.mk
+new file mode 100644
+index 0000000..9a794e5
+--- /dev/null
++++ b/board/atmel/atngw100/config.mk
+@@ -0,0 +1,3 @@
++TEXT_BASE = 0x00000000
++PLATFORM_RELFLAGS += -ffunction-sections -fdata-sections
++PLATFORM_LDFLAGS += --gc-sections
+diff --git a/board/atmel/atngw100/eth.c b/board/atmel/atngw100/eth.c
+new file mode 100644
+index 0000000..d1d57bb
+--- /dev/null
++++ b/board/atmel/atngw100/eth.c
+@@ -0,0 +1,36 @@
++/*
++ * Copyright (C) 2006 Atmel Corporation
++ *
++ * Ethernet initialization for the AVR32 Network Gateway
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++#include <common.h>
++
++#include <asm/arch/memory-map.h>
++
++extern int macb_eth_initialize(int id, void *regs, unsigned int phy_addr);
++
++#ifdef CONFIG_CMD_NET
++void atngw100_eth_initialize(bd_t *bi)
++{
++ macb_eth_initialize(0, (void *)MACB0_BASE, bi->bi_phy_id[0]);
++ macb_eth_initialize(1, (void *)MACB1_BASE, bi->bi_phy_id[1]);
++}
++#endif
+diff --git a/board/atmel/atngw100/flash.c b/board/atmel/atngw100/flash.c
+new file mode 100644
+index 0000000..2d9423f
+--- /dev/null
++++ b/board/atmel/atngw100/flash.c
+@@ -0,0 +1,232 @@
++/*
++ * Copyright (C) 2006 Atmel Corporation
++ *
++ * 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>
++
++#ifdef CONFIG_ATNGW100_EXT_FLASH
++#include <asm/cacheflush.h>
++#include <asm/io.h>
++#include <asm/sections.h>
++
++DECLARE_GLOBAL_DATA_PTR;
++
++flash_info_t flash_info[1];
++
++static void __flashprog flash_identify(uint16_t *flash, flash_info_t *info)
++{
++ unsigned long flags;
++
++ flags = disable_interrupts();
++
++ dcache_flush_unlocked();
++
++ writew(0xaa, flash + 0x555);
++ writew(0x55, flash + 0xaaa);
++ writew(0x90, flash + 0x555);
++ info->flash_id = readl(flash);
++ writew(0xff, flash);
++
++ readw(flash);
++
++ if (flags)
++ enable_interrupts();
++}
++
++unsigned long flash_init(void)
++{
++ unsigned long addr;
++ unsigned int i;
++
++ flash_info[0].size = CFG_FLASH_SIZE;
++ flash_info[0].sector_count = 135;
++
++ flash_identify(uncached((void *)CFG_FLASH_BASE), &flash_info[0]);
++
++ for (i = 0, addr = 0; i < 8; i++, addr += 0x2000)
++ flash_info[0].start[i] = addr;
++ for (; i < flash_info[0].sector_count; i++, addr += 0x10000)
++ flash_info[0].start[i] = addr;
++
++ return CFG_FLASH_SIZE;
++}
++
++void flash_print_info(flash_info_t *info)
++{
++ printf("Flash: Vendor ID: 0x%02x, Product ID: 0x%02x\n",
++ info->flash_id >> 16, info->flash_id & 0xffff);
++ printf("Size: %ld MB in %d sectors\n",
++ info->size >> 10, info->sector_count);
++}
++
++int __flashprog flash_erase(flash_info_t *info, int s_first, int s_last)
++{
++ unsigned long flags;
++ unsigned long start_time;
++ uint16_t *fb, *sb;
++ unsigned int i;
++ int ret;
++ uint16_t status;
++
++ if ((s_first < 0) || (s_first > s_last)
++ || (s_last >= info->sector_count)) {
++ puts("Error: first and/or last sector out of range\n");
++ return ERR_INVAL;
++ }
++
++ for (i = s_first; i < s_last; i++)
++ if (info->protect[i]) {
++ printf("Error: sector %d is protected\n", i);
++ return ERR_PROTECTED;
++ }
++
++ fb = (uint16_t *)uncached(info->start[0]);
++
++ dcache_flush_unlocked();
++
++ for (i = s_first; (i <= s_last) && !ctrlc(); i++) {
++ printf("Erasing sector %3d...", i);
++
++ sb = (uint16_t *)uncached(info->start[i]);
++
++ flags = disable_interrupts();
++
++ start_time = get_timer(0);
++
++ /* Unlock sector */
++ writew(0xaa, fb + 0x555);
++ writew(0x70, sb);
++
++ /* Erase sector */
++ writew(0xaa, fb + 0x555);
++ writew(0x55, fb + 0xaaa);
++ writew(0x80, fb + 0x555);
++ writew(0xaa, fb + 0x555);
++ writew(0x55, fb + 0xaaa);
++ writew(0x30, sb);
++
++ /* Wait for completion */
++ ret = ERR_OK;
++ do {
++ /* TODO: Timeout */
++ status = readw(sb);
++ } while ((status != 0xffff) && !(status & 0x28));
++
++ writew(0xf0, fb);
++
++ /*
++ * Make sure the command actually makes it to the bus
++ * before we re-enable interrupts.
++ */
++ readw(fb);
++
++ if (flags)
++ enable_interrupts();
++
++ if (status != 0xffff) {
++ printf("Flash erase error at address 0x%p: 0x%02x\n",
++ sb, status);
++ ret = ERR_PROG_ERROR;
++ break;
++ }
++ }
++
++ if (ctrlc())
++ printf("User interrupt!\n");
++
++ return ERR_OK;
++}
++
++int __flashprog write_buff(flash_info_t *info, uchar *src,
++ ulong addr, ulong count)
++{
++ unsigned long flags;
++ uint16_t *base, *p, *s, *end;
++ uint16_t word, status, status1;
++ int ret = ERR_OK;
++
++ if (addr < info->start[0]
++ || (addr + count) > (info->start[0] + info->size)
++ || (addr + count) < addr) {
++ puts("Error: invalid address range\n");
++ return ERR_INVAL;
++ }
++
++ if (addr & 1 || count & 1 || (unsigned int)src & 1) {
++ puts("Error: misaligned source, destination or count\n");
++ return ERR_ALIGN;
++ }
++
++ base = (uint16_t *)uncached(info->start[0]);
++ end = (uint16_t *)uncached(addr + count);
++
++ flags = disable_interrupts();
++
++ dcache_flush_unlocked();
++ sync_write_buffer();
++
++ for (p = (uint16_t *)uncached(addr), s = (uint16_t *)src;
++ p < end && !ctrlc(); p++, s++) {
++ word = *s;
++
++ writew(0xaa, base + 0x555);
++ writew(0x55, base + 0xaaa);
++ writew(0xa0, base + 0x555);
++ writew(word, p);
++
++ sync_write_buffer();
++
++ /* Wait for completion */
++ status1 = readw(p);
++ do {
++ /* TODO: Timeout */
++ status = status1;
++ status1 = readw(p);
++ } while (((status ^ status1) & 0x40) /* toggled */
++ && !(status1 & 0x28)); /* error bits */
++
++ /*
++ * We'll need to check once again for toggle bit
++ * because the toggle bit may stop toggling as I/O5
++ * changes to "1" (ref at49bv642.pdf p9)
++ */
++ status1 = readw(p);
++ status = readw(p);
++ if ((status ^ status1) & 0x40) {
++ printf("Flash write error at address 0x%p: "
++ "0x%02x != 0x%02x\n",
++ p, status,word);
++ ret = ERR_PROG_ERROR;
++ writew(0xf0, base);
++ readw(base);
++ break;
++ }
++
++ writew(0xf0, base);
++ readw(base);
++ }
++
++ if (flags)
++ enable_interrupts();
++
++ return ret;
++}
++
++#endif /* CONFIG_ATSTK1000_EXT_FLASH */
+diff --git a/board/atmel/atngw100/u-boot.lds b/board/atmel/atngw100/u-boot.lds
+new file mode 100644
+index 0000000..34e347a
+--- /dev/null
++++ b/board/atmel/atngw100/u-boot.lds
+@@ -0,0 +1,80 @@
++/* -*- Fundamental -*-
++ *
++ * Copyright (C) 2005-2006 Atmel Corporation
++ *
++ * 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_FORMAT("elf32-avr32", "elf32-avr32", "elf32-avr32")
++OUTPUT_ARCH(avr32)
++ENTRY(_start)
++
++SECTIONS
++{
++ . = 0;
++ _text = .;
++ .text : {
++ *(.text)
++ *(.text.*)
++ }
++
++ . = ALIGN(32);
++ __flashprog_start = .;
++ .flashprog : {
++ *(.flashprog)
++ }
++ . = ALIGN(32);
++ __flashprog_end = .;
++ _etext = .;
++
++ .rodata : {
++ *(.rodata)
++ *(.rodata.*)
++ }
++
++ . = ALIGN(8);
++ _data = .;
++ .data : {
++ *(.data)
++ *(.data.*)
++ }
++
++ . = ALIGN(4);
++ __u_boot_cmd_start = .;
++ .u_boot_cmd : {
++ KEEP(*(.u_boot_cmd))
++ }
++ __u_boot_cmd_end = .;
++
++ . = ALIGN(4);
++ _got = .;
++ .got : {
++ *(.got)
++ }
++ _egot = .;
++
++ . = ALIGN(8);
++ _edata = .;
++
++ .bss : {
++ *(.bss)
++ *(.bss.*)
++ }
++ . = ALIGN(8);
++ _end = .;
++}
+diff --git a/cpu/at32ap/at32ap7000/Makefile b/cpu/at32ap/at32ap7000/Makefile
+deleted file mode 100644
+index d276712..0000000
+--- a/cpu/at32ap/at32ap7000/Makefile
++++ /dev/null
+@@ -1,43 +0,0 @@
+-#
+-# Copyright (C) 2005-2006 Atmel Corporation
+-#
+-# See file CREDITS for list of people who contributed to this
+-# project.
+-#
+-# This program is free software; you can redistribute it and/or
+-# modify it under the terms of the GNU General Public License as
+-# published by the Free Software Foundation; either version 2 of
+-# the License, or (at your option) any later version.
+-#
+-# This program is distributed in the hope that it will be useful,
+-# but WITHOUT ANY WARRANTY; without even the implied warranty of
+-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-# GNU General Public License for more details.
+-#
+-# You should have received a copy of the GNU General Public License
+-# along with this program; if not, write to the Free Software
+-# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+-# MA 02111-1307 USA
+-#
+-
+-include $(TOPDIR)/config.mk
+-
+-LIB := $(obj)lib$(SOC).a
+-
+-COBJS := gpio.o
+-SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c)
+-OBJS := $(addprefix $(obj),$(SOBJS) $(COBJS))
+-
+-all: $(obj).depend $(LIB)
+-
+-$(LIB): $(OBJS)
+- $(AR) $(ARFLAGS) $@ $^
+-
+-#########################################################################
+-
+-# defines $(obj).depend target
+-include $(SRCTREE)/rules.mk
+-
+-sinclude $(obj).depend
+-
+-#########################################################################
+diff --git a/cpu/at32ap/at32ap7000/gpio.c b/cpu/at32ap/at32ap7000/gpio.c
+deleted file mode 100644
+index 52f5372..0000000
+--- a/cpu/at32ap/at32ap7000/gpio.c
++++ /dev/null
+@@ -1,137 +0,0 @@
+-/*
+- * Copyright (C) 2006 Atmel Corporation
+- *
+- * See file CREDITS for list of people who contributed to this
+- * project.
+- *
+- * This program is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU General Public License as
+- * published by the Free Software Foundation; either version 2 of
+- * the License, or (at your option) any later version.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+- * MA 02111-1307 USA
+- */
+-#include <common.h>
+-
+-#include <asm/arch/gpio.h>
+-
+-/*
+- * Lots of small functions here. We depend on --gc-sections getting
+- * rid of the ones we don't need.
+- */
+-void gpio_enable_ebi(void)
+-{
+-#ifdef CFG_HSDRAMC
+-#ifndef CFG_SDRAM_16BIT
+- gpio_select_periph_A(GPIO_PIN_PE0, 0);
+- gpio_select_periph_A(GPIO_PIN_PE1, 0);
+- gpio_select_periph_A(GPIO_PIN_PE2, 0);
+- gpio_select_periph_A(GPIO_PIN_PE3, 0);
+- gpio_select_periph_A(GPIO_PIN_PE4, 0);
+- gpio_select_periph_A(GPIO_PIN_PE5, 0);
+- gpio_select_periph_A(GPIO_PIN_PE6, 0);
+- gpio_select_periph_A(GPIO_PIN_PE7, 0);
+- gpio_select_periph_A(GPIO_PIN_PE8, 0);
+- gpio_select_periph_A(GPIO_PIN_PE9, 0);
+- gpio_select_periph_A(GPIO_PIN_PE10, 0);
+- gpio_select_periph_A(GPIO_PIN_PE11, 0);
+- gpio_select_periph_A(GPIO_PIN_PE12, 0);
+- gpio_select_periph_A(GPIO_PIN_PE13, 0);
+- gpio_select_periph_A(GPIO_PIN_PE14, 0);
+- gpio_select_periph_A(GPIO_PIN_PE15, 0);
+-#endif
+- gpio_select_periph_A(GPIO_PIN_PE26, 0);
+-#endif
+-}
+-
+-void gpio_enable_usart0(void)
+-{
+- gpio_select_periph_B(GPIO_PIN_PA8, 0);
+- gpio_select_periph_B(GPIO_PIN_PA9, 0);
+-}
+-
+-void gpio_enable_usart1(void)
+-{
+- gpio_select_periph_A(GPIO_PIN_PA17, 0);
+- gpio_select_periph_A(GPIO_PIN_PA18, 0);
+-}
+-
+-void gpio_enable_usart2(void)
+-{
+- gpio_select_periph_B(GPIO_PIN_PB26, 0);
+- gpio_select_periph_B(GPIO_PIN_PB27, 0);
+-}
+-
+-void gpio_enable_usart3(void)
+-{
+- gpio_select_periph_B(GPIO_PIN_PB18, 0);
+- gpio_select_periph_B(GPIO_PIN_PB19, 0);
+-}
+-
+-void gpio_enable_macb0(void)
+-{
+- gpio_select_periph_A(GPIO_PIN_PC3, 0); /* TXD0 */
+- gpio_select_periph_A(GPIO_PIN_PC4, 0); /* TXD1 */
+- gpio_select_periph_A(GPIO_PIN_PC7, 0); /* TXEN */
+- gpio_select_periph_A(GPIO_PIN_PC8, 0); /* TXCK */
+- gpio_select_periph_A(GPIO_PIN_PC9, 0); /* RXD0 */
+- gpio_select_periph_A(GPIO_PIN_PC10, 0); /* RXD1 */
+- gpio_select_periph_A(GPIO_PIN_PC13, 0); /* RXER */
+- gpio_select_periph_A(GPIO_PIN_PC15, 0); /* RXDV */
+- gpio_select_periph_A(GPIO_PIN_PC16, 0); /* MDC */
+- gpio_select_periph_A(GPIO_PIN_PC17, 0); /* MDIO */
+-#if !defined(CONFIG_RMII)
+- gpio_select_periph_A(GPIO_PIN_PC0, 0); /* COL */
+- gpio_select_periph_A(GPIO_PIN_PC1, 0); /* CRS */
+- gpio_select_periph_A(GPIO_PIN_PC2, 0); /* TXER */
+- gpio_select_periph_A(GPIO_PIN_PC5, 0); /* TXD2 */
+- gpio_select_periph_A(GPIO_PIN_PC6, 0); /* TXD3 */
+- gpio_select_periph_A(GPIO_PIN_PC11, 0); /* RXD2 */
+- gpio_select_periph_A(GPIO_PIN_PC12, 0); /* RXD3 */
+- gpio_select_periph_A(GPIO_PIN_PC14, 0); /* RXCK */
+- gpio_select_periph_A(GPIO_PIN_PC18, 0); /* SPD */
+-#endif
+-}
+-
+-void gpio_enable_macb1(void)
+-{
+- gpio_select_periph_B(GPIO_PIN_PD13, 0); /* TXD0 */
+- gpio_select_periph_B(GPIO_PIN_PD14, 0); /* TXD1 */
+- gpio_select_periph_B(GPIO_PIN_PD11, 0); /* TXEN */
+- gpio_select_periph_B(GPIO_PIN_PD12, 0); /* TXCK */
+- gpio_select_periph_B(GPIO_PIN_PD10, 0); /* RXD0 */
+- gpio_select_periph_B(GPIO_PIN_PD6, 0); /* RXD1 */
+- gpio_select_periph_B(GPIO_PIN_PD5, 0); /* RXER */
+- gpio_select_periph_B(GPIO_PIN_PD4, 0); /* RXDV */
+- gpio_select_periph_B(GPIO_PIN_PD3, 0); /* MDC */
+- gpio_select_periph_B(GPIO_PIN_PD2, 0); /* MDIO */
+-#if !defined(CONFIG_RMII)
+- gpio_select_periph_B(GPIO_PIN_PC19, 0); /* COL */
+- gpio_select_periph_B(GPIO_PIN_PC23, 0); /* CRS */
+- gpio_select_periph_B(GPIO_PIN_PC26, 0); /* TXER */
+- gpio_select_periph_B(GPIO_PIN_PC27, 0); /* TXD2 */
+- gpio_select_periph_B(GPIO_PIN_PC28, 0); /* TXD3 */
+- gpio_select_periph_B(GPIO_PIN_PC29, 0); /* RXD2 */
+- gpio_select_periph_B(GPIO_PIN_PC30, 0); /* RXD3 */
+- gpio_select_periph_B(GPIO_PIN_PC24, 0); /* RXCK */
+- gpio_select_periph_B(GPIO_PIN_PD15, 0); /* SPD */
+-#endif
+-}
+-
+-void gpio_enable_mmci(void)
+-{
+- gpio_select_periph_A(GPIO_PIN_PA10, 0); /* CLK */
+- gpio_select_periph_A(GPIO_PIN_PA11, 0); /* CMD */
+- gpio_select_periph_A(GPIO_PIN_PA12, 0); /* DATA0 */
+- gpio_select_periph_A(GPIO_PIN_PA13, 0); /* DATA1 */
+- gpio_select_periph_A(GPIO_PIN_PA14, 0); /* DATA2 */
+- gpio_select_periph_A(GPIO_PIN_PA15, 0); /* DATA3 */
+-}
+diff --git a/cpu/at32ap/at32ap700x/Makefile b/cpu/at32ap/at32ap700x/Makefile
+new file mode 100644
+index 0000000..d276712
+--- /dev/null
++++ b/cpu/at32ap/at32ap700x/Makefile
+@@ -0,0 +1,43 @@
++#
++# Copyright (C) 2005-2006 Atmel Corporation
++#
++# See file CREDITS for list of people who contributed to this
++# project.
++#
++# This program is free software; you can redistribute it and/or
++# modify it under the terms of the GNU General Public License as
++# published by the Free Software Foundation; either version 2 of
++# the License, or (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++# MA 02111-1307 USA
++#
++
++include $(TOPDIR)/config.mk
++
++LIB := $(obj)lib$(SOC).a
++
++COBJS := gpio.o
++SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c)
++OBJS := $(addprefix $(obj),$(SOBJS) $(COBJS))
++
++all: $(obj).depend $(LIB)
++
++$(LIB): $(OBJS)
++ $(AR) $(ARFLAGS) $@ $^
++
++#########################################################################
++
++# defines $(obj).depend target
++include $(SRCTREE)/rules.mk
++
++sinclude $(obj).depend
++
++#########################################################################
+diff --git a/cpu/at32ap/at32ap700x/gpio.c b/cpu/at32ap/at32ap700x/gpio.c
+new file mode 100644
+index 0000000..859124a
+--- /dev/null
++++ b/cpu/at32ap/at32ap700x/gpio.c
+@@ -0,0 +1,144 @@
++/*
++ * Copyright (C) 2006 Atmel Corporation
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++#include <common.h>
++
++#include <asm/arch/chip-features.h>
++#include <asm/arch/gpio.h>
++
++/*
++ * Lots of small functions here. We depend on --gc-sections getting
++ * rid of the ones we don't need.
++ */
++void gpio_enable_ebi(void)
++{
++#ifdef CFG_HSDRAMC
++#ifndef CFG_SDRAM_16BIT
++ gpio_select_periph_A(GPIO_PIN_PE0, 0);
++ gpio_select_periph_A(GPIO_PIN_PE1, 0);
++ gpio_select_periph_A(GPIO_PIN_PE2, 0);
++ gpio_select_periph_A(GPIO_PIN_PE3, 0);
++ gpio_select_periph_A(GPIO_PIN_PE4, 0);
++ gpio_select_periph_A(GPIO_PIN_PE5, 0);
++ gpio_select_periph_A(GPIO_PIN_PE6, 0);
++ gpio_select_periph_A(GPIO_PIN_PE7, 0);
++ gpio_select_periph_A(GPIO_PIN_PE8, 0);
++ gpio_select_periph_A(GPIO_PIN_PE9, 0);
++ gpio_select_periph_A(GPIO_PIN_PE10, 0);
++ gpio_select_periph_A(GPIO_PIN_PE11, 0);
++ gpio_select_periph_A(GPIO_PIN_PE12, 0);
++ gpio_select_periph_A(GPIO_PIN_PE13, 0);
++ gpio_select_periph_A(GPIO_PIN_PE14, 0);
++ gpio_select_periph_A(GPIO_PIN_PE15, 0);
++#endif
++ gpio_select_periph_A(GPIO_PIN_PE26, 0);
++#endif
++}
++
++#ifdef AT32AP700x_CHIP_HAS_USART
++void gpio_enable_usart0(void)
++{
++ gpio_select_periph_B(GPIO_PIN_PA8, 0);
++ gpio_select_periph_B(GPIO_PIN_PA9, 0);
++}
++
++void gpio_enable_usart1(void)
++{
++ gpio_select_periph_A(GPIO_PIN_PA17, 0);
++ gpio_select_periph_A(GPIO_PIN_PA18, 0);
++}
++
++void gpio_enable_usart2(void)
++{
++ gpio_select_periph_B(GPIO_PIN_PB26, 0);
++ gpio_select_periph_B(GPIO_PIN_PB27, 0);
++}
++
++void gpio_enable_usart3(void)
++{
++ gpio_select_periph_B(GPIO_PIN_PB17, 0);
++ gpio_select_periph_B(GPIO_PIN_PB18, 0);
++}
++#endif
++
++#ifdef AT32AP700x_CHIP_HAS_MACB
++void gpio_enable_macb0(void)
++{
++ gpio_select_periph_A(GPIO_PIN_PC3, 0); /* TXD0 */
++ gpio_select_periph_A(GPIO_PIN_PC4, 0); /* TXD1 */
++ gpio_select_periph_A(GPIO_PIN_PC7, 0); /* TXEN */
++ gpio_select_periph_A(GPIO_PIN_PC8, 0); /* TXCK */
++ gpio_select_periph_A(GPIO_PIN_PC9, 0); /* RXD0 */
++ gpio_select_periph_A(GPIO_PIN_PC10, 0); /* RXD1 */
++ gpio_select_periph_A(GPIO_PIN_PC13, 0); /* RXER */
++ gpio_select_periph_A(GPIO_PIN_PC15, 0); /* RXDV */
++ gpio_select_periph_A(GPIO_PIN_PC16, 0); /* MDC */
++ gpio_select_periph_A(GPIO_PIN_PC17, 0); /* MDIO */
++#if !defined(CONFIG_RMII)
++ gpio_select_periph_A(GPIO_PIN_PC0, 0); /* COL */
++ gpio_select_periph_A(GPIO_PIN_PC1, 0); /* CRS */
++ gpio_select_periph_A(GPIO_PIN_PC2, 0); /* TXER */
++ gpio_select_periph_A(GPIO_PIN_PC5, 0); /* TXD2 */
++ gpio_select_periph_A(GPIO_PIN_PC6, 0); /* TXD3 */
++ gpio_select_periph_A(GPIO_PIN_PC11, 0); /* RXD2 */
++ gpio_select_periph_A(GPIO_PIN_PC12, 0); /* RXD3 */
++ gpio_select_periph_A(GPIO_PIN_PC14, 0); /* RXCK */
++ gpio_select_periph_A(GPIO_PIN_PC18, 0); /* SPD */
++#endif
++}
++
++void gpio_enable_macb1(void)
++{
++ gpio_select_periph_B(GPIO_PIN_PD13, 0); /* TXD0 */
++ gpio_select_periph_B(GPIO_PIN_PD14, 0); /* TXD1 */
++ gpio_select_periph_B(GPIO_PIN_PD11, 0); /* TXEN */
++ gpio_select_periph_B(GPIO_PIN_PD12, 0); /* TXCK */
++ gpio_select_periph_B(GPIO_PIN_PD10, 0); /* RXD0 */
++ gpio_select_periph_B(GPIO_PIN_PD6, 0); /* RXD1 */
++ gpio_select_periph_B(GPIO_PIN_PD5, 0); /* RXER */
++ gpio_select_periph_B(GPIO_PIN_PD4, 0); /* RXDV */
++ gpio_select_periph_B(GPIO_PIN_PD3, 0); /* MDC */
++ gpio_select_periph_B(GPIO_PIN_PD2, 0); /* MDIO */
++#if !defined(CONFIG_RMII)
++ gpio_select_periph_B(GPIO_PIN_PC19, 0); /* COL */
++ gpio_select_periph_B(GPIO_PIN_PC23, 0); /* CRS */
++ gpio_select_periph_B(GPIO_PIN_PC26, 0); /* TXER */
++ gpio_select_periph_B(GPIO_PIN_PC27, 0); /* TXD2 */
++ gpio_select_periph_B(GPIO_PIN_PC28, 0); /* TXD3 */
++ gpio_select_periph_B(GPIO_PIN_PC29, 0); /* RXD2 */
++ gpio_select_periph_B(GPIO_PIN_PC30, 0); /* RXD3 */
++ gpio_select_periph_B(GPIO_PIN_PC24, 0); /* RXCK */
++ gpio_select_periph_B(GPIO_PIN_PD15, 0); /* SPD */
++#endif
++}
++#endif
++
++#ifdef AT32AP700x_CHIP_HAS_MMCI
++void gpio_enable_mmci(void)
++{
++ gpio_select_periph_A(GPIO_PIN_PA10, 0); /* CLK */
++ gpio_select_periph_A(GPIO_PIN_PA11, 0); /* CMD */
++ gpio_select_periph_A(GPIO_PIN_PA12, 0); /* DATA0 */
++ gpio_select_periph_A(GPIO_PIN_PA13, 0); /* DATA1 */
++ gpio_select_periph_A(GPIO_PIN_PA14, 0); /* DATA2 */
++ gpio_select_periph_A(GPIO_PIN_PA15, 0); /* DATA3 */
++}
++#endif
+diff --git a/cpu/at32ap/atmel_mci.c b/cpu/at32ap/atmel_mci.c
+index cf48be1..f59dfb5 100644
+--- a/cpu/at32ap/atmel_mci.c
++++ b/cpu/at32ap/atmel_mci.c
+@@ -198,11 +198,11 @@ mmc_bread(int dev, unsigned long start, lbaint_t blkcnt,
+
+ /* Put the device into Transfer state */
+ ret = mmc_cmd(MMC_CMD_SELECT_CARD, mmc_rca << 16, resp, R1 | NCR);
+- if (ret) goto fail;
++ if (ret) goto out;
+
+ /* Set block length */
+ ret = mmc_cmd(MMC_CMD_SET_BLOCKLEN, mmc_blkdev.blksz, resp, R1 | NCR);
+- if (ret) goto fail;
++ if (ret) goto out;
+
+ pr_debug("MCI_DTOR = %08lx\n", mmci_readl(DTOR));
+
+@@ -211,7 +211,7 @@ mmc_bread(int dev, unsigned long start, lbaint_t blkcnt,
+ start * mmc_blkdev.blksz, resp,
+ (R1 | NCR | TRCMD_START | TRDIR_READ
+ | TRTYP_BLOCK));
+- if (ret) goto fail;
++ if (ret) goto out;
+
+ ret = -EIO;
+ wordcount = 0;
+@@ -219,7 +219,7 @@ mmc_bread(int dev, unsigned long start, lbaint_t blkcnt,
+ do {
+ status = mmci_readl(SR);
+ if (status & (ERROR_FLAGS | MMCI_BIT(OVRE)))
+- goto fail;
++ goto read_error;
+ } while (!(status & MMCI_BIT(RXRDY)));
+
+ if (status & MMCI_BIT(RXRDY)) {
+@@ -244,9 +244,10 @@ out:
+ mmc_cmd(MMC_CMD_SELECT_CARD, 0, resp, NCR);
+ return i;
+
+-fail:
++read_error:
+ mmc_cmd(MMC_CMD_SEND_STATUS, mmc_rca << 16, &card_status, R1 | NCR);
+- printf("mmc: bread failed, card status = %08x\n", card_status);
++ printf("mmc: bread failed, status = %08x, card status = %08x\n",
++ status, card_status);
+ goto out;
+ }
+
+diff --git a/include/asm-avr32/arch-at32ap7000/clk.h b/include/asm-avr32/arch-at32ap7000/clk.h
+deleted file mode 100644
+index 7e20d97..0000000
+--- a/include/asm-avr32/arch-at32ap7000/clk.h
++++ /dev/null
+@@ -1,70 +0,0 @@
+-/*
+- * Copyright (C) 2006 Atmel Corporation
+- *
+- * 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 __ASM_AVR32_ARCH_CLK_H__
+-#define __ASM_AVR32_ARCH_CLK_H__
+-
+-#ifdef CONFIG_PLL
+-#define MAIN_CLK_RATE ((CFG_OSC0_HZ / CFG_PLL0_DIV) * CFG_PLL0_MUL)
+-#else
+-#define MAIN_CLK_RATE (CFG_OSC0_HZ)
+-#endif
+-
+-static inline unsigned long get_cpu_clk_rate(void)
+-{
+- return MAIN_CLK_RATE >> CFG_CLKDIV_CPU;
+-}
+-static inline unsigned long get_hsb_clk_rate(void)
+-{
+- return MAIN_CLK_RATE >> CFG_CLKDIV_HSB;
+-}
+-static inline unsigned long get_pba_clk_rate(void)
+-{
+- return MAIN_CLK_RATE >> CFG_CLKDIV_PBA;
+-}
+-static inline unsigned long get_pbb_clk_rate(void)
+-{
+- return MAIN_CLK_RATE >> CFG_CLKDIV_PBB;
+-}
+-
+-/* Accessors for specific devices. More will be added as needed. */
+-static inline unsigned long get_sdram_clk_rate(void)
+-{
+- return get_hsb_clk_rate();
+-}
+-static inline unsigned long get_usart_clk_rate(unsigned int dev_id)
+-{
+- return get_pba_clk_rate();
+-}
+-static inline unsigned long get_macb_pclk_rate(unsigned int dev_id)
+-{
+- return get_pbb_clk_rate();
+-}
+-static inline unsigned long get_macb_hclk_rate(unsigned int dev_id)
+-{
+- return get_hsb_clk_rate();
+-}
+-static inline unsigned long get_mci_clk_rate(void)
+-{
+- return get_pbb_clk_rate();
+-}
+-
+-#endif /* __ASM_AVR32_ARCH_CLK_H__ */
+diff --git a/include/asm-avr32/arch-at32ap7000/gpio.h b/include/asm-avr32/arch-at32ap7000/gpio.h
+deleted file mode 100644
+index e4812d4..0000000
+--- a/include/asm-avr32/arch-at32ap7000/gpio.h
++++ /dev/null
+@@ -1,212 +0,0 @@
+-/*
+- * Copyright (C) 2006 Atmel Corporation
+- *
+- * 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 __ASM_AVR32_ARCH_GPIO_H__
+-#define __ASM_AVR32_ARCH_GPIO_H__
+-
+-#include <asm/arch/memory-map.h>
+-
+-#define NR_GPIO_CONTROLLERS 5
+-
+-/*
+- * Pin numbers identifying specific GPIO pins on the chip.
+- */
+-#define GPIO_PIOA_BASE (0)
+-#define GPIO_PIN_PA0 (GPIO_PIOA_BASE + 0)
+-#define GPIO_PIN_PA1 (GPIO_PIOA_BASE + 1)
+-#define GPIO_PIN_PA2 (GPIO_PIOA_BASE + 2)
+-#define GPIO_PIN_PA3 (GPIO_PIOA_BASE + 3)
+-#define GPIO_PIN_PA4 (GPIO_PIOA_BASE + 4)
+-#define GPIO_PIN_PA5 (GPIO_PIOA_BASE + 5)
+-#define GPIO_PIN_PA6 (GPIO_PIOA_BASE + 6)
+-#define GPIO_PIN_PA7 (GPIO_PIOA_BASE + 7)
+-#define GPIO_PIN_PA8 (GPIO_PIOA_BASE + 8)
+-#define GPIO_PIN_PA9 (GPIO_PIOA_BASE + 9)
+-#define GPIO_PIN_PA10 (GPIO_PIOA_BASE + 10)
+-#define GPIO_PIN_PA11 (GPIO_PIOA_BASE + 11)
+-#define GPIO_PIN_PA12 (GPIO_PIOA_BASE + 12)
+-#define GPIO_PIN_PA13 (GPIO_PIOA_BASE + 13)
+-#define GPIO_PIN_PA14 (GPIO_PIOA_BASE + 14)
+-#define GPIO_PIN_PA15 (GPIO_PIOA_BASE + 15)
+-#define GPIO_PIN_PA16 (GPIO_PIOA_BASE + 16)
+-#define GPIO_PIN_PA17 (GPIO_PIOA_BASE + 17)
+-#define GPIO_PIN_PA18 (GPIO_PIOA_BASE + 18)
+-#define GPIO_PIN_PA19 (GPIO_PIOA_BASE + 19)
+-#define GPIO_PIN_PA20 (GPIO_PIOA_BASE + 20)
+-#define GPIO_PIN_PA21 (GPIO_PIOA_BASE + 21)
+-#define GPIO_PIN_PA22 (GPIO_PIOA_BASE + 22)
+-#define GPIO_PIN_PA23 (GPIO_PIOA_BASE + 23)
+-#define GPIO_PIN_PA24 (GPIO_PIOA_BASE + 24)
+-#define GPIO_PIN_PA25 (GPIO_PIOA_BASE + 25)
+-#define GPIO_PIN_PA26 (GPIO_PIOA_BASE + 26)
+-#define GPIO_PIN_PA27 (GPIO_PIOA_BASE + 27)
+-#define GPIO_PIN_PA28 (GPIO_PIOA_BASE + 28)
+-#define GPIO_PIN_PA29 (GPIO_PIOA_BASE + 29)
+-#define GPIO_PIN_PA30 (GPIO_PIOA_BASE + 30)
+-#define GPIO_PIN_PA31 (GPIO_PIOA_BASE + 31)
+-
+-#define GPIO_PIOB_BASE (GPIO_PIOA_BASE + 32)
+-#define GPIO_PIN_PB0 (GPIO_PIOB_BASE + 0)
+-#define GPIO_PIN_PB1 (GPIO_PIOB_BASE + 1)
+-#define GPIO_PIN_PB2 (GPIO_PIOB_BASE + 2)
+-#define GPIO_PIN_PB3 (GPIO_PIOB_BASE + 3)
+-#define GPIO_PIN_PB4 (GPIO_PIOB_BASE + 4)
+-#define GPIO_PIN_PB5 (GPIO_PIOB_BASE + 5)
+-#define GPIO_PIN_PB6 (GPIO_PIOB_BASE + 6)
+-#define GPIO_PIN_PB7 (GPIO_PIOB_BASE + 7)
+-#define GPIO_PIN_PB8 (GPIO_PIOB_BASE + 8)
+-#define GPIO_PIN_PB9 (GPIO_PIOB_BASE + 9)
+-#define GPIO_PIN_PB10 (GPIO_PIOB_BASE + 10)
+-#define GPIO_PIN_PB11 (GPIO_PIOB_BASE + 11)
+-#define GPIO_PIN_PB12 (GPIO_PIOB_BASE + 12)
+-#define GPIO_PIN_PB13 (GPIO_PIOB_BASE + 13)
+-#define GPIO_PIN_PB14 (GPIO_PIOB_BASE + 14)
+-#define GPIO_PIN_PB15 (GPIO_PIOB_BASE + 15)
+-#define GPIO_PIN_PB16 (GPIO_PIOB_BASE + 16)
+-#define GPIO_PIN_PB17 (GPIO_PIOB_BASE + 17)
+-#define GPIO_PIN_PB18 (GPIO_PIOB_BASE + 18)
+-#define GPIO_PIN_PB19 (GPIO_PIOB_BASE + 19)
+-#define GPIO_PIN_PB20 (GPIO_PIOB_BASE + 20)
+-#define GPIO_PIN_PB21 (GPIO_PIOB_BASE + 21)
+-#define GPIO_PIN_PB22 (GPIO_PIOB_BASE + 22)
+-#define GPIO_PIN_PB23 (GPIO_PIOB_BASE + 23)
+-#define GPIO_PIN_PB24 (GPIO_PIOB_BASE + 24)
+-#define GPIO_PIN_PB25 (GPIO_PIOB_BASE + 25)
+-#define GPIO_PIN_PB26 (GPIO_PIOB_BASE + 26)
+-#define GPIO_PIN_PB27 (GPIO_PIOB_BASE + 27)
+-#define GPIO_PIN_PB28 (GPIO_PIOB_BASE + 28)
+-#define GPIO_PIN_PB29 (GPIO_PIOB_BASE + 29)
+-#define GPIO_PIN_PB30 (GPIO_PIOB_BASE + 30)
+-
+-#define GPIO_PIOC_BASE (GPIO_PIOB_BASE + 32)
+-#define GPIO_PIN_PC0 (GPIO_PIOC_BASE + 0)
+-#define GPIO_PIN_PC1 (GPIO_PIOC_BASE + 1)
+-#define GPIO_PIN_PC2 (GPIO_PIOC_BASE + 2)
+-#define GPIO_PIN_PC3 (GPIO_PIOC_BASE + 3)
+-#define GPIO_PIN_PC4 (GPIO_PIOC_BASE + 4)
+-#define GPIO_PIN_PC5 (GPIO_PIOC_BASE + 5)
+-#define GPIO_PIN_PC6 (GPIO_PIOC_BASE + 6)
+-#define GPIO_PIN_PC7 (GPIO_PIOC_BASE + 7)
+-#define GPIO_PIN_PC8 (GPIO_PIOC_BASE + 8)
+-#define GPIO_PIN_PC9 (GPIO_PIOC_BASE + 9)
+-#define GPIO_PIN_PC10 (GPIO_PIOC_BASE + 10)
+-#define GPIO_PIN_PC11 (GPIO_PIOC_BASE + 11)
+-#define GPIO_PIN_PC12 (GPIO_PIOC_BASE + 12)
+-#define GPIO_PIN_PC13 (GPIO_PIOC_BASE + 13)
+-#define GPIO_PIN_PC14 (GPIO_PIOC_BASE + 14)
+-#define GPIO_PIN_PC15 (GPIO_PIOC_BASE + 15)
+-#define GPIO_PIN_PC16 (GPIO_PIOC_BASE + 16)
+-#define GPIO_PIN_PC17 (GPIO_PIOC_BASE + 17)
+-#define GPIO_PIN_PC18 (GPIO_PIOC_BASE + 18)
+-#define GPIO_PIN_PC19 (GPIO_PIOC_BASE + 19)
+-#define GPIO_PIN_PC20 (GPIO_PIOC_BASE + 20)
+-#define GPIO_PIN_PC21 (GPIO_PIOC_BASE + 21)
+-#define GPIO_PIN_PC22 (GPIO_PIOC_BASE + 22)
+-#define GPIO_PIN_PC23 (GPIO_PIOC_BASE + 23)
+-#define GPIO_PIN_PC24 (GPIO_PIOC_BASE + 24)
+-#define GPIO_PIN_PC25 (GPIO_PIOC_BASE + 25)
+-#define GPIO_PIN_PC26 (GPIO_PIOC_BASE + 26)
+-#define GPIO_PIN_PC27 (GPIO_PIOC_BASE + 27)
+-#define GPIO_PIN_PC28 (GPIO_PIOC_BASE + 28)
+-#define GPIO_PIN_PC29 (GPIO_PIOC_BASE + 29)
+-#define GPIO_PIN_PC30 (GPIO_PIOC_BASE + 30)
+-#define GPIO_PIN_PC31 (GPIO_PIOC_BASE + 31)
+-
+-#define GPIO_PIOD_BASE (GPIO_PIOC_BASE + 32)
+-#define GPIO_PIN_PD0 (GPIO_PIOD_BASE + 0)
+-#define GPIO_PIN_PD1 (GPIO_PIOD_BASE + 1)
+-#define GPIO_PIN_PD2 (GPIO_PIOD_BASE + 2)
+-#define GPIO_PIN_PD3 (GPIO_PIOD_BASE + 3)
+-#define GPIO_PIN_PD4 (GPIO_PIOD_BASE + 4)
+-#define GPIO_PIN_PD5 (GPIO_PIOD_BASE + 5)
+-#define GPIO_PIN_PD6 (GPIO_PIOD_BASE + 6)
+-#define GPIO_PIN_PD7 (GPIO_PIOD_BASE + 7)
+-#define GPIO_PIN_PD8 (GPIO_PIOD_BASE + 8)
+-#define GPIO_PIN_PD9 (GPIO_PIOD_BASE + 9)
+-#define GPIO_PIN_PD10 (GPIO_PIOD_BASE + 10)
+-#define GPIO_PIN_PD11 (GPIO_PIOD_BASE + 11)
+-#define GPIO_PIN_PD12 (GPIO_PIOD_BASE + 12)
+-#define GPIO_PIN_PD13 (GPIO_PIOD_BASE + 13)
+-#define GPIO_PIN_PD14 (GPIO_PIOD_BASE + 14)
+-#define GPIO_PIN_PD15 (GPIO_PIOD_BASE + 15)
+-#define GPIO_PIN_PD16 (GPIO_PIOD_BASE + 16)
+-#define GPIO_PIN_PD17 (GPIO_PIOD_BASE + 17)
+-
+-#define GPIO_PIOE_BASE (GPIO_PIOD_BASE + 32)
+-#define GPIO_PIN_PE0 (GPIO_PIOE_BASE + 0)
+-#define GPIO_PIN_PE1 (GPIO_PIOE_BASE + 1)
+-#define GPIO_PIN_PE2 (GPIO_PIOE_BASE + 2)
+-#define GPIO_PIN_PE3 (GPIO_PIOE_BASE + 3)
+-#define GPIO_PIN_PE4 (GPIO_PIOE_BASE + 4)
+-#define GPIO_PIN_PE5 (GPIO_PIOE_BASE + 5)
+-#define GPIO_PIN_PE6 (GPIO_PIOE_BASE + 6)
+-#define GPIO_PIN_PE7 (GPIO_PIOE_BASE + 7)
+-#define GPIO_PIN_PE8 (GPIO_PIOE_BASE + 8)
+-#define GPIO_PIN_PE9 (GPIO_PIOE_BASE + 9)
+-#define GPIO_PIN_PE10 (GPIO_PIOE_BASE + 10)
+-#define GPIO_PIN_PE11 (GPIO_PIOE_BASE + 11)
+-#define GPIO_PIN_PE12 (GPIO_PIOE_BASE + 12)
+-#define GPIO_PIN_PE13 (GPIO_PIOE_BASE + 13)
+-#define GPIO_PIN_PE14 (GPIO_PIOE_BASE + 14)
+-#define GPIO_PIN_PE15 (GPIO_PIOE_BASE + 15)
+-#define GPIO_PIN_PE16 (GPIO_PIOE_BASE + 16)
+-#define GPIO_PIN_PE17 (GPIO_PIOE_BASE + 17)
+-#define GPIO_PIN_PE18 (GPIO_PIOE_BASE + 18)
+-#define GPIO_PIN_PE19 (GPIO_PIOE_BASE + 19)
+-#define GPIO_PIN_PE20 (GPIO_PIOE_BASE + 20)
+-#define GPIO_PIN_PE21 (GPIO_PIOE_BASE + 21)
+-#define GPIO_PIN_PE22 (GPIO_PIOE_BASE + 22)
+-#define GPIO_PIN_PE23 (GPIO_PIOE_BASE + 23)
+-#define GPIO_PIN_PE24 (GPIO_PIOE_BASE + 24)
+-#define GPIO_PIN_PE25 (GPIO_PIOE_BASE + 25)
+-#define GPIO_PIN_PE26 (GPIO_PIOE_BASE + 26)
+-
+-static inline void *gpio_pin_to_addr(unsigned int pin)
+-{
+- switch (pin >> 5) {
+- case 0:
+- return (void *)PIOA_BASE;
+- case 1:
+- return (void *)PIOB_BASE;
+- case 2:
+- return (void *)PIOC_BASE;
+- case 3:
+- return (void *)PIOD_BASE;
+- case 4:
+- return (void *)PIOE_BASE;
+- default:
+- return NULL;
+- }
+-}
+-
+-void gpio_select_periph_A(unsigned int pin, int use_pullup);
+-void gpio_select_periph_B(unsigned int pin, int use_pullup);
+-
+-void gpio_enable_ebi(void);
+-void gpio_enable_usart0(void);
+-void gpio_enable_usart1(void);
+-void gpio_enable_usart2(void);
+-void gpio_enable_usart3(void);
+-void gpio_enable_macb0(void);
+-void gpio_enable_macb1(void);
+-void gpio_enable_mmci(void);
+-
+-#endif /* __ASM_AVR32_ARCH_GPIO_H__ */
+diff --git a/include/asm-avr32/arch-at32ap7000/hmatrix2.h b/include/asm-avr32/arch-at32ap7000/hmatrix2.h
+deleted file mode 100644
+index b0e787a..0000000
+--- a/include/asm-avr32/arch-at32ap7000/hmatrix2.h
++++ /dev/null
+@@ -1,232 +0,0 @@
+-/*
+- * Register definition for the High-speed Bus Matrix
+- */
+-#ifndef __ASM_AVR32_HMATRIX2_H__
+-#define __ASM_AVR32_HMATRIX2_H__
+-
+-/* HMATRIX2 register offsets */
+-#define HMATRIX2_MCFG0 0x0000
+-#define HMATRIX2_MCFG1 0x0004
+-#define HMATRIX2_MCFG2 0x0008
+-#define HMATRIX2_MCFG3 0x000c
+-#define HMATRIX2_MCFG4 0x0010
+-#define HMATRIX2_MCFG5 0x0014
+-#define HMATRIX2_MCFG6 0x0018
+-#define HMATRIX2_MCFG7 0x001c
+-#define HMATRIX2_MCFG8 0x0020
+-#define HMATRIX2_MCFG9 0x0024
+-#define HMATRIX2_MCFG10 0x0028
+-#define HMATRIX2_MCFG11 0x002c
+-#define HMATRIX2_MCFG12 0x0030
+-#define HMATRIX2_MCFG13 0x0034
+-#define HMATRIX2_MCFG14 0x0038
+-#define HMATRIX2_MCFG15 0x003c
+-#define HMATRIX2_SCFG0 0x0040
+-#define HMATRIX2_SCFG1 0x0044
+-#define HMATRIX2_SCFG2 0x0048
+-#define HMATRIX2_SCFG3 0x004c
+-#define HMATRIX2_SCFG4 0x0050
+-#define HMATRIX2_SCFG5 0x0054
+-#define HMATRIX2_SCFG6 0x0058
+-#define HMATRIX2_SCFG7 0x005c
+-#define HMATRIX2_SCFG8 0x0060
+-#define HMATRIX2_SCFG9 0x0064
+-#define HMATRIX2_SCFG10 0x0068
+-#define HMATRIX2_SCFG11 0x006c
+-#define HMATRIX2_SCFG12 0x0070
+-#define HMATRIX2_SCFG13 0x0074
+-#define HMATRIX2_SCFG14 0x0078
+-#define HMATRIX2_SCFG15 0x007c
+-#define HMATRIX2_PRAS0 0x0080
+-#define HMATRIX2_PRBS0 0x0084
+-#define HMATRIX2_PRAS1 0x0088
+-#define HMATRIX2_PRBS1 0x008c
+-#define HMATRIX2_PRAS2 0x0090
+-#define HMATRIX2_PRBS2 0x0094
+-#define HMATRIX2_PRAS3 0x0098
+-#define HMATRIX2_PRBS3 0x009c
+-#define HMATRIX2_PRAS4 0x00a0
+-#define HMATRIX2_PRBS4 0x00a4
+-#define HMATRIX2_PRAS5 0x00a8
+-#define HMATRIX2_PRBS5 0x00ac
+-#define HMATRIX2_PRAS6 0x00b0
+-#define HMATRIX2_PRBS6 0x00b4
+-#define HMATRIX2_PRAS7 0x00b8
+-#define HMATRIX2_PRBS7 0x00bc
+-#define HMATRIX2_PRAS8 0x00c0
+-#define HMATRIX2_PRBS8 0x00c4
+-#define HMATRIX2_PRAS9 0x00c8
+-#define HMATRIX2_PRBS9 0x00cc
+-#define HMATRIX2_PRAS10 0x00d0
+-#define HMATRIX2_PRBS10 0x00d4
+-#define HMATRIX2_PRAS11 0x00d8
+-#define HMATRIX2_PRBS11 0x00dc
+-#define HMATRIX2_PRAS12 0x00e0
+-#define HMATRIX2_PRBS12 0x00e4
+-#define HMATRIX2_PRAS13 0x00e8
+-#define HMATRIX2_PRBS13 0x00ec
+-#define HMATRIX2_PRAS14 0x00f0
+-#define HMATRIX2_PRBS14 0x00f4
+-#define HMATRIX2_PRAS15 0x00f8
+-#define HMATRIX2_PRBS15 0x00fc
+-#define HMATRIX2_MRCR 0x0100
+-#define HMATRIX2_SFR0 0x0110
+-#define HMATRIX2_SFR1 0x0114
+-#define HMATRIX2_SFR2 0x0118
+-#define HMATRIX2_SFR3 0x011c
+-#define HMATRIX2_SFR4 0x0120
+-#define HMATRIX2_SFR5 0x0124
+-#define HMATRIX2_SFR6 0x0128
+-#define HMATRIX2_SFR7 0x012c
+-#define HMATRIX2_SFR8 0x0130
+-#define HMATRIX2_SFR9 0x0134
+-#define HMATRIX2_SFR10 0x0138
+-#define HMATRIX2_SFR11 0x013c
+-#define HMATRIX2_SFR12 0x0140
+-#define HMATRIX2_SFR13 0x0144
+-#define HMATRIX2_SFR14 0x0148
+-#define HMATRIX2_SFR15 0x014c
+-#define HMATRIX2_VERSION 0x01fc
+-
+-/* Bitfields in MCFG0 */
+-#define HMATRIX2_ULBT_OFFSET 0
+-#define HMATRIX2_ULBT_SIZE 3
+-
+-/* Bitfields in SCFG0 */
+-#define HMATRIX2_SLOT_CYCLE_OFFSET 0
+-#define HMATRIX2_SLOT_CYCLE_SIZE 8
+-#define HMATRIX2_DEFMSTR_TYPE_OFFSET 16
+-#define HMATRIX2_DEFMSTR_TYPE_SIZE 2
+-#define HMATRIX2_FIXED_DEFMSTR_OFFSET 18
+-#define HMATRIX2_FIXED_DEFMSTR_SIZE 4
+-#define HMATRIX2_ARBT_OFFSET 24
+-#define HMATRIX2_ARBT_SIZE 2
+-
+-/* Bitfields in PRAS0 */
+-#define HMATRIX2_M0PR_OFFSET 0
+-#define HMATRIX2_M0PR_SIZE 4
+-#define HMATRIX2_M1PR_OFFSET 4
+-#define HMATRIX2_M1PR_SIZE 4
+-#define HMATRIX2_M2PR_OFFSET 8
+-#define HMATRIX2_M2PR_SIZE 4
+-#define HMATRIX2_M3PR_OFFSET 12
+-#define HMATRIX2_M3PR_SIZE 4
+-#define HMATRIX2_M4PR_OFFSET 16
+-#define HMATRIX2_M4PR_SIZE 4
+-#define HMATRIX2_M5PR_OFFSET 20
+-#define HMATRIX2_M5PR_SIZE 4
+-#define HMATRIX2_M6PR_OFFSET 24
+-#define HMATRIX2_M6PR_SIZE 4
+-#define HMATRIX2_M7PR_OFFSET 28
+-#define HMATRIX2_M7PR_SIZE 4
+-
+-/* Bitfields in PRBS0 */
+-#define HMATRIX2_M8PR_OFFSET 0
+-#define HMATRIX2_M8PR_SIZE 4
+-#define HMATRIX2_M9PR_OFFSET 4
+-#define HMATRIX2_M9PR_SIZE 4
+-#define HMATRIX2_M10PR_OFFSET 8
+-#define HMATRIX2_M10PR_SIZE 4
+-#define HMATRIX2_M11PR_OFFSET 12
+-#define HMATRIX2_M11PR_SIZE 4
+-#define HMATRIX2_M12PR_OFFSET 16
+-#define HMATRIX2_M12PR_SIZE 4
+-#define HMATRIX2_M13PR_OFFSET 20
+-#define HMATRIX2_M13PR_SIZE 4
+-#define HMATRIX2_M14PR_OFFSET 24
+-#define HMATRIX2_M14PR_SIZE 4
+-#define HMATRIX2_M15PR_OFFSET 28
+-#define HMATRIX2_M15PR_SIZE 4
+-
+-/* Bitfields in MRCR */
+-#define HMATRIX2_RBC0_OFFSET 0
+-#define HMATRIX2_RBC0_SIZE 1
+-#define HMATRIX2_RBC1_OFFSET 1
+-#define HMATRIX2_RBC1_SIZE 1
+-#define HMATRIX2_RBC2_OFFSET 2
+-#define HMATRIX2_RBC2_SIZE 1
+-#define HMATRIX2_RBC3_OFFSET 3
+-#define HMATRIX2_RBC3_SIZE 1
+-#define HMATRIX2_RBC4_OFFSET 4
+-#define HMATRIX2_RBC4_SIZE 1
+-#define HMATRIX2_RBC5_OFFSET 5
+-#define HMATRIX2_RBC5_SIZE 1
+-#define HMATRIX2_RBC6_OFFSET 6
+-#define HMATRIX2_RBC6_SIZE 1
+-#define HMATRIX2_RBC7_OFFSET 7
+-#define HMATRIX2_RBC7_SIZE 1
+-#define HMATRIX2_RBC8_OFFSET 8
+-#define HMATRIX2_RBC8_SIZE 1
+-#define HMATRIX2_RBC9_OFFSET 9
+-#define HMATRIX2_RBC9_SIZE 1
+-#define HMATRIX2_RBC10_OFFSET 10
+-#define HMATRIX2_RBC10_SIZE 1
+-#define HMATRIX2_RBC11_OFFSET 11
+-#define HMATRIX2_RBC11_SIZE 1
+-#define HMATRIX2_RBC12_OFFSET 12
+-#define HMATRIX2_RBC12_SIZE 1
+-#define HMATRIX2_RBC13_OFFSET 13
+-#define HMATRIX2_RBC13_SIZE 1
+-#define HMATRIX2_RBC14_OFFSET 14
+-#define HMATRIX2_RBC14_SIZE 1
+-#define HMATRIX2_RBC15_OFFSET 15
+-#define HMATRIX2_RBC15_SIZE 1
+-
+-/* Bitfields in SFR0 */
+-#define HMATRIX2_SFR_OFFSET 0
+-#define HMATRIX2_SFR_SIZE 32
+-
+-/* Bitfields in SFR4 */
+-#define HMATRIX2_CS1A_OFFSET 1
+-#define HMATRIX2_CS1A_SIZE 1
+-#define HMATRIX2_CS3A_OFFSET 3
+-#define HMATRIX2_CS3A_SIZE 1
+-#define HMATRIX2_CS4A_OFFSET 4
+-#define HMATRIX2_CS4A_SIZE 1
+-#define HMATRIX2_CS5A_OFFSET 5
+-#define HMATRIX2_CS5A_SIZE 1
+-#define HMATRIX2_DBPUC_OFFSET 8
+-#define HMATRIX2_DBPUC_SIZE 1
+-
+-/* Bitfields in VERSION */
+-#define HMATRIX2_VERSION_OFFSET 0
+-#define HMATRIX2_VERSION_SIZE 12
+-#define HMATRIX2_MFN_OFFSET 16
+-#define HMATRIX2_MFN_SIZE 3
+-
+-/* Constants for ULBT */
+-#define HMATRIX2_ULBT_INFINITE 0
+-#define HMATRIX2_ULBT_SINGLE 1
+-#define HMATRIX2_ULBT_FOUR_BEAT 2
+-#define HMATRIX2_ULBT_SIXTEEN_BEAT 4
+-
+-/* Constants for DEFMSTR_TYPE */
+-#define HMATRIX2_DEFMSTR_TYPE_NO_DEFAULT 0
+-#define HMATRIX2_DEFMSTR_TYPE_LAST_DEFAULT 1
+-#define HMATRIX2_DEFMSTR_TYPE_FIXED_DEFAULT 2
+-
+-/* Constants for ARBT */
+-#define HMATRIX2_ARBT_ROUND_ROBIN 0
+-#define HMATRIX2_ARBT_FIXED_PRIORITY 1
+-
+-/* Bit manipulation macros */
+-#define HMATRIX2_BIT(name) \
+- (1 << HMATRIX2_##name##_OFFSET)
+-#define HMATRIX2_BF(name,value) \
+- (((value) & ((1 << HMATRIX2_##name##_SIZE) - 1)) \
+- << HMATRIX2_##name##_OFFSET)
+-#define HMATRIX2_BFEXT(name,value) \
+- (((value) >> HMATRIX2_##name##_OFFSET) \
+- & ((1 << HMATRIX2_##name##_SIZE) - 1))
+-#define HMATRIX2_BFINS(name,value,old) \
+- (((old) & ~(((1 << HMATRIX2_##name##_SIZE) - 1) \
+- << HMATRIX2_##name##_OFFSET)) \
+- | HMATRIX2_BF(name,value))
+-
+-/* Register access macros */
+-#define hmatrix2_readl(reg) \
+- readl((void *)HMATRIX_BASE + HMATRIX2_##reg)
+-#define hmatrix2_writel(reg,value) \
+- writel((value), (void *)HMATRIX_BASE + HMATRIX2_##reg)
+-
+-#endif /* __ASM_AVR32_HMATRIX2_H__ */
+diff --git a/include/asm-avr32/arch-at32ap7000/memory-map.h b/include/asm-avr32/arch-at32ap7000/memory-map.h
+deleted file mode 100644
+index 5513e88..0000000
+--- a/include/asm-avr32/arch-at32ap7000/memory-map.h
++++ /dev/null
+@@ -1,66 +0,0 @@
+-/*
+- * Copyright (C) 2005-2006 Atmel Corporation
+- *
+- * 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 __AT32AP7000_MEMORY_MAP_H__
+-#define __AT32AP7000_MEMORY_MAP_H__
+-
+-/* Devices on the High Speed Bus (HSB) */
+-#define LCDC_BASE 0xFF000000
+-#define DMAC_BASE 0xFF200000
+-#define USB_FIFO 0xFF300000
+-
+-/* Devices on Peripheral Bus A (PBA) */
+-#define SPI0_BASE 0xFFE00000
+-#define SPI1_BASE 0xFFE00400
+-#define TWI_BASE 0xFFE00800
+-#define USART0_BASE 0xFFE00C00
+-#define USART1_BASE 0xFFE01000
+-#define USART2_BASE 0xFFE01400
+-#define USART3_BASE 0xFFE01800
+-#define SSC0_BASE 0xFFE01C00
+-#define SSC1_BASE 0xFFE02000
+-#define SSC2_BASE 0xFFE02400
+-#define PIOA_BASE 0xFFE02800
+-#define PIOB_BASE 0xFFE02C00
+-#define PIOC_BASE 0xFFE03000
+-#define PIOD_BASE 0xFFE03400
+-#define PIOE_BASE 0xFFE03800
+-#define PSIF_BASE 0xFFE03C00
+-
+-/* Devices on Peripheral Bus B (PBB) */
+-#define SM_BASE 0xFFF00000
+-#define INTC_BASE 0xFFF00400
+-#define HMATRIX_BASE 0xFFF00800
+-#define TIMER0_BASE 0xFFF00C00
+-#define TIMER1_BASE 0xFFF01000
+-#define PWM_BASE 0xFFF01400
+-#define MACB0_BASE 0xFFF01800
+-#define MACB1_BASE 0xFFF01C00
+-#define DAC_BASE 0xFFF02000
+-#define MMCI_BASE 0xFFF02400
+-#define AUDIOC_BASE 0xFFF02800
+-#define HISI_BASE 0xFFF02C00
+-#define USB_BASE 0xFFF03000
+-#define HSMC_BASE 0xFFF03400
+-#define HSDRAMC_BASE 0xFFF03800
+-#define ECC_BASE 0xFFF03C00
+-
+-#endif /* __AT32AP7000_MEMORY_MAP_H__ */
+diff --git a/include/asm-avr32/arch-at32ap7000/mmc.h b/include/asm-avr32/arch-at32ap7000/mmc.h
+deleted file mode 100644
+index fcfbbb3..0000000
+--- a/include/asm-avr32/arch-at32ap7000/mmc.h
++++ /dev/null
+@@ -1,96 +0,0 @@
+-/*
+- * Copyright (C) 2004-2006 Atmel Corporation
+- *
+- * 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 __ASM_AVR32_MMC_H
+-#define __ASM_AVR32_MMC_H
+-
+-struct mmc_cid {
+- unsigned long psn;
+- unsigned short oid;
+- unsigned char mid;
+- unsigned char prv;
+- unsigned char mdt;
+- char pnm[7];
+-};
+-
+-struct mmc_csd
+-{
+- u8 csd_structure:2,
+- spec_vers:4,
+- rsvd1:2;
+- u8 taac;
+- u8 nsac;
+- u8 tran_speed;
+- u16 ccc:12,
+- read_bl_len:4;
+- u64 read_bl_partial:1,
+- write_blk_misalign:1,
+- read_blk_misalign:1,
+- dsr_imp:1,
+- rsvd2:2,
+- c_size:12,
+- vdd_r_curr_min:3,
+- vdd_r_curr_max:3,
+- vdd_w_curr_min:3,
+- vdd_w_curr_max:3,
+- c_size_mult:3,
+- sector_size:5,
+- erase_grp_size:5,
+- wp_grp_size:5,
+- wp_grp_enable:1,
+- default_ecc:2,
+- r2w_factor:3,
+- write_bl_len:4,
+- write_bl_partial:1,
+- rsvd3:5;
+- u8 file_format_grp:1,
+- copy:1,
+- perm_write_protect:1,
+- tmp_write_protect:1,
+- file_format:2,
+- ecc:2;
+- u8 crc:7;
+- u8 one:1;
+-};
+-
+-/* MMC Command numbers */
+-#define MMC_CMD_GO_IDLE_STATE 0
+-#define MMC_CMD_SEND_OP_COND 1
+-#define MMC_CMD_ALL_SEND_CID 2
+-#define MMC_CMD_SET_RELATIVE_ADDR 3
+-#define MMC_CMD_SD_SEND_RELATIVE_ADDR 3
+-#define MMC_CMD_SET_DSR 4
+-#define MMC_CMD_SELECT_CARD 7
+-#define MMC_CMD_SEND_CSD 9
+-#define MMC_CMD_SEND_CID 10
+-#define MMC_CMD_SEND_STATUS 13
+-#define MMC_CMD_SET_BLOCKLEN 16
+-#define MMC_CMD_READ_SINGLE_BLOCK 17
+-#define MMC_CMD_READ_MULTIPLE_BLOCK 18
+-#define MMC_CMD_WRITE_BLOCK 24
+-#define MMC_CMD_APP_CMD 55
+-
+-#define MMC_ACMD_SD_SEND_OP_COND 41
+-
+-#define R1_ILLEGAL_COMMAND (1 << 22)
+-#define R1_APP_CMD (1 << 5)
+-
+-#endif /* __ASM_AVR32_MMC_H */
+diff --git a/include/asm-avr32/arch-at32ap700x/chip-features.h b/include/asm-avr32/arch-at32ap700x/chip-features.h
+new file mode 100644
+index 0000000..29b1fd6
+--- /dev/null
++++ b/include/asm-avr32/arch-at32ap700x/chip-features.h
+@@ -0,0 +1,34 @@
++/*
++ * Copyright (C) 2007 Atmel Corporation
++ *
++ * 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 __ASM_AVR32_ARCH_CHIP_FEATURES_H__
++#define __ASM_AVR32_ARCH_CHIP_FEATURES_H__
++
++/* Currently, all the AP700x chips have these */
++#define AT32AP700x_CHIP_HAS_USART
++#define AT32AP700x_CHIP_HAS_MMCI
++
++/* Only AP7000 has ethernet interface */
++#ifdef CONFIG_AT32AP7000
++#define AT32AP700x_CHIP_HAS_MACB
++#endif
++
++#endif /* __ASM_AVR32_ARCH_CHIP_FEATURES_H__ */
+diff --git a/include/asm-avr32/arch-at32ap700x/clk.h b/include/asm-avr32/arch-at32ap700x/clk.h
+new file mode 100644
+index 0000000..ea84c08
+--- /dev/null
++++ b/include/asm-avr32/arch-at32ap700x/clk.h
+@@ -0,0 +1,78 @@
++/*
++ * Copyright (C) 2006 Atmel Corporation
++ *
++ * 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 __ASM_AVR32_ARCH_CLK_H__
++#define __ASM_AVR32_ARCH_CLK_H__
++
++#include <asm/arch/chip-features.h>
++
++#ifdef CONFIG_PLL
++#define MAIN_CLK_RATE ((CFG_OSC0_HZ / CFG_PLL0_DIV) * CFG_PLL0_MUL)
++#else
++#define MAIN_CLK_RATE (CFG_OSC0_HZ)
++#endif
++
++static inline unsigned long get_cpu_clk_rate(void)
++{
++ return MAIN_CLK_RATE >> CFG_CLKDIV_CPU;
++}
++static inline unsigned long get_hsb_clk_rate(void)
++{
++ return MAIN_CLK_RATE >> CFG_CLKDIV_HSB;
++}
++static inline unsigned long get_pba_clk_rate(void)
++{
++ return MAIN_CLK_RATE >> CFG_CLKDIV_PBA;
++}
++static inline unsigned long get_pbb_clk_rate(void)
++{
++ return MAIN_CLK_RATE >> CFG_CLKDIV_PBB;
++}
++
++/* Accessors for specific devices. More will be added as needed. */
++static inline unsigned long get_sdram_clk_rate(void)
++{
++ return get_hsb_clk_rate();
++}
++#ifdef AT32AP700x_CHIP_HAS_USART
++static inline unsigned long get_usart_clk_rate(unsigned int dev_id)
++{
++ return get_pba_clk_rate();
++}
++#endif
++#ifdef AT32AP700x_CHIP_HAS_USART
++static inline unsigned long get_macb_pclk_rate(unsigned int dev_id)
++{
++ return get_pbb_clk_rate();
++}
++static inline unsigned long get_macb_hclk_rate(unsigned int dev_id)
++{
++ return get_hsb_clk_rate();
++}
++#endif
++#ifdef AT32AP700x_CHIP_HAS_MMCI
++static inline unsigned long get_mci_clk_rate(void)
++{
++ return get_pbb_clk_rate();
++}
++#endif
++
++#endif /* __ASM_AVR32_ARCH_CLK_H__ */
+diff --git a/include/asm-avr32/arch-at32ap700x/gpio.h b/include/asm-avr32/arch-at32ap700x/gpio.h
+new file mode 100644
+index 0000000..b10a3e4
+--- /dev/null
++++ b/include/asm-avr32/arch-at32ap700x/gpio.h
+@@ -0,0 +1,220 @@
++/*
++ * Copyright (C) 2006 Atmel Corporation
++ *
++ * 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 __ASM_AVR32_ARCH_GPIO_H__
++#define __ASM_AVR32_ARCH_GPIO_H__
++
++#include <asm/arch/chip-features.h>
++#include <asm/arch/memory-map.h>
++
++#define NR_GPIO_CONTROLLERS 5
++
++/*
++ * Pin numbers identifying specific GPIO pins on the chip.
++ */
++#define GPIO_PIOA_BASE (0)
++#define GPIO_PIN_PA0 (GPIO_PIOA_BASE + 0)
++#define GPIO_PIN_PA1 (GPIO_PIOA_BASE + 1)
++#define GPIO_PIN_PA2 (GPIO_PIOA_BASE + 2)
++#define GPIO_PIN_PA3 (GPIO_PIOA_BASE + 3)
++#define GPIO_PIN_PA4 (GPIO_PIOA_BASE + 4)
++#define GPIO_PIN_PA5 (GPIO_PIOA_BASE + 5)
++#define GPIO_PIN_PA6 (GPIO_PIOA_BASE + 6)
++#define GPIO_PIN_PA7 (GPIO_PIOA_BASE + 7)
++#define GPIO_PIN_PA8 (GPIO_PIOA_BASE + 8)
++#define GPIO_PIN_PA9 (GPIO_PIOA_BASE + 9)
++#define GPIO_PIN_PA10 (GPIO_PIOA_BASE + 10)
++#define GPIO_PIN_PA11 (GPIO_PIOA_BASE + 11)
++#define GPIO_PIN_PA12 (GPIO_PIOA_BASE + 12)
++#define GPIO_PIN_PA13 (GPIO_PIOA_BASE + 13)
++#define GPIO_PIN_PA14 (GPIO_PIOA_BASE + 14)
++#define GPIO_PIN_PA15 (GPIO_PIOA_BASE + 15)
++#define GPIO_PIN_PA16 (GPIO_PIOA_BASE + 16)
++#define GPIO_PIN_PA17 (GPIO_PIOA_BASE + 17)
++#define GPIO_PIN_PA18 (GPIO_PIOA_BASE + 18)
++#define GPIO_PIN_PA19 (GPIO_PIOA_BASE + 19)
++#define GPIO_PIN_PA20 (GPIO_PIOA_BASE + 20)
++#define GPIO_PIN_PA21 (GPIO_PIOA_BASE + 21)
++#define GPIO_PIN_PA22 (GPIO_PIOA_BASE + 22)
++#define GPIO_PIN_PA23 (GPIO_PIOA_BASE + 23)
++#define GPIO_PIN_PA24 (GPIO_PIOA_BASE + 24)
++#define GPIO_PIN_PA25 (GPIO_PIOA_BASE + 25)
++#define GPIO_PIN_PA26 (GPIO_PIOA_BASE + 26)
++#define GPIO_PIN_PA27 (GPIO_PIOA_BASE + 27)
++#define GPIO_PIN_PA28 (GPIO_PIOA_BASE + 28)
++#define GPIO_PIN_PA29 (GPIO_PIOA_BASE + 29)
++#define GPIO_PIN_PA30 (GPIO_PIOA_BASE + 30)
++#define GPIO_PIN_PA31 (GPIO_PIOA_BASE + 31)
++
++#define GPIO_PIOB_BASE (GPIO_PIOA_BASE + 32)
++#define GPIO_PIN_PB0 (GPIO_PIOB_BASE + 0)
++#define GPIO_PIN_PB1 (GPIO_PIOB_BASE + 1)
++#define GPIO_PIN_PB2 (GPIO_PIOB_BASE + 2)
++#define GPIO_PIN_PB3 (GPIO_PIOB_BASE + 3)
++#define GPIO_PIN_PB4 (GPIO_PIOB_BASE + 4)
++#define GPIO_PIN_PB5 (GPIO_PIOB_BASE + 5)
++#define GPIO_PIN_PB6 (GPIO_PIOB_BASE + 6)
++#define GPIO_PIN_PB7 (GPIO_PIOB_BASE + 7)
++#define GPIO_PIN_PB8 (GPIO_PIOB_BASE + 8)
++#define GPIO_PIN_PB9 (GPIO_PIOB_BASE + 9)
++#define GPIO_PIN_PB10 (GPIO_PIOB_BASE + 10)
++#define GPIO_PIN_PB11 (GPIO_PIOB_BASE + 11)
++#define GPIO_PIN_PB12 (GPIO_PIOB_BASE + 12)
++#define GPIO_PIN_PB13 (GPIO_PIOB_BASE + 13)
++#define GPIO_PIN_PB14 (GPIO_PIOB_BASE + 14)
++#define GPIO_PIN_PB15 (GPIO_PIOB_BASE + 15)
++#define GPIO_PIN_PB16 (GPIO_PIOB_BASE + 16)
++#define GPIO_PIN_PB17 (GPIO_PIOB_BASE + 17)
++#define GPIO_PIN_PB18 (GPIO_PIOB_BASE + 18)
++#define GPIO_PIN_PB19 (GPIO_PIOB_BASE + 19)
++#define GPIO_PIN_PB20 (GPIO_PIOB_BASE + 20)
++#define GPIO_PIN_PB21 (GPIO_PIOB_BASE + 21)
++#define GPIO_PIN_PB22 (GPIO_PIOB_BASE + 22)
++#define GPIO_PIN_PB23 (GPIO_PIOB_BASE + 23)
++#define GPIO_PIN_PB24 (GPIO_PIOB_BASE + 24)
++#define GPIO_PIN_PB25 (GPIO_PIOB_BASE + 25)
++#define GPIO_PIN_PB26 (GPIO_PIOB_BASE + 26)
++#define GPIO_PIN_PB27 (GPIO_PIOB_BASE + 27)
++#define GPIO_PIN_PB28 (GPIO_PIOB_BASE + 28)
++#define GPIO_PIN_PB29 (GPIO_PIOB_BASE + 29)
++#define GPIO_PIN_PB30 (GPIO_PIOB_BASE + 30)
++
++#define GPIO_PIOC_BASE (GPIO_PIOB_BASE + 32)
++#define GPIO_PIN_PC0 (GPIO_PIOC_BASE + 0)
++#define GPIO_PIN_PC1 (GPIO_PIOC_BASE + 1)
++#define GPIO_PIN_PC2 (GPIO_PIOC_BASE + 2)
++#define GPIO_PIN_PC3 (GPIO_PIOC_BASE + 3)
++#define GPIO_PIN_PC4 (GPIO_PIOC_BASE + 4)
++#define GPIO_PIN_PC5 (GPIO_PIOC_BASE + 5)
++#define GPIO_PIN_PC6 (GPIO_PIOC_BASE + 6)
++#define GPIO_PIN_PC7 (GPIO_PIOC_BASE + 7)
++#define GPIO_PIN_PC8 (GPIO_PIOC_BASE + 8)
++#define GPIO_PIN_PC9 (GPIO_PIOC_BASE + 9)
++#define GPIO_PIN_PC10 (GPIO_PIOC_BASE + 10)
++#define GPIO_PIN_PC11 (GPIO_PIOC_BASE + 11)
++#define GPIO_PIN_PC12 (GPIO_PIOC_BASE + 12)
++#define GPIO_PIN_PC13 (GPIO_PIOC_BASE + 13)
++#define GPIO_PIN_PC14 (GPIO_PIOC_BASE + 14)
++#define GPIO_PIN_PC15 (GPIO_PIOC_BASE + 15)
++#define GPIO_PIN_PC16 (GPIO_PIOC_BASE + 16)
++#define GPIO_PIN_PC17 (GPIO_PIOC_BASE + 17)
++#define GPIO_PIN_PC18 (GPIO_PIOC_BASE + 18)
++#define GPIO_PIN_PC19 (GPIO_PIOC_BASE + 19)
++#define GPIO_PIN_PC20 (GPIO_PIOC_BASE + 20)
++#define GPIO_PIN_PC21 (GPIO_PIOC_BASE + 21)
++#define GPIO_PIN_PC22 (GPIO_PIOC_BASE + 22)
++#define GPIO_PIN_PC23 (GPIO_PIOC_BASE + 23)
++#define GPIO_PIN_PC24 (GPIO_PIOC_BASE + 24)
++#define GPIO_PIN_PC25 (GPIO_PIOC_BASE + 25)
++#define GPIO_PIN_PC26 (GPIO_PIOC_BASE + 26)
++#define GPIO_PIN_PC27 (GPIO_PIOC_BASE + 27)
++#define GPIO_PIN_PC28 (GPIO_PIOC_BASE + 28)
++#define GPIO_PIN_PC29 (GPIO_PIOC_BASE + 29)
++#define GPIO_PIN_PC30 (GPIO_PIOC_BASE + 30)
++#define GPIO_PIN_PC31 (GPIO_PIOC_BASE + 31)
++
++#define GPIO_PIOD_BASE (GPIO_PIOC_BASE + 32)
++#define GPIO_PIN_PD0 (GPIO_PIOD_BASE + 0)
++#define GPIO_PIN_PD1 (GPIO_PIOD_BASE + 1)
++#define GPIO_PIN_PD2 (GPIO_PIOD_BASE + 2)
++#define GPIO_PIN_PD3 (GPIO_PIOD_BASE + 3)
++#define GPIO_PIN_PD4 (GPIO_PIOD_BASE + 4)
++#define GPIO_PIN_PD5 (GPIO_PIOD_BASE + 5)
++#define GPIO_PIN_PD6 (GPIO_PIOD_BASE + 6)
++#define GPIO_PIN_PD7 (GPIO_PIOD_BASE + 7)
++#define GPIO_PIN_PD8 (GPIO_PIOD_BASE + 8)
++#define GPIO_PIN_PD9 (GPIO_PIOD_BASE + 9)
++#define GPIO_PIN_PD10 (GPIO_PIOD_BASE + 10)
++#define GPIO_PIN_PD11 (GPIO_PIOD_BASE + 11)
++#define GPIO_PIN_PD12 (GPIO_PIOD_BASE + 12)
++#define GPIO_PIN_PD13 (GPIO_PIOD_BASE + 13)
++#define GPIO_PIN_PD14 (GPIO_PIOD_BASE + 14)
++#define GPIO_PIN_PD15 (GPIO_PIOD_BASE + 15)
++#define GPIO_PIN_PD16 (GPIO_PIOD_BASE + 16)
++#define GPIO_PIN_PD17 (GPIO_PIOD_BASE + 17)
++
++#define GPIO_PIOE_BASE (GPIO_PIOD_BASE + 32)
++#define GPIO_PIN_PE0 (GPIO_PIOE_BASE + 0)
++#define GPIO_PIN_PE1 (GPIO_PIOE_BASE + 1)
++#define GPIO_PIN_PE2 (GPIO_PIOE_BASE + 2)
++#define GPIO_PIN_PE3 (GPIO_PIOE_BASE + 3)
++#define GPIO_PIN_PE4 (GPIO_PIOE_BASE + 4)
++#define GPIO_PIN_PE5 (GPIO_PIOE_BASE + 5)
++#define GPIO_PIN_PE6 (GPIO_PIOE_BASE + 6)
++#define GPIO_PIN_PE7 (GPIO_PIOE_BASE + 7)
++#define GPIO_PIN_PE8 (GPIO_PIOE_BASE + 8)
++#define GPIO_PIN_PE9 (GPIO_PIOE_BASE + 9)
++#define GPIO_PIN_PE10 (GPIO_PIOE_BASE + 10)
++#define GPIO_PIN_PE11 (GPIO_PIOE_BASE + 11)
++#define GPIO_PIN_PE12 (GPIO_PIOE_BASE + 12)
++#define GPIO_PIN_PE13 (GPIO_PIOE_BASE + 13)
++#define GPIO_PIN_PE14 (GPIO_PIOE_BASE + 14)
++#define GPIO_PIN_PE15 (GPIO_PIOE_BASE + 15)
++#define GPIO_PIN_PE16 (GPIO_PIOE_BASE + 16)
++#define GPIO_PIN_PE17 (GPIO_PIOE_BASE + 17)
++#define GPIO_PIN_PE18 (GPIO_PIOE_BASE + 18)
++#define GPIO_PIN_PE19 (GPIO_PIOE_BASE + 19)
++#define GPIO_PIN_PE20 (GPIO_PIOE_BASE + 20)
++#define GPIO_PIN_PE21 (GPIO_PIOE_BASE + 21)
++#define GPIO_PIN_PE22 (GPIO_PIOE_BASE + 22)
++#define GPIO_PIN_PE23 (GPIO_PIOE_BASE + 23)
++#define GPIO_PIN_PE24 (GPIO_PIOE_BASE + 24)
++#define GPIO_PIN_PE25 (GPIO_PIOE_BASE + 25)
++#define GPIO_PIN_PE26 (GPIO_PIOE_BASE + 26)
++
++static inline void *gpio_pin_to_addr(unsigned int pin)
++{
++ switch (pin >> 5) {
++ case 0:
++ return (void *)PIOA_BASE;
++ case 1:
++ return (void *)PIOB_BASE;
++ case 2:
++ return (void *)PIOC_BASE;
++ case 3:
++ return (void *)PIOD_BASE;
++ case 4:
++ return (void *)PIOE_BASE;
++ default:
++ return NULL;
++ }
++}
++
++void gpio_select_periph_A(unsigned int pin, int use_pullup);
++void gpio_select_periph_B(unsigned int pin, int use_pullup);
++
++void gpio_enable_ebi(void);
++
++#ifdef AT32AP700x_CHIP_HAS_USART
++void gpio_enable_usart0(void);
++void gpio_enable_usart1(void);
++void gpio_enable_usart2(void);
++void gpio_enable_usart3(void);
++#endif
++#ifdef AT32AP700x_CHIP_HAS_MACB
++void gpio_enable_macb0(void);
++void gpio_enable_macb1(void);
++#endif
++#ifdef AT32AP700x_CHIP_HAS_MMCI
++void gpio_enable_mmci(void);
++#endif
++
++#endif /* __ASM_AVR32_ARCH_GPIO_H__ */
+diff --git a/include/asm-avr32/arch-at32ap700x/hmatrix2.h b/include/asm-avr32/arch-at32ap700x/hmatrix2.h
+new file mode 100644
+index 0000000..b0e787a
+--- /dev/null
++++ b/include/asm-avr32/arch-at32ap700x/hmatrix2.h
+@@ -0,0 +1,232 @@
++/*
++ * Register definition for the High-speed Bus Matrix
++ */
++#ifndef __ASM_AVR32_HMATRIX2_H__
++#define __ASM_AVR32_HMATRIX2_H__
++
++/* HMATRIX2 register offsets */
++#define HMATRIX2_MCFG0 0x0000
++#define HMATRIX2_MCFG1 0x0004
++#define HMATRIX2_MCFG2 0x0008
++#define HMATRIX2_MCFG3 0x000c
++#define HMATRIX2_MCFG4 0x0010
++#define HMATRIX2_MCFG5 0x0014
++#define HMATRIX2_MCFG6 0x0018
++#define HMATRIX2_MCFG7 0x001c
++#define HMATRIX2_MCFG8 0x0020
++#define HMATRIX2_MCFG9 0x0024
++#define HMATRIX2_MCFG10 0x0028
++#define HMATRIX2_MCFG11 0x002c
++#define HMATRIX2_MCFG12 0x0030
++#define HMATRIX2_MCFG13 0x0034
++#define HMATRIX2_MCFG14 0x0038
++#define HMATRIX2_MCFG15 0x003c
++#define HMATRIX2_SCFG0 0x0040
++#define HMATRIX2_SCFG1 0x0044
++#define HMATRIX2_SCFG2 0x0048
++#define HMATRIX2_SCFG3 0x004c
++#define HMATRIX2_SCFG4 0x0050
++#define HMATRIX2_SCFG5 0x0054
++#define HMATRIX2_SCFG6 0x0058
++#define HMATRIX2_SCFG7 0x005c
++#define HMATRIX2_SCFG8 0x0060
++#define HMATRIX2_SCFG9 0x0064
++#define HMATRIX2_SCFG10 0x0068
++#define HMATRIX2_SCFG11 0x006c
++#define HMATRIX2_SCFG12 0x0070
++#define HMATRIX2_SCFG13 0x0074
++#define HMATRIX2_SCFG14 0x0078
++#define HMATRIX2_SCFG15 0x007c
++#define HMATRIX2_PRAS0 0x0080
++#define HMATRIX2_PRBS0 0x0084
++#define HMATRIX2_PRAS1 0x0088
++#define HMATRIX2_PRBS1 0x008c
++#define HMATRIX2_PRAS2 0x0090
++#define HMATRIX2_PRBS2 0x0094
++#define HMATRIX2_PRAS3 0x0098
++#define HMATRIX2_PRBS3 0x009c
++#define HMATRIX2_PRAS4 0x00a0
++#define HMATRIX2_PRBS4 0x00a4
++#define HMATRIX2_PRAS5 0x00a8
++#define HMATRIX2_PRBS5 0x00ac
++#define HMATRIX2_PRAS6 0x00b0
++#define HMATRIX2_PRBS6 0x00b4
++#define HMATRIX2_PRAS7 0x00b8
++#define HMATRIX2_PRBS7 0x00bc
++#define HMATRIX2_PRAS8 0x00c0
++#define HMATRIX2_PRBS8 0x00c4
++#define HMATRIX2_PRAS9 0x00c8
++#define HMATRIX2_PRBS9 0x00cc
++#define HMATRIX2_PRAS10 0x00d0
++#define HMATRIX2_PRBS10 0x00d4
++#define HMATRIX2_PRAS11 0x00d8
++#define HMATRIX2_PRBS11 0x00dc
++#define HMATRIX2_PRAS12 0x00e0
++#define HMATRIX2_PRBS12 0x00e4
++#define HMATRIX2_PRAS13 0x00e8
++#define HMATRIX2_PRBS13 0x00ec
++#define HMATRIX2_PRAS14 0x00f0
++#define HMATRIX2_PRBS14 0x00f4
++#define HMATRIX2_PRAS15 0x00f8
++#define HMATRIX2_PRBS15 0x00fc
++#define HMATRIX2_MRCR 0x0100
++#define HMATRIX2_SFR0 0x0110
++#define HMATRIX2_SFR1 0x0114
++#define HMATRIX2_SFR2 0x0118
++#define HMATRIX2_SFR3 0x011c
++#define HMATRIX2_SFR4 0x0120
++#define HMATRIX2_SFR5 0x0124
++#define HMATRIX2_SFR6 0x0128
++#define HMATRIX2_SFR7 0x012c
++#define HMATRIX2_SFR8 0x0130
++#define HMATRIX2_SFR9 0x0134
++#define HMATRIX2_SFR10 0x0138
++#define HMATRIX2_SFR11 0x013c
++#define HMATRIX2_SFR12 0x0140
++#define HMATRIX2_SFR13 0x0144
++#define HMATRIX2_SFR14 0x0148
++#define HMATRIX2_SFR15 0x014c
++#define HMATRIX2_VERSION 0x01fc
++
++/* Bitfields in MCFG0 */
++#define HMATRIX2_ULBT_OFFSET 0
++#define HMATRIX2_ULBT_SIZE 3
++
++/* Bitfields in SCFG0 */
++#define HMATRIX2_SLOT_CYCLE_OFFSET 0
++#define HMATRIX2_SLOT_CYCLE_SIZE 8
++#define HMATRIX2_DEFMSTR_TYPE_OFFSET 16
++#define HMATRIX2_DEFMSTR_TYPE_SIZE 2
++#define HMATRIX2_FIXED_DEFMSTR_OFFSET 18
++#define HMATRIX2_FIXED_DEFMSTR_SIZE 4
++#define HMATRIX2_ARBT_OFFSET 24
++#define HMATRIX2_ARBT_SIZE 2
++
++/* Bitfields in PRAS0 */
++#define HMATRIX2_M0PR_OFFSET 0
++#define HMATRIX2_M0PR_SIZE 4
++#define HMATRIX2_M1PR_OFFSET 4
++#define HMATRIX2_M1PR_SIZE 4
++#define HMATRIX2_M2PR_OFFSET 8
++#define HMATRIX2_M2PR_SIZE 4
++#define HMATRIX2_M3PR_OFFSET 12
++#define HMATRIX2_M3PR_SIZE 4
++#define HMATRIX2_M4PR_OFFSET 16
++#define HMATRIX2_M4PR_SIZE 4
++#define HMATRIX2_M5PR_OFFSET 20
++#define HMATRIX2_M5PR_SIZE 4
++#define HMATRIX2_M6PR_OFFSET 24
++#define HMATRIX2_M6PR_SIZE 4
++#define HMATRIX2_M7PR_OFFSET 28
++#define HMATRIX2_M7PR_SIZE 4
++
++/* Bitfields in PRBS0 */
++#define HMATRIX2_M8PR_OFFSET 0
++#define HMATRIX2_M8PR_SIZE 4
++#define HMATRIX2_M9PR_OFFSET 4
++#define HMATRIX2_M9PR_SIZE 4
++#define HMATRIX2_M10PR_OFFSET 8
++#define HMATRIX2_M10PR_SIZE 4
++#define HMATRIX2_M11PR_OFFSET 12
++#define HMATRIX2_M11PR_SIZE 4
++#define HMATRIX2_M12PR_OFFSET 16
++#define HMATRIX2_M12PR_SIZE 4
++#define HMATRIX2_M13PR_OFFSET 20
++#define HMATRIX2_M13PR_SIZE 4
++#define HMATRIX2_M14PR_OFFSET 24
++#define HMATRIX2_M14PR_SIZE 4
++#define HMATRIX2_M15PR_OFFSET 28
++#define HMATRIX2_M15PR_SIZE 4
++
++/* Bitfields in MRCR */
++#define HMATRIX2_RBC0_OFFSET 0
++#define HMATRIX2_RBC0_SIZE 1
++#define HMATRIX2_RBC1_OFFSET 1
++#define HMATRIX2_RBC1_SIZE 1
++#define HMATRIX2_RBC2_OFFSET 2
++#define HMATRIX2_RBC2_SIZE 1
++#define HMATRIX2_RBC3_OFFSET 3
++#define HMATRIX2_RBC3_SIZE 1
++#define HMATRIX2_RBC4_OFFSET 4
++#define HMATRIX2_RBC4_SIZE 1
++#define HMATRIX2_RBC5_OFFSET 5
++#define HMATRIX2_RBC5_SIZE 1
++#define HMATRIX2_RBC6_OFFSET 6
++#define HMATRIX2_RBC6_SIZE 1
++#define HMATRIX2_RBC7_OFFSET 7
++#define HMATRIX2_RBC7_SIZE 1
++#define HMATRIX2_RBC8_OFFSET 8
++#define HMATRIX2_RBC8_SIZE 1
++#define HMATRIX2_RBC9_OFFSET 9
++#define HMATRIX2_RBC9_SIZE 1
++#define HMATRIX2_RBC10_OFFSET 10
++#define HMATRIX2_RBC10_SIZE 1
++#define HMATRIX2_RBC11_OFFSET 11
++#define HMATRIX2_RBC11_SIZE 1
++#define HMATRIX2_RBC12_OFFSET 12
++#define HMATRIX2_RBC12_SIZE 1
++#define HMATRIX2_RBC13_OFFSET 13
++#define HMATRIX2_RBC13_SIZE 1
++#define HMATRIX2_RBC14_OFFSET 14
++#define HMATRIX2_RBC14_SIZE 1
++#define HMATRIX2_RBC15_OFFSET 15
++#define HMATRIX2_RBC15_SIZE 1
++
++/* Bitfields in SFR0 */
++#define HMATRIX2_SFR_OFFSET 0
++#define HMATRIX2_SFR_SIZE 32
++
++/* Bitfields in SFR4 */
++#define HMATRIX2_CS1A_OFFSET 1
++#define HMATRIX2_CS1A_SIZE 1
++#define HMATRIX2_CS3A_OFFSET 3
++#define HMATRIX2_CS3A_SIZE 1
++#define HMATRIX2_CS4A_OFFSET 4
++#define HMATRIX2_CS4A_SIZE 1
++#define HMATRIX2_CS5A_OFFSET 5
++#define HMATRIX2_CS5A_SIZE 1
++#define HMATRIX2_DBPUC_OFFSET 8
++#define HMATRIX2_DBPUC_SIZE 1
++
++/* Bitfields in VERSION */
++#define HMATRIX2_VERSION_OFFSET 0
++#define HMATRIX2_VERSION_SIZE 12
++#define HMATRIX2_MFN_OFFSET 16
++#define HMATRIX2_MFN_SIZE 3
++
++/* Constants for ULBT */
++#define HMATRIX2_ULBT_INFINITE 0
++#define HMATRIX2_ULBT_SINGLE 1
++#define HMATRIX2_ULBT_FOUR_BEAT 2
++#define HMATRIX2_ULBT_SIXTEEN_BEAT 4
++
++/* Constants for DEFMSTR_TYPE */
++#define HMATRIX2_DEFMSTR_TYPE_NO_DEFAULT 0
++#define HMATRIX2_DEFMSTR_TYPE_LAST_DEFAULT 1
++#define HMATRIX2_DEFMSTR_TYPE_FIXED_DEFAULT 2
++
++/* Constants for ARBT */
++#define HMATRIX2_ARBT_ROUND_ROBIN 0
++#define HMATRIX2_ARBT_FIXED_PRIORITY 1
++
++/* Bit manipulation macros */
++#define HMATRIX2_BIT(name) \
++ (1 << HMATRIX2_##name##_OFFSET)
++#define HMATRIX2_BF(name,value) \
++ (((value) & ((1 << HMATRIX2_##name##_SIZE) - 1)) \
++ << HMATRIX2_##name##_OFFSET)
++#define HMATRIX2_BFEXT(name,value) \
++ (((value) >> HMATRIX2_##name##_OFFSET) \
++ & ((1 << HMATRIX2_##name##_SIZE) - 1))
++#define HMATRIX2_BFINS(name,value,old) \
++ (((old) & ~(((1 << HMATRIX2_##name##_SIZE) - 1) \
++ << HMATRIX2_##name##_OFFSET)) \
++ | HMATRIX2_BF(name,value))
++
++/* Register access macros */
++#define hmatrix2_readl(reg) \
++ readl((void *)HMATRIX_BASE + HMATRIX2_##reg)
++#define hmatrix2_writel(reg,value) \
++ writel((value), (void *)HMATRIX_BASE + HMATRIX2_##reg)
++
++#endif /* __ASM_AVR32_HMATRIX2_H__ */
+diff --git a/include/asm-avr32/arch-at32ap700x/memory-map.h b/include/asm-avr32/arch-at32ap700x/memory-map.h
+new file mode 100644
+index 0000000..5513e88
+--- /dev/null
++++ b/include/asm-avr32/arch-at32ap700x/memory-map.h
+@@ -0,0 +1,66 @@
++/*
++ * Copyright (C) 2005-2006 Atmel Corporation
++ *
++ * 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 __AT32AP7000_MEMORY_MAP_H__
++#define __AT32AP7000_MEMORY_MAP_H__
++
++/* Devices on the High Speed Bus (HSB) */
++#define LCDC_BASE 0xFF000000
++#define DMAC_BASE 0xFF200000
++#define USB_FIFO 0xFF300000
++
++/* Devices on Peripheral Bus A (PBA) */
++#define SPI0_BASE 0xFFE00000
++#define SPI1_BASE 0xFFE00400
++#define TWI_BASE 0xFFE00800
++#define USART0_BASE 0xFFE00C00
++#define USART1_BASE 0xFFE01000
++#define USART2_BASE 0xFFE01400
++#define USART3_BASE 0xFFE01800
++#define SSC0_BASE 0xFFE01C00
++#define SSC1_BASE 0xFFE02000
++#define SSC2_BASE 0xFFE02400
++#define PIOA_BASE 0xFFE02800
++#define PIOB_BASE 0xFFE02C00
++#define PIOC_BASE 0xFFE03000
++#define PIOD_BASE 0xFFE03400
++#define PIOE_BASE 0xFFE03800
++#define PSIF_BASE 0xFFE03C00
++
++/* Devices on Peripheral Bus B (PBB) */
++#define SM_BASE 0xFFF00000
++#define INTC_BASE 0xFFF00400
++#define HMATRIX_BASE 0xFFF00800
++#define TIMER0_BASE 0xFFF00C00
++#define TIMER1_BASE 0xFFF01000
++#define PWM_BASE 0xFFF01400
++#define MACB0_BASE 0xFFF01800
++#define MACB1_BASE 0xFFF01C00
++#define DAC_BASE 0xFFF02000
++#define MMCI_BASE 0xFFF02400
++#define AUDIOC_BASE 0xFFF02800
++#define HISI_BASE 0xFFF02C00
++#define USB_BASE 0xFFF03000
++#define HSMC_BASE 0xFFF03400
++#define HSDRAMC_BASE 0xFFF03800
++#define ECC_BASE 0xFFF03C00
++
++#endif /* __AT32AP7000_MEMORY_MAP_H__ */
+diff --git a/include/asm-avr32/arch-at32ap700x/mmc.h b/include/asm-avr32/arch-at32ap700x/mmc.h
+new file mode 100644
+index 0000000..fcfbbb3
+--- /dev/null
++++ b/include/asm-avr32/arch-at32ap700x/mmc.h
+@@ -0,0 +1,96 @@
++/*
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * 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 __ASM_AVR32_MMC_H
++#define __ASM_AVR32_MMC_H
++
++struct mmc_cid {
++ unsigned long psn;
++ unsigned short oid;
++ unsigned char mid;
++ unsigned char prv;
++ unsigned char mdt;
++ char pnm[7];
++};
++
++struct mmc_csd
++{
++ u8 csd_structure:2,
++ spec_vers:4,
++ rsvd1:2;
++ u8 taac;
++ u8 nsac;
++ u8 tran_speed;
++ u16 ccc:12,
++ read_bl_len:4;
++ u64 read_bl_partial:1,
++ write_blk_misalign:1,
++ read_blk_misalign:1,
++ dsr_imp:1,
++ rsvd2:2,
++ c_size:12,
++ vdd_r_curr_min:3,
++ vdd_r_curr_max:3,
++ vdd_w_curr_min:3,
++ vdd_w_curr_max:3,
++ c_size_mult:3,
++ sector_size:5,
++ erase_grp_size:5,
++ wp_grp_size:5,
++ wp_grp_enable:1,
++ default_ecc:2,
++ r2w_factor:3,
++ write_bl_len:4,
++ write_bl_partial:1,
++ rsvd3:5;
++ u8 file_format_grp:1,
++ copy:1,
++ perm_write_protect:1,
++ tmp_write_protect:1,
++ file_format:2,
++ ecc:2;
++ u8 crc:7;
++ u8 one:1;
++};
++
++/* MMC Command numbers */
++#define MMC_CMD_GO_IDLE_STATE 0
++#define MMC_CMD_SEND_OP_COND 1
++#define MMC_CMD_ALL_SEND_CID 2
++#define MMC_CMD_SET_RELATIVE_ADDR 3
++#define MMC_CMD_SD_SEND_RELATIVE_ADDR 3
++#define MMC_CMD_SET_DSR 4
++#define MMC_CMD_SELECT_CARD 7
++#define MMC_CMD_SEND_CSD 9
++#define MMC_CMD_SEND_CID 10
++#define MMC_CMD_SEND_STATUS 13
++#define MMC_CMD_SET_BLOCKLEN 16
++#define MMC_CMD_READ_SINGLE_BLOCK 17
++#define MMC_CMD_READ_MULTIPLE_BLOCK 18
++#define MMC_CMD_WRITE_BLOCK 24
++#define MMC_CMD_APP_CMD 55
++
++#define MMC_ACMD_SD_SEND_OP_COND 41
++
++#define R1_ILLEGAL_COMMAND (1 << 22)
++#define R1_APP_CMD (1 << 5)
++
++#endif /* __ASM_AVR32_MMC_H */
+diff --git a/include/configs/atngw100.h b/include/configs/atngw100.h
+new file mode 100644
+index 0000000..0be5fcb
+--- /dev/null
++++ b/include/configs/atngw100.h
+@@ -0,0 +1,177 @@
++/*
++ * Copyright (C) 2006 Atmel Corporation
++ *
++ * Configuration settings for the AVR32 Network Gateway
++ *
++ * 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
++
++#define CONFIG_AVR32 1
++#define CONFIG_AT32AP 1
++#define CONFIG_AT32AP7000 1
++#define CONFIG_ATNGW100 1
++
++#define CONFIG_ATNGW100_EXT_FLASH 1
++
++#define CFG_HZ 1000
++
++/*
++ * Set up the PLL to run at 140 MHz, the CPU to run at the PLL
++ * frequency, the HSB and PBB busses to run at 1/2 the PLL frequency
++ * and the PBA bus to run at 1/4 the PLL frequency.
++ */
++#define CONFIG_PLL 1
++#define CFG_POWER_MANAGER 1
++#define CFG_OSC0_HZ 20000000
++#define CFG_PLL0_DIV 1
++#define CFG_PLL0_MUL 7
++#define CFG_PLL0_SUPPRESS_CYCLES 16
++#define CFG_CLKDIV_CPU 0
++#define CFG_CLKDIV_HSB 1
++#define CFG_CLKDIV_PBA 2
++#define CFG_CLKDIV_PBB 1
++
++/*
++ * The PLLOPT register controls the PLL like this:
++ * icp = PLLOPT<2>
++ * ivco = PLLOPT<1:0>
++ *
++ * We want icp=1 (default) and ivco=0 (80-160 MHz) or ivco=2 (150-240MHz).
++ */
++#define CFG_PLL0_OPT 0x04
++
++#define CONFIG_USART1 1
++
++/* User serviceable stuff */
++#define CONFIG_DOS_PARTITION 1
++
++#define CONFIG_CMDLINE_TAG 1
++#define CONFIG_SETUP_MEMORY_TAGS 1
++#define CONFIG_INITRD_TAG 1
++
++#define CONFIG_STACKSIZE (2048)
++
++#define CONFIG_BAUDRATE 115200
++#define CONFIG_BOOTARGS \
++ "console=ttyS0 root=/dev/mtdblock1 rootfstype=jffs2"
++#define CONFIG_BOOTCOMMAND \
++ "fsload; bootm"
++
++/*
++ * Only interrupt autoboot if <space> is pressed. Otherwise, garbage
++ * data on the serial line may interrupt the boot sequence.
++ */
++#define CONFIG_BOOTDELAY 1
++#define CONFIG_AUTOBOOT 1
++#define CONFIG_AUTOBOOT_KEYED 1
++#define CONFIG_AUTOBOOT_PROMPT \
++ "Press SPACE to abort autoboot in %d seconds\n"
++#define CONFIG_AUTOBOOT_DELAY_STR "d"
++#define CONFIG_AUTOBOOT_STOP_STR " "
++
++/*
++ * After booting the board for the first time, new ethernet addresses
++ * should be generated and assigned to the environment variables
++ * "ethaddr" and "eth1addr". This is normally done during production.
++ */
++#define CONFIG_OVERWRITE_ETHADDR_ONCE 1
++#define CONFIG_NET_MULTI 1
++
++/*
++ * BOOTP/DHCP options
++ */
++#define CONFIG_BOOTP_SUBNETMASK
++#define CONFIG_BOOTP_GATEWAY
++
++#define CONFIG_DOS_PARTITION 1
++
++/*
++ * Command line configuration.
++ */
++#include <config_cmd_default.h>
++
++#define CONFIG_CMD_ASKENV
++#define CONFIG_CMD_DHCP
++#define CONFIG_CMD_EXT2
++#define CONFIG_CMD_FAT
++#define CONFIG_CMD_JFFS2
++#define CONFIG_CMD_MMC
++#undef CONFIG_CMD_FPGA
++#undef CONFIG_CMD_SETGETDCR
++
++#define CONFIG_ATMEL_USART 1
++#define CONFIG_MACB 1
++#define CONFIG_PIO2 1
++#define CFG_NR_PIOS 5
++#define CFG_HSDRAMC 1
++#define CONFIG_MMC 1
++
++#define CFG_DCACHE_LINESZ 32
++#define CFG_ICACHE_LINESZ 32
++
++#define CONFIG_NR_DRAM_BANKS 1
++
++#define CFG_FLASH_BASE 0x00000000
++#define CFG_FLASH_SIZE 0x800000
++#define CFG_MAX_FLASH_BANKS 1
++#define CFG_MAX_FLASH_SECT 135
++
++#define CFG_MONITOR_BASE CFG_FLASH_BASE
++
++#define CFG_INTRAM_BASE 0x24000000
++#define CFG_INTRAM_SIZE 0x8000
++
++#define CFG_SDRAM_BASE 0x10000000
++#define CFG_SDRAM_16BIT 1
++
++#define CFG_ENV_IS_IN_FLASH 1
++#define CFG_ENV_SIZE 65536
++#define CFG_ENV_ADDR (CFG_FLASH_BASE + CFG_FLASH_SIZE - CFG_ENV_SIZE)
++
++#define CFG_INIT_SP_ADDR (CFG_INTRAM_BASE + CFG_INTRAM_SIZE)
++
++#define CFG_MALLOC_LEN (256*1024)
++#define CFG_MALLOC_END \
++ ({ \
++ DECLARE_GLOBAL_DATA_PTR; \
++ CFG_SDRAM_BASE + gd->sdram_size; \
++ })
++#define CFG_MALLOC_START (CFG_MALLOC_END - CFG_MALLOC_LEN)
++
++#define CFG_DMA_ALLOC_LEN (16384)
++
++/* Allow 4MB for the kernel run-time image */
++#define CFG_LOAD_ADDR (CFG_SDRAM_BASE + 0x00400000)
++#define CFG_BOOTPARAMS_LEN (16 * 1024)
++
++/* Other configuration settings that shouldn't have to change all that often */
++#define CFG_PROMPT "Uboot> "
++#define CFG_CBSIZE 256
++#define CFG_MAXARGS 16
++#define CFG_PBSIZE (CFG_CBSIZE + sizeof(CFG_PROMPT) + 16)
++#define CFG_LONGHELP 1
++
++#define CFG_MEMTEST_START CFG_SDRAM_BASE
++#define CFG_MEMTEST_END (CFG_MEMTEST_START + 0x1f00000)
++
++#define CFG_BAUDRATE_TABLE { 115200, 38400, 19200, 9600, 2400 }
++
++#endif /* __CONFIG_H */
+diff --git a/include/configs/atstk1002.h b/include/configs/atstk1002.h
+index b33e26f..95aeab6 100644
+--- a/include/configs/atstk1002.h
++++ b/include/configs/atstk1002.h
+@@ -184,8 +184,8 @@
+ #define CFG_MALLOC_LEN (256*1024)
+ #define CFG_DMA_ALLOC_LEN (16384)
+
+-/* Allow 2MB for the kernel run-time image */
+-#define CFG_LOAD_ADDR (CFG_SDRAM_BASE + 0x00200000)
++/* Allow 4MB for the kernel run-time image */
++#define CFG_LOAD_ADDR (CFG_SDRAM_BASE + 0x00400000)
+ #define CFG_BOOTPARAMS_LEN (16 * 1024)
+
+ /* Other configuration settings that shouldn't have to change all that often */
+diff --git a/include/configs/atstk1003.h b/include/configs/atstk1003.h
+new file mode 100644
+index 0000000..194788b
+--- /dev/null
++++ b/include/configs/atstk1003.h
+@@ -0,0 +1,184 @@
++/*
++ * Copyright (C) 2007 Atmel Corporation
++ *
++ * Configuration settings for the ATSTK1003 CPU daughterboard
++ *
++ * 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
++
++#define CONFIG_AVR32 1
++#define CONFIG_AT32AP 1
++#define CONFIG_AT32AP7001 1
++#define CONFIG_ATSTK1003 1
++#define CONFIG_ATSTK1000 1
++
++#define CONFIG_ATSTK1000_EXT_FLASH 1
++
++/*
++ * Timer clock frequency. We're using the CPU-internal COUNT register
++ * for this, so this is equivalent to the CPU core clock frequency
++ */
++#define CFG_HZ 1000
++
++/*
++ * Set up the PLL to run at 140 MHz, the CPU to run at the PLL
++ * frequency, the HSB and PBB at 1/2, and the PBA to run at 1/4 the
++ * PLL frequency.
++ * (CFG_OSC0_HZ * CFG_PLL0_MUL) / CFG_PLL0_DIV = PLL MHz
++ */
++#define CONFIG_PLL 1
++#define CFG_POWER_MANAGER 1
++#define CFG_OSC0_HZ 20000000
++#define CFG_PLL0_DIV 1
++#define CFG_PLL0_MUL 7
++#define CFG_PLL0_SUPPRESS_CYCLES 16
++/*
++ * Set the CPU running at:
++ * PLL / (2^CFG_CLKDIV_CPU) = CPU MHz
++ */
++#define CFG_CLKDIV_CPU 0
++/*
++ * Set the HSB running at:
++ * PLL / (2^CFG_CLKDIV_HSB) = HSB MHz
++ */
++#define CFG_CLKDIV_HSB 1
++/*
++ * Set the PBA running at:
++ * PLL / (2^CFG_CLKDIV_PBA) = PBA MHz
++ */
++#define CFG_CLKDIV_PBA 2
++/*
++ * Set the PBB running at:
++ * PLL / (2^CFG_CLKDIV_PBB) = PBB MHz
++ */
++#define CFG_CLKDIV_PBB 1
++
++/*
++ * The PLLOPT register controls the PLL like this:
++ * icp = PLLOPT<2>
++ * ivco = PLLOPT<1:0>
++ *
++ * We want icp=1 (default) and ivco=0 (80-160 MHz) or ivco=2 (150-240MHz).
++ */
++#define CFG_PLL0_OPT 0x04
++
++#undef CONFIG_USART0
++#define CONFIG_USART1 1
++#undef CONFIG_USART2
++#undef CONFIG_USART3
++
++/* User serviceable stuff */
++#define CONFIG_DOS_PARTITION 1
++
++#define CONFIG_CMDLINE_TAG 1
++#define CONFIG_SETUP_MEMORY_TAGS 1
++#define CONFIG_INITRD_TAG 1
++
++#define CONFIG_STACKSIZE (2048)
++
++#define CONFIG_BAUDRATE 115200
++#define CONFIG_BOOTARGS \
++ "console=ttyS0 root=/dev/mmcblk0p1 rootwait"
++
++#define CONFIG_BOOTCOMMAND \
++ "mmcinit; ext2load mmc 0:1 0x10400000 /boot/uImage; bootm"
++
++/*
++ * Only interrupt autoboot if <space> is pressed. Otherwise, garbage
++ * data on the serial line may interrupt the boot sequence.
++ */
++#define CONFIG_BOOTDELAY 1
++#define CONFIG_AUTOBOOT 1
++#define CONFIG_AUTOBOOT_KEYED 1
++#define CONFIG_AUTOBOOT_PROMPT \
++ "Press SPACE to abort autoboot in %d seconds\n"
++#define CONFIG_AUTOBOOT_DELAY_STR "d"
++#define CONFIG_AUTOBOOT_STOP_STR " "
++
++/*
++ * Command line configuration.
++ */
++#include <config_cmd_default.h>
++
++#define CONFIG_CMD_ASKENV
++#define CONFIG_CMD_EXT2
++#define CONFIG_CMD_FAT
++#define CONFIG_CMD_JFFS2
++#define CONFIG_CMD_MMC
++
++#undef CONFIG_CMD_FPGA
++#undef CONFIG_CMD_NET
++#undef CONFIG_CMD_NFS
++#undef CONFIG_CMD_SETGETDCR
++#undef CONFIG_CMD_XIMG
++
++#define CONFIG_ATMEL_USART 1
++#define CONFIG_PIO2 1
++#define CFG_HSDRAMC 1
++#define CONFIG_MMC 1
++
++#define CFG_DCACHE_LINESZ 32
++#define CFG_ICACHE_LINESZ 32
++
++#define CONFIG_NR_DRAM_BANKS 1
++
++/* External flash on STK1000 */
++#if 0
++#define CFG_FLASH_CFI 1
++#define CFG_FLASH_CFI_DRIVER 1
++#endif
++
++#define CFG_FLASH_BASE 0x00000000
++#define CFG_FLASH_SIZE 0x800000
++#define CFG_MAX_FLASH_BANKS 1
++#define CFG_MAX_FLASH_SECT 135
++
++#define CFG_MONITOR_BASE CFG_FLASH_BASE
++
++#define CFG_INTRAM_BASE 0x24000000
++#define CFG_INTRAM_SIZE 0x8000
++
++#define CFG_SDRAM_BASE 0x10000000
++
++#define CFG_ENV_IS_IN_FLASH 1
++#define CFG_ENV_SIZE 65536
++#define CFG_ENV_ADDR (CFG_FLASH_BASE + CFG_FLASH_SIZE - CFG_ENV_SIZE)
++
++#define CFG_INIT_SP_ADDR (CFG_INTRAM_BASE + CFG_INTRAM_SIZE)
++
++#define CFG_MALLOC_LEN (256*1024)
++
++/* Allow 4MB for the kernel run-time image */
++#define CFG_LOAD_ADDR (CFG_SDRAM_BASE + 0x00400000)
++#define CFG_BOOTPARAMS_LEN (16 * 1024)
++
++/* Other configuration settings that shouldn't have to change all that often */
++#define CFG_PROMPT "Uboot> "
++#define CFG_CBSIZE 256
++#define CFG_MAXARGS 16
++#define CFG_PBSIZE (CFG_CBSIZE + sizeof(CFG_PROMPT) + 16)
++#define CFG_LONGHELP 1
++
++#define CFG_MEMTEST_START CFG_SDRAM_BASE
++#define CFG_MEMTEST_END (CFG_MEMTEST_START + 0x700000)
++#define CFG_BAUDRATE_TABLE { 115200, 38400, 19200, 9600, 2400 }
++
++#endif /* __CONFIG_H */
+diff --git a/include/configs/atstk1004.h b/include/configs/atstk1004.h
+new file mode 100644
+index 0000000..b81fc21
+--- /dev/null
++++ b/include/configs/atstk1004.h
+@@ -0,0 +1,185 @@
++/*
++ * Copyright (C) 2007 Atmel Corporation
++ *
++ * Configuration settings for the ATSTK1003 CPU daughterboard
++ *
++ * 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
++
++#define CONFIG_AVR32 1
++#define CONFIG_AT32AP 1
++#define CONFIG_AT32AP7002 1
++#define CONFIG_ATSTK1004 1
++#define CONFIG_ATSTK1000 1
++
++#define CONFIG_ATSTK1000_EXT_FLASH 1
++
++/*
++ * Timer clock frequency. We're using the CPU-internal COUNT register
++ * for this, so this is equivalent to the CPU core clock frequency
++ */
++#define CFG_HZ 1000
++
++/*
++ * Set up the PLL to run at 140 MHz, the CPU to run at the PLL
++ * frequency, the HSB and PBB at 1/2, and the PBA to run at 1/4 the
++ * PLL frequency.
++ * (CFG_OSC0_HZ * CFG_PLL0_MUL) / CFG_PLL0_DIV = PLL MHz
++ */
++#define CONFIG_PLL 1
++#define CFG_POWER_MANAGER 1
++#define CFG_OSC0_HZ 20000000
++#define CFG_PLL0_DIV 1
++#define CFG_PLL0_MUL 7
++#define CFG_PLL0_SUPPRESS_CYCLES 16
++/*
++ * Set the CPU running at:
++ * PLL / (2^CFG_CLKDIV_CPU) = CPU MHz
++ */
++#define CFG_CLKDIV_CPU 0
++/*
++ * Set the HSB running at:
++ * PLL / (2^CFG_CLKDIV_HSB) = HSB MHz
++ */
++#define CFG_CLKDIV_HSB 1
++/*
++ * Set the PBA running at:
++ * PLL / (2^CFG_CLKDIV_PBA) = PBA MHz
++ */
++#define CFG_CLKDIV_PBA 2
++/*
++ * Set the PBB running at:
++ * PLL / (2^CFG_CLKDIV_PBB) = PBB MHz
++ */
++#define CFG_CLKDIV_PBB 1
++
++/*
++ * The PLLOPT register controls the PLL like this:
++ * icp = PLLOPT<2>
++ * ivco = PLLOPT<1:0>
++ *
++ * We want icp=1 (default) and ivco=0 (80-160 MHz) or ivco=2 (150-240MHz).
++ */
++#define CFG_PLL0_OPT 0x04
++
++#undef CONFIG_USART0
++#define CONFIG_USART1 1
++#undef CONFIG_USART2
++#undef CONFIG_USART3
++
++/* User serviceable stuff */
++#define CONFIG_DOS_PARTITION 1
++
++#define CONFIG_CMDLINE_TAG 1
++#define CONFIG_SETUP_MEMORY_TAGS 1
++#define CONFIG_INITRD_TAG 1
++
++#define CONFIG_STACKSIZE (2048)
++
++#define CONFIG_BAUDRATE 115200
++#define CONFIG_BOOTARGS \
++ "console=ttyS0 root=/dev/mmcblk0p1 rootwait"
++
++#define CONFIG_BOOTCOMMAND \
++ "mmcinit; ext2load mmc 0:1 0x10200000 /boot/uImage; bootm"
++
++/*
++ * Only interrupt autoboot if <space> is pressed. Otherwise, garbage
++ * data on the serial line may interrupt the boot sequence.
++ */
++#define CONFIG_BOOTDELAY 1
++#define CONFIG_AUTOBOOT 1
++#define CONFIG_AUTOBOOT_KEYED 1
++#define CONFIG_AUTOBOOT_PROMPT \
++ "Press SPACE to abort autoboot in %d seconds\n"
++#define CONFIG_AUTOBOOT_DELAY_STR "d"
++#define CONFIG_AUTOBOOT_STOP_STR " "
++
++/*
++ * Command line configuration.
++ */
++#include <config_cmd_default.h>
++
++#define CONFIG_CMD_ASKENV
++#define CONFIG_CMD_EXT2
++#define CONFIG_CMD_FAT
++#define CONFIG_CMD_JFFS2
++#define CONFIG_CMD_MMC
++
++#undef CONFIG_CMD_FPGA
++#undef CONFIG_CMD_NET
++#undef CONFIG_CMD_NFS
++#undef CONFIG_CMD_SETGETDCR
++#undef CONFIG_CMD_XIMG
++
++#define CONFIG_ATMEL_USART 1
++#define CONFIG_PIO2 1
++#define CFG_HSDRAMC 1
++#define CONFIG_MMC 1
++
++#define CFG_DCACHE_LINESZ 32
++#define CFG_ICACHE_LINESZ 32
++
++#define CONFIG_NR_DRAM_BANKS 1
++
++/* External flash on STK1000 */
++#if 0
++#define CFG_FLASH_CFI 1
++#define CFG_FLASH_CFI_DRIVER 1
++#endif
++
++#define CFG_FLASH_BASE 0x00000000
++#define CFG_FLASH_SIZE 0x800000
++#define CFG_MAX_FLASH_BANKS 1
++#define CFG_MAX_FLASH_SECT 135
++
++#define CFG_MONITOR_BASE CFG_FLASH_BASE
++
++#define CFG_INTRAM_BASE 0x24000000
++#define CFG_INTRAM_SIZE 0x8000
++
++#define CFG_SDRAM_BASE 0x10000000
++#define CFG_SDRAM_16BIT 1
++
++#define CFG_ENV_IS_IN_FLASH 1
++#define CFG_ENV_SIZE 65536
++#define CFG_ENV_ADDR (CFG_FLASH_BASE + CFG_FLASH_SIZE - CFG_ENV_SIZE)
++
++#define CFG_INIT_SP_ADDR (CFG_INTRAM_BASE + CFG_INTRAM_SIZE)
++
++#define CFG_MALLOC_LEN (256*1024)
++
++/* Allow 2MB for the kernel run-time image */
++#define CFG_LOAD_ADDR (CFG_SDRAM_BASE + 0x00200000)
++#define CFG_BOOTPARAMS_LEN (16 * 1024)
++
++/* Other configuration settings that shouldn't have to change all that often */
++#define CFG_PROMPT "Uboot> "
++#define CFG_CBSIZE 256
++#define CFG_MAXARGS 16
++#define CFG_PBSIZE (CFG_CBSIZE + sizeof(CFG_PROMPT) + 16)
++#define CFG_LONGHELP 1
++
++#define CFG_MEMTEST_START CFG_SDRAM_BASE
++#define CFG_MEMTEST_END (CFG_MEMTEST_START + 0x700000)
++#define CFG_BAUDRATE_TABLE { 115200, 38400, 19200, 9600, 2400 }
++
++#endif /* __CONFIG_H */
+diff --git a/lib_avr32/board.c b/lib_avr32/board.c
+index 11d864f..4729e58 100644
+--- a/lib_avr32/board.c
++++ b/lib_avr32/board.c
+@@ -264,6 +264,7 @@ void board_init_r(gd_t *new_gd, ulong dest_addr)
+ #ifndef CFG_ENV_IS_NOWHERE
+ extern char * env_name_spec;
+ #endif
++ char *s;
+ cmd_tbl_t *cmdtp;
+ bd_t *bd;
+
+@@ -334,11 +335,20 @@ void board_init_r(gd_t *new_gd, ulong dest_addr)
+ /* initialize environment */
+ env_relocate();
+
++ bd->bi_ip_addr = getenv_IPaddr ("ipaddr");
++
+ devices_init();
+ jumptable_init();
+ console_init_r();
+
++ s = getenv("loadaddr");
++ if (s)
++ load_addr = simple_strtoul(s, NULL, 16);
++
+ #if defined(CONFIG_CMD_NET)
++ s = getenv("bootfile");
++ if (s)
++ copy_filename(BootFile, s, sizeof(BootFile));
+ #if defined(CONFIG_NET_MULTI)
+ puts("Net: ");
+ #endif
+diff --git a/net/eth.c b/net/eth.c
+index 1b56a35..3e24a4c 100644
+--- a/net/eth.c
++++ b/net/eth.c
+@@ -60,6 +60,7 @@ extern int npe_initialize(bd_t *);
+ extern int uec_initialize(int);
+ extern int bfin_EMAC_initialize(bd_t *);
+ extern int atstk1000_eth_initialize(bd_t *);
++extern int atngw100_eth_initialize(bd_t *);
+ extern int mcffec_initialize(bd_t*);
+
+ static struct eth_device *eth_devices, *eth_current;
+@@ -254,6 +255,9 @@ int eth_initialize(bd_t *bis)
+ #if defined(CONFIG_ATSTK1000)
+ atstk1000_eth_initialize(bis);
+ #endif
++#if defined(CONFIG_ATNGW100)
++ atngw100_eth_initialize(bis);
++#endif
+ #if defined(CONFIG_MCFFEC)
+ mcffec_initialize(bis);
+ #endif