diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2013-06-02 12:36:29 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2013-06-02 12:36:29 +0200 |
commit | f56b064fa3d91afdf06d6a48e18063cfd3f0efe5 (patch) | |
tree | ed548c9d6ed80204febd112e0c4f121c610481f4 /arch | |
parent | 619fdd01abf5131eb020a16435b7c95c54a3335b (diff) | |
parent | 2f228f72e0a8367e2c9fb9bb5551a256126a00d7 (diff) | |
download | barebox-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/Makefile | 202 | ||||
-rw-r--r-- | arch/arm/boards/freescale-mx51-pdk/Makefile | 4 | ||||
-rw-r--r-- | arch/arm/boards/freescale-mx51-pdk/board.c | 7 | ||||
-rw-r--r-- | arch/arm/boards/freescale-mx51-pdk/dcd-data.h | 60 | ||||
-rw-r--r-- | arch/arm/boards/freescale-mx51-pdk/flash-header.imxcfg | 59 | ||||
-rw-r--r-- | arch/arm/boards/freescale-mx51-pdk/flash_header.c | 29 | ||||
-rw-r--r-- | arch/arm/boards/pcm038/pcm038.c | 30 | ||||
-rw-r--r-- | arch/arm/mach-imx/Kconfig | 24 | ||||
-rw-r--r-- | arch/arm/mach-imx/imx51.c | 55 | ||||
-rw-r--r-- | arch/arm/mach-imx/include/mach/imx5.h | 1 |
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) |