diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2014-07-04 17:26:02 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2014-07-04 17:26:02 +0200 |
commit | 6724928c6972842b73962dc5af70d26de9969582 (patch) | |
tree | 1ef3f1b2fe4fbc11f3f89fecade898aee8a66b08 /arch/arm | |
parent | 8da9a22b522f2b89f51f57b96295941c059e9c9d (diff) | |
parent | 02e14a60abf6110234f01a16365657ecff37ab1e (diff) | |
download | barebox-6724928c6972842b73962dc5af70d26de9969582.tar.gz barebox-6724928c6972842b73962dc5af70d26de9969582.tar.xz |
Merge branch 'for-next/marvell'
Conflicts:
arch/arm/boards/Makefile
arch/arm/dts/Makefile
Diffstat (limited to 'arch/arm')
30 files changed, 460 insertions, 193 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 8674a2d17c..8465d4a7f7 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -92,8 +92,10 @@ config ARCH_MVEBU select CLKDEV_LOOKUP select GPIOLIB select HAS_DEBUG_LL + select HAVE_PBL_MULTI_IMAGES select MVEBU_MBUS select OFTREE + select OF_ADDRESS_PCI config ARCH_MXS bool "Freescale i.MX23/28 (mxs) based" diff --git a/arch/arm/Makefile b/arch/arm/Makefile index 64db73c62e..983f7f57cd 100644 --- a/arch/arm/Makefile +++ b/arch/arm/Makefile @@ -86,17 +86,11 @@ machine-$(CONFIG_ARCH_ZYNQ) := zynq board-$(CONFIG_MACH_A9M2410) += a9m2410 board-$(CONFIG_MACH_A9M2440) += a9m2440 board-$(CONFIG_MACH_AT91RM9200EK) += at91rm9200ek -board-$(CONFIG_MACH_GLOBALSCALE_GURUPLUG) += globalscale-guruplug -board-$(CONFIG_MACH_GLOBALSCALE_MIRABOX) += globalscale-mirabox -board-$(CONFIG_MACH_MARVELL_ARMADA_XP_GP) += marvell-armada-xp-gp board-$(CONFIG_MACH_MINI2440) += friendlyarm-mini2440 board-$(CONFIG_MACH_MINI6410) += friendlyarm-mini6410 board-$(CONFIG_MACH_PCM027) += phytec-phycore-pxa270 -board-$(CONFIG_MACH_PLATHOME_OPENBLOCKS_AX3) += plathome-openblocks-ax3/ -board-$(CONFIG_MACH_SOLIDRUN_CUBOX) += solidrun-cubox board-$(CONFIG_MACH_TINY210) += friendlyarm-tiny210 board-$(CONFIG_MACH_TINY6410) += friendlyarm-tiny6410 -board-$(CONFIG_MACH_USI_TOPKICK) += usi-topkick machdirs := $(patsubst %,arch/arm/mach-%/,$(machine-y)) diff --git a/arch/arm/boards/Makefile b/arch/arm/boards/Makefile index b8bfb84339..d200512758 100644 --- a/arch/arm/boards/Makefile +++ b/arch/arm/boards/Makefile @@ -41,6 +41,8 @@ obj-$(CONFIG_MACH_FREESCALE_MX53_SMD) += freescale-mx53-smd/ obj-$(CONFIG_MACH_FREESCALE_MX53_VMX53) += freescale-mx53-vmx53/ obj-$(CONFIG_MACH_GE863) += telit-evk-pro3/ obj-$(CONFIG_MACH_GK802) += gk802/ +obj-$(CONFIG_MACH_GLOBALSCALE_GURUPLUG) += globalscale-guruplug/ +obj-$(CONFIG_MACH_GLOBALSCALE_MIRABOX) += globalscale-mirabox/ obj-$(CONFIG_MACH_GUF_CUPID) += guf-cupid/ obj-$(CONFIG_MACH_GUF_SANTARO) += guf-santaro/ obj-$(CONFIG_MACH_GUF_VINCELL) += guf-vincell/ @@ -48,6 +50,7 @@ obj-$(CONFIG_MACH_HIGHBANK) += highbank/ obj-$(CONFIG_MACH_IMX21ADS) += freescale-mx21-ads/ obj-$(CONFIG_MACH_IMX233_OLINUXINO) += imx233-olinuxino/ obj-$(CONFIG_MACH_IMX27ADS) += freescale-mx27-ads/ +obj-$(CONFIG_MACH_MARVELL_ARMADA_XP_GP) += marvell-armada-xp-gp/ obj-$(CONFIG_MACH_MB7707) += module-mb7707/ obj-$(CONFIG_MACH_MIOA701) += mioa701/ obj-$(CONFIG_MACH_MMCCPU) += mmccpu/ @@ -73,6 +76,7 @@ obj-$(CONFIG_MACH_PCM043) += phytec-phycore-imx35/ obj-$(CONFIG_MACH_PCM049) += phytec-phycore-omap4460/ obj-$(CONFIG_MACH_PCM051) += phytec-phycore-am335x/ obj-$(CONFIG_MACH_PHYTEC_PFLA02) += phytec-phyflex-imx6/ +obj-$(CONFIG_MACH_PLATHOME_OPENBLOCKS_AX3) += plathome-openblocks-ax3/ obj-$(CONFIG_MACH_PM9261) += pm9261/ obj-$(CONFIG_MACH_PM9263) += pm9263/ obj-$(CONFIG_MACH_PM9G45) += pm9g45/ @@ -88,6 +92,7 @@ obj-$(CONFIG_MACH_SAMA5D3_XPLAINED) += sama5d3_xplained/ obj-$(CONFIG_MACH_SCB9328) += scb9328/ obj-$(CONFIG_MACH_SOCFPGA_EBV_SOCRATES) += ebv-socrates/ obj-$(CONFIG_MACH_SOCFPGA_TERASIC_SOCKIT) += terasic-sockit/ +obj-$(CONFIG_MACH_SOLIDRUN_CUBOX) += solidrun-cubox/ obj-$(CONFIG_MACH_SOLIDRUN_MICROSOM) += solidrun-microsom/ obj-$(CONFIG_MACH_TNY_A9260) += tny-a926x/ obj-$(CONFIG_MACH_TNY_A9263) += tny-a926x/ @@ -104,6 +109,7 @@ obj-$(CONFIG_MACH_UDOO) += udoo/ obj-$(CONFIG_MACH_USB_A9260) += usb-a926x/ obj-$(CONFIG_MACH_USB_A9263) += usb-a926x/ obj-$(CONFIG_MACH_USB_A9G20) += usb-a926x/ +obj-$(CONFIG_MACH_USI_TOPKICK) += usi-topkick/ obj-$(CONFIG_MACH_VERSATILEPB) += versatile/ obj-$(CONFIG_MACH_VEXPRESS) += vexpress/ obj-$(CONFIG_MACH_VIRT2REAL) += virt2real/ diff --git a/arch/arm/boards/globalscale-guruplug/Makefile b/arch/arm/boards/globalscale-guruplug/Makefile index dcfc2937d3..01c7a259e9 100644 --- a/arch/arm/boards/globalscale-guruplug/Makefile +++ b/arch/arm/boards/globalscale-guruplug/Makefile @@ -1 +1,2 @@ obj-y += board.o +lwl-y += lowlevel.o diff --git a/arch/arm/boards/globalscale-guruplug/lowlevel.c b/arch/arm/boards/globalscale-guruplug/lowlevel.c new file mode 100644 index 0000000000..508746a06f --- /dev/null +++ b/arch/arm/boards/globalscale-guruplug/lowlevel.c @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2014 + * Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com> + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + +#include <common.h> +#include <sizes.h> +#include <asm/barebox-arm.h> +#include <asm/barebox-arm-head.h> +#include <mach/lowlevel.h> + +extern char __dtb_kirkwood_guruplug_server_plus_bb_start[]; + +ENTRY_FUNCTION(start_globalscale_guruplug, r0, r1, r2) +{ + void *fdt; + + arm_cpu_lowlevel_init(); + + fdt = __dtb_kirkwood_guruplug_server_plus_bb_start - + get_runtime_offset(); + + mvebu_barebox_entry(fdt); +} diff --git a/arch/arm/boards/globalscale-mirabox/Makefile b/arch/arm/boards/globalscale-mirabox/Makefile index dcfc2937d3..01c7a259e9 100644 --- a/arch/arm/boards/globalscale-mirabox/Makefile +++ b/arch/arm/boards/globalscale-mirabox/Makefile @@ -1 +1,2 @@ obj-y += board.o +lwl-y += lowlevel.o diff --git a/arch/arm/boards/globalscale-mirabox/kwbimage.cfg b/arch/arm/boards/globalscale-mirabox/kwbimage.cfg index 72283d9b69..16fb77c31f 100644 --- a/arch/arm/boards/globalscale-mirabox/kwbimage.cfg +++ b/arch/arm/boards/globalscale-mirabox/kwbimage.cfg @@ -2,4 +2,4 @@ VERSION 1 BOOT_FROM nand NAND_BLKSZ 00020000 NAND_BADBLK_LOCATION 01 -BINARY globalscale-mirabox-binary.0 0000005b 00000068 +BINARY arch/arm/boards/globalscale-mirabox/binary.0 0000005b 00000068 diff --git a/arch/arm/boards/globalscale-mirabox/lowlevel.c b/arch/arm/boards/globalscale-mirabox/lowlevel.c new file mode 100644 index 0000000000..92203b768a --- /dev/null +++ b/arch/arm/boards/globalscale-mirabox/lowlevel.c @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2014 + * Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com> + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + +#include <common.h> +#include <sizes.h> +#include <asm/barebox-arm.h> +#include <asm/barebox-arm-head.h> +#include <mach/lowlevel.h> + +extern char __dtb_armada_370_mirabox_bb_start[]; + +ENTRY_FUNCTION(start_globalscale_mirabox, r0, r1, r2) +{ + void *fdt; + + arm_cpu_lowlevel_init(); + + fdt = __dtb_armada_370_mirabox_bb_start - + get_runtime_offset(); + + mvebu_barebox_entry(fdt); +} diff --git a/arch/arm/boards/marvell-armada-xp-gp/Makefile b/arch/arm/boards/marvell-armada-xp-gp/Makefile index dcfc2937d3..01c7a259e9 100644 --- a/arch/arm/boards/marvell-armada-xp-gp/Makefile +++ b/arch/arm/boards/marvell-armada-xp-gp/Makefile @@ -1 +1,2 @@ obj-y += board.o +lwl-y += lowlevel.o diff --git a/arch/arm/boards/marvell-armada-xp-gp/kwbimage.cfg b/arch/arm/boards/marvell-armada-xp-gp/kwbimage.cfg index db75969fe0..3f66aa080e 100644 --- a/arch/arm/boards/marvell-armada-xp-gp/kwbimage.cfg +++ b/arch/arm/boards/marvell-armada-xp-gp/kwbimage.cfg @@ -1,3 +1,3 @@ VERSION 1 BOOT_FROM spi -BINARY marvell-armada-xp-gp-binary.0 0000005b 00000068 +BINARY arch/arm/boards/marvell-armada-xp-gp/binary.0 0000005b 00000068 diff --git a/arch/arm/boards/marvell-armada-xp-gp/lowlevel.c b/arch/arm/boards/marvell-armada-xp-gp/lowlevel.c new file mode 100644 index 0000000000..046057f56a --- /dev/null +++ b/arch/arm/boards/marvell-armada-xp-gp/lowlevel.c @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2014 + * Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com> + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + +#include <common.h> +#include <sizes.h> +#include <asm/barebox-arm.h> +#include <asm/barebox-arm-head.h> +#include <mach/lowlevel.h> + +extern char __dtb_armada_xp_gp_bb_start[]; + +ENTRY_FUNCTION(start_marvell_armada_xp_gp, r0, r1, r2) +{ + void *fdt; + + arm_cpu_lowlevel_init(); + + fdt = __dtb_armada_xp_gp_bb_start - get_runtime_offset(); + + mvebu_barebox_entry(fdt); +} diff --git a/arch/arm/boards/plathome-openblocks-ax3/Makefile b/arch/arm/boards/plathome-openblocks-ax3/Makefile index dcfc2937d3..01c7a259e9 100644 --- a/arch/arm/boards/plathome-openblocks-ax3/Makefile +++ b/arch/arm/boards/plathome-openblocks-ax3/Makefile @@ -1 +1,2 @@ obj-y += board.o +lwl-y += lowlevel.o diff --git a/arch/arm/boards/plathome-openblocks-ax3/kwbimage.cfg b/arch/arm/boards/plathome-openblocks-ax3/kwbimage.cfg index 69fd1fd1c1..1d0571503a 100644 --- a/arch/arm/boards/plathome-openblocks-ax3/kwbimage.cfg +++ b/arch/arm/boards/plathome-openblocks-ax3/kwbimage.cfg @@ -1,3 +1,3 @@ VERSION 1 BOOT_FROM spi -BINARY plathome-openblocks-ax3-binary.0 0000005b 00000068 +BINARY arch/arm/boards/plathome-openblocks-ax3/binary.0 0000005b 00000068 diff --git a/arch/arm/boards/plathome-openblocks-ax3/lowlevel.c b/arch/arm/boards/plathome-openblocks-ax3/lowlevel.c new file mode 100644 index 0000000000..721d2de978 --- /dev/null +++ b/arch/arm/boards/plathome-openblocks-ax3/lowlevel.c @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2014 + * Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com> + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + +#include <common.h> +#include <sizes.h> +#include <asm/barebox-arm.h> +#include <asm/barebox-arm-head.h> +#include <mach/lowlevel.h> + +extern char __dtb_armada_xp_openblocks_ax3_4_bb_start[]; + +ENTRY_FUNCTION(start_plathome_openblocks_ax3, r0, r1, r2) +{ + void *fdt; + + arm_cpu_lowlevel_init(); + + fdt = __dtb_armada_xp_openblocks_ax3_4_bb_start - + get_runtime_offset(); + + mvebu_barebox_entry(fdt); +} diff --git a/arch/arm/boards/usi-topkick/Makefile b/arch/arm/boards/usi-topkick/Makefile index dcfc2937d3..01c7a259e9 100644 --- a/arch/arm/boards/usi-topkick/Makefile +++ b/arch/arm/boards/usi-topkick/Makefile @@ -1 +1,2 @@ obj-y += board.o +lwl-y += lowlevel.o diff --git a/arch/arm/mach-mvebu/include/mach/mvebu.h b/arch/arm/boards/usi-topkick/lowlevel.c index e13a446fca..df661564da 100644 --- a/arch/arm/mach-mvebu/include/mach/mvebu.h +++ b/arch/arm/boards/usi-topkick/lowlevel.c @@ -1,5 +1,6 @@ /* - * Copyright (C) 2013 Thomas Petazzoni <thomas.petazzoni@free-electrons.com> + * Copyright (C) 2014 + * Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -13,10 +14,21 @@ * */ -#ifndef __MACH_MVEBU_H -#define __MACH_MVEBU_H +#include <common.h> +#include <sizes.h> +#include <asm/barebox-arm.h> +#include <asm/barebox-arm-head.h> +#include <mach/lowlevel.h> -int mvebu_add_uart0(void); -void __naked __noreturn mvebu_barebox_entry(void); +extern char __dtb_kirkwood_topkick_bb_start[]; -#endif /* __MACH_MVEBU_H */ +ENTRY_FUNCTION(start_usi_topkick, r0, r1, r2) +{ + void *fdt; + + arm_cpu_lowlevel_init(); + + fdt = __dtb_kirkwood_topkick_bb_start - get_runtime_offset(); + + mvebu_barebox_entry(fdt); +} diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile index a9bb20e069..72ad5e6a6f 100644 --- a/arch/arm/dts/Makefile +++ b/arch/arm/dts/Makefile @@ -32,7 +32,6 @@ dtb-$(CONFIG_ARCH_IMX6) += imx6q-gk802.dtb \ imx6q-var-custom.dtb \ imx6s-riotboard.dtb \ imx6q-phytec-pbaa03.dtb -dtb-$(CONFIG_ARCH_MVEBU) += dove-cubox-bb.dtb dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3188-radxarock.dtb dtb-$(CONFIG_ARCH_SOCFPGA) += socfpga_cyclone5_sockit.dtb \ socfpga_cyclone5_socrates.dtb @@ -46,37 +45,42 @@ 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 am335x-bone-common.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_EFIKA_MX_SMARTBOOK) += imx51-genesi-efika-sb.dtb.o pbl-$(CONFIG_MACH_EMBEST_RIOTBOARD) += imx6s-riotboard.dtb.o pbl-$(CONFIG_MACH_FREESCALE_MX51_PDK) += imx51-babbage.dtb.o pbl-$(CONFIG_MACH_FREESCALE_MX53_LOCO) += imx53-qsb.dtb.o imx53-qsrb.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_GK802) += imx6q-gk802.dtb.o +pbl-$(CONFIG_MACH_GLOBALSCALE_GURUPLUG) += kirkwood-guruplug-server-plus-bb.dtb.o +pbl-$(CONFIG_MACH_GLOBALSCALE_MIRABOX) += armada-370-mirabox-bb.dtb.o +pbl-$(CONFIG_MACH_GUF_SANTARO) += imx6q-guf-santaro.dtb.o +pbl-$(CONFIG_MACH_MARVELL_ARMADA_XP_GP) += armada-xp-gp-bb.dtb.o +pbl-$(CONFIG_MACH_NITROGEN6X) += imx6q-nitrogen6x.dtb.o imx6dl-nitrogen6x.dtb.o pbl-$(CONFIG_MACH_NVIDIA_BEAVER) += tegra30-beaver.dtb.o pbl-$(CONFIG_MACH_NVIDIA_JETSON) += tegra124-jetson-tk1.dtb.o +pbl-$(CONFIG_MACH_PCA100) += imx27-phytec-phycard-s-rdk-bb.dtb.o +pbl-$(CONFIG_MACH_PCAAXL3) += imx6q-phytec-pbaa03.dtb.o +pbl-$(CONFIG_MACH_PCM038) += imx27-phytec-phycore-rdk.dtb.o pbl-$(CONFIG_MACH_PCM051) += am335x-phytec-phycore.dtb.o pbl-$(CONFIG_MACH_PHYTEC_PFLA02) += imx6s-phytec-pbab01.dtb.o imx6dl-phytec-pbab01.dtb.o imx6q-phytec-pbab01.dtb.o +pbl-$(CONFIG_MACH_PLATHOME_OPENBLOCKS_AX3) += armada-xp-openblocks-ax3-4-bb.dtb.o +pbl-$(CONFIG_MACH_RADXA_ROCK) += rk3188-radxarock.dtb.o pbl-$(CONFIG_MACH_REALQ7) += imx6q-dmo-edmqmx6.dtb.o +pbl-$(CONFIG_MACH_SABRELITE) += imx6q-sabrelite.dtb.o imx6dl-sabrelite.dtb.o +pbl-$(CONFIG_MACH_SABRESD) += imx6q-sabresd.dtb.o +pbl-$(CONFIG_MACH_SOCFPGA_EBV_SOCRATES) += socfpga_cyclone5_socrates.dtb.o +pbl-$(CONFIG_MACH_SOCFPGA_TERASIC_SOCKIT) += socfpga_cyclone5_sockit.dtb.o pbl-$(CONFIG_MACH_SOLIDRUN_CUBOX) += dove-cubox-bb.dtb.o -pbl-$(CONFIG_MACH_GK802) += imx6q-gk802.dtb.o -pbl-$(CONFIG_MACH_PCA100) += imx27-phytec-phycard-s-rdk-bb.dtb.o -pbl-$(CONFIG_MACH_PCM038) += imx27-phytec-phycore-rdk.dtb.o +pbl-$(CONFIG_MACH_SOLIDRUN_MICROSOM) += imx6dl-hummingboard.dtb.o pbl-$(CONFIG_MACH_TORADEX_COLIBRI_T20) += tegra20-colibri-iris.dtb.o pbl-$(CONFIG_MACH_TOSHIBA_AC100) += tegra20-paz00.dtb.o pbl-$(CONFIG_MACH_TQMA53) += imx53-mba53.dtb.o pbl-$(CONFIG_MACH_TQMA6X) += imx6dl-mba6x.dtb.o imx6q-mba6x.dtb.o pbl-$(CONFIG_MACH_TX25) += imx25-karo-tx25.dtb.o -pbl-$(CONFIG_MACH_RADXA_ROCK) += rk3188-radxarock.dtb.o -pbl-$(CONFIG_MACH_SOCFPGA_EBV_SOCRATES) += socfpga_cyclone5_socrates.dtb.o -pbl-$(CONFIG_MACH_SOCFPGA_TERASIC_SOCKIT) += socfpga_cyclone5_sockit.dtb.o -pbl-$(CONFIG_MACH_SOLIDRUN_MICROSOM) += imx6dl-hummingboard.dtb.o -pbl-$(CONFIG_MACH_SABRELITE) += imx6q-sabrelite.dtb.o imx6dl-sabrelite.dtb.o -pbl-$(CONFIG_MACH_SABRESD) += imx6q-sabresd.dtb.o -pbl-$(CONFIG_MACH_GUF_SANTARO) += imx6q-guf-santaro.dtb.o -pbl-$(CONFIG_MACH_NITROGEN6X) += imx6q-nitrogen6x.dtb.o imx6dl-nitrogen6x.dtb.o pbl-$(CONFIG_MACH_UDOO) += imx6q-udoo.dtb.o +pbl-$(CONFIG_MACH_USI_TOPKICK) += kirkwood-topkick-bb.dtb.o pbl-$(CONFIG_MACH_VARISCITE_MX6) += imx6q-var-custom.dtb.o -pbl-$(CONFIG_MACH_PCAAXL3) += imx6q-phytec-pbaa03.dtb.o .SECONDARY: $(obj)/$(BUILTIN_DTB).dtb.S .SECONDARY: $(patsubst %,$(obj)/%.S,$(dtb-y)) diff --git a/arch/arm/dts/armada-370-mirabox-bb.dts b/arch/arm/dts/armada-370-mirabox-bb.dts new file mode 100644 index 0000000000..de37a75bb9 --- /dev/null +++ b/arch/arm/dts/armada-370-mirabox-bb.dts @@ -0,0 +1,25 @@ +/* + * Barebox specific DT overlay for Globalscale Mirabox + * Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com> + */ + +#include "arm/armada-370-mirabox.dts" + +/ { + chosen { + stdout-path = "/soc/internal-regs/serial@12000"; + }; + + soc { + ranges = <MBUS_ID(0xf0, 0x01) 0 0xf1000000 0x100000 + MBUS_ID(0x01, 0xe0) 0 0xfff00000 0x100000>; + + internal-regs { + gpio_leds { + green_pwr_led { + barebox,default-trigger = "heartbeat"; + }; + }; + }; + }; +}; diff --git a/arch/arm/dts/armada-xp-gp-bb.dts b/arch/arm/dts/armada-xp-gp-bb.dts new file mode 100644 index 0000000000..3836016425 --- /dev/null +++ b/arch/arm/dts/armada-xp-gp-bb.dts @@ -0,0 +1,12 @@ +/* + * Barebox specific DT overlay for Marvell Armada XP DB-MV784MP-GP + * Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com> + */ + +#include "arm/armada-xp-gp.dts" + +/ { + chosen { + stdout-path = "/soc/internal-regs/serial@12000"; + }; +}; diff --git a/arch/arm/dts/armada-xp-openblocks-ax3-4-bb.dts b/arch/arm/dts/armada-xp-openblocks-ax3-4-bb.dts new file mode 100644 index 0000000000..611d72707f --- /dev/null +++ b/arch/arm/dts/armada-xp-openblocks-ax3-4-bb.dts @@ -0,0 +1,26 @@ +/* + * Barebox specific DT overlay for OpenBlocks AX3-4 board + * Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com> + */ + +#include "arm/armada-xp-openblocks-ax3-4.dts" + +/ { + chosen { + stdout-path = "/soc/internal-regs/serial@12000"; + }; + + soc { + ranges = <MBUS_ID(0xf0, 0x01) 0 0 0xf1000000 0x100000 + MBUS_ID(0x01, 0x1d) 0 0 0xfff00000 0x100000 + MBUS_ID(0x01, 0x2f) 0 0 0xf0000000 0x8000000>; + + internal-regs { + gpio_leds { + red_led { + barebox,default-trigger = "heartbeat"; + }; + }; + }; + }; +}; diff --git a/arch/arm/dts/kirkwood-guruplug-server-plus-bb.dts b/arch/arm/dts/kirkwood-guruplug-server-plus-bb.dts new file mode 100644 index 0000000000..aba7c06160 --- /dev/null +++ b/arch/arm/dts/kirkwood-guruplug-server-plus-bb.dts @@ -0,0 +1,14 @@ +/* + * Barebox specific DT overlay for Globalscale Guruplug + * Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com> + */ + +#include "arm/kirkwood-guruplug-server-plus.dts" + +/ { + gpio-leds { + health-r { + barebox,default-trigger = "heartbeat"; + }; + }; +}; diff --git a/arch/arm/dts/kirkwood-topkick-bb.dts b/arch/arm/dts/kirkwood-topkick-bb.dts new file mode 100644 index 0000000000..20b74b111d --- /dev/null +++ b/arch/arm/dts/kirkwood-topkick-bb.dts @@ -0,0 +1,14 @@ +/* + * Barebox specific DT overlay for USI Topkick + * Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com> + */ + +#include "arm/kirkwood-topkick.dts" + +/ { + gpio-leds { + system { + barebox,default-trigger = "heartbeat"; + }; + }; +}; diff --git a/arch/arm/mach-mvebu/Kconfig b/arch/arm/mach-mvebu/Kconfig index 70c49ecc6a..18f61f74f9 100644 --- a/arch/arm/mach-mvebu/Kconfig +++ b/arch/arm/mach-mvebu/Kconfig @@ -2,12 +2,10 @@ if ARCH_MVEBU config ARCH_TEXT_BASE hex - default 0x2000000 if MACH_PLATHOME_OPENBLOCKS_AX3 - default 0x2000000 if MACH_GLOBALSCALE_MIRABOX - default 0x2000000 if MACH_GLOBALSCALE_GURUPLUG - default 0x2000000 if MACH_USI_TOPKICK - default 0x2000000 if MACH_MARVELL_ARMADA_XP_GP - default 0x2000000 if MACH_SOLIDRUN_CUBOX + default 0x2000000 if ARCH_ARMADA_370 + default 0x2000000 if ARCH_ARMADA_XP + default 0x2000000 if ARCH_DOVE + default 0x2000000 if ARCH_KIRKWOOD choice prompt "Marvell EBU Processor" @@ -26,11 +24,13 @@ config ARCH_DOVE bool "Dove 88AP510" select CPU_V7 select CLOCKSOURCE_ORION + select PINCTRL_DOVE config ARCH_KIRKWOOD bool "Kirkwood" select CPU_FEROCEON select CLOCKSOURCE_ORION + select PINCTRL_KIRKWOOD endchoice @@ -40,14 +40,9 @@ endchoice if ARCH_ARMADA_370 -choice - prompt "Armada 370 Board Type" - config MACH_GLOBALSCALE_MIRABOX bool "Globalscale Mirabox" -endchoice - endif # ARCH_ARMADA_370 # @@ -56,17 +51,12 @@ endif # ARCH_ARMADA_370 if ARCH_ARMADA_XP -choice - prompt "Armada XP Board Type" - config MACH_PLATHOME_OPENBLOCKS_AX3 bool "PlatHome OpenBlocks AX3" config MACH_MARVELL_ARMADA_XP_GP bool "Marvell Armada XP GP" -endchoice - endif # ARCH_ARMADA_XP # @@ -75,14 +65,8 @@ endif # ARCH_ARMADA_XP if ARCH_DOVE -choice - prompt "Dove 88AP510 Board Type" - config MACH_SOLIDRUN_CUBOX bool "SolidRun CuBox" - select HAVE_PBL_MULTI_IMAGES - -endchoice endif # ARCH_DOVE @@ -92,17 +76,12 @@ endif # ARCH_DOVE if ARCH_KIRKWOOD -choice - prompt "Kirkwood Board Type" - config MACH_GLOBALSCALE_GURUPLUG bool "Guruplug" config MACH_USI_TOPKICK bool "Topkick" -endchoice - endif # ARCH_KIRKWOOD # diff --git a/arch/arm/mach-mvebu/Makefile b/arch/arm/mach-mvebu/Makefile index 6e303663ca..80b3947cc8 100644 --- a/arch/arm/mach-mvebu/Makefile +++ b/arch/arm/mach-mvebu/Makefile @@ -1,5 +1,5 @@ lwl-y += lowlevel.o -lwl-y += common.o +obj-y += common.o obj-$(CONFIG_ARCH_ARMADA_370) += armada-370-xp.o obj-$(CONFIG_ARCH_ARMADA_XP) += armada-370-xp.o obj-$(CONFIG_ARCH_DOVE) += dove.o diff --git a/arch/arm/mach-mvebu/armada-370-xp.c b/arch/arm/mach-mvebu/armada-370-xp.c index 209be0b603..e416a38765 100644 --- a/arch/arm/mach-mvebu/armada-370-xp.c +++ b/arch/arm/mach-mvebu/armada-370-xp.c @@ -17,17 +17,9 @@ #include <common.h> #include <init.h> #include <io.h> -#include <ns16550.h> -#include <linux/clk.h> -#include <linux/clkdev.h> #include <asm/memory.h> #include <mach/armada-370-xp-regs.h> -#define CONSOLE_UART_BASE \ - ARMADA_370_XP_UARTn_BASE(CONFIG_MVEBU_CONSOLE_UART) - -static struct clk *tclk; - static inline void armada_370_xp_memory_find(unsigned long *phys_base, unsigned long *phys_size) { @@ -51,52 +43,6 @@ static inline void armada_370_xp_memory_find(unsigned long *phys_base, } } -static struct NS16550_plat uart_plat = { - .shift = 2, -}; - -static int armada_370_xp_add_uart(void) -{ - uart_plat.clock = clk_get_rate(tclk); - if (!add_ns16550_device(DEVICE_ID_DYNAMIC, - (unsigned int)CONSOLE_UART_BASE, 32, - IORESOURCE_MEM | IORESOURCE_MEM_32BIT, - &uart_plat)) - return -ENODEV; - return 0; -} - -#if defined(CONFIG_ARCH_ARMADA_370) -static int armada_370_init_clocks(void) -{ - u32 val = readl(ARMADA_370_XP_SAR_BASE + SAR_LOW); - unsigned int rate; - - /* - * On Armada 370, the TCLK frequency can be either - * 166 Mhz or 200 Mhz - */ - if ((val & SAR_TCLK_FREQ) == SAR_TCLK_FREQ) - rate = 200000000; - else - rate = 166000000; - - tclk = clk_fixed("tclk", rate); - return clk_register_clkdev(tclk, NULL, "mvebu-timer"); -} -#define armada_370_xp_init_clocks() armada_370_init_clocks() -#endif - -#if defined(CONFIG_ARCH_ARMADA_XP) -static int armada_xp_init_clocks(void) -{ - /* On Armada XP, the TCLK frequency is always 250 Mhz */ - tclk = clk_fixed("tclk", 250000000); - return 0; -} -#define armada_370_xp_init_clocks() armada_xp_init_clocks() -#endif - static int armada_370_xp_init_soc(void) { unsigned long phys_base, phys_size; @@ -104,14 +50,9 @@ static int armada_370_xp_init_soc(void) barebox_set_model("Marvell Armada 370/XP"); barebox_set_hostname("armada"); - armada_370_xp_init_clocks(); - clkdev_add_physbase(tclk, (unsigned int)ARMADA_370_XP_TIMER_BASE, NULL); - add_generic_device("mvebu-timer", DEVICE_ID_SINGLE, NULL, - (unsigned int)ARMADA_370_XP_TIMER_BASE, 0x30, - IORESOURCE_MEM, NULL); armada_370_xp_memory_find(&phys_base, &phys_size); arm_add_mem_device("ram0", phys_base, phys_size); - armada_370_xp_add_uart(); + return 0; } core_initcall(armada_370_xp_init_soc); diff --git a/arch/arm/mach-mvebu/common.c b/arch/arm/mach-mvebu/common.c index d52b88d713..b054bf5aff 100644 --- a/arch/arm/mach-mvebu/common.c +++ b/arch/arm/mach-mvebu/common.c @@ -16,42 +16,66 @@ */ #include <common.h> +#include <init.h> #include <io.h> -#include <sizes.h> -#include <asm/barebox-arm.h> -#include <mach/common.h> +#include <of.h> +#include <of_address.h> +#include <linux/clk.h> /* - * All MVEBU SoCs start with internal registers at 0xd0000000. - * To get more contiguous address space and as Linux expects them - * there, we remap them early to 0xf1000000. - * - * There is no way to determine internal registers base address - * safely later on, as the remap register itself is within the - * internal registers. + * Marvell MVEBU SoC id and revision can be read from any PCIe + * controller port. */ -#define MVEBU_BOOTUP_INT_REG_BASE 0xd0000000 -#define MVEBU_BRIDGE_REG_BASE 0x20000 -#define DEVICE_INTERNAL_BASE_ADDR (MVEBU_BRIDGE_REG_BASE + 0x80) +u16 soc_devid; +EXPORT_SYMBOL(soc_devid); +u16 soc_revid; +EXPORT_SYMBOL(soc_revid); -static void mvebu_remap_registers(void) -{ - writel(MVEBU_REMAP_INT_REG_BASE, - IOMEM(MVEBU_BOOTUP_INT_REG_BASE) + DEVICE_INTERNAL_BASE_ADDR); -} +static const struct of_device_id mvebu_pcie_of_ids[] = { + { .compatible = "marvell,armada-xp-pcie", }, + { .compatible = "marvell,armada-370-pcie", }, + { .compatible = "marvell,dove-pcie" }, + { .compatible = "marvell,kirkwood-pcie" }, + { }, +}; -/* - * Determining the actual memory size is highly SoC dependent, - * but for all SoCs RAM starts at 0x00000000. Therefore, we start - * with a minimal memory setup of 64M and probe correct memory size - * later. - */ -#define MVEBU_BOOTUP_MEMORY_BASE 0x00000000 -#define MVEBU_BOOTUP_MEMORY_SIZE SZ_64M +#define PCIE_VEN_DEV_ID 0x000 +#define PCIE_REV_ID 0x008 +#define REV_ID_MASK 0xff -void __naked __noreturn mvebu_barebox_entry(void *boarddata) +static int mvebu_soc_id_init(void) { - mvebu_remap_registers(); - barebox_arm_entry(MVEBU_BOOTUP_MEMORY_BASE, - MVEBU_BOOTUP_MEMORY_SIZE, boarddata); + struct device_node *np, *cnp; + struct clk *clk; + void __iomem *base; + + np = of_find_matching_node(NULL, mvebu_pcie_of_ids); + if (!np) + return -ENODEV; + + for_each_child_of_node(np, cnp) { + base = of_iomap(cnp, 0); + if (!base) + continue; + + clk = of_clk_get(cnp, 0); + if (IS_ERR(clk)) + continue; + + clk_enable(clk); + soc_devid = readl(base + PCIE_VEN_DEV_ID) >> 16; + soc_revid = readl(base + PCIE_REV_ID) & REV_ID_MASK; + clk_disable(clk); + break; + } + + if (!soc_devid) { + pr_err("Unable to read SoC id from PCIe ports\n"); + return -EINVAL; + } + + pr_info("SoC: Marvell %04x rev %d\n", soc_devid, soc_revid); + + return 0; } +postcore_initcall(mvebu_soc_id_init); diff --git a/arch/arm/mach-mvebu/dove.c b/arch/arm/mach-mvebu/dove.c index f081e50e7b..bcbf4b8ad7 100644 --- a/arch/arm/mach-mvebu/dove.c +++ b/arch/arm/mach-mvebu/dove.c @@ -71,6 +71,9 @@ static int dove_init_soc(void) { unsigned long phys_base, phys_size; + barebox_set_model("Marvell Dove"); + barebox_set_hostname("dove"); + dove_remap_mc_regs(); dove_memory_find(&phys_base, &phys_size); arm_add_mem_device("ram0", phys_base, phys_size); diff --git a/arch/arm/mach-mvebu/include/mach/socid.h b/arch/arm/mach-mvebu/include/mach/socid.h new file mode 100644 index 0000000000..36d681a9dc --- /dev/null +++ b/arch/arm/mach-mvebu/include/mach/socid.h @@ -0,0 +1,76 @@ +/* + * Marvell MVEBU SoC Ids + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + +#ifndef __MACH_MVEBU_SOCID_H +#define __MACH_MVEBU_SOCID_H + +extern u16 soc_devid; +extern u16 soc_revid; + +static inline u16 mvebu_get_soc_devid(void) +{ + return soc_devid; +} + +static inline u16 mvebu_get_soc_revid(void) +{ + return soc_revid; +} + +/* Orion */ +#define DEVID_F5180 0x5180 +#define REVID_F5180N_B1 0x3 +#define DEVID_F5181 0x5181 +#define REVID_F5181_B1 0x3 +#define REVID_F5181L 0x8 +#define DEVID_F5182 0x5182 +#define REVID_F5182_A1 0x1 +#define DEVID_F6183 0x6183 +/* Kirkwood */ +#define DEVID_F6180 0x6180 +#define DEVID_F6190 0x6190 +#define DEVID_F6192 0x6192 +#define DEVID_F6280 0x6280 +#define DEVID_F6281 0x6281 +#define DEVID_F6282 0x1155 +/* Kirkwood Duo */ +#define DEVID_F6321 0x6321 +#define DEVID_F6322 0x6322 +#define DEVID_F6323 0x6323 +/* Avanta */ +#define DEVID_F6510 0x6510 +#define DEVID_F6530 0x6530 +#define DEVID_F6550 0x6550 +#define DEVID_F6560 0x6560 +/* Dove */ +#define DEVID_AP510 0x0510 +#define DEVID_F6781 0x6781 +/* Discovery Duo */ +#define DEVID_MV76100 0x7610 +#define DEVID_MV78100 0x7810 +#define DEVID_MV78200 0x7820 +/* Armada 370 */ +#define DEVID_F6707 0x6707 +#define DEVID_F6710 0x6710 +#define DEVID_F6711 0x6711 +/* Armada XP */ +#define DEVID_MV78130 0x7813 +#define DEVID_MV78160 0x7816 +#define DEVID_MV78230 0x7823 +#define DEVID_MV78260 0x7826 +#define DEVID_MV78460 0x7846 +#define DEVID_MV78880 0x7888 + +#endif /* __MACH_MVEBU_SOCID_H */ diff --git a/arch/arm/mach-mvebu/kirkwood.c b/arch/arm/mach-mvebu/kirkwood.c index c79d13002a..fe9ca9cbe4 100644 --- a/arch/arm/mach-mvebu/kirkwood.c +++ b/arch/arm/mach-mvebu/kirkwood.c @@ -16,16 +16,9 @@ #include <common.h> #include <init.h> #include <io.h> -#include <ns16550.h> -#include <linux/clk.h> -#include <linux/clkdev.h> #include <asm/memory.h> #include <mach/kirkwood-regs.h> -#define CONSOLE_UART_BASE KIRKWOOD_UARTn_BASE(CONFIG_MVEBU_CONSOLE_UART) - -static struct clk *tclk; - static inline void kirkwood_memory_find(unsigned long *phys_base, unsigned long *phys_size) { @@ -49,39 +42,6 @@ static inline void kirkwood_memory_find(unsigned long *phys_base, } } -static struct NS16550_plat uart_plat = { - .shift = 2, -}; - -static int kirkwood_add_uart(void) -{ - uart_plat.clock = clk_get_rate(tclk); - if (!add_ns16550_device(DEVICE_ID_DYNAMIC, - (unsigned int)CONSOLE_UART_BASE, 32, - IORESOURCE_MEM | IORESOURCE_MEM_32BIT, - &uart_plat)) - return -ENODEV; - return 0; -} - -static int kirkwood_init_clocks(void) -{ - u32 val = readl(KIRKWOOD_SAR_BASE); - unsigned int rate; - - /* - * On Kirkwood, the TCLK frequency can be either - * 166 Mhz or 200 Mhz - */ - if ((val & SAR_TCLK_FREQ) == SAR_TCLK_FREQ) - rate = 166666667; - else - rate = 200000000; - - tclk = clk_fixed("tclk", rate); - return 0; -} - static int kirkwood_init_soc(void) { unsigned long phys_base, phys_size; @@ -89,14 +49,8 @@ static int kirkwood_init_soc(void) barebox_set_model("Marvell Kirkwood"); barebox_set_hostname("kirkwood"); - kirkwood_init_clocks(); - clkdev_add_physbase(tclk, (unsigned int)KIRKWOOD_TIMER_BASE, NULL); - add_generic_device("orion-timer", DEVICE_ID_SINGLE, NULL, - (unsigned int)KIRKWOOD_TIMER_BASE, 0x30, - IORESOURCE_MEM, NULL); kirkwood_memory_find(&phys_base, &phys_size); arm_add_mem_device("ram0", phys_base, phys_size); - kirkwood_add_uart(); return 0; } diff --git a/arch/arm/mach-mvebu/lowlevel.c b/arch/arm/mach-mvebu/lowlevel.c index 147a717ad9..7c4facfa1c 100644 --- a/arch/arm/mach-mvebu/lowlevel.c +++ b/arch/arm/mach-mvebu/lowlevel.c @@ -16,9 +16,11 @@ */ #include <common.h> +#include <io.h> #include <sizes.h> #include <asm/barebox-arm.h> #include <asm/barebox-arm-head.h> +#include <mach/common.h> #include <mach/lowlevel.h> void __naked barebox_arm_reset_vector(void) @@ -26,3 +28,38 @@ void __naked barebox_arm_reset_vector(void) arm_cpu_lowlevel_init(); mvebu_barebox_entry(NULL); } + +/* + * All MVEBU SoCs start with internal registers at 0xd0000000. + * To get more contiguous address space and as Linux expects them + * there, we remap them early to 0xf1000000. + * + * There is no way to determine internal registers base address + * safely later on, as the remap register itself is within the + * internal registers. + */ +#define MVEBU_BOOTUP_INT_REG_BASE 0xd0000000 +#define MVEBU_BRIDGE_REG_BASE 0x20000 +#define DEVICE_INTERNAL_BASE_ADDR (MVEBU_BRIDGE_REG_BASE + 0x80) + +static void mvebu_remap_registers(void) +{ + writel(MVEBU_REMAP_INT_REG_BASE, + IOMEM(MVEBU_BOOTUP_INT_REG_BASE) + DEVICE_INTERNAL_BASE_ADDR); +} + +/* + * Determining the actual memory size is highly SoC dependent, + * but for all SoCs RAM starts at 0x00000000. Therefore, we start + * with a minimal memory setup of 64M and probe correct memory size + * later. + */ +#define MVEBU_BOOTUP_MEMORY_BASE 0x00000000 +#define MVEBU_BOOTUP_MEMORY_SIZE SZ_64M + +void __naked __noreturn mvebu_barebox_entry(void *boarddata) +{ + mvebu_remap_registers(); + barebox_arm_entry(MVEBU_BOOTUP_MEMORY_BASE, + MVEBU_BOOTUP_MEMORY_SIZE, boarddata); +} |