diff options
Diffstat (limited to 'configs/platform-v7a/patches/barebox-2017.08.0/0006-ARM-vexpress-switch-to-DT-probe-and-multi-image-buil.patch')
-rw-r--r-- | configs/platform-v7a/patches/barebox-2017.08.0/0006-ARM-vexpress-switch-to-DT-probe-and-multi-image-buil.patch | 577 |
1 files changed, 577 insertions, 0 deletions
diff --git a/configs/platform-v7a/patches/barebox-2017.08.0/0006-ARM-vexpress-switch-to-DT-probe-and-multi-image-buil.patch b/configs/platform-v7a/patches/barebox-2017.08.0/0006-ARM-vexpress-switch-to-DT-probe-and-multi-image-buil.patch new file mode 100644 index 0000000..dc21ddf --- /dev/null +++ b/configs/platform-v7a/patches/barebox-2017.08.0/0006-ARM-vexpress-switch-to-DT-probe-and-multi-image-buil.patch @@ -0,0 +1,577 @@ +From: Lucas Stach <l.stach@pengutronix.de> +Date: Fri, 1 Sep 2017 14:07:05 +0200 +Subject: [PATCH] ARM: vexpress: switch to DT probe and multi-image build + +This switches the VExpress support to use an internal DT, instead +of probing the peripherals from a board file. It also switches to +a multi-iamge build with both CA9 and CA15 variants of the VExpress +board being supported. + +Signed-off-by: Lucas Stach <l.stach@pengutronix.de> +--- + arch/arm/boards/vexpress/Makefile | 2 - + .../arm/boards/vexpress/defaultenv-vexpress/config | 38 ------- + arch/arm/boards/vexpress/init.c | 115 +-------------------- + arch/arm/boards/vexpress/lowlevel.c | 20 +++- + arch/arm/dts/Makefile | 2 + + arch/arm/dts/vexpress-v2p-ca15.dts | 27 +++++ + arch/arm/dts/vexpress-v2p-ca9.dts | 27 +++++ + arch/arm/mach-vexpress/Kconfig | 4 + + arch/arm/mach-vexpress/Makefile | 1 - + arch/arm/mach-vexpress/devices.c | 83 --------------- + arch/arm/mach-vexpress/include/mach/devices.h | 9 -- + arch/arm/mach-vexpress/v2m.c | 38 ------- + images/Makefile | 1 + + images/Makefile.vexpress | 11 ++ + 14 files changed, 93 insertions(+), 285 deletions(-) + delete mode 100644 arch/arm/boards/vexpress/defaultenv-vexpress/config + create mode 100644 arch/arm/dts/vexpress-v2p-ca15.dts + create mode 100644 arch/arm/dts/vexpress-v2p-ca9.dts + delete mode 100644 arch/arm/mach-vexpress/devices.c + create mode 100644 images/Makefile.vexpress + +diff --git a/arch/arm/boards/vexpress/Makefile b/arch/arm/boards/vexpress/Makefile +index c89d7bf182d0..2da0494d49b3 100644 +--- a/arch/arm/boards/vexpress/Makefile ++++ b/arch/arm/boards/vexpress/Makefile +@@ -1,4 +1,2 @@ + obj-y += init.o +- + lwl-y += lowlevel.o +-bbenv-$(CONFIG_DEFAULT_ENVIRONMENT_GENERIC) += defaultenv-vexpress +diff --git a/arch/arm/boards/vexpress/defaultenv-vexpress/config b/arch/arm/boards/vexpress/defaultenv-vexpress/config +deleted file mode 100644 +index 6c0abda40c12..000000000000 +--- a/arch/arm/boards/vexpress/defaultenv-vexpress/config ++++ /dev/null +@@ -1,38 +0,0 @@ +-#!/bin/sh +- +-# use 'dhcp' to do dhcp in barebox and in kernel +-# use 'none' if you want to skip kernel ip autoconfiguration +-ip=dhcp +-global.dhcp.vendor_id=barebox-${global.hostname} +- +-# or set your networking parameters here +-#eth0.ipaddr=a.b.c.d +-#eth0.netmask=a.b.c.d +-#eth0.gateway=a.b.c.d +-#eth0.serverip=a.b.c.d +- +-# can be either 'nfs', 'tftp' or 'nor' +-kernel_loc=tftp +-# can be either 'net', 'nor' or 'initrd' +-rootfs_loc=initrd +- +-# can be either 'jffs2' or 'ubifs' +-rootfs_type=ubifs +-rootfsimage=root.$rootfs_type +- +-kernelimage=zImage +-#kernelimage=uImage +-#kernelimage=Image +-#kernelimage=Image.lzo +- +-nfsroot="$eth0.serverip:/opt/work/busybox/arm9/rootfs_arm" +- +-nor_parts="256k(barebox)ro,64k(bareboxenv),1536k(kernel),-(root)" +-rootfs_mtdblock_nor=3 +- +-autoboot_timeout=3 +- +-bootargs="console=ttyAMA0,115200n8 CONSOLE=/dev/ttyAMA0" +- +-# set a fancy prompt (if support is compiled in) +-PS1="\e[1;31m[barebox@\h]:\w\e[0m\n# " +diff --git a/arch/arm/boards/vexpress/init.c b/arch/arm/boards/vexpress/init.c +index f89dff939231..1bbc8c347638 100644 +--- a/arch/arm/boards/vexpress/init.c ++++ b/arch/arm/boards/vexpress/init.c +@@ -11,129 +11,23 @@ + #include <generated/mach-types.h> + #include <mach/devices.h> + #include <environment.h> +-#include <partition.h> + #include <linux/sizes.h> + #include <io.h> + #include <envfs.h> + #include <globalvar.h> + #include <linux/amba/sp804.h> +-#include <mci.h> +- +-struct vexpress_init { +- void (*core_init)(void); +- void (*mem_init)(void); +- void (*console_init)(void); +- void (*devices_init)(void); +-}; +- +-struct mmci_platform_data mmci_plat = { +- .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34, +- .clkdiv_init = SDI_CLKCR_CLKDIV_INIT, +-}; +- +-struct vexpress_init *v2m_init; +- +-static void vexpress_ax_mem_init(void) +-{ +- vexpress_add_ddram(SZ_512M); +-} + + #define V2M_SYS_FLASH 0x03c + +-static void vexpress_ax_devices_init(void) +-{ +- add_cfi_flash_device(0, 0x08000000, SZ_64M, 0); +- add_cfi_flash_device(1, 0x0c000000, SZ_64M, 0); +- vexpress_register_mmc(&mmci_plat); +- add_generic_device("smc911x", DEVICE_ID_DYNAMIC, NULL, 0x1a000000, +- 64 * 1024, IORESOURCE_MEM, NULL); +-} +- +-static void vexpress_ax_console_init(void) +-{ +- vexpress_register_uart(0); +- vexpress_register_uart(1); +- vexpress_register_uart(2); +- vexpress_register_uart(3); +-} +- +-struct vexpress_init vexpress_init_ax = { +- .core_init = vexpress_init, +- .mem_init = vexpress_ax_mem_init, +- .console_init = vexpress_ax_console_init, +- .devices_init = vexpress_ax_devices_init, +-}; +- +-static void vexpress_a9_legacy_mem_init(void) +-{ +- vexpress_a9_legacy_add_ddram(SZ_512M, SZ_512M); +-} +- +-static void vexpress_a9_legacy_devices_init(void) +-{ +- add_cfi_flash_device(0, 0x40000000, SZ_64M, 0); +- add_cfi_flash_device(1, 0x44000000, SZ_64M, 0); +- add_generic_device("smc911x", DEVICE_ID_DYNAMIC, NULL, 0x4e000000, +- 64 * 1024, IORESOURCE_MEM, NULL); +- vexpress_a9_legacy_register_mmc(&mmci_plat); +- armlinux_set_architecture(MACH_TYPE_VEXPRESS); +-} +- +-static void vexpress_a9_legacy_console_init(void) +-{ +- vexpress_a9_legacy_register_uart(0); +- vexpress_a9_legacy_register_uart(1); +- vexpress_a9_legacy_register_uart(2); +- vexpress_a9_legacy_register_uart(3); +-} +- +-struct vexpress_init vexpress_init_a9_legacy = { +- .core_init = vexpress_a9_legacy_init, +- .mem_init = vexpress_a9_legacy_mem_init, +- .console_init = vexpress_a9_legacy_console_init, +- .devices_init = vexpress_a9_legacy_devices_init, +-}; +- +-static int vexpress_mem_init(void) +-{ +- v2m_init->mem_init(); +- +- return 0; +-} +-mem_initcall(vexpress_mem_init); +- +-static int vexpress_devices_init(void) +-{ +- writel(1, v2m_sysreg_base + V2M_SYS_FLASH); +- v2m_init->devices_init(); +- +- devfs_add_partition("nor0", 0x00000, 0x40000, DEVFS_PARTITION_FIXED, "self"); +- devfs_add_partition("nor0", 0x40000, 0x20000, DEVFS_PARTITION_FIXED, "env0"); +- +- if (IS_ENABLED(CONFIG_DEFAULT_ENVIRONMENT_GENERIC)) +- defaultenv_append_directory(defaultenv_vexpress); +- +- return 0; +-} +-device_initcall(vexpress_devices_init); +- +-static int vexpress_console_init(void) +-{ +- v2m_init->console_init(); +- +- return 0; +-} +-console_initcall(vexpress_console_init); +- + static int vexpress_core_init(void) + { + char *hostname = "vexpress-unknown"; + + if (amba_is_arm_sp804(IOMEM(0x10011000))) { +- v2m_init = &vexpress_init_a9_legacy; ++ vexpress_a9_legacy_init(); + hostname = "vexpress-a9-legacy"; + } else { +- v2m_init = &vexpress_init_ax; ++ vexpress_init(); + if (cpu_is_cortex_a5()) + hostname = "vexpress-a5"; + else if (cpu_is_cortex_a7()) +@@ -144,10 +38,9 @@ static int vexpress_core_init(void) + hostname = "vexpress-a15"; + } + +- barebox_set_model("ARM Vexpress"); +- barebox_set_hostname(hostname); ++ writel(1, v2m_sysreg_base + V2M_SYS_FLASH); + +- v2m_init->core_init(); ++ barebox_set_hostname(hostname); + + return 0; + } +diff --git a/arch/arm/boards/vexpress/lowlevel.c b/arch/arm/boards/vexpress/lowlevel.c +index 204d29d8f098..0a226b295c2a 100644 +--- a/arch/arm/boards/vexpress/lowlevel.c ++++ b/arch/arm/boards/vexpress/lowlevel.c +@@ -11,12 +11,26 @@ + #include <asm/system_info.h> + #include <linux/amba/sp804.h> + +-void __naked barebox_arm_reset_vector(void) ++static inline void start_vexpress_common(void *internal_dt) + { ++ void *fdt = internal_dt - get_runtime_offset(); ++ + arm_cpu_lowlevel_init(); + + if (amba_is_arm_sp804(IOMEM(0x10011000))) +- barebox_arm_entry(0x60000000, SZ_512M, NULL); ++ barebox_arm_entry(0x60000000, SZ_512M, fdt); + else +- barebox_arm_entry(0x80000000, SZ_512M, NULL); ++ barebox_arm_entry(0x80000000, SZ_512M, fdt); ++} ++ ++extern char __dtb_vexpress_v2p_ca9_start[]; ++ENTRY_FUNCTION(start_vexpress_ca9, r0, r1, r2) ++{ ++ start_vexpress_common(__dtb_vexpress_v2p_ca9_start); ++} ++ ++extern char __dtb_vexpress_v2p_ca15_start[]; ++ENTRY_FUNCTION(start_vexpress_ca15, r0, r1, r2) ++{ ++ start_vexpress_common(__dtb_vexpress_v2p_ca15_start); + } +diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile +index d8abe452b40b..c5e48092d344 100644 +--- a/arch/arm/dts/Makefile ++++ b/arch/arm/dts/Makefile +@@ -87,6 +87,8 @@ pbl-dtb-$(CONFIG_MACH_TURRIS_OMNIA) += armada-385-turris-omnia-bb.dtb.o + pbl-dtb-$(CONFIG_MACH_UDOO) += imx6q-udoo.dtb.o + pbl-dtb-$(CONFIG_MACH_USI_TOPKICK) += kirkwood-topkick-bb.dtb.o + pbl-dtb-$(CONFIG_MACH_VARISCITE_MX6) += imx6q-var-custom.dtb.o ++pbl-dtb-$(CONFIG_MACH_VEXPRESS) += vexpress-v2p-ca9.dtb.o ++pbl-dtb-$(CONFIG_MACH_VEXPRESS) += vexpress-v2p-ca15.dtb.o + pbl-dtb-$(CONFIG_MACH_VSCOM_BALTOS) += am335x-baltos-minimal.dtb.o + pbl-dtb-$(CONFIG_MACH_WARP7) += imx7s-warp.dtb.o + pbl-dtb-$(CONFIG_MACH_VF610_TWR) += vf610-twr.dtb.o +diff --git a/arch/arm/dts/vexpress-v2p-ca15.dts b/arch/arm/dts/vexpress-v2p-ca15.dts +new file mode 100644 +index 000000000000..211eaccb6238 +--- /dev/null ++++ b/arch/arm/dts/vexpress-v2p-ca15.dts +@@ -0,0 +1,27 @@ ++#include <arm/vexpress-v2p-ca15_a7.dts> ++ ++/ { ++ barebox_environment { ++ compatible = "barebox,environment"; ++ device-path = &barebox_env; ++ }; ++ ++ smb@8000000 { ++ motherboard { ++ flash@0,00000000 { ++ #address-cells = <1>; ++ #size-cells = <1>; ++ ++ partition@0 { ++ label = "barebox"; ++ reg = <0x0 0x80000>; ++ }; ++ ++ barebox_env: partition@80000 { ++ label = "barebox-environment"; ++ reg = <0x80000 0x80000>; ++ }; ++ }; ++ }; ++ }; ++}; +diff --git a/arch/arm/dts/vexpress-v2p-ca9.dts b/arch/arm/dts/vexpress-v2p-ca9.dts +new file mode 100644 +index 000000000000..541840ae22dc +--- /dev/null ++++ b/arch/arm/dts/vexpress-v2p-ca9.dts +@@ -0,0 +1,27 @@ ++#include <arm/vexpress-v2p-ca9.dts> ++ ++/ { ++ barebox_environment { ++ compatible = "barebox,environment"; ++ device-path = &barebox_env; ++ }; ++ ++ smb@4000000 { ++ motherboard { ++ flash@0,00000000 { ++ #address-cells = <1>; ++ #size-cells = <1>; ++ ++ partition@0 { ++ label = "barebox"; ++ reg = <0x0 0x80000>; ++ }; ++ ++ barebox_env: partition@80000 { ++ label = "barebox-environment"; ++ reg = <0x80000 0x80000>; ++ }; ++ }; ++ }; ++ }; ++}; +diff --git a/arch/arm/mach-vexpress/Kconfig b/arch/arm/mach-vexpress/Kconfig +index 1d5e293602f6..aaa535f073a5 100644 +--- a/arch/arm/mach-vexpress/Kconfig ++++ b/arch/arm/mach-vexpress/Kconfig +@@ -10,6 +10,10 @@ choice + config MACH_VEXPRESS + bool "ARM Vexpress" + select RELOCATABLE ++ select HAVE_PBL_MULTI_IMAGES ++ select OFTREE ++ select OFDEVICE ++ select COMMON_CLK_OF_PROVIDER + + endchoice + +diff --git a/arch/arm/mach-vexpress/Makefile b/arch/arm/mach-vexpress/Makefile +index 74b4a0feb2e2..9a06e648a6f1 100644 +--- a/arch/arm/mach-vexpress/Makefile ++++ b/arch/arm/mach-vexpress/Makefile +@@ -1,3 +1,2 @@ + obj-y += v2m.o +-obj-y += devices.o + obj-y += reset.o +diff --git a/arch/arm/mach-vexpress/devices.c b/arch/arm/mach-vexpress/devices.c +deleted file mode 100644 +index 5b530119245d..000000000000 +--- a/arch/arm/mach-vexpress/devices.c ++++ /dev/null +@@ -1,83 +0,0 @@ +-/* +- * Copyright (C) 2013 Jean-Christophe PLAGNIOL-VILLARD <plagnio@jcrosoft.com> +- * +- * GPLv2 only +- */ +- +-#include <common.h> +- +-#include <linux/amba/bus.h> +- +-#include <asm/memory.h> +- +-#include <mach/devices.h> +- +-void vexpress_a9_legacy_add_ddram(u32 ddr0_size, u32 ddr1_size) +-{ +- arm_add_mem_device("ram0", 0x60000000, ddr0_size); +- +- if (ddr1_size) +- arm_add_mem_device("ram1", 0x80000000, ddr1_size); +-} +- +-void vexpress_a9_legacy_register_uart(unsigned id) +-{ +- resource_size_t start; +- +- switch (id) { +- case 0: +- start = 0x10009000; +- break; +- case 1: +- start = 0x1000a000; +- break; +- case 2: +- start = 0x1000b000; +- break; +- case 3: +- start = 0x1000c000; +- break; +- default: +- return; +- } +- amba_apb_device_add(NULL, "uart-pl011", id, start, 4096, NULL, 0); +-} +- +-void vexpress_a9_legacy_register_mmc(struct mmci_platform_data *plat) +-{ +- amba_apb_device_add(NULL, "mmci-pl18x", DEVICE_ID_SINGLE, 0x10005000, +- 4096, plat, 0); +-} +- +-void vexpress_add_ddram(u32 size) +-{ +- arm_add_mem_device("ram1", 0x80000000, size); +-} +- +-void vexpress_register_uart(unsigned id) +-{ +- resource_size_t start; +- +- switch (id) { +- case 0: +- start = 0x1c090000; +- break; +- case 1: +- start = 0x1c0a0000; +- break; +- case 2: +- start = 0x1c0b0000; +- break; +- case 3: +- start = 0x1c0c0000; +- break; +- default: +- return; +- } +- amba_apb_device_add(NULL, "uart-pl011", id, start, 4096, NULL, 0); +-} +- +-void vexpress_register_mmc(struct mmci_platform_data *plat) +-{ +- amba_apb_device_add(NULL, "mmci-pl18x", DEVICE_ID_SINGLE, 0x1c050000, 4096, plat, 0); +-} +diff --git a/arch/arm/mach-vexpress/include/mach/devices.h b/arch/arm/mach-vexpress/include/mach/devices.h +index 96d14005017e..bef8c8b94fb9 100644 +--- a/arch/arm/mach-vexpress/include/mach/devices.h ++++ b/arch/arm/mach-vexpress/include/mach/devices.h +@@ -9,18 +9,9 @@ + + #include <linux/amba/mmci.h> + +-void vexpress_a9_legacy_add_ddram(u32 ddr0_size, u32 ddr1_size); +-void vexpress_add_ddram(u32 size); +- +-void vexpress_a9_legacy_register_uart(unsigned id); +-void vexpress_register_uart(unsigned id); +- + void vexpress_a9_legacy_init(void); + void vexpress_init(void); + +-void vexpress_a9_legacy_register_mmc(struct mmci_platform_data *plat); +-void vexpress_register_mmc(struct mmci_platform_data *plat); +- + extern void *v2m_wdt_base; + extern void *v2m_sysreg_base; + +diff --git a/arch/arm/mach-vexpress/v2m.c b/arch/arm/mach-vexpress/v2m.c +index 025bbb17fc6e..35352628482c 100644 +--- a/arch/arm/mach-vexpress/v2m.c ++++ b/arch/arm/mach-vexpress/v2m.c +@@ -19,31 +19,6 @@ + + void __iomem *v2m_sysreg_base; + +-static const char *v2m_osc2_periphs[] = { +- "mb:mmci", "mmci-pl18x", /* PL180 MMCI */ +- "mb:uart0", "uart-pl0110", /* PL011 UART0 */ +- "mb:uart1", "uart-pl0111", /* PL011 UART1 */ +- "mb:uart2", "uart-pl0112", /* PL011 UART2 */ +- "mb:uart3", "uart-pl0113", /* PL011 UART3 */ +-}; +- +-static void v2m_clk_init(void) +-{ +- struct clk *clk; +- int i; +- +- clk = clk_fixed("dummy_apb_pclk", 0); +- clk_register_clkdev(clk, "apb_pclk", NULL); +- +- clk = clk_fixed("mb:sp804_clk", 1000000); +- clk_register_clkdev(clk, NULL, "sp804"); +- +- clk = clk_fixed("mb:osc2", 24000000); +- for (i = 0; i < ARRAY_SIZE(v2m_osc2_periphs); i++) +- clk_register_clkdev(clk, NULL, v2m_osc2_periphs[i]); +- +-} +- + static void v2m_sysctl_init(void __iomem *base) + { + u32 scctrl; +@@ -58,21 +33,11 @@ static void v2m_sysctl_init(void __iomem *base) + writel(scctrl, base + SCCTRL); + } + +-static void __init v2m_sp804_init(void __iomem *base) +-{ +- writel(0, base + TIMER_1_BASE + TIMER_CTRL); +- +- amba_apb_device_add(NULL, "sp804", DEVICE_ID_SINGLE, (resource_size_t)base, 4096, NULL, 0); +-} +- + void vexpress_a9_legacy_init(void) + { + v2m_wdt_base = IOMEM(0x1000f000); + v2m_sysreg_base = IOMEM(0x10001000); + v2m_sysctl_init(IOMEM(0x10001000)); +- v2m_clk_init(); +- +- v2m_sp804_init(IOMEM(0x10011000)); + } + + void vexpress_init(void) +@@ -80,7 +45,4 @@ void vexpress_init(void) + v2m_wdt_base = IOMEM(0x1c0f0000); + v2m_sysreg_base = IOMEM(0x1c020000); + v2m_sysctl_init(IOMEM(0x1c020000)); +- v2m_clk_init(); +- +- v2m_sp804_init(IOMEM(0x1c110000)); + } +diff --git a/images/Makefile b/images/Makefile +index 705c8ad03eda..5c4d99ac5add 100644 +--- a/images/Makefile ++++ b/images/Makefile +@@ -111,6 +111,7 @@ include $(srctree)/images/Makefile.omap3 + include $(srctree)/images/Makefile.rockchip + include $(srctree)/images/Makefile.socfpga + include $(srctree)/images/Makefile.tegra ++include $(srctree)/images/Makefile.vexpress + include $(srctree)/images/Makefile.at91 + + targets += $(image-y) pbl.lds barebox.x barebox.z +diff --git a/images/Makefile.vexpress b/images/Makefile.vexpress +new file mode 100644 +index 000000000000..0f12dc12a534 +--- /dev/null ++++ b/images/Makefile.vexpress +@@ -0,0 +1,11 @@ ++# ++# barebox image generation Makefile for VExpress images ++# ++ ++pblx-$(CONFIG_MACH_VEXPRESS) += start_vexpress_ca9 ++FILE_barebox-vexpress-ca9.img = start_vexpress_ca9.pblx ++image-$(CONFIG_MACH_VEXPRESS) += barebox-vexpress-ca9.img ++ ++pblx-$(CONFIG_MACH_VEXPRESS) += start_vexpress_ca15 ++FILE_barebox-vexpress-ca15.img = start_vexpress_ca15.pblx ++image-$(CONFIG_MACH_VEXPRESS) += barebox-vexpress-ca15.img |