By defining "UBOOT_MACHINES" in your config, you can
have multiple binaries built.

Example:
UBOOT_MACHINES = "at91sam9m10g45ek_sd at91sam9m10g45ek"

Note that while AT91 boards can compile with the
patches, some stuff like SD-Card is broken,
so it is not yet default.

Signed-off-by: Ulf Samuelsson <[email protected]>
---
 recipes/libgpod/libimobiledevice_1.0.0.bb          |    2 +-
 recipes/python/python.inc                          |    1 +
 .../at91/0001-Make-AT91-boards-compilable.patch    |  291 +++++++++++++++++++
 .../at91/0002-Add-better-dataflash-support.patch   |  299 ++++++++++++++++++++
 ...nable-SD-Card-boot-for-SAM9M10-G45-boards.patch |  265 +++++++++++++++++
 recipes/u-boot/u-boot_2010.12.bb                   |   51 ++++
 recipes/u-boot/u-boot_r2.inc                       |   90 ++++++
 7 files changed, 998 insertions(+), 1 deletions(-)
 create mode 100644 
recipes/u-boot/u-boot-2010.12/at91/0001-Make-AT91-boards-compilable.patch
 create mode 100644 
recipes/u-boot/u-boot-2010.12/at91/0002-Add-better-dataflash-support.patch
 create mode 100644 
recipes/u-boot/u-boot-2010.12/at91/0003-Enable-SD-Card-boot-for-SAM9M10-G45-boards.patch
 create mode 100644 recipes/u-boot/u-boot_2010.12.bb
 create mode 100644 recipes/u-boot/u-boot_r2.inc

diff --git a/recipes/libgpod/libimobiledevice_1.0.0.bb 
b/recipes/libgpod/libimobiledevice_1.0.0.bb
index 8744874..5e98802 100644
--- a/recipes/libgpod/libimobiledevice_1.0.0.bb
+++ b/recipes/libgpod/libimobiledevice_1.0.0.bb
@@ -1,7 +1,7 @@
 DESCRIPTION = "A protocol library to access an iPhone or iPod Touch in Linux"
 LICENSE = "GPLv2/LGPLv2.1"
 
-DEPENDS = "libplist swig usbmuxd glib-2.0 gnutls libgcrypt"
+DEPENDS = "libplist swig usbmuxd glib-2.0 gnutls libgcrypt libtasn1"
 
 inherit autotools
 
diff --git a/recipes/python/python.inc b/recipes/python/python.inc
index c325b91..09d2392 100644
--- a/recipes/python/python.inc
+++ b/recipes/python/python.inc
@@ -20,4 +20,5 @@ EXTRA_OECONF = "\
   --with-signal-module \
   --with-wctype-functions \
   --enable-shared \
+  --disable-ipv6 \
 "
