summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Luebbe <jlu@pengutronix.de>2013-07-20 19:51:10 +0200
committerJan Luebbe <jlu@pengutronix.de>2013-07-20 19:51:58 +0200
commite878fa19dcb109a3d89e6063a211fb6c4257bbf0 (patch)
treed509fb01494209b66030e85aa5e96a2deadbf6b5
parenta8106e82041f2d471d5ceeee76c463d38147e8db (diff)
downloadplatform-pengutronix-beaglebone-e878fa19dcb109a3d89e6063a211fb6c4257bbf0.tar.gz
platform-pengutronix-beaglebone-e878fa19dcb109a3d89e6063a211fb6c4257bbf0.tar.xz
barebox: add support for the beaglebone black
Signed-off-by: Jan Luebbe <jlu@pengutronix.de>
-rw-r--r--barebox-defaultenv/boot/sd4
-rw-r--r--barebox.config47
-rw-r--r--barebox_mlo.config33
-rw-r--r--config/images/boot-mlo-vfat.config3
-rw-r--r--patches/barebox-2013.04.0/0001-arm-start-improve-memory-layout-calculation.patch95
-rw-r--r--patches/barebox-2013.04.0/0004-am33xx-add-defines-for-GPIOs.patch45
-rw-r--r--patches/barebox-2013.04.0/0005-WIP-GPIO-for-am33xx.patch101
-rw-r--r--patches/barebox-2013.04.0/0006-beaglebone-enable-i2c.patch60
-rw-r--r--patches/barebox-2013.04.0/0007-WIP-beaglebone-add-simple-script-to-change-usb-curre.patch32
-rw-r--r--patches/barebox-2013.04.0/0008-defaultenv-2-init-display-prompt-after-running-env-i.patch47
-rw-r--r--patches/barebox-2013.04.0/series8
-rw-r--r--patches/barebox-2013.07.0/0001-scripts-genenv-remove-empty-files-from-tempdir.patch29
-rw-r--r--patches/barebox-2013.07.0/0002-scripts-Makefile-do-not-use-obj-variables-for-usersp.patch30
-rw-r--r--patches/barebox-2013.07.0/0003-console-fix-console-without-CONFIG_PARAMETER.patch35
-rw-r--r--patches/barebox-2013.07.0/0004-beaglebone-fix-booting.patch (renamed from patches/barebox-2013.04.0/0002-beaglebone-fix-booting.patch)32
-rw-r--r--patches/barebox-2013.07.0/0005-beaglebone-env-use-config-board-instead-of-config.patch (renamed from patches/barebox-2013.04.0/0003-beaglebone-env-use-config-board-instead-of-config.patch)10
-rw-r--r--patches/barebox-2013.07.0/0006-WIP-beaglebone-add-simple-script-to-change-usb-curre.patch26
-rw-r--r--patches/barebox-2013.07.0/0007-ARM-AM33xx-Add-gpio-support.patch41
-rw-r--r--patches/barebox-2013.07.0/0008-ARM-AM33xx-Enable-clock-for-all-GPIO-banks.patch40
-rw-r--r--patches/barebox-2013.07.0/0009-ARM-AM33xx-Make-mpu-pll-configurable-by-lowlevel-boa.patch62
-rw-r--r--patches/barebox-2013.07.0/0010-arm-omap-store-boot-source-info-from-ROM-loader.patch481
-rw-r--r--patches/barebox-2013.07.0/0011-i2c-omap-cleanup-cpu_is-functions.patch247
-rw-r--r--patches/barebox-2013.07.0/0012-ARM-AM33xx-Add-i2c-support-for-AM33xx.patch138
-rw-r--r--patches/barebox-2013.07.0/0013-beaglebone-configure-I2C-EEPROM.patch38
-rw-r--r--patches/barebox-2013.07.0/0014-arm-cpuinfo-display-the-core-name-and-version.patch64
-rw-r--r--patches/barebox-2013.07.0/0015-am33xx-implement-cpu-revision-decoding.patch113
-rw-r--r--patches/barebox-2013.07.0/0016-beaglebone-split-out-DDR2-init-for-BB-White.patch417
-rw-r--r--patches/barebox-2013.07.0/0017-beaglebone-add-support-for-beaglebone-black-with-DDR.patch396
-rw-r--r--patches/barebox-2013.07.0/series17
-rw-r--r--platformconfig6
30 files changed, 2269 insertions, 428 deletions
diff --git a/barebox-defaultenv/boot/sd b/barebox-defaultenv/boot/sd
index ecd8e49..4346720 100644
--- a/barebox-defaultenv/boot/sd
+++ b/barebox-defaultenv/boot/sd
@@ -5,8 +5,8 @@ if [ "$1" = menu ]; then
exit
fi
-global.bootm.image=/boot/uImage
-global.bootm.oftree=/boot/oftree
+global.bootm.image="/boot/uImage"
+global.bootm.oftree="/boot/oftree-${global.board.variant}"
#global.bootm.initrd=<path to initrd>
global.linux.bootargs.dyn.root="root=/dev/mmcblk0p2 rootfstype=ext4 rootwait rw"
diff --git a/barebox.config b/barebox.config
index a2cb3d3..294bba1 100644
--- a/barebox.config
+++ b/barebox.config
@@ -1,6 +1,6 @@
#
# Automatically generated file; DO NOT EDIT.
-# Barebox/arm 2013.04.0 Configuration
+# Barebox/arm 2013.07.0 Configuration
#
CONFIG_ARM=y
CONFIG_ARM_LINUX=y
@@ -8,12 +8,14 @@ CONFIG_ARM_LINUX=y
#
# System Type
#
+# CONFIG_BUILTIN_DTB is not set
# CONFIG_ARCH_AT91 is not set
# CONFIG_ARCH_BCM2835 is not set
# CONFIG_ARCH_CLPS711X is not set
# CONFIG_ARCH_EP93XX is not set
# CONFIG_ARCH_HIGHBANK is not set
# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_MVEBU is not set
# CONFIG_ARCH_MXS is not set
# CONFIG_ARCH_NETX is not set
# CONFIG_ARCH_NOMADIK is not set
@@ -25,6 +27,7 @@ CONFIG_ARCH_OMAP=y
# CONFIG_ARCH_VERSATILE is not set
# CONFIG_ARCH_VEXPRESS is not set
# CONFIG_ARCH_TEGRA is not set
+# CONFIG_ARCH_ZYNQ is not set
#
# Processor Type
@@ -52,6 +55,8 @@ CONFIG_OMAP_CLOCK_SOURCE_DMTIMER0=y
# CONFIG_OMAP_BUILD_SPI is not set
CONFIG_MACH_BEAGLEBONE=y
# CONFIG_MACH_PCM051 is not set
+# CONFIG_OMAP_UART1 is not set
+CONFIG_OMAP_UART3=y
CONFIG_AEABI=y
# CONFIG_THUMB2_BAREBOX is not set
# CONFIG_ARM_BOARD_APPEND_ATAG is not set
@@ -103,9 +108,10 @@ CONFIG_STACK_SIZE=0x8000
CONFIG_MALLOC_SIZE=0x1000000
# CONFIG_BROKEN is not set
# CONFIG_EXPERIMENTAL is not set
-CONFIG_MALLOC_DLMALLOC=y
-# CONFIG_MALLOC_TLSF is not set
+# CONFIG_MALLOC_DLMALLOC is not set
+CONFIG_MALLOC_TLSF=y
CONFIG_KALLSYMS=y
+# CONFIG_RELOCATABLE is not set
CONFIG_PROMPT="barebox> "
CONFIG_BAUDRATE=115200
CONFIG_LONGHELP=y
@@ -218,6 +224,12 @@ CONFIG_CMD_ECHO_E=y
# CONFIG_CMD_LOADS is not set
CONFIG_CMD_MEMINFO=y
CONFIG_CMD_IOMEM=y
+CONFIG_CMD_MD=y
+CONFIG_CMD_MW=y
+CONFIG_CMD_MM=y
+CONFIG_CMD_MEMCMP=y
+CONFIG_CMD_MEMCPY=y
+CONFIG_CMD_MEMSET=y
CONFIG_CMD_CRC=y
CONFIG_CMD_CRC_CMP=y
CONFIG_CMD_DIGEST=y
@@ -248,7 +260,6 @@ CONFIG_FLEXIBLE_BOOTARGS=y
CONFIG_CMD_RESET=y
CONFIG_CMD_GO=y
CONFIG_CMD_OFTREE=y
-# CONFIG_CMD_OFTREE_PROBE is not set
# CONFIG_CMD_OF_PROPERTY is not set
# CONFIG_CMD_OF_NODE is not set
@@ -273,6 +284,7 @@ CONFIG_CMD_GPIO=y
CONFIG_CMD_UNCOMPRESS=y
CONFIG_CMD_I2C=y
CONFIG_CMD_MIITOOL=y
+# CONFIG_CMD_DETECT is not set
CONFIG_NET=y
CONFIG_NET_DHCP=y
CONFIG_NET_NFS=y
@@ -283,6 +295,11 @@ CONFIG_NET_RESOLV=y
#
# Drivers
#
+CONFIG_OFTREE=y
+CONFIG_OFTREE_MEM_GENERIC=y
+CONFIG_DTC=y
+CONFIG_OFDEVICE=y
+CONFIG_OF_NET=y
#
# serial drivers
@@ -290,6 +307,7 @@ CONFIG_NET_RESOLV=y
# CONFIG_DRIVER_SERIAL_ARM_DCC is not set
CONFIG_DRIVER_SERIAL_NS16550=y
CONFIG_DRIVER_SERIAL_NS16550_OMAP_EXTENSIONS=y
+# CONFIG_DRIVER_SERIAL_CADENCE is not set
CONFIG_PHYLIB=y
#
@@ -316,13 +334,12 @@ CONFIG_DRIVER_NET_CPSW=y
#
# CONFIG_SPI is not set
CONFIG_I2C=y
-CONFIG_I2C_ALGOBIT=y
#
# I2C Hardware Bus support
#
-CONFIG_I2C_GPIO=y
-# CONFIG_I2C_OMAP is not set
+# CONFIG_I2C_GPIO is not set
+CONFIG_I2C_OMAP=y
# CONFIG_MTD is not set
CONFIG_DISK=y
CONFIG_DISK_WRITE=y
@@ -347,6 +364,7 @@ CONFIG_MCI=y
CONFIG_MCI_STARTUP=y
CONFIG_MCI_INFO=y
CONFIG_MCI_WRITE=y
+# CONFIG_MCI_MMC_BOOT_PARTITIONS is not set
#
# --- MCI host drivers ---
@@ -362,6 +380,7 @@ CONFIG_MCI_OMAP_HSMMC=y
# CONFIG_MFD_MC34708 is not set
# CONFIG_MFD_MC9SDZ60 is not set
# CONFIG_MFD_STMPE is not set
+# CONFIG_MFD_SYSCON is not set
# CONFIG_MFD_TWL4030 is not set
# CONFIG_MFD_TWL6030 is not set
# CONFIG_MISC_DEVICES is not set
@@ -388,10 +407,20 @@ CONFIG_GPIOLIB=y
#
# GPIO
#
-CONFIG_OFDEVICE=y
+# CONFIG_GPIO_GENERIC_PLATFORM is not set
+# CONFIG_GPIO_IMX is not set
# CONFIG_W1 is not set
#
+# Pin controllers
+#
+# CONFIG_PINCTRL is not set
+# CONFIG_PINCTRL_IMX_IOMUX_V1 is not set
+# CONFIG_PINCTRL_IMX_IOMUX_V2 is not set
+# CONFIG_PINCTRL_IMX_IOMUX_V3 is not set
+# CONFIG_PINCTRL_TEGRA20 is not set
+
+#
# Filesystem support
#
CONFIG_FS=y
@@ -416,8 +445,6 @@ CONFIG_UNCOMPRESS=y
# CONFIG_GENERIC_FIND_NEXT_BIT is not set
CONFIG_PROCESS_ESCAPE_SEQUENCE=y
# CONFIG_LZO_DECOMPRESS is not set
-CONFIG_FDT=y
-CONFIG_OFTREE=y
CONFIG_QSORT=y
#
diff --git a/barebox_mlo.config b/barebox_mlo.config
index c24720a..2d87086 100644
--- a/barebox_mlo.config
+++ b/barebox_mlo.config
@@ -1,6 +1,6 @@
#
# Automatically generated file; DO NOT EDIT.
-# Barebox/arm 2013.04.0 Configuration
+# Barebox/arm 2013.07.0 Configuration
#
CONFIG_ARM=y
@@ -13,6 +13,7 @@ CONFIG_ARM=y
# CONFIG_ARCH_EP93XX is not set
# CONFIG_ARCH_HIGHBANK is not set
# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_MVEBU is not set
# CONFIG_ARCH_MXS is not set
# CONFIG_ARCH_NETX is not set
# CONFIG_ARCH_NOMADIK is not set
@@ -24,6 +25,7 @@ CONFIG_ARCH_OMAP=y
# CONFIG_ARCH_VERSATILE is not set
# CONFIG_ARCH_VEXPRESS is not set
# CONFIG_ARCH_TEGRA is not set
+# CONFIG_ARCH_ZYNQ is not set
#
# Processor Type
@@ -46,11 +48,13 @@ CONFIG_BAREBOX_MAX_IMAGE_SIZE=0xffffffff
# CONFIG_ARCH_OMAP4 is not set
CONFIG_ARCH_AM33XX=y
CONFIG_OMAP_CLOCK_SOURCE_DMTIMER0=y
-# CONFIG_OMAP_GPMC is not set
+CONFIG_OMAP_GPMC=y
CONFIG_OMAP_BUILD_IFT=y
# CONFIG_OMAP_BUILD_SPI is not set
CONFIG_MACH_BEAGLEBONE=y
# CONFIG_MACH_PCM051 is not set
+# CONFIG_OMAP_UART1 is not set
+CONFIG_OMAP_UART3=y
CONFIG_ARM_ASM_UNIFIED=y
CONFIG_AEABI=y
CONFIG_THUMB2_BAREBOX=y
@@ -75,9 +79,9 @@ CONFIG_FILETYPE=y
#
# General Settings
#
-CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION="-mlo"
CONFIG_LOCALVERSION_AUTO=y
-# CONFIG_BANNER is not set
+CONFIG_BANNER=y
# CONFIG_MEMINFO is not set
CONFIG_ENVIRONMENT_VARIABLES=y
@@ -92,14 +96,15 @@ CONFIG_MMU_EARLY=y
CONFIG_HAVE_CONFIGURABLE_TEXT_BASE=y
CONFIG_TEXT_BASE=0x402F0400
CONFIG_BAREBOX_MAX_BARE_INIT_SIZE=0xffffffff
-CONFIG_STACK_SIZE=0x1600
+CONFIG_STACK_SIZE=0x2000
CONFIG_MALLOC_SIZE=0x1000000
# CONFIG_BROKEN is not set
# CONFIG_EXPERIMENTAL is not set
-CONFIG_MALLOC_DLMALLOC=y
-# CONFIG_MALLOC_TLSF is not set
+# CONFIG_MALLOC_DLMALLOC is not set
+CONFIG_MALLOC_TLSF=y
# CONFIG_MALLOC_DUMMY is not set
# CONFIG_KALLSYMS is not set
+# CONFIG_RELOCATABLE is not set
CONFIG_PROMPT="MLO>"
CONFIG_BAUDRATE=115200
CONFIG_SIMPLE_READLINE=y
@@ -144,6 +149,7 @@ CONFIG_HAS_DEBUG_LL=y
#
# Drivers
#
+# CONFIG_OFDEVICE is not set
#
# serial drivers
@@ -151,6 +157,7 @@ CONFIG_HAS_DEBUG_LL=y
# CONFIG_DRIVER_SERIAL_ARM_DCC is not set
CONFIG_DRIVER_SERIAL_NS16550=y
CONFIG_DRIVER_SERIAL_NS16550_OMAP_EXTENSIONS=y
+# CONFIG_DRIVER_SERIAL_CADENCE is not set
#
# SPI drivers
@@ -180,6 +187,7 @@ CONFIG_MCI=y
#
CONFIG_MCI_STARTUP=y
CONFIG_MCI_WRITE=y
+# CONFIG_MCI_MMC_BOOT_PARTITIONS is not set
#
# --- MCI host drivers ---
@@ -189,6 +197,7 @@ CONFIG_MCI_OMAP_HSMMC=y
#
# MFD
#
+# CONFIG_MFD_SYSCON is not set
# CONFIG_MISC_DEVICES is not set
# CONFIG_LED is not set
@@ -211,9 +220,19 @@ CONFIG_GPIOLIB=y
#
# GPIO
#
+# CONFIG_GPIO_GENERIC_PLATFORM is not set
+# CONFIG_GPIO_IMX is not set
# CONFIG_W1 is not set
#
+# Pin controllers
+#
+# CONFIG_PINCTRL_IMX_IOMUX_V1 is not set
+# CONFIG_PINCTRL_IMX_IOMUX_V2 is not set
+# CONFIG_PINCTRL_IMX_IOMUX_V3 is not set
+# CONFIG_PINCTRL_TEGRA20 is not set
+
+#
# Filesystem support
#
CONFIG_FS=y
diff --git a/config/images/boot-mlo-vfat.config b/config/images/boot-mlo-vfat.config
index 6a52246..ca5f180 100644
--- a/config/images/boot-mlo-vfat.config
+++ b/config/images/boot-mlo-vfat.config
@@ -3,7 +3,8 @@ image @IMAGE@ {
file MLO { image = "MLO"}
file barebox.bin { image = "barebox-image" }
file barebox.env { image = "barebox-default-environment" }
- file oftree { image = "am335x-bone.dtb" }
+ file oftree-bone { image = "am335x-bone.dtb" }
+ file oftree-boneblack { image = "am335x-boneblack.dtb" }
file uImage { image = "linuximage" }
}
name = boot-mlo
diff --git a/patches/barebox-2013.04.0/0001-arm-start-improve-memory-layout-calculation.patch b/patches/barebox-2013.04.0/0001-arm-start-improve-memory-layout-calculation.patch
deleted file mode 100644
index 8c6854d..0000000
--- a/patches/barebox-2013.04.0/0001-arm-start-improve-memory-layout-calculation.patch
+++ /dev/null
@@ -1,95 +0,0 @@
-From d7df89aff4ba68d8bb57cbf6145c5cd5f201f704 Mon Sep 17 00:00:00 2001
-From: Jan Luebbe <jlu@pengutronix.de>
-Date: Fri, 15 Mar 2013 12:40:55 +0100
-Subject: [PATCH 1/8] arm: start: improve memory layout calculation
-
-On AM335x a barebox MLO is placed at the base of the usable SRAM range.
-When running without SDRAM, we should be able to pass the SRAM range
-to barebox_arm_entry.
-
-First we check if the ends of the memory range lie in the barebox image
-and reduce the range in these cases. Then we check if the image splits
-the memory range in two and choose to use the larger one.
-
-Signed-off-by: Jan Luebbe <jlu@pengutronix.de>
----
- arch/arm/cpu/start.c | 48 +++++++++++++++++++++++++++++++-----------------
- 1 file changed, 31 insertions(+), 17 deletions(-)
-
-diff --git a/arch/arm/cpu/start.c b/arch/arm/cpu/start.c
-index cd34d9c..fa148c2 100644
---- a/arch/arm/cpu/start.c
-+++ b/arch/arm/cpu/start.c
-@@ -34,38 +34,52 @@ unsigned long arm_stack_top;
- static noinline __noreturn void __start(uint32_t membase, uint32_t memsize,
- uint32_t boarddata)
- {
-- unsigned long endmem = membase + memsize;
-+ unsigned long memend;
- unsigned long malloc_start, malloc_end;
-
- setup_c();
-
-- arm_stack_top = endmem;
-- endmem -= STACK_SIZE; /* Stack */
-+ if ((unsigned long)_text <= membase &&
-+ (unsigned long)_end > membase) { /* membase is in barebox */
-+ memsize -= (unsigned long)_end - membase;
-+ membase = (unsigned long)_end;
-+ }
-+
-+ if ((unsigned long)_text < membase + memsize &&
-+ (unsigned long)_end >= membase + memsize) { /* membase + memsize is in barebox */
-+ memsize = (unsigned long)_text - membase;
-+ }
-+
-+ if ((unsigned long)_text > membase &&
-+ (unsigned long)_end < membase + memsize) { /* barebox splits or memory range */
-+ unsigned long lowsize = (unsigned long)_text - membase;
-+ unsigned long highsize = membase + memsize - (unsigned long)_end;
-+ /* use larger range */
-+ if (lowsize > highsize) {
-+ memsize = lowsize;
-+ } else {
-+ membase = (unsigned long)_end;
-+ memsize = highsize;
-+ }
-+ }
-+
-+ arm_stack_top = membase + memsize;
-+ memend = membase + memsize - STACK_SIZE; /* Stack */
-
- if (IS_ENABLED(CONFIG_MMU_EARLY)) {
-
-- endmem &= ~0x3fff;
-- endmem -= SZ_16K; /* ttb */
-+ memend &= ~0x3fff;
-+ memend -= SZ_16K; /* ttb */
-
- if (!IS_ENABLED(CONFIG_PBL_IMAGE))
-- mmu_early_enable(membase, memsize, endmem);
-+ mmu_early_enable(membase, memsize, memend);
- }
-
-- if ((unsigned long)_text > membase + memsize ||
-- (unsigned long)_text < membase)
-- /*
-- * barebox is either outside SDRAM or in another
-- * memory bank, so we can use the whole bank for
-- * malloc.
-- */
-- malloc_end = endmem;
-- else
-- malloc_end = (unsigned long)_text;
--
- /*
- * Maximum malloc space is the Kconfig value if given
- * or 64MB.
- */
-+ malloc_end = memend;
- if (MALLOC_SIZE > 0) {
- malloc_start = malloc_end - MALLOC_SIZE;
- if (malloc_start < membase)
---
-1.8.2.rc2
-
diff --git a/patches/barebox-2013.04.0/0004-am33xx-add-defines-for-GPIOs.patch b/patches/barebox-2013.04.0/0004-am33xx-add-defines-for-GPIOs.patch
deleted file mode 100644
index baf47c6..0000000
--- a/patches/barebox-2013.04.0/0004-am33xx-add-defines-for-GPIOs.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-From 7d2dfe2ceead859a63404199799bb765873de4cb Mon Sep 17 00:00:00 2001
-From: Jan Luebbe <jlu@pengutronix.de>
-Date: Sun, 31 Mar 2013 01:54:28 +0100
-Subject: [PATCH 4/8] am33xx: add defines for GPIOs
-
-Signed-off-by: Jan Luebbe <jlu@pengutronix.de>
----
- arch/arm/mach-omap/include/mach/am33xx-clock.h | 2 ++
- arch/arm/mach-omap/include/mach/am33xx-silicon.h | 6 ++++++
- 2 files changed, 8 insertions(+)
-
-diff --git a/arch/arm/mach-omap/include/mach/am33xx-clock.h b/arch/arm/mach-omap/include/mach/am33xx-clock.h
-index 39c107f..cbee641 100644
---- a/arch/arm/mach-omap/include/mach/am33xx-clock.h
-+++ b/arch/arm/mach-omap/include/mach/am33xx-clock.h
-@@ -139,7 +139,9 @@
- #define CM_PER_CPGMAC0_CLKCTRL (CM_PER + 0x14) /* Ethernet */
- #define CM_PER_CPSW_CLKSTCTRL (CM_PER + 0x144)/* Ethernet */
- #define CM_PER_OCMCRAM_CLKCTRL (CM_PER + 0x2C) /* OCMC RAM */
-+#define CM_PER_GPIO1_CLKCTRL (CM_PER + 0xAC) /* GPIO1 */
- #define CM_PER_GPIO2_CLKCTRL (CM_PER + 0xB0) /* GPIO2 */
-+#define CM_PER_GPIO3_CLKCTRL (CM_PER + 0xB4) /* GPIO3 */
- #define CM_PER_UART3_CLKCTRL (CM_PER + 0x74) /* UART3 */
- #define CM_PER_I2C1_CLKCTRL (CM_PER + 0x48) /* I2C1 */
- #define CM_PER_I2C2_CLKCTRL (CM_PER + 0x44) /* I2C2 */
-diff --git a/arch/arm/mach-omap/include/mach/am33xx-silicon.h b/arch/arm/mach-omap/include/mach/am33xx-silicon.h
-index e69d345..9edf4ca 100644
---- a/arch/arm/mach-omap/include/mach/am33xx-silicon.h
-+++ b/arch/arm/mach-omap/include/mach/am33xx-silicon.h
-@@ -29,6 +29,12 @@
- #define AM33XX_UART1_BASE (AM33XX_L4_PER_BASE + 0x22000)
- #define AM33XX_UART2_BASE (AM33XX_L4_PER_BASE + 0x24000)
-
-+/* GPIO */
-+#define AM33XX_GPIO0_BASE (AM33XX_L4_WKUP_BASE + 0x207000 + 0x100)
-+#define AM33XX_GPIO1_BASE (AM33XX_L4_PER_BASE + 0x4C000 + 0x100)
-+#define AM33XX_GPIO2_BASE (AM33XX_L4_PER_BASE + 0x1AC000 + 0x100)
-+#define AM33XX_GPIO3_BASE (AM33XX_L4_PER_BASE + 0x1AE000 + 0x100)
-+
- /* EMFI Registers */
- #define AM33XX_EMFI0_BASE 0x4C000000
-
---
-1.8.2.rc2
-
diff --git a/patches/barebox-2013.04.0/0005-WIP-GPIO-for-am33xx.patch b/patches/barebox-2013.04.0/0005-WIP-GPIO-for-am33xx.patch
deleted file mode 100644
index e6dc7f6..0000000
--- a/patches/barebox-2013.04.0/0005-WIP-GPIO-for-am33xx.patch
+++ /dev/null
@@ -1,101 +0,0 @@
-From 278fb30cf0ce864e15505330238e891d88b3f965 Mon Sep 17 00:00:00 2001
-From: Jan Luebbe <jlu@pengutronix.de>
-Date: Sun, 31 Mar 2013 12:27:43 +0200
-Subject: [PATCH 5/8] WIP: GPIO for am33xx
-
-Signed-off-by: Jan Luebbe <jlu@pengutronix.de>
----
- arch/arm/mach-omap/am33xx_generic.c | 28 ++++++++++++++++++++++++++++
- arch/arm/mach-omap/am33xx_mux.c | 11 +++++++++++
- arch/arm/mach-omap/include/mach/am33xx-mux.h | 1 +
- 3 files changed, 40 insertions(+)
-
-diff --git a/arch/arm/mach-omap/am33xx_generic.c b/arch/arm/mach-omap/am33xx_generic.c
-index d3014c2..bf03fcd 100644
---- a/arch/arm/mach-omap/am33xx_generic.c
-+++ b/arch/arm/mach-omap/am33xx_generic.c
-@@ -19,8 +19,10 @@
- */
-
- #include <common.h>
-+#include <init.h>
- #include <io.h>
- #include <net.h>
-+#include <driver.h>
- #include <mach/am33xx-silicon.h>
- #include <mach/am33xx-clock.h>
- #include <mach/sys_info.h>
-@@ -122,3 +124,29 @@ int am33xx_register_ethaddr(int eth_id, int mac_id)
-
- return -ENODEV;
- }
-+
-+static int am33xx_gpio_init(void)
-+{
-+ /* GPIO 1-3 */
-+#define PRCM_MOD_EN 0x2
-+ __raw_writel(PRCM_MOD_EN, CM_PER_GPIO1_CLKCTRL);
-+ while (__raw_readl(CM_PER_GPIO1_CLKCTRL) != PRCM_MOD_EN);
-+
-+ __raw_writel(PRCM_MOD_EN, CM_PER_GPIO2_CLKCTRL);
-+ while (__raw_readl(CM_PER_GPIO2_CLKCTRL) != PRCM_MOD_EN);
-+
-+ __raw_writel(PRCM_MOD_EN, CM_PER_GPIO3_CLKCTRL);
-+ while (__raw_readl(CM_PER_GPIO3_CLKCTRL) != PRCM_MOD_EN);
-+
-+ add_generic_device("omap-gpio", 0, NULL, AM33XX_GPIO0_BASE,
-+ 0xf00, IORESOURCE_MEM, NULL);
-+ add_generic_device("omap-gpio", 1, NULL, AM33XX_GPIO1_BASE,
-+ 0xf00, IORESOURCE_MEM, NULL);
-+ add_generic_device("omap-gpio", 2, NULL, AM33XX_GPIO2_BASE,
-+ 0xf00, IORESOURCE_MEM, NULL);
-+ add_generic_device("omap-gpio", 3, NULL, AM33XX_GPIO3_BASE,
-+ 0xf00, IORESOURCE_MEM, NULL);
-+
-+ return 0;
-+}
-+coredevice_initcall(am33xx_gpio_init);
-diff --git a/arch/arm/mach-omap/am33xx_mux.c b/arch/arm/mach-omap/am33xx_mux.c
-index 3d7f245..e3a700d 100644
---- a/arch/arm/mach-omap/am33xx_mux.c
-+++ b/arch/arm/mach-omap/am33xx_mux.c
-@@ -291,6 +291,12 @@ static const __maybe_unused struct module_pin_mux i2c0_pin_mux[] = {
- {-1},
- };
-
-+static const __maybe_unused struct module_pin_mux i2c0_pin_mux_gpio[] = {
-+ {OFFSET(i2c0_sda), (MODE(7) | RXACTIVE | PULLUDEN | SLEWCTRL)}, /* I2C_DATA */
-+ {OFFSET(i2c0_scl), (MODE(7) | RXACTIVE | PULLUDEN | SLEWCTRL)}, /* I2C_SCLK */
-+ {-1},
-+};
-+
- static const __maybe_unused struct module_pin_mux i2c1_pin_mux[] = {
- {OFFSET(spi0_d1), (MODE(2) | RXACTIVE | PULLUDEN | SLEWCTRL)}, /* I2C_DATA */
- {OFFSET(spi0_cs0), (MODE(2) | RXACTIVE | PULLUDEN | SLEWCTRL)}, /* I2C_SCLK */
-@@ -490,6 +496,11 @@ void enable_i2c0_pin_mux(void)
- configure_module_pin_mux(i2c0_pin_mux);
- }
-
-+void enable_i2c0_pin_mux_gpio(void)
-+{
-+ configure_module_pin_mux(i2c0_pin_mux_gpio);
-+}
-+
- void enable_i2c1_pin_mux(void)
- {
- configure_module_pin_mux(i2c1_pin_mux);
-diff --git a/arch/arm/mach-omap/include/mach/am33xx-mux.h b/arch/arm/mach-omap/include/mach/am33xx-mux.h
-index 6078b3a..f4318c2 100644
---- a/arch/arm/mach-omap/include/mach/am33xx-mux.h
-+++ b/arch/arm/mach-omap/include/mach/am33xx-mux.h
-@@ -15,6 +15,7 @@
-
- extern void enable_mii1_pin_mux(void);
- extern void enable_i2c0_pin_mux(void);
-+extern void enable_i2c0_pin_mux_gpio(void);
- extern void enable_i2c1_pin_mux(void);
- extern void enable_i2c2_pin_mux(void);
- extern void enable_uart0_pin_mux(void);
---
-1.8.2.rc2
-
diff --git a/patches/barebox-2013.04.0/0006-beaglebone-enable-i2c.patch b/patches/barebox-2013.04.0/0006-beaglebone-enable-i2c.patch
deleted file mode 100644
index cf46a83..0000000
--- a/patches/barebox-2013.04.0/0006-beaglebone-enable-i2c.patch
+++ /dev/null
@@ -1,60 +0,0 @@
-From 8d2caf59e024d664d3c06757d727aecfb618b74e Mon Sep 17 00:00:00 2001
-From: Jan Luebbe <jlu@pengutronix.de>
-Date: Sun, 31 Mar 2013 12:27:14 +0200
-Subject: [PATCH 6/8] beaglebone: enable i2c
-
-Signed-off-by: Jan Luebbe <jlu@pengutronix.de>
----
- arch/arm/boards/beaglebone/board.c | 20 +++++++++++++++++++-
- 1 file changed, 19 insertions(+), 1 deletion(-)
-
-diff --git a/arch/arm/boards/beaglebone/board.c b/arch/arm/boards/beaglebone/board.c
-index e4b8b0a..42dbebf 100644
---- a/arch/arm/boards/beaglebone/board.c
-+++ b/arch/arm/boards/beaglebone/board.c
-@@ -42,6 +42,7 @@
- #include <mach/gpmc.h>
- #include <mach/ehci.h>
- #include <i2c/i2c.h>
-+#include <i2c/i2c-gpio.h>
- #include <linux/err.h>
- #include <linux/phy.h>
- #include <usb/ehci.h>
-@@ -100,16 +101,33 @@ static void beaglebone_eth_init(void)
- am33xx_add_cpsw(&cpsw_data);
- }
-
-+static struct i2c_board_info i2c_devices[] = {
-+ {
-+ I2C_BOARD_INFO("24c256", 0x50)
-+ },
-+};
-+
-+static struct i2c_gpio_platform_data i2c_gpio_data = {
-+ .sda_pin = 32*3 + 5,
-+ .sda_is_open_drain = 0,
-+ .scl_pin = 32*3 + 6,
-+ .scl_is_open_drain = 0,
-+ .udelay = 5, /* ~100 kHz */
-+};
-+
- static int beaglebone_devices_init(void)
- {
- am33xx_add_mmc0(NULL);
-
-- enable_i2c0_pin_mux();
- beaglebone_eth_init();
-
- armlinux_set_bootparams((void *)0x80000100);
- armlinux_set_architecture(MACH_TYPE_BEAGLEBONE);
-
-+ enable_i2c0_pin_mux_gpio();
-+ i2c_register_board_info(0, i2c_devices, ARRAY_SIZE(i2c_devices));
-+ add_generic_device_res("i2c-gpio", 0, NULL, 0, &i2c_gpio_data);
-+
- return 0;
- }
- device_initcall(beaglebone_devices_init);
---
-1.8.2.rc2
-
diff --git a/patches/barebox-2013.04.0/0007-WIP-beaglebone-add-simple-script-to-change-usb-curre.patch b/patches/barebox-2013.04.0/0007-WIP-beaglebone-add-simple-script-to-change-usb-curre.patch
deleted file mode 100644
index b04e09e..0000000
--- a/patches/barebox-2013.04.0/0007-WIP-beaglebone-add-simple-script-to-change-usb-curre.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From ff05523fb89a2b50e670d40e00301ea4dc62515a Mon Sep 17 00:00:00 2001
-From: Jan Luebbe <jlu@pengutronix.de>
-Date: Sun, 31 Mar 2013 12:28:01 +0200
-Subject: [PATCH 7/8] WIP: beaglebone: add simple script to change usb current
- limit
-
-Signed-off-by: Jan Luebbe <jlu@pengutronix.de>
----
- arch/arm/boards/beaglebone/env/init/usb-limit-1300 | 11 +++++++++++
- 1 file changed, 11 insertions(+)
- create mode 100644 arch/arm/boards/beaglebone/env/init/usb-limit-1300
-
-diff --git a/arch/arm/boards/beaglebone/env/init/usb-limit-1300 b/arch/arm/boards/beaglebone/env/init/usb-limit-1300
-new file mode 100644
-index 0000000..b5a97eb
---- /dev/null
-+++ b/arch/arm/boards/beaglebone/env/init/usb-limit-1300
-@@ -0,0 +1,11 @@
-+#!/bin/sh
-+
-+ENABLED=0
-+
-+if [ $ENABLED -eq 0 ]; then
-+ echo "edit /env/init/usb-limit-1300 to change the USB current limit"
-+else
-+ echo -n "changing USB current limit to 1300 mA... "
-+ i2c_write -b 0 -a 0x24 -r 0x01 0x3e
-+ echo "done"
-+fi
---
-1.8.2.rc2
-
diff --git a/patches/barebox-2013.04.0/0008-defaultenv-2-init-display-prompt-after-running-env-i.patch b/patches/barebox-2013.04.0/0008-defaultenv-2-init-display-prompt-after-running-env-i.patch
deleted file mode 100644
index 69d1f64..0000000
--- a/patches/barebox-2013.04.0/0008-defaultenv-2-init-display-prompt-after-running-env-i.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-From 376025ea1243bd1c81f51b0c37cea30507ef3098 Mon Sep 17 00:00:00 2001
-From: Jan Luebbe <jlu@pengutronix.de>
-Date: Mon, 8 Apr 2013 18:03:21 +0200
-Subject: [PATCH 8/8] defaultenv-2: init: display prompt after running
- /env/init/*
-
-This allows init scripts to print messages to the console without messing
-up the timeout prompt.
-
-Signed-off-by: Jan Luebbe <jlu@pengutronix.de>
----
- defaultenv-2/base/bin/init | 12 ++++++------
- 1 file changed, 6 insertions(+), 6 deletions(-)
-
-diff --git a/defaultenv-2/base/bin/init b/defaultenv-2/base/bin/init
-index e4a7fee..a47ca47 100644
---- a/defaultenv-2/base/bin/init
-+++ b/defaultenv-2/base/bin/init
-@@ -16,12 +16,6 @@ global editcmd=sedit
- /env/config-board
- /env/config
-
--if [ -e /env/menu ]; then
-- echo -e -n "\nHit m for menu or any other key to stop autoboot: "
--else
-- echo -e -n "\nHit any key to stop autoboot: "
--fi
--
- # allow to stop the boot before execute the /env/init/*
- # but without waiting
- timeout -s -a -v key 0
-@@ -34,6 +28,12 @@ for i in /env/init/*; do
- . $i
- done
-
-+if [ -e /env/menu ]; then
-+ echo -e -n "\nHit m for menu or any other key to stop autoboot: "
-+else
-+ echo -e -n "\nHit any key to stop autoboot: "
-+fi
-+
- timeout -a $global.autoboot_timeout -v key
- autoboot="$?"
-
---
-1.8.2.rc2
-
diff --git a/patches/barebox-2013.04.0/series b/patches/barebox-2013.04.0/series
deleted file mode 100644
index c576a1a..0000000
--- a/patches/barebox-2013.04.0/series
+++ /dev/null
@@ -1,8 +0,0 @@
-0001-arm-start-improve-memory-layout-calculation.patch
-0002-beaglebone-fix-booting.patch
-0003-beaglebone-env-use-config-board-instead-of-config.patch
-0004-am33xx-add-defines-for-GPIOs.patch
-0005-WIP-GPIO-for-am33xx.patch
-0006-beaglebone-enable-i2c.patch
-0007-WIP-beaglebone-add-simple-script-to-change-usb-curre.patch
-0008-defaultenv-2-init-display-prompt-after-running-env-i.patch
diff --git a/patches/barebox-2013.07.0/0001-scripts-genenv-remove-empty-files-from-tempdir.patch b/patches/barebox-2013.07.0/0001-scripts-genenv-remove-empty-files-from-tempdir.patch
new file mode 100644
index 0000000..3643c08
--- /dev/null
+++ b/patches/barebox-2013.07.0/0001-scripts-genenv-remove-empty-files-from-tempdir.patch
@@ -0,0 +1,29 @@
+From 8544d430c081371152796a0de45fa8edef1bf594 Mon Sep 17 00:00:00 2001
+From: Jan Luebbe <jlu@pengutronix.de>
+Date: Tue, 28 May 2013 09:43:29 +0200
+Subject: [PATCH 01/17] scripts: genenv: remove empty files from tempdir
+
+This allows leaving out default files from the environment by overriding
+them with empty files in the board or BSP.
+
+Signed-off-by: Jan Luebbe <jlu@pengutronix.de>
+---
+ scripts/genenv | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/scripts/genenv b/scripts/genenv
+index 374db6d..3e91062 100755
+--- a/scripts/genenv
++++ b/scripts/genenv
+@@ -24,7 +24,7 @@ for i in $*; do
+ done
+ )
+
+-find $tempdir -name '.svn' -o -name '*~' | xargs --no-run-if-empty rm -r
++find $tempdir -name '.svn' -o -name '*~' -o -size 0 | xargs --no-run-if-empty rm -r
+
+ $objtree/scripts/bareboxenv -s $tempdir $target
+
+--
+1.7.10.4
+
diff --git a/patches/barebox-2013.07.0/0002-scripts-Makefile-do-not-use-obj-variables-for-usersp.patch b/patches/barebox-2013.07.0/0002-scripts-Makefile-do-not-use-obj-variables-for-usersp.patch
new file mode 100644
index 0000000..b9811ad
--- /dev/null
+++ b/patches/barebox-2013.07.0/0002-scripts-Makefile-do-not-use-obj-variables-for-usersp.patch
@@ -0,0 +1,30 @@
+From cd780d60b41f5b743e7c4518364053a9c266f17d Mon Sep 17 00:00:00 2001
+From: Jan Luebbe <jlu@pengutronix.de>
+Date: Tue, 28 May 2013 11:04:12 +0200
+Subject: [PATCH 02/17] scripts: Makefile: do not use obj-* variables for
+ userspace tools
+
+When using obj-?, it erroneously tries to link a built-in.o. Instead
+use the extra-? variable.
+
+Signed-off-by: Jan Luebbe <jlu@pengutronix.de>
+---
+ scripts/Makefile | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/scripts/Makefile b/scripts/Makefile
+index 307dc3d..eaf12d9 100644
+--- a/scripts/Makefile
++++ b/scripts/Makefile
+@@ -32,7 +32,7 @@ subdir- += basic kconfig setupmbr
+ quiet_cmd_csingle = CC $@
+ cmd_csingle = $(CC) -Wp,-MD,$(depfile) $(CFLAGS) -o $@ $<
+
+-obj-$(CONFIG_BAREBOXENV_TARGET) += bareboxenv-target
++extra-$(CONFIG_BAREBOXENV_TARGET) += bareboxenv-target
+
+ scripts/bareboxenv-target: scripts/bareboxenv.c FORCE
+ $(call if_changed_dep,csingle)
+--
+1.7.10.4
+
diff --git a/patches/barebox-2013.07.0/0003-console-fix-console-without-CONFIG_PARAMETER.patch b/patches/barebox-2013.07.0/0003-console-fix-console-without-CONFIG_PARAMETER.patch
new file mode 100644
index 0000000..e0a0076
--- /dev/null
+++ b/patches/barebox-2013.07.0/0003-console-fix-console-without-CONFIG_PARAMETER.patch
@@ -0,0 +1,35 @@
+From 08c73dea817bc6c589e3ef4fae11fccdd562c81c Mon Sep 17 00:00:00 2001
+From: Jan Luebbe <jlu@pengutronix.de>
+Date: Mon, 15 Apr 2013 18:17:30 +0200
+Subject: [PATCH 03/17] console: fix console without CONFIG_PARAMETER
+
+If CONFIG_PARAMETER is not set, dev_set_param() does not call the setter
+function. Call it directly instead in this case.
+
+Signed-off-by: Jan Luebbe <jlu@pengutronix.de>
+---
+ common/console.c | 8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+diff --git a/common/console.c b/common/console.c
+index a0a06f6..b2d70f5 100644
+--- a/common/console.c
++++ b/common/console.c
+@@ -163,8 +163,12 @@ int console_register(struct console_device *newcdev)
+
+ list_add_tail(&newcdev->list, &console_list);
+
+- if (activate)
+- dev_set_param(dev, "active", "ioe");
++ if (activate) {
++ if (IS_ENABLED(CONFIG_PARAMETER))
++ dev_set_param(dev, "active", "ioe");
++ else
++ console_std_set(dev, NULL, "ioe");
++ }
+
+ return 0;
+ }
+--
+1.7.10.4
+
diff --git a/patches/barebox-2013.04.0/0002-beaglebone-fix-booting.patch b/patches/barebox-2013.07.0/0004-beaglebone-fix-booting.patch
index 1c87406..fb5d09c 100644
--- a/patches/barebox-2013.04.0/0002-beaglebone-fix-booting.patch
+++ b/patches/barebox-2013.07.0/0004-beaglebone-fix-booting.patch
@@ -1,15 +1,15 @@
-From a88084a1d16c0d792be410f196d1e2e537c21d0c Mon Sep 17 00:00:00 2001
-From: Jan Luebbe <jluebbe@debian.org>
-Date: Sat, 30 Mar 2013 21:20:09 +0100
-Subject: [PATCH 2/8] beaglebone: fix booting
+From 3c44683c4f806eedf920704b768f178221e652e1 Mon Sep 17 00:00:00 2001
+From: Jan Luebbe <jlu@pengutronix.de>
+Date: Sun, 14 Jul 2013 13:21:00 +0200
+Subject: [PATCH 04/17] beaglebone: fix booting
Signed-off-by: Jan Luebbe <jlu@pengutronix.de>
---
- arch/arm/boards/beaglebone/lowlevel.c | 14 ++++++++++++--
- 1 file changed, 12 insertions(+), 2 deletions(-)
+ arch/arm/boards/beaglebone/lowlevel.c | 17 ++++++++++++++---
+ 1 file changed, 14 insertions(+), 3 deletions(-)
diff --git a/arch/arm/boards/beaglebone/lowlevel.c b/arch/arm/boards/beaglebone/lowlevel.c
-index 76ac90b..229968e 100644
+index 28959ff..2a8e677 100644
--- a/arch/arm/boards/beaglebone/lowlevel.c
+++ b/arch/arm/boards/beaglebone/lowlevel.c
@@ -1,6 +1,7 @@
@@ -25,17 +25,17 @@ index 76ac90b..229968e 100644
beaglebone_config_ddr();
+ /* Enable pin mux */
-+ enable_uart0_pin_mux();
++ am33xx_enable_uart0_pin_mux();
+
/* UART softreset */
uart_base = AM33XX_UART0_BASE;
-@@ -242,11 +246,17 @@ static int beaglebone_board_init(void)
+@@ -242,17 +246,24 @@ static int beaglebone_board_init(void)
if (!in_sdram)
beaglebone_sram_init();
- /* Enable pin mux */
-- enable_uart0_pin_mux();
+- am33xx_enable_uart0_pin_mux();
+ return 0;
+}
+
@@ -48,8 +48,16 @@ index 76ac90b..229968e 100644
}
+mem_initcall(beaglebone_sram_mem_init);
- void __naked barebox_arm_reset_vector(void)
+-void __naked barebox_arm_reset_vector(void)
++void __bare_init __naked barebox_arm_reset_vector(void)
{
+ arm_cpu_lowlevel_init();
+
+ beaglebone_board_init();
+
+ barebox_arm_entry(0x80000000, SZ_256M, 0);
++ /* barebox_arm_entry(0x402F0400, 0x4030CE00-0x402F0400, 0); */ /* for SRAM */
+ }
--
-1.8.2.rc2
+1.7.10.4
diff --git a/patches/barebox-2013.04.0/0003-beaglebone-env-use-config-board-instead-of-config.patch b/patches/barebox-2013.07.0/0005-beaglebone-env-use-config-board-instead-of-config.patch
index 473d099..e9e2db1 100644
--- a/patches/barebox-2013.04.0/0003-beaglebone-env-use-config-board-instead-of-config.patch
+++ b/patches/barebox-2013.07.0/0005-beaglebone-env-use-config-board-instead-of-config.patch
@@ -1,12 +1,12 @@
-From 6e87252630465a45259599cfef0c4e245220e3ba Mon Sep 17 00:00:00 2001
+From d4a3d4e53d37d64a7c2490b103356b18cf0999be Mon Sep 17 00:00:00 2001
From: Jan Luebbe <jlu@pengutronix.de>
Date: Mon, 8 Apr 2013 18:05:35 +0200
-Subject: [PATCH 3/8] beaglebone: env: use config-board instead of config
+Subject: [PATCH 05/17] beaglebone: env: use config-board instead of config
Signed-off-by: Jan Luebbe <jlu@pengutronix.de>
---
- arch/arm/boards/beaglebone/env/config | 21 ---------------------
- arch/arm/boards/beaglebone/env/config-board | 7 +++++++
+ arch/arm/boards/beaglebone/env/config | 21 ---------------------
+ arch/arm/boards/beaglebone/env/config-board | 7 +++++++
2 files changed, 7 insertions(+), 21 deletions(-)
delete mode 100644 arch/arm/boards/beaglebone/env/config
create mode 100644 arch/arm/boards/beaglebone/env/config-board
@@ -52,5 +52,5 @@ index 0000000..f9a2db7
+global.hostname=beaglebone
+global.linux.bootargs.base="console=ttyO0,115200n8"
--
-1.8.2.rc2
+1.7.10.4
diff --git a/patches/barebox-2013.07.0/0006-WIP-beaglebone-add-simple-script-to-change-usb-curre.patch b/patches/barebox-2013.07.0/0006-WIP-beaglebone-add-simple-script-to-change-usb-curre.patch
new file mode 100644
index 0000000..7f346d1
--- /dev/null
+++ b/patches/barebox-2013.07.0/0006-WIP-beaglebone-add-simple-script-to-change-usb-curre.patch
@@ -0,0 +1,26 @@
+From 6bf54b3d1cc8b5506781fc3e754e38a65371e9b1 Mon Sep 17 00:00:00 2001
+From: Jan Luebbe <jlu@pengutronix.de>
+Date: Sun, 31 Mar 2013 12:28:01 +0200
+Subject: [PATCH 06/17] WIP: beaglebone: add simple script to change usb
+ current limit
+
+Signed-off-by: Jan Luebbe <jlu@pengutronix.de>
+---
+ arch/arm/boards/beaglebone/env/init/usb-limit-1300 | 5 +++++
+ 1 file changed, 5 insertions(+)
+ create mode 100644 arch/arm/boards/beaglebone/env/init/usb-limit-1300
+
+diff --git a/arch/arm/boards/beaglebone/env/init/usb-limit-1300 b/arch/arm/boards/beaglebone/env/init/usb-limit-1300
+new file mode 100644
+index 0000000..56313bf
+--- /dev/null
++++ b/arch/arm/boards/beaglebone/env/init/usb-limit-1300
+@@ -0,0 +1,5 @@
++#!/bin/sh
++
++echo -n "changing USB current limit to 1300 mA... "
++i2c_write -b 0 -a 0x24 -r 0x01 0x3e
++echo "done"
+--
+1.7.10.4
+
diff --git a/patches/barebox-2013.07.0/0007-ARM-AM33xx-Add-gpio-support.patch b/patches/barebox-2013.07.0/0007-ARM-AM33xx-Add-gpio-support.patch
new file mode 100644
index 0000000..4740391
--- /dev/null
+++ b/patches/barebox-2013.07.0/0007-ARM-AM33xx-Add-gpio-support.patch
@@ -0,0 +1,41 @@
+From af8dbd7d41f9a57791b2bd04c277728ad3ea5138 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Teresa=20G=C3=A1mez?= <t.gamez@phytec.de>
+Date: Tue, 9 Jul 2013 11:23:13 +0200
+Subject: [PATCH 07/17] ARM: AM33xx: Add gpio support
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Register GPIO banks for AM33xx boards.
+
+Signed-off-by: Teresa Gámez <t.gamez@phytec.de>
+Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
+---
+ arch/arm/mach-omap/am33xx_generic.c | 14 ++++++++++++++
+ 1 file changed, 14 insertions(+)
+
+diff --git a/arch/arm/mach-omap/am33xx_generic.c b/arch/arm/mach-omap/am33xx_generic.c
+index 96432c9..3ab16b0 100644
+--- a/arch/arm/mach-omap/am33xx_generic.c
++++ b/arch/arm/mach-omap/am33xx_generic.c
+@@ -126,3 +126,17 @@ int am33xx_register_ethaddr(int eth_id, int mac_id)
+
+ return -ENODEV;
+ }
++
++static int am33xx_gpio_init(void)
++{
++ add_generic_device("omap-gpio", 0, NULL, AM33XX_GPIO0_BASE,
++ 0xf00, IORESOURCE_MEM, NULL);
++ add_generic_device("omap-gpio", 1, NULL, AM33XX_GPIO1_BASE,
++ 0xf00, IORESOURCE_MEM, NULL);
++ add_generic_device("omap-gpio", 2, NULL, AM33XX_GPIO2_BASE,
++ 0xf00, IORESOURCE_MEM, NULL);
++ add_generic_device("omap-gpio", 3, NULL, AM33XX_GPIO3_BASE,
++ 0xf00, IORESOURCE_MEM, NULL);
++ return 0;
++}
++coredevice_initcall(am33xx_gpio_init);
+--
+1.7.10.4
+
diff --git a/patches/barebox-2013.07.0/0008-ARM-AM33xx-Enable-clock-for-all-GPIO-banks.patch b/patches/barebox-2013.07.0/0008-ARM-AM33xx-Enable-clock-for-all-GPIO-banks.patch
new file mode 100644
index 0000000..654c58f
--- /dev/null
+++ b/patches/barebox-2013.07.0/0008-ARM-AM33xx-Enable-clock-for-all-GPIO-banks.patch
@@ -0,0 +1,40 @@
+From b284ba947ff3626063aabd0e5bb9ec16aba8e145 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Teresa=20G=C3=A1mez?= <t.gamez@phytec.de>
+Date: Tue, 9 Jul 2013 11:23:17 +0200
+Subject: [PATCH 08/17] ARM: AM33xx: Enable clock for all GPIO banks
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Teresa Gámez <t.gamez@phytec.de>
+Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
+---
+ arch/arm/mach-omap/am33xx_clock.c | 12 ++++++++++++
+ 1 file changed, 12 insertions(+)
+
+diff --git a/arch/arm/mach-omap/am33xx_clock.c b/arch/arm/mach-omap/am33xx_clock.c
+index 4451d62..e4d9d77 100644
+--- a/arch/arm/mach-omap/am33xx_clock.c
++++ b/arch/arm/mach-omap/am33xx_clock.c
+@@ -53,6 +53,18 @@ static void interface_clocks_enable(void)
+ /* GPIO0 */
+ __raw_writel(PRCM_MOD_EN, CM_WKUP_GPIO0_CLKCTRL);
+ while (__raw_readl(CM_WKUP_GPIO0_CLKCTRL) != PRCM_MOD_EN);
++
++ /* GPIO1 */
++ __raw_writel(PRCM_MOD_EN, CM_PER_GPIO1_CLKCTRL);
++ while (__raw_readl(CM_PER_GPIO1_CLKCTRL) != PRCM_MOD_EN);
++
++ /* GPIO2 */
++ __raw_writel(PRCM_MOD_EN, CM_PER_GPIO2_CLKCTRL);
++ while (__raw_readl(CM_PER_GPIO2_CLKCTRL) != PRCM_MOD_EN);
++
++ /* GPIO3 */
++ __raw_writel(PRCM_MOD_EN, CM_PER_GPIO3_CLKCTRL);
++ while (__raw_readl(CM_PER_GPIO3_CLKCTRL) != PRCM_MOD_EN);
+ }
+
+ static void power_domain_transition_enable(void)
+--
+1.7.10.4
+
diff --git a/patches/barebox-2013.07.0/0009-ARM-AM33xx-Make-mpu-pll-configurable-by-lowlevel-boa.patch b/patches/barebox-2013.07.0/0009-ARM-AM33xx-Make-mpu-pll-configurable-by-lowlevel-boa.patch
new file mode 100644
index 0000000..76ebeae
--- /dev/null
+++ b/patches/barebox-2013.07.0/0009-ARM-AM33xx-Make-mpu-pll-configurable-by-lowlevel-boa.patch
@@ -0,0 +1,62 @@
+From 16f580940c592e26d9e816be330509e16a2741da Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Teresa=20G=C3=A1mez?= <t.gamez@phytec.de>
+Date: Tue, 9 Jul 2013 11:23:19 +0200
+Subject: [PATCH 09/17] ARM: AM33xx: Make mpu pll configurable by lowlevel
+ board code
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Teresa Gámez <t.gamez@phytec.de>
+Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
+---
+ arch/arm/boards/beaglebone/lowlevel.c | 2 +-
+ arch/arm/mach-omap/am33xx_clock.c | 4 ++--
+ arch/arm/mach-omap/include/mach/am33xx-clock.h | 2 +-
+ 3 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/arch/arm/boards/beaglebone/lowlevel.c b/arch/arm/boards/beaglebone/lowlevel.c
+index 2a8e677..ebbd960 100644
+--- a/arch/arm/boards/beaglebone/lowlevel.c
++++ b/arch/arm/boards/beaglebone/lowlevel.c
+@@ -198,7 +198,7 @@ void beaglebone_sram_init(void)
+ u32 regVal, uart_base;
+
+ /* Setup the PLLs and the clocks for the peripherals */
+- pll_init();
++ pll_init(MPUPLL_M_500);
+
+ beaglebone_config_ddr();
+
+diff --git a/arch/arm/mach-omap/am33xx_clock.c b/arch/arm/mach-omap/am33xx_clock.c
+index e4d9d77..9928e9f 100644
+--- a/arch/arm/mach-omap/am33xx_clock.c
++++ b/arch/arm/mach-omap/am33xx_clock.c
+@@ -294,9 +294,9 @@ void enable_ddr_clocks(void)
+ /*
+ * Configure the PLL/PRCM for necessary peripherals
+ */
+-void pll_init()
++void pll_init(int mpupll_M)
+ {
+- mpu_pll_config(MPUPLL_M_500);
++ mpu_pll_config(mpupll_M);
+ core_pll_config();
+ per_pll_config();
+ ddr_pll_config();
+diff --git a/arch/arm/mach-omap/include/mach/am33xx-clock.h b/arch/arm/mach-omap/include/mach/am33xx-clock.h
+index 3d1f074..968509e 100644
+--- a/arch/arm/mach-omap/include/mach/am33xx-clock.h
++++ b/arch/arm/mach-omap/include/mach/am33xx-clock.h
+@@ -187,7 +187,7 @@
+
+ #define CM_ALWON_GPMC_CLKCTRL CM_PER_GPMC_CLKCTRL
+
+-extern void pll_init(void);
++extern void pll_init(int mpupll_M);
+ extern void enable_ddr_clocks(void);
+
+ #endif /* endif _AM33XX_CLOCKS_H_ */
+--
+1.7.10.4
+
diff --git a/patches/barebox-2013.07.0/0010-arm-omap-store-boot-source-info-from-ROM-loader.patch b/patches/barebox-2013.07.0/0010-arm-omap-store-boot-source-info-from-ROM-loader.patch
new file mode 100644
index 0000000..3edcb3a
--- /dev/null
+++ b/patches/barebox-2013.07.0/0010-arm-omap-store-boot-source-info-from-ROM-loader.patch
@@ -0,0 +1,481 @@
+From 989eded334449152f1a3a162dd20939a7c9de388 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Teresa=20G=C3=A1mez?= <t.gamez@phytec.de>
+Date: Tue, 9 Jul 2013 11:23:20 +0200
+Subject: [PATCH 10/17] arm: omap: store boot source info from ROM loader
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+The ROM loader passes the address of a buffer to the MLO in
+register 0. Store this data so we can find the boot source later.
+On the same way the bootinformation are passed to the barebox,
+then. It has to be enshured that r0 contains always the
+buffer or the boot source detection will not work.
+
+Applied this on all OMAPs. This patch is based on work of
+Jan Luebbe <jlu@pengutronix.de>.
+
+Compile tested on all OMAP boards.
+Tested on pcm049, phyCARD-A-L1 and pcm051.
+
+Signed-off-by: Teresa Gámez <t.gamez@phytec.de>
+Tested-by: Christoph Fritz <chf.fritz@googlemail.com>
+Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
+---
+ arch/arm/boards/archosg9/lowlevel.c | 5 ++++-
+ arch/arm/boards/beagle/lowlevel.c | 6 +++++-
+ arch/arm/boards/beaglebone/lowlevel.c | 5 ++++-
+ arch/arm/boards/omap343xdsp/lowlevel.c | 6 +++++-
+ arch/arm/boards/omap3evm/lowlevel.c | 5 ++++-
+ arch/arm/boards/panda/lowlevel.c | 6 +++++-
+ arch/arm/boards/pcm049/lowlevel.c | 6 +++++-
+ arch/arm/boards/phycard-a-l1/lowlevel.c | 5 ++++-
+ arch/arm/boards/phycard-a-xl2/lowlevel.c | 6 +++++-
+ arch/arm/mach-omap/Makefile | 4 ++--
+ arch/arm/mach-omap/am33xx_generic.c | 18 +++++++++++++++++-
+ arch/arm/mach-omap/include/mach/generic.h | 3 +++
+ arch/arm/mach-omap/omap3_generic.c | 16 +++++++++++++---
+ arch/arm/mach-omap/omap4_generic.c | 18 +++++++++++++-----
+ arch/arm/mach-omap/omap_bootinfo.S | 25 +++++++++++++++++++++++++
+ arch/arm/mach-omap/xload.c | 8 ++++++--
+ 16 files changed, 120 insertions(+), 22 deletions(-)
+ create mode 100644 arch/arm/mach-omap/omap_bootinfo.S
+
+diff --git a/arch/arm/boards/archosg9/lowlevel.c b/arch/arm/boards/archosg9/lowlevel.c
+index 0334693..d443a60 100644
+--- a/arch/arm/boards/archosg9/lowlevel.c
++++ b/arch/arm/boards/archosg9/lowlevel.c
+@@ -14,6 +14,7 @@
+ #include <io.h>
+ #include <init.h>
+ #include <sizes.h>
++#include <mach/generic.h>
+ #include <mach/omap4-mux.h>
+ #include <mach/omap4-silicon.h>
+ #include <mach/omap4-clock.h>
+@@ -65,8 +66,10 @@ static noinline void archosg9_init_lowlevel(void)
+ omap4_ddr_init(&ddr_regs_400_mhz_2cs, &core);
+ }
+
+-void __naked __bare_init barebox_arm_reset_vector(void)
++void __naked __bare_init barebox_arm_reset_vector(uint32_t *data)
+ {
++ omap_save_bootinfo();
++
+ arm_cpu_lowlevel_init();
+
+ if (get_pc() > 0x80000000)
+diff --git a/arch/arm/boards/beagle/lowlevel.c b/arch/arm/boards/beagle/lowlevel.c
+index d0fd066..ef7e3c0 100644
+--- a/arch/arm/boards/beagle/lowlevel.c
++++ b/arch/arm/boards/beagle/lowlevel.c
+@@ -1,8 +1,10 @@
++#include <init.h>
+ #include <io.h>
+ #include <sizes.h>
+ #include <asm/barebox-arm-head.h>
+ #include <asm/barebox-arm.h>
+ #include <mach/control.h>
++#include <mach/generic.h>
+ #include <mach/omap3-silicon.h>
+ #include <mach/omap3-mux.h>
+ #include <mach/sdrc.h>
+@@ -178,8 +180,10 @@ static int beagle_board_init(void)
+ return 0;
+ }
+
+-void __naked barebox_arm_reset_vector(void)
++void __naked __bare_init barebox_arm_reset_vector(uint32_t *data)
+ {
++ omap_save_bootinfo();
++
+ arm_cpu_lowlevel_init();
+
+ beagle_board_init();
+diff --git a/arch/arm/boards/beaglebone/lowlevel.c b/arch/arm/boards/beaglebone/lowlevel.c
+index ebbd960..59d9ff1 100644
+--- a/arch/arm/boards/beaglebone/lowlevel.c
++++ b/arch/arm/boards/beaglebone/lowlevel.c
+@@ -6,6 +6,7 @@
+ #include <asm/barebox-arm.h>
+ #include <mach/am33xx-silicon.h>
+ #include <mach/am33xx-clock.h>
++#include <mach/generic.h>
+ #include <mach/sdrc.h>
+ #include <mach/sys_info.h>
+ #include <mach/syslib.h>
+@@ -258,8 +259,10 @@ static int beaglebone_sram_mem_init(void)
+ }
+ mem_initcall(beaglebone_sram_mem_init);
+
+-void __bare_init __naked barebox_arm_reset_vector(void)
++void __bare_init __naked barebox_arm_reset_vector(uint32_t *data)
+ {
++ omap_save_bootinfo();
++
+ arm_cpu_lowlevel_init();
+
+ beaglebone_board_init();
+diff --git a/arch/arm/boards/omap343xdsp/lowlevel.c b/arch/arm/boards/omap343xdsp/lowlevel.c
+index ed675ad..61b7f99 100644
+--- a/arch/arm/boards/omap343xdsp/lowlevel.c
++++ b/arch/arm/boards/omap343xdsp/lowlevel.c
+@@ -1,8 +1,10 @@
+ #include <common.h>
++#include <init.h>
+ #include <io.h>
+ #include <sizes.h>
+ #include <asm/barebox-arm-head.h>
+ #include <asm/barebox-arm.h>
++#include <mach/generic.h>
+ #include <mach/omap3-mux.h>
+ #include <mach/sdrc.h>
+ #include <mach/control.h>
+@@ -545,8 +547,10 @@ static int sdp343x_board_init(void)
+ return 0;
+ }
+
+-void __naked barebox_arm_reset_vector(void)
++void __naked __bare_init barebox_arm_reset_vector(uint32_t *data)
+ {
++ omap_save_bootinfo();
++
+ arm_cpu_lowlevel_init();
+
+ sdp343x_board_init();
+diff --git a/arch/arm/boards/omap3evm/lowlevel.c b/arch/arm/boards/omap3evm/lowlevel.c
+index 2d9e130..ea92835 100644
+--- a/arch/arm/boards/omap3evm/lowlevel.c
++++ b/arch/arm/boards/omap3evm/lowlevel.c
+@@ -3,6 +3,7 @@
+ #include <sizes.h>
+ #include <asm/barebox-arm-head.h>
+ #include <asm/barebox-arm.h>
++#include <mach/generic.h>
+ #include <mach/omap3-mux.h>
+ #include <mach/sdrc.h>
+ #include <mach/control.h>
+@@ -159,8 +160,10 @@ static int omap3_evm_board_init(void)
+ return 0;
+ }
+
+-void __naked barebox_arm_reset_vector(void)
++void __naked __bare_init barebox_arm_reset_vector(uint32_t *data)
+ {
++ omap_save_bootinfo();
++
+ arm_cpu_lowlevel_init();
+
+ omap3_evm_board_init();
+diff --git a/arch/arm/boards/panda/lowlevel.c b/arch/arm/boards/panda/lowlevel.c
+index ed1dc6f..76ef83b 100644
+--- a/arch/arm/boards/panda/lowlevel.c
++++ b/arch/arm/boards/panda/lowlevel.c
+@@ -17,8 +17,10 @@
+ *
+ */
+ #include <common.h>
++#include <init.h>
+ #include <io.h>
+ #include <sizes.h>
++#include <mach/generic.h>
+ #include <mach/omap4-mux.h>
+ #include <mach/omap4-silicon.h>
+ #include <mach/omap4-clock.h>
+@@ -73,8 +75,10 @@ static void noinline panda_init_lowlevel(void)
+ omap4_scale_vcores(TPS62361_VSEL0_GPIO);
+ }
+
+-void barebox_arm_reset_vector(void)
++void __bare_init __naked barebox_arm_reset_vector(uint32_t *data)
+ {
++ omap_save_bootinfo();
++
+ arm_cpu_lowlevel_init();
+
+ if (get_pc() > 0x80000000)
+diff --git a/arch/arm/boards/pcm049/lowlevel.c b/arch/arm/boards/pcm049/lowlevel.c
+index 8bcecb1..e409ad8 100644
+--- a/arch/arm/boards/pcm049/lowlevel.c
++++ b/arch/arm/boards/pcm049/lowlevel.c
+@@ -17,8 +17,10 @@
+ *
+ */
+ #include <common.h>
++#include <init.h>
+ #include <io.h>
+ #include <sizes.h>
++#include <mach/generic.h>
+ #include <mach/omap4-mux.h>
+ #include <mach/omap4-silicon.h>
+ #include <mach/omap4-clock.h>
+@@ -102,8 +104,10 @@ static void noinline pcm049_init_lowlevel(void)
+ sr32(OMAP44XX_SCRM_ALTCLKSRC, 2, 2, 0x3); /* enable clocks */
+ }
+
+-void barebox_arm_reset_vector(void)
++void __bare_init __naked barebox_arm_reset_vector(uint32_t *data)
+ {
++ omap_save_bootinfo();
++
+ arm_cpu_lowlevel_init();
+
+ if (get_pc() > 0x80000000)
+diff --git a/arch/arm/boards/phycard-a-l1/lowlevel.c b/arch/arm/boards/phycard-a-l1/lowlevel.c
+index 30379d8..7855040 100644
+--- a/arch/arm/boards/phycard-a-l1/lowlevel.c
++++ b/arch/arm/boards/phycard-a-l1/lowlevel.c
+@@ -5,6 +5,7 @@
+ #include <asm/barebox-arm-head.h>
+ #include <asm/barebox-arm.h>
+ #include <mach/omap3-mux.h>
++#include <mach/generic.h>
+ #include <mach/sdrc.h>
+ #include <mach/control.h>
+ #include <mach/syslib.h>
+@@ -250,8 +251,10 @@ static int pcaal1_board_init(void)
+ return 0;
+ }
+
+-void __naked barebox_arm_reset_vector(void)
++void __bare_init __naked barebox_arm_reset_vector(uint32_t *data)
+ {
++ omap_save_bootinfo();
++
+ arm_cpu_lowlevel_init();
+
+ pcaal1_board_init();
+diff --git a/arch/arm/boards/phycard-a-xl2/lowlevel.c b/arch/arm/boards/phycard-a-xl2/lowlevel.c
+index 07505ff..5e68334 100644
+--- a/arch/arm/boards/phycard-a-xl2/lowlevel.c
++++ b/arch/arm/boards/phycard-a-xl2/lowlevel.c
+@@ -17,8 +17,10 @@
+ *
+ */
+ #include <common.h>
++#include <init.h>
+ #include <io.h>
+ #include <sizes.h>
++#include <mach/generic.h>
+ #include <mach/omap4-mux.h>
+ #include <mach/omap4-silicon.h>
+ #include <mach/omap4-clock.h>
+@@ -83,8 +85,10 @@ static noinline void pcaaxl2_init_lowlevel(void)
+ sr32(0x4A30a110, 2, 2, 0x3); /* enable clocks */
+ }
+
+-void barebox_arm_reset_vector(void)
++void __bare_init __naked barebox_arm_reset_vector(uint32_t *data)
+ {
++ omap_save_bootinfo();
++
+ arm_cpu_lowlevel_init();
+
+ if (get_pc() > 0x80000000)
+diff --git a/arch/arm/mach-omap/Makefile b/arch/arm/mach-omap/Makefile
+index 973068d..d42de48 100644
+--- a/arch/arm/mach-omap/Makefile
++++ b/arch/arm/mach-omap/Makefile
+@@ -15,8 +15,8 @@
+ # GNU General Public License for more details.
+ #
+ #
+-obj-$(CONFIG_ARCH_OMAP) += syslib.o omap_devices.o omap_generic.o
+-pbl-$(CONFIG_ARCH_OMAP) += syslib.o
++obj-$(CONFIG_ARCH_OMAP) += syslib.o omap_devices.o omap_generic.o omap_bootinfo.o
++pbl-$(CONFIG_ARCH_OMAP) += syslib.o omap_bootinfo.o
+ obj-$(CONFIG_OMAP_CLOCK_SOURCE_S32K) += s32k_clksource.o
+ obj-$(CONFIG_OMAP_CLOCK_SOURCE_DMTIMER0) += dmtimer0.o
+ obj-$(CONFIG_ARCH_OMAP3) += omap3_generic.o auxcr.o
+diff --git a/arch/arm/mach-omap/am33xx_generic.c b/arch/arm/mach-omap/am33xx_generic.c
+index 3ab16b0..45fefb4 100644
+--- a/arch/arm/mach-omap/am33xx_generic.c
++++ b/arch/arm/mach-omap/am33xx_generic.c
+@@ -25,6 +25,7 @@
+ #include <net.h>
+ #include <mach/am33xx-silicon.h>
+ #include <mach/am33xx-clock.h>
++#include <mach/generic.h>
+ #include <mach/sys_info.h>
+ #include <mach/am33xx-generic.h>
+
+@@ -97,7 +98,22 @@ u32 running_in_sdram(void)
+
+ static int am33xx_bootsource(void)
+ {
+- bootsource_set(BOOTSOURCE_MMC); /* only MMC for now */
++ enum bootsource src;
++
++ switch (omap_bootinfo[2] & 0xFF) {
++ case 0x05:
++ src = BOOTSOURCE_NAND;
++ break;
++ case 0x08:
++ src = BOOTSOURCE_MMC;
++ break;
++ case 0x0b:
++ src = BOOTSOURCE_SPI;
++ break;
++ default:
++ src = BOOTSOURCE_UNKNOWN;
++ }
++ bootsource_set(src);
+ bootsource_set_instance(0);
+ return 0;
+ }
+diff --git a/arch/arm/mach-omap/include/mach/generic.h b/arch/arm/mach-omap/include/mach/generic.h
+index 5a10a54..f1a3efe 100644
+--- a/arch/arm/mach-omap/include/mach/generic.h
++++ b/arch/arm/mach-omap/include/mach/generic.h
+@@ -27,4 +27,7 @@
+ #define cpu_is_omap4xxx() (0)
+ #endif
+
++extern uint32_t omap_bootinfo[3];
++void omap_save_bootinfo(void);
++
+ #endif
+diff --git a/arch/arm/mach-omap/omap3_generic.c b/arch/arm/mach-omap/omap3_generic.c
+index f144813..8b661ff 100644
+--- a/arch/arm/mach-omap/omap3_generic.c
++++ b/arch/arm/mach-omap/omap3_generic.c
+@@ -33,6 +33,7 @@
+ #include <io.h>
+ #include <mach/omap3-silicon.h>
+ #include <mach/gpmc.h>
++#include <mach/generic.h>
+ #include <mach/sdrc.h>
+ #include <mach/control.h>
+ #include <mach/omap3-smx.h>
+@@ -468,12 +469,21 @@ void omap3_core_init(void)
+ static int omap3_bootsource(void)
+ {
+ enum bootsource src = BOOTSOURCE_UNKNOWN;
+- u32 bootsrc = readl(OMAP3_TRACING_VECTOR1);
+
+- if (bootsrc & (1 << 2))
++ switch (omap_bootinfo[1] & 0xFF) {
++ case 0x02:
+ src = BOOTSOURCE_NAND;
+- if (bootsrc & (1 << 6))
++ break;
++ case 0x06:
+ src = BOOTSOURCE_MMC;
++ break;
++ case 0x11:
++ src = BOOTSOURCE_USB;
++ break;
++ default:
++ src = BOOTSOURCE_UNKNOWN;
++ }
++
+ bootsource_set(src);
+ bootsource_set_instance(0);
+
+diff --git a/arch/arm/mach-omap/omap4_generic.c b/arch/arm/mach-omap/omap4_generic.c
+index 7d71fdc..4e98205 100644
+--- a/arch/arm/mach-omap/omap4_generic.c
++++ b/arch/arm/mach-omap/omap4_generic.c
+@@ -6,6 +6,7 @@
+ #include <mach/omap4-silicon.h>
+ #include <mach/omap4-mux.h>
+ #include <mach/syslib.h>
++#include <mach/generic.h>
+ #include <mach/gpmc.h>
+ #include <mach/gpio.h>
+ #include <mach/omap4_rom_usb.h>
+@@ -504,14 +505,21 @@ static int omap_vector_init(void)
+ static int omap4_bootsource(void)
+ {
+ enum bootsource src = BOOTSOURCE_UNKNOWN;
+- u32 bootsrc = readl(OMAP4_TRACING_VECTOR3);
+
+- if (bootsrc & (1 << 5))
+- src = BOOTSOURCE_MMC;
+- else if (bootsrc & (1 << 3))
++ switch (omap_bootinfo[2] & 0xFF) {
++ case 0x03:
+ src = BOOTSOURCE_NAND;
+- else if (bootsrc & (1<<20))
++ break;
++ case 0x05:
++ src = BOOTSOURCE_MMC;
++ break;
++ case 0x20:
+ src = BOOTSOURCE_USB;
++ break;
++ default:
++ src = BOOTSOURCE_UNKNOWN;
++ }
++
+ bootsource_set(src);
+ bootsource_set_instance(0);
+
+diff --git a/arch/arm/mach-omap/omap_bootinfo.S b/arch/arm/mach-omap/omap_bootinfo.S
+new file mode 100644
+index 0000000..ffd0a3d
+--- /dev/null
++++ b/arch/arm/mach-omap/omap_bootinfo.S
+@@ -0,0 +1,25 @@
++#include <config.h>
++#include <linux/linkage.h>
++#include <asm/assembler.h>
++
++.section ".text_bare_init","ax"
++.globl omap_bootinfo
++omap_bootinfo:
++ .word 0x0
++ .word 0x0
++ .word 0x0
++
++.section ".text_bare_init","ax"
++ENTRY(omap_save_bootinfo)
++ /*
++ * save data from rom boot loader
++ */
++ adr r2, omap_bootinfo
++ ldr r1, [r0, #0x00]
++ str r1, [r2, #0x00]
++ ldr r1, [r0, #0x04]
++ str r1, [r2, #0x04]
++ ldr r1, [r0, #0x08]
++ str r1, [r2, #0x08]
++ mov pc, lr
++ENDPROC(omap_save_bootinfo)
+diff --git a/arch/arm/mach-omap/xload.c b/arch/arm/mach-omap/xload.c
+index 3cce3f2..3dbdef5 100644
+--- a/arch/arm/mach-omap/xload.c
++++ b/arch/arm/mach-omap/xload.c
+@@ -9,6 +9,7 @@
+ #include <fcntl.h>
+ #include <sizes.h>
+ #include <filetype.h>
++#include <mach/generic.h>
+
+ static void *read_image_head(const char *name)
+ {
+@@ -163,7 +164,8 @@ static void *omap4_xload_boot_usb(void){
+ */
+ static __noreturn int omap_xload(void)
+ {
+- int (*func)(void) = NULL;
++ int (*func)(void *) = NULL;
++ uint32_t *arg;
+
+ switch (bootsource_get())
+ {
+@@ -198,8 +200,10 @@ static __noreturn int omap_xload(void)
+ while (1);
+ }
+
++ arg = (uint32_t *)&omap_bootinfo;
++
+ shutdown_barebox();
+- func();
++ func(arg);
+
+ while (1);
+ }
+--
+1.7.10.4
+
diff --git a/patches/barebox-2013.07.0/0011-i2c-omap-cleanup-cpu_is-functions.patch b/patches/barebox-2013.07.0/0011-i2c-omap-cleanup-cpu_is-functions.patch
new file mode 100644
index 0000000..3212c33
--- /dev/null
+++ b/patches/barebox-2013.07.0/0011-i2c-omap-cleanup-cpu_is-functions.patch
@@ -0,0 +1,247 @@
+From b7912f1e3d3ddebbb544e0808df65010e10efad6 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Teresa=20G=C3=A1mez?= <t.gamez@phytec.de>
+Date: Thu, 20 Jun 2013 14:50:28 +0200
+Subject: [PATCH 11/17] i2c-omap: cleanup cpu_is functions
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+cpu_is_omap2430() is set when CONFIG_ARCH_OMAP is enabled.
+This fits for all OMAP/AM33xx boards supported in barebox.
+Cleaned up all conditions that use the cpu_is_omap2430().
+Also removed some unused defines.
+
+Signed-off-by: Teresa Gámez <t.gamez@phytec.de>
+Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
+---
+ drivers/i2c/busses/i2c-omap.c | 159 +++++++++++++++--------------------------
+ 1 file changed, 57 insertions(+), 102 deletions(-)
+
+diff --git a/drivers/i2c/busses/i2c-omap.c b/drivers/i2c/busses/i2c-omap.c
+index 503443f..ecb33ea 100644
+--- a/drivers/i2c/busses/i2c-omap.c
++++ b/drivers/i2c/busses/i2c-omap.c
+@@ -24,10 +24,6 @@
+ * GNU General Public License for more details.
+ */
+
+-
+-/* #include <linux/delay.h> */
+-
+-
+ #include <clock.h>
+ #include <common.h>
+ #include <driver.h>
+@@ -44,12 +40,6 @@
+ #include <mach/generic.h>
+ #include <mach/omap3-clock.h>
+
+-#define OMAP_I2C_SIZE 0x3f
+-#define OMAP1_I2C_BASE 0xfffb3800
+-#define OMAP2_I2C_BASE1 0x48070000
+-#define OMAP2_I2C_BASE2 0x48072000
+-#define OMAP2_I2C_BASE3 0x48060000
+-
+ /* This will be the driver name */
+ #define DRIVER_NAME "i2c-omap"
+
+@@ -141,7 +131,6 @@
+ #define SYSC_IDLEMODE_SMART 0x2
+ #define SYSC_CLOCKACTIVITY_FCLK 0x2
+
+-
+ struct omap_i2c_struct {
+ void *base;
+ u8 *regs;
+@@ -352,63 +341,51 @@ static int omap_i2c_init(struct omap_i2c_struct *i2c_omap)
+ }
+ omap_i2c_write_reg(i2c_omap, OMAP_I2C_CON_REG, 0);
+
+- /* omap1 handling is missing here */
+-
+- if (cpu_is_omap2430() || cpu_is_omap34xx() || cpu_is_omap4xxx()) {
+-
+- /*
+- * HSI2C controller internal clk rate should be 19.2 Mhz for
+- * HS and for all modes on 2430. On 34xx we can use lower rate
+- * to get longer filter period for better noise suppression.
+- * The filter is iclk (fclk for HS) period.
+- */
+- if (i2c_omap->speed > 400 || cpu_is_omap2430())
+- internal_clk = 19200;
+- else if (i2c_omap->speed > 100)
+- internal_clk = 9600;
+- else
+- internal_clk = 4000;
+- fclk_rate = 96000000 / 1000;
+-
+- /* Compute prescaler divisor */
+- psc = fclk_rate / internal_clk;
+- psc = psc - 1;
+-
+- /* If configured for High Speed */
+- if (i2c_omap->speed > 400) {
+- unsigned long scl;
+-
+- /* For first phase of HS mode */
+- scl = internal_clk / 400;
+- fsscll = scl - (scl / 3) - 7;
+- fssclh = (scl / 3) - 5;
+-
+- /* For second phase of HS mode */
+- scl = fclk_rate / i2c_omap->speed;
+- hsscll = scl - (scl / 3) - 7;
+- hssclh = (scl / 3) - 5;
+- } else if (i2c_omap->speed > 100) {
+- unsigned long scl;
+-
+- /* Fast mode */
+- scl = internal_clk / i2c_omap->speed;
+- fsscll = scl - (scl / 3) - 7;
+- fssclh = (scl / 3) - 5;
+- } else {
+- /* Standard mode */
+- fsscll = internal_clk / (i2c_omap->speed * 2) - 7;
+- fssclh = internal_clk / (i2c_omap->speed * 2) - 5;
+- }
+- scll = (hsscll << OMAP_I2C_SCLL_HSSCLL) | fsscll;
+- sclh = (hssclh << OMAP_I2C_SCLH_HSSCLH) | fssclh;
++ /*
++ * HSI2C controller internal clk rate should be 19.2 Mhz for
++ * HS and for all modes on 2430. On 34xx we can use lower rate
++ * to get longer filter period for better noise suppression.
++ * The filter is iclk (fclk for HS) period.
++ */
++ if (i2c_omap->speed > 400)
++ internal_clk = 19200;
++ else if (i2c_omap->speed > 100)
++ internal_clk = 9600;
++ else
++ internal_clk = 4000;
++ fclk_rate = 96000000 / 1000;
++
++ /* Compute prescaler divisor */
++ psc = fclk_rate / internal_clk;
++ psc = psc - 1;
++
++ /* If configured for High Speed */
++ if (i2c_omap->speed > 400) {
++ unsigned long scl;
++
++ /* For first phase of HS mode */
++ scl = internal_clk / 400;
++ fsscll = scl - (scl / 3) - 7;
++ fssclh = (scl / 3) - 5;
++
++ /* For second phase of HS mode */
++ scl = fclk_rate / i2c_omap->speed;
++ hsscll = scl - (scl / 3) - 7;
++ hssclh = (scl / 3) - 5;
++ } else if (i2c_omap->speed > 100) {
++ unsigned long scl;
++
++ /* Fast mode */
++ scl = internal_clk / i2c_omap->speed;
++ fsscll = scl - (scl / 3) - 7;
++ fssclh = (scl / 3) - 5;
+ } else {
+- /* Program desired operating rate */
+- fclk_rate /= (psc + 1) * 1000;
+- if (psc > 2)
+- psc = 2;
+- scll = fclk_rate / (i2c_omap->speed * 2) - 7 + psc;
+- sclh = fclk_rate / (i2c_omap->speed * 2) - 7 + psc;
++ /* Standard mode */
++ fsscll = internal_clk / (i2c_omap->speed * 2) - 7;
++ fssclh = internal_clk / (i2c_omap->speed * 2) - 5;
+ }
++ scll = (hsscll << OMAP_I2C_SCLL_HSSCLL) | fsscll;
++ sclh = (hssclh << OMAP_I2C_SCLH_HSSCLH) | fssclh;
+
+ /* Setup clock prescaler to obtain approx 12MHz I2C module clock: */
+ omap_i2c_write_reg(i2c_omap, OMAP_I2C_PSC_REG, psc);
+@@ -525,15 +502,6 @@ complete:
+ if (dev->buf_len) {
+ *dev->buf++ = w;
+ dev->buf_len--;
+- /* Data reg from 2430 is 8 bit wide */
+- if (!cpu_is_omap2430() &&
+- !cpu_is_omap34xx() &&
+- !cpu_is_omap4xxx()) {
+- if (dev->buf_len) {
+- *dev->buf++ = w >> 8;
+- dev->buf_len--;
+- }
+- }
+ } else {
+ if (stat & OMAP_I2C_STAT_RRDY)
+ dev_err(&dev->adapter.dev,
+@@ -566,15 +534,6 @@ complete:
+ if (dev->buf_len) {
+ w = *dev->buf++;
+ dev->buf_len--;
+- /* Data reg from 2430 is 8 bit wide */
+- if (!cpu_is_omap2430() &&
+- !cpu_is_omap34xx() &&
+- !cpu_is_omap4xxx()) {
+- if (dev->buf_len) {
+- w |= *dev->buf++ << 8;
+- dev->buf_len--;
+- }
+- }
+ } else {
+ if (stat & OMAP_I2C_STAT_XRDY)
+ dev_err(&dev->adapter.dev,
+@@ -776,6 +735,7 @@ i2c_omap_probe(struct device_d *pdev)
+ /* struct i2c_platform_data *pdata; */
+ int r;
+ u32 speed = 0;
++ u16 s;
+
+ i2c_omap = kzalloc(sizeof(struct omap_i2c_struct), GFP_KERNEL);
+ if (!i2c_omap) {
+@@ -802,28 +762,23 @@ i2c_omap_probe(struct device_d *pdev)
+ omap_i2c_unidle(i2c_omap);
+
+ i2c_omap->rev = omap_i2c_read_reg(i2c_omap, OMAP_I2C_REV_REG) & 0xff;
+- /* i2c_omap->base = OMAP2_I2C_BASE3; */
+-
+- if (cpu_is_omap2430() || cpu_is_omap34xx() || cpu_is_omap4xxx()) {
+- u16 s;
+
+- /* Set up the fifo size - Get total size */
+- s = (omap_i2c_read_reg(i2c_omap, OMAP_I2C_BUFSTAT_REG) >> 14) & 0x3;
+- i2c_omap->fifo_size = 0x8 << s;
++ /* Set up the fifo size - Get total size */
++ s = (omap_i2c_read_reg(i2c_omap, OMAP_I2C_BUFSTAT_REG) >> 14) & 0x3;
++ i2c_omap->fifo_size = 0x8 << s;
+
+- /*
+- * Set up notification threshold as half the total available
+- * size. This is to ensure that we can handle the status on int
+- * call back latencies.
+- */
++ /*
++ * Set up notification threshold as half the total available
++ * size. This is to ensure that we can handle the status on int
++ * call back latencies.
++ */
+
+- i2c_omap->fifo_size = (i2c_omap->fifo_size / 2);
++ i2c_omap->fifo_size = (i2c_omap->fifo_size / 2);
+
+- if (i2c_omap->rev >= OMAP_I2C_REV_ON_4430)
+- i2c_omap->b_hw = 0; /* Disable hardware fixes */
+- else
+- i2c_omap->b_hw = 1; /* Enable hardware fixes */
+- }
++ if (i2c_omap->rev >= OMAP_I2C_REV_ON_4430)
++ i2c_omap->b_hw = 0; /* Disable hardware fixes */
++ else
++ i2c_omap->b_hw = 1; /* Enable hardware fixes */
+
+ /* reset ASAP, clearing any IRQs */
+ omap_i2c_init(i2c_omap);
+--
+1.7.10.4
+
diff --git a/patches/barebox-2013.07.0/0012-ARM-AM33xx-Add-i2c-support-for-AM33xx.patch b/patches/barebox-2013.07.0/0012-ARM-AM33xx-Add-i2c-support-for-AM33xx.patch
new file mode 100644
index 0000000..05801aa
--- /dev/null
+++ b/patches/barebox-2013.07.0/0012-ARM-AM33xx-Add-i2c-support-for-AM33xx.patch
@@ -0,0 +1,138 @@
+From 6289d04745fe4282a5a255318bed673e73b29bd8 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Teresa=20G=C3=A1mez?= <t.gamez@phytec.de>
+Date: Thu, 20 Jun 2013 14:50:29 +0200
+Subject: [PATCH 12/17] ARM: AM33xx: Add i2c support for AM33xx
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Added device register functions and cpu_is_am33xx()
+function.
+Adapted the i2c-omap driver. AM335x has a lower
+clock rate and the timeout of polling the isr function
+had to be increased.
+
+Based on a patch from Shravan Kumar <shravan.k@phytec.in>.
+
+Signed-off-by: Teresa Gámez <t.gamez@phytec.de>
+Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
+---
+ arch/arm/mach-omap/include/mach/am33xx-devices.h | 15 +++++++++++++++
+ arch/arm/mach-omap/include/mach/am33xx-silicon.h | 5 +++++
+ arch/arm/mach-omap/include/mach/generic.h | 6 ++++++
+ drivers/i2c/busses/i2c-omap.c | 14 +++++++++-----
+ 4 files changed, 35 insertions(+), 5 deletions(-)
+
+diff --git a/arch/arm/mach-omap/include/mach/am33xx-devices.h b/arch/arm/mach-omap/include/mach/am33xx-devices.h
+index fe9fba9..edf8982 100644
+--- a/arch/arm/mach-omap/include/mach/am33xx-devices.h
++++ b/arch/arm/mach-omap/include/mach/am33xx-devices.h
+@@ -37,4 +37,19 @@ static inline struct device_d *am33xx_add_cpsw(struct cpsw_platform_data *cpsw_d
+ AM335X_CPSW_BASE, SZ_32K, IORESOURCE_MEM, cpsw_data);
+ }
+
++static inline struct device_d *am33xx_add_i2c0(void *pdata)
++{
++ return omap_add_i2c(0, AM33XX_I2C0_BASE, pdata);
++}
++
++static inline struct device_d *am33xx_add_i2c1(void *pdata)
++{
++ return omap_add_i2c(1, AM33XX_I2C1_BASE, pdata);
++}
++
++static inline struct device_d *am33xx_add_i2c2(void *pdata)
++{
++ return omap_add_i2c(2, AM33XX_I2C2_BASE, pdata);
++}
++
+ #endif /* __MACH_OMAP3_DEVICES_H */
+diff --git a/arch/arm/mach-omap/include/mach/am33xx-silicon.h b/arch/arm/mach-omap/include/mach/am33xx-silicon.h
+index 9edf4ca..9cf3e73 100644
+--- a/arch/arm/mach-omap/include/mach/am33xx-silicon.h
++++ b/arch/arm/mach-omap/include/mach/am33xx-silicon.h
+@@ -41,6 +41,11 @@
+ #define AM33XX_DRAM_ADDR_SPACE_START 0x80000000
+ #define AM33XX_DRAM_ADDR_SPACE_END 0xC0000000
+
++/* I2C */
++#define AM33XX_I2C0_BASE (AM33XX_L4_WKUP_BASE + 0x20B000)
++#define AM33XX_I2C1_BASE (AM33XX_L4_PER_BASE + 0x02A000)
++#define AM33XX_I2C2_BASE (AM33XX_L4_PER_BASE + 0x19C000)
++
+ /* GPMC */
+ #define AM33XX_GPMC_BASE 0x50000000
+
+diff --git a/arch/arm/mach-omap/include/mach/generic.h b/arch/arm/mach-omap/include/mach/generic.h
+index f1a3efe..9c474e2 100644
+--- a/arch/arm/mach-omap/include/mach/generic.h
++++ b/arch/arm/mach-omap/include/mach/generic.h
+@@ -27,6 +27,12 @@
+ #define cpu_is_omap4xxx() (0)
+ #endif
+
++#ifdef CONFIG_ARCH_AM33XX
++#define cpu_is_am33xx() (1)
++#else
++#define cpu_is_am33xx() (0)
++#endif
++
+ extern uint32_t omap_bootinfo[3];
+ void omap_save_bootinfo(void);
+
+diff --git a/drivers/i2c/busses/i2c-omap.c b/drivers/i2c/busses/i2c-omap.c
+index ecb33ea..19d54ee 100644
+--- a/drivers/i2c/busses/i2c-omap.c
++++ b/drivers/i2c/busses/i2c-omap.c
+@@ -245,7 +245,7 @@ static inline u16 omap_i2c_read_reg(struct omap_i2c_struct *i2c_omap, int reg)
+
+ static void omap_i2c_unidle(struct omap_i2c_struct *i2c_omap)
+ {
+- if (cpu_is_omap34xx()) {
++ if (cpu_is_omap34xx() || cpu_is_am33xx()) {
+ omap_i2c_write_reg(i2c_omap, OMAP_I2C_CON_REG, 0);
+ omap_i2c_write_reg(i2c_omap, OMAP_I2C_PSC_REG, i2c_omap->pscstate);
+ omap_i2c_write_reg(i2c_omap, OMAP_I2C_SCLL_REG, i2c_omap->scllstate);
+@@ -353,7 +353,11 @@ static int omap_i2c_init(struct omap_i2c_struct *i2c_omap)
+ internal_clk = 9600;
+ else
+ internal_clk = 4000;
+- fclk_rate = 96000000 / 1000;
++
++ if (cpu_is_am33xx())
++ fclk_rate = 48000;
++ else
++ fclk_rate = 96000;
+
+ /* Compute prescaler divisor */
+ psc = fclk_rate / internal_clk;
+@@ -410,7 +414,7 @@ static int omap_i2c_init(struct omap_i2c_struct *i2c_omap)
+ OMAP_I2C_IE_AL) | ((i2c_omap->fifo_size) ?
+ (OMAP_I2C_IE_RDR | OMAP_I2C_IE_XDR) : 0);
+ omap_i2c_write_reg(i2c_omap, OMAP_I2C_IE_REG, i2c_omap->iestate);
+- if (cpu_is_omap34xx()) {
++ if (cpu_is_omap34xx() || cpu_is_am33xx()) {
+ i2c_omap->pscstate = psc;
+ i2c_omap->scllstate = scll;
+ i2c_omap->sclhstate = sclh;
+@@ -665,7 +669,7 @@ static int omap_i2c_xfer_msg(struct i2c_adapter *adapter,
+ ret = omap_i2c_isr(i2c_omap);
+ while (ret){
+ ret = omap_i2c_isr(i2c_omap);
+- if (is_timeout(start, MSECOND)) {
++ if (is_timeout(start, 50 * MSECOND)) {
+ dev_err(&adapter->dev,
+ "timed out on polling for "
+ "open i2c message handling\n");
+@@ -743,7 +747,7 @@ i2c_omap_probe(struct device_d *pdev)
+ goto err_free_mem;
+ }
+
+- if (cpu_is_omap4xxx()) {
++ if (cpu_is_omap4xxx() || cpu_is_am33xx()) {
+ i2c_omap->regs = (u8 *)omap4_reg_map;
+ i2c_omap->reg_shift = 0;
+ } else {
+--
+1.7.10.4
+
diff --git a/patches/barebox-2013.07.0/0013-beaglebone-configure-I2C-EEPROM.patch b/patches/barebox-2013.07.0/0013-beaglebone-configure-I2C-EEPROM.patch
new file mode 100644
index 0000000..9d43570
--- /dev/null
+++ b/patches/barebox-2013.07.0/0013-beaglebone-configure-I2C-EEPROM.patch
@@ -0,0 +1,38 @@
+From c8c5086b65d13a7f59414db2f52c5381c4279bb5 Mon Sep 17 00:00:00 2001
+From: Jan Luebbe <jlu@pengutronix.de>
+Date: Sun, 14 Jul 2013 14:13:02 +0200
+Subject: [PATCH 13/17] beaglebone: configure I2C EEPROM
+
+Signed-off-by: Jan Luebbe <jlu@pengutronix.de>
+---
+ arch/arm/boards/beaglebone/board.c | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+diff --git a/arch/arm/boards/beaglebone/board.c b/arch/arm/boards/beaglebone/board.c
+index b3f39ea..ccb7004 100644
+--- a/arch/arm/boards/beaglebone/board.c
++++ b/arch/arm/boards/beaglebone/board.c
+@@ -97,11 +97,20 @@ static void beaglebone_eth_init(void)
+ am33xx_add_cpsw(&cpsw_data);
+ }
+
++static struct i2c_board_info i2c0_devices[] = {
++ {
++ I2C_BOARD_INFO("24c256", 0x50)
++ },
++};
++
+ static int beaglebone_devices_init(void)
+ {
+ am33xx_add_mmc0(NULL);
+
+ am33xx_enable_i2c0_pin_mux();
++ i2c_register_board_info(0, i2c0_devices, ARRAY_SIZE(i2c0_devices));
++ am33xx_add_i2c0(NULL);
++
+ beaglebone_eth_init();
+
+ armlinux_set_bootparams((void *)0x80000100);
+--
+1.7.10.4
+
diff --git a/patches/barebox-2013.07.0/0014-arm-cpuinfo-display-the-core-name-and-version.patch b/patches/barebox-2013.07.0/0014-arm-cpuinfo-display-the-core-name-and-version.patch
new file mode 100644
index 0000000..bda2c18
--- /dev/null
+++ b/patches/barebox-2013.07.0/0014-arm-cpuinfo-display-the-core-name-and-version.patch
@@ -0,0 +1,64 @@
+From 2eb44063bbe56d7e9e1fe2cd11e3f6addf60e248 Mon Sep 17 00:00:00 2001
+From: Jan Luebbe <jlu@pengutronix.de>
+Date: Sun, 14 Jul 2013 15:45:03 +0200
+Subject: [PATCH 14/17] arm: cpuinfo: display the core name and version
+
+Signed-off-by: Jan Luebbe <jlu@pengutronix.de>
+---
+ arch/arm/cpu/cpuinfo.c | 33 +++++++++++++++++++++++++++++++++
+ 1 file changed, 33 insertions(+)
+
+diff --git a/arch/arm/cpu/cpuinfo.c b/arch/arm/cpu/cpuinfo.c
+index 8aea4b4..260d47b 100644
+--- a/arch/arm/cpu/cpuinfo.c
++++ b/arch/arm/cpu/cpuinfo.c
+@@ -31,6 +31,12 @@
+ #define CPU_ARCH_ARMv6 8
+ #define CPU_ARCH_ARMv7 9
+
++#define ARM_CPU_PART_CORTEX_A5 0xC050
++#define ARM_CPU_PART_CORTEX_A7 0xC070
++#define ARM_CPU_PART_CORTEX_A8 0xC080
++#define ARM_CPU_PART_CORTEX_A9 0xC090
++#define ARM_CPU_PART_CORTEX_A15 0xC0F0
++
+ static void decode_cache(unsigned long size)
+ {
+ int linelen = 1 << ((size & 0x3) + 3);
+@@ -154,6 +160,33 @@ static int do_cpuinfo(int argc, char *argv[])
+ printf("implementer: %s\narchitecture: %s\n",
+ implementer, architecture);
+
++ if (cpu_arch == CPU_ARCH_ARMv7) {
++ unsigned int major, minor;
++ char *part;
++ major = (mainid >> 20) & 0xf;
++ minor = mainid & 0xf;
++ switch (mainid & 0xfff0) {
++ case ARM_CPU_PART_CORTEX_A5:
++ part = "Cortex-A5";
++ break;
++ case ARM_CPU_PART_CORTEX_A7:
++ part = "Cortex-A7";
++ break;
++ case ARM_CPU_PART_CORTEX_A8:
++ part = "Cortex-A8";
++ break;
++ case ARM_CPU_PART_CORTEX_A9:
++ part = "Cortex-A9";
++ break;
++ case ARM_CPU_PART_CORTEX_A15:
++ part = "Cortex-A15";
++ break;
++ default:
++ part = "unknown";
++ }
++ printf("core: %s r%up%u\n", part, major, minor);
++ }
++
+ if (cache & (1 << 24)) {
+ /* separate I/D cache */
+ printf("I-cache: ");
+--
+1.7.10.4
+
diff --git a/patches/barebox-2013.07.0/0015-am33xx-implement-cpu-revision-decoding.patch b/patches/barebox-2013.07.0/0015-am33xx-implement-cpu-revision-decoding.patch
new file mode 100644
index 0000000..c4154e9
--- /dev/null
+++ b/patches/barebox-2013.07.0/0015-am33xx-implement-cpu-revision-decoding.patch
@@ -0,0 +1,113 @@
+From 6e2126a736cb0aea390a941bbb1e735fab045def Mon Sep 17 00:00:00 2001
+From: Jan Luebbe <jlu@pengutronix.de>
+Date: Sun, 14 Jul 2013 16:42:46 +0200
+Subject: [PATCH 15/17] am33xx: implement cpu revision decoding
+
+Signed-off-by: Jan Luebbe <jlu@pengutronix.de>
+---
+ arch/arm/mach-omap/am33xx_generic.c | 34 +++++++++++++++++++++-
+ arch/arm/mach-omap/include/mach/am33xx-silicon.h | 1 +
+ arch/arm/mach-omap/include/mach/sys_info.h | 10 +++++--
+ 3 files changed, 42 insertions(+), 3 deletions(-)
+
+diff --git a/arch/arm/mach-omap/am33xx_generic.c b/arch/arm/mach-omap/am33xx_generic.c
+index 45fefb4..18661d7 100644
+--- a/arch/arm/mach-omap/am33xx_generic.c
++++ b/arch/arm/mach-omap/am33xx_generic.c
+@@ -1,6 +1,6 @@
+ /*
+ * (C) Copyright 2012 Teresa Gámez, Phytec Messtechnik GmbH
+- * (C) Copyright 2012 Jan Luebbe <j.luebbe@pengutronix.de>
++ * (C) Copyright 2012-2013 Jan Luebbe <j.luebbe@pengutronix.de>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+@@ -37,6 +37,38 @@ void __noreturn reset_cpu(unsigned long addr)
+ }
+
+ /**
++ * @brief Extract the AM33xx ES revision
++ *
++ * The significance of the CPU revision depends upon the cpu type.
++ * Latest known revision is considered default.
++ *
++ * @return silicon version
++ */
++u32 get_cpu_rev(void)
++{
++ u32 version, retval;
++
++ version = (readl(AM33XX_IDCODE_REG) >> 28) & 0xF;
++
++ switch (version) {
++ case 0:
++ retval = AM335X_ES1_0;
++ break;
++ case 1:
++ retval = AM335X_ES2_0;
++ break;
++ case 2:
++ /*
++ * Fall through the default case.
++ */
++ default:
++ retval = AM335X_ES2_1;
++ }
++
++ return retval;
++}
++
++/**
+ * @brief Get the upper address of current execution
+ *
+ * we can use this to figure out if we are running in SRAM /
+diff --git a/arch/arm/mach-omap/include/mach/am33xx-silicon.h b/arch/arm/mach-omap/include/mach/am33xx-silicon.h
+index 9cf3e73..06035c4 100644
+--- a/arch/arm/mach-omap/include/mach/am33xx-silicon.h
++++ b/arch/arm/mach-omap/include/mach/am33xx-silicon.h
+@@ -65,6 +65,7 @@
+
+ /* CTRL */
+ #define AM33XX_CTRL_BASE (AM33XX_L4_WKUP_BASE + 0x210000)
++#define AM33XX_IDCODE_REG (AM33XX_CTRL_BASE + 0x600)
+
+ /* Watchdog Timer */
+ #define AM33XX_WDT_BASE 0x44E35000
+diff --git a/arch/arm/mach-omap/include/mach/sys_info.h b/arch/arm/mach-omap/include/mach/sys_info.h
+index 4d9b138..fce5895 100644
+--- a/arch/arm/mach-omap/include/mach/sys_info.h
++++ b/arch/arm/mach-omap/include/mach/sys_info.h
+@@ -40,6 +40,7 @@
+ #define CPU_1710 0x1710
+ #define CPU_2420 0x2420
+ #define CPU_2430 0x2430
++#define CPU_3350 0x3350
+ #define CPU_3430 0x3430
+ #define CPU_3630 0x3630
+
+@@ -54,6 +55,10 @@
+ #define OMAP34XX_ES3 cpu_revision(CPU_3430, 3)
+ #define OMAP34XX_ES3_1 cpu_revision(CPU_3430, 4)
+
++#define AM335X_ES1_0 cpu_revision(CPU_3350, 0)
++#define AM335X_ES2_0 cpu_revision(CPU_3350, 1)
++#define AM335X_ES2_1 cpu_revision(CPU_3350, 2)
++
+ #define OMAP36XX_ES1 cpu_revision(CPU_3630, 0)
+ #define OMAP36XX_ES1_1 cpu_revision(CPU_3630, 1)
+ #define OMAP36XX_ES1_2 cpu_revision(CPU_3630, 2)
+@@ -76,8 +81,9 @@
+ /**
+ * Hawkeye definitions to identify silicon families
+ */
+-#define OMAP_HAWKEYE_34XX 0xB7AE
+-#define OMAP_HAWKEYE_36XX 0xB891
++#define OMAP_HAWKEYE_34XX 0xB7AE /* OMAP34xx */
++#define OMAP_HAWKEYE_36XX 0xB891 /* OMAP36xx */
++#define OMAP_HAWKEYE_335X 0xB944 /* AM335x */
+
+ /** These are implemented by the System specific code in omapX-generic.c */
+ u32 get_cpu_type(void);
+--
+1.7.10.4
+
diff --git a/patches/barebox-2013.07.0/0016-beaglebone-split-out-DDR2-init-for-BB-White.patch b/patches/barebox-2013.07.0/0016-beaglebone-split-out-DDR2-init-for-BB-White.patch
new file mode 100644
index 0000000..a74892c
--- /dev/null
+++ b/patches/barebox-2013.07.0/0016-beaglebone-split-out-DDR2-init-for-BB-White.patch
@@ -0,0 +1,417 @@
+From 425a24f42a726b6dc30d23c474dcacbb719820c5 Mon Sep 17 00:00:00 2001
+From: Jan Luebbe <jlu@pengutronix.de>
+Date: Sun, 14 Jul 2013 18:22:51 +0200
+Subject: [PATCH 16/17] beaglebone: split out DDR2 init for BB White
+
+Signed-off-by: Jan Luebbe <jlu@pengutronix.de>
+---
+ arch/arm/boards/beaglebone/Makefile | 2 +-
+ arch/arm/boards/beaglebone/ddr.h | 1 +
+ arch/arm/boards/beaglebone/ddr2.c | 178 +++++++++++++++++++++++++++++++++
+ arch/arm/boards/beaglebone/lowlevel.c | 175 +-------------------------------
+ 4 files changed, 184 insertions(+), 172 deletions(-)
+ create mode 100644 arch/arm/boards/beaglebone/ddr.h
+ create mode 100644 arch/arm/boards/beaglebone/ddr2.c
+
+diff --git a/arch/arm/boards/beaglebone/Makefile b/arch/arm/boards/beaglebone/Makefile
+index 092c31d..7ec0c8b 100644
+--- a/arch/arm/boards/beaglebone/Makefile
++++ b/arch/arm/boards/beaglebone/Makefile
+@@ -1,2 +1,2 @@
+-lwl-y += lowlevel.o
++lwl-y += lowlevel.o ddr2.o
+ obj-y += board.o
+diff --git a/arch/arm/boards/beaglebone/ddr.h b/arch/arm/boards/beaglebone/ddr.h
+new file mode 100644
+index 0000000..d2f0c95
+--- /dev/null
++++ b/arch/arm/boards/beaglebone/ddr.h
+@@ -0,0 +1 @@
++void beaglebone_config_ddr2(void);
+diff --git a/arch/arm/boards/beaglebone/ddr2.c b/arch/arm/boards/beaglebone/ddr2.c
+new file mode 100644
+index 0000000..42a099d
+--- /dev/null
++++ b/arch/arm/boards/beaglebone/ddr2.c
+@@ -0,0 +1,178 @@
++#include <init.h>
++#include <sizes.h>
++#include <io.h>
++#include <asm/armlinux.h>
++#include <asm/barebox-arm-head.h>
++#include <asm/barebox-arm.h>
++#include <mach/am33xx-silicon.h>
++#include <mach/am33xx-clock.h>
++
++/* AM335X EMIF Register values */
++#define EMIF_SDMGT 0x80000000
++#define EMIF_SDRAM 0x00004650
++#define EMIF_PHYCFG 0x2
++#define DDR_PHY_RESET (0x1 << 10)
++#define DDR_FUNCTIONAL_MODE_EN 0x1
++#define DDR_PHY_READY (0x1 << 2)
++#define VTP_CTRL_READY (0x1 << 5)
++#define VTP_CTRL_ENABLE (0x1 << 6)
++#define VTP_CTRL_LOCK_EN (0x1 << 4)
++#define VTP_CTRL_START_EN (0x1)
++#define DDR2_RATIO 0x80 /* for mDDR */
++#define CMD_FORCE 0x00 /* common #def */
++#define CMD_DELAY 0x00
++
++#define EMIF_READ_LATENCY 0x05
++#define EMIF_TIM1 0x0666B3D6
++#define EMIF_TIM2 0x143731DA
++#define EMIF_TIM3 0x00000347
++#define EMIF_SDCFG 0x43805332
++#define EMIF_SDREF 0x0000081a
++#define DDR2_DLL_LOCK_DIFF 0x0
++#define DDR2_RD_DQS 0x12
++#define DDR2_PHY_FIFO_WE 0x80
++
++#define DDR2_INVERT_CLKOUT 0x00
++#define DDR2_WR_DQS 0x00
++#define DDR2_PHY_WRLVL 0x00
++#define DDR2_PHY_GATELVL 0x00
++#define DDR2_PHY_WR_DATA 0x40
++#define PHY_RANK0_DELAY 0x01
++#define PHY_DLL_LOCK_DIFF 0x0
++#define DDR_IOCTRL_VALUE 0x18B
++
++static void beaglebone_data_macro_config_ddr2(int dataMacroNum)
++{
++ u32 BaseAddrOffset = 0x00;
++
++ if (dataMacroNum == 1)
++ BaseAddrOffset = 0xA4;
++
++ __raw_writel(((DDR2_RD_DQS<<30)|(DDR2_RD_DQS<<20)
++ |(DDR2_RD_DQS<<10)|(DDR2_RD_DQS<<0)),
++ (AM33XX_DATA0_RD_DQS_SLAVE_RATIO_0 + BaseAddrOffset));
++ __raw_writel(DDR2_RD_DQS>>2,
++ (AM33XX_DATA0_RD_DQS_SLAVE_RATIO_1 + BaseAddrOffset));
++ __raw_writel(((DDR2_WR_DQS<<30)|(DDR2_WR_DQS<<20)
++ |(DDR2_WR_DQS<<10)|(DDR2_WR_DQS<<0)),
++ (AM33XX_DATA0_WR_DQS_SLAVE_RATIO_0 + BaseAddrOffset));
++ __raw_writel(DDR2_WR_DQS>>2,
++ (AM33XX_DATA0_WR_DQS_SLAVE_RATIO_1 + BaseAddrOffset));
++ __raw_writel(((DDR2_PHY_WRLVL<<30)|(DDR2_PHY_WRLVL<<20)
++ |(DDR2_PHY_WRLVL<<10)|(DDR2_PHY_WRLVL<<0)),
++ (AM33XX_DATA0_WRLVL_INIT_RATIO_0 + BaseAddrOffset));
++ __raw_writel(DDR2_PHY_WRLVL>>2,
++ (AM33XX_DATA0_WRLVL_INIT_RATIO_1 + BaseAddrOffset));
++ __raw_writel(((DDR2_PHY_GATELVL<<30)|(DDR2_PHY_GATELVL<<20)
++ |(DDR2_PHY_GATELVL<<10)|(DDR2_PHY_GATELVL<<0)),
++ (AM33XX_DATA0_GATELVL_INIT_RATIO_0 + BaseAddrOffset));
++ __raw_writel(DDR2_PHY_GATELVL>>2,
++ (AM33XX_DATA0_GATELVL_INIT_RATIO_1 + BaseAddrOffset));
++ __raw_writel(((DDR2_PHY_FIFO_WE<<30)|(DDR2_PHY_FIFO_WE<<20)
++ |(DDR2_PHY_FIFO_WE<<10)|(DDR2_PHY_FIFO_WE<<0)),
++ (AM33XX_DATA0_FIFO_WE_SLAVE_RATIO_0 + BaseAddrOffset));
++ __raw_writel(DDR2_PHY_FIFO_WE>>2,
++ (AM33XX_DATA0_FIFO_WE_SLAVE_RATIO_1 + BaseAddrOffset));
++ __raw_writel(((DDR2_PHY_WR_DATA<<30)|(DDR2_PHY_WR_DATA<<20)
++ |(DDR2_PHY_WR_DATA<<10)|(DDR2_PHY_WR_DATA<<0)),
++ (AM33XX_DATA0_WR_DATA_SLAVE_RATIO_0 + BaseAddrOffset));
++ __raw_writel(DDR2_PHY_WR_DATA>>2,
++ (AM33XX_DATA0_WR_DATA_SLAVE_RATIO_1 + BaseAddrOffset));
++ __raw_writel(PHY_DLL_LOCK_DIFF,
++ (AM33XX_DATA0_DLL_LOCK_DIFF_0 + BaseAddrOffset));
++}
++
++static void beaglebone_cmd_macro_config_ddr2(void)
++{
++ __raw_writel(DDR2_RATIO, AM33XX_CMD0_CTRL_SLAVE_RATIO_0);
++ __raw_writel(CMD_FORCE, AM33XX_CMD0_CTRL_SLAVE_FORCE_0);
++ __raw_writel(CMD_DELAY, AM33XX_CMD0_CTRL_SLAVE_DELAY_0);
++ __raw_writel(DDR2_DLL_LOCK_DIFF, AM33XX_CMD0_DLL_LOCK_DIFF_0);
++ __raw_writel(DDR2_INVERT_CLKOUT, AM33XX_CMD0_INVERT_CLKOUT_0);
++
++ __raw_writel(DDR2_RATIO, AM33XX_CMD1_CTRL_SLAVE_RATIO_0);
++ __raw_writel(CMD_FORCE, AM33XX_CMD1_CTRL_SLAVE_FORCE_0);
++ __raw_writel(CMD_DELAY, AM33XX_CMD1_CTRL_SLAVE_DELAY_0);
++ __raw_writel(DDR2_DLL_LOCK_DIFF, AM33XX_CMD1_DLL_LOCK_DIFF_0);
++ __raw_writel(DDR2_INVERT_CLKOUT, AM33XX_CMD1_INVERT_CLKOUT_0);
++
++ __raw_writel(DDR2_RATIO, AM33XX_CMD2_CTRL_SLAVE_RATIO_0);
++ __raw_writel(CMD_FORCE, AM33XX_CMD2_CTRL_SLAVE_FORCE_0);
++ __raw_writel(CMD_DELAY, AM33XX_CMD2_CTRL_SLAVE_DELAY_0);
++ __raw_writel(DDR2_DLL_LOCK_DIFF, AM33XX_CMD2_DLL_LOCK_DIFF_0);
++ __raw_writel(DDR2_INVERT_CLKOUT, AM33XX_CMD2_INVERT_CLKOUT_0);
++}
++
++static void beaglebone_config_vtp_ddr2(void)
++{
++ __raw_writel(__raw_readl(AM33XX_VTP0_CTRL_REG) | VTP_CTRL_ENABLE,
++ AM33XX_VTP0_CTRL_REG);
++ __raw_writel(__raw_readl(AM33XX_VTP0_CTRL_REG) & (~VTP_CTRL_START_EN),
++ AM33XX_VTP0_CTRL_REG);
++ __raw_writel(__raw_readl(AM33XX_VTP0_CTRL_REG) | VTP_CTRL_START_EN,
++ AM33XX_VTP0_CTRL_REG);
++
++ /* Poll for READY */
++ while ((__raw_readl(AM33XX_VTP0_CTRL_REG) & VTP_CTRL_READY) != VTP_CTRL_READY);
++}
++
++static void beaglebone_config_emif_ddr2(void)
++{
++ u32 i;
++
++ /*Program EMIF0 CFG Registers*/
++ __raw_writel(EMIF_READ_LATENCY, AM33XX_EMIF4_0_REG(DDR_PHY_CTRL_1));
++ __raw_writel(EMIF_READ_LATENCY, AM33XX_EMIF4_0_REG(DDR_PHY_CTRL_1_SHADOW));
++ __raw_writel(EMIF_READ_LATENCY, AM33XX_EMIF4_0_REG(DDR_PHY_CTRL_2));
++ __raw_writel(EMIF_TIM1, AM33XX_EMIF4_0_REG(SDRAM_TIM_1));
++ __raw_writel(EMIF_TIM1, AM33XX_EMIF4_0_REG(SDRAM_TIM_1_SHADOW));
++ __raw_writel(EMIF_TIM2, AM33XX_EMIF4_0_REG(SDRAM_TIM_2));
++ __raw_writel(EMIF_TIM2, AM33XX_EMIF4_0_REG(SDRAM_TIM_2_SHADOW));
++ __raw_writel(EMIF_TIM3, AM33XX_EMIF4_0_REG(SDRAM_TIM_3));
++ __raw_writel(EMIF_TIM3, AM33XX_EMIF4_0_REG(SDRAM_TIM_3_SHADOW));
++
++ __raw_writel(EMIF_SDCFG, AM33XX_EMIF4_0_REG(SDRAM_CONFIG));
++ __raw_writel(EMIF_SDCFG, AM33XX_EMIF4_0_REG(SDRAM_CONFIG2));
++
++ /* __raw_writel(EMIF_SDMGT, EMIF0_0_SDRAM_MGMT_CTRL);
++ __raw_writel(EMIF_SDMGT, EMIF0_0_SDRAM_MGMT_CTRL_SHD); */
++ __raw_writel(0x00004650, AM33XX_EMIF4_0_REG(SDRAM_REF_CTRL));
++ __raw_writel(0x00004650, AM33XX_EMIF4_0_REG(SDRAM_REF_CTRL_SHADOW));
++
++ for (i = 0; i < 5000; i++) {
++
++ }
++
++ /* __raw_writel(EMIF_SDMGT, EMIF0_0_SDRAM_MGMT_CTRL);
++ __raw_writel(EMIF_SDMGT, EMIF0_0_SDRAM_MGMT_CTRL_SHD); */
++ __raw_writel(EMIF_SDREF, AM33XX_EMIF4_0_REG(SDRAM_REF_CTRL));
++ __raw_writel(EMIF_SDREF, AM33XX_EMIF4_0_REG(SDRAM_REF_CTRL_SHADOW));
++
++ __raw_writel(EMIF_SDCFG, AM33XX_EMIF4_0_REG(SDRAM_CONFIG));
++ __raw_writel(EMIF_SDCFG, AM33XX_EMIF4_0_REG(SDRAM_CONFIG2));
++}
++
++void beaglebone_config_ddr2(void)
++{
++ enable_ddr_clocks();
++
++ beaglebone_config_vtp_ddr2();
++
++ beaglebone_cmd_macro_config_ddr2();
++ beaglebone_data_macro_config_ddr2(0);
++ beaglebone_data_macro_config_ddr2(1);
++
++ __raw_writel(PHY_RANK0_DELAY, AM33XX_DATA0_RANK0_DELAYS_0);
++ __raw_writel(PHY_RANK0_DELAY, AM33XX_DATA1_RANK0_DELAYS_0);
++
++ __raw_writel(DDR_IOCTRL_VALUE, AM33XX_DDR_CMD0_IOCTRL);
++ __raw_writel(DDR_IOCTRL_VALUE, AM33XX_DDR_CMD1_IOCTRL);
++ __raw_writel(DDR_IOCTRL_VALUE, AM33XX_DDR_CMD2_IOCTRL);
++ __raw_writel(DDR_IOCTRL_VALUE, AM33XX_DDR_DATA0_IOCTRL);
++ __raw_writel(DDR_IOCTRL_VALUE, AM33XX_DDR_DATA1_IOCTRL);
++
++ __raw_writel(__raw_readl(AM33XX_DDR_IO_CTRL) & 0xefffffff, AM33XX_DDR_IO_CTRL);
++ __raw_writel(__raw_readl(AM33XX_DDR_CKE_CTRL) | 0x00000001, AM33XX_DDR_CKE_CTRL);
++
++ beaglebone_config_emif_ddr2();
++}
+diff --git a/arch/arm/boards/beaglebone/lowlevel.c b/arch/arm/boards/beaglebone/lowlevel.c
+index 59d9ff1..282b471 100644
+--- a/arch/arm/boards/beaglebone/lowlevel.c
++++ b/arch/arm/boards/beaglebone/lowlevel.c
+@@ -13,6 +13,8 @@
+ #include <mach/am33xx-mux.h>
+ #include <mach/wdt.h>
+
++#include "ddr.h"
++
+ /* UART Defines */
+ #define UART_SYSCFG_OFFSET (0x54)
+ #define UART_SYSSTS_OFFSET (0x58)
+@@ -21,176 +23,6 @@
+ #define UART_CLK_RUNNING_MASK 0x1
+ #define UART_SMART_IDLE_EN (0x1 << 0x3)
+
+-/* AM335X EMIF Register values */
+-#define EMIF_SDMGT 0x80000000
+-#define EMIF_SDRAM 0x00004650
+-#define EMIF_PHYCFG 0x2
+-#define DDR_PHY_RESET (0x1 << 10)
+-#define DDR_FUNCTIONAL_MODE_EN 0x1
+-#define DDR_PHY_READY (0x1 << 2)
+-#define VTP_CTRL_READY (0x1 << 5)
+-#define VTP_CTRL_ENABLE (0x1 << 6)
+-#define VTP_CTRL_LOCK_EN (0x1 << 4)
+-#define VTP_CTRL_START_EN (0x1)
+-#define DDR2_RATIO 0x80 /* for mDDR */
+-#define CMD_FORCE 0x00 /* common #def */
+-#define CMD_DELAY 0x00
+-
+-#define EMIF_READ_LATENCY 0x05
+-#define EMIF_TIM1 0x0666B3D6
+-#define EMIF_TIM2 0x143731DA
+-#define EMIF_TIM3 0x00000347
+-#define EMIF_SDCFG 0x43805332
+-#define EMIF_SDREF 0x0000081a
+-#define DDR2_DLL_LOCK_DIFF 0x0
+-#define DDR2_RD_DQS 0x12
+-#define DDR2_PHY_FIFO_WE 0x80
+-
+-#define DDR2_INVERT_CLKOUT 0x00
+-#define DDR2_WR_DQS 0x00
+-#define DDR2_PHY_WRLVL 0x00
+-#define DDR2_PHY_GATELVL 0x00
+-#define DDR2_PHY_WR_DATA 0x40
+-#define PHY_RANK0_DELAY 0x01
+-#define PHY_DLL_LOCK_DIFF 0x0
+-#define DDR_IOCTRL_VALUE 0x18B
+-
+-static void beaglebone_data_macro_config(int dataMacroNum)
+-{
+- u32 BaseAddrOffset = 0x00;
+-
+- if (dataMacroNum == 1)
+- BaseAddrOffset = 0xA4;
+-
+- __raw_writel(((DDR2_RD_DQS<<30)|(DDR2_RD_DQS<<20)
+- |(DDR2_RD_DQS<<10)|(DDR2_RD_DQS<<0)),
+- (AM33XX_DATA0_RD_DQS_SLAVE_RATIO_0 + BaseAddrOffset));
+- __raw_writel(DDR2_RD_DQS>>2,
+- (AM33XX_DATA0_RD_DQS_SLAVE_RATIO_1 + BaseAddrOffset));
+- __raw_writel(((DDR2_WR_DQS<<30)|(DDR2_WR_DQS<<20)
+- |(DDR2_WR_DQS<<10)|(DDR2_WR_DQS<<0)),
+- (AM33XX_DATA0_WR_DQS_SLAVE_RATIO_0 + BaseAddrOffset));
+- __raw_writel(DDR2_WR_DQS>>2,
+- (AM33XX_DATA0_WR_DQS_SLAVE_RATIO_1 + BaseAddrOffset));
+- __raw_writel(((DDR2_PHY_WRLVL<<30)|(DDR2_PHY_WRLVL<<20)
+- |(DDR2_PHY_WRLVL<<10)|(DDR2_PHY_WRLVL<<0)),
+- (AM33XX_DATA0_WRLVL_INIT_RATIO_0 + BaseAddrOffset));
+- __raw_writel(DDR2_PHY_WRLVL>>2,
+- (AM33XX_DATA0_WRLVL_INIT_RATIO_1 + BaseAddrOffset));
+- __raw_writel(((DDR2_PHY_GATELVL<<30)|(DDR2_PHY_GATELVL<<20)
+- |(DDR2_PHY_GATELVL<<10)|(DDR2_PHY_GATELVL<<0)),
+- (AM33XX_DATA0_GATELVL_INIT_RATIO_0 + BaseAddrOffset));
+- __raw_writel(DDR2_PHY_GATELVL>>2,
+- (AM33XX_DATA0_GATELVL_INIT_RATIO_1 + BaseAddrOffset));
+- __raw_writel(((DDR2_PHY_FIFO_WE<<30)|(DDR2_PHY_FIFO_WE<<20)
+- |(DDR2_PHY_FIFO_WE<<10)|(DDR2_PHY_FIFO_WE<<0)),
+- (AM33XX_DATA0_FIFO_WE_SLAVE_RATIO_0 + BaseAddrOffset));
+- __raw_writel(DDR2_PHY_FIFO_WE>>2,
+- (AM33XX_DATA0_FIFO_WE_SLAVE_RATIO_1 + BaseAddrOffset));
+- __raw_writel(((DDR2_PHY_WR_DATA<<30)|(DDR2_PHY_WR_DATA<<20)
+- |(DDR2_PHY_WR_DATA<<10)|(DDR2_PHY_WR_DATA<<0)),
+- (AM33XX_DATA0_WR_DATA_SLAVE_RATIO_0 + BaseAddrOffset));
+- __raw_writel(DDR2_PHY_WR_DATA>>2,
+- (AM33XX_DATA0_WR_DATA_SLAVE_RATIO_1 + BaseAddrOffset));
+- __raw_writel(PHY_DLL_LOCK_DIFF,
+- (AM33XX_DATA0_DLL_LOCK_DIFF_0 + BaseAddrOffset));
+-}
+-
+-static void beaglebone_cmd_macro_config(void)
+-{
+- __raw_writel(DDR2_RATIO, AM33XX_CMD0_CTRL_SLAVE_RATIO_0);
+- __raw_writel(CMD_FORCE, AM33XX_CMD0_CTRL_SLAVE_FORCE_0);
+- __raw_writel(CMD_DELAY, AM33XX_CMD0_CTRL_SLAVE_DELAY_0);
+- __raw_writel(DDR2_DLL_LOCK_DIFF, AM33XX_CMD0_DLL_LOCK_DIFF_0);
+- __raw_writel(DDR2_INVERT_CLKOUT, AM33XX_CMD0_INVERT_CLKOUT_0);
+-
+- __raw_writel(DDR2_RATIO, AM33XX_CMD1_CTRL_SLAVE_RATIO_0);
+- __raw_writel(CMD_FORCE, AM33XX_CMD1_CTRL_SLAVE_FORCE_0);
+- __raw_writel(CMD_DELAY, AM33XX_CMD1_CTRL_SLAVE_DELAY_0);
+- __raw_writel(DDR2_DLL_LOCK_DIFF, AM33XX_CMD1_DLL_LOCK_DIFF_0);
+- __raw_writel(DDR2_INVERT_CLKOUT, AM33XX_CMD1_INVERT_CLKOUT_0);
+-
+- __raw_writel(DDR2_RATIO, AM33XX_CMD2_CTRL_SLAVE_RATIO_0);
+- __raw_writel(CMD_FORCE, AM33XX_CMD2_CTRL_SLAVE_FORCE_0);
+- __raw_writel(CMD_DELAY, AM33XX_CMD2_CTRL_SLAVE_DELAY_0);
+- __raw_writel(DDR2_DLL_LOCK_DIFF, AM33XX_CMD2_DLL_LOCK_DIFF_0);
+- __raw_writel(DDR2_INVERT_CLKOUT, AM33XX_CMD2_INVERT_CLKOUT_0);
+-}
+-
+-static void beaglebone_config_vtp(void)
+-{
+- __raw_writel(__raw_readl(AM33XX_VTP0_CTRL_REG) | VTP_CTRL_ENABLE,
+- AM33XX_VTP0_CTRL_REG);
+- __raw_writel(__raw_readl(AM33XX_VTP0_CTRL_REG) & (~VTP_CTRL_START_EN),
+- AM33XX_VTP0_CTRL_REG);
+- __raw_writel(__raw_readl(AM33XX_VTP0_CTRL_REG) | VTP_CTRL_START_EN,
+- AM33XX_VTP0_CTRL_REG);
+-
+- /* Poll for READY */
+- while ((__raw_readl(AM33XX_VTP0_CTRL_REG) & VTP_CTRL_READY) != VTP_CTRL_READY);
+-}
+-
+-static void beaglebone_config_emif_ddr2(void)
+-{
+- u32 i;
+-
+- /*Program EMIF0 CFG Registers*/
+- __raw_writel(EMIF_READ_LATENCY, AM33XX_EMIF4_0_REG(DDR_PHY_CTRL_1));
+- __raw_writel(EMIF_READ_LATENCY, AM33XX_EMIF4_0_REG(DDR_PHY_CTRL_1_SHADOW));
+- __raw_writel(EMIF_READ_LATENCY, AM33XX_EMIF4_0_REG(DDR_PHY_CTRL_2));
+- __raw_writel(EMIF_TIM1, AM33XX_EMIF4_0_REG(SDRAM_TIM_1));
+- __raw_writel(EMIF_TIM1, AM33XX_EMIF4_0_REG(SDRAM_TIM_1_SHADOW));
+- __raw_writel(EMIF_TIM2, AM33XX_EMIF4_0_REG(SDRAM_TIM_2));
+- __raw_writel(EMIF_TIM2, AM33XX_EMIF4_0_REG(SDRAM_TIM_2_SHADOW));
+- __raw_writel(EMIF_TIM3, AM33XX_EMIF4_0_REG(SDRAM_TIM_3));
+- __raw_writel(EMIF_TIM3, AM33XX_EMIF4_0_REG(SDRAM_TIM_3_SHADOW));
+-
+- __raw_writel(EMIF_SDCFG, AM33XX_EMIF4_0_REG(SDRAM_CONFIG));
+- __raw_writel(EMIF_SDCFG, AM33XX_EMIF4_0_REG(SDRAM_CONFIG2));
+-
+- /* __raw_writel(EMIF_SDMGT, EMIF0_0_SDRAM_MGMT_CTRL);
+- __raw_writel(EMIF_SDMGT, EMIF0_0_SDRAM_MGMT_CTRL_SHD); */
+- __raw_writel(0x00004650, AM33XX_EMIF4_0_REG(SDRAM_REF_CTRL));
+- __raw_writel(0x00004650, AM33XX_EMIF4_0_REG(SDRAM_REF_CTRL_SHADOW));
+-
+- for (i = 0; i < 5000; i++) {
+-
+- }
+-
+- /* __raw_writel(EMIF_SDMGT, EMIF0_0_SDRAM_MGMT_CTRL);
+- __raw_writel(EMIF_SDMGT, EMIF0_0_SDRAM_MGMT_CTRL_SHD); */
+- __raw_writel(EMIF_SDREF, AM33XX_EMIF4_0_REG(SDRAM_REF_CTRL));
+- __raw_writel(EMIF_SDREF, AM33XX_EMIF4_0_REG(SDRAM_REF_CTRL_SHADOW));
+-
+- __raw_writel(EMIF_SDCFG, AM33XX_EMIF4_0_REG(SDRAM_CONFIG));
+- __raw_writel(EMIF_SDCFG, AM33XX_EMIF4_0_REG(SDRAM_CONFIG2));
+-}
+-
+-static void beaglebone_config_ddr(void)
+-{
+- enable_ddr_clocks();
+-
+- beaglebone_config_vtp();
+-
+- beaglebone_cmd_macro_config();
+- beaglebone_data_macro_config(0);
+- beaglebone_data_macro_config(1);
+-
+- __raw_writel(PHY_RANK0_DELAY, AM33XX_DATA0_RANK0_DELAYS_0);
+- __raw_writel(PHY_RANK0_DELAY, AM33XX_DATA1_RANK0_DELAYS_0);
+-
+- __raw_writel(DDR_IOCTRL_VALUE, AM33XX_DDR_CMD0_IOCTRL);
+- __raw_writel(DDR_IOCTRL_VALUE, AM33XX_DDR_CMD1_IOCTRL);
+- __raw_writel(DDR_IOCTRL_VALUE, AM33XX_DDR_CMD2_IOCTRL);
+- __raw_writel(DDR_IOCTRL_VALUE, AM33XX_DDR_DATA0_IOCTRL);
+- __raw_writel(DDR_IOCTRL_VALUE, AM33XX_DDR_DATA1_IOCTRL);
+-
+- __raw_writel(__raw_readl(AM33XX_DDR_IO_CTRL) & 0xefffffff, AM33XX_DDR_IO_CTRL);
+- __raw_writel(__raw_readl(AM33XX_DDR_CKE_CTRL) | 0x00000001, AM33XX_DDR_CKE_CTRL);
+-
+- beaglebone_config_emif_ddr2();
+-}
+-
+ /*
+ * early system init of muxing and clocks.
+ */
+@@ -201,7 +33,8 @@ void beaglebone_sram_init(void)
+ /* Setup the PLLs and the clocks for the peripherals */
+ pll_init(MPUPLL_M_500);
+
+- beaglebone_config_ddr();
++ if (get_cpu_rev() == AM335X_ES1_0)
++ beaglebone_config_ddr2();
+
+ /* Enable pin mux */
+ am33xx_enable_uart0_pin_mux();
+--
+1.7.10.4
+
diff --git a/patches/barebox-2013.07.0/0017-beaglebone-add-support-for-beaglebone-black-with-DDR.patch b/patches/barebox-2013.07.0/0017-beaglebone-add-support-for-beaglebone-black-with-DDR.patch
new file mode 100644
index 0000000..aa5edbf
--- /dev/null
+++ b/patches/barebox-2013.07.0/0017-beaglebone-add-support-for-beaglebone-black-with-DDR.patch
@@ -0,0 +1,396 @@
+From d8b67830c302eb2cf3d396f1828534850f136771 Mon Sep 17 00:00:00 2001
+From: Jan Luebbe <jlu@pengutronix.de>
+Date: Sun, 14 Jul 2013 19:25:39 +0200
+Subject: [PATCH 17/17] beaglebone: add support for beaglebone black with DDR3
+ RAM
+
+Also allow configuration of the DDR PLL from board code
+
+Signed-off-by: Jan Luebbe <jlu@pengutronix.de>
+---
+ arch/arm/boards/beaglebone/Makefile | 2 +-
+ arch/arm/boards/beaglebone/board.c | 47 ++++++-
+ arch/arm/boards/beaglebone/ddr.h | 1 +
+ arch/arm/boards/beaglebone/ddr3.c | 155 ++++++++++++++++++++++
+ arch/arm/boards/beaglebone/lowlevel.c | 11 +-
+ arch/arm/mach-omap/am33xx_clock.c | 9 +-
+ arch/arm/mach-omap/include/mach/am33xx-clock.h | 5 +-
+ arch/arm/mach-omap/include/mach/am33xx-devices.h | 6 +
+ 8 files changed, 222 insertions(+), 14 deletions(-)
+ create mode 100644 arch/arm/boards/beaglebone/ddr3.c
+
+diff --git a/arch/arm/boards/beaglebone/Makefile b/arch/arm/boards/beaglebone/Makefile
+index 7ec0c8b..eb2ffec 100644
+--- a/arch/arm/boards/beaglebone/Makefile
++++ b/arch/arm/boards/beaglebone/Makefile
+@@ -1,2 +1,2 @@
+-lwl-y += lowlevel.o ddr2.o
++lwl-y += lowlevel.o ddr2.o ddr3.o
+ obj-y += board.o
+diff --git a/arch/arm/boards/beaglebone/board.c b/arch/arm/boards/beaglebone/board.c
+index ccb7004..a01fe1b 100644
+--- a/arch/arm/boards/beaglebone/board.c
++++ b/arch/arm/boards/beaglebone/board.c
+@@ -26,6 +26,8 @@
+ #include <init.h>
+ #include <driver.h>
+ #include <envfs.h>
++#include <environment.h>
++#include <globalvar.h>
+ #include <sizes.h>
+ #include <io.h>
+ #include <ns16550.h>
+@@ -68,7 +70,11 @@ console_initcall(beaglebone_console_init);
+
+ static int beaglebone_mem_init(void)
+ {
+- omap_add_ram0(SZ_256M);
++ if (get_cpu_rev() == AM335X_ES1_0) { /* white */
++ omap_add_ram0(SZ_256M);
++ } else { /* black */
++ omap_add_ram0(SZ_512M);
++ }
+
+ return 0;
+ }
+@@ -103,19 +109,56 @@ static struct i2c_board_info i2c0_devices[] = {
+ },
+ };
+
++static const __maybe_unused struct module_pin_mux mmc1_pin_mux[] = {
++ {OFFSET(gpmc_ad0), (MODE(1) | RXACTIVE)}, /* MMC1_DAT0 */
++ {OFFSET(gpmc_ad1), (MODE(1) | RXACTIVE)}, /* MMC1_DAT1 */
++ {OFFSET(gpmc_ad2), (MODE(1) | RXACTIVE)}, /* MMC1_DAT2 */
++ {OFFSET(gpmc_ad3), (MODE(1) | RXACTIVE)}, /* MMC1_DAT3 */
++ {OFFSET(gpmc_ad4), (MODE(1) | RXACTIVE)}, /* MMC1_DAT4 */
++ {OFFSET(gpmc_ad5), (MODE(1) | RXACTIVE)}, /* MMC1_DAT5 */
++ {OFFSET(gpmc_ad6), (MODE(1) | RXACTIVE)}, /* MMC1_DAT6 */
++ {OFFSET(gpmc_ad7), (MODE(1) | RXACTIVE)}, /* MMC1_DAT7 */
++ {OFFSET(gpmc_csn1), (MODE(2) | RXACTIVE | PULLUP_EN)}, /* MMC1_CLK */
++ {OFFSET(gpmc_csn2), (MODE(2) | RXACTIVE | PULLUP_EN)}, /* MMC1_CMD */
++ {-1},
++};
++
+ static int beaglebone_devices_init(void)
+ {
++ bool black = get_cpu_rev() != AM335X_ES1_0;
++
++ am33xx_enable_mmc0_pin_mux();
+ am33xx_add_mmc0(NULL);
+
++ if (black) {
++ configure_module_pin_mux(mmc1_pin_mux);
++ am33xx_add_mmc1(NULL);
++ }
++
+ am33xx_enable_i2c0_pin_mux();
+ i2c_register_board_info(0, i2c0_devices, ARRAY_SIZE(i2c0_devices));
+ am33xx_add_i2c0(NULL);
+
+ beaglebone_eth_init();
+
++ return 0;
++}
++device_initcall(beaglebone_devices_init);
++
++static int beaglebone_env_init(void)
++{
++ bool black = get_cpu_rev() != AM335X_ES1_0;
++
++#if defined(CONFIG_GLOBALVAR)
++ globalvar_add_simple("board.variant");
++ setenv("global.board.variant", black ? "boneblack" : "bone");
++#endif
++
++ printf("detected 'BeageBone %s'\n", black ? "Black" : "White");
++
+ armlinux_set_bootparams((void *)0x80000100);
+ armlinux_set_architecture(MACH_TYPE_BEAGLEBONE);
+
+ return 0;
+ }
+-device_initcall(beaglebone_devices_init);
++late_initcall(beaglebone_env_init);
+diff --git a/arch/arm/boards/beaglebone/ddr.h b/arch/arm/boards/beaglebone/ddr.h
+index d2f0c95..46c2504 100644
+--- a/arch/arm/boards/beaglebone/ddr.h
++++ b/arch/arm/boards/beaglebone/ddr.h
+@@ -1 +1,2 @@
+ void beaglebone_config_ddr2(void);
++void beaglebone_config_ddr3(void);
+diff --git a/arch/arm/boards/beaglebone/ddr3.c b/arch/arm/boards/beaglebone/ddr3.c
+new file mode 100644
+index 0000000..643a94d
+--- /dev/null
++++ b/arch/arm/boards/beaglebone/ddr3.c
+@@ -0,0 +1,155 @@
++#include <init.h>
++#include <sizes.h>
++#include <io.h>
++#include <asm/armlinux.h>
++#include <asm/barebox-arm-head.h>
++#include <asm/barebox-arm.h>
++#include <mach/am33xx-silicon.h>
++#include <mach/am33xx-clock.h>
++
++/* AM335X EMIF Register values */
++#define EMIF_SDMGT 0x80000000
++#define EMIF_SDRAM 0x00004650
++#define EMIF_PHYCFG 0x2
++#define DDR_PHY_RESET (0x1 << 10)
++#define DDR_FUNCTIONAL_MODE_EN 0x1
++#define DDR_PHY_READY (0x1 << 2)
++#define VTP_CTRL_READY (0x1 << 5)
++#define VTP_CTRL_ENABLE (0x1 << 6)
++#define VTP_CTRL_LOCK_EN (0x1 << 4)
++#define VTP_CTRL_START_EN (0x1)
++#define DDR2_RATIO 0x80 /* for mDDR */
++#define CMD_FORCE 0x00 /* common #def */
++#define CMD_DELAY 0x00
++
++#define EMIF_READ_LATENCY 0x100007
++#define EMIF_TIM1 0x0AAAD4DB
++#define EMIF_TIM2 0x266B7FDA
++#define EMIF_TIM3 0x501F867F
++#define EMIF_SDCFG 0x61C05332
++#define EMIF_SDREF 0xC30
++#define ZQ_CFG 0x50074BE4
++#define DDR2_DLL_LOCK_DIFF 0x1
++#define DDR2_RD_DQS 0x38
++#define DDR2_WR_DQS 0x44
++#define DDR2_PHY_FIFO_WE 0x94
++#define DDR2_PHY_WR_DATA 0x7D
++
++#define DDR2_INVERT_CLKOUT 0x0
++#define PHY_RANK0_DELAY 0x01
++#define PHY_DLL_LOCK_DIFF 0x0
++#define DDR_IOCTRL_VALUE 0x18B
++
++static void beaglebone_data_macro_config_ddr3(int dataMacroNum)
++{
++ u32 BaseAddrOffset = 0x00;
++
++ if (dataMacroNum == 1)
++ BaseAddrOffset = 0xA4;
++
++ __raw_writel(DDR2_RD_DQS,
++ (AM33XX_DATA0_RD_DQS_SLAVE_RATIO_0 + BaseAddrOffset));
++ __raw_writel(DDR2_WR_DQS,
++ (AM33XX_DATA0_WR_DQS_SLAVE_RATIO_0 + BaseAddrOffset));
++ __raw_writel(DDR2_PHY_FIFO_WE,
++ (AM33XX_DATA0_FIFO_WE_SLAVE_RATIO_0 + BaseAddrOffset));
++ __raw_writel(DDR2_PHY_WR_DATA,
++ (AM33XX_DATA0_WR_DATA_SLAVE_RATIO_0 + BaseAddrOffset));
++ __raw_writel(PHY_DLL_LOCK_DIFF,
++ (AM33XX_DATA0_DLL_LOCK_DIFF_0 + BaseAddrOffset));
++}
++
++static void beaglebone_cmd_macro_config_ddr3(void)
++{
++ __raw_writel(DDR2_RATIO, AM33XX_CMD0_CTRL_SLAVE_RATIO_0);
++ __raw_writel(CMD_FORCE, AM33XX_CMD0_CTRL_SLAVE_FORCE_0);
++ __raw_writel(CMD_DELAY, AM33XX_CMD0_CTRL_SLAVE_DELAY_0);
++ __raw_writel(DDR2_DLL_LOCK_DIFF, AM33XX_CMD0_DLL_LOCK_DIFF_0);
++ __raw_writel(DDR2_INVERT_CLKOUT, AM33XX_CMD0_INVERT_CLKOUT_0);
++
++ __raw_writel(DDR2_RATIO, AM33XX_CMD1_CTRL_SLAVE_RATIO_0);
++ __raw_writel(CMD_FORCE, AM33XX_CMD1_CTRL_SLAVE_FORCE_0);
++ __raw_writel(CMD_DELAY, AM33XX_CMD1_CTRL_SLAVE_DELAY_0);
++ __raw_writel(DDR2_DLL_LOCK_DIFF, AM33XX_CMD1_DLL_LOCK_DIFF_0);
++ __raw_writel(DDR2_INVERT_CLKOUT, AM33XX_CMD1_INVERT_CLKOUT_0);
++
++ __raw_writel(DDR2_RATIO, AM33XX_CMD2_CTRL_SLAVE_RATIO_0);
++ __raw_writel(CMD_FORCE, AM33XX_CMD2_CTRL_SLAVE_FORCE_0);
++ __raw_writel(CMD_DELAY, AM33XX_CMD2_CTRL_SLAVE_DELAY_0);
++ __raw_writel(DDR2_DLL_LOCK_DIFF, AM33XX_CMD2_DLL_LOCK_DIFF_0);
++ __raw_writel(DDR2_INVERT_CLKOUT, AM33XX_CMD2_INVERT_CLKOUT_0);
++}
++
++static void beaglebone_config_vtp_ddr3(void)
++{
++ __raw_writel(__raw_readl(AM33XX_VTP0_CTRL_REG) | VTP_CTRL_ENABLE,
++ AM33XX_VTP0_CTRL_REG);
++ __raw_writel(__raw_readl(AM33XX_VTP0_CTRL_REG) & (~VTP_CTRL_START_EN),
++ AM33XX_VTP0_CTRL_REG);
++ __raw_writel(__raw_readl(AM33XX_VTP0_CTRL_REG) | VTP_CTRL_START_EN,
++ AM33XX_VTP0_CTRL_REG);
++
++ /* Poll for READY */
++ while ((__raw_readl(AM33XX_VTP0_CTRL_REG) & VTP_CTRL_READY) != VTP_CTRL_READY);
++}
++
++static void beaglebone_config_emif_ddr3(void)
++{
++ u32 i;
++
++ /*Program EMIF0 CFG Registers*/
++ __raw_writel(EMIF_READ_LATENCY, AM33XX_EMIF4_0_REG(DDR_PHY_CTRL_1));
++ __raw_writel(EMIF_READ_LATENCY, AM33XX_EMIF4_0_REG(DDR_PHY_CTRL_1_SHADOW));
++ __raw_writel(EMIF_READ_LATENCY, AM33XX_EMIF4_0_REG(DDR_PHY_CTRL_2));
++ __raw_writel(EMIF_TIM1, AM33XX_EMIF4_0_REG(SDRAM_TIM_1));
++ __raw_writel(EMIF_TIM1, AM33XX_EMIF4_0_REG(SDRAM_TIM_1_SHADOW));
++ __raw_writel(EMIF_TIM2, AM33XX_EMIF4_0_REG(SDRAM_TIM_2));
++ __raw_writel(EMIF_TIM2, AM33XX_EMIF4_0_REG(SDRAM_TIM_2_SHADOW));
++ __raw_writel(EMIF_TIM3, AM33XX_EMIF4_0_REG(SDRAM_TIM_3));
++ __raw_writel(EMIF_TIM3, AM33XX_EMIF4_0_REG(SDRAM_TIM_3_SHADOW));
++
++ __raw_writel(EMIF_SDCFG, AM33XX_EMIF4_0_REG(SDRAM_CONFIG));
++ __raw_writel(EMIF_SDCFG, AM33XX_EMIF4_0_REG(SDRAM_CONFIG2));
++
++ /* __raw_writel(EMIF_SDMGT, EMIF0_0_SDRAM_MGMT_CTRL);
++ __raw_writel(EMIF_SDMGT, EMIF0_0_SDRAM_MGMT_CTRL_SHD); */
++ __raw_writel(EMIF_SDREF, AM33XX_EMIF4_0_REG(SDRAM_REF_CTRL));
++ __raw_writel(EMIF_SDREF, AM33XX_EMIF4_0_REG(SDRAM_REF_CTRL_SHADOW));
++
++ for (i = 0; i < 5000; i++) {
++
++ }
++
++ /* __raw_writel(EMIF_SDMGT, EMIF0_0_SDRAM_MGMT_CTRL);
++ __raw_writel(EMIF_SDMGT, EMIF0_0_SDRAM_MGMT_CTRL_SHD); */
++ __raw_writel(EMIF_SDREF, AM33XX_EMIF4_0_REG(SDRAM_REF_CTRL));
++ __raw_writel(EMIF_SDREF, AM33XX_EMIF4_0_REG(SDRAM_REF_CTRL_SHADOW));
++
++ __raw_writel(EMIF_SDCFG, AM33XX_EMIF4_0_REG(SDRAM_CONFIG));
++ __raw_writel(EMIF_SDCFG, AM33XX_EMIF4_0_REG(SDRAM_CONFIG2));
++}
++
++void beaglebone_config_ddr3(void)
++{
++ enable_ddr_clocks();
++
++ beaglebone_config_vtp_ddr3();
++
++ beaglebone_cmd_macro_config_ddr3();
++ beaglebone_data_macro_config_ddr3(0);
++ beaglebone_data_macro_config_ddr3(1);
++
++ __raw_writel(PHY_RANK0_DELAY, AM33XX_DATA0_RANK0_DELAYS_0);
++ __raw_writel(PHY_RANK0_DELAY, AM33XX_DATA1_RANK0_DELAYS_0);
++
++ __raw_writel(DDR_IOCTRL_VALUE, AM33XX_DDR_CMD0_IOCTRL);
++ __raw_writel(DDR_IOCTRL_VALUE, AM33XX_DDR_CMD1_IOCTRL);
++ __raw_writel(DDR_IOCTRL_VALUE, AM33XX_DDR_CMD2_IOCTRL);
++ __raw_writel(DDR_IOCTRL_VALUE, AM33XX_DDR_DATA0_IOCTRL);
++ __raw_writel(DDR_IOCTRL_VALUE, AM33XX_DDR_DATA1_IOCTRL);
++
++ __raw_writel(__raw_readl(AM33XX_DDR_IO_CTRL) & 0xefffffff, AM33XX_DDR_IO_CTRL);
++ __raw_writel(__raw_readl(AM33XX_DDR_CKE_CTRL) | 0x00000001, AM33XX_DDR_CKE_CTRL);
++
++ beaglebone_config_emif_ddr3();
++}
+diff --git a/arch/arm/boards/beaglebone/lowlevel.c b/arch/arm/boards/beaglebone/lowlevel.c
+index 282b471..c1e11a1 100644
+--- a/arch/arm/boards/beaglebone/lowlevel.c
++++ b/arch/arm/boards/beaglebone/lowlevel.c
+@@ -31,10 +31,13 @@ void beaglebone_sram_init(void)
+ u32 regVal, uart_base;
+
+ /* Setup the PLLs and the clocks for the peripherals */
+- pll_init(MPUPLL_M_500);
+-
+- if (get_cpu_rev() == AM335X_ES1_0)
++ if (get_cpu_rev() == AM335X_ES1_0) { /* white */
++ pll_init(MPUPLL_M_500, DDRPLL_M_266);
+ beaglebone_config_ddr2();
++ } else { /* black */
++ pll_init(MPUPLL_M_500, DDRPLL_M_400);
++ beaglebone_config_ddr3();
++ }
+
+ /* Enable pin mux */
+ am33xx_enable_uart0_pin_mux();
+@@ -100,6 +103,6 @@ void __bare_init __naked barebox_arm_reset_vector(uint32_t *data)
+
+ beaglebone_board_init();
+
+- barebox_arm_entry(0x80000000, SZ_256M, 0);
++ barebox_arm_entry(0x80000000, SZ_256M, 0); /* real RAM setup comes later */
+ /* barebox_arm_entry(0x402F0400, 0x4030CE00-0x402F0400, 0); */ /* for SRAM */
+ }
+diff --git a/arch/arm/mach-omap/am33xx_clock.c b/arch/arm/mach-omap/am33xx_clock.c
+index 9928e9f..e0ba197 100644
+--- a/arch/arm/mach-omap/am33xx_clock.c
++++ b/arch/arm/mach-omap/am33xx_clock.c
+@@ -248,7 +248,7 @@ static void per_pll_config(void)
+ while(__raw_readl(CM_IDLEST_DPLL_PER) != 0x1);
+ }
+
+-static void ddr_pll_config(void)
++static void ddr_pll_config(int ddrpll_M)
+ {
+ u32 clkmode, clksel, div_m2;
+
+@@ -263,7 +263,7 @@ static void ddr_pll_config(void)
+ while ((__raw_readl(CM_IDLEST_DPLL_DDR) & 0x00000100) != 0x00000100);
+
+ clksel = clksel & (~0x7ffff);
+- clksel = clksel | ((DDRPLL_M << 0x8) | DDRPLL_N);
++ clksel = clksel | ((ddrpll_M << 0x8) | DDRPLL_N);
+ __raw_writel(clksel, CM_CLKSEL_DPLL_DDR);
+
+ div_m2 = div_m2 & 0xFFFFFFE0;
+@@ -288,18 +288,17 @@ void enable_ddr_clocks(void)
+ PRCM_L3_GCLK_ACTIVITY));
+ /* Poll if module is functional */
+ while ((__raw_readl(CM_PER_EMIF_CLKCTRL)) != PRCM_MOD_EN);
+-
+ }
+
+ /*
+ * Configure the PLL/PRCM for necessary peripherals
+ */
+-void pll_init(int mpupll_M)
++void pll_init(int mpupll_M, int ddrpll_M)
+ {
+ mpu_pll_config(mpupll_M);
+ core_pll_config();
+ per_pll_config();
+- ddr_pll_config();
++ ddr_pll_config(ddrpll_M);
+ /* Enable the required interconnect clocks */
+ interface_clocks_enable();
+ /* Enable power domain transition */
+diff --git a/arch/arm/mach-omap/include/mach/am33xx-clock.h b/arch/arm/mach-omap/include/mach/am33xx-clock.h
+index 968509e..3f86d14 100644
+--- a/arch/arm/mach-omap/include/mach/am33xx-clock.h
++++ b/arch/arm/mach-omap/include/mach/am33xx-clock.h
+@@ -53,7 +53,8 @@
+
+ /* DDR Freq is 266 MHZ for now*/
+ /* Set Fdll = 400 MHZ , Fdll = M * 2 * CLKINP/ N + 1; clkout = Fdll /(2 * M2) */
+-#define DDRPLL_M 266
++#define DDRPLL_M_266 266
++#define DDRPLL_M_400 400
+ #define DDRPLL_N (OSC - 1)
+ #define DDRPLL_M2 1
+
+@@ -187,7 +188,7 @@
+
+ #define CM_ALWON_GPMC_CLKCTRL CM_PER_GPMC_CLKCTRL
+
+-extern void pll_init(int mpupll_M);
++extern void pll_init(int mpupll_M, int ddrpll_M);
+ extern void enable_ddr_clocks(void);
+
+ #endif /* endif _AM33XX_CLOCKS_H_ */
+diff --git a/arch/arm/mach-omap/include/mach/am33xx-devices.h b/arch/arm/mach-omap/include/mach/am33xx-devices.h
+index edf8982..1d13d3d 100644
+--- a/arch/arm/mach-omap/include/mach/am33xx-devices.h
++++ b/arch/arm/mach-omap/include/mach/am33xx-devices.h
+@@ -31,6 +31,12 @@ static inline struct device_d *am33xx_add_mmc0(struct omap_hsmmc_platform_data *
+ AM33XX_MMCHS0_BASE, SZ_4K, IORESOURCE_MEM, pdata);
+ }
+
++static inline struct device_d *am33xx_add_mmc1(struct omap_hsmmc_platform_data *pdata)
++{
++ return add_generic_device("omap4-hsmmc", 1, NULL,
++ AM33XX_MMC1_BASE, SZ_4K, IORESOURCE_MEM, pdata);
++}
++
+ static inline struct device_d *am33xx_add_cpsw(struct cpsw_platform_data *cpsw_data)
+ {
+ return add_generic_device("cpsw", 0, NULL,
+--
+1.7.10.4
+
diff --git a/patches/barebox-2013.07.0/series b/patches/barebox-2013.07.0/series
new file mode 100644
index 0000000..042cb61
--- /dev/null
+++ b/patches/barebox-2013.07.0/series
@@ -0,0 +1,17 @@
+0001-scripts-genenv-remove-empty-files-from-tempdir.patch
+0002-scripts-Makefile-do-not-use-obj-variables-for-usersp.patch
+0003-console-fix-console-without-CONFIG_PARAMETER.patch
+0004-beaglebone-fix-booting.patch
+0005-beaglebone-env-use-config-board-instead-of-config.patch
+0006-WIP-beaglebone-add-simple-script-to-change-usb-curre.patch
+0007-ARM-AM33xx-Add-gpio-support.patch
+0008-ARM-AM33xx-Enable-clock-for-all-GPIO-banks.patch
+0009-ARM-AM33xx-Make-mpu-pll-configurable-by-lowlevel-boa.patch
+0010-arm-omap-store-boot-source-info-from-ROM-loader.patch
+0011-i2c-omap-cleanup-cpu_is-functions.patch
+0012-ARM-AM33xx-Add-i2c-support-for-AM33xx.patch
+0013-beaglebone-configure-I2C-EEPROM.patch
+0014-arm-cpuinfo-display-the-core-name-and-version.patch
+0015-am33xx-implement-cpu-revision-decoding.patch
+0016-beaglebone-split-out-DDR2-init-for-BB-White.patch
+0017-beaglebone-add-support-for-beaglebone-black-with-DDR.patch
diff --git a/platformconfig b/platformconfig
index a5dcac9..c6d5d76 100644
--- a/platformconfig
+++ b/platformconfig
@@ -125,7 +125,7 @@ PTXCONF_KERNEL_CONFIG="kernelconfig"
PTXCONF_KERNEL_EXTRA_MAKEVARS="CONFIG_DEBUG_SECTION_MISMATCH=y"
PTXCONF_DTC=y
# PTXCONF_DTC_INSTALL_OFTREE is not set
-PTXCONF_DTC_OFTREE_DTS="${KERNEL_DIR}/arch/arm/boot/dts/am335x-bone.dts"
+PTXCONF_DTC_OFTREE_DTS="${KERNEL_DIR}/arch/arm/boot/dts/am335x-bone.dts ${KERNEL_DIR}/arch/arm/boot/dts/am335x-boneblack.dts"
PTXCONF_DTC_KERNEL=y
PTXCONF_DTC_EXTRA_ARGS="-@"
@@ -146,8 +146,8 @@ PTXCONF_CONSOLE_SPEED="115200"
# PTXCONF_AT91BOOTSTRAP2 is not set
PTXCONF_BAREBOX_ARCH_STRING="arm"
PTXCONF_BAREBOX=y
-PTXCONF_BAREBOX_VERSION="2013.04.0"
-PTXCONF_BAREBOX_MD5="eef5e25a3d2855e99aa1bc04862841db"
+PTXCONF_BAREBOX_VERSION="2013.07.0"
+PTXCONF_BAREBOX_MD5="6e60845aa3ebfe4ccc1d834508d8c8c8"
PTXCONF_BAREBOX_CONFIG="barebox.config"
PTXCONF_BAREBOX_EXTRA_ENV=y
PTXCONF_BAREBOX_EXTRA_ENV_PATH="${PTXDIST_PLATFORMCONFIGDIR}/barebox-defaultenv"