aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/at91/image/u-boot
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/at91/image/u-boot')
-rw-r--r--target/linux/at91/image/u-boot/Makefile51
-rw-r--r--target/linux/at91/image/u-boot/patches/100-netusg20.patch574
-rw-r--r--target/linux/at91/image/u-boot/patches/200-clock.patch24
-rw-r--r--target/linux/at91/image/u-boot/ubclient/Makefile15
-rw-r--r--target/linux/at91/image/u-boot/ubclient/ubpar.c135
5 files changed, 799 insertions, 0 deletions
diff --git a/target/linux/at91/image/u-boot/Makefile b/target/linux/at91/image/u-boot/Makefile
new file mode 100644
index 000000000..1d1b31455
--- /dev/null
+++ b/target/linux/at91/image/u-boot/Makefile
@@ -0,0 +1,51 @@
+#
+# Copyright (C) 2006 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+include $(INCLUDE_DIR)/kernel.mk
+
+PKG_NAME:=u-boot
+PKG_VERSION:=2010.06
+PKG_RELEASE:=1
+
+PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
+PKG_SOURCE_URL:=ftp://ftp.denx.de/pub/u-boot
+PKG_MD5SUM:=
+PKG_CAT:=bzcat
+
+include $(INCLUDE_DIR)/package.mk
+
+UBOOT_CONFIG=$(call qstrip,$(CONFIG_UBOOT_TARGET))
+LAN_IP=$(call qstrip,$(CONFIG_UBOOT_IPADDR))
+LAN_SERVERIP=$(call qstrip,$(CONFIG_UBOOT_SERVERIP))
+
+define Build/Compile
+ $(MAKE) -C $(PKG_BUILD_DIR) $(UBOOT_CONFIG)_config
+ export CROSS_COMPILE=$(TARGET_CROSS); \
+ export LAN_IP=$(LAN_IP); \
+ export LAN_SERVERIP=$(LAN_SERVERIP); \
+ $(MAKE) -C $(PKG_BUILD_DIR)
+ mkdir -p $(PKG_BUILD_DIR)/ubclient
+ $(CP) ./ubclient/* $(PKG_BUILD_DIR)/ubclient
+ export LAN_IP=$(LAN_IP); \
+ export LAN_SERVERIP=$(LAN_SERVERIP); \
+ #$(MAKE) -C $(PKG_BUILD_DIR)/ubclient \
+ # $(TARGET_CONFIGURE_OPTS) \
+ # CFLAGS="$(TARGET_CFLAGS) -Dtarget_$(BOARD)=1"
+endef
+
+define Build/InstallDev
+ dd if=$(PKG_BUILD_DIR)/u-boot.bin of=$(PKG_BUILD_DIR)/u-boot.block bs=232k count=1 conv=sync
+# $(INSTALL_DIR) $(STAGING_DIR)/ubclient/sbin
+# $(INSTALL_BIN) $(PKG_BUILD_DIR)/ubclient/ubpar $(STAGING_DIR)/ubclient/sbin/
+# $(CP) $(PKG_BUILD_DIR)/ubclient/ubpar ../../base-files/sbin
+ mkdir -p $(BIN_DIR)/
+ cp $(PKG_BUILD_DIR)/u-boot.bin $(BIN_DIR)/u-boot.$(PKG_VERSION).bin
+endef
+
+$(eval $(call Build/DefaultTargets))
diff --git a/target/linux/at91/image/u-boot/patches/100-netusg20.patch b/target/linux/at91/image/u-boot/patches/100-netusg20.patch
new file mode 100644
index 000000000..127372e8f
--- /dev/null
+++ b/target/linux/at91/image/u-boot/patches/100-netusg20.patch
@@ -0,0 +1,574 @@
+Add support for the NetusG20 board by Acmesystems srl.
+This board is based on AT91SAM9G20 SoC.
+
+Signed-off-by: Claudio Mignanti <c.mignanti@gmail.com>
+---
+ MAKEALL | 1 +
+ Makefile | 3 +
+ arch/arm/cpu/arm926ejs/at91/at91sam9260_devices.c | 5 +
+ board/acmesystems/netusg20/Makefile | 56 +++++++
+ board/acmesystems/netusg20/config.mk | 1 +
+ board/acmesystems/netusg20/led.c | 40 +++++
+ board/acmesystems/netusg20/netusg20.c | 152 +++++++++++++++++
+ board/acmesystems/netusg20/partition.c | 39 +++++
+ include/configs/netusg20.h | 181 +++++++++++++++++++++
+ 9 files changed, 478 insertions(+), 0 deletions(-)
+ create mode 100644 board/acmesystems/netusg20/Makefile
+ create mode 100644 board/acmesystems/netusg20/config.mk
+ create mode 100644 board/acmesystems/netusg20/led.c
+ create mode 100644 board/acmesystems/netusg20/netusg20.c
+ create mode 100644 board/acmesystems/netusg20/partition.c
+ create mode 100644 include/configs/netusg20.h
+
+diff --git a/MAKEALL b/MAKEALL
+index d6d5f5b..60e36e1 100755
+--- a/MAKEALL
++++ b/MAKEALL
+@@ -684,6 +684,7 @@ LIST_at91=" \
+ meesc \
+ mp2usb \
+ m501sk \
++ netusg20 \
+ otc570 \
+ pm9261 \
+ pm9263 \
+diff --git a/Makefile b/Makefile
+index 87d5214..b73659f 100644
+--- a/Makefile
++++ b/Makefile
+@@ -2867,6 +2867,9 @@ at91sam9g45ekes_config : unconfig
+ fi;
+ @$(MKCONFIG) -a at91sam9m10g45ek arm arm926ejs at91sam9m10g45ek atmel at91
+
++netusg20_config: unconfig
++ @$(MKCONFIG) $(@:_config=) arm arm926ejs netusg20 acmesystems at91
++
+ otc570_config : unconfig
+ @$(MKCONFIG) $(@:_config=) arm arm926ejs otc570 esd at91
+
+diff --git a/arch/arm/cpu/arm926ejs/at91/at91sam9260_devices.c b/arch/arm/cpu/arm926ejs/at91/at91sam9260_devices.c
+index 77d49ab..87ec531 100644
+--- a/arch/arm/cpu/arm926ejs/at91/at91sam9260_devices.c
++++ b/arch/arm/cpu/arm926ejs/at91/at91sam9260_devices.c
+@@ -59,7 +59,12 @@ void at91_serial3_hw_init(void)
+ {
+ at91_pmc_t *pmc = (at91_pmc_t *) AT91_PMC_BASE;
+
++#ifdef CONFIG_NETUSG20
++ /* pull-up active on DRXD*/
++ at91_set_a_periph(AT91_PIO_PORTB, 14, 1);
++#else
+ at91_set_a_periph(AT91_PIO_PORTB, 14, 0); /* DRXD */
++#endif
+ at91_set_a_periph(AT91_PIO_PORTB, 15, 1); /* DTXD */
+ writel(1 << AT91_ID_SYS, &pmc->pcer);
+ }
+diff --git a/board/acmesystems/netusg20/Makefile b/board/acmesystems/netusg20/Makefile
+new file mode 100644
+index 0000000..31589fd
+--- /dev/null
++++ b/board/acmesystems/netusg20/Makefile
+@@ -0,0 +1,56 @@
++#
++# (C) Copyright 2003-2008
++# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
++#
++# (C) Copyright 2008
++# Stelian Pop <stelian.pop@leadtechdesign.com>
++# Lead Tech Design <www.leadtechdesign.com>
++#
++# See file CREDITS for list of people who contributed to this
++# project.
++#
++# This program is free software; you can redistribute it and/or
++# modify it under the terms of the GNU General Public License as
++# published by the Free Software Foundation; either version 2 of
++# the License, or (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++# MA 02111-1307 USA
++#
++
++include $(TOPDIR)/config.mk
++
++LIB = $(obj)lib$(BOARD).a
++
++COBJS-y += netusg20.o
++COBJS-y += led.o
++COBJS-y += partition.o
++
++SRCS := $(SOBJS:.o=.S) $(COBJS-y:.o=.c)
++OBJS := $(addprefix $(obj),$(COBJS-y))
++SOBJS := $(addprefix $(obj),$(SOBJS))
++
++$(LIB): $(obj).depend $(OBJS) $(SOBJS)
++ $(AR) $(ARFLAGS) $@ $(OBJS) $(SOBJS)
++
++clean:
++ rm -f $(SOBJS) $(OBJS)
++
++distclean: clean
++ rm -f $(LIB) core *.bak $(obj).depend
++
++#########################################################################
++
++# defines $(obj).depend target
++include $(SRCTREE)/rules.mk
++
++sinclude $(obj).depend
++
++#########################################################################
+diff --git a/board/acmesystems/netusg20/config.mk b/board/acmesystems/netusg20/config.mk
+new file mode 100644
+index 0000000..ff2cfd1
+--- /dev/null
++++ b/board/acmesystems/netusg20/config.mk
+@@ -0,0 +1 @@
++TEXT_BASE = 0x23f00000
+diff --git a/board/acmesystems/netusg20/led.c b/board/acmesystems/netusg20/led.c
+new file mode 100644
+index 0000000..1016b98
+--- /dev/null
++++ b/board/acmesystems/netusg20/led.c
+@@ -0,0 +1,40 @@
++/*
++ * (C) Copyright 2007-2008
++ * Stelian Pop <stelian.pop@leadtechdesign.com>
++ * Lead Tech Design <www.leadtechdesign.com>
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++#include <common.h>
++#include <asm/arch/at91sam9260.h>
++#include <asm/arch/at91_pmc.h>
++#include <asm/arch/gpio.h>
++#include <asm/arch/io.h>
++
++
++void coloured_LED_init(void)
++{
++ /* Enable clock */
++ at91_sys_write(AT91_PMC_PCER, 1 << AT91SAM9260_ID_PIOA);
++
++ at91_set_gpio_output(CONFIG_RED_LED, 1);
++
++ at91_set_gpio_value(CONFIG_RED_LED, 1);
++}
+diff --git a/board/acmesystems/netusg20/netusg20.c b/board/acmesystems/netusg20/netusg20.c
+new file mode 100644
+index 0000000..94b4d4c
+--- /dev/null
++++ b/board/acmesystems/netusg20/netusg20.c
+@@ -0,0 +1,152 @@
++/*
++ * (C) Copyright 2007-2008
++ * Stelian Pop <stelian.pop@leadtechdesign.com>
++ * Lead Tech Design <www.leadtechdesign.com>
++ *
++ * (C) Copyright 2010
++ * Claudio Mignanti <c.mignanti@gmail.com>
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++#include <common.h>
++#include <asm/arch/at91sam9260.h>
++#include <asm/arch/at91sam9260_matrix.h>
++#include <asm/arch/at91sam9_smc.h>
++#include <asm/arch/at91_common.h>
++#include <asm/arch/at91_pmc.h>
++#include <asm/arch/at91_rstc.h>
++#include <asm/arch/gpio.h>
++#include <asm/arch/io.h>
++#include <asm/arch/hardware.h>
++#if defined(CONFIG_RESET_PHY_R) && defined(CONFIG_MACB)
++#include <net.h>
++#endif
++#include <netdev.h>
++
++DECLARE_GLOBAL_DATA_PTR;
++
++/* ------------------------------------------------------------------------- */
++/*
++ * Miscelaneous platform dependent initialisations
++ */
++
++#ifdef CONFIG_MACB
++static void at91sam9260ek_macb_hw_init(void)
++{
++ unsigned long rstc;
++
++ /* Enable clock */
++ at91_sys_write(AT91_PMC_PCER, 1 << AT91SAM9260_ID_EMAC);
++
++ /*
++ * Disable pull-up on:
++ * RXDV (PA17) => PHY normal mode (not Test mode)
++ * ERX0 (PA14) => PHY ADDR0
++ * ERX1 (PA15) => PHY ADDR1
++ * ERX2 (PA25) => PHY ADDR2
++ * ERX3 (PA26) => PHY ADDR3
++ * ECRS (PA28) => PHY ADDR4 => PHYADDR = 0x0
++ *
++ * PHY has internal pull-down
++ */
++ writel(pin_to_mask(AT91_PIN_PA14) |
++ pin_to_mask(AT91_PIN_PA15) |
++ pin_to_mask(AT91_PIN_PA17) |
++ pin_to_mask(AT91_PIN_PA25) |
++ pin_to_mask(AT91_PIN_PA26) |
++ pin_to_mask(AT91_PIN_PA28),
++ pin_to_controller(AT91_PIN_PA0) + PIO_PUDR);
++
++ rstc = at91_sys_read(AT91_RSTC_MR) & AT91_RSTC_ERSTL;
++
++ at91_sys_write(AT91_RSTC_CR, AT91_RSTC_KEY | AT91_RSTC_EXTRST);
++
++ /* Wait for end hardware reset */
++ while (!(at91_sys_read(AT91_RSTC_SR) & AT91_RSTC_NRSTL));
++
++ /* Restore NRST value */
++ at91_sys_write(AT91_RSTC_MR, AT91_RSTC_KEY |
++ (rstc) |
++ AT91_RSTC_URSTEN);
++
++ /* Re-enable pull-up */
++ writel(pin_to_mask(AT91_PIN_PA14) |
++ pin_to_mask(AT91_PIN_PA15) |
++ pin_to_mask(AT91_PIN_PA17) |
++ pin_to_mask(AT91_PIN_PA25) |
++ pin_to_mask(AT91_PIN_PA26) |
++ pin_to_mask(AT91_PIN_PA28),
++ pin_to_controller(AT91_PIN_PA0) + PIO_PUER);
++
++ at91_macb_hw_init();
++}
++#endif
++
++int board_init(void)
++{
++ /* Enable Ctrlc */
++ console_init_f();
++
++ gd->bd->bi_arch_number = MACH_TYPE_AT91SAM9G20EK;
++
++ /* adress of boot parameters */
++ gd->bd->bi_boot_params = PHYS_SDRAM + 0x100;
++
++ at91_serial_hw_init();
++#ifdef CONFIG_HAS_DATAFLASH
++ at91_spi0_hw_init((1 << 0) | (1 << 1));
++#endif
++#ifdef CONFIG_MACB
++ at91sam9260ek_macb_hw_init();
++#endif
++
++ return 0;
++}
++
++int dram_init(void)
++{
++ gd->bd->bi_dram[0].start = PHYS_SDRAM;
++ gd->bd->bi_dram[0].size = PHYS_SDRAM_SIZE;
++ return 0;
++}
++
++#ifdef CONFIG_RESET_PHY_R
++void reset_phy(void)
++{
++#ifdef CONFIG_MACB
++ /*
++ * Initialize ethernet HW addr prior to starting Linux,
++ * needed for nfsroot
++ */
++ eth_init(gd->bd);
++#endif
++}
++#endif
++
++int board_eth_init(bd_t *bis)
++{
++ int rc = 0;
++#ifdef CONFIG_MACB
++ rc = macb_eth_initialize(0, (void *)AT91SAM9260_BASE_EMAC, 0x00);
++#endif
++ return rc;
++}
++
++void show_boot_progress (int val){}
+diff --git a/board/acmesystems/netusg20/partition.c b/board/acmesystems/netusg20/partition.c
+new file mode 100644
+index 0000000..7d79e53
+--- /dev/null
++++ b/board/acmesystems/netusg20/partition.c
+@@ -0,0 +1,39 @@
++/*
++ * (C) Copyright 2008
++ * Ulf Samuelsson <ulf@atmel.com>
++ *
++ * 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 <config.h>
++#include <asm/hardware.h>
++#include <dataflash.h>
++
++AT91S_DATAFLASH_INFO dataflash_info[CONFIG_SYS_MAX_DATAFLASH_BANKS];
++
++struct dataflash_addr cs[CONFIG_SYS_MAX_DATAFLASH_BANKS] = {
++ {CONFIG_SYS_DATAFLASH_LOGIC_ADDR_CS1, 1}
++};
++
++/*define the area offsets*/
++dataflash_protect_t area_list[NB_DATAFLASH_AREA] = {
++ {0x00000000, 0x000041FF, FLAG_PROTECT_SET, 0, "Bootstrap"},
++ {0x00004200, 0x000083FF, FLAG_PROTECT_CLEAR, 0, "Environment"},
++ {0x00008400, 0x00041FFF, FLAG_PROTECT_SET, 0, "U-Boot"},
++ {0x00042000, 0x00251FFF, FLAG_PROTECT_CLEAR, 0, "Kernel"},
++ {0x00252000, 0xFFFFFFFF, FLAG_PROTECT_CLEAR, 0, "FS"},
++};
+diff --git a/include/configs/netusg20.h b/include/configs/netusg20.h
+new file mode 100644
+index 0000000..99b4f12
+--- /dev/null
++++ b/include/configs/netusg20.h
+@@ -0,0 +1,181 @@
++/*
++ * (C) Copyright 2007-2008
++ * Stelian Pop <stelian.pop@leadtechdesign.com>
++ * Lead Tech Design <www.leadtechdesign.com>
++ *
++ * Configuation settings for the NetusG20 boards.
++ *
++ * 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_AT91_LEGACY
++
++/* ARM asynchronous clock */
++#define CONFIG_SYS_AT91_MAIN_CLOCK 18432000 /* 18.432 MHz crystal */
++#define CONFIG_SYS_HZ 1000
++
++#define CONFIG_DISPLAY_CPUINFO
++
++#define CONFIG_ARM926EJS 1 /* This is an ARM926EJS Core */
++#define CONFIG_AT91SAM9G20 1 /* It's an Atmel AT91SAM9G20 SoC*/
++#define CONFIG_NETUSG20 1
++
++#define CONFIG_ARCH_CPU_INIT
++#undef CONFIG_USE_IRQ /* we don't need IRQ/FIQ stuff */
++
++#define CONFIG_CMDLINE_TAG 1 /* enable passing of ATAGs */
++#define CONFIG_SETUP_MEMORY_TAGS 1
++#define CONFIG_INITRD_TAG 1
++
++#define CONFIG_SKIP_LOWLEVEL_INIT
++#define CONFIG_SKIP_RELOCATE_UBOOT
++
++/*
++ * Hardware drivers
++ */
++#define CONFIG_AT91_GPIO 1
++#define CONFIG_ATMEL_USART 1
++#undef CONFIG_USART0
++#undef CONFIG_USART1
++#undef CONFIG_USART2
++#define CONFIG_USART3 1 /* USART 3 is DBGU */
++
++/* LED */
++#define CONFIG_AT91_LED
++#define CONFIG_RED_LED AT91_PIN_PA9 /* this is the power led */
++#define CONFIG_GREEN_LED AT91_PIN_PA6 /* this is the user led */
++
++#define CONFIG_BOOTDELAY 3
++
++/*
++ * BOOTP options
++ */
++#define CONFIG_BOOTP_BOOTFILESIZE 1
++#define CONFIG_BOOTP_BOOTPATH 1
++#define CONFIG_BOOTP_GATEWAY 1
++#define CONFIG_BOOTP_HOSTNAME 1
++
++/*
++ * Command line configuration.
++ */
++#include <config_cmd_default.h>
++#undef CONFIG_CMD_BDI
++#undef CONFIG_CMD_FPGA
++#undef CONFIG_CMD_IMI
++#undef CONFIG_CMD_IMLS
++#undef CONFIG_CMD_LOADS
++#undef CONFIG_CMD_SOURCE
++
++#define CONFIG_CMD_PING 1
++#define CONFIG_CMD_DHCP 1
++#define CONFIG_CMD_USB 1
++
++/* SDRAM */
++#define CONFIG_NR_DRAM_BANKS 1
++#define PHYS_SDRAM 0x20000000
++#define PHYS_SDRAM_SIZE 0x04000000 /* 64 megs */
++
++/* DataFlash */
++#define CONFIG_ATMEL_DATAFLASH_SPI
++#define CONFIG_HAS_DATAFLASH 1
++#define CONFIG_SYS_SPI_WRITE_TOUT (5*CONFIG_SYS_HZ)
++#define CONFIG_SYS_MAX_DATAFLASH_BANKS 1
++#define CONFIG_SYS_DATAFLASH_LOGIC_ADDR_CS1 0xD0000000 /* CS1 */
++#define AT91_SPI_CLK 15000000
++
++#define DATAFLASH_TCSS (0x22 << 16)
++#define DATAFLASH_TCHS (0x1 << 24)
++
++/* no NAND flash on this board*/
++#define CONFIG_SYS_NO_FLASH
++
++/* Ethernet */
++#define CONFIG_MACB 1
++#define CONFIG_RMII 1
++#define CONFIG_NET_MULTI 1
++#define CONFIG_NET_RETRY_COUNT 20
++#define CONFIG_RESET_PHY_R 1
++
++/* MMC */
++#define CONFIG_MMC
++#define CONFIG_CMD_MMC
++#define CONFIG_ATMEL_MCI
++#define CONFIG_CMD_AUTOSCRIPT
++#define CONFIG_CMD_IMI
++#define CONFIG_CMD_SOURCE
++
++#define MMCI_BASE 0xFFFA8000
++
++/* USB */
++#define CONFIG_USB_ATMEL
++#define CONFIG_USB_OHCI_NEW 1
++#define CONFIG_DOS_PARTITION 1
++#define CONFIG_SYS_USB_OHCI_CPU_INIT 1
++#define CONFIG_SYS_USB_OHCI_REGS_BASE 0x00500000 /* AT91SAM9260_UHP_BASE */
++#define CONFIG_SYS_USB_OHCI_SLOT_NAME "at91sam9260"
++#define CONFIG_SYS_USB_OHCI_MAX_ROOT_PORTS 2
++#define CONFIG_USB_STORAGE 1
++
++#define CONFIG_SYS_LOAD_ADDR 0x22000000 /* load address */
++
++#define CONFIG_SYS_MEMTEST_START PHYS_SDRAM
++#define CONFIG_SYS_MEMTEST_END 0x23e00000
++
++/* Filesystem */
++#define CONFIG_CMD_FAT 1
++#define CONFIG_CMD_EXT2 1
++
++/* bootstrap + u-boot + env + linux in dataflash on CS1 */
++#define CONFIG_ENV_IS_IN_DATAFLASH 1
++#define CONFIG_SYS_MONITOR_BASE (CONFIG_SYS_DATAFLASH_LOGIC_ADDR_CS1 + 0x8400)
++#define CONFIG_ENV_OFFSET 0x4200
++#define CONFIG_ENV_ADDR (CONFIG_SYS_DATAFLASH_LOGIC_ADDR_CS1 + CONFIG_ENV_OFFSET)
++#define CONFIG_ENV_SIZE 0x4200
++#define CONFIG_BOOTCOMMAND "mmc init; sleep 1; " \
++ "ext2load mmc 0 0x20000000 uImage; " \
++ "source 0x20000000"
++#define CONFIG_BOOTARGS "mem=64M console=ttyS0,115200 " \
++ "root=/dev/mmcblk0p1 rootwait"
++
++#define CONFIG_BAUDRATE 115200
++#define CONFIG_SYS_BAUDRATE_TABLE {115200 , 19200, 38400, 57600, 9600 }
++
++#define CONFIG_SYS_PROMPT "U-Boot> "
++#define CONFIG_SYS_CBSIZE 256
++#define CONFIG_SYS_MAXARGS 16
++#define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE + sizeof(CONFIG_SYS_PROMPT) + 16)
++#define CONFIG_SYS_LONGHELP 1
++#define CONFIG_CMDLINE_EDITING 1
++
++/*
++ * Size of malloc() pool
++ */
++#define CONFIG_SYS_MALLOC_LEN ROUND(3 * CONFIG_ENV_SIZE + 128*1024, 0x1000)
++#define CONFIG_SYS_GBL_DATA_SIZE 128 /* 128 bytes for initial data */
++
++#define CONFIG_STACKSIZE (32*1024) /* regular stack */
++
++#ifdef CONFIG_USE_IRQ
++#error CONFIG_USE_IRQ not supported
++#endif
++
++#endif
+--
+1.7.0.4
+
+
diff --git a/target/linux/at91/image/u-boot/patches/200-clock.patch b/target/linux/at91/image/u-boot/patches/200-clock.patch
new file mode 100644
index 000000000..fbfb6415e
--- /dev/null
+++ b/target/linux/at91/image/u-boot/patches/200-clock.patch
@@ -0,0 +1,24 @@
+The function get_mci_clk_rate is used inside atmel_mci driver
+but never defined. Fix this typo.
+
+Signed-off-by: Claudio Mignanti <c.mignanti@gmail.com>
+---
+ drivers/mmc/atmel_mci.c | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/drivers/mmc/atmel_mci.c b/drivers/mmc/atmel_mci.c
+index 3946ffe..628aac9 100644
+--- a/drivers/mmc/atmel_mci.c
++++ b/drivers/mmc/atmel_mci.c
+@@ -67,7 +67,7 @@ static void mci_set_mode(unsigned long hz, unsigned long blklen)
+ unsigned long bus_hz;
+ unsigned long clkdiv;
+
+- bus_hz = get_mci_clk_rate();
++ bus_hz = get_mck_clk_rate();
+ clkdiv = (bus_hz / hz) / 2 - 1;
+
+ pr_debug("mmc: setting clock %lu Hz, block size %lu\n",
+--
+1.7.0.4
+
diff --git a/target/linux/at91/image/u-boot/ubclient/Makefile b/target/linux/at91/image/u-boot/ubclient/Makefile
new file mode 100644
index 000000000..f8ff67cd1
--- /dev/null
+++ b/target/linux/at91/image/u-boot/ubclient/Makefile
@@ -0,0 +1,15 @@
+#
+
+all: ubpar
+
+crc32.c:
+ ln -s ../lib_generic/crc32.c ./
+
+%.o: %.c
+ $(CC) -I ../include $(CFLAGS) $(EXTRA_FLAGS) -DLAN_IP=$(LAN_IP) -DLAN_SERVERIP=$(LAN_SERVERIP) -c -o $@ $^
+
+ubpar: ubpar.o crc32.o
+ $(CC) -o $@ $^
+
+clean:
+ rm -f *.o ubpar
diff --git a/target/linux/at91/image/u-boot/ubclient/ubpar.c b/target/linux/at91/image/u-boot/ubclient/ubpar.c
new file mode 100644
index 000000000..edc5b2cdb
--- /dev/null
+++ b/target/linux/at91/image/u-boot/ubclient/ubpar.c
@@ -0,0 +1,135 @@
+/*
+ * ubparams.c
+ *
+ * Generate a u-boot parameter block with correct crc
+ *
+ * (C) 1007 Guthrie Consulting
+ * hamish@prodigi.ch
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifndef __ASSEMBLY__
+#define __ASSEMBLY__
+#endif
+#define __ASM_STUB_PROCESSOR_H__
+#include <config.h>
+#undef __ASSEMBLY__
+#include <environment.h>
+
+#define XMK_STR(x) #x
+#define MK_STR(x) XMK_STR(x)
+
+extern unsigned long crc32 (unsigned long, const unsigned char *, unsigned int);
+
+#if !defined(ENV_CRC)
+#define ENV_CRC ~0
+#endif
+
+#ifdef LAN_IP
+ #warning LAN_IP
+#else
+ #warning LAN_IP NOT DEFINED
+#endif
+#ifdef LAN_SERVERIP
+ #warning LAN_SERVERIP
+#else
+ #warning LAN_SERVERIP NOT DEFINED
+#endif
+
+static char *environment[] = {
+ "bootdelay=3\0"
+ "baudrate=115200\0"
+ "stdin=serial\0"
+ "stdout=serial\0"
+ "stderr=serial\0"
+ "fbargs=setenv bootargs root=/dev/mtdblock3 ro console=/dev/ttyS0,115200,mem=32M\0"
+ "rdba=setenv bootargs root=/dev/ram rw initrd=0x21200000,6000000 ramdisk_size=20000 console=/dev/ttyS0,115200,mem=32M\0"
+ "rdram=run rdba; tftp 21000000 uImage; tftp 21200000 root.squashfs; bootm 21000000\0"
+ "flash=run fbargs; bootm 0xc0042000\0"
+ "bootargs=setenv bootargs root=/dev/mtdblock3 ro console=/dev/ttyS0,115200,mem=32M\0"
+ "bootcmd=bootm 0xc0042000\0"
+ "ipaddr=" MK_STR(LAN_IP) "\0"
+ "serverip=" MK_STR(LAN_SERVERIP) "\0"
+ "\0"
+ };
+
+int main(int argc, char *argv[]) {
+ env_t *envptr;
+ char *src, *srcptr;
+ char *dataptr;
+ FILE *params;
+ int argfail = 1;
+ char newmac[30];
+ char newser[30];
+ int paramlen = 0;
+ int progmac = 0;
+ int progser = 0;
+
+ if (argc < 3) {
+ printf ("Invalid arguments\n");
+ return 1;
+ }
+
+ switch (argc) {
+ case 5:
+ if (strcmp(argv[3], "--serial") == 0) {
+ argfail = 0;
+ sprintf(newser, "serial#=%s", argv[4]);
+ progser = 1;
+ }
+ case 3:
+ if (strcmp(argv[1], "--mac") == 0) {
+ argfail = 0;
+ sprintf(newmac, "ethaddr=%s", argv[2]);
+ progmac = 1;
+ }
+ else
+ argfail = 1;
+ }
+
+ if (argfail) {
+ printf("Invalid arguments\n");
+ return 1;
+ }
+
+
+ src = srcptr = *environment;
+ envptr = (env_t *)malloc(CFG_ENV_SIZE);
+ dataptr = (char *)envptr + ENV_HEADER_SIZE;
+
+ while(*srcptr) {
+ //printf("%d, %s\n", strlen(srcptr), srcptr);
+ paramlen += strlen(srcptr) + 1;
+ srcptr += strlen(srcptr) + 1;
+ }
+
+ printf("Make u-boot params\n");
+ printf("Params size is %d\n", CFG_ENV_SIZE);
+
+ memset(envptr, 0, CFG_ENV_SIZE);
+ memcpy(dataptr, src, paramlen);
+ dataptr += paramlen;
+
+ if (progmac) {
+ memcpy(dataptr, newmac, strlen(newmac));
+ dataptr += strlen(newmac) + 1;
+ }
+
+ if (progser) {
+ memcpy(dataptr, newser, strlen(newser));
+ dataptr += strlen(newser) + 1;
+ }
+
+ envptr->crc = crc32(0, envptr->data, ENV_SIZE);
+
+ params = fopen("/dev/mtd1", "w");
+ fwrite(envptr, CFG_ENV_SIZE, 1, params);
+ fclose(params);
+
+ free(envptr);
+ return 0;
+}