diff --git 
a/recipes/u-boot/u-boot-2010.12/at91/0001-Make-AT91-boards-compilable.patch 
b/recipes/u-boot/u-boot-2010.12/at91/0001-Make-AT91-boards-compilable.patch
new file mode 100644
index 0000000..afeb1be
--- /dev/null
+++ b/recipes/u-boot/u-boot-2010.12/at91/0001-Make-AT91-boards-compilable.patch
@@ -0,0 +1,291 @@
+From 641801534e3f55deff5ba90e3aa4095ffe932f42 Mon Sep 17 00:00:00 2001
+From: Ulf Samuelsson <ulf@narya.(none)>
+Date: Sat, 15 Jan 2011 22:12:31 +0100
+Subject: [PATCH 1/3] Make AT91 boards compilable.
+
+Many AT91 boards have not been updated.
+Add/delete defines blocking compilation
+
+AT91_BASE_SPI1
+CONFIG_AT91FAMILY
+CONFIG_SYS_SDRAM_BASE
+CONFIG_SYS_INIT_SP_ADDR
+CONFIG_AT91_LEGACY
+CONFIG_CMD_NFS (undef)
+Add "reset_timer_masked" and "get_timer_masked"
+---
+ Makefile                                  |    2 +-
+ arch/arm/cpu/arm926ejs/at91/timer.c       |   12 +++++++++++-
+ arch/arm/include/asm/arch-at91/hardware.h |    2 ++
+ include/configs/at91cap9adk.h             |    5 +++++
+ include/configs/at91rm9200dk.h            |    9 +++++++++
+ include/configs/at91rm9200ek.h            |    8 ++++++++
+ include/configs/at91sam9260ek.h           |    5 +++++
+ include/configs/at91sam9261ek.h           |    5 +++++
+ include/configs/at91sam9263ek.h           |    7 +++++++
+ include/configs/at91sam9m10g45ek.h        |    5 +++++
+ include/configs/at91sam9rlek.h            |    6 ++++++
+ 11 files changed, 64 insertions(+), 2 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index 9055028..19f2307 100644
+--- a/Makefile
++++ b/Makefile
+@@ -527,7 +527,7 @@ unconfig:
+ 
+ sinclude .boards.depend
+ .boards.depend:       boards.cfg
+-      awk '(NF && $$1 !~ /^#/) { print $$1 ": " $$1 "_config; $$(MAKE)" }' $< 
> $@
++      @awk '(NF && $$1 !~ /^#/) { print $$1 ": " $$1 "_config; $$(MAKE)" }' 
$< > $@
+ 
+ #
+ # Functions to generate common board directory names
+diff --git a/arch/arm/cpu/arm926ejs/at91/timer.c 
b/arch/arm/cpu/arm926ejs/at91/timer.c
+index 82b8d7e..6773186 100644
+--- a/arch/arm/cpu/arm926ejs/at91/timer.c
++++ b/arch/arm/cpu/arm926ejs/at91/timer.c
+@@ -127,9 +127,19 @@ void reset_timer(void)
+       gd->timer_reset_value = get_ticks();
+ }
+ 
++void reset_timer_masked(void)
++{
++      reset_timer();
++}
++
++ulong get_timer_masked(void)
++{
++      return tick_to_time(get_ticks() - gd->timer_reset_value);
++}
++
+ ulong get_timer(ulong base)
+ {
+-      return tick_to_time(get_ticks() - gd->timer_reset_value) - base;
++      return get_timer_masked() - base;
+ }
+ 
+ /*
+diff --git a/arch/arm/include/asm/arch-at91/hardware.h 
b/arch/arm/include/asm/arch-at91/hardware.h
+index 6b44d61..d701dc0 100644
+--- a/arch/arm/include/asm/arch-at91/hardware.h
++++ b/arch/arm/include/asm/arch-at91/hardware.h
+@@ -34,6 +34,7 @@
+ #elif defined(CONFIG_AT91SAM9263)
+ #include <asm/arch/at91sam9263.h>
+ #define AT91_BASE_SPI AT91SAM9263_BASE_SPI0
++#define AT91_BASE_SPI1        AT91SAM9263_BASE_SPI1
+ #define AT91_ID_UHP   AT91SAM9263_ID_UHP
+ #define AT91_PMC_UHP  AT91SAM926x_PMC_UHP
+ #elif defined(CONFIG_AT91SAM9RL)
+@@ -44,6 +45,7 @@
+ #include <asm/arch/at91sam9g45.h>
+ #define AT91_BASE_EMAC  AT91SAM9G45_BASE_EMAC
+ #define AT91_BASE_SPI   AT91SAM9G45_BASE_SPI0
++#define AT91_BASE_SPI1  AT91SAM9G45_BASE_SPI1
+ #define AT91_ID_UHP     AT91SAM9G45_ID_UHPHS
+ #define AT91_PMC_UHP    AT91SAM926x_PMC_UHP
+ #elif defined(CONFIG_AT91CAP9)
+diff --git a/include/configs/at91cap9adk.h b/include/configs/at91cap9adk.h
+index 49c923f..501a8ef 100644
+--- a/include/configs/at91cap9adk.h
++++ b/include/configs/at91cap9adk.h
+@@ -28,6 +28,7 @@
+ #define __CONFIG_H
+ 
+ #define CONFIG_AT91_LEGACY
++#define       CONFIG_AT91FAMILY
+ 
+ /* ARM asynchronous clock */
+ #define CONFIG_SYS_AT91_MAIN_CLOCK    12000000        /* 12 MHz crystal */
+@@ -209,6 +210,10 @@
+  */
+ #define CONFIG_SYS_MALLOC_LEN         ROUND(CONFIG_ENV_SIZE + 128*1024, 
0x1000)
+ 
++#define CONFIG_SYS_SDRAM_BASE PHYS_SDRAM
++#define CONFIG_SYS_INIT_SP_ADDR       (CONFIG_SYS_SDRAM_BASE + 0x1000 - \
++                              GENERATED_GBL_DATA_SIZE)
++
+ #define CONFIG_STACKSIZE      (32*1024)       /* regular stack */
+ 
+ #ifdef CONFIG_USE_IRQ
+diff --git a/include/configs/at91rm9200dk.h b/include/configs/at91rm9200dk.h
+index 15de310..7ae5083 100644
+--- a/include/configs/at91rm9200dk.h
++++ b/include/configs/at91rm9200dk.h
+@@ -26,6 +26,11 @@
+ #define __CONFIG_H
+ 
+ #define CONFIG_AT91_LEGACY
++#define       CONFIG_AT91FAMILY
++
++#define CONFIG_SYS_SDRAM_BASE PHYS_SDRAM
++#define CONFIG_SYS_INIT_SP_ADDR       (CONFIG_SYS_SDRAM_BASE + 0x1000 - \
++                              GENERATED_GBL_DATA_SIZE)
+ 
+ /* ARM asynchronous clock */
+ #define AT91C_MAIN_CLOCK      179712000       /* from 18.432 MHz crystal 
(18432000 / 4 * 39) */
+@@ -193,6 +198,10 @@
+ #define CONFIG_SYS_HZ_CLOCK AT91C_MASTER_CLOCK/2      /* AT91C_TC0_CMR is 
implicitly set to */
+                                               /* AT91C_TC_TIMER_DIV1_CLOCK */
+ 
++#define CONFIG_SYS_SDRAM_BASE PHYS_SDRAM
++#define CONFIG_SYS_INIT_SP_ADDR       (CONFIG_SYS_SDRAM_BASE + 0x1000 - \
++                              GENERATED_GBL_DATA_SIZE)
++
+ #define CONFIG_STACKSIZE      (32*1024)       /* regular stack */
+ 
+ #ifdef CONFIG_USE_IRQ
+diff --git a/include/configs/at91rm9200ek.h b/include/configs/at91rm9200ek.h
+index 810023a..29b5116 100644
+--- a/include/configs/at91rm9200ek.h
++++ b/include/configs/at91rm9200ek.h
+@@ -30,6 +30,9 @@
+ #ifndef __AT91RM9200EK_CONFIG_H__
+ #define __AT91RM9200EK_CONFIG_H__
+ 
++#define CONFIG_AT91_LEGACY
++#define       CONFIG_AT91FAMILY
++
+ #include <asm/sizes.h>
+ 
+ /*
+@@ -220,6 +223,11 @@
+  */
+ #define CONFIG_SYS_MALLOC_LEN         ROUND(3 * CONFIG_ENV_SIZE + SZ_128K, \
+                                            SZ_4K)
++
++#define CONFIG_SYS_SDRAM_BASE PHYS_SDRAM
++#define CONFIG_SYS_INIT_SP_ADDR       (CONFIG_SYS_SDRAM_BASE + 0x1000 - \
++                              GENERATED_GBL_DATA_SIZE)
++
+ /* size in bytes reserved for initial data */
+ 
+ #define CONFIG_SYS_INIT_SP_ADDR               (CONFIG_SYS_SDRAM_BASE + SZ_4K \
+diff --git a/include/configs/at91sam9260ek.h b/include/configs/at91sam9260ek.h
+index 5e7dee5..1f04b15 100644
+--- a/include/configs/at91sam9260ek.h
++++ b/include/configs/at91sam9260ek.h
+@@ -28,6 +28,7 @@
+ #define __CONFIG_H
+ 
+ #define CONFIG_AT91_LEGACY
++#define       CONFIG_AT91FAMILY
+ 
+ /* ARM asynchronous clock */
+ #define CONFIG_SYS_AT91_MAIN_CLOCK    18432000        /* 18.432 MHz crystal */
+@@ -213,6 +214,10 @@
+  */
+ #define CONFIG_SYS_MALLOC_LEN         ROUND(3 * CONFIG_ENV_SIZE + 128*1024, 
0x1000)
+ 
++#define CONFIG_SYS_SDRAM_BASE PHYS_SDRAM
++#define CONFIG_SYS_INIT_SP_ADDR       (CONFIG_SYS_SDRAM_BASE + 0x1000 - \
++                              GENERATED_GBL_DATA_SIZE)
++
+ #define CONFIG_STACKSIZE      (32*1024)       /* regular stack */
+ 
+ #ifdef CONFIG_USE_IRQ
+diff --git a/include/configs/at91sam9261ek.h b/include/configs/at91sam9261ek.h
+index 401478b..d5c8d0d 100644
+--- a/include/configs/at91sam9261ek.h
++++ b/include/configs/at91sam9261ek.h
+@@ -28,6 +28,7 @@
+ #define __CONFIG_H
+ 
+ #define CONFIG_AT91_LEGACY
++#define       CONFIG_AT91FAMILY
+ 
+ /* ARM asynchronous clock */
+ #define CONFIG_SYS_AT91_MAIN_CLOCK    18432000        /* 18.432 MHz crystal */
+@@ -231,6 +232,10 @@
+  */
+ #define CONFIG_SYS_MALLOC_LEN         ROUND(3 * CONFIG_ENV_SIZE + 128*1024, 
0x1000)
+ 
++#define CONFIG_SYS_SDRAM_BASE PHYS_SDRAM
++#define CONFIG_SYS_INIT_SP_ADDR       (CONFIG_SYS_SDRAM_BASE + 0x1000 - \
++                              GENERATED_GBL_DATA_SIZE)
++
+ #define CONFIG_STACKSIZE      (32*1024)       /* regular stack */
+ 
+ #ifdef CONFIG_USE_IRQ
+diff --git a/include/configs/at91sam9263ek.h b/include/configs/at91sam9263ek.h
+index f6cb406..3db8bd0 100644
+--- a/include/configs/at91sam9263ek.h
++++ b/include/configs/at91sam9263ek.h
+@@ -27,6 +27,9 @@
+ #ifndef __CONFIG_H
+ #define __CONFIG_H
+ 
++#define CONFIG_AT91_LEGACY
++#define       CONFIG_AT91FAMILY
++
+ /* ARM asynchronous clock */
+ #define CONFIG_SYS_AT91_MAIN_CLOCK    16367660        /* 16.367 MHz crystal */
+ #define CONFIG_SYS_HZ         1000
+@@ -341,6 +344,10 @@
+  */
+ #define CONFIG_SYS_MALLOC_LEN         ROUND(3 * CONFIG_ENV_SIZE + 128*1024, 
0x1000)
+ 
++#define CONFIG_SYS_SDRAM_BASE PHYS_SDRAM
++#define CONFIG_SYS_INIT_SP_ADDR       (CONFIG_SYS_SDRAM_BASE + 0x1000 - \
++                              GENERATED_GBL_DATA_SIZE)
++
+ #define CONFIG_STACKSIZE      (32*1024)       /* regular stack */
+ 
+ #ifdef CONFIG_USE_IRQ
+diff --git a/include/configs/at91sam9m10g45ek.h 
b/include/configs/at91sam9m10g45ek.h
+index de74dcf..5fcc0f4 100644
+--- a/include/configs/at91sam9m10g45ek.h
++++ b/include/configs/at91sam9m10g45ek.h
+@@ -28,6 +28,7 @@
+ #define __CONFIG_H
+ 
+ #define CONFIG_AT91_LEGACY
++#define       CONFIG_AT91FAMILY
+ 
+ /* ARM asynchronous clock */
+ #define CONFIG_SYS_AT91_MAIN_CLOCK    12000000        /* from 12 MHz crystal 
*/
+@@ -217,6 +218,10 @@
+  */
+ #define CONFIG_SYS_MALLOC_LEN         ROUND(3 * CONFIG_ENV_SIZE + 128*1024, 
0x1000)
+ 
++#define CONFIG_SYS_SDRAM_BASE PHYS_SDRAM
++#define CONFIG_SYS_INIT_SP_ADDR       (CONFIG_SYS_SDRAM_BASE + 0x1000 - \
++                              GENERATED_GBL_DATA_SIZE)
++
+ #define CONFIG_STACKSIZE      (32*1024)       /* regular stack */
+ 
+ #ifdef CONFIG_USE_IRQ
+diff --git a/include/configs/at91sam9rlek.h b/include/configs/at91sam9rlek.h
+index 8dbd082..08ef270 100644
+--- a/include/configs/at91sam9rlek.h
++++ b/include/configs/at91sam9rlek.h
+@@ -28,6 +28,7 @@
+ #define __CONFIG_H
+ 
+ #define CONFIG_AT91_LEGACY
++#define       CONFIG_AT91FAMILY
+ 
+ /* ARM asynchronous clock */
+ #define CONFIG_SYS_AT91_MAIN_CLOCK    12000000        /* 12 MHz crystal */
+@@ -85,6 +86,7 @@
+ #undef CONFIG_CMD_IMLS
+ #undef CONFIG_CMD_LOADS
+ #undef CONFIG_CMD_NET
++#undef CONFIG_CMD_NFS
+ #undef CONFIG_CMD_SOURCE
+ #undef CONFIG_CMD_USB
+ 
+@@ -176,6 +178,10 @@
+  */
+ #define CONFIG_SYS_MALLOC_LEN         ROUND(3 * CONFIG_ENV_SIZE + 128*1024, 
0x1000)
+ 
++#define CONFIG_SYS_SDRAM_BASE PHYS_SDRAM
++#define CONFIG_SYS_INIT_SP_ADDR       (CONFIG_SYS_SDRAM_BASE + 0x1000 - \
++                              GENERATED_GBL_DATA_SIZE)
++
+ #define CONFIG_STACKSIZE      (32*1024)       /* regular stack */
+ 
+ #ifdef CONFIG_USE_IRQ
+-- 
+1.7.1
+
diff --git 
a/recipes/u-boot/u-boot-2010.12/at91/0002-Add-better-dataflash-support.patch 
b/recipes/u-boot/u-boot-2010.12/at91/0002-Add-better-dataflash-support.patch
new file mode 100644
index 0000000..fe91c44
--- /dev/null
+++ b/recipes/u-boot/u-boot-2010.12/at91/0002-Add-better-dataflash-support.patch
@@ -0,0 +1,299 @@
+From e5f7f399a5fa8cb7d0e03b7b44b9cc8e0ce5b9af Mon Sep 17 00:00:00 2001
+From: Ulf Samuelsson <[email protected]>
+Date: Sat, 15 Jan 2011 22:27:30 +0100
+Subject: [PATCH 2/3] Add better dataflash support
+
+---
+ Makefile                                  |    1 +
+ arch/arm/include/asm/arch-at91/at91_spi.h |    8 ++++
+ board/atmel/at91sam9m10g45ek/Makefile     |    1 +
+ board/atmel/at91sam9m10g45ek/partition.c  |   40 +++++++++++++++++++++
+ drivers/spi/atmel_dataflash_spi.c         |   26 +++++++++++--
+ include/configs/at91sam9m10g45ek.h        |   55 +++++++++++++++++-----------
+ 6 files changed, 105 insertions(+), 26 deletions(-)
+ create mode 100644 board/atmel/at91sam9m10g45ek/partition.c
+
+diff --git a/Makefile b/Makefile
+index 19f2307..3cd696c 100644
+--- a/Makefile
++++ b/Makefile
+@@ -875,6 +875,7 @@ at91sam9g45ekes_config     :       unconfig
+       @if [ "$(findstring _nandflash,$@)" ] ; then \
+               echo "#define CONFIG_SYS_USE_NANDFLASH 1"       
>>$(obj)include/config.h ; \
+       else \
++              echo "#define CONFIG_SYS_USE_DATAFLASH 1"       
>>$(obj)include/config.h ; \
+               echo "#define CONFIG_ATMEL_SPI 1"       
>>$(obj)include/config.h ; \
+       fi;
+       @$(MKCONFIG) -n $@ -a at91sam9m10g45ek arm arm926ejs at91sam9m10g45ek 
atmel at91
+diff --git a/arch/arm/include/asm/arch-at91/at91_spi.h 
b/arch/arm/include/asm/arch-at91/at91_spi.h
+index c520e89..3e1e3b4 100644
+--- a/arch/arm/include/asm/arch-at91/at91_spi.h
++++ b/arch/arm/include/asm/arch-at91/at91_spi.h
+@@ -80,8 +80,16 @@ typedef struct at91_spi {
+ #define AT91_SPI_IMR          0x1c                    /* Interrupt Mask 
Register */
+ 
+ #define AT91_SPI_CSR(n)               (0x30 + ((n) * 4))      /* Chip Select 
Registers 0-3 */
++#define               AT91_SPI_NCPOL          (0    <<  0)            /* 
Clock Polarity */
+ #define               AT91_SPI_CPOL           (1    <<  0)            /* 
Clock Polarity */
++#define               AT91_SPI_CPHA           (0    <<  1)            /* 
Clock Phase */
+ #define               AT91_SPI_NCPHA          (1    <<  1)            /* 
Clock Phase */
++
++#define               AT91_SPI_MODE0  (AT91_SPI_NCPOL | AT91_SPI_NCPHA)
++#define               AT91_SPI_MODE1  (AT91_SPI_NCPOL | AT91_SPI_CPHA)
++#define               AT91_SPI_MODE2  (AT91_SPI_CPOL  | AT91_SPI_NCPHA)
++#define               AT91_SPI_MODE3  (AT91_SPI_CPOL  | AT91_SPI_CPHA)
++
+ #define               AT91_SPI_CSAAT          (1    <<  3)            /* Chip 
Select Active After Transfer [SAM9261 only] */
+ #define               AT91_SPI_BITS           (0xf  <<  4)            /* Bits 
Per Transfer */
+ #define                       AT91_SPI_BITS_8         (0 << 4)
+diff --git a/board/atmel/at91sam9m10g45ek/Makefile 
b/board/atmel/at91sam9m10g45ek/Makefile
+index 7aa2521..3feaa25 100644
+--- a/board/atmel/at91sam9m10g45ek/Makefile
++++ b/board/atmel/at91sam9m10g45ek/Makefile
+@@ -31,6 +31,7 @@ LIB  = $(obj)lib$(BOARD).o
+ 
+ COBJS-y += at91sam9m10g45ek.o
+ COBJS-y += led.o
++COBJS-$(CONFIG_HAS_DATAFLASH) += partition.o
+ 
+ SRCS  := $(SOBJS:.o=.S) $(COBJS-y:.o=.c)
+ OBJS  := $(addprefix $(obj),$(COBJS-y))
+diff --git a/board/atmel/at91sam9m10g45ek/partition.c 
b/board/atmel/at91sam9m10g45ek/partition.c
+new file mode 100644
+index 0000000..2629c67
+--- /dev/null
++++ b/board/atmel/at91sam9m10g45ek/partition.c
+@@ -0,0 +1,40 @@
++/*
++ * (C) Copyright 2008
++ * Ulf Samuelsson <[email protected]>
++ *
++ * 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_CS0, 0},       /* Logical adress, CS */
++      {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/drivers/spi/atmel_dataflash_spi.c 
b/drivers/spi/atmel_dataflash_spi.c
+index 4a5c4aa..83ed184 100644
+--- a/drivers/spi/atmel_dataflash_spi.c
++++ b/drivers/spi/atmel_dataflash_spi.c
+@@ -38,8 +38,15 @@
+ #define AT91_SPI_PCS2_DATAFLASH_CARD  0xB     /* Chip Select 2: NPCS2%1011 */
+ #define AT91_SPI_PCS3_DATAFLASH_CARD  0x7     /* Chip Select 3: NPCS3%0111 */
+ 
++#ifndef       AT91_SPI_MODE
++#define       AT91_SPI_MODE   AT91_SPI_MODE0
++#endif
++
+ void AT91F_SpiInit(void)
+ {
++      unsigned int    mr,sr,imr;
++      unsigned int    csr0, csr1, csr2, csr3;
++
+       /* Reset the SPI */
+       writel(AT91_SPI_SWRST, AT91_BASE_SPI + AT91_SPI_CR);
+ 
+@@ -48,7 +55,7 @@ void AT91F_SpiInit(void)
+              AT91_BASE_SPI + AT91_SPI_MR);
+ 
+       /* Configure CS0 */
+-      writel(AT91_SPI_NCPHA |
++      writel(AT91_SPI_MODE |
+              (AT91_SPI_DLYBS & DATAFLASH_TCSS) |
+              (AT91_SPI_DLYBCT & DATAFLASH_TCHS) |
+              ((get_mck_clk_rate() / AT91_SPI_CLK) << 8),
+@@ -56,7 +63,7 @@ void AT91F_SpiInit(void)
+ 
+ #ifdef CONFIG_SYS_DATAFLASH_LOGIC_ADDR_CS1
+       /* Configure CS1 */
+-      writel(AT91_SPI_NCPHA |
++      writel(AT91_SPI_MODE |
+              (AT91_SPI_DLYBS & DATAFLASH_TCSS) |
+              (AT91_SPI_DLYBCT & DATAFLASH_TCHS) |
+              ((get_mck_clk_rate() / AT91_SPI_CLK) << 8),
+@@ -64,7 +71,7 @@ void AT91F_SpiInit(void)
+ #endif
+ #ifdef CONFIG_SYS_DATAFLASH_LOGIC_ADDR_CS2
+       /* Configure CS2 */
+-      writel(AT91_SPI_NCPHA |
++      writel(AT91_SPI_MODE |
+              (AT91_SPI_DLYBS & DATAFLASH_TCSS) |
+              (AT91_SPI_DLYBCT & DATAFLASH_TCHS) |
+              ((get_mck_clk_rate() / AT91_SPI_CLK) << 8),
+@@ -72,7 +79,7 @@ void AT91F_SpiInit(void)
+ #endif
+ #ifdef CONFIG_SYS_DATAFLASH_LOGIC_ADDR_CS3
+       /* Configure CS3 */
+-      writel(AT91_SPI_NCPHA |
++      writel(AT91_SPI_MODE |
+              (AT91_SPI_DLYBS & DATAFLASH_TCSS) |
+              (AT91_SPI_DLYBCT & DATAFLASH_TCHS) |
+              ((get_mck_clk_rate() / AT91_SPI_CLK) << 8),
+@@ -88,7 +95,18 @@ void AT91F_SpiInit(void)
+        * Add tempo to get SPI in a safe state.
+        * Should not be needed for new silicon (Rev B)
+        */
++      printf("CPU running at %d Hz\n",get_cpu_clk_rate());
++      printf("MCK running at %d Hz\n",get_mck_clk_rate());
++      printf("SPI_MR          0x%08x\n",mr=readl(AT91_BASE_SPI + 
AT91_SPI_MR));
++      printf("SPI_SR          0x%08x\n",sr=readl(AT91_BASE_SPI + 
AT91_SPI_SR));
++      printf("SPI_IMR         0x%08x\n",imr=readl(AT91_BASE_SPI + 
AT91_SPI_IMR));
++      printf("SPI_CSR0        0x%08x\n",csr0=readl(AT91_BASE_SPI + 
AT91_SPI_CSR(0)));
++      printf("SPI_CSR1        0x%08x\n",csr1=readl(AT91_BASE_SPI + 
AT91_SPI_CSR(1)));
++      printf("SPI_CSR2        0x%08x\n",csr2=readl(AT91_BASE_SPI + 
AT91_SPI_CSR(2)));
++      printf("SPI_CSR3        0x%08x\n",csr3=readl(AT91_BASE_SPI + 
AT91_SPI_CSR(3)));
++      printf("SPI SPEED =     %d Hz\n", get_mck_clk_rate()/ ((csr0 >> 8) & 
0xff));
+       udelay(500000);
++
+       readl(AT91_BASE_SPI + AT91_SPI_SR);
+       readl(AT91_BASE_SPI + AT91_SPI_RDR);
+ 
+diff --git a/include/configs/at91sam9m10g45ek.h 
b/include/configs/at91sam9m10g45ek.h
+index 5fcc0f4..63fa11c 100644
+--- a/include/configs/at91sam9m10g45ek.h
++++ b/include/configs/at91sam9m10g45ek.h
+@@ -3,7 +3,7 @@
+  * Stelian Pop <[email protected]>
+  * Lead Tech Design <www.leadtechdesign.com>
+  *
+- * Configuation settings for the AT91SAM9M10G45EK board(and AT91SAM9G45EKES).
++ * Configuration settings for the AT91SAM9M10G45EK board(and AT91SAM9G45EKES).
+  *
+  * See file CREDITS for list of people who contributed to this
+  * project.
+@@ -96,8 +96,8 @@
+ #undef CONFIG_CMD_FPGA
+ #undef CONFIG_CMD_IMI
+ #undef CONFIG_CMD_IMLS
+-#undef CONFIG_CMD_AUTOSCRIPT
+ #undef CONFIG_CMD_LOADS
++#undef CONFIG_CMD_SOURCE
+ 
+ #define CONFIG_CMD_PING               1
+ #define CONFIG_CMD_DHCP               1
+@@ -116,18 +116,27 @@
+ #define CONFIG_SPI_FLASH              1
+ #define CONFIG_SPI_FLASH_ATMEL                1
+ #define CONFIG_SYS_MAX_DATAFLASH_BANKS        1
++
++#define CONFIG_ATMEL_DATAFLASH_SPI
++#define CONFIG_HAS_DATAFLASH                  1
++#define CONFIG_SYS_SPI_WRITE_TOUT             (5*CONFIG_SYS_HZ)
++#define CONFIG_SYS_DATAFLASH_LOGIC_ADDR_CS0   0xC0000000      /* CS0 */
++#define CONFIG_SYS_DATAFLASH_LOGIC_ADDR_CS1   0xD0000000      /* CS1 */
++#define AT91_SPI_CLK                          15000000
++#define DATAFLASH_TCSS                                (0x1a << 16)
++#define DATAFLASH_TCHS                                (0x01 << 24)
+ #endif
+ 
+ /* NOR flash, if populated */
+-#ifndef CONFIG_CMD_NAND
+-#define CONFIG_SYS_NO_FLASH           1
+-#else
+-#define CONFIG_SYS_FLASH_CFI          1
+-#define CONFIG_FLASH_CFI_DRIVER               1
+-#define PHYS_FLASH_1                  0x10000000
++#ifdef CONFIG_SYS_USE_NORFLASH
++#define CONFIG_SYS_FLASH_CFI                  1
++#define CONFIG_FLASH_CFI_DRIVER                       1
++#define PHYS_FLASH_1                          0x10000000
+ #define CONFIG_SYS_FLASH_BASE                 PHYS_FLASH_1
+ #define CONFIG_SYS_MAX_FLASH_SECT             256
+ #define CONFIG_SYS_MAX_FLASH_BANKS            1
++#else
++#define CONFIG_SYS_NO_FLASH                   1
+ #endif
+ 
+ /* NAND flash */
+@@ -147,21 +156,21 @@
+ #endif
+ 
+ /* 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
++#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
+ 
+ /* USB */
+ #define CONFIG_USB_ATMEL
+-#define CONFIG_USB_OHCI_NEW           1
+-#define CONFIG_DOS_PARTITION          1
++#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         0x00700000      /* 
AT91SAM9G45_UHP_OHCI_BASE */
+ #define CONFIG_SYS_USB_OHCI_SLOT_NAME         "at91sam9g45"
+ #define CONFIG_SYS_USB_OHCI_MAX_ROOT_PORTS    2
+-#define CONFIG_USB_STORAGE            1
++#define CONFIG_USB_STORAGE                    1
+ 
+ #define CONFIG_SYS_LOAD_ADDR                  0x22000000      /* load address 
*/
+ 
+@@ -171,19 +180,21 @@
+ #ifdef CONFIG_SYS_USE_DATAFLASH
+ 
+ /* bootstrap + u-boot + env + linux in dataflash on CS0 */
+-#define CONFIG_ENV_IS_IN_SPI_FLASH    1
++#define       CONFIG_ENV_IS_IN_DATAFLASH      1
++/* #define CONFIG_ENV_IS_IN_SPI_FLASH 1 */
+ #define CONFIG_SYS_MONITOR_BASE       (0xC0000000 + 0x8400)
+ #define CONFIG_ENV_OFFSET             0x4200
+ #define CONFIG_ENV_ADDR               (0xC0000000 + CONFIG_ENV_OFFSET)
+ #define CONFIG_ENV_SIZE               0x4200
+-#define CONFIG_ENV_SECT_SIZE          0x10000
+-#define CONFIG_BOOTCOMMAND    "cp.b 0xC0042000 0x22000000 0x210000; bootm"
++#define CONFIG_ENV_SECT_SIZE          0x4200
++#define CONFIG_BOOTCOMMAND    "cp.b 0xC0042000 0x72000000 0x290000; bootm 
0x72000000"
+ #define CONFIG_BOOTARGS               "console=ttyS0,115200 " \
+-                              "root=/dev/mtdblock0 " \
+-                              "mtdparts=atmel_nand:-(root) "\
++                              "root=/dev/mtdblock1 " \
++                              "mtdparts=atmel_nand:4M(unused)ro,-(root) "\
+                               "rw rootfstype=jffs2"
++#endif
+ 
+-#else /* CONFIG_SYS_USE_NANDFLASH */
++#ifdef CONFIG_SYS_USE_NANDFLASH
+ 
+ /* bootstrap + u-boot + env + linux in nandflash */
+ #define CONFIG_ENV_IS_IN_NAND 1
+-- 
+1.7.1
+
diff --git 
a/recipes/u-boot/u-boot-2010.12/at91/0003-Enable-SD-Card-boot-for-SAM9M10-G45-boards.patch
 
b/recipes/u-boot/u-boot-2010.12/at91/0003-Enable-SD-Card-boot-for-SAM9M10-G45-boards.patch
new file mode 100644
index 0000000..fd8c152
--- /dev/null
+++ 
b/recipes/u-boot/u-boot-2010.12/at91/0003-Enable-SD-Card-boot-for-SAM9M10-G45-boards.patch
@@ -0,0 +1,265 @@
+From 86d6366dfb478a8e12a424baea118f49706bf88e Mon Sep 17 00:00:00 2001
+From: Ulf Samuelsson <[email protected]>
+Date: Sun, 16 Jan 2011 11:32:26 +0100
+Subject: [PATCH 3/3] Enable SD-Card boot for SAM9M10/G45 boards
+
+---
+ Makefile                                           |   10 ++-
+ .../cpu/arm926ejs/at91/at91sam9m10g45_devices.c    |   13 ++++
+ arch/arm/include/asm/arch-at91/hardware.h          |    1 +
+ board/atmel/at91sam9m10g45ek/at91sam9m10g45ek.c    |   35 +++++++++-
+ include/configs/at91sam9m10g45ek.h                 |   74 +++++++++++++++-----
+ 5 files changed, 110 insertions(+), 23 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index 3cd696c..40a288d 100644
+--- a/Makefile
++++ b/Makefile
+@@ -861,22 +861,26 @@ CPU9260_config   :       unconfig
+ at91sam9m10g45ek_nandflash_config \
+ at91sam9m10g45ek_dataflash_config \
+ at91sam9m10g45ek_dataflash_cs0_config \
++at91sam9m10g45ek_sd_config \
+ at91sam9m10g45ek_config \
+ at91sam9g45ekes_nandflash_config \
+ at91sam9g45ekes_dataflash_config \
+ at91sam9g45ekes_dataflash_cs0_config \
++at91sam9g45ekes_sd_config \
+ at91sam9g45ekes_config        :       unconfig
+       @mkdir -p $(obj)include
+-              @if [ "$(findstring 9m10,$@)" ] ; then \
++      @if [ "$(findstring 9m10,$@)" ] ; then \
+               echo "#define CONFIG_AT91SAM9M10G45EK 1"        
>>$(obj)include/config.h ; \
+       else \
+-              echo "#define CONFIG_AT91SAM9G45EKES 1" 
>>$(obj)include/config.h ; \
++              echo "#define CONFIG_AT91SAM9G45EKES 1"         
>>$(obj)include/config.h ; \
+       fi;
+       @if [ "$(findstring _nandflash,$@)" ] ; then \
+               echo "#define CONFIG_SYS_USE_NANDFLASH 1"       
>>$(obj)include/config.h ; \
++      elif [ "$(findstring _sd,$@)" ] ; then \
++              echo "#define CONFIG_SYS_USE_SD_CARD 1"         
>>$(obj)include/config.h ; \
+       else \
+               echo "#define CONFIG_SYS_USE_DATAFLASH 1"       
>>$(obj)include/config.h ; \
+-              echo "#define CONFIG_ATMEL_SPI 1"       
>>$(obj)include/config.h ; \
++              echo "#define CONFIG_ATMEL_SPI 1"               
>>$(obj)include/config.h ; \
+       fi;
+       @$(MKCONFIG) -n $@ -a at91sam9m10g45ek arm arm926ejs at91sam9m10g45ek 
atmel at91
+ 
+diff --git a/arch/arm/cpu/arm926ejs/at91/at91sam9m10g45_devices.c 
b/arch/arm/cpu/arm926ejs/at91/at91sam9m10g45_devices.c
+index 4ad9b1f..229113d 100644
+--- a/arch/arm/cpu/arm926ejs/at91/at91sam9m10g45_devices.c
++++ b/arch/arm/cpu/arm926ejs/at91/at91sam9m10g45_devices.c
+@@ -185,3 +185,16 @@ void at91_macb_hw_init(void)
+ #endif
+ }
+ #endif
++
++#if defined(CONFIG_GENERIC_ATMEL_MCI)
++void  at91_mci_hw_init()
++{
++      at91_set_A_periph(AT91_PIN_PA0, 0);     /* MCI0_CK */
++      at91_set_A_periph(AT91_PIN_PA1, 0);     /* MCI0_CDA */
++      at91_set_A_periph(AT91_PIN_PA2, 0);     /* MCI0_DA0 */
++      at91_set_A_periph(AT91_PIN_PA3, 0);     /* MCI0_DA1 */
++      at91_set_A_periph(AT91_PIN_PA4, 0);     /* MCI0_DA2 */
++      at91_set_A_periph(AT91_PIN_PA5, 0);     /* MCI0_DA3 */
++}
++#endif
++
+diff --git a/arch/arm/include/asm/arch-at91/hardware.h 
b/arch/arm/include/asm/arch-at91/hardware.h
+index d701dc0..be92365 100644
+--- a/arch/arm/include/asm/arch-at91/hardware.h
++++ b/arch/arm/include/asm/arch-at91/hardware.h
+@@ -43,6 +43,7 @@
+ #define AT91_ID_UHP   AT91SAM9RL_ID_UHP
+ #elif defined(CONFIG_AT91SAM9G45) || defined(CONFIG_AT91SAM9M10G45)
+ #include <asm/arch/at91sam9g45.h>
++#define AT91_BASE_MCI AT91SAM9G45_BASE_MCI0
+ #define AT91_BASE_EMAC  AT91SAM9G45_BASE_EMAC
+ #define AT91_BASE_SPI   AT91SAM9G45_BASE_SPI0
+ #define AT91_BASE_SPI1  AT91SAM9G45_BASE_SPI1
+diff --git a/board/atmel/at91sam9m10g45ek/at91sam9m10g45ek.c 
b/board/atmel/at91sam9m10g45ek/at91sam9m10g45ek.c
+index f92b20f..0711353 100644
+--- a/board/atmel/at91sam9m10g45ek/at91sam9m10g45ek.c
++++ b/board/atmel/at91sam9m10g45ek/at91sam9m10g45ek.c
+@@ -36,13 +36,17 @@
+ #include <asm/arch/hardware.h>
+ #include <lcd.h>
+ #include <atmel_lcdc.h>
++#ifdef CONFIG_GENERIC_ATMEL_MCI
++# include <mmc.h>
++#endif
++
+ #if defined(CONFIG_RESET_PHY_R) && defined(CONFIG_MACB)
+ #include <net.h>
+ #endif
+ #include <netdev.h>
+ 
+-DECLARE_GLOBAL_DATA_PTR;
+ 
++DECLARE_GLOBAL_DATA_PTR;
+ /* ------------------------------------------------------------------------- 
*/
+ /*
+  * Miscelaneous platform dependent initialisations
+@@ -243,6 +247,35 @@ void lcd_show_board_info(void)
+ #endif /* CONFIG_LCD_INFO */
+ #endif
+ 
++
++#ifdef CONFIG_GENERIC_ATMEL_MCI
++/* this is a weak define that we are overriding */
++int board_mmc_init(bd_t *bd)
++{
++      /* Enable clock */
++      at91_sys_write(AT91_PMC_PCER, 1 << AT91SAM9G45_ID_MCI0);
++      at91_mci_hw_init();
++
++      /* This calls the atmel_mci_init in gen_atmel_mci.c */
++      return atmel_mci_init((void *)AT91_BASE_MCI);
++}
++
++/* this is a weak define that we are overriding */
++int board_mmc_getcd(u8 *cd, struct mmc *mmc)
++{
++      /*
++       * the only currently existing use of this function
++       * (fsl_esdhc.c) suggests this function must return
++       * *cs = TRUE if a card is NOT detected -> in most
++       * cases the value of the pin when the detect switch
++       * closes to GND
++       */
++      *cd = at91_get_gpio_value (CONFIG_SYS_MMC_CD_PIN) ? 1 : 0;
++      return 0;
++}
++
++#endif
++
+ int board_init(void)
+ {
+       /* Enable Ctrlc */
+diff --git a/include/configs/at91sam9m10g45ek.h 
b/include/configs/at91sam9m10g45ek.h
+index 63fa11c..d7c958d 100644
+--- a/include/configs/at91sam9m10g45ek.h
++++ b/include/configs/at91sam9m10g45ek.h
+@@ -97,7 +97,13 @@
+ #undef CONFIG_CMD_IMI
+ #undef CONFIG_CMD_IMLS
+ #undef CONFIG_CMD_LOADS
+-#undef CONFIG_CMD_SOURCE
++#define CONFIG_CMD_SOURCE
++#undef CONFIG_CMD_XIMG
++#define CONFIG_CMD_ASKENV
++#define CONFIG_CMD_EXT2
++#define CONFIG_CMD_FAT
++#undef CONFIG_CMD_JFFS2
++#define CONFIG_CMD_MMC
+ 
+ #define CONFIG_CMD_PING               1
+ #define CONFIG_CMD_DHCP               1
+@@ -123,6 +129,7 @@
+ #define CONFIG_SYS_DATAFLASH_LOGIC_ADDR_CS0   0xC0000000      /* CS0 */
+ #define CONFIG_SYS_DATAFLASH_LOGIC_ADDR_CS1   0xD0000000      /* CS1 */
+ #define AT91_SPI_CLK                          15000000
++#define       AT91_SPI_MODE                           AT91_SPI_MODE3
+ #define DATAFLASH_TCSS                                (0x1a << 16)
+ #define DATAFLASH_TCHS                                (0x01 << 24)
+ #endif
+@@ -155,6 +162,15 @@
+ 
+ #endif
+ 
++/* SD/MMC card */
++#define CONFIG_MMC                            1
++#define CONFIG_GENERIC_MMC                    1
++#define CONFIG_GENERIC_ATMEL_MCI              1
++#undef        CONFIG_ATMEL_MCI_PORTB
++#define CONFIG_SYS_MMC_CD_PIN                 AT91_PIN_PD10
++#define CONFIG_SUPPORT_VFAT
++
++
+ /* Ethernet */
+ #define CONFIG_MACB                           1
+ #define CONFIG_RMII                           1
+@@ -172,26 +188,26 @@
+ #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_LOAD_ADDR                  0x72000000      /* load address 
*/
+ 
+ #define CONFIG_SYS_MEMTEST_START              PHYS_SDRAM
+-#define CONFIG_SYS_MEMTEST_END                        0x23e00000
++#define CONFIG_SYS_MEMTEST_END                        PHYS_SDRAM + 
PHYS_SDRAM_SIZE
+ 
+ #ifdef CONFIG_SYS_USE_DATAFLASH
+ 
+ /* bootstrap + u-boot + env + linux in dataflash on CS0 */
+ #define       CONFIG_ENV_IS_IN_DATAFLASH      1
+ /* #define CONFIG_ENV_IS_IN_SPI_FLASH 1 */
+-#define CONFIG_SYS_MONITOR_BASE       (0xC0000000 + 0x8400)
++#define CONFIG_SYS_MONITOR_BASE               (0xC0000000 + 0x8400)
+ #define CONFIG_ENV_OFFSET             0x4200
+-#define CONFIG_ENV_ADDR               (0xC0000000 + CONFIG_ENV_OFFSET)
+-#define CONFIG_ENV_SIZE               0x4200
++#define CONFIG_ENV_ADDR                       (0xC0000000 + CONFIG_ENV_OFFSET)
++#define CONFIG_ENV_SIZE                       0x4200
+ #define CONFIG_ENV_SECT_SIZE          0x4200
+-#define CONFIG_BOOTCOMMAND    "cp.b 0xC0042000 0x72000000 0x290000; bootm 
0x72000000"
+-#define CONFIG_BOOTARGS               "console=ttyS0,115200 " \
+-                              "root=/dev/mtdblock1 " \
+-                              "mtdparts=atmel_nand:4M(unused)ro,-(root) "\
+-                              "rw rootfstype=jffs2"
++#define CONFIG_BOOTCOMMAND            "cp.b 0xC0042000 0x72000000 0x290000; 
bootm 0x72000000"
++#define CONFIG_BOOTARGS                       "console=ttyS0,115200 " \
++                                      "root=/dev/mtdblock1 " \
++                                      
"mtdparts=atmel_nand:4M(unused)ro,-(root) "\
++                                      "rw rootfstype=jffs2"
+ #endif
+ 
+ #ifdef CONFIG_SYS_USE_NANDFLASH
+@@ -200,14 +216,34 @@
+ #define CONFIG_ENV_IS_IN_NAND 1
+ #define CONFIG_ENV_OFFSET             0x60000
+ #define CONFIG_ENV_OFFSET_REDUND      0x80000
+-#define CONFIG_ENV_SIZE               0x20000         /* 1 sector = 128 kB */
+-#define CONFIG_BOOTCOMMAND    "nand read 0x72000000 0x200000 0x200000; bootm"
+-#define CONFIG_BOOTARGS               "console=ttyS0,115200 " \
+-                              "root=/dev/mtdblock5 " \
+-                              "mtdparts=atmel_nand:128k(bootstrap)ro, \
+-                              256k(uboot)ro,128k(env1)ro,128k(env2)ro, \
+-                              2M(linux),-(root) " \
+-                              "rw rootfstype=jffs2"
++#define CONFIG_ENV_SIZE                       0x20000         /* 1 sector = 
128 kB */
++#define CONFIG_BOOTCOMMAND            "nand read 0x72000000 0x200000 
0x200000; bootm"
++#define CONFIG_BOOTARGS                       "console=ttyS0,115200 " \
++                                      "root=/dev/mtdblock5 " \
++                                      "mtdparts=atmel_nand:128k(bootstrap)ro, 
\
++                                      
256k(uboot)ro,128k(env1)ro,128k(env2)ro, \
++                                      2M(linux),-(root) " \
++                                      "rw rootfstype=jffs2"
++
++#endif
++
++#ifdef        CONFIG_SYS_USE_SD_CARD
++#define       CONFIG_ENV_IS_NOWHERE
++#define CONFIG_ENV_SIZE                       0x10000
++#define CONFIG_EXTRA_ENV_SETTINGS     \
++                                      "load_env=fatload mmc 0:1 0x70000000 
u-boot.env ; source 0x70000000 \0" \
++                                      "load_kernel=fatload mmc 0:1 0x72000000 
uimage\0"       \
++                                      "at91sam9m10ekes=9cd\0" \
++                                      "at91sam9g45ekes=8a4\0" \
++                                      "at91sam9m10g45ek=726\0"        \
++                                      "machid=726\0"
++
++#define CONFIG_BOOTCOMMAND            "mmc init; run load_env ; run 
load_kernel ; bootm 0x72000000"
++#define CONFIG_BOOTARGS                       "mem=128M "     \
++                                      "console=ttyS0,115200 " \
++                                      "root=/dev/mmcblk0p2 " \
++                                      "rootdelay=2 "\
++                                      "rootfstype=rootfs rw"
+ 
+ #endif
+ 
+-- 
+1.7.1
+
diff --git a/recipes/u-boot/u-boot_2010.12.bb b/recipes/u-boot/u-boot_2010.12.bb
new file mode 100644
index 0000000..954d053
--- /dev/null
+++ b/recipes/u-boot/u-boot_2010.12.bb
@@ -0,0 +1,51 @@
+PR = "r5"
+require u-boot_r2.inc
+
+DEFAULT_PREFERENCE                     = "-1"
+# U-Boot 2010.12 is broken for at91
+DEFAULT_PREFERENCE_at91cap9adk         = "-1"
+DEFAULT_PREFERENCE_at91sam9g20ek       = "-1"
+DEFAULT_PREFERENCE_at91sam9g10ek       = "-1"
+DEFAULT_PREFERENCE_at91sam9g45ekes     = "-1"
+DEFAULT_PREFERENCE_at91sam9g45ek       = "-1"
+DEFAULT_PREFERENCE_at91sam9m10ekes     = "-1"
+DEFAULT_PREFERENCE_at91sam9m10g45ek    = "-1"
+DEFAULT_PREFERENCE_at91sam9rlek                = "-1"
+DEFAULT_PREFERENCE_at91sam9260ek       = "-1"
+DEFAULT_PREFERENCE_at91sam9261ek       = "-1"
+DEFAULT_PREFERENCE_at91sam9263ek       = "-1"
+
+SRC_URI = "ftp://ftp.denx.de/pub/u-boot/u-boot-${PV}.tar.bz2 "
+
+SRC_URI_append_at91 = "\
+       file://at91/0001-Make-AT91-boards-compilable.patch;apply=yes \
+       file://at91/0002-Add-better-dataflash-support.patch;apply=yes \
+       
file://at91/0003-Enable-SD-Card-boot-for-SAM9M10-G45-boards.patch;apply=yes \
+       "
+
+TARGET_LDFLAGS = ""
+
+inherit base
+# UBOOT_IMAGE ?= "u-boot-${UBOOT_MACHINE_NAME}-${PV}-${PR}.bin"
+# UBOOT_SYMLINK ?= "u-boot-${UBOOT_MACHINE_NAME}.bin"
+
+do_compile () {
+       if ! [ "x${UBOOT_MACHINES}" == "x" ] ; then
+               for board in ${UBOOT_MACHINES} ; do
+                       if ! [ `grep ${board}_config Makefile | wc -c` == 0 ] ; 
then
+                               mkdir -p binaries/${board}
+                               oe_runmake O=binaries/${board} distclean
+                               oe_runmake O=binaries/${board} ${board}_config
+                               oe_runmake O=binaries/${board} all
+                       fi
+               done
+       else
+              oe_runmake ${UBOOT_MACHINE}
+              oe_runmake all
+       fi
+}
+
+SRC_URI[md5sum] = "9024bbceabd176ae1d52df6db2e84bda"
+SRC_URI[sha256sum] = 
"1705772db7a18635693676abb8818542167cb131921c456a1edd0ed47e6b77fe"
+
+
diff --git a/recipes/u-boot/u-boot_r2.inc b/recipes/u-boot/u-boot_r2.inc
new file mode 100644
index 0000000..50c2267
--- /dev/null
+++ b/recipes/u-boot/u-boot_r2.inc
@@ -0,0 +1,90 @@
+DESCRIPTION = "U-Boot - the Universal Boot Loader"
+HOMEPAGE = "http://www.denx.de/wiki/U-Boot/WebHome";
+SECTION = "bootloaders"
+PRIORITY = "optional"
+LICENSE = "GPLv2"
+PROVIDES = "virtual/bootloader"
+
+DEPENDS = "mtd-utils"
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+PARALLEL_MAKE=""
+
+EXTRA_OEMAKE = "CROSS_COMPILE=${TARGET_PREFIX}"
+
+UBOOT_MACHINE ?= "${MACHINE}_config"
+UBOOT_BINARY ?= "u-boot.bin"
+UBOOT_IMAGE ?= "u-boot-${MACHINE}-${PV}-${PR}.bin"
+UBOOT_SYMLINK ?= "u-boot-${MACHINE}.bin"
+
+do_configure () {
+       oe_runmake ${UBOOT_MACHINE}
+}
+
+do_compile () {
+       unset LDFLAGS
+       unset CFLAGS
+       unset CPPFLAGS
+       oe_runmake all
+       oe_runmake tools env
+}
+
+do_install () {
+       install -d ${D}/boot
+       if ! [ "x${UBOOT_MACHINES}" == "x" ] ; then
+               for board in ${UBOOT_MACHINES} ; do
+                       if ! [ `grep ${board}_config ${S}/Makefile | wc -c` == 
0 ] ; then
+                               install ${S}/binaries/${board}/${UBOOT_BINARY} 
${D}/boot/${board}-u-boot-${PV}-${PR}.bin
+                       fi
+                       if [ -e ${WORKDIR}/binaries/${board}/fw_env.config ] ; 
then
+                               if ! [ -e ${D}${sysconfdir}/fw_env.config ] ; 
then
+                                       install -d ${D}${base_sbindir}
+                                       install -d ${D}${sysconfdir}
+                                       install -m 644 
${WORKDIR}/binaries/${board}/fw_env.config ${D}${sysconfdir}/fw_env.config
+                                       install -m 755 
${S}/binaries/${board}/tools/env/fw_printenv ${D}${base_sbindir}/fw_printenv
+                                       install -m 755 
${S}/binaries/${board}/tools/env/fw_printenv ${D}${base_sbindir}/fw_setenv
+                               fi
+                       fi
+               done
+       else
+               install ${S}/${UBOOT_BINARY} ${D}/boot/${UBOOT_IMAGE}
+               ln -sf ${UBOOT_IMAGE} ${D}/boot/${UBOOT_BINARY}
+
+               if [ -e ${WORKDIR}/fw_env.config ] ; then
+                   install -d ${D}${base_sbindir}
+                       install -d ${D}${sysconfdir}
+                       install -m 644 ${WORKDIR}/fw_env.config 
${D}${sysconfdir}/fw_env.config
+                       install -m 755 ${S}/tools/env/fw_printenv 
${D}${base_sbindir}/fw_printenv
+                       install -m 755 ${S}/tools/env/fw_printenv 
${D}${base_sbindir}/fw_setenv
+               fi
+       fi
+
+}
+
+FILES_${PN} = "/boot"
+# no gnu_hash in uboot.bin, by design, so skip QA
+INSANE_SKIP_${PN} = True
+
+PACKAGES += "${PN}-fw-utils"
+FILES_${PN}-fw-utils = "${sysconfdir} ${base_sbindir}"
+# u-boot doesn't use LDFLAGS for fw files, needs to get fixed, but until then:
+INSANE_SKIP_${PN}-fw-utils = True
+
+do_deploy () {
+       install -d ${DEPLOY_DIR_IMAGE}
+       if ! [ "x${UBOOT_MACHINES}" == "x" ] ; then
+               for board in ${UBOOT_MACHINES} ; do
+                       install ${S}/binaries/${board}/${UBOOT_BINARY}  
${DEPLOY_DIR_IMAGE}/${board}-u-boot-${PV}-${PR}.bin
+                       package_stagefile_shell                         
${DEPLOY_DIR_IMAGE}/${board}-u-boot-${PV}-${PR}.bin
+               done
+       else
+               install ${S}/${UBOOT_BINARY} ${DEPLOY_DIR_IMAGE}/${UBOOT_IMAGE}
+               package_stagefile_shell ${DEPLOY_DIR_IMAGE}/${UBOOT_IMAGE}
+               cd ${DEPLOY_DIR_IMAGE}
+               rm -f ${UBOOT_SYMLINK}
+               ln -sf ${UBOOT_IMAGE} ${UBOOT_SYMLINK}
+               package_stagefile_shell ${DEPLOY_DIR_IMAGE}/${UBOOT_SYMLINK}
+       fi
+}
+do_deploy[dirs] = "${S}"
+addtask deploy before do_package_stage after do_compile
-- 
1.6.3.3


_______________________________________________
Openembedded-devel mailing list
[email protected]
http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-devel

Reply via email to