summaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/boards/beaglebone/beaglebone.h2
-rw-r--r--arch/arm/boards/beaglebone/board.c125
-rw-r--r--arch/arm/boards/beaglebone/lowlevel.c67
-rw-r--r--arch/arm/boards/dfi-fs700-m60/lowlevel.c8
-rw-r--r--arch/arm/boards/dmo-mx6-realq7/lowlevel.c4
-rw-r--r--arch/arm/boards/ebv-socrates/lowlevel.c6
-rw-r--r--arch/arm/boards/efika-mx-smartbook/lowlevel.c4
-rw-r--r--arch/arm/boards/freescale-mx51-pdk/lowlevel.c4
-rw-r--r--arch/arm/boards/freescale-mx53-loco/lowlevel.c4
-rw-r--r--arch/arm/boards/freescale-mx53-vmx53/lowlevel.c4
-rw-r--r--arch/arm/boards/freescale-mx6-sabrelite/lowlevel.c4
-rw-r--r--arch/arm/boards/gk802/lowlevel.c4
-rw-r--r--arch/arm/boards/pcm051/Makefile2
-rw-r--r--arch/arm/boards/pcm051/board.c164
-rw-r--r--arch/arm/boards/pcm051/env/init/mtdparts-nand11
-rw-r--r--arch/arm/boards/pcm051/env/init/mtdparts-nor12
-rw-r--r--arch/arm/boards/pcm051/lowlevel.c44
-rw-r--r--arch/arm/boards/pcm051/mux.c65
-rw-r--r--arch/arm/boards/pcm051/mux.h4
-rw-r--r--arch/arm/boards/phytec-pfla02/lowlevel.c8
-rw-r--r--arch/arm/boards/solidrun-carrier-1/lowlevel.c2
-rw-r--r--arch/arm/boards/solidrun-cubox/lowlevel.c4
-rw-r--r--arch/arm/boards/terasic-sockit/lowlevel.c8
-rw-r--r--arch/arm/boards/toradex-colibri-t20-iris/entry.c4
-rw-r--r--arch/arm/boards/toshiba-ac100/entry.c4
-rw-r--r--arch/arm/boards/tqma6x/lowlevel.c8
-rw-r--r--arch/arm/configs/am335x_beaglebone_defconfig8
-rw-r--r--arch/arm/configs/am335x_beaglebone_mlo_large_defconfig55
-rw-r--r--arch/arm/configs/am335x_beaglebone_mlo_small_defconfig29
-rw-r--r--arch/arm/configs/am335x_mlo_defconfig (renamed from arch/arm/configs/pcm051_mlo_defconfig)27
-rw-r--r--arch/arm/configs/pcm051_defconfig34
-rw-r--r--arch/arm/cpu/Makefile2
-rw-r--r--arch/arm/cpu/start-images.c49
-rw-r--r--arch/arm/cpu/uncompress.c9
-rw-r--r--arch/arm/dts/Makefile6
-rw-r--r--arch/arm/dts/am335x-bone-common.dtsi300
-rw-r--r--arch/arm/dts/am335x-bone.dts39
-rw-r--r--arch/arm/dts/am335x-boneblack.dts88
-rw-r--r--arch/arm/dts/am335x-phytec-phycore.dts320
-rw-r--r--arch/arm/dts/tps65217.dtsi56
-rw-r--r--arch/arm/include/asm/barebox-arm.h16
-rw-r--r--arch/arm/mach-imx/imx-bbu-external-nand.c2
-rw-r--r--arch/arm/mach-omap/Kconfig34
-rw-r--r--arch/arm/mach-omap/Makefile4
-rw-r--r--arch/arm/mach-omap/am33xx_generic.c3
-rw-r--r--arch/arm/mach-omap/include/mach/am33xx-generic.h3
-rw-r--r--arch/arm/mach-omap/include/mach/am33xx-silicon.h1
-rw-r--r--arch/arm/mach-omap/include/mach/generic.h2
-rw-r--r--arch/arm/mach-omap/include/mach/omap3-generic.h2
-rw-r--r--arch/arm/mach-omap/include/mach/omap3-silicon.h1
-rw-r--r--arch/arm/mach-omap/include/mach/omap4-generic.h2
-rw-r--r--arch/arm/mach-omap/include/mach/omap4-silicon.h3
-rw-r--r--arch/arm/mach-omap/omap3_generic.c3
-rw-r--r--arch/arm/mach-omap/omap4_generic.c3
-rw-r--r--arch/arm/mach-omap/omap_bootinfo.S25
-rw-r--r--arch/arm/mach-omap/omap_generic.c17
-rw-r--r--arch/mips/include/asm/types.h4
-rw-r--r--arch/x86/lib/.gitignore1
58 files changed, 1071 insertions, 653 deletions
diff --git a/arch/arm/boards/beaglebone/beaglebone.h b/arch/arm/boards/beaglebone/beaglebone.h
index 25c5b0eebc..a4f48e5b0b 100644
--- a/arch/arm/boards/beaglebone/beaglebone.h
+++ b/arch/arm/boards/beaglebone/beaglebone.h
@@ -1,6 +1,8 @@
#ifndef __BOARD_BEAGLEBONE_H
#define __BOARD_BEAGLEBONE_H
+#include <mach/am33xx-generic.h>
+
static inline int is_beaglebone_black(void)
{
return am33xx_get_cpu_rev() != AM335X_ES1_0;
diff --git a/arch/arm/boards/beaglebone/board.c b/arch/arm/boards/beaglebone/board.c
index b87ccef1df..ad0d3b3070 100644
--- a/arch/arm/boards/beaglebone/board.c
+++ b/arch/arm/boards/beaglebone/board.c
@@ -22,150 +22,49 @@
*/
#include <common.h>
-#include <console.h>
#include <init.h>
#include <driver.h>
#include <envfs.h>
#include <environment.h>
#include <globalvar.h>
#include <sizes.h>
-#include <io.h>
-#include <ns16550.h>
#include <net.h>
#include <bootsource.h>
#include <asm/armlinux.h>
#include <generated/mach-types.h>
#include <mach/am33xx-silicon.h>
-#include <mach/am33xx-clock.h>
-#include <mach/sdrc.h>
#include <mach/sys_info.h>
#include <mach/syslib.h>
#include <mach/gpmc.h>
-#include <mach/ehci.h>
-#include <i2c/i2c.h>
#include <linux/err.h>
-#include <linux/phy.h>
-#include <usb/ehci.h>
-#include <mach/am33xx-devices.h>
-#include <mach/am33xx-mux.h>
-#include <mach/wdt.h>
-#include <mach/am33xx-generic.h>
-#include <mach/cpsw.h>
#include "beaglebone.h"
-#ifdef CONFIG_DRIVER_SERIAL_NS16550
-
-/**
- * @brief UART serial port initialization - remember to enable COM clocks in
- * arch
- *
- * @return result of device registration
- */
-static int beaglebone_console_init(void)
-{
- barebox_set_model("Texas Instruments beaglebone");
- barebox_set_hostname("beaglebone");
-
- am33xx_add_uart0();
-
- return 0;
-}
-console_initcall(beaglebone_console_init);
-#endif /* CONFIG_DRIVER_SERIAL_NS16550 */
-
-static int beaglebone_mem_init(void)
+static int beaglebone_coredevice_init(void)
{
- if (is_beaglebone_black())
- omap_add_ram0(SZ_512M);
- else
- omap_add_ram0(SZ_256M);
-
- return 0;
-}
-mem_initcall(beaglebone_mem_init);
-
-static struct cpsw_slave_data cpsw_slaves[] = {
- {
- .phy_id = 0,
- .phy_if = PHY_INTERFACE_MODE_MII,
- },
-};
+ if (!of_machine_is_compatible("ti,am335x-bone"))
+ return 0;
-static struct cpsw_platform_data cpsw_data = {
- .slave_data = cpsw_slaves,
- .num_slaves = ARRAY_SIZE(cpsw_slaves),
-};
-
-static void beaglebone_eth_init(void)
-{
am33xx_register_ethaddr(0, 0);
-
- writel(0, AM33XX_MAC_MII_SEL);
-
- am33xx_enable_mii1_pin_mux();
-
- am33xx_add_cpsw(&cpsw_data);
+ return 0;
}
-
-static struct i2c_board_info i2c0_devices[] = {
- {
- I2C_BOARD_INFO("24c256", 0x50)
- },
-};
-
-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 struct omap_hsmmc_platform_data beaglebone_sd = {
- .devname = "sd",
-};
-
-static struct omap_hsmmc_platform_data beaglebone_emmc = {
- .devname = "emmc",
-};
+coredevice_initcall(beaglebone_coredevice_init);
static int beaglebone_devices_init(void)
{
- am33xx_enable_mmc0_pin_mux();
- am33xx_add_mmc0(&beaglebone_sd);
+ int black;
- if (is_beaglebone_black()) {
- configure_module_pin_mux(mmc1_pin_mux);
- am33xx_add_mmc1(&beaglebone_emmc);
- }
+ if (!of_machine_is_compatible("ti,am335x-bone"))
+ return 0;
if (bootsource_get() == BOOTSOURCE_MMC) {
if (bootsource_get_instance() == 0)
- omap_set_bootmmc_devname("sd");
+ omap_set_bootmmc_devname("mmc0");
else
- omap_set_bootmmc_devname("emmc");
+ omap_set_bootmmc_devname("mmc1");
}
- 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)
-{
- int black = is_beaglebone_black();
+ black = is_beaglebone_black();
globalvar_add_simple("board.variant", black ? "boneblack" : "bone");
@@ -175,4 +74,4 @@ static int beaglebone_env_init(void)
return 0;
}
-late_initcall(beaglebone_env_init);
+coredevice_initcall(beaglebone_devices_init);
diff --git a/arch/arm/boards/beaglebone/lowlevel.c b/arch/arm/boards/beaglebone/lowlevel.c
index 992e3e4046..92389a9557 100644
--- a/arch/arm/boards/beaglebone/lowlevel.c
+++ b/arch/arm/boards/beaglebone/lowlevel.c
@@ -1,6 +1,7 @@
#include <init.h>
#include <sizes.h>
#include <io.h>
+#include <linux/string.h>
#include <debug_ll.h>
#include <asm/barebox-arm-head.h>
#include <asm/barebox-arm.h>
@@ -102,6 +103,11 @@ static const struct am33xx_emif_regs ddr3_regs = {
.sdram_ref_ctrl = 0xC30,
};
+extern char __dtb_am335x_boneblack_start[];
+extern char __dtb_am335x_boneblack_end[];
+extern char __dtb_am335x_bone_start[];
+extern char __dtb_am335x_bone_end[];
+
/**
* @brief The basic entry point for board initialization.
*
@@ -111,8 +117,22 @@ static const struct am33xx_emif_regs ddr3_regs = {
*
* @return void
*/
-static int beaglebone_board_init(void)
+static noinline int beaglebone_sram_init(void)
{
+ uint32_t fdt, fdt_end, sdram_start, sdram_size;
+
+ sdram_start = 0x80000000;
+
+ if (is_beaglebone_black()) {
+ sdram_size = SZ_512M;
+ fdt = (uint32_t)__dtb_am335x_boneblack_start;
+ fdt_end = (uint32_t)__dtb_am335x_boneblack_end;
+ } else {
+ sdram_size = SZ_256M;
+ fdt = (uint32_t)__dtb_am335x_bone_start;
+ fdt_end = (uint32_t)__dtb_am335x_bone_end;
+ }
+
/* WDT1 is already running when the bootloader gets control
* Disable it to avoid "random" resets
*/
@@ -121,9 +141,6 @@ static int beaglebone_board_init(void)
__raw_writel(WDT_DISABLE_CODE2, AM33XX_WDT_REG(WSPR));
while(__raw_readl(AM33XX_WDT_REG(WWPS)) != 0x0);
- if (am33xx_running_in_sdram())
- return 0;
-
/* Setup the PLLs and the clocks for the peripherals */
if (is_beaglebone_black()) {
am33xx_pll_init(MPUPLL_M_500, 24, DDRPLL_M_400);
@@ -140,23 +157,43 @@ static int beaglebone_board_init(void)
omap_uart_lowlevel_init((void *)AM33XX_UART0_BASE);
putc_ll('>');
- return 0;
+ /*
+ * Copy the devicetree blob to sdram so that the barebox code finds it
+ * inside valid SDRAM instead of SRAM.
+ */
+ memcpy((void *)sdram_start, (void *)fdt, fdt_end - fdt);
+ fdt = sdram_start;
+
+ barebox_arm_entry(sdram_start, sdram_size, fdt);
}
-void __bare_init __naked barebox_arm_reset_vector(uint32_t *data)
+ENTRY_FUNCTION(start_am33xx_beaglebone_sram, bootinfo, r1, r2)
{
- unsigned sdram;
+ am33xx_save_bootinfo((void *)bootinfo);
+
+ /*
+ * Setup C environment, the board init code uses global variables.
+ * Stackpointer has already been initialized by the ROM code.
+ */
+ relocate_to_current_adr();
+ setup_c();
- am33xx_save_bootinfo(data);
+ beaglebone_sram_init();
+}
- arm_cpu_lowlevel_init();
+ENTRY_FUNCTION(start_am33xx_beaglebone_sdram, r0, r1, r2)
+{
+ uint32_t fdt, sdram_size;
- beaglebone_board_init();
+ if (is_beaglebone_black()) {
+ sdram_size = SZ_512M;
+ fdt = (uint32_t)__dtb_am335x_boneblack_start;
+ } else {
+ sdram_size = SZ_256M;
+ fdt = (uint32_t)__dtb_am335x_bone_start;
+ }
- if (is_beaglebone_black())
- sdram = SZ_512M;
- else
- sdram = SZ_256M;
+ fdt -= get_runtime_offset();
- barebox_arm_entry(0x80000000, sdram, 0);
+ barebox_arm_entry(0x80000000, sdram_size, fdt);
}
diff --git a/arch/arm/boards/dfi-fs700-m60/lowlevel.c b/arch/arm/boards/dfi-fs700-m60/lowlevel.c
index 725c58dd28..2995bd4db7 100644
--- a/arch/arm/boards/dfi-fs700-m60/lowlevel.c
+++ b/arch/arm/boards/dfi-fs700-m60/lowlevel.c
@@ -61,12 +61,10 @@ static inline void early_uart_init_6s(void)
extern char __dtb_imx6q_dfi_fs700_m60_6q_start[];
-ENTRY_FUNCTION(start_imx6q_dfi_fs700_m60_6q)(void)
+ENTRY_FUNCTION(start_imx6q_dfi_fs700_m60_6q, r0, r1, r2)
{
uint32_t fdt;
- __barebox_arm_head();
-
arm_cpu_lowlevel_init();
arm_setup_stack(0x00940000 - 8);
@@ -80,13 +78,11 @@ ENTRY_FUNCTION(start_imx6q_dfi_fs700_m60_6q)(void)
extern char __dtb_imx6dl_dfi_fs700_m60_6s_start[];
-ENTRY_FUNCTION(start_imx6dl_dfi_fs700_m60_6s)(void)
+ENTRY_FUNCTION(start_imx6dl_dfi_fs700_m60_6s, r0, r1, r2)
{
uint32_t fdt;
int i;
- __barebox_arm_head();
-
arm_cpu_lowlevel_init();
arm_setup_stack(0x00920000 - 8);
diff --git a/arch/arm/boards/dmo-mx6-realq7/lowlevel.c b/arch/arm/boards/dmo-mx6-realq7/lowlevel.c
index 240116d7b6..f47575e991 100644
--- a/arch/arm/boards/dmo-mx6-realq7/lowlevel.c
+++ b/arch/arm/boards/dmo-mx6-realq7/lowlevel.c
@@ -140,12 +140,10 @@ static void sdram_init(void)
extern char __dtb_imx6q_dmo_realq7_start[];
-ENTRY_FUNCTION(start_imx6_realq7)(void)
+ENTRY_FUNCTION(start_imx6_realq7, r0, r1, r2)
{
uint32_t fdt;
- __barebox_arm_head();
-
arm_cpu_lowlevel_init();
arm_setup_stack(0x00940000 - 8);
diff --git a/arch/arm/boards/ebv-socrates/lowlevel.c b/arch/arm/boards/ebv-socrates/lowlevel.c
index d2f02e0b82..e93ae385f3 100644
--- a/arch/arm/boards/ebv-socrates/lowlevel.c
+++ b/arch/arm/boards/ebv-socrates/lowlevel.c
@@ -45,7 +45,7 @@ static inline void ledoff(void)
extern char __dtb_socfpga_cyclone5_socrates_start[];
-ENTRY_FUNCTION(start_socfpga_socrates)(void)
+ENTRY_FUNCTION(start_socfpga_socrates, r0, r1, r2)
{
uint32_t fdt;
@@ -87,10 +87,8 @@ static noinline void socrates_entry(void)
barebox_arm_entry(0x0, SZ_1G, 0);
}
-ENTRY_FUNCTION(start_socfpga_socrates_xload)(void)
+ENTRY_FUNCTION(start_socfpga_socrates_xload, r0, r1, r2)
{
- __barebox_arm_head();
-
arm_cpu_lowlevel_init();
arm_setup_stack(0xffff0000 + SZ_64K - SZ_4K - 16);
diff --git a/arch/arm/boards/efika-mx-smartbook/lowlevel.c b/arch/arm/boards/efika-mx-smartbook/lowlevel.c
index 5a568618f8..72c8b00a31 100644
--- a/arch/arm/boards/efika-mx-smartbook/lowlevel.c
+++ b/arch/arm/boards/efika-mx-smartbook/lowlevel.c
@@ -6,12 +6,10 @@
extern char __dtb_imx51_genesi_efika_sb_start[];
-ENTRY_FUNCTION(start_imx51_genesi_efikasb)(void)
+ENTRY_FUNCTION(start_imx51_genesi_efikasb, r0, r1, r2)
{
uint32_t fdt;
- __barebox_arm_head();
-
arm_cpu_lowlevel_init();
arm_setup_stack(0x20000000 - 16);
imx51_init_lowlevel(800);
diff --git a/arch/arm/boards/freescale-mx51-pdk/lowlevel.c b/arch/arm/boards/freescale-mx51-pdk/lowlevel.c
index 8c1acb45c3..f60601194d 100644
--- a/arch/arm/boards/freescale-mx51-pdk/lowlevel.c
+++ b/arch/arm/boards/freescale-mx51-pdk/lowlevel.c
@@ -5,12 +5,10 @@
extern char __dtb_imx51_babbage_start[];
-ENTRY_FUNCTION(start_imx51_babbage)(void)
+ENTRY_FUNCTION(start_imx51_babbage, r0, r1, r2)
{
uint32_t fdt;
- __barebox_arm_head();
-
arm_cpu_lowlevel_init();
fdt = (uint32_t)__dtb_imx51_babbage_start - get_runtime_offset();
diff --git a/arch/arm/boards/freescale-mx53-loco/lowlevel.c b/arch/arm/boards/freescale-mx53-loco/lowlevel.c
index d920524da2..7556a2e35f 100644
--- a/arch/arm/boards/freescale-mx53-loco/lowlevel.c
+++ b/arch/arm/boards/freescale-mx53-loco/lowlevel.c
@@ -5,12 +5,10 @@
extern char __dtb_imx53_qsb_start[];
-ENTRY_FUNCTION(start_imx53_loco)(void)
+ENTRY_FUNCTION(start_imx53_loco, r0, r1, r2)
{
uint32_t fdt;
- __barebox_arm_head();
-
arm_cpu_lowlevel_init();
fdt = (uint32_t)__dtb_imx53_qsb_start - get_runtime_offset();
diff --git a/arch/arm/boards/freescale-mx53-vmx53/lowlevel.c b/arch/arm/boards/freescale-mx53-vmx53/lowlevel.c
index 5dc23fd8c5..ba356cdde3 100644
--- a/arch/arm/boards/freescale-mx53-vmx53/lowlevel.c
+++ b/arch/arm/boards/freescale-mx53-vmx53/lowlevel.c
@@ -5,12 +5,10 @@
extern char __dtb_imx53_voipac_bsb_start[];
-ENTRY_FUNCTION(start_imx53_vmx53)(void)
+ENTRY_FUNCTION(start_imx53_vmx53, r0, r1, r2)
{
uint32_t fdt;
- __barebox_arm_head();
-
arm_cpu_lowlevel_init();
fdt = (uint32_t)__dtb_imx53_voipac_bsb_start - get_runtime_offset();
diff --git a/arch/arm/boards/freescale-mx6-sabrelite/lowlevel.c b/arch/arm/boards/freescale-mx6-sabrelite/lowlevel.c
index a68e09a9f6..b36a39c23e 100644
--- a/arch/arm/boards/freescale-mx6-sabrelite/lowlevel.c
+++ b/arch/arm/boards/freescale-mx6-sabrelite/lowlevel.c
@@ -5,12 +5,10 @@
extern char __dtb_imx6q_sabrelite_start[];
-ENTRY_FUNCTION(start_imx6_sabrelite)(void)
+ENTRY_FUNCTION(start_imx6_sabrelite, r0, r1, r2)
{
uint32_t fdt;
- __barebox_arm_head();
-
arm_cpu_lowlevel_init();
fdt = (uint32_t)__dtb_imx6q_sabrelite_start - get_runtime_offset();
diff --git a/arch/arm/boards/gk802/lowlevel.c b/arch/arm/boards/gk802/lowlevel.c
index 95b218d2d2..e159ddbb23 100644
--- a/arch/arm/boards/gk802/lowlevel.c
+++ b/arch/arm/boards/gk802/lowlevel.c
@@ -5,12 +5,10 @@
extern char __dtb_imx6q_gk802_start[];
-ENTRY_FUNCTION(start_imx6_gk802)(void)
+ENTRY_FUNCTION(start_imx6_gk802, r0, r1, r2)
{
uint32_t fdt;
- __barebox_arm_head();
-
arm_cpu_lowlevel_init();
fdt = (uint32_t)__dtb_imx6q_gk802_start - get_runtime_offset();
diff --git a/arch/arm/boards/pcm051/Makefile b/arch/arm/boards/pcm051/Makefile
index 69d48e1342..092c31d6b2 100644
--- a/arch/arm/boards/pcm051/Makefile
+++ b/arch/arm/boards/pcm051/Makefile
@@ -1,2 +1,2 @@
lwl-y += lowlevel.o
-obj-y += board.o mux.o
+obj-y += board.o
diff --git a/arch/arm/boards/pcm051/board.c b/arch/arm/boards/pcm051/board.c
index 0836a192d7..59de42bee2 100644
--- a/arch/arm/boards/pcm051/board.c
+++ b/arch/arm/boards/pcm051/board.c
@@ -19,106 +19,27 @@
#include <bootsource.h>
#include <common.h>
+#include <nand.h>
#include <init.h>
#include <io.h>
-#include <nand.h>
#include <sizes.h>
-#include <ns16550.h>
#include <asm/armlinux.h>
#include <generated/mach-types.h>
#include <linux/phy.h>
-#include <mach/am33xx-devices.h>
#include <mach/am33xx-generic.h>
-#include <mach/am33xx-mux.h>
#include <mach/am33xx-silicon.h>
-#include <mach/cpsw.h>
-#include <mach/generic.h>
-#include <mach/gpmc.h>
-#include <mach/gpmc_nand.h>
-#include <spi/spi.h>
-#include <spi/flash.h>
-#include <i2c/i2c.h>
-#include <i2c/at24.h>
#include <mach/bbu.h>
-#include "mux.h"
-/**
- * @brief UART serial port initialization
- * arch
- *
- * @return result of device registration
- */
-static int pcm051_console_init(void)
+static int pcm051_coredevice_init(void)
{
- barebox_set_model("Phytec phyCORE-AM335x");
- barebox_set_hostname("phycore-am335x");
-
- am33xx_enable_uart0_pin_mux();
- /* Register the serial port */
- am33xx_add_uart0();
-
- return 0;
-}
-console_initcall(pcm051_console_init);
-
-static int pcm051_mem_init(void)
-{
- omap_add_ram0(SZ_512M);
+ if (!of_machine_is_compatible("phytec,pcm051"))
+ return 0;
+ am33xx_register_ethaddr(0, 0);
return 0;
}
-mem_initcall(pcm051_mem_init);
-
-/*
-* SPI Flash works at 80Mhz however the SPI controller runs with 48MHz.
-* So setup Max speed to be less than the controller speed.
-*/
-static struct spi_board_info pcm051_spi_board_info[] = {
- {
- .name = "m25p80",
- .max_speed_hz = 24000000,
- .bus_num = 0,
- .chip_select = 0,
- },
-};
-
-static struct cpsw_slave_data cpsw_slaves[] = {
- {
- .phy_id = 0,
- .phy_if = PHY_INTERFACE_MODE_RMII,
- },
-};
-
-static struct cpsw_platform_data cpsw_data = {
- .slave_data = cpsw_slaves,
- .num_slaves = ARRAY_SIZE(cpsw_slaves),
-};
-
-static struct i2c_board_info i2c0_devices[] = {
- {
- I2C_BOARD_INFO("24c32", 0x52),
- },
-};
-
-static struct gpmc_config pcm051_nand_cfg = {
- .cfg = {
- 0x00000800, /* CONF1 */
- 0x00030300, /* CONF2 */
- 0x00030300, /* CONF3 */
- 0x02000311, /* CONF4 */
- 0x00030303, /* CONF5 */
- 0x03000540, /* CONF6 */
- },
- .base = 0x08000000,
- .size = GPMC_SIZE_16M,
-};
-
-static struct gpmc_nand_platform_data nand_plat = {
- .wait_mon_pin = 1,
- .ecc_mode = OMAP_ECC_BCH8_CODE_HW,
- .nand_cfg = &pcm051_nand_cfg,
-};
+coredevice_initcall(pcm051_coredevice_init);
static struct omap_barebox_part pcm051_barebox_part = {
.nand_offset = SZ_512K,
@@ -127,79 +48,20 @@ static struct omap_barebox_part pcm051_barebox_part = {
.nor_size = SZ_512K,
};
-static void pcm051_spi_init(void)
-{
- int ret;
-
- am33xx_enable_spi0_pin_mux();
-
- ret = spi_register_board_info(pcm051_spi_board_info,
- ARRAY_SIZE(pcm051_spi_board_info));
- am33xx_add_spi0();
-}
-
-static void pcm051_eth_init(void)
-{
- am33xx_register_ethaddr(0, 0);
-
- writel(0x49, AM33XX_MAC_MII_SEL);
-
- am33xx_enable_rmii1_pin_mux();
-
- am33xx_add_cpsw(&cpsw_data);
-}
-
-static void pcm051_i2c_init(void)
-{
- am33xx_enable_i2c0_pin_mux();
-
- i2c_register_board_info(0, i2c0_devices, ARRAY_SIZE(i2c0_devices));
-
- am33xx_add_i2c0(NULL);
-}
-
-static void pcm051_nand_init(void)
-{
- pcm051_enable_nand_pin_mux();
-
- gpmc_generic_init(0x12);
-
- omap_add_gpmc_nand_device(&nand_plat);
-}
-
static int pcm051_devices_init(void)
{
- pcm051_enable_mmc0_pin_mux();
-
- am33xx_add_mmc0(NULL);
-
- pcm051_spi_init();
- pcm051_eth_init();
- pcm051_i2c_init();
- pcm051_nand_init();
-
- pcm051_enable_user_led_pin_mux();
- pcm051_enable_user_btn_pin_mux();
+ if (!of_machine_is_compatible("phytec,pcm051"))
+ return 0;
switch (bootsource_get()) {
case BOOTSOURCE_SPI:
- devfs_add_partition("m25p0", 0x00000, SZ_128K,
- DEVFS_PARTITION_FIXED, "xload");
- devfs_add_partition("m25p0", SZ_128K, SZ_512K,
- DEVFS_PARTITION_FIXED, "self0");
- devfs_add_partition("m25p0", SZ_128K + SZ_512K, SZ_128K,
- DEVFS_PARTITION_FIXED, "env0");
+ of_device_enable_path("/chosen/environment-spi");
+ break;
+ case BOOTSOURCE_MMC:
+ omap_set_bootmmc_devname("mmc0");
break;
default:
- devfs_add_partition("nand0", 0x00000, SZ_128K,
- DEVFS_PARTITION_FIXED, "xload_raw");
- dev_add_bb_dev("xload_raw", "xload");
- devfs_add_partition("nand0", SZ_512K, SZ_512K,
- DEVFS_PARTITION_FIXED, "self_raw");
- dev_add_bb_dev("self_raw", "self0");
- devfs_add_partition("nand0", SZ_512K + SZ_512K, SZ_128K,
- DEVFS_PARTITION_FIXED, "env_raw");
- dev_add_bb_dev("env_raw", "env0");
+ of_device_enable_path("/chosen/environment-nand");
break;
}
diff --git a/arch/arm/boards/pcm051/env/init/mtdparts-nand b/arch/arm/boards/pcm051/env/init/mtdparts-nand
deleted file mode 100644
index 12f0ffd4db..0000000000
--- a/arch/arm/boards/pcm051/env/init/mtdparts-nand
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/bin/sh
-
-if [ "$1" = menu ]; then
- init-menu-add-entry "$0" "NAND partitions"
- exit
-fi
-
-mtdparts="128k(nand0.xload),128k(nand0.xload_backup1),128k(nand0.xload_backup2),128k(nand0.xload_backup3),512k(nand0.barebox)ro,128k(nand0.bareboxenv),8M(nand0.kernel),-(nand0.root)"
-kernelname="omap2-nand.0"
-
-mtdparts-add -b -d nand0 -k ${kernelname} -p ${mtdparts}
diff --git a/arch/arm/boards/pcm051/env/init/mtdparts-nor b/arch/arm/boards/pcm051/env/init/mtdparts-nor
deleted file mode 100644
index 5c762ada4c..0000000000
--- a/arch/arm/boards/pcm051/env/init/mtdparts-nor
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/sh
-
-if [ "$1" = menu ]; then
- init-menu-add-entry "$0" "NOR partitions"
- exit
-fi
-
-mtdparts="128k(m25p0.xload),512k(m25p0.barebox),128k(m25p0.bareboxenv),4M(m25p0.kernel),-(m25p0.root)"
-kernelname="spi_flash"
-
-mtdparts-add -d m25p0 -k ${kernelname} -p ${mtdparts}
-
diff --git a/arch/arm/boards/pcm051/lowlevel.c b/arch/arm/boards/pcm051/lowlevel.c
index ded108e333..d3cac6860b 100644
--- a/arch/arm/boards/pcm051/lowlevel.c
+++ b/arch/arm/boards/pcm051/lowlevel.c
@@ -13,6 +13,7 @@
#include <mach/am33xx-mux.h>
#include <mach/am33xx-generic.h>
#include <mach/wdt.h>
+#include <debug_ll.h>
static const struct am33xx_cmd_control MT41J256M8HX15E_2x256M8_cmd = {
.slave_ratio0 = 0x40,
@@ -45,6 +46,9 @@ static const struct am33xx_ddr_data MT41J256M8HX15E_2x256M8_data = {
.dll_lock_diff0 = 0x0,
};
+extern char __dtb_am335x_phytec_phycore_start[];
+extern char __dtb_am335x_phytec_phycore_end[];
+
/**
* @brief The basic entry point for board initialization.
*
@@ -54,8 +58,10 @@ static const struct am33xx_ddr_data MT41J256M8HX15E_2x256M8_data = {
*
* @return void
*/
-static int pcm051_board_init(void)
+static noinline void pcm051_board_init(void)
{
+ unsigned long sdram = 0x80000000, fdt;
+
/* WDT1 is already running when the bootloader gets control
* Disable it to avoid "random" resets
*/
@@ -65,9 +71,6 @@ static int pcm051_board_init(void)
writel(WDT_DISABLE_CODE2, AM33XX_WDT_REG(WSPR));
while (readl(AM33XX_WDT_REG(WWPS)) != 0x0);
- if (am33xx_running_in_sdram())
- return 0;
-
am33xx_pll_init(MPUPLL_M_600, 25, DDRPLL_M_303);
am335x_sdram_init(0x18B, &MT41J256M8HX15E_2x256M8_cmd,
@@ -76,17 +79,42 @@ static int pcm051_board_init(void)
am33xx_uart0_soft_reset();
am33xx_enable_uart0_pin_mux();
+ omap_uart_lowlevel_init((void *)AM33XX_UART0_BASE);
+ putc_ll('>');
- return 0;
+ /*
+ * Copy the devicetree blob to sdram so that the barebox code finds it
+ * inside valid SDRAM instead of SRAM.
+ */
+ memcpy((void *)sdram, __dtb_am335x_phytec_phycore_start,
+ __dtb_am335x_phytec_phycore_end -
+ __dtb_am335x_phytec_phycore_start);
+ fdt = sdram;
+
+ barebox_arm_entry(sdram, SZ_512M, fdt);
}
-void __naked __bare_init barebox_arm_reset_vector(uint32_t *data)
+ENTRY_FUNCTION(start_am33xx_phytec_phycore_sram, bootinfo, r1, r2)
{
- am33xx_save_bootinfo(data);
+ am33xx_save_bootinfo((void *)bootinfo);
arm_cpu_lowlevel_init();
+ /*
+ * Setup C environment, the board init code uses global variables.
+ * Stackpointer has already been initialized by the ROM code.
+ */
+ relocate_to_current_adr();
+ setup_c();
+
pcm051_board_init();
+}
+
+ENTRY_FUNCTION(start_am33xx_phytec_phycore_sdram, r0, r1, r2)
+{
+ uint32_t fdt;
+
+ fdt = (uint32_t)__dtb_am335x_phytec_phycore_start - get_runtime_offset();
- barebox_arm_entry(0x80000000, SZ_512M, 0);
+ barebox_arm_entry(0x80000000, SZ_512M, fdt);
}
diff --git a/arch/arm/boards/pcm051/mux.c b/arch/arm/boards/pcm051/mux.c
deleted file mode 100644
index e1127ac6f2..0000000000
--- a/arch/arm/boards/pcm051/mux.c
+++ /dev/null
@@ -1,65 +0,0 @@
-#include <common.h>
-#include <config.h>
-#include <asm/io.h>
-#include <mach/am33xx-mux.h>
-
-static const struct module_pin_mux mmc0_pin_mux[] = {
- {OFFSET(mmc0_dat3), (MODE(0) | RXACTIVE | PULLUP_EN)}, /* MMC0_DAT3 */
- {OFFSET(mmc0_dat2), (MODE(0) | RXACTIVE | PULLUP_EN)}, /* MMC0_DAT2 */
- {OFFSET(mmc0_dat1), (MODE(0) | RXACTIVE | PULLUP_EN)}, /* MMC0_DAT1 */
- {OFFSET(mmc0_dat0), (MODE(0) | RXACTIVE | PULLUP_EN)}, /* MMC0_DAT0 */
- {OFFSET(mmc0_clk), (MODE(0) | RXACTIVE | PULLUP_EN)}, /* MMC0_CLK */
- {OFFSET(mmc0_cmd), (MODE(0) | RXACTIVE | PULLUP_EN)}, /* MMC0_CMD */
- {OFFSET(spi0_cs1), (MODE(7) | RXACTIVE | PULLUP_EN)}, /* MMC0_CD */
- {-1},
-};
-
-static const struct module_pin_mux nand_pin_mux[] = {
- {OFFSET(gpmc_ad0), (MODE(0) | PULLUP_EN | RXACTIVE)}, /* NAND AD0 */
- {OFFSET(gpmc_ad1), (MODE(0) | PULLUP_EN | RXACTIVE)}, /* NAND AD1 */
- {OFFSET(gpmc_ad2), (MODE(0) | PULLUP_EN | RXACTIVE)}, /* NAND AD2 */
- {OFFSET(gpmc_ad3), (MODE(0) | PULLUP_EN | RXACTIVE)}, /* NAND AD3 */
- {OFFSET(gpmc_ad4), (MODE(0) | PULLUP_EN | RXACTIVE)}, /* NAND AD4 */
- {OFFSET(gpmc_ad5), (MODE(0) | PULLUP_EN | RXACTIVE)}, /* NAND AD5 */
- {OFFSET(gpmc_ad6), (MODE(0) | PULLUP_EN | RXACTIVE)}, /* NAND AD6 */
- {OFFSET(gpmc_ad7), (MODE(0) | PULLUP_EN | RXACTIVE)}, /* NAND AD7 */
- {OFFSET(gpmc_wait0), (MODE(0) | RXACTIVE | PULLUP_EN)}, /* NAND WAIT */
- {OFFSET(gpmc_csn0), (MODE(0) | PULLUDEN)}, /* NAND_CS0 */
- {OFFSET(gpmc_advn_ale), (MODE(0) | PULLUDEN)}, /* NAND_ADV_ALE */
- {OFFSET(gpmc_oen_ren), (MODE(0) | PULLUDEN)}, /* NAND_OE */
- {OFFSET(gpmc_wen), (MODE(0) | PULLUDEN)}, /* NAND_WEN */
- {OFFSET(gpmc_be0n_cle), (MODE(0) | PULLUDEN)}, /* NAND_BE_CLE */
- {-1},
-};
-
-static const struct module_pin_mux user_led_pin_mux[] = {
- {OFFSET(gpmc_csn1), MODE(7) | PULLUDEN}, /* USER LED1 */
- {OFFSET(gpmc_csn2), MODE(7) | PULLUDEN}, /* USER LED2 */
- {-1},
-};
-
-static const struct module_pin_mux user_btn_pin_mux[] = {
- {OFFSET(emu0), MODE(7) | RXACTIVE | PULLUP_EN},
- {OFFSET(emu1), MODE(7) | RXACTIVE | PULLUP_EN},
- {-1},
-};
-
-void pcm051_enable_mmc0_pin_mux(void)
-{
- configure_module_pin_mux(mmc0_pin_mux);
-}
-
-void pcm051_enable_nand_pin_mux(void)
-{
- configure_module_pin_mux(nand_pin_mux);
-}
-
-void pcm051_enable_user_led_pin_mux(void)
-{
- configure_module_pin_mux(user_led_pin_mux);
-}
-
-void pcm051_enable_user_btn_pin_mux(void)
-{
- configure_module_pin_mux(user_btn_pin_mux);
-}
diff --git a/arch/arm/boards/pcm051/mux.h b/arch/arm/boards/pcm051/mux.h
deleted file mode 100644
index 5cdbe0ca52..0000000000
--- a/arch/arm/boards/pcm051/mux.h
+++ /dev/null
@@ -1,4 +0,0 @@
-extern void pcm051_enable_mmc0_pin_mux(void);
-extern void pcm051_enable_nand_pin_mux(void);
-extern void pcm051_enable_user_led_pin_mux(void);
-extern void pcm051_enable_user_btn_pin_mux(void);
diff --git a/arch/arm/boards/phytec-pfla02/lowlevel.c b/arch/arm/boards/phytec-pfla02/lowlevel.c
index 6596e924f8..6422bc4dcb 100644
--- a/arch/arm/boards/phytec-pfla02/lowlevel.c
+++ b/arch/arm/boards/phytec-pfla02/lowlevel.c
@@ -55,12 +55,10 @@ static inline void setup_uart(void)
extern char __dtb_imx6q_phytec_pbab01_start[];
-ENTRY_FUNCTION(start_phytec_pbab01_1gib)(void)
+ENTRY_FUNCTION(start_phytec_pbab01_1gib, r0, r1, r2)
{
uint32_t fdt;
- __barebox_arm_head();
-
arm_cpu_lowlevel_init();
arm_setup_stack(0x00920000 - 8);
@@ -73,12 +71,10 @@ ENTRY_FUNCTION(start_phytec_pbab01_1gib)(void)
barebox_arm_entry(0x10000000, SZ_1G, fdt);
}
-ENTRY_FUNCTION(start_phytec_pbab01_2gib)(void)
+ENTRY_FUNCTION(start_phytec_pbab01_2gib, r0, r1, r2)
{
uint32_t fdt;
- __barebox_arm_head();
-
arm_cpu_lowlevel_init();
arm_setup_stack(0x00920000 - 8);
diff --git a/arch/arm/boards/solidrun-carrier-1/lowlevel.c b/arch/arm/boards/solidrun-carrier-1/lowlevel.c
index 21bc7870a5..aa94716496 100644
--- a/arch/arm/boards/solidrun-carrier-1/lowlevel.c
+++ b/arch/arm/boards/solidrun-carrier-1/lowlevel.c
@@ -5,7 +5,7 @@
extern char __dtb_imx6dl_cubox_i_carrier_1_start[];
-ENTRY_FUNCTION(start_imx6dl_cubox_i_carrier_1)(void)
+ENTRY_FUNCTION(start_imx6dl_cubox_i_carrier_1, r0, r1, r2)
{
uint32_t fdt;
diff --git a/arch/arm/boards/solidrun-cubox/lowlevel.c b/arch/arm/boards/solidrun-cubox/lowlevel.c
index fdf5a7e1c8..1fcecb5b7c 100644
--- a/arch/arm/boards/solidrun-cubox/lowlevel.c
+++ b/arch/arm/boards/solidrun-cubox/lowlevel.c
@@ -23,12 +23,10 @@
extern char __dtb_dove_cubox_start[];
-ENTRY_FUNCTION(start_solidrun_cubox)(void)
+ENTRY_FUNCTION(start_solidrun_cubox, r0, r1, r2)
{
uint32_t fdt;
- __barebox_arm_head();
-
arm_cpu_lowlevel_init();
fdt = (uint32_t)__dtb_dove_cubox_start - get_runtime_offset();
diff --git a/arch/arm/boards/terasic-sockit/lowlevel.c b/arch/arm/boards/terasic-sockit/lowlevel.c
index 8a1e0ce430..0a4a923031 100644
--- a/arch/arm/boards/terasic-sockit/lowlevel.c
+++ b/arch/arm/boards/terasic-sockit/lowlevel.c
@@ -45,12 +45,10 @@ static inline void ledoff(int led)
extern char __dtb_socfpga_cyclone5_sockit_start[];
-ENTRY_FUNCTION(start_socfpga_sockit)(void)
+ENTRY_FUNCTION(start_socfpga_sockit, r0, r1, r2)
{
uint32_t fdt;
- __barebox_arm_head();
-
arm_cpu_lowlevel_init();
fdt = (uint32_t)__dtb_socfpga_cyclone5_sockit_start - get_runtime_offset();
@@ -87,10 +85,8 @@ static noinline void sockit_entry(void)
barebox_arm_entry(0x0, SZ_1G, 0);
}
-ENTRY_FUNCTION(start_socfpga_sockit_xload)(void)
+ENTRY_FUNCTION(start_socfpga_sockit_xload, r0, r1, r2)
{
- __barebox_arm_head();
-
arm_cpu_lowlevel_init();
arm_setup_stack(0xffff0000 + SZ_64K - SZ_4K - 16);
diff --git a/arch/arm/boards/toradex-colibri-t20-iris/entry.c b/arch/arm/boards/toradex-colibri-t20-iris/entry.c
index 30a13e065e..886613f13d 100644
--- a/arch/arm/boards/toradex-colibri-t20-iris/entry.c
+++ b/arch/arm/boards/toradex-colibri-t20-iris/entry.c
@@ -22,12 +22,10 @@
extern char __dtb_tegra20_colibri_iris_start[];
-ENTRY_FUNCTION(start_toradex_colibri_t20_iris)(void)
+ENTRY_FUNCTION(start_toradex_colibri_t20_iris, r0, r1, r2)
{
uint32_t fdt;
- __barebox_arm_head();
-
tegra_cpu_lowlevel_setup();
fdt = (uint32_t)__dtb_tegra20_colibri_iris_start - get_runtime_offset();
diff --git a/arch/arm/boards/toshiba-ac100/entry.c b/arch/arm/boards/toshiba-ac100/entry.c
index 372d5969c7..45fa56aa75 100644
--- a/arch/arm/boards/toshiba-ac100/entry.c
+++ b/arch/arm/boards/toshiba-ac100/entry.c
@@ -22,12 +22,10 @@
extern char __dtb_tegra20_paz00_start[];
-ENTRY_FUNCTION(start_toshiba_ac100)(void)
+ENTRY_FUNCTION(start_toshiba_ac100, r0, r1, r2)
{
uint32_t fdt;
- __barebox_arm_head();
-
tegra_cpu_lowlevel_setup();
fdt = (uint32_t)__dtb_tegra20_paz00_start - get_runtime_offset();
diff --git a/arch/arm/boards/tqma6x/lowlevel.c b/arch/arm/boards/tqma6x/lowlevel.c
index 8a16abba3a..a09a2f5671 100644
--- a/arch/arm/boards/tqma6x/lowlevel.c
+++ b/arch/arm/boards/tqma6x/lowlevel.c
@@ -41,12 +41,10 @@ static inline void setup_uart(void)
extern char __dtb_imx6q_mba6x_start[];
extern char __dtb_imx6dl_mba6x_start[];
-ENTRY_FUNCTION(start_imx6q_mba6x)(void)
+ENTRY_FUNCTION(start_imx6q_mba6x, r0, r1, r2)
{
uint32_t fdt;
- __barebox_arm_head();
-
arm_cpu_lowlevel_init();
arm_setup_stack(0x00920000 - 8);
@@ -64,12 +62,10 @@ ENTRY_FUNCTION(start_imx6q_mba6x)(void)
barebox_arm_entry(0x10000000, SZ_1G, fdt);
}
-ENTRY_FUNCTION(start_imx6dl_mba6x)(void)
+ENTRY_FUNCTION(start_imx6dl_mba6x, r0, r1, r2)
{
uint32_t fdt;
- __barebox_arm_head();
-
arm_cpu_lowlevel_init();
arm_setup_stack(0x00920000 - 8);
diff --git a/arch/arm/configs/am335x_beaglebone_defconfig b/arch/arm/configs/am335x_beaglebone_defconfig
index 4bcee241fe..857b89cdf2 100644
--- a/arch/arm/configs/am335x_beaglebone_defconfig
+++ b/arch/arm/configs/am335x_beaglebone_defconfig
@@ -1,5 +1,6 @@
CONFIG_ARCH_OMAP=y
-CONFIG_ARCH_AM33XX=y
+CONFIG_OMAP_MULTI_BOARDS=y
+CONFIG_MACH_BEAGLEBONE=y
CONFIG_THUMB2_BAREBOX=y
CONFIG_CMD_ARM_MMUINFO=y
CONFIG_ARM_OPTIMZED_STRING_FUNCTIONS=y
@@ -16,6 +17,7 @@ CONFIG_CMDLINE_EDITING=y
CONFIG_AUTO_COMPLETE=y
CONFIG_MENU=y
# CONFIG_TIMESTAMP is not set
+CONFIG_CONSOLE_ACTIVATE_NONE=y
CONFIG_DEFAULT_ENVIRONMENT_GENERIC_NEW=y
CONFIG_DEFAULT_ENVIRONMENT_PATH="arch/arm/boards/beaglebone/env"
CONFIG_CMD_EDIT=y
@@ -63,6 +65,8 @@ CONFIG_NET_DHCP=y
CONFIG_NET_PING=y
CONFIG_NET_NETCONSOLE=y
CONFIG_NET_RESOLV=y
+CONFIG_OFDEVICE=y
+CONFIG_OF_BAREBOX_DRIVERS=y
CONFIG_DRIVER_SERIAL_NS16550=y
CONFIG_DRIVER_SERIAL_NS16550_OMAP_EXTENSIONS=y
CONFIG_DRIVER_NET_CPSW=y
@@ -71,6 +75,8 @@ CONFIG_I2C=y
CONFIG_I2C_OMAP=y
CONFIG_MCI=y
CONFIG_MCI_OMAP_HSMMC=y
+CONFIG_PINCTRL=y
+CONFIG_PINCTRL_SINGLE=y
CONFIG_FS_TFTP=y
CONFIG_FS_NFS=y
CONFIG_FS_FAT=y
diff --git a/arch/arm/configs/am335x_beaglebone_mlo_large_defconfig b/arch/arm/configs/am335x_beaglebone_mlo_large_defconfig
deleted file mode 100644
index d90f5818f2..0000000000
--- a/arch/arm/configs/am335x_beaglebone_mlo_large_defconfig
+++ /dev/null
@@ -1,55 +0,0 @@
-CONFIG_ARCH_OMAP=y
-CONFIG_ARCH_AM33XX=y
-# CONFIG_OMAP_GPMC is not set
-CONFIG_OMAP_BUILD_IFT=y
-CONFIG_THUMB2_BAREBOX=y
-# CONFIG_CMD_ARM_CPUINFO is not set
-CONFIG_MMU=y
-CONFIG_TEXT_BASE=0x402F0400
-CONFIG_MEMORY_LAYOUT_FIXED=y
-CONFIG_STACK_BASE=0x4030B800
-CONFIG_STACK_SIZE=0x1600
-CONFIG_MALLOC_BASE=0x8F000000
-CONFIG_MALLOC_SIZE=0x1000000
-CONFIG_PROMPT="barebox> "
-CONFIG_HUSH_FANCY_PROMPT=y
-CONFIG_CMDLINE_EDITING=y
-CONFIG_AUTO_COMPLETE=y
-# CONFIG_TIMESTAMP is not set
-CONFIG_DEFAULT_ENVIRONMENT_GENERIC_NEW=y
-CONFIG_DEFAULT_ENVIRONMENT_PATH="arch/arm/boards/beaglebone/env"
-CONFIG_BAREBOXENV_TARGET=y
-CONFIG_CMD_EDIT=y
-CONFIG_CMD_SLEEP=y
-CONFIG_CMD_EXPORT=y
-CONFIG_CMD_PRINTENV=y
-CONFIG_CMD_READLINE=y
-# CONFIG_CMD_UMOUNT is not set
-# CONFIG_CMD_CLEAR is not set
-CONFIG_CMD_ECHO_E=y
-CONFIG_CMD_IOMEM=y
-CONFIG_CMD_CRC=y
-CONFIG_CMD_CRC_CMP=y
-CONFIG_CMD_BOOTM_SHOW_TYPE=y
-CONFIG_CMD_BOOTM_VERBOSE=y
-CONFIG_CMD_BOOTM_INITRD=y
-CONFIG_CMD_BOOTM_OFTREE=y
-CONFIG_CMD_BOOTM_OFTREE_UIMAGE=y
-# CONFIG_CMD_BOOTU is not set
-CONFIG_CMD_RESET=y
-CONFIG_CMD_GO=y
-CONFIG_CMD_OFTREE=y
-CONFIG_CMD_TIMEOUT=y
-# CONFIG_CMD_VERSION is not set
-CONFIG_CMD_MAGICVAR=y
-CONFIG_CMD_MAGICVAR_HELP=y
-CONFIG_DRIVER_SERIAL_NS16550=y
-CONFIG_DRIVER_SERIAL_NS16550_OMAP_EXTENSIONS=y
-# CONFIG_SPI is not set
-CONFIG_MCI=y
-CONFIG_MCI_STARTUP=y
-# CONFIG_MCI_INFO is not set
-# CONFIG_MCI_WRITE is not set
-CONFIG_MCI_OMAP_HSMMC=y
-CONFIG_FS_FAT=y
-CONFIG_FS_FAT_LFN=y
diff --git a/arch/arm/configs/am335x_beaglebone_mlo_small_defconfig b/arch/arm/configs/am335x_beaglebone_mlo_small_defconfig
deleted file mode 100644
index ea29c24594..0000000000
--- a/arch/arm/configs/am335x_beaglebone_mlo_small_defconfig
+++ /dev/null
@@ -1,29 +0,0 @@
-CONFIG_ARCH_OMAP=y
-CONFIG_ARCH_AM33XX=y
-# CONFIG_OMAP_GPMC is not set
-CONFIG_OMAP_BUILD_IFT=y
-CONFIG_THUMB2_BAREBOX=y
-# CONFIG_CMD_ARM_CPUINFO is not set
-# CONFIG_BANNER is not set
-# CONFIG_MEMINFO is not set
-CONFIG_ENVIRONMENT_VARIABLES=y
-CONFIG_MMU=y
-CONFIG_TEXT_BASE=0x402F0400
-CONFIG_STACK_SIZE=0x1600
-CONFIG_MALLOC_SIZE=0x1000000
-CONFIG_MALLOC_TLSF=y
-CONFIG_PROMPT="MLO>"
-CONFIG_SHELL_NONE=y
-# CONFIG_ERRNO_MESSAGES is not set
-# CONFIG_TIMESTAMP is not set
-# CONFIG_DEFAULT_ENVIRONMENT is not set
-CONFIG_DRIVER_SERIAL_NS16550=y
-CONFIG_DRIVER_SERIAL_NS16550_OMAP_EXTENSIONS=y
-# CONFIG_SPI is not set
-CONFIG_MCI=y
-# CONFIG_MCI_WRITE is not set
-CONFIG_MCI_OMAP_HSMMC=y
-# CONFIG_FS_RAMFS is not set
-# CONFIG_FS_DEVFS is not set
-CONFIG_FS_FAT=y
-CONFIG_FS_FAT_LFN=y
diff --git a/arch/arm/configs/pcm051_mlo_defconfig b/arch/arm/configs/am335x_mlo_defconfig
index ea65979ba3..19f78d0ae8 100644
--- a/arch/arm/configs/pcm051_mlo_defconfig
+++ b/arch/arm/configs/am335x_mlo_defconfig
@@ -1,32 +1,43 @@
CONFIG_ARCH_OMAP=y
-CONFIG_ARCH_AM33XX=y
CONFIG_OMAP_BUILD_IFT=y
+CONFIG_OMAP_MULTI_BOARDS=y
+CONFIG_MACH_BEAGLEBONE=y
CONFIG_MACH_PCM051=y
-CONFIG_OMAP_UART1=y
CONFIG_THUMB2_BAREBOX=y
# CONFIG_CMD_ARM_CPUINFO is not set
# CONFIG_MEMINFO is not set
-CONFIG_ENVIRONMENT_VARIABLES=y
CONFIG_MMU=y
-CONFIG_TEXT_BASE=0x402F0400
-CONFIG_STACK_SIZE=0x1600
-CONFIG_MALLOC_SIZE=0x1000000
+CONFIG_TEXT_BASE=0x0
+CONFIG_MALLOC_SIZE=0x0
+CONFIG_MALLOC_TLSF=y
+CONFIG_RELOCATABLE=y
CONFIG_PROMPT="MLO>"
CONFIG_SHELL_NONE=y
# CONFIG_ERRNO_MESSAGES is not set
# CONFIG_TIMESTAMP is not set
-CONFIG_CONSOLE_SIMPLE=y
+CONFIG_CONSOLE_ACTIVATE_NONE=y
# CONFIG_DEFAULT_ENVIRONMENT is not set
+CONFIG_OFDEVICE=y
CONFIG_DRIVER_SERIAL_NS16550=y
CONFIG_DRIVER_SERIAL_NS16550_OMAP_EXTENSIONS=y
CONFIG_DRIVER_SPI_OMAP3=y
CONFIG_MTD=y
+# CONFIG_MTD_WRITE is not set
+# CONFIG_MTD_OOB_DEVICE is not set
CONFIG_MTD_M25P80=y
CONFIG_NAND=y
+# CONFIG_NAND_ECC_SOFT is not set
+# CONFIG_NAND_ECC_HW_SYNDROME is not set
+# CONFIG_NAND_ECC_HW_NONE is not set
+# CONFIG_NAND_INFO is not set
+# CONFIG_NAND_BBT is not set
CONFIG_NAND_OMAP_GPMC=y
CONFIG_MCI=y
-CONFIG_MCI_STARTUP=y
+# CONFIG_MCI_WRITE is not set
CONFIG_MCI_OMAP_HSMMC=y
+CONFIG_PINCTRL=y
+CONFIG_PINCTRL_SINGLE=y
+CONFIG_BUS_OMAP_GPMC=y
# CONFIG_FS_RAMFS is not set
# CONFIG_FS_DEVFS is not set
CONFIG_FS_FAT=y
diff --git a/arch/arm/configs/pcm051_defconfig b/arch/arm/configs/pcm051_defconfig
index 97e0940697..d7e510bfe8 100644
--- a/arch/arm/configs/pcm051_defconfig
+++ b/arch/arm/configs/pcm051_defconfig
@@ -1,16 +1,18 @@
CONFIG_ARCH_OMAP=y
-CONFIG_ARCH_AM33XX=y
CONFIG_BAREBOX_UPDATE_AM33XX_SPI_NOR_MLO=y
+CONFIG_OMAP_MULTI_BOARDS=y
CONFIG_MACH_PCM051=y
-CONFIG_OMAP_UART1=y
-CONFIG_AEABI=y
+CONFIG_THUMB2_BAREBOX=y
CONFIG_ARM_BOARD_APPEND_ATAG=y
CONFIG_CMD_ARM_MMUINFO=y
CONFIG_ARM_OPTIMZED_STRING_FUNCTIONS=y
CONFIG_ARM_UNWIND=y
CONFIG_MMU=y
-CONFIG_TEXT_BASE=0x8f000000
-CONFIG_MALLOC_SIZE=0x2000000
+CONFIG_TEXT_BASE=0x0
+CONFIG_MALLOC_SIZE=0x0
+CONFIG_MALLOC_TLSF=y
+CONFIG_KALLSYMS=y
+CONFIG_RELOCATABLE=y
CONFIG_PROMPT="barebox@pcm051>"
CONFIG_LONGHELP=y
CONFIG_HUSH_FANCY_PROMPT=y
@@ -18,12 +20,10 @@ CONFIG_CMDLINE_EDITING=y
CONFIG_AUTO_COMPLETE=y
CONFIG_MENU=y
# CONFIG_TIMESTAMP is not set
+CONFIG_BLSPEC=y
CONFIG_DEFAULT_ENVIRONMENT_GENERIC_NEW=y
CONFIG_DEFAULT_ENVIRONMENT_PATH="arch/arm/boards/pcm051/env"
CONFIG_DEBUG_INFO=y
-CONFIG_ENABLE_FLASH_NOISE=y
-CONFIG_ENABLE_PARTITION_NOISE=y
-CONFIG_ENABLE_DEVICE_NOISE=y
CONFIG_CMD_EDIT=y
CONFIG_CMD_SLEEP=y
CONFIG_CMD_SAVEENV=y
@@ -36,6 +36,8 @@ CONFIG_CMD_TIME=y
CONFIG_CMD_TFTP=y
CONFIG_CMD_ECHO_E=y
CONFIG_CMD_LOADB=y
+CONFIG_CMD_MEMINFO=y
+CONFIG_CMD_IOMEM=y
CONFIG_CMD_CRC=y
CONFIG_CMD_CRC_CMP=y
CONFIG_CMD_MD5SUM=y
@@ -44,6 +46,7 @@ CONFIG_CMD_UBIFORMAT=y
CONFIG_CMD_BOOTM_SHOW_TYPE=y
CONFIG_CMD_UIMAGE=y
CONFIG_CMD_BOOTZ=y
+# CONFIG_CMD_BOOTU is not set
CONFIG_CMD_RESET=y
CONFIG_CMD_GO=y
CONFIG_CMD_BAREBOX_UPDATE=y
@@ -53,10 +56,16 @@ CONFIG_CMD_GPIO=y
CONFIG_CMD_UNCOMPRESS=y
CONFIG_CMD_I2C=y
CONFIG_CMD_SPI=y
+CONFIG_CMD_LED=y
+CONFIG_CMD_LED_TRIGGER=y
+CONFIG_CMD_MIITOOL=y
+CONFIG_CMD_DETECT=y
CONFIG_NET=y
CONFIG_NET_DHCP=y
CONFIG_NET_NFS=y
CONFIG_NET_PING=y
+CONFIG_OFDEVICE=y
+CONFIG_OF_BAREBOX_DRIVERS=y
CONFIG_DRIVER_SERIAL_NS16550=y
CONFIG_DRIVER_SERIAL_NS16550_OMAP_EXTENSIONS=y
CONFIG_DRIVER_NET_CPSW=y
@@ -67,13 +76,20 @@ CONFIG_MTD=y
CONFIG_MTD_M25P80=y
CONFIG_NAND=y
CONFIG_NAND_OMAP_GPMC=y
-CONFIG_UBI=y
+CONFIG_MTD_UBI=y
CONFIG_USB=y
CONFIG_MCI=y
CONFIG_MCI_STARTUP=y
CONFIG_MCI_OMAP_HSMMC=y
+CONFIG_LED=y
+CONFIG_LED_GPIO=y
+CONFIG_LED_GPIO_OF=y
+CONFIG_LED_TRIGGERS=y
CONFIG_EEPROM_AT24=y
CONFIG_GPIO_GENERIC_PLATFORM=y
+CONFIG_PINCTRL=y
+CONFIG_PINCTRL_SINGLE=y
+CONFIG_BUS_OMAP_GPMC=y
CONFIG_FS_TFTP=y
CONFIG_FS_NFS=y
CONFIG_FS_FAT=y
diff --git a/arch/arm/cpu/Makefile b/arch/arm/cpu/Makefile
index aba201bb9d..c29d03021f 100644
--- a/arch/arm/cpu/Makefile
+++ b/arch/arm/cpu/Makefile
@@ -23,7 +23,7 @@ obj-$(CONFIG_CACHE_L2X0) += cache-l2x0.o
pbl-y += setupc.o
pbl-$(CONFIG_PBL_SINGLE_IMAGE) += start-pbl.o
-pbl-$(CONFIG_PBL_MULTI_IMAGES) += start-images.o uncompress.o
+pbl-$(CONFIG_PBL_MULTI_IMAGES) += uncompress.o
obj-y += common.o cache.o
pbl-y += common.o cache.o
diff --git a/arch/arm/cpu/start-images.c b/arch/arm/cpu/start-images.c
deleted file mode 100644
index d48d245294..0000000000
--- a/arch/arm/cpu/start-images.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * start-pbl.c
- *
- * Copyright (c) 2010-2012 Sascha Hauer <s.hauer@pengutronix.de>, Pengutronix
- * Copyright (c) 2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2
- * as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#include <common.h>
-#include <init.h>
-#include <sizes.h>
-#include <pbl.h>
-#include <asm/barebox-arm.h>
-#include <asm/barebox-arm-head.h>
-#include <asm-generic/memory_layout.h>
-#include <asm/sections.h>
-#include <asm/pgtable.h>
-#include <debug_ll.h>
-
-void __naked __noreturn barebox_arm_entry(uint32_t membase, uint32_t memsize,
- uint32_t boarddata)
-{
- unsigned long barebox_base;
- void __noreturn (*barebox)(uint32_t, uint32_t, uint32_t);
-
- barebox_base = ld_var(__image_end) - get_runtime_offset() + 4;
-
- if (IS_ENABLED(CONFIG_THUMB2_BAREBOX))
- barebox = (void *)(barebox_base + 1);
- else
- barebox = (void *)barebox_base;
-
- barebox(membase, memsize, boarddata);
-}
diff --git a/arch/arm/cpu/uncompress.c b/arch/arm/cpu/uncompress.c
index b0819c7369..6d3302a31c 100644
--- a/arch/arm/cpu/uncompress.c
+++ b/arch/arm/cpu/uncompress.c
@@ -43,7 +43,7 @@ static int __attribute__((__used__))
__attribute__((__section__(".image_end")))
__image_end_dummy = 0xdeadbeef;
-static void noinline uncompress(uint32_t membase,
+static void __noreturn noinline uncompress_start_payload(uint32_t membase,
uint32_t memsize, uint32_t boarddata)
{
uint32_t offset;
@@ -99,12 +99,13 @@ static void noinline uncompress(uint32_t membase,
}
/*
- * Generic second stage pbl uncompressor entry
+ * For the multi images startup process board code jumps here. We will uncompress
+ * the attached barebox image and start it.
*/
-ENTRY_FUNCTION(start_uncompress)(uint32_t membase, uint32_t memsize,
+void __naked __noreturn barebox_arm_entry(uint32_t membase, uint32_t memsize,
uint32_t boarddata)
{
arm_setup_stack(membase + memsize - 16);
- uncompress(membase, memsize, boarddata);
+ uncompress_start_payload(membase, memsize, boarddata);
}
diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile
index 3630c04008..bc314e9221 100644
--- a/arch/arm/dts/Makefile
+++ b/arch/arm/dts/Makefile
@@ -1,3 +1,7 @@
+dtb-$(CONFIG_ARCH_AM33XX) += \
+ am335x-bone.dtb \
+ am335x-boneblack.dtb \
+ am335x-phytec-phycore.dtb
dtb-$(CONFIG_ARCH_IMX51) += imx51-babbage.dtb \
imx51-genesi-efika-sb.dtb
dtb-$(CONFIG_ARCH_IMX53) += imx53-qsb.dtb \
@@ -22,11 +26,13 @@ dtb-$(CONFIG_ARCH_TEGRA) += \
BUILTIN_DTB := $(patsubst "%",%,$(CONFIG_BUILTIN_DTB_NAME))
obj-$(CONFIG_BUILTIN_DTB) += $(BUILTIN_DTB).dtb.o
+pbl-$(CONFIG_MACH_BEAGLEBONE) += am335x-bone.dtb.o am335x-boneblack.dtb.o
pbl-$(CONFIG_MACH_EFIKA_MX_SMARTBOOK) += imx51-genesi-efika-sb.dtb.o
pbl-$(CONFIG_MACH_FREESCALE_MX51_PDK) += imx51-babbage.dtb.o
pbl-$(CONFIG_MACH_FREESCALE_MX53_LOCO) += imx53-qsb.dtb.o
pbl-$(CONFIG_MACH_FREESCALE_MX53_VMX53) += imx53-voipac-bsb.dtb.o
pbl-$(CONFIG_MACH_DFI_FS700_M60) += imx6q-dfi-fs700-m60-6q.dtb.o imx6dl-dfi-fs700-m60-6s.dtb.o
+pbl-$(CONFIG_MACH_PCM051) += am335x-phytec-phycore.dtb.o
pbl-$(CONFIG_MACH_PHYTEC_PFLA02) += imx6q-phytec-pbab01.dtb.o
pbl-$(CONFIG_MACH_REALQ7) += imx6q-dmo-realq7.dtb.o
pbl-$(CONFIG_MACH_SOLIDRUN_CUBOX) += dove-cubox.dtb.o
diff --git a/arch/arm/dts/am335x-bone-common.dtsi b/arch/arm/dts/am335x-bone-common.dtsi
new file mode 100644
index 0000000000..00271c4991
--- /dev/null
+++ b/arch/arm/dts/am335x-bone-common.dtsi
@@ -0,0 +1,300 @@
+/*
+ * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+/ {
+ chosen {
+ linux,stdout-path = &uart0;
+ };
+
+ cpus {
+ cpu@0 {
+ cpu0-supply = <&dcdc2_reg>;
+ };
+ };
+
+ memory {
+ device_type = "memory";
+ reg = <0x80000000 0x10000000>; /* 256 MB */
+ };
+
+ leds {
+ pinctrl-names = "default";
+ pinctrl-0 = <&user_leds_s0>;
+
+ compatible = "gpio-leds";
+
+ led@2 {
+ label = "beaglebone:green:heartbeat";
+ gpios = <&gpio1 21 GPIO_ACTIVE_HIGH>;
+ linux,default-trigger = "heartbeat";
+ default-state = "off";
+ };
+
+ led@3 {
+ label = "beaglebone:green:mmc0";
+ gpios = <&gpio1 22 GPIO_ACTIVE_HIGH>;
+ linux,default-trigger = "mmc0";
+ default-state = "off";
+ };
+
+ led@4 {
+ label = "beaglebone:green:usr2";
+ gpios = <&gpio1 23 GPIO_ACTIVE_HIGH>;
+ linux,default-trigger = "cpu0";
+ default-state = "off";
+ };
+
+ led@5 {
+ label = "beaglebone:green:usr3";
+ gpios = <&gpio1 24 GPIO_ACTIVE_HIGH>;
+ linux,default-trigger = "mmc1";
+ default-state = "off";
+ };
+ };
+
+ vmmcsd_fixed: fixedregulator@0 {
+ compatible = "regulator-fixed";
+ regulator-name = "vmmcsd_fixed";
+ regulator-min-microvolt = <3300000>;
+ regulator-max-microvolt = <3300000>;
+ };
+};
+
+&am33xx_pinmux {
+ pinctrl-names = "default";
+ pinctrl-0 = <&clkout2_pin>;
+
+ user_leds_s0: user_leds_s0 {
+ pinctrl-single,pins = <
+ 0x54 (PIN_OUTPUT_PULLDOWN | MUX_MODE7) /* gpmc_a5.gpio1_21 */
+ 0x58 (PIN_OUTPUT_PULLUP | MUX_MODE7) /* gpmc_a6.gpio1_22 */
+ 0x5c (PIN_OUTPUT_PULLDOWN | MUX_MODE7) /* gpmc_a7.gpio1_23 */
+ 0x60 (PIN_OUTPUT_PULLUP | MUX_MODE7) /* gpmc_a8.gpio1_24 */
+ >;
+ };
+
+ i2c0_pins: pinmux_i2c0_pins {
+ pinctrl-single,pins = <
+ 0x188 (PIN_INPUT_PULLUP | MUX_MODE0) /* i2c0_sda.i2c0_sda */
+ 0x18c (PIN_INPUT_PULLUP | MUX_MODE0) /* i2c0_scl.i2c0_scl */
+ >;
+ };
+
+ uart0_pins: pinmux_uart0_pins {
+ pinctrl-single,pins = <
+ 0x170 (PIN_INPUT_PULLUP | MUX_MODE0) /* uart0_rxd.uart0_rxd */
+ 0x174 (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* uart0_txd.uart0_txd */
+ >;
+ };
+
+ clkout2_pin: pinmux_clkout2_pin {
+ pinctrl-single,pins = <
+ 0x1b4 (PIN_OUTPUT_PULLDOWN | MUX_MODE3) /* xdma_event_intr1.clkout2 */
+ >;
+ };
+
+ cpsw_default: cpsw_default {
+ pinctrl-single,pins = <
+ /* Slave 1 */
+ 0x110 (PIN_INPUT_PULLUP | MUX_MODE0) /* mii1_rxerr.mii1_rxerr */
+ 0x114 (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* mii1_txen.mii1_txen */
+ 0x118 (PIN_INPUT_PULLUP | MUX_MODE0) /* mii1_rxdv.mii1_rxdv */
+ 0x11c (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* mii1_txd3.mii1_txd3 */
+ 0x120 (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* mii1_txd2.mii1_txd2 */
+ 0x124 (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* mii1_txd1.mii1_txd1 */
+ 0x128 (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* mii1_txd0.mii1_txd0 */
+ 0x12c (PIN_INPUT_PULLUP | MUX_MODE0) /* mii1_txclk.mii1_txclk */
+ 0x130 (PIN_INPUT_PULLUP | MUX_MODE0) /* mii1_rxclk.mii1_rxclk */
+ 0x134 (PIN_INPUT_PULLUP | MUX_MODE0) /* mii1_rxd3.mii1_rxd3 */
+ 0x138 (PIN_INPUT_PULLUP | MUX_MODE0) /* mii1_rxd2.mii1_rxd2 */
+ 0x13c (PIN_INPUT_PULLUP | MUX_MODE0) /* mii1_rxd1.mii1_rxd1 */
+ 0x140 (PIN_INPUT_PULLUP | MUX_MODE0) /* mii1_rxd0.mii1_rxd0 */
+ >;
+ };
+
+ cpsw_sleep: cpsw_sleep {
+ pinctrl-single,pins = <
+ /* Slave 1 reset value */
+ 0x110 (PIN_INPUT_PULLDOWN | MUX_MODE7)
+ 0x114 (PIN_INPUT_PULLDOWN | MUX_MODE7)
+ 0x118 (PIN_INPUT_PULLDOWN | MUX_MODE7)
+ 0x11c (PIN_INPUT_PULLDOWN | MUX_MODE7)
+ 0x120 (PIN_INPUT_PULLDOWN | MUX_MODE7)
+ 0x124 (PIN_INPUT_PULLDOWN | MUX_MODE7)
+ 0x128 (PIN_INPUT_PULLDOWN | MUX_MODE7)
+ 0x12c (PIN_INPUT_PULLDOWN | MUX_MODE7)
+ 0x130 (PIN_INPUT_PULLDOWN | MUX_MODE7)
+ 0x134 (PIN_INPUT_PULLDOWN | MUX_MODE7)
+ 0x138 (PIN_INPUT_PULLDOWN | MUX_MODE7)
+ 0x13c (PIN_INPUT_PULLDOWN | MUX_MODE7)
+ 0x140 (PIN_INPUT_PULLDOWN | MUX_MODE7)
+ >;
+ };
+
+ davinci_mdio_default: davinci_mdio_default {
+ pinctrl-single,pins = <
+ /* MDIO */
+ 0x148 (PIN_INPUT_PULLUP | SLEWCTRL_FAST | MUX_MODE0) /* mdio_data.mdio_data */
+ 0x14c (PIN_OUTPUT_PULLUP | MUX_MODE0) /* mdio_clk.mdio_clk */
+ >;
+ };
+
+ davinci_mdio_sleep: davinci_mdio_sleep {
+ pinctrl-single,pins = <
+ /* MDIO reset value */
+ 0x148 (PIN_INPUT_PULLDOWN | MUX_MODE7)
+ 0x14c (PIN_INPUT_PULLDOWN | MUX_MODE7)
+ >;
+ };
+
+ mmc1_pins: pinmux_mmc1_pins {
+ pinctrl-single,pins = <
+ 0x160 (PIN_INPUT | MUX_MODE7) /* GPIO0_6 */
+ >;
+ };
+
+ emmc_pins: pinmux_emmc_pins {
+ pinctrl-single,pins = <
+ 0x80 (PIN_INPUT_PULLUP | MUX_MODE2) /* gpmc_csn1.mmc1_clk */
+ 0x84 (PIN_INPUT_PULLUP | MUX_MODE2) /* gpmc_csn2.mmc1_cmd */
+ 0x00 (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad0.mmc1_dat0 */
+ 0x04 (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad1.mmc1_dat1 */
+ 0x08 (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad2.mmc1_dat2 */
+ 0x0c (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad3.mmc1_dat3 */
+ 0x10 (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad4.mmc1_dat4 */
+ 0x14 (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad5.mmc1_dat5 */
+ 0x18 (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad6.mmc1_dat6 */
+ 0x1c (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad7.mmc1_dat7 */
+ >;
+ };
+};
+
+&uart0 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&uart0_pins>;
+
+ status = "okay";
+};
+
+&usb {
+ status = "okay";
+
+ control@44e10000 {
+ status = "okay";
+ };
+
+ usb-phy@47401300 {
+ status = "okay";
+ };
+
+ usb-phy@47401b00 {
+ status = "okay";
+ };
+
+ usb@47401000 {
+ status = "okay";
+ };
+
+ usb@47401800 {
+ status = "okay";
+ dr_mode = "host";
+ };
+
+ dma-controller@07402000 {
+ status = "okay";
+ };
+};
+
+&i2c0 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&i2c0_pins>;
+
+ status = "okay";
+ clock-frequency = <400000>;
+
+ tps: tps@24 {
+ reg = <0x24>;
+ };
+
+};
+
+/include/ "tps65217.dtsi"
+
+&tps {
+ regulators {
+ dcdc1_reg: regulator@0 {
+ regulator-always-on;
+ };
+
+ dcdc2_reg: regulator@1 {
+ /* VDD_MPU voltage limits 0.95V - 1.26V with +/-4% tolerance */
+ regulator-name = "vdd_mpu";
+ regulator-min-microvolt = <925000>;
+ regulator-max-microvolt = <1325000>;
+ regulator-boot-on;
+ regulator-always-on;
+ };
+
+ dcdc3_reg: regulator@2 {
+ /* VDD_CORE voltage limits 0.95V - 1.1V with +/-4% tolerance */
+ regulator-name = "vdd_core";
+ regulator-min-microvolt = <925000>;
+ regulator-max-microvolt = <1150000>;
+ regulator-boot-on;
+ regulator-always-on;
+ };
+
+ ldo1_reg: regulator@3 {
+ regulator-always-on;
+ };
+
+ ldo2_reg: regulator@4 {
+ regulator-always-on;
+ };
+
+ ldo3_reg: regulator@5 {
+ regulator-always-on;
+ };
+
+ ldo4_reg: regulator@6 {
+ regulator-always-on;
+ };
+ };
+};
+
+&cpsw_emac0 {
+ phy_id = <&davinci_mdio>, <0>;
+ phy-mode = "mii";
+};
+
+&cpsw_emac1 {
+ phy_id = <&davinci_mdio>, <1>;
+ phy-mode = "mii";
+};
+
+&mac {
+ pinctrl-names = "default", "sleep";
+ pinctrl-0 = <&cpsw_default>;
+ pinctrl-1 = <&cpsw_sleep>;
+
+};
+
+&davinci_mdio {
+ pinctrl-names = "default", "sleep";
+ pinctrl-0 = <&davinci_mdio_default>;
+ pinctrl-1 = <&davinci_mdio_sleep>;
+};
+
+&mmc1 {
+ status = "okay";
+ bus-width = <0x4>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&mmc1_pins>;
+ cd-gpios = <&gpio0 6 GPIO_ACTIVE_HIGH>;
+ cd-inverted;
+};
diff --git a/arch/arm/dts/am335x-bone.dts b/arch/arm/dts/am335x-bone.dts
new file mode 100644
index 0000000000..a2e62a3b1c
--- /dev/null
+++ b/arch/arm/dts/am335x-bone.dts
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+/dts-v1/;
+
+#include "am33xx.dtsi"
+#include "am335x-bone-common.dtsi"
+
+/ {
+ model = "TI AM335x BeagleBone";
+ compatible = "ti,am335x-bone", "ti,am33xx";
+
+ memory {
+ device_type = "memory";
+ reg = <0x80000000 0x10000000>; /* 256 MB */
+ };
+};
+
+&ldo3_reg {
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <3300000>;
+ regulator-always-on;
+};
+
+&mmc1 {
+ vmmc-supply = <&ldo3_reg>;
+};
+
+&sham {
+ status = "okay";
+};
+
+&aes {
+ status = "okay";
+};
diff --git a/arch/arm/dts/am335x-boneblack.dts b/arch/arm/dts/am335x-boneblack.dts
new file mode 100644
index 0000000000..f79a6bc8a4
--- /dev/null
+++ b/arch/arm/dts/am335x-boneblack.dts
@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+/dts-v1/;
+
+#include "am33xx.dtsi"
+#include "am335x-bone-common.dtsi"
+
+/ {
+ model = "TI AM335x BeagleBone black";
+ compatible = "ti,am335x-bone-black", "ti,am335x-bone", "ti,am33xx";
+
+ memory {
+ device_type = "memory";
+ reg = <0x80000000 0x20000000>; /* 512 MB */
+ };
+};
+
+&ldo3_reg {
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ regulator-always-on;
+};
+
+&mmc1 {
+ vmmc-supply = <&vmmcsd_fixed>;
+};
+
+&mmc2 {
+ vmmc-supply = <&vmmcsd_fixed>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&emmc_pins>;
+ bus-width = <8>;
+ status = "okay";
+ ti,vcc-aux-disable-is-sleep;
+};
+
+&am33xx_pinmux {
+ nxp_hdmi_bonelt_pins: nxp_hdmi_bonelt_pins {
+ pinctrl-single,pins = <
+ 0x1b0 0x03 /* xdma_event_intr0, OMAP_MUX_MODE3 | AM33XX_PIN_OUTPUT */
+ 0xa0 0x08 /* lcd_data0.lcd_data0, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
+ 0xa4 0x08 /* lcd_data1.lcd_data1, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
+ 0xa8 0x08 /* lcd_data2.lcd_data2, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
+ 0xac 0x08 /* lcd_data3.lcd_data3, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
+ 0xb0 0x08 /* lcd_data4.lcd_data4, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
+ 0xb4 0x08 /* lcd_data5.lcd_data5, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
+ 0xb8 0x08 /* lcd_data6.lcd_data6, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
+ 0xbc 0x08 /* lcd_data7.lcd_data7, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
+ 0xc0 0x08 /* lcd_data8.lcd_data8, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
+ 0xc4 0x08 /* lcd_data9.lcd_data9, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
+ 0xc8 0x08 /* lcd_data10.lcd_data10, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
+ 0xcc 0x08 /* lcd_data11.lcd_data11, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
+ 0xd0 0x08 /* lcd_data12.lcd_data12, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
+ 0xd4 0x08 /* lcd_data13.lcd_data13, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
+ 0xd8 0x08 /* lcd_data14.lcd_data14, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
+ 0xdc 0x08 /* lcd_data15.lcd_data15, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
+ 0xe0 0x00 /* lcd_vsync.lcd_vsync, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT */
+ 0xe4 0x00 /* lcd_hsync.lcd_hsync, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT */
+ 0xe8 0x00 /* lcd_pclk.lcd_pclk, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT */
+ 0xec 0x00 /* lcd_ac_bias_en.lcd_ac_bias_en, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT */
+ >;
+ };
+ nxp_hdmi_bonelt_off_pins: nxp_hdmi_bonelt_off_pins {
+ pinctrl-single,pins = <
+ 0x1b0 0x03 /* xdma_event_intr0, OMAP_MUX_MODE3 | AM33XX_PIN_OUTPUT */
+ >;
+ };
+};
+
+&lcdc {
+ status = "okay";
+};
+
+/ {
+ hdmi {
+ compatible = "ti,tilcdc,slave";
+ i2c = <&i2c0>;
+ pinctrl-names = "default", "off";
+ pinctrl-0 = <&nxp_hdmi_bonelt_pins>;
+ pinctrl-1 = <&nxp_hdmi_bonelt_off_pins>;
+ status = "okay";
+ };
+};
diff --git a/arch/arm/dts/am335x-phytec-phycore.dts b/arch/arm/dts/am335x-phytec-phycore.dts
new file mode 100644
index 0000000000..6196eb3244
--- /dev/null
+++ b/arch/arm/dts/am335x-phytec-phycore.dts
@@ -0,0 +1,320 @@
+/dts-v1/;
+
+#include "am33xx.dtsi"
+
+/ {
+ model = "Phytec phyCORE AM335x";
+ compatible = "phytec,phycore-am335x", "phytec,pcm051", "ti,am33xx";
+
+ chosen {
+ linux,stdout-path = &uart0;
+
+ environment-spi {
+ compatible = "barebox,environment";
+ device-path = &flash, "partname:bareboxenv";
+ status = "disabled";
+ };
+
+ environment-nand {
+ compatible = "barebox,environment";
+ device-path = &nand, "partname:bareboxenv";
+ status = "disabled";
+ };
+ };
+
+ memory {
+ device_type = "memory";
+ reg = <0x80000000 0x20000000>; /* 512 MB */
+ };
+
+ gpio-leds {
+ compatible = "gpio-leds";
+ pinctrl-names = "default";
+ pinctrl-0 = <&pcm051_led_pins>;
+
+ led-green {
+ label = "green";
+ gpios = <&gpio1 30 0>;
+ linux,default-trigger = "heartbeat";
+ };
+
+ led-amber {
+ label = "amber";
+ gpios = <&gpio1 31 1>;
+ };
+ };
+};
+
+&am33xx_pinmux {
+ i2c0_pins: pinmux_i2c0_pins {
+ pinctrl-single,pins = <
+ 0x188 (PIN_INPUT_PULLUP | MUX_MODE0) /* i2c0_sda.i2c0_sda */
+ 0x18c (PIN_INPUT_PULLUP | MUX_MODE0) /* i2c0_scl.i2c0_scl */
+ >;
+ };
+
+ spi0_pins: pinmux_spi0_pins {
+ pinctrl-single,pins = <
+ 0x150 (INPUT_EN | MUX_MODE0)
+ 0x154 (PULL_UP | INPUT_EN | MUX_MODE0)
+ 0x158 (INPUT_EN | MUX_MODE0)
+ 0x15c (PULL_UP | INPUT_EN | MUX_MODE0)
+ >;
+ };
+
+ uart0_pins: pinmux_uart0_pins {
+ pinctrl-single,pins = <
+ 0x170 (PIN_INPUT_PULLUP | MUX_MODE0) /* uart0_rxd.uart0_rxd */
+ 0x174 (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* uart0_txd.uart0_txd */
+ >;
+ };
+
+ mmc1_pins: pinmux_mmc1_pins {
+ pinctrl-single,pins = <
+ 0xf0 (MUX_MODE0 | INPUT_EN | PULL_UP) /* mmc0_dat3.mmc0_dat3 */
+ 0xf4 (MUX_MODE0 | INPUT_EN | PULL_UP) /* mmc0_dat2.mmc0_dat2 */
+ 0xf8 (MUX_MODE0 | INPUT_EN | PULL_UP) /* mmc0_dat1.mmc0_dat1 */
+ 0xfc (MUX_MODE0 | INPUT_EN | PULL_UP) /* mmc0_dat0.mmc0_dat0 */
+ 0x100 (MUX_MODE0 | INPUT_EN | PULL_UP) /* mmc0_clk.mmc0_clk */
+ 0x104 (MUX_MODE0 | INPUT_EN | PULL_UP) /* mmc0_cmd.mmc0_cmd */
+ 0x160 (MUX_MODE7 | INPUT_EN | PULL_UP) /* spi0_cs1.??, card detect */
+ >;
+ };
+
+ emac_rmii1_pins: pinmux_emac_rmii1_pins {
+ pinctrl-single,pins = <
+ 0x10c (PIN_INPUT_PULLDOWN | MUX_MODE1) /* mii1_crs.rmii1_crs_dv */
+ 0x110 (PIN_INPUT_PULLDOWN | MUX_MODE1) /* mii1_rxerr.rmii1_rxerr */
+ 0x114 (PIN_OUTPUT | MUX_MODE1) /* mii1_txen.rmii1_txen */
+ 0x124 (PIN_OUTPUT | MUX_MODE1) /* mii1_txd1.rmii1_txd1 */
+ 0x128 (PIN_OUTPUT | MUX_MODE1) /* mii1_txd0.rmii1_txd0 */
+ 0x13c (PIN_INPUT_PULLDOWN | MUX_MODE1) /* mii1_rxd1.rmii1_rxd1 */
+ 0x140 (PIN_INPUT_PULLDOWN | MUX_MODE1) /* mii1_rxd0.rmii1_rxd0 */
+ 0x144 (PIN_INPUT_PULLDOWN | MUX_MODE0) /* rmii1_refclk.rmii1_refclk */
+
+ /* Slave 2 */
+ 0x40 (PIN_OUTPUT_PULLDOWN | MUX_MODE2) /* gpmc_a0.rgmii2_tctl */
+ 0x44 (PIN_INPUT_PULLDOWN | MUX_MODE2) /* gpmc_a1.rgmii2_rctl */
+ 0x48 (PIN_OUTPUT_PULLDOWN | MUX_MODE2) /* gpmc_a2.rgmii2_td3 */
+ 0x4c (PIN_OUTPUT_PULLDOWN | MUX_MODE2) /* gpmc_a3.rgmii2_td2 */
+ 0x50 (PIN_OUTPUT_PULLDOWN | MUX_MODE2) /* gpmc_a4.rgmii2_td1 */
+ 0x54 (PIN_OUTPUT_PULLDOWN | MUX_MODE2) /* gpmc_a5.rgmii2_td0 */
+ 0x58 (PIN_OUTPUT_PULLDOWN | MUX_MODE2) /* gpmc_a6.rgmii2_tclk */
+ 0x5c (PIN_INPUT_PULLDOWN | MUX_MODE2) /* gpmc_a7.rgmii2_rclk */
+ 0x60 (PIN_INPUT_PULLDOWN | MUX_MODE2) /* gpmc_a8.rgmii2_rd3 */
+ 0x64 (PIN_INPUT_PULLDOWN | MUX_MODE2) /* gpmc_a9.rgmii2_rd2 */
+ 0x68 (PIN_INPUT_PULLDOWN | MUX_MODE2) /* gpmc_a10.rgmii2_rd1 */
+ 0x6c (PIN_INPUT_PULLDOWN | MUX_MODE2) /* gpmc_a11.rgmii2_rd0 */
+ >;
+ };
+
+ nandflash_pins_s0: nandflash_pins_s0 {
+ pinctrl-single,pins = <
+ 0x0 (PIN_INPUT_PULLUP | MUX_MODE0) /* gpmc_ad0.gpmc_ad0 */
+ 0x4 (PIN_INPUT_PULLUP | MUX_MODE0) /* gpmc_ad1.gpmc_ad1 */
+ 0x8 (PIN_INPUT_PULLUP | MUX_MODE0) /* gpmc_ad2.gpmc_ad2 */
+ 0xc (PIN_INPUT_PULLUP | MUX_MODE0) /* gpmc_ad3.gpmc_ad3 */
+ 0x10 (PIN_INPUT_PULLUP | MUX_MODE0) /* gpmc_ad4.gpmc_ad4 */
+ 0x14 (PIN_INPUT_PULLUP | MUX_MODE0) /* gpmc_ad5.gpmc_ad5 */
+ 0x18 (PIN_INPUT_PULLUP | MUX_MODE0) /* gpmc_ad6.gpmc_ad6 */
+ 0x1c (PIN_INPUT_PULLUP | MUX_MODE0) /* gpmc_ad7.gpmc_ad7 */
+ 0x70 (PIN_INPUT_PULLUP | MUX_MODE0) /* gpmc_wait0.gpmc_wait0 */
+ 0x74 (PIN_INPUT_PULLUP | MUX_MODE7) /* gpmc_wpn.gpio0_30 */
+ 0x7c (PIN_OUTPUT | MUX_MODE0) /* gpmc_csn0.gpmc_csn0 */
+ 0x90 (PIN_OUTPUT | MUX_MODE0) /* gpmc_advn_ale.gpmc_advn_ale */
+ 0x94 (PIN_OUTPUT | MUX_MODE0) /* gpmc_oen_ren.gpmc_oen_ren */
+ 0x98 (PIN_OUTPUT | MUX_MODE0) /* gpmc_wen.gpmc_wen */
+ 0x9c (PIN_OUTPUT | MUX_MODE0) /* gpmc_be0n_cle.gpmc_be0n_cle */
+ >;
+ };
+
+ davinci_mdio_default: davinci_mdio_default {
+ pinctrl-single,pins = <
+ /* MDIO */
+ 0x148 (PIN_INPUT_PULLUP | SLEWCTRL_FAST | MUX_MODE0) /* mdio_data.mdio_data */
+ 0x14c (PIN_OUTPUT_PULLUP | MUX_MODE0) /* mdio_clk.mdio_clk */
+ >;
+ };
+
+ pcm051_led_pins: pinmux_pcm051_led_pins {
+ pinctrl-single,pins = <
+ 0x80 (MUX_MODE7)
+ 0x84 (MUX_MODE7)
+ >;
+ };
+
+ pcm051_user_pins: pinmux_pcm051_user_pins {
+ pinctrl-single,pins = <
+ 0x1e4 (PULL_UP |INPUT_EN |MUX_MODE7)
+ 0x1e8 (PULL_UP |INPUT_EN |MUX_MODE7)
+ >;
+ };
+};
+
+&i2c0 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&i2c0_pins>;
+
+ status = "okay";
+ clock-frequency = <400000>;
+
+ eeprom: 24c32@52 {
+ compatible = "atmel,24c32";
+ pagesize = <32>;
+ reg = <0x52>;
+ };
+};
+
+&mmc1 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&mmc1_pins>;
+ status = "okay";
+};
+
+&spi0 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&spi0_pins>;
+ status = "okay";
+
+ flash: m25p80 {
+ compatible = "sst,sst25vf032b", "m25p80";
+ spi-max-frequency = <15000000>;
+ reg = <1>;
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ partition@0 {
+ label = "xload";
+ reg = <0x0 0x20000>;
+ };
+
+ partition@1 {
+ label = "barebox";
+ reg = <0x20000 0x80000>;
+ };
+
+ partition@2 {
+ label = "bareboxenv";
+ reg = <0xa0000 0x20000>;
+ };
+
+ partition@3 {
+ label = "kernel";
+ reg = <0xc0000 0x400000>;
+ };
+ };
+};
+
+&uart0 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&uart0_pins>;
+ status = "okay";
+};
+
+&davinci_mdio {
+ pinctrl-names = "default";
+ pinctrl-0 = <&davinci_mdio_default>;
+};
+
+&phy_sel {
+ rmii-clock-ext;
+};
+
+&cpsw_emac0 {
+ phy_id = <&davinci_mdio>, <0>;
+ phy-mode = "rmii";
+ dual_emac_res_vlan = <1>;
+};
+
+&cpsw_emac1 {
+ phy_id = <&davinci_mdio>, <2>;
+ phy-mode = "rgmii";
+ dual_emac_res_vlan = <2>;
+};
+
+&mac {
+ pinctrl-names = "default";
+ pinctrl-0 = <&emac_rmii1_pins>;
+ dual_emac = <1>;
+};
+
+&gpmc {
+ status = "okay";
+ pinctrl-names = "default";
+ pinctrl-0 = <&nandflash_pins_s0>;
+ ranges = <0 0 0x08000000 0x10000000>; /* CS0: NAND */
+ nand: nand@0,0 {
+ reg = <0 0 0>; /* CS0, offset 0 */
+ nand-bus-width = <8>;
+ ti,nand-ecc-opt = "bch8";
+ gpmc,device-nand = "true";
+ gpmc,device-width = <1>;
+ gpmc,sync-clk-ps = <0>;
+ gpmc,cs-on-ns = <0>;
+ gpmc,cs-rd-off-ns = <30>;
+ gpmc,cs-wr-off-ns = <30>;
+ gpmc,adv-on-ns = <0>;
+ gpmc,adv-rd-off-ns = <30>;
+ gpmc,adv-wr-off-ns = <30>;
+ gpmc,we-on-ns = <0>;
+ gpmc,we-off-ns = <20>;
+ gpmc,oe-on-ns = <10>;
+ gpmc,oe-off-ns = <30>;
+ gpmc,access-ns = <30>;
+ gpmc,rd-cycle-ns = <30>;
+ gpmc,wr-cycle-ns = <30>;
+ gpmc,wait-pin = <1>;
+ gpmc,wait-on-read = "true";
+ gpmc,wait-on-write = "true";
+ gpmc,bus-turnaround-ns = <0>;
+ gpmc,cycle2cycle-delay-ns = <50>;
+ gpmc,clk-activation-ns = <0>;
+ gpmc,wait-monitoring-ns = <0>;
+ gpmc,wr-access-ns = <0>;
+ gpmc,wr-data-mux-bus-ns = <0>;
+
+ #address-cells = <1>;
+ #size-cells = <1>;
+ elm_id = <&elm>;
+
+ partition@0 {
+ label = "xload";
+ reg = <0x0 0x20000>;
+ };
+
+ partition@1 {
+ label = "xload_backup1";
+ reg = <0x20000 0x20000>;
+ };
+
+ partition@2 {
+ label = "xload_backup2";
+ reg = <0x40000 0x20000>;
+ };
+
+ partition@3 {
+ label = "xload_backup3";
+ reg = <0x60000 0x20000>;
+ };
+
+ partition@4 {
+ label = "barebox";
+ reg = <0x80000 0x80000>;
+ };
+
+ partition@5 {
+ label = "bareboxenv";
+ reg = <0x100000 0x20000>;
+ };
+
+ partition@6 {
+ label = "kernel";
+ reg = <0x120000 0x800000>;
+ };
+
+ partition@7 {
+ label = "root";
+ reg = <0x920000 0x1f6e0000>;
+ };
+ };
+};
diff --git a/arch/arm/dts/tps65217.dtsi b/arch/arm/dts/tps65217.dtsi
new file mode 100644
index 0000000000..a63272422d
--- /dev/null
+++ b/arch/arm/dts/tps65217.dtsi
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+/*
+ * Integrated Power Management Chip
+ * http://www.ti.com/lit/ds/symlink/tps65217.pdf
+ */
+
+&tps {
+ compatible = "ti,tps65217";
+
+ regulators {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ dcdc1_reg: regulator@0 {
+ reg = <0>;
+ regulator-compatible = "dcdc1";
+ };
+
+ dcdc2_reg: regulator@1 {
+ reg = <1>;
+ regulator-compatible = "dcdc2";
+ };
+
+ dcdc3_reg: regulator@2 {
+ reg = <2>;
+ regulator-compatible = "dcdc3";
+ };
+
+ ldo1_reg: regulator@3 {
+ reg = <3>;
+ regulator-compatible = "ldo1";
+ };
+
+ ldo2_reg: regulator@4 {
+ reg = <4>;
+ regulator-compatible = "ldo2";
+ };
+
+ ldo3_reg: regulator@5 {
+ reg = <5>;
+ regulator-compatible = "ldo3";
+ };
+
+ ldo4_reg: regulator@6 {
+ reg = <6>;
+ regulator-compatible = "ldo4";
+ };
+ };
+};
diff --git a/arch/arm/include/asm/barebox-arm.h b/arch/arm/include/asm/barebox-arm.h
index 622bd13622..faf9afaab9 100644
--- a/arch/arm/include/asm/barebox-arm.h
+++ b/arch/arm/include/asm/barebox-arm.h
@@ -79,8 +79,18 @@ static inline unsigned long arm_barebox_image_place(unsigned long endmem)
return endmem;
}
-#define ENTRY_FUNCTION(name) \
- void __naked __section(.text_head_entry_##name) \
- name
+#define ENTRY_FUNCTION(name, arg0, arg1, arg2) \
+ static void __##name(uint32_t, uint32_t, uint32_t); \
+ \
+ void __naked __section(.text_head_entry_##name) name \
+ (uint32_t r0, uint32_t r1, uint32_t r2) \
+ { \
+ __barebox_arm_head(); \
+ __##name(r0, r1, r2); \
+ } \
+ static void __naked noinline __##name \
+ (uint32_t arg0, uint32_t arg1, uint32_t arg2)
+
+
#endif /* _BAREBOX_ARM_H_ */
diff --git a/arch/arm/mach-imx/imx-bbu-external-nand.c b/arch/arm/mach-imx/imx-bbu-external-nand.c
index f0e9dd1170..401b3248a8 100644
--- a/arch/arm/mach-imx/imx-bbu-external-nand.c
+++ b/arch/arm/mach-imx/imx-bbu-external-nand.c
@@ -40,7 +40,7 @@ static int imx_bbu_external_nand_update(struct bbu_handler *handler, struct bbu_
int size_available, size_need;
int ret;
uint32_t num_bb = 0, bbt = 0;
- uint64_t offset;
+ uint64_t offset = 0;
int block = 0, len, now, blocksize;
void *image = data->image;
diff --git a/arch/arm/mach-omap/Kconfig b/arch/arm/mach-omap/Kconfig
index 7cd7f89f22..12b9c1fe42 100644
--- a/arch/arm/mach-omap/Kconfig
+++ b/arch/arm/mach-omap/Kconfig
@@ -114,8 +114,29 @@ config CMD_BOOT_ORDER
help
A command to choose the next boot device on a warm reset.
+config OMAP_MULTI_BOARDS
+ bool "Allow multiple boards to be selected"
+ select HAVE_DEFAULT_ENVIRONMENT_NEW
+ select HAVE_PBL_MULTI_IMAGES
+
+if OMAP_MULTI_BOARDS
+
+config MACH_BEAGLEBONE
+ bool "Texas Instrument's Beagle Bone"
+ select ARCH_AM33XX
+ help
+ Say Y here if you are using Beagle Bone
+
+config MACH_PCM051
+ bool "Phytec phyCORE pcm051"
+ select ARCH_AM33XX
+ help
+ Say Y here if you are using Phytecs phyCORE pcm051 board
+endif
+
choice
prompt "Select OMAP board"
+ depends on !OMAP_MULTI_BOARDS
config MACH_OMAP343xSDP
bool "Texas Instrument's SDP343x"
@@ -130,12 +151,6 @@ config MACH_BEAGLE
help
Say Y here if you are using Beagle Board
-config MACH_BEAGLEBONE
- bool "Texas Instrument's Beagle Bone"
- select ARCH_AM33XX
- help
- Say Y here if you are using Beagle Bone
-
config MACH_OMAP3EVM
bool "Texas Instrument's OMAP3 EVM"
select ARCH_OMAP3
@@ -174,13 +189,6 @@ config MACH_PCAAXL2
help
Say Y here if you are using a phyCARD-A-XL1 PCA-A-XL1
-config MACH_PCM051
- bool "Phytec phyCORE pcm051"
- select HAVE_DEFAULT_ENVIRONMENT_NEW
- select ARCH_AM33XX
- help
- Say Y here if you are using Phytecs phyCORE pcm051 board
-
endchoice
if ARCH_OMAP
diff --git a/arch/arm/mach-omap/Makefile b/arch/arm/mach-omap/Makefile
index 0d5428dedb..81a771eb3e 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 omap_fb.o omap_bootinfo.o
-pbl-$(CONFIG_ARCH_OMAP) += syslib.o omap_bootinfo.o
+obj-$(CONFIG_ARCH_OMAP) += syslib.o omap_devices.o omap_generic.o omap_fb.o
+pbl-$(CONFIG_ARCH_OMAP) += syslib.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 68dc9338f6..c22791883a 100644
--- a/arch/arm/mach-omap/am33xx_generic.c
+++ b/arch/arm/mach-omap/am33xx_generic.c
@@ -124,8 +124,9 @@ static int am33xx_bootsource(void)
{
enum bootsource src;
int instance = 0;
+ uint32_t *am33xx_bootinfo = (void *)AM33XX_SRAM_SCRATCH_SPACE;
- switch (omap_bootinfo[2] & 0xFF) {
+ switch (am33xx_bootinfo[2] & 0xFF) {
case 0x05:
src = BOOTSOURCE_NAND;
break;
diff --git a/arch/arm/mach-omap/include/mach/am33xx-generic.h b/arch/arm/mach-omap/include/mach/am33xx-generic.h
index e74a666f3f..8472d07302 100644
--- a/arch/arm/mach-omap/include/mach/am33xx-generic.h
+++ b/arch/arm/mach-omap/include/mach/am33xx-generic.h
@@ -11,6 +11,7 @@ u32 am33xx_get_cpu_rev(void);
static inline void am33xx_save_bootinfo(uint32_t *info)
{
unsigned long i = (unsigned long)info;
+ uint32_t *scratch = (void *)AM33XX_SRAM_SCRATCH_SPACE;
if (i & 0x3)
return;
@@ -19,7 +20,7 @@ static inline void am33xx_save_bootinfo(uint32_t *info)
if (i > AM33XX_SRAM0_START + AM33XX_SRAM0_SIZE)
return;
- omap_save_bootinfo(info);
+ memcpy(scratch, info, 3 * sizeof(uint32_t));
}
u32 am33xx_running_in_flash(void);
diff --git a/arch/arm/mach-omap/include/mach/am33xx-silicon.h b/arch/arm/mach-omap/include/mach/am33xx-silicon.h
index 30b605a695..16e665f2c4 100644
--- a/arch/arm/mach-omap/include/mach/am33xx-silicon.h
+++ b/arch/arm/mach-omap/include/mach/am33xx-silicon.h
@@ -120,6 +120,7 @@
/* OCMC */
#define AM33XX_SRAM0_START 0x402f0400
#define AM33XX_SRAM0_SIZE (SZ_128K - SZ_1K)
+#define AM33XX_SRAM_SCRATCH_SPACE 0x4030b800 /* start of public stack */
#define AM33XX_SRAM_GPMC_STACK_SIZE (0x40)
/* DDR offsets */
diff --git a/arch/arm/mach-omap/include/mach/generic.h b/arch/arm/mach-omap/include/mach/generic.h
index f4e18f3244..a2a48cc6af 100644
--- a/arch/arm/mach-omap/include/mach/generic.h
+++ b/arch/arm/mach-omap/include/mach/generic.h
@@ -73,8 +73,6 @@ static inline int omap_set_mmc_dev(const char *mmcdev)
}
#endif
-extern uint32_t omap_bootinfo[3];
-void omap_save_bootinfo(void *data);
void __noreturn omap_start_barebox(void *barebox);
void omap_set_bootmmc_devname(const char *devname);
diff --git a/arch/arm/mach-omap/include/mach/omap3-generic.h b/arch/arm/mach-omap/include/mach/omap3-generic.h
index 2210d879fe..5e29bac59b 100644
--- a/arch/arm/mach-omap/include/mach/omap3-generic.h
+++ b/arch/arm/mach-omap/include/mach/omap3-generic.h
@@ -16,7 +16,7 @@ static inline void omap3_save_bootinfo(uint32_t *info)
if (i > OMAP3_SRAM_BASE + SZ_64K)
return;
- omap_save_bootinfo(info);
+ memcpy((void *)OMAP3_SRAM_SCRATCH_SPACE, info, 3 * sizeof(uint32_t));
}
u32 omap3_running_in_flash(void);
diff --git a/arch/arm/mach-omap/include/mach/omap3-silicon.h b/arch/arm/mach-omap/include/mach/omap3-silicon.h
index 9138057a89..b4de045652 100644
--- a/arch/arm/mach-omap/include/mach/omap3-silicon.h
+++ b/arch/arm/mach-omap/include/mach/omap3-silicon.h
@@ -100,6 +100,7 @@
/** Interrupt Vector base address */
#define OMAP3_SRAM_BASE 0x40200000
+#define OMAP3_SRAM_SCRATCH_SPACE 0x4020f000 /* start of public stack */
#define OMAP3_SRAM_INTVECT 0x4020F800
#define OMAP3_SRAM_INTVECT_COPYSIZE 0x64
diff --git a/arch/arm/mach-omap/include/mach/omap4-generic.h b/arch/arm/mach-omap/include/mach/omap4-generic.h
index 85c92e1a5e..e246e360e5 100644
--- a/arch/arm/mach-omap/include/mach/omap4-generic.h
+++ b/arch/arm/mach-omap/include/mach/omap4-generic.h
@@ -15,7 +15,7 @@ static inline void omap4_save_bootinfo(uint32_t *info)
if (i > OMAP44XX_SRAM_BASE + SZ_64K)
return;
- omap_save_bootinfo(info);
+ memcpy((void *)OMAP44XX_SRAM_SCRATCH_SPACE, info, 3 * sizeof(uint32_t));
}
void __noreturn omap4_reset_cpu(unsigned long addr);
diff --git a/arch/arm/mach-omap/include/mach/omap4-silicon.h b/arch/arm/mach-omap/include/mach/omap4-silicon.h
index 336415c16b..202da93d76 100644
--- a/arch/arm/mach-omap/include/mach/omap4-silicon.h
+++ b/arch/arm/mach-omap/include/mach/omap4-silicon.h
@@ -40,8 +40,7 @@
#define OMAP44XX_L4_PER_BASE 0x48000000
#define OMAP44XX_SRAM_BASE 0x40300000
-
-#define OMAP44XX_SRAM_BASE 0x40300000
+#define OMAP44XX_SRAM_SCRATCH_SPACE 0x4030c000 /* start of public stack */
/* EMIF and DMM registers */
#define OMAP44XX_EMIF1_BASE 0x4c000000
diff --git a/arch/arm/mach-omap/omap3_generic.c b/arch/arm/mach-omap/omap3_generic.c
index d36d63b6a6..dbb0b5f86c 100644
--- a/arch/arm/mach-omap/omap3_generic.c
+++ b/arch/arm/mach-omap/omap3_generic.c
@@ -469,8 +469,9 @@ void omap3_core_init(void)
static int omap3_bootsource(void)
{
enum bootsource src = BOOTSOURCE_UNKNOWN;
+ uint32_t *omap3_bootinfo = (void *)OMAP3_SRAM_SCRATCH_SPACE;
- switch (omap_bootinfo[1] & 0xFF) {
+ switch (omap3_bootinfo[1] & 0xFF) {
case 0x02:
src = BOOTSOURCE_NAND;
break;
diff --git a/arch/arm/mach-omap/omap4_generic.c b/arch/arm/mach-omap/omap4_generic.c
index 5dde51ad15..0b683da181 100644
--- a/arch/arm/mach-omap/omap4_generic.c
+++ b/arch/arm/mach-omap/omap4_generic.c
@@ -505,8 +505,9 @@ static int omap_vector_init(void)
static int omap4_bootsource(void)
{
enum bootsource src;
+ uint32_t *omap4_bootinfo = (void *)OMAP44XX_SRAM_SCRATCH_SPACE;
- switch (omap_bootinfo[2] & 0xFF) {
+ switch (omap4_bootinfo[2] & 0xFF) {
case OMAP44XX_SAR_BOOT_NAND:
src = BOOTSOURCE_NAND;
break;
diff --git a/arch/arm/mach-omap/omap_bootinfo.S b/arch/arm/mach-omap/omap_bootinfo.S
deleted file mode 100644
index ffd0a3db3b..0000000000
--- a/arch/arm/mach-omap/omap_bootinfo.S
+++ /dev/null
@@ -1,25 +0,0 @@
-#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/omap_generic.c b/arch/arm/mach-omap/omap_generic.c
index 47fa9ba958..3d302f3efa 100644
--- a/arch/arm/mach-omap/omap_generic.c
+++ b/arch/arm/mach-omap/omap_generic.c
@@ -45,15 +45,24 @@ static void *omap_sram_start(void)
return NULL;
}
+static void *omap_scratch_space_start(void)
+{
+ if (cpu_is_am33xx())
+ return (void *)AM33XX_SRAM_SCRATCH_SPACE;
+ if (cpu_is_omap3())
+ return (void *)OMAP3_SRAM_SCRATCH_SPACE;
+ if (cpu_is_omap4())
+ return (void *)OMAP44XX_SRAM_SCRATCH_SPACE;
+ return NULL;
+}
+
void __noreturn omap_start_barebox(void *barebox)
{
int (*func)(void *) = barebox;
- uint32_t *arg;
void *sramadr = omap_sram_start();
+ void *scratch = omap_scratch_space_start();
- arg = (uint32_t *)&omap_bootinfo;
-
- memcpy(sramadr, &omap_bootinfo, sizeof(uint32_t) * 3);
+ memcpy(sramadr, scratch, sizeof(uint32_t) * 3);
shutdown_barebox();
func(sramadr);
diff --git a/arch/mips/include/asm/types.h b/arch/mips/include/asm/types.h
index f5373cc339..b63687d37b 100644
--- a/arch/mips/include/asm/types.h
+++ b/arch/mips/include/asm/types.h
@@ -13,6 +13,8 @@
#include <asm-generic/int-ll64.h>
+#ifndef __ASSEMBLY__
+
#if (defined(CONFIG_HIGHMEM) && defined(CONFIG_64BIT_PHYS_ADDR)) \
|| defined(CONFIG_64BIT)
typedef u64 dma_addr_t;
@@ -21,6 +23,8 @@ typedef u32 dma_addr_t;
#endif
typedef u64 dma64_addr_t;
+#endif /* __ASSEMBLY__ */
+
/*
* We don't use int-l64.h for the kernel anymore but still use it for
* userspace to avoid code changes.
diff --git a/arch/x86/lib/.gitignore b/arch/x86/lib/.gitignore
new file mode 100644
index 0000000000..d1165788c9
--- /dev/null
+++ b/arch/x86/lib/.gitignore
@@ -0,0 +1 @@
+barebox.lds