summaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2013-06-02 12:36:29 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2013-06-02 12:36:29 +0200
commitf56b064fa3d91afdf06d6a48e18063cfd3f0efe5 (patch)
treeed548c9d6ed80204febd112e0c4f121c610481f4 /arch
parent619fdd01abf5131eb020a16435b7c95c54a3335b (diff)
parent2f228f72e0a8367e2c9fb9bb5551a256126a00d7 (diff)
downloadbarebox-f56b064fa3d91afdf06d6a48e18063cfd3f0efe5.tar.gz
barebox-f56b064fa3d91afdf06d6a48e18063cfd3f0efe5.tar.xz
Merge branch 'for-next/imx'
Conflicts: arch/arm/Makefile
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/Makefile202
-rw-r--r--arch/arm/boards/freescale-mx51-pdk/Makefile4
-rw-r--r--arch/arm/boards/freescale-mx51-pdk/board.c7
-rw-r--r--arch/arm/boards/freescale-mx51-pdk/dcd-data.h60
-rw-r--r--arch/arm/boards/freescale-mx51-pdk/flash-header.imxcfg59
-rw-r--r--arch/arm/boards/freescale-mx51-pdk/flash_header.c29
-rw-r--r--arch/arm/boards/pcm038/pcm038.c30
-rw-r--r--arch/arm/mach-imx/Kconfig24
-rw-r--r--arch/arm/mach-imx/imx51.c55
-rw-r--r--arch/arm/mach-imx/include/mach/imx5.h1
10 files changed, 274 insertions, 197 deletions
diff --git a/arch/arm/Makefile b/arch/arm/Makefile
index fefa046e32..053e6b313e 100644
--- a/arch/arm/Makefile
+++ b/arch/arm/Makefile
@@ -70,102 +70,102 @@ machine-$(CONFIG_ARCH_ZYNQ) := zynq
# Board directory name. This list is sorted alphanumerically
# by CONFIG_* macro name.
-board-$(CONFIG_MACH_A9M2410) := a9m2410
-board-$(CONFIG_MACH_A9M2440) := a9m2440
-board-$(CONFIG_MACH_ANIMEO_IP) := animeo_ip
-board-$(CONFIG_MACH_AT91RM9200EK) := at91rm9200ek
-board-$(CONFIG_MACH_AT91SAM9260EK) := at91sam9260ek
-board-$(CONFIG_MACH_AT91SAM9261EK) := at91sam9261ek
-board-$(CONFIG_MACH_AT91SAM9263EK) := at91sam9263ek
-board-$(CONFIG_MACH_AT91SAM9G10EK) := at91sam9261ek
-board-$(CONFIG_MACH_AT91SAM9G20EK) := at91sam9260ek
-board-$(CONFIG_MACH_AT91SAM9N12EK) := at91sam9n12ek
-board-$(CONFIG_MACH_AT91SAM9X5EK) := at91sam9x5ek
-board-$(CONFIG_MACH_AT91SAM9M10IHD) := at91sam9m10ihd
-board-$(CONFIG_MACH_AT91SAM9M10G45EK) := at91sam9m10g45ek
-board-$(CONFIG_MACH_SAMA5D3XEK) := sama5d3xek
-board-$(CONFIG_MACH_CLEP7212) := clep7212
-board-$(CONFIG_MACH_DSS11) := dss11
-board-$(CONFIG_MACH_EDB9301) := edb93xx
-board-$(CONFIG_MACH_EDB9302) := edb93xx
-board-$(CONFIG_MACH_EDB9302A) := edb93xx
-board-$(CONFIG_MACH_EDB9307) := edb93xx
-board-$(CONFIG_MACH_EDB9307A) := edb93xx
-board-$(CONFIG_MACH_EDB93012) := edb93xx
-board-$(CONFIG_MACH_EDB9315) := edb93xx
-board-$(CONFIG_MACH_EDB9315A) := edb93xx
-board-$(CONFIG_MACH_EUKREA_CPUIMX25) := eukrea_cpuimx25
-board-$(CONFIG_MACH_EUKREA_CPUIMX27) := eukrea_cpuimx27
-board-$(CONFIG_MACH_EUKREA_CPUIMX35) := eukrea_cpuimx35
-board-$(CONFIG_MACH_EUKREA_CPUIMX51SD) := eukrea_cpuimx51
-board-$(CONFIG_MACH_FREESCALE_MX25_3STACK) := freescale-mx25-3-stack
-board-$(CONFIG_MACH_FREESCALE_MX35_3STACK) := freescale-mx35-3-stack
-board-$(CONFIG_MACH_GE863) := telit-evk-pro3
-board-$(CONFIG_MACH_HIGHBANK) := highbank
-board-$(CONFIG_MACH_IMX21ADS) := imx21ads
-board-$(CONFIG_MACH_IMX27ADS) := imx27ads
-board-$(CONFIG_MACH_IMX233_OLINUXINO) := imx233-olinuxino
-board-$(CONFIG_MACH_MIOA701) := mioa701
-board-$(CONFIG_MACH_MMCCPU) := mmccpu
-board-$(CONFIG_MACH_NOMADIK_8815NHK) := nhk8815
-board-$(CONFIG_MACH_NXDB500) := netx
-board-$(CONFIG_MACH_OMAP343xSDP) := omap343xdsp
-board-$(CONFIG_MACH_BEAGLE) := beagle
-board-$(CONFIG_MACH_BEAGLEBONE) := beaglebone
-board-$(CONFIG_MACH_OMAP3EVM) := omap3evm
-board-$(CONFIG_MACH_PANDA) := panda
-board-$(CONFIG_MACH_ARCHOSG9) := archosg9
-board-$(CONFIG_MACH_PCM049) := pcm049
-board-$(CONFIG_MACH_PCA100) := phycard-i.MX27
-board-$(CONFIG_MACH_PCAAL1) := phycard-a-l1
-board-$(CONFIG_MACH_PCAAXL2) := phycard-a-xl2
-board-$(CONFIG_MACH_PCM027) := pcm027
-board-$(CONFIG_MACH_PCM037) := pcm037
-board-$(CONFIG_MACH_PCM038) := pcm038
-board-$(CONFIG_MACH_PCM043) := pcm043
-board-$(CONFIG_MACH_PCM051) := pcm051
-board-$(CONFIG_MACH_PM9261) := pm9261
-board-$(CONFIG_MACH_PM9263) := pm9263
-board-$(CONFIG_MACH_PM9G45) := pm9g45
-board-$(CONFIG_MACH_RPI) := raspberry-pi
-board-$(CONFIG_MACH_SCB9328) := scb9328
-board-$(CONFIG_MACH_NESO) := guf-neso
-board-$(CONFIG_MACH_MX23EVK) := freescale-mx23-evk
-board-$(CONFIG_MACH_CHUMBY) := chumby_falconwing
-board-$(CONFIG_MACH_TX28) := karo-tx28
-board-$(CONFIG_MACH_MX28EVK) := freescale-mx28-evk
-board-$(CONFIG_MACH_CFA10036) := crystalfontz-cfa10036
-board-$(CONFIG_MACH_FREESCALE_MX51_PDK) := freescale-mx51-pdk
-board-$(CONFIG_MACH_FREESCALE_MX53_LOCO) := freescale-mx53-loco
-board-$(CONFIG_MACH_FREESCALE_MX53_SMD) := freescale-mx53-smd
-board-$(CONFIG_MACH_GUF_CUPID) := guf-cupid
-board-$(CONFIG_MACH_MINI2440) := friendlyarm-mini2440
-board-$(CONFIG_MACH_MINI6410) := friendlyarm-mini6410
-board-$(CONFIG_MACH_TINY6410) := friendlyarm-tiny6410
-board-$(CONFIG_MACH_QIL_A9260) := qil-a926x
-board-$(CONFIG_MACH_QIL_A9G20) := qil-a926x
-board-$(CONFIG_MACH_TNY_A9260) := tny-a926x
-board-$(CONFIG_MACH_TNY_A9263) := tny-a926x
-board-$(CONFIG_MACH_TNY_A9G20) := tny-a926x
-board-$(CONFIG_MACH_USB_A9260) := usb-a926x
-board-$(CONFIG_MACH_USB_A9263) := usb-a926x
-board-$(CONFIG_MACH_USB_A9G20) := usb-a926x
-board-$(CONFIG_MACH_VERSATILEPB) := versatile
-board-$(CONFIG_MACH_VEXPRESS) := vexpress
-board-$(CONFIG_MACH_TX25) := karo-tx25
-board-$(CONFIG_MACH_TQMA53) := tqma53
-board-$(CONFIG_MACH_TX51) := karo-tx51
-board-$(CONFIG_MACH_MX6Q_ARM2) := freescale-mx6-arm2
-board-$(CONFIG_MACH_TOSHIBA_AC100) := toshiba-ac100
-board-$(CONFIG_MACH_CCMX51) := ccxmx51
-board-$(CONFIG_MACH_TINY210) := friendlyarm-tiny210
-board-$(CONFIG_MACH_SABRELITE) := freescale-mx6-sabrelite
-board-$(CONFIG_MACH_TX53) := karo-tx53
-board-$(CONFIG_MACH_GUF_VINCELL) := guf-vincell
-board-$(CONFIG_MACH_EFIKA_MX_SMARTBOOK) := efika-mx-smartbook
-board-$(CONFIG_MACH_SABRESD) := freescale-mx6-sabresd
-board-$(CONFIG_MACH_REALQ7) := dmo-mx6-realq7
-board-$(CONFIG_MACH_ZEDBOARD) := avnet-zedboard
+board-$(CONFIG_MACH_A9M2410) += a9m2410
+board-$(CONFIG_MACH_A9M2440) += a9m2440
+board-$(CONFIG_MACH_ANIMEO_IP) += animeo_ip
+board-$(CONFIG_MACH_ARCHOSG9) += archosg9
+board-$(CONFIG_MACH_AT91RM9200EK) += at91rm9200ek
+board-$(CONFIG_MACH_AT91SAM9260EK) += at91sam9260ek
+board-$(CONFIG_MACH_AT91SAM9261EK) += at91sam9261ek
+board-$(CONFIG_MACH_AT91SAM9263EK) += at91sam9263ek
+board-$(CONFIG_MACH_AT91SAM9G10EK) += at91sam9261ek
+board-$(CONFIG_MACH_AT91SAM9G20EK) += at91sam9260ek
+board-$(CONFIG_MACH_AT91SAM9M10G45EK) += at91sam9m10g45ek
+board-$(CONFIG_MACH_AT91SAM9M10IHD) += at91sam9m10ihd
+board-$(CONFIG_MACH_AT91SAM9N12EK) += at91sam9n12ek
+board-$(CONFIG_MACH_AT91SAM9X5EK) += at91sam9x5ek
+board-$(CONFIG_MACH_BEAGLE) += beagle
+board-$(CONFIG_MACH_BEAGLEBONE) += beaglebone
+board-$(CONFIG_MACH_CCMX51) += ccxmx51
+board-$(CONFIG_MACH_CFA10036) += crystalfontz-cfa10036
+board-$(CONFIG_MACH_CHUMBY) += chumby_falconwing
+board-$(CONFIG_MACH_CLEP7212) += clep7212
+board-$(CONFIG_MACH_DSS11) += dss11
+board-$(CONFIG_MACH_EDB93012) += edb93xx
+board-$(CONFIG_MACH_EDB9301) += edb93xx
+board-$(CONFIG_MACH_EDB9302A) += edb93xx
+board-$(CONFIG_MACH_EDB9302) += edb93xx
+board-$(CONFIG_MACH_EDB9307A) += edb93xx
+board-$(CONFIG_MACH_EDB9307) += edb93xx
+board-$(CONFIG_MACH_EDB9315A) += edb93xx
+board-$(CONFIG_MACH_EDB9315) += edb93xx
+board-$(CONFIG_MACH_EFIKA_MX_SMARTBOOK) += efika-mx-smartbook
+board-$(CONFIG_MACH_EUKREA_CPUIMX25) += eukrea_cpuimx25
+board-$(CONFIG_MACH_EUKREA_CPUIMX27) += eukrea_cpuimx27
+board-$(CONFIG_MACH_EUKREA_CPUIMX35) += eukrea_cpuimx35
+board-$(CONFIG_MACH_EUKREA_CPUIMX51SD) += eukrea_cpuimx51
+board-$(CONFIG_MACH_FREESCALE_MX25_3STACK) += freescale-mx25-3-stack
+board-$(CONFIG_MACH_FREESCALE_MX35_3STACK) += freescale-mx35-3-stack
+board-$(CONFIG_MACH_FREESCALE_MX51_PDK) += freescale-mx51-pdk
+board-$(CONFIG_MACH_FREESCALE_MX53_LOCO) += freescale-mx53-loco
+board-$(CONFIG_MACH_FREESCALE_MX53_SMD) += freescale-mx53-smd
+board-$(CONFIG_MACH_GE863) += telit-evk-pro3
+board-$(CONFIG_MACH_GUF_CUPID) += guf-cupid
+board-$(CONFIG_MACH_GUF_VINCELL) += guf-vincell
+board-$(CONFIG_MACH_HIGHBANK) += highbank
+board-$(CONFIG_MACH_IMX21ADS) += imx21ads
+board-$(CONFIG_MACH_IMX233_OLINUXINO) += imx233-olinuxino
+board-$(CONFIG_MACH_IMX27ADS) += imx27ads
+board-$(CONFIG_MACH_MINI2440) += friendlyarm-mini2440
+board-$(CONFIG_MACH_MINI6410) += friendlyarm-mini6410
+board-$(CONFIG_MACH_MIOA701) += mioa701
+board-$(CONFIG_MACH_MMCCPU) += mmccpu
+board-$(CONFIG_MACH_MX23EVK) += freescale-mx23-evk
+board-$(CONFIG_MACH_MX28EVK) += freescale-mx28-evk
+board-$(CONFIG_MACH_MX6Q_ARM2) += freescale-mx6-arm2
+board-$(CONFIG_MACH_NESO) += guf-neso
+board-$(CONFIG_MACH_NOMADIK_8815NHK) += nhk8815
+board-$(CONFIG_MACH_NXDB500) += netx
+board-$(CONFIG_MACH_OMAP343xSDP) += omap343xdsp
+board-$(CONFIG_MACH_OMAP3EVM) += omap3evm
+board-$(CONFIG_MACH_PANDA) += panda
+board-$(CONFIG_MACH_PCA100) += phycard-i.MX27
+board-$(CONFIG_MACH_PCAAL1) += phycard-a-l1
+board-$(CONFIG_MACH_PCAAXL2) += phycard-a-xl2
+board-$(CONFIG_MACH_PCM027) += pcm027
+board-$(CONFIG_MACH_PCM037) += pcm037
+board-$(CONFIG_MACH_PCM038) += pcm038
+board-$(CONFIG_MACH_PCM043) += pcm043
+board-$(CONFIG_MACH_PCM049) += pcm049
+board-$(CONFIG_MACH_PCM051) += pcm051
+board-$(CONFIG_MACH_PM9261) += pm9261
+board-$(CONFIG_MACH_PM9263) += pm9263
+board-$(CONFIG_MACH_PM9G45) += pm9g45
+board-$(CONFIG_MACH_QIL_A9260) += qil-a926x
+board-$(CONFIG_MACH_QIL_A9G20) += qil-a926x
+board-$(CONFIG_MACH_REALQ7) += dmo-mx6-realq7
+board-$(CONFIG_MACH_RPI) += raspberry-pi
+board-$(CONFIG_MACH_SABRELITE) += freescale-mx6-sabrelite
+board-$(CONFIG_MACH_SABRESD) += freescale-mx6-sabresd
+board-$(CONFIG_MACH_SAMA5D3XEK) += sama5d3xek
+board-$(CONFIG_MACH_SCB9328) += scb9328
+board-$(CONFIG_MACH_TINY210) += friendlyarm-tiny210
+board-$(CONFIG_MACH_TINY6410) += friendlyarm-tiny6410
+board-$(CONFIG_MACH_TNY_A9260) += tny-a926x
+board-$(CONFIG_MACH_TNY_A9263) += tny-a926x
+board-$(CONFIG_MACH_TNY_A9G20) += tny-a926x
+board-$(CONFIG_MACH_TOSHIBA_AC100) += toshiba-ac100
+board-$(CONFIG_MACH_TQMA53) += tqma53
+board-$(CONFIG_MACH_TX25) += karo-tx25
+board-$(CONFIG_MACH_TX28) += karo-tx28
+board-$(CONFIG_MACH_TX51) += karo-tx51
+board-$(CONFIG_MACH_TX53) += karo-tx53
+board-$(CONFIG_MACH_USB_A9260) += usb-a926x
+board-$(CONFIG_MACH_USB_A9263) += usb-a926x
+board-$(CONFIG_MACH_USB_A9G20) += usb-a926x
+board-$(CONFIG_MACH_VERSATILEPB) += versatile
+board-$(CONFIG_MACH_VEXPRESS) += vexpress
+board-$(CONFIG_MACH_ZEDBOARD) += avnet-zedboard
machdirs := $(patsubst %,arch/arm/mach-%/,$(machine-y))
@@ -257,6 +257,14 @@ ifeq ($(machine-y),zynq)
KBUILD_IMAGE := barebox.zynq
endif
+CFG_barebox.imx := $(src)/arch/arm/boards/$(board-y)/flash-header.imxcfg
+barebox.imx: $(KBUILD_BINARY) FORCE
+ $(call if_changed,imx_image)
+
+ifeq ($(CONFIG_ARCH_IMX_INTERNAL_BOOT_USE_IMXIMAGE),y)
+KBUILD_IMAGE := barebox.imx
+endif
+
pbl := arch/arm/pbl
$(pbl)/zbarebox.S $(pbl)/zbarebox.bin $(pbl)/zbarebox: barebox.bin FORCE
$(Q)$(MAKE) $(build)=$(pbl) $@
@@ -301,4 +309,6 @@ common-$(CONFIG_BUILTIN_DTB) += arch/arm/dts/
lds-y := arch/arm/lib/barebox.lds
+common- += $(patsubst %,arch/arm/boards/%/,$(board-))
+
CLEAN_FILES += include/generated/mach-types.h arch/arm/lib/barebox.lds barebox-flash-image
diff --git a/arch/arm/boards/freescale-mx51-pdk/Makefile b/arch/arm/boards/freescale-mx51-pdk/Makefile
index d44f697718..f1baae24ff 100644
--- a/arch/arm/boards/freescale-mx51-pdk/Makefile
+++ b/arch/arm/boards/freescale-mx51-pdk/Makefile
@@ -1,3 +1,3 @@
-obj-y += board.o
-lwl-y += flash_header.o
+obj-y += board.o flash-header.o
+extra-y += flash-header.S flash-header.dcd
lwl-y += lowlevel.o
diff --git a/arch/arm/boards/freescale-mx51-pdk/board.c b/arch/arm/boards/freescale-mx51-pdk/board.c
index db340564f9..ad4740817e 100644
--- a/arch/arm/boards/freescale-mx51-pdk/board.c
+++ b/arch/arm/boards/freescale-mx51-pdk/board.c
@@ -229,9 +229,7 @@ static void babbage_power_init(void)
mdelay(50);
}
-#define DCD_NAME static struct imx_dcd_entry dcd_entry
-
-#include "dcd-data.h"
+extern char flash_header_start[], flash_header_end[];
static int f3s_devices_init(void)
{
@@ -254,7 +252,8 @@ static int f3s_devices_init(void)
armlinux_set_architecture(MACH_TYPE_MX51_BABBAGE);
imx51_bbu_internal_mmc_register_handler("mmc", "/dev/disk0",
- BBU_HANDLER_FLAG_DEFAULT, dcd_entry, sizeof(dcd_entry), 0);
+ BBU_HANDLER_FLAG_DEFAULT, (void *)flash_header_start,
+ flash_header_end - flash_header_start, 0);
return 0;
}
diff --git a/arch/arm/boards/freescale-mx51-pdk/dcd-data.h b/arch/arm/boards/freescale-mx51-pdk/dcd-data.h
deleted file mode 100644
index 4dd6c0d26c..0000000000
--- a/arch/arm/boards/freescale-mx51-pdk/dcd-data.h
+++ /dev/null
@@ -1,60 +0,0 @@
-
-DCD_NAME[] = {
- { .ptr_type = 4, .addr = 0x73fa88a0, .val = 0x00000200, },
- { .ptr_type = 4, .addr = 0x73fa850c, .val = 0x000020c5, },
- { .ptr_type = 4, .addr = 0x73fa8510, .val = 0x000020c5, },
- { .ptr_type = 4, .addr = 0x73fa883c, .val = 0x00000002, },
- { .ptr_type = 4, .addr = 0x73fa8848, .val = 0x00000002, },
- { .ptr_type = 4, .addr = 0x73fa84b8, .val = 0x000000e7, },
- { .ptr_type = 4, .addr = 0x73fa84bc, .val = 0x00000045, },
- { .ptr_type = 4, .addr = 0x73fa84c0, .val = 0x00000045, },
- { .ptr_type = 4, .addr = 0x73fa84c4, .val = 0x00000045, },
- { .ptr_type = 4, .addr = 0x73fa84c8, .val = 0x00000045, },
- { .ptr_type = 4, .addr = 0x73fa8820, .val = 0x00000000, },
- { .ptr_type = 4, .addr = 0x73fa84a4, .val = 0x00000003, },
- { .ptr_type = 4, .addr = 0x73fa84a8, .val = 0x00000003, },
- { .ptr_type = 4, .addr = 0x73fa84ac, .val = 0x000000e3, },
- { .ptr_type = 4, .addr = 0x73fa84b0, .val = 0x000000e3, },
- { .ptr_type = 4, .addr = 0x73fa84b4, .val = 0x000000e3, },
- { .ptr_type = 4, .addr = 0x73fa84cc, .val = 0x000000e3, },
- { .ptr_type = 4, .addr = 0x73fa84d0, .val = 0x000000e2, },
- { .ptr_type = 4, .addr = 0x73fa882c, .val = 0x00000004, },
- { .ptr_type = 4, .addr = 0x73fa88a4, .val = 0x00000004, },
- { .ptr_type = 4, .addr = 0x73fa88ac, .val = 0x00000004, },
- { .ptr_type = 4, .addr = 0x73fa88b8, .val = 0x00000004, },
- { .ptr_type = 4, .addr = 0x83fd9000, .val = 0x82a20000, },
- { .ptr_type = 4, .addr = 0x83fd9008, .val = 0x82a20000, },
- { .ptr_type = 4, .addr = 0x83fd9010, .val = 0x000ad0d0, },
- { .ptr_type = 4, .addr = 0x83fd9004, .val = 0x3f3584ab, },
- { .ptr_type = 4, .addr = 0x83fd900c, .val = 0x3f3584ab, },
- { .ptr_type = 4, .addr = 0x83fd9014, .val = 0x04008008, },
- { .ptr_type = 4, .addr = 0x83fd9014, .val = 0x0000801a, },
- { .ptr_type = 4, .addr = 0x83fd9014, .val = 0x0000801b, },
- { .ptr_type = 4, .addr = 0x83fd9014, .val = 0x00448019, },
- { .ptr_type = 4, .addr = 0x83fd9014, .val = 0x07328018, },
- { .ptr_type = 4, .addr = 0x83fd9014, .val = 0x04008008, },
- { .ptr_type = 4, .addr = 0x83fd9014, .val = 0x00008010, },
- { .ptr_type = 4, .addr = 0x83fd9014, .val = 0x00008010, },
- { .ptr_type = 4, .addr = 0x83fd9014, .val = 0x06328018, },
- { .ptr_type = 4, .addr = 0x83fd9014, .val = 0x03808019, },
- { .ptr_type = 4, .addr = 0x83fd9014, .val = 0x00408019, },
- { .ptr_type = 4, .addr = 0x83fd9014, .val = 0x00008000, },
- { .ptr_type = 4, .addr = 0x83fd9014, .val = 0x0400800c, },
- { .ptr_type = 4, .addr = 0x83fd9014, .val = 0x0000801e, },
- { .ptr_type = 4, .addr = 0x83fd9014, .val = 0x0000801f, },
- { .ptr_type = 4, .addr = 0x83fd9014, .val = 0x0000801d, },
- { .ptr_type = 4, .addr = 0x83fd9014, .val = 0x0732801c, },
- { .ptr_type = 4, .addr = 0x83fd9014, .val = 0x0400800c, },
- { .ptr_type = 4, .addr = 0x83fd9014, .val = 0x00008014, },
- { .ptr_type = 4, .addr = 0x83fd9014, .val = 0x00008014, },
- { .ptr_type = 4, .addr = 0x83fd9014, .val = 0x0632801c, },
- { .ptr_type = 4, .addr = 0x83fd9014, .val = 0x0380801d, },
- { .ptr_type = 4, .addr = 0x83fd9014, .val = 0x0040801d, },
- { .ptr_type = 4, .addr = 0x83fd9014, .val = 0x00008004, },
- { .ptr_type = 4, .addr = 0x83fd9000, .val = 0xb2a20000, },
- { .ptr_type = 4, .addr = 0x83fd9008, .val = 0xb2a20000, },
- { .ptr_type = 4, .addr = 0x83fd9010, .val = 0x000ad6d0, },
- { .ptr_type = 4, .addr = 0x83fd9034, .val = 0x90000000, },
- { .ptr_type = 4, .addr = 0x83fd9014, .val = 0x00000000, },
-};
-
diff --git a/arch/arm/boards/freescale-mx51-pdk/flash-header.imxcfg b/arch/arm/boards/freescale-mx51-pdk/flash-header.imxcfg
new file mode 100644
index 0000000000..bac6816fee
--- /dev/null
+++ b/arch/arm/boards/freescale-mx51-pdk/flash-header.imxcfg
@@ -0,0 +1,59 @@
+loadaddr 0x90000000
+soc imx51
+dcdofs 0x400
+wm 32 0x73fa88a0 0x00000200
+wm 32 0x73fa850c 0x000020c5
+wm 32 0x73fa8510 0x000020c5
+wm 32 0x73fa883c 0x00000002
+wm 32 0x73fa8848 0x00000002
+wm 32 0x73fa84b8 0x000000e7
+wm 32 0x73fa84bc 0x00000045
+wm 32 0x73fa84c0 0x00000045
+wm 32 0x73fa84c4 0x00000045
+wm 32 0x73fa84c8 0x00000045
+wm 32 0x73fa8820 0x00000000
+wm 32 0x73fa84a4 0x00000003
+wm 32 0x73fa84a8 0x00000003
+wm 32 0x73fa84ac 0x000000e3
+wm 32 0x73fa84b0 0x000000e3
+wm 32 0x73fa84b4 0x000000e3
+wm 32 0x73fa84cc 0x000000e3
+wm 32 0x73fa84d0 0x000000e2
+wm 32 0x73fa882c 0x00000004
+wm 32 0x73fa88a4 0x00000004
+wm 32 0x73fa88ac 0x00000004
+wm 32 0x73fa88b8 0x00000004
+wm 32 0x83fd9000 0x82a20000
+wm 32 0x83fd9008 0x82a20000
+wm 32 0x83fd9010 0x000ad0d0
+wm 32 0x83fd9004 0x3f3584ab
+wm 32 0x83fd900c 0x3f3584ab
+wm 32 0x83fd9014 0x04008008
+wm 32 0x83fd9014 0x0000801a
+wm 32 0x83fd9014 0x0000801b
+wm 32 0x83fd9014 0x00448019
+wm 32 0x83fd9014 0x07328018
+wm 32 0x83fd9014 0x04008008
+wm 32 0x83fd9014 0x00008010
+wm 32 0x83fd9014 0x00008010
+wm 32 0x83fd9014 0x06328018
+wm 32 0x83fd9014 0x03808019
+wm 32 0x83fd9014 0x00408019
+wm 32 0x83fd9014 0x00008000
+wm 32 0x83fd9014 0x0400800c
+wm 32 0x83fd9014 0x0000801e
+wm 32 0x83fd9014 0x0000801f
+wm 32 0x83fd9014 0x0000801d
+wm 32 0x83fd9014 0x0732801c
+wm 32 0x83fd9014 0x0400800c
+wm 32 0x83fd9014 0x00008014
+wm 32 0x83fd9014 0x00008014
+wm 32 0x83fd9014 0x0632801c
+wm 32 0x83fd9014 0x0380801d
+wm 32 0x83fd9014 0x0040801d
+wm 32 0x83fd9014 0x00008004
+wm 32 0x83fd9000 0xb2a20000
+wm 32 0x83fd9008 0xb2a20000
+wm 32 0x83fd9010 0x000ad6d0
+wm 32 0x83fd9034 0x90000000
+wm 32 0x83fd9014 0x00000000
diff --git a/arch/arm/boards/freescale-mx51-pdk/flash_header.c b/arch/arm/boards/freescale-mx51-pdk/flash_header.c
deleted file mode 100644
index f3f1e4bfd5..0000000000
--- a/arch/arm/boards/freescale-mx51-pdk/flash_header.c
+++ /dev/null
@@ -1,29 +0,0 @@
-#include <common.h>
-#include <mach/imx-flash-header.h>
-#include <asm/barebox-arm-head.h>
-
-void __naked __flash_header_start go(void)
-{
- barebox_arm_head();
-}
-
-#define DCD_NAME struct imx_dcd_entry __dcd_entry_section dcd_entry
-
-#include "dcd-data.h"
-
-#define APP_DEST 0x90000000
-
-struct imx_flash_header __flash_header_section flash_header = {
- .app_code_jump_vector = APP_DEST + 0x1000,
- .app_code_barker = APP_CODE_BARKER,
- .app_code_csf = 0,
- .dcd_ptr_ptr = APP_DEST + 0x400 + offsetof(struct imx_flash_header, dcd),
- .super_root_key = 0,
- .dcd = APP_DEST + 0x400 + offsetof(struct imx_flash_header, dcd_barker),
- .app_dest = APP_DEST,
- .dcd_barker = DCD_BARKER,
- .dcd_block_len = sizeof (dcd_entry),
-};
-
-unsigned long __image_len_section barebox_len = DCD_BAREBOX_SIZE;
-
diff --git a/arch/arm/boards/pcm038/pcm038.c b/arch/arm/boards/pcm038/pcm038.c
index 4b2fa6c6ca..372aea59d5 100644
--- a/arch/arm/boards/pcm038/pcm038.c
+++ b/arch/arm/boards/pcm038/pcm038.c
@@ -48,13 +48,20 @@
#define PCM038_GPIO_FEC_RST (GPIO_PORTC + 30)
#define PCM038_GPIO_SPI_CS0 (GPIO_PORTD + 28)
+#define PCM970_GPIO_SPI_CS1 (GPIO_PORTD + 27)
+#define PCM038_GPIO_OTG_STP (GPIO_PORTE + 1)
static struct fec_platform_data fec_info = {
.xcv_type = PHY_INTERFACE_MODE_MII,
.phy_addr = 1,
};
-static int pcm038_spi_cs[] = { PCM038_GPIO_SPI_CS0 };
+static int pcm038_spi_cs[] = {
+ PCM038_GPIO_SPI_CS0,
+#ifdef CONFIG_MACH_PCM970_BASEBOARD
+ PCM970_GPIO_SPI_CS1,
+#endif
+};
static struct spi_imx_master pcm038_spi_0_data = {
.chipselect = pcm038_spi_cs,
@@ -186,6 +193,11 @@ static int pcm038_power_init(void)
return 0;
}
+struct imxusb_platformdata pcm038_otg_pdata = {
+ .mode = IMX_USB_MODE_DEVICE,
+ .flags = MXC_EHCI_MODE_ULPI | MXC_EHCI_INTERFACE_DIFF_UNI,
+};
+
static int pcm038_devices_init(void)
{
int i;
@@ -221,10 +233,13 @@ static int pcm038_devices_init(void)
PE15_PF_UART1_RTS,
/* CSPI1 */
PD25_PF_CSPI1_RDY,
- PCM038_GPIO_SPI_CS0 | GPIO_GPIO | GPIO_OUT,
PD29_PF_CSPI1_SCLK,
PD30_PF_CSPI1_MISO,
PD31_PF_CSPI1_MOSI,
+ PCM038_GPIO_SPI_CS0 | GPIO_GPIO | GPIO_OUT,
+#ifdef CONFIG_MACH_PCM970_BASEBOARD
+ PCM970_GPIO_SPI_CS1 | GPIO_GPIO | GPIO_OUT,
+#endif
/* Display */
PA5_PF_LSCLK,
PA6_PF_LD0,
@@ -253,7 +268,7 @@ static int pcm038_devices_init(void)
PA29_PF_VSYNC,
PA30_PF_CONTRAST,
PA31_PF_OE_ACD,
- /* OTG host */
+ /* USB OTG */
PC7_PF_USBOTG_DATA5,
PC8_PF_USBOTG_DATA6,
PC9_PF_USBOTG_DATA0,
@@ -262,7 +277,7 @@ static int pcm038_devices_init(void)
PC12_PF_USBOTG_DATA4,
PC13_PF_USBOTG_DATA3,
PE0_PF_USBOTG_NXT,
- PE1_PF_USBOTG_STP,
+ PCM038_GPIO_OTG_STP | GPIO_GPIO | GPIO_OUT,
PE2_PF_USBOTG_DIR,
PE24_PF_USBOTG_CLK,
PE25_PF_USBOTG_DATA7,
@@ -308,6 +323,13 @@ static int pcm038_devices_init(void)
gpio_set_value(PCM038_GPIO_FEC_RST, 1);
imx27_add_fec(&fec_info);
+ /* Apply delay for STP line to stop ULPI */
+ gpio_direction_output(PCM038_GPIO_OTG_STP, 1);
+ mdelay(1);
+ imx_gpio_mode(PE1_PF_USBOTG_STP);
+
+ imx27_add_usbotg(&pcm038_otg_pdata);
+
switch (bootsource_get()) {
case BOOTSOURCE_NAND:
devfs_add_partition("nand0", 0x00000, 0x80000,
diff --git a/arch/arm/mach-imx/Kconfig b/arch/arm/mach-imx/Kconfig
index 359b5cd091..40597ae486 100644
--- a/arch/arm/mach-imx/Kconfig
+++ b/arch/arm/mach-imx/Kconfig
@@ -66,6 +66,7 @@ config BOARDINFO
choice
prompt "Select boot mode"
+ depends on !ARCH_IMX_INTERNAL_BOOT_USE_IMXIMAGE
help
i.MX processors support two different boot modes. With the internal
boot mode the boot medium contains a header describing the image to
@@ -93,6 +94,21 @@ config ARCH_IMX_EXTERNAL_BOOT
endchoice
+config ARCH_IMX_IMXIMAGE
+ bool
+ help
+ if enabled the imx-image tool is compiled
+
+config ARCH_IMX_INTERNAL_BOOT_USE_IMXIMAGE
+ select ARCH_IMX_IMXIMAGE
+ bool
+ help
+ Traditionally the i.MX specific format for internal bootmode
+ was generated using C structs inside the binary. Now there is
+ a tool available to generate the imx-image format. Boards using
+ this tool must select this option. This is recommended for new
+ boards.
+
choice
depends on ARCH_IMX_INTERNAL_BOOT
prompt "Internal boot source"
@@ -407,6 +423,7 @@ choice
config MACH_FREESCALE_MX51_PDK
select HAVE_DEFAULT_ENVIRONMENT_NEW
+ select ARCH_IMX_INTERNAL_BOOT_USE_IMXIMAGE
bool "Freescale i.MX51 PDK"
config MACH_EUKREA_CPUIMX51SD
@@ -596,6 +613,13 @@ endmenu
menu "i.MX specific settings"
+config ARCH_IMX_USBLOADER
+ bool "compile imx-usb-loader"
+ help
+ imx-usb-loader is a tool to upload and start imximages to an i.MX SoC
+ in ROM boot mode. It requires libusb, so make sure you have the libusb
+ devel package installed on your machine.
+
config IMX_IIM
tristate "IIM fusebox device"
depends on !ARCH_IMX21 && !ARCH_IMX21
diff --git a/arch/arm/mach-imx/imx51.c b/arch/arm/mach-imx/imx51.c
index 54d99a4c19..e94a4d7d9b 100644
--- a/arch/arm/mach-imx/imx51.c
+++ b/arch/arm/mach-imx/imx51.c
@@ -95,15 +95,63 @@ postcore_initcall(imx51_init);
* power up.
*/
+#define DP_MFN_800_DIT 60 /* PL Dither mode */
+
+/*
+ * Workaround for i.MX51 PLL errata. This is needed by all boards using the
+ * i.MX51 silicon version up until (including) 3.0 running at 800MHz.
+ * The PLL's in the i.MX51 processor can go out of lock due to a metastable
+ * condition in an analog flip-flop when used at high frequencies.
+ * This workaround implements an undocumented feature in the PLL (dither
+ * mode), which causes the effect of this failure to be much lower (in terms
+ * of frequency deviation), avoiding system failure, or at least decreasing
+ * the likelihood of system failure.
+ */
+static void imx51_setup_pll800_bug(void)
+{
+ void __iomem *base = (void *)MX51_PLL1_BASE_ADDR;
+ u32 dp_config;
+ volatile int i;
+
+ imx5_setup_pll_864(base);
+
+ dp_config = readl(base + MX5_PLL_DP_CONFIG);
+ dp_config &= ~MX5_PLL_DP_CONFIG_AREN;
+ writel(dp_config, base + MX5_PLL_DP_CONFIG);
+
+ /* Restart PLL with PLM = 1 */
+ writel(0x00001236, base + MX5_PLL_DP_CTL);
+
+ /* Wait for lock */
+ while (!(readl(base + MX5_PLL_DP_CTL) & 1));
+
+ /* Modify MFN value */
+ writel(DP_MFN_800_DIT, base + MX5_PLL_DP_MFN);
+ writel(DP_MFN_800_DIT, base + MX5_PLL_DP_HFS_MFN);
+
+ /* Reload MFN value */
+ writel(0x1, base + MX5_PLL_DP_CONFIG);
+
+ while (readl(base + MX5_PLL_DP_CONFIG) & 1);
+
+ /* Wait at least 4 us */
+ for (i = 0; i < 100; i++);
+
+ /* Enable auto-restart AREN bit */
+ dp_config |= MX5_PLL_DP_CONFIG_AREN;
+ writel(dp_config, base + MX5_PLL_DP_CONFIG);
+}
+
void imx51_init_lowlevel(unsigned int cpufreq_mhz)
{
void __iomem *ccm = (void __iomem *)MX51_CCM_BASE_ADDR;
u32 r;
+ int rev = imx_silicon_revision();
imx5_init_lowlevel();
/* disable write combine for TO 2 and lower revs */
- if (imx_silicon_revision() < IMX_CHIP_REV_3_0) {
+ if (rev < IMX_CHIP_REV_3_0) {
__asm__ __volatile__("mrc 15, 1, %0, c9, c0, 1":"=r"(r));
r |= (1 << 25);
__asm__ __volatile__("mcr 15, 1, %0, c9, c0, 1" : : "r"(r));
@@ -135,7 +183,10 @@ void imx51_init_lowlevel(unsigned int cpufreq_mhz)
break;
default:
/* Default maximum 800MHz */
- imx5_setup_pll_800((void __iomem *)MX51_PLL1_BASE_ADDR);
+ if (rev <= IMX_CHIP_REV_3_0)
+ imx51_setup_pll800_bug();
+ else
+ imx5_setup_pll_800((void __iomem *)MX51_PLL1_BASE_ADDR);
break;
}
diff --git a/arch/arm/mach-imx/include/mach/imx5.h b/arch/arm/mach-imx/include/mach/imx5.h
index 7f5c2eff50..5d1a7d7d40 100644
--- a/arch/arm/mach-imx/include/mach/imx5.h
+++ b/arch/arm/mach-imx/include/mach/imx5.h
@@ -9,6 +9,7 @@ void imx5_init_lowlevel(void);
void imx5_setup_pll(void __iomem *base, int freq, u32 op, u32 mfd, u32 mfn);
#define imx5_setup_pll_1000(base) imx5_setup_pll((base), 1000, ((10 << 4) + ((1 - 1) << 0)), (12 - 1), 5)
+#define imx5_setup_pll_864(base) imx5_setup_pll((base), 864, (( 8 << 4) + ((1 - 1) << 0)), (180 - 1), 180)
#define imx5_setup_pll_800(base) imx5_setup_pll((base), 800, (( 8 << 4) + ((1 - 1) << 0)), (3 - 1), 1)
#define imx5_setup_pll_665(base) imx5_setup_pll((base), 665, (( 6 << 4) + ((1 - 1) << 0)), (96 - 1), 89)
#define imx5_setup_pll_600(base) imx5_setup_pll((base), 600, (( 6 << 4) + ((1 - 1) << 0)), ( 4 - 1), 1)