From 2532fa8e1faf66f5ee0dc52a5deafaba74a96562 Mon Sep 17 00:00:00 2001 From: Robert Schwebel Date: Wed, 6 Sep 2017 10:40:11 +0200 Subject: platform-v7a: barebox: use reworked vexpress patches The vexpress patch series has recently been reworked. Use it. Signed-off-by: Robert Schwebel Reviewed-by: Rouven Czerwinski --- configs/platform-v7a/barebox-vexpress.config | 31 +- .../platform-v7a/config/images/vexpress-nor.config | 2 +- ...M-vexpress-always-build-relocatable-image.patch | 106 ++++ ...e-device-tree-provided-by-QEMU-if-availab.patch | 43 -- ...late-clock-providers-before-other-devices.patch | 27 + .../0002-vexpress-device-tree-support.patch | 78 --- .../0003-clk-versatile-add-basic-clocks.patch | 225 ++++++++ ...ess-add-bootstate-node-to-the-device-tree.patch | 90 ---- ...-sp804-silently-ignore-secondary-instaces.patch | 28 + ...se-add-funtion-to-copy-a-device-tree-node.patch | 50 -- ..._dump-don-t-use-flatten-unflatten-to-copy.patch | 34 -- .../0005-mci-mmci-add-DT-support.patch | 82 +++ ...s-switch-to-DT-probe-and-multi-image-buil.patch | 577 +++++++++++++++++++++ ...ee-add-fixup-handler-for-virtio-mmio-devi.patch | 62 --- .../0007-ARM-vexpress-regenerate-config.patch | 63 +++ .../0008-docs-add-qemu-vexpress.patch | 38 ++ ...e-device-tree-provided-by-QEMU-if-availab.patch | 50 ++ ...ess-add-bootstate-node-to-the-device-tree.patch | 90 ++++ ...se-add-funtion-to-copy-a-device-tree-node.patch | 50 ++ ...s-add-fixup-handler-for-virtio-mmio-devic.patch | 54 ++ ...201-ARM-imx-add-support-for-Udoo-Neo-full.patch | 4 +- ...2017.08.0-pengutronix-multi_v7-20170822-1.patch | 22 - ...2017.08.0-pengutronix-multi_v7-20170912-1.patch | 22 + .../platform-v7a/patches/barebox-2017.08.0/series | 34 +- configs/platform-v7a/rules/barebox-vexpress.make | 6 +- 25 files changed, 1459 insertions(+), 409 deletions(-) create mode 100644 configs/platform-v7a/patches/barebox-2017.08.0/0001-ARM-vexpress-always-build-relocatable-image.patch delete mode 100644 configs/platform-v7a/patches/barebox-2017.08.0/0001-vexpress-use-device-tree-provided-by-QEMU-if-availab.patch create mode 100644 configs/platform-v7a/patches/barebox-2017.08.0/0002-of-populate-clock-providers-before-other-devices.patch delete mode 100644 configs/platform-v7a/patches/barebox-2017.08.0/0002-vexpress-device-tree-support.patch create mode 100644 configs/platform-v7a/patches/barebox-2017.08.0/0003-clk-versatile-add-basic-clocks.patch delete mode 100644 configs/platform-v7a/patches/barebox-2017.08.0/0003-vexpress-add-bootstate-node-to-the-device-tree.patch create mode 100644 configs/platform-v7a/patches/barebox-2017.08.0/0004-clocksource-sp804-silently-ignore-secondary-instaces.patch delete mode 100644 configs/platform-v7a/patches/barebox-2017.08.0/0004-of-base-add-funtion-to-copy-a-device-tree-node.patch delete mode 100644 configs/platform-v7a/patches/barebox-2017.08.0/0005-commands-of_dump-don-t-use-flatten-unflatten-to-copy.patch create mode 100644 configs/platform-v7a/patches/barebox-2017.08.0/0005-mci-mmci-add-DT-support.patch create mode 100644 configs/platform-v7a/patches/barebox-2017.08.0/0006-ARM-vexpress-switch-to-DT-probe-and-multi-image-buil.patch delete mode 100644 configs/platform-v7a/patches/barebox-2017.08.0/0006-common-oftree-add-fixup-handler-for-virtio-mmio-devi.patch create mode 100644 configs/platform-v7a/patches/barebox-2017.08.0/0007-ARM-vexpress-regenerate-config.patch create mode 100644 configs/platform-v7a/patches/barebox-2017.08.0/0008-docs-add-qemu-vexpress.patch create mode 100644 configs/platform-v7a/patches/barebox-2017.08.0/0009-vexpress-use-device-tree-provided-by-QEMU-if-availab.patch create mode 100644 configs/platform-v7a/patches/barebox-2017.08.0/0010-vexpress-add-bootstate-node-to-the-device-tree.patch create mode 100644 configs/platform-v7a/patches/barebox-2017.08.0/0011-of-base-add-funtion-to-copy-a-device-tree-node.patch create mode 100644 configs/platform-v7a/patches/barebox-2017.08.0/0012-ARM-vexpress-add-fixup-handler-for-virtio-mmio-devic.patch delete mode 100644 configs/platform-v7a/patches/barebox-2017.08.0/0301-Release-2017.08.0-pengutronix-multi_v7-20170822-1.patch create mode 100644 configs/platform-v7a/patches/barebox-2017.08.0/0301-Release-2017.08.0-pengutronix-multi_v7-20170912-1.patch diff --git a/configs/platform-v7a/barebox-vexpress.config b/configs/platform-v7a/barebox-vexpress.config index 1a2d40a..41ac235 100644 --- a/configs/platform-v7a/barebox-vexpress.config +++ b/configs/platform-v7a/barebox-vexpress.config @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Barebox/arm 2017.08.0-20170822-1 Configuration +# Barebox/arm 2017.08.0-20170907-1 Configuration # CONFIG_ARM=y CONFIG_ARM_LINUX=y @@ -8,8 +8,6 @@ CONFIG_ARM_LINUX=y # # System Type # -CONFIG_BUILTIN_DTB=y -CONFIG_BUILTIN_DTB_NAME="vexpress-v2p-ca9" # CONFIG_ARCH_AT91 is not set # CONFIG_ARCH_BCM283X is not set # CONFIG_ARCH_CLPS711X is not set @@ -47,7 +45,7 @@ CONFIG_CPU_32v7=y # processor features # # CONFIG_BOOT_ENDIANNESS_SWITCH is not set -CONFIG_ARCH_TEXT_BASE=0x83f00000 +CONFIG_ARCH_TEXT_BASE=0x0 CONFIG_BAREBOX_MAX_IMAGE_SIZE=0xffffffff CONFIG_MACH_VEXPRESS=y CONFIG_AEABI=y @@ -93,20 +91,31 @@ CONFIG_NVVAR=y # memory layout # CONFIG_HAVE_PBL_IMAGE=y +CONFIG_HAVE_PBL_MULTI_IMAGES=y CONFIG_HAVE_IMAGE_COMPRESSION=y -# CONFIG_PBL_IMAGE is not set +CONFIG_PBL_IMAGE=y +CONFIG_PBL_MULTI_IMAGES=y +CONFIG_PBL_RELOCATABLE=y +CONFIG_IMAGE_COMPRESSION=y +# CONFIG_IMAGE_COMPRESSION_LZ4 is not set +CONFIG_IMAGE_COMPRESSION_LZO=y +# CONFIG_IMAGE_COMPRESSION_GZIP is not set +# CONFIG_IMAGE_COMPRESSION_XZKERN is not set +# CONFIG_IMAGE_COMPRESSION_NONE is not set CONFIG_MMU=y CONFIG_MMU_EARLY=y CONFIG_HAVE_CONFIGURABLE_TEXT_BASE=y -CONFIG_TEXT_BASE=0x83f00000 +CONFIG_TEXT_BASE=0x0 +CONFIG_BAREBOX_MAX_PBL_SIZE=0xffffffff CONFIG_BAREBOX_MAX_BARE_INIT_SIZE=0xffffffff +CONFIG_BAREBOX_MAX_PBLX_SIZE=0xffffffff CONFIG_STACK_SIZE=0x8000 -CONFIG_MALLOC_SIZE=0x4000000 +CONFIG_MALLOC_SIZE=0x0 # CONFIG_EXPERIMENTAL is not set # CONFIG_MALLOC_DLMALLOC is not set CONFIG_MALLOC_TLSF=y CONFIG_KALLSYMS=y -# CONFIG_RELOCATABLE is not set +CONFIG_RELOCATABLE=y # CONFIG_PANIC_HANG is not set CONFIG_PROMPT="vexpress: " CONFIG_BAUDRATE=115200 @@ -141,9 +150,10 @@ CONFIG_IMD=y CONFIG_CONSOLE_FULL=y # CONFIG_CONSOLE_SIMPLE is not set # CONFIG_CONSOLE_NONE is not set -CONFIG_CONSOLE_ACTIVATE_FIRST=y -# CONFIG_CONSOLE_ACTIVATE_ALL is not set +# CONFIG_CONSOLE_ACTIVATE_FIRST is not set +CONFIG_CONSOLE_ACTIVATE_ALL=y # CONFIG_CONSOLE_ACTIVATE_NONE is not set +CONFIG_PBL_CONSOLE=y # CONFIG_CONSOLE_RATP is not set CONFIG_PARTITION=y CONFIG_PARTITION_DISK=y @@ -454,6 +464,7 @@ CONFIG_MCI_MMCI=y CONFIG_HAVE_CLK=y CONFIG_CLKDEV_LOOKUP=y CONFIG_COMMON_CLK=y +CONFIG_COMMON_CLK_OF_PROVIDER=y CONFIG_AMBA_SP804=y CONFIG_CLOCKSOURCE_DUMMY_RATE=1000 diff --git a/configs/platform-v7a/config/images/vexpress-nor.config b/configs/platform-v7a/config/images/vexpress-nor.config index 38c4464..7711851 100644 --- a/configs/platform-v7a/config/images/vexpress-nor.config +++ b/configs/platform-v7a/config/images/vexpress-nor.config @@ -3,7 +3,7 @@ image @IMAGE@ { partition-table = false } partition barebox { - image = barebox.bin-vexpress + image = barebox-vexpress-ca9.img offset = 0 in-partition-table = false } diff --git a/configs/platform-v7a/patches/barebox-2017.08.0/0001-ARM-vexpress-always-build-relocatable-image.patch b/configs/platform-v7a/patches/barebox-2017.08.0/0001-ARM-vexpress-always-build-relocatable-image.patch new file mode 100644 index 0000000..de791cd --- /dev/null +++ b/configs/platform-v7a/patches/barebox-2017.08.0/0001-ARM-vexpress-always-build-relocatable-image.patch @@ -0,0 +1,106 @@ +From: Lucas Stach +Date: Fri, 1 Sep 2017 11:59:15 +0200 +Subject: [PATCH] ARM: vexpress: always build relocatable image + +This allows to make more space available for the malloc area and +allows us to drop the special CA9 defconfig, which had a different +text base. + +Signed-off-by: Lucas Stach +--- + arch/arm/configs/vexpress_ca9_defconfig | 52 --------------------------------- + arch/arm/configs/vexpress_defconfig | 1 + + arch/arm/mach-vexpress/Kconfig | 3 +- + 3 files changed, 3 insertions(+), 53 deletions(-) + delete mode 100644 arch/arm/configs/vexpress_ca9_defconfig + +diff --git a/arch/arm/configs/vexpress_ca9_defconfig b/arch/arm/configs/vexpress_ca9_defconfig +deleted file mode 100644 +index a1c42512d205..000000000000 +--- a/arch/arm/configs/vexpress_ca9_defconfig ++++ /dev/null +@@ -1,52 +0,0 @@ +-CONFIG_ARCH_VEXPRESS=y +-CONFIG_AEABI=y +-CONFIG_ARM_OPTIMZED_STRING_FUNCTIONS=y +-CONFIG_TEXT_BASE=0x63f00000 +-CONFIG_MALLOC_TLSF=y +-CONFIG_PROMPT="vexpress: " +-CONFIG_GLOB=y +-CONFIG_HUSH_FANCY_PROMPT=y +-CONFIG_CMDLINE_EDITING=y +-CONFIG_AUTO_COMPLETE=y +-CONFIG_MENU=y +-CONFIG_BOOTM_SHOW_TYPE=y +-CONFIG_BOOTM_VERBOSE=y +-CONFIG_BOOTM_INITRD=y +-CONFIG_PARTITION=y +-CONFIG_DEFAULT_ENVIRONMENT_GENERIC=y +-CONFIG_LONGHELP=y +-CONFIG_CMD_MEMINFO=y +-# CONFIG_CMD_BOOTU is not set +-CONFIG_CMD_GO=y +-CONFIG_CMD_LOADB=y +-CONFIG_CMD_RESET=y +-CONFIG_CMD_UIMAGE=y +-CONFIG_CMD_PARTITION=y +-CONFIG_CMD_EXPORT=y +-CONFIG_CMD_PRINTENV=y +-CONFIG_CMD_SAVEENV=y +-CONFIG_CMD_UNCOMPRESS=y +-CONFIG_CMD_SLEEP=y +-CONFIG_CMD_DHCP=y +-CONFIG_CMD_PING=y +-CONFIG_CMD_TFTP=y +-CONFIG_CMD_ECHO_E=y +-CONFIG_CMD_EDIT=y +-CONFIG_CMD_LOGIN=y +-CONFIG_CMD_MENU=y +-CONFIG_CMD_MENU_MANAGEMENT=y +-CONFIG_CMD_PASSWD=y +-CONFIG_CMD_READLINE=y +-CONFIG_CMD_TIMEOUT=y +-CONFIG_CMD_CLK=y +-CONFIG_CMD_OFTREE=y +-CONFIG_NET=y +-CONFIG_NET_NFS=y +-CONFIG_NET_NETCONSOLE=y +-CONFIG_NET_RESOLV=y +-CONFIG_SERIAL_AMBA_PL011=y +-CONFIG_DRIVER_NET_SMC91111=y +-# CONFIG_SPI is not set +-CONFIG_FS_TFTP=y +-CONFIG_DIGEST_SHA1_GENERIC=y +-CONFIG_DIGEST_SHA256_GENERIC=y +diff --git a/arch/arm/configs/vexpress_defconfig b/arch/arm/configs/vexpress_defconfig +index 94fe1eaa72b1..e31da4a8c668 100644 +--- a/arch/arm/configs/vexpress_defconfig ++++ b/arch/arm/configs/vexpress_defconfig +@@ -1,6 +1,7 @@ + CONFIG_ARCH_VEXPRESS=y + CONFIG_AEABI=y + CONFIG_ARM_OPTIMZED_STRING_FUNCTIONS=y ++CONFIG_MALLOC_SIZE=0x0 + CONFIG_MALLOC_TLSF=y + CONFIG_PROMPT="vexpress: " + CONFIG_GLOB=y +diff --git a/arch/arm/mach-vexpress/Kconfig b/arch/arm/mach-vexpress/Kconfig +index bf1dd5a79150..1d5e293602f6 100644 +--- a/arch/arm/mach-vexpress/Kconfig ++++ b/arch/arm/mach-vexpress/Kconfig +@@ -2,13 +2,14 @@ if ARCH_VEXPRESS + + config ARCH_TEXT_BASE + hex +- default 0x83f00000 ++ default 0x0 + + choice + prompt "ARM Board type" + + config MACH_VEXPRESS + bool "ARM Vexpress" ++ select RELOCATABLE + + endchoice + diff --git a/configs/platform-v7a/patches/barebox-2017.08.0/0001-vexpress-use-device-tree-provided-by-QEMU-if-availab.patch b/configs/platform-v7a/patches/barebox-2017.08.0/0001-vexpress-use-device-tree-provided-by-QEMU-if-availab.patch deleted file mode 100644 index a5fdc9c..0000000 --- a/configs/platform-v7a/patches/barebox-2017.08.0/0001-vexpress-use-device-tree-provided-by-QEMU-if-availab.patch +++ /dev/null @@ -1,43 +0,0 @@ -From: Michael Olbrich -Date: Sat, 10 Sep 2016 17:40:56 +0200 -Subject: [PATCH] vexpress: use device tree provided by QEMU if available - -Signed-off-by: Michael Olbrich ---- - arch/arm/boards/vexpress/lowlevel.c | 17 +++++++++++++++-- - 1 file changed, 15 insertions(+), 2 deletions(-) - -diff --git a/arch/arm/boards/vexpress/lowlevel.c b/arch/arm/boards/vexpress/lowlevel.c -index 204d29d8f098..7ed07a1e4134 100644 ---- a/arch/arm/boards/vexpress/lowlevel.c -+++ b/arch/arm/boards/vexpress/lowlevel.c -@@ -9,14 +9,27 @@ - #include - #include - #include -+#include - #include - - void __naked barebox_arm_reset_vector(void) - { -+ unsigned long membase; -+ void *boarddata; -+ - arm_cpu_lowlevel_init(); - - if (amba_is_arm_sp804(IOMEM(0x10011000))) -- barebox_arm_entry(0x60000000, SZ_512M, NULL); -+ membase = 0x60000000; -+ else -+ membase = 0x80000000; -+ -+ /* QEMU may put a dtb at the bare address */ -+ if (IS_ENABLED(CONFIG_OFDEVICE) && -+ get_unaligned_be32((void*)membase) == FDT_MAGIC) -+ boarddata = (void*)membase; - else -- barebox_arm_entry(0x80000000, SZ_512M, NULL); -+ boarddata = NULL; -+ -+ barebox_arm_entry(membase, SZ_512M, boarddata); - } diff --git a/configs/platform-v7a/patches/barebox-2017.08.0/0002-of-populate-clock-providers-before-other-devices.patch b/configs/platform-v7a/patches/barebox-2017.08.0/0002-of-populate-clock-providers-before-other-devices.patch new file mode 100644 index 0000000..042f82c --- /dev/null +++ b/configs/platform-v7a/patches/barebox-2017.08.0/0002-of-populate-clock-providers-before-other-devices.patch @@ -0,0 +1,27 @@ +From: Lucas Stach +Date: Fri, 1 Sep 2017 17:52:18 +0200 +Subject: [PATCH] of: populate clock providers before other devices + +Clocks are a basic resource, which may be needed early by other +devices or even the bus driver (as is the case with the ARM AMBA +bus). Register them before populating other devices. + +Signed-off-by: Lucas Stach +--- + drivers/of/base.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/of/base.c b/drivers/of/base.c +index ea330d131012..1649148dc0c6 100644 +--- a/drivers/of/base.c ++++ b/drivers/of/base.c +@@ -1915,8 +1915,8 @@ int of_probe(void) + if (memory) + of_add_memory(memory, false); + +- of_platform_populate(root_node, of_default_bus_match_table, NULL); + of_clk_init(root_node, NULL); ++ of_platform_populate(root_node, of_default_bus_match_table, NULL); + + return 0; + } diff --git a/configs/platform-v7a/patches/barebox-2017.08.0/0002-vexpress-device-tree-support.patch b/configs/platform-v7a/patches/barebox-2017.08.0/0002-vexpress-device-tree-support.patch deleted file mode 100644 index fc7ad48..0000000 --- a/configs/platform-v7a/patches/barebox-2017.08.0/0002-vexpress-device-tree-support.patch +++ /dev/null @@ -1,78 +0,0 @@ -From: Michael Olbrich -Date: Sat, 10 Sep 2016 17:51:36 +0200 -Subject: [PATCH] vexpress: device tree support - -Signed-off-by: Michael Olbrich ---- - arch/arm/boards/vexpress/init.c | 16 ++++++++++------ - arch/arm/dts/vexpress-v2p-ca9.dts | 27 +++++++++++++++++++++++++++ - 2 files changed, 37 insertions(+), 6 deletions(-) - create mode 100644 arch/arm/dts/vexpress-v2p-ca9.dts - -diff --git a/arch/arm/boards/vexpress/init.c b/arch/arm/boards/vexpress/init.c -index f89dff939231..68ebbfab2633 100644 ---- a/arch/arm/boards/vexpress/init.c -+++ b/arch/arm/boards/vexpress/init.c -@@ -71,10 +71,12 @@ static void vexpress_a9_legacy_mem_init(void) - - 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); -+ if (!IS_ENABLED(CONFIG_OFDEVICE)) { -+ 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); - } -@@ -107,8 +109,10 @@ 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_OFDEVICE)) { -+ 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); -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 -+ -+/ { -+ 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/configs/platform-v7a/patches/barebox-2017.08.0/0003-clk-versatile-add-basic-clocks.patch b/configs/platform-v7a/patches/barebox-2017.08.0/0003-clk-versatile-add-basic-clocks.patch new file mode 100644 index 0000000..c992c53 --- /dev/null +++ b/configs/platform-v7a/patches/barebox-2017.08.0/0003-clk-versatile-add-basic-clocks.patch @@ -0,0 +1,225 @@ +From: Lucas Stach +Date: Fri, 1 Sep 2017 18:47:47 +0200 +Subject: [PATCH] clk: versatile: add basic clocks + +This adds the necessary basic clocks used on the ARM versatile +platforms. + +Signed-off-by: Lucas Stach +--- + drivers/clk/Makefile | 1 + + drivers/clk/vexpress/Makefile | 1 + + drivers/clk/vexpress/clk-sp810.c | 137 ++++++++++++++++++++++++++++++++ + drivers/clk/vexpress/clk-vexpress-osc.c | 42 ++++++++++ + 4 files changed, 181 insertions(+) + create mode 100644 drivers/clk/vexpress/Makefile + create mode 100644 drivers/clk/vexpress/clk-sp810.c + create mode 100644 drivers/clk/vexpress/clk-vexpress-osc.c + +diff --git a/drivers/clk/Makefile b/drivers/clk/Makefile +index b5abe1cdf5db..a36a8db03bdb 100644 +--- a/drivers/clk/Makefile ++++ b/drivers/clk/Makefile +@@ -12,3 +12,4 @@ obj-$(CONFIG_CLK_SOCFPGA) += socfpga/ + obj-$(CONFIG_MACH_MIPS_ATH79) += clk-ar933x.o + obj-$(CONFIG_ARCH_IMX) += imx/ + obj-$(CONFIG_COMMON_CLK_AT91) += at91/ ++obj-$(CONFIG_MACH_VEXPRESS) += vexpress/ +diff --git a/drivers/clk/vexpress/Makefile b/drivers/clk/vexpress/Makefile +new file mode 100644 +index 000000000000..c6869bac8365 +--- /dev/null ++++ b/drivers/clk/vexpress/Makefile +@@ -0,0 +1 @@ ++obj-y += clk-vexpress-osc.o clk-sp810.o +diff --git a/drivers/clk/vexpress/clk-sp810.c b/drivers/clk/vexpress/clk-sp810.c +new file mode 100644 +index 000000000000..dc57b74e0848 +--- /dev/null ++++ b/drivers/clk/vexpress/clk-sp810.c +@@ -0,0 +1,137 @@ ++/* ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * Copyright (C) 2013 ARM Limited ++ */ ++ ++//#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++/* sysctl registers offset */ ++#define SCCTRL 0x000 ++#define SCCTRL_TIMERENnSEL_SHIFT(n) (15 + ((n) * 2)) ++ ++struct clk_sp810; ++ ++struct clk_sp810_timerclken { ++ struct clk hw; ++ struct clk_sp810 *sp810; ++ int channel; ++}; ++ ++static inline struct clk_sp810_timerclken * ++to_clk_sp810_timerclken(struct clk *clk) ++{ ++ return container_of(clk, struct clk_sp810_timerclken, hw); ++} ++ ++struct clk_sp810 { ++ struct device_node *node; ++ void __iomem *base; ++ struct clk_sp810_timerclken timerclken[4]; ++}; ++ ++static int clk_sp810_timerclken_get_parent(struct clk *hw) ++{ ++ struct clk_sp810_timerclken *timerclken = to_clk_sp810_timerclken(hw); ++ u32 val = readl(timerclken->sp810->base + SCCTRL); ++ ++ return !!(val & (1 << SCCTRL_TIMERENnSEL_SHIFT(timerclken->channel))); ++} ++ ++static int clk_sp810_timerclken_set_parent(struct clk *hw, u8 index) ++{ ++ struct clk_sp810_timerclken *timerclken = to_clk_sp810_timerclken(hw); ++ struct clk_sp810 *sp810 = timerclken->sp810; ++ u32 val, shift = SCCTRL_TIMERENnSEL_SHIFT(timerclken->channel); ++ ++ if (WARN_ON(index > 1)) ++ return -EINVAL; ++ ++ val = readl(sp810->base + SCCTRL); ++ val &= ~(1 << shift); ++ val |= index << shift; ++ writel(val, sp810->base + SCCTRL); ++ ++ return 0; ++} ++ ++static const struct clk_ops clk_sp810_timerclken_ops = { ++ .get_parent = clk_sp810_timerclken_get_parent, ++ .set_parent = clk_sp810_timerclken_set_parent, ++}; ++ ++static struct clk *clk_sp810_timerclken_of_get(struct of_phandle_args *clkspec, ++ void *data) ++{ ++ struct clk_sp810 *sp810 = data; ++ ++ if (WARN_ON(clkspec->args_count != 1 || ++ clkspec->args[0] >= ARRAY_SIZE(sp810->timerclken))) ++ return NULL; ++ ++ return &sp810->timerclken[clkspec->args[0]].hw; ++} ++ ++static void clk_sp810_of_setup(struct device_node *node) ++{ ++ struct clk_sp810 *sp810 = xzalloc(sizeof(*sp810)); ++ const char *parent_names[2]; ++ int num = ARRAY_SIZE(parent_names); ++ char name[12]; ++ static int instance; ++ int i; ++ bool deprecated; ++ ++ if (!sp810) ++ return; ++ ++ if (of_clk_parent_fill(node, parent_names, num) != num) { ++ pr_warn("Failed to obtain parent clocks for SP810!\n"); ++ kfree(sp810); ++ return; ++ } ++ ++ sp810->node = node; ++ sp810->base = of_iomap(node, 0); ++ ++ deprecated = !of_find_property(node, "assigned-clock-parents", NULL); ++ ++ for (i = 0; i < ARRAY_SIZE(sp810->timerclken); i++) { ++ snprintf(name, sizeof(name), "sp810_%d_%d", instance, i); ++ ++ sp810->timerclken[i].sp810 = sp810; ++ sp810->timerclken[i].channel = i; ++ sp810->timerclken[i].hw.name = strdup(name); ++ sp810->timerclken[i].hw.parent_names = parent_names; ++ sp810->timerclken[i].hw.num_parents = num; ++ sp810->timerclken[i].hw.ops = &clk_sp810_timerclken_ops; ++ ++ /* ++ * If DT isn't setting the parent, force it to be ++ * the 1 MHz clock without going through the framework. ++ * We do this before clk_register() so that it can determine ++ * the parent and setup the tree properly. ++ */ ++ if (deprecated) ++ clk_sp810_timerclken_set_parent(&sp810->timerclken[i].hw, 1); ++ ++ clk_register(&sp810->timerclken[i].hw); ++ } ++ ++ of_clk_add_provider(node, clk_sp810_timerclken_of_get, sp810); ++ instance++; ++} ++CLK_OF_DECLARE(sp810, "arm,sp810", clk_sp810_of_setup); +diff --git a/drivers/clk/vexpress/clk-vexpress-osc.c b/drivers/clk/vexpress/clk-vexpress-osc.c +new file mode 100644 +index 000000000000..c0d6e6066ecd +--- /dev/null ++++ b/drivers/clk/vexpress/clk-vexpress-osc.c +@@ -0,0 +1,42 @@ ++/* ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ */ ++ ++#include ++#include ++#include ++#include ++ ++/* ++ * This represents the vexpress-osc as a fixed clock, which isn't really ++ * accurate, as this clock allows rate changes in real implementations. As those ++ * would need access to the config bus, a whole lot more infrastructure would be ++ * needed. We skip this complication for now, as we don't have a use-case, yet. ++ */ ++static int vexpress_osc_setup(struct device_node *node) ++{ ++ struct clk *clk; ++ u32 range[2]; ++ const char *name; ++ ++ if (of_property_read_u32_array(node, "freq-range", range, ++ ARRAY_SIZE(range))) ++ return -EINVAL; ++ ++ if (of_property_read_string(node, "clock-output-names", &name)) ++ return -EINVAL; ++ ++ clk = clk_fixed(name, range[0]); ++ if (IS_ERR(clk)) ++ return PTR_ERR(clk); ++ ++ return of_clk_add_provider(node, of_clk_src_simple_get, clk); ++} ++CLK_OF_DECLARE(vexpress_osc, "arm,vexpress-osc", vexpress_osc_setup); diff --git a/configs/platform-v7a/patches/barebox-2017.08.0/0003-vexpress-add-bootstate-node-to-the-device-tree.patch b/configs/platform-v7a/patches/barebox-2017.08.0/0003-vexpress-add-bootstate-node-to-the-device-tree.patch deleted file mode 100644 index 27cfa0b..0000000 --- a/configs/platform-v7a/patches/barebox-2017.08.0/0003-vexpress-add-bootstate-node-to-the-device-tree.patch +++ /dev/null @@ -1,90 +0,0 @@ -From: Michael Olbrich -Date: Sat, 10 Sep 2016 17:54:20 +0200 -Subject: [PATCH] vexpress: add bootstate node to the device tree - -Signed-off-by: Michael Olbrich ---- - arch/arm/dts/vexpress-v2p-ca9.dts | 63 +++++++++++++++++++++++++++++++++++++++ - 1 file changed, 63 insertions(+) - -diff --git a/arch/arm/dts/vexpress-v2p-ca9.dts b/arch/arm/dts/vexpress-v2p-ca9.dts -index 541840ae22dc..d0975330f205 100644 ---- a/arch/arm/dts/vexpress-v2p-ca9.dts -+++ b/arch/arm/dts/vexpress-v2p-ca9.dts -@@ -6,6 +6,10 @@ - device-path = &barebox_env; - }; - -+ aliases { -+ state = &state; -+ }; -+ - smb@4000000 { - motherboard { - flash@0,00000000 { -@@ -21,6 +25,65 @@ - label = "barebox-environment"; - reg = <0x80000 0x80000>; - }; -+ -+ state_storage: partition@100000 { -+ label = "barebox-state"; -+ reg = <0x100000 0x100000>; -+ }; -+ }; -+ }; -+ }; -+ -+ /* State: mutable part */ -+ state: state { -+ magic = <0x4d433230>; -+ compatible = "barebox,state"; -+ backend-type = "raw"; -+ backend = <&state_storage>; -+ backend-stridesize = <0x40>; -+ backend-storage-type = "circular"; -+ #address-cells = <1>; -+ #size-cells = <1>; -+ -+ bootstate { -+ #address-cells = <1>; -+ #size-cells = <1>; -+ -+ system0 { /* the node's name here must match the subnode's name in the 'bootstate' node */ -+ #address-cells = <1>; -+ #size-cells = <1>; -+ -+ remaining_attempts@0 { -+ reg = <0x0 0x4>; -+ type = "uint32"; -+ default = <3>; -+ }; -+ priority@4 { -+ reg = <0x4 0x4>; -+ type = "uint32"; -+ default = <20>; -+ }; -+ }; -+ -+ system1 { /* the node's name here must match the subnode's name in the 'bootstate' node */ -+ #address-cells = <1>; -+ #size-cells = <1>; -+ -+ remaining_attempts@8 { -+ reg = <0x8 0x4>; -+ type = "uint32"; -+ default = <3>; -+ }; -+ priority@c { -+ reg = <0xC 0x4>; -+ type = "uint32"; -+ default = <20>; -+ }; -+ }; -+ -+ last_chosen@10 { -+ reg = <0x10 0x4>; -+ type = "uint32"; - }; - }; - }; diff --git a/configs/platform-v7a/patches/barebox-2017.08.0/0004-clocksource-sp804-silently-ignore-secondary-instaces.patch b/configs/platform-v7a/patches/barebox-2017.08.0/0004-clocksource-sp804-silently-ignore-secondary-instaces.patch new file mode 100644 index 0000000..e61865e --- /dev/null +++ b/configs/platform-v7a/patches/barebox-2017.08.0/0004-clocksource-sp804-silently-ignore-secondary-instaces.patch @@ -0,0 +1,28 @@ +From: Lucas Stach +Date: Fri, 1 Sep 2017 18:54:54 +0200 +Subject: [PATCH] clocksource: sp804: silently ignore secondary instaces + +When probing from an upstream DT, we don't always have influence on +how many timer instances are enabled. Just use the first one and +silently skip the other instances. + +Signed-off-by: Lucas Stach +--- + drivers/clocksource/amba-sp804.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/drivers/clocksource/amba-sp804.c b/drivers/clocksource/amba-sp804.c +index c5ad9947cd96..66e3988b4cf8 100644 +--- a/drivers/clocksource/amba-sp804.c ++++ b/drivers/clocksource/amba-sp804.c +@@ -35,8 +35,8 @@ static int sp804_probe(struct amba_device *dev, const struct amba_id *id) + int ret; + + if (sp804_base) { +- dev_err(&dev->dev, "single instance driver\n"); +- return -EBUSY; ++ dev_dbg(&dev->dev, "skipping secondary instance\n"); ++ return 0; + } + + sp804_clk = clk_get(&dev->dev, NULL); diff --git a/configs/platform-v7a/patches/barebox-2017.08.0/0004-of-base-add-funtion-to-copy-a-device-tree-node.patch b/configs/platform-v7a/patches/barebox-2017.08.0/0004-of-base-add-funtion-to-copy-a-device-tree-node.patch deleted file mode 100644 index af6cc6c..0000000 --- a/configs/platform-v7a/patches/barebox-2017.08.0/0004-of-base-add-funtion-to-copy-a-device-tree-node.patch +++ /dev/null @@ -1,50 +0,0 @@ -From: Michael Olbrich -Date: Tue, 13 Sep 2016 21:17:12 +0200 -Subject: [PATCH] of: base: add funtion to copy a device tree node - -Signed-off-by: Michael Olbrich ---- - drivers/of/base.c | 16 ++++++++++++++++ - include/of.h | 2 ++ - 2 files changed, 18 insertions(+) - -diff --git a/drivers/of/base.c b/drivers/of/base.c -index ea330d131012..b6e90f2adb09 100644 ---- a/drivers/of/base.c -+++ b/drivers/of/base.c -@@ -1965,6 +1965,22 @@ out: - return dn; - } - -+struct device_node *of_copy_node(struct device_node *parent, const struct device_node *other) -+{ -+ struct device_node *np, *child; -+ struct property *pp; -+ -+ np = of_new_node(parent, other->name); -+ -+ list_for_each_entry(pp, &other->properties, list) -+ of_new_property(np, pp->name, pp->value, pp->length); -+ -+ for_each_child_of_node(other, child) -+ of_copy_node(np, child); -+ -+ return np; -+} -+ - void of_delete_node(struct device_node *node) - { - struct device_node *n, *nt; -diff --git a/include/of.h b/include/of.h -index 0ba73f197f28..c1136708ce6c 100644 ---- a/include/of.h -+++ b/include/of.h -@@ -144,6 +144,8 @@ extern struct device_node *of_new_node(struct device_node *parent, - const char *name); - extern struct device_node *of_create_node(struct device_node *root, - const char *path); -+extern struct device_node *of_copy_node(struct device_node *parent, -+ const struct device_node *other); - extern void of_delete_node(struct device_node *node); - - extern int of_machine_is_compatible(const char *compat); diff --git a/configs/platform-v7a/patches/barebox-2017.08.0/0005-commands-of_dump-don-t-use-flatten-unflatten-to-copy.patch b/configs/platform-v7a/patches/barebox-2017.08.0/0005-commands-of_dump-don-t-use-flatten-unflatten-to-copy.patch deleted file mode 100644 index 8dc2da3..0000000 --- a/configs/platform-v7a/patches/barebox-2017.08.0/0005-commands-of_dump-don-t-use-flatten-unflatten-to-copy.patch +++ /dev/null @@ -1,34 +0,0 @@ -From: Michael Olbrich -Date: Tue, 13 Sep 2016 21:18:15 +0200 -Subject: [PATCH] commands: of_dump: don't use flatten/unflatten to copy the - device tree - -Signed-off-by: Michael Olbrich ---- - commands/of_dump.c | 13 +------------ - 1 file changed, 1 insertion(+), 12 deletions(-) - -diff --git a/commands/of_dump.c b/commands/of_dump.c -index 7bec0b925eee..ac5014e1fff8 100644 ---- a/commands/of_dump.c -+++ b/commands/of_dump.c -@@ -97,18 +97,7 @@ static int do_of_dump(int argc, char *argv[]) - - if (fix) { - /* create a copy of internal devicetree */ -- void *fdt; -- fdt = of_flatten_dtb(root); -- root = of_unflatten_dtb(fdt); -- -- free(fdt); -- -- if (IS_ERR(root)) { -- ret = PTR_ERR(root); -- goto out; -- } -- -- of_free = root; -+ of_free = root = of_copy_node(NULL, root); - } - } - diff --git a/configs/platform-v7a/patches/barebox-2017.08.0/0005-mci-mmci-add-DT-support.patch b/configs/platform-v7a/patches/barebox-2017.08.0/0005-mci-mmci-add-DT-support.patch new file mode 100644 index 0000000..2564644 --- /dev/null +++ b/configs/platform-v7a/patches/barebox-2017.08.0/0005-mci-mmci-add-DT-support.patch @@ -0,0 +1,82 @@ +From: Lucas Stach +Date: Mon, 4 Sep 2017 11:43:38 +0200 +Subject: [PATCH] mci: mmci: add DT support + +Just adds the minimal implementation to fill platform_data from +the DT properties with Linux binding. + +Signed-off-by: Lucas Stach +--- + drivers/mci/mmci.c | 39 ++++++++++++++++++++++++++++++++++++--- + 1 file changed, 36 insertions(+), 3 deletions(-) + +diff --git a/drivers/mci/mmci.c b/drivers/mci/mmci.c +index 7489ee03a13c..f45557d4f7be 100644 +--- a/drivers/mci/mmci.c ++++ b/drivers/mci/mmci.c +@@ -532,9 +532,37 @@ static void mci_set_ios(struct mci_host *mci, struct mci_ios *ios) + udelay(CLK_CHANGE_DELAY); + } + ++static int mmci_of_parse(struct device_node *np, ++ struct mmci_platform_data *plat) ++{ ++ if (!IS_ENABLED(CONFIG_OFDEVICE)) ++ return 0; ++ ++ if (of_get_property(np, "st,sig-dir-dat0", NULL)) ++ plat->sigdir |= MCI_ST_DATA0DIREN; ++ if (of_get_property(np, "st,sig-dir-dat2", NULL)) ++ plat->sigdir |= MCI_ST_DATA2DIREN; ++ if (of_get_property(np, "st,sig-dir-dat31", NULL)) ++ plat->sigdir |= MCI_ST_DATA31DIREN; ++ if (of_get_property(np, "st,sig-dir-dat74", NULL)) ++ plat->sigdir |= MCI_ST_DATA74DIREN; ++ if (of_get_property(np, "st,sig-dir-cmd", NULL)) ++ plat->sigdir |= MCI_ST_CMDDIREN; ++ if (of_get_property(np, "st,sig-pin-fbclk", NULL)) ++ plat->sigdir |= MCI_ST_FBCLKEN; ++ ++ if (of_get_property(np, "mmc-cap-mmc-highspeed", NULL)) ++ plat->capabilities |= MMC_CAP_MMC_HIGHSPEED; ++ if (of_get_property(np, "mmc-cap-sd-highspeed", NULL)) ++ plat->capabilities |= MMC_CAP_SD_HIGHSPEED; ++ ++ return 0; ++} ++ + static int mmci_probe(struct amba_device *dev, const struct amba_id *id) + { + struct device_d *hw_dev = &dev->dev; ++ struct device_node *np = hw_dev->device_node; + struct mmci_platform_data *plat = hw_dev->platform_data; + struct variant_data *variant = id->data; + u32 sdi_u32; +@@ -542,11 +570,16 @@ static int mmci_probe(struct amba_device *dev, const struct amba_id *id) + struct clk *clk; + int ret; + +- if (!plat) { +- dev_err(hw_dev, "missing platform data\n"); ++ if (!plat && !np) { ++ dev_err(hw_dev, "missing platform data or DT node\n"); + return -EINVAL; + } + ++ if (!plat) ++ plat = xzalloc(sizeof(*plat)); ++ ++ mmci_of_parse(np, plat); ++ + host = xzalloc(sizeof(*host)); + + host->base = amba_get_mem_region(dev); +@@ -625,7 +658,7 @@ static int mmci_probe(struct amba_device *dev, const struct amba_id *id) + host->mci.max_req_size = (1 << variant->datalength_bits) - 1; + + host->mci.host_caps = plat->capabilities; +- host->mci.voltages = plat->ocr_mask; ++ host->mci.voltages = MMC_VDD_32_33 | MMC_VDD_33_34 | plat->ocr_mask; + + mci_register(&host->mci); + 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 +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 +--- + 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 + #include + #include +-#include + #include + #include + #include + #include + #include +-#include +- +-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 + #include + +-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 ++ ++/ { ++ 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 ++ ++/ { ++ 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 +- * +- * GPLv2 only +- */ +- +-#include +- +-#include +- +-#include +- +-#include +- +-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 + +-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 diff --git a/configs/platform-v7a/patches/barebox-2017.08.0/0006-common-oftree-add-fixup-handler-for-virtio-mmio-devi.patch b/configs/platform-v7a/patches/barebox-2017.08.0/0006-common-oftree-add-fixup-handler-for-virtio-mmio-devi.patch deleted file mode 100644 index 8b64d2f..0000000 --- a/configs/platform-v7a/patches/barebox-2017.08.0/0006-common-oftree-add-fixup-handler-for-virtio-mmio-devi.patch +++ /dev/null @@ -1,62 +0,0 @@ -From: Michael Olbrich -Date: Tue, 13 Sep 2016 21:20:10 +0200 -Subject: [PATCH] common: oftree: add fixup handler for 'virtio,mmio' devices - -Qemu adds 'virtio,mmio' nodes to the device tree. Before passing it to the -bootloader or the Linux kernel. This fixup handler copies these nodes to -the new device tree. - -v2: -- move from general to platform specific init - -Signed-off-by: Michael Olbrich -Signed-off-by: Rouven Czerwinski ---- - arch/arm/boards/vexpress/init.c | 30 ++++++++++++++++++++++++++++++ - 1 file changed, 30 insertions(+) - -diff --git a/arch/arm/boards/vexpress/init.c b/arch/arm/boards/vexpress/init.c -index 68ebbfab2633..8655b7e17c97 100644 ---- a/arch/arm/boards/vexpress/init.c -+++ b/arch/arm/boards/vexpress/init.c -@@ -18,6 +18,7 @@ - #include - #include - #include -+#include - - struct vexpress_init { - void (*core_init)(void); -@@ -156,3 +157,32 @@ static int vexpress_core_init(void) - return 0; - } - postcore_initcall(vexpress_core_init); -+ -+static int of_fixup_virtio_mmio(struct device_node *root, void *unused) -+{ -+ struct device_node *barebox_root, *np, *parent; -+ -+ barebox_root = of_get_root_node(); -+ if (root == barebox_root) -+ return 0; -+ -+ for_each_compatible_node_from(np, barebox_root, NULL, "virtio,mmio") { -+ if (of_get_parent(np) == barebox_root) -+ parent = root; -+ else -+ parent = of_find_node_by_path_from(root, -+ of_get_parent(np)->full_name); -+ if (!parent) -+ return -EINVAL; -+ -+ of_copy_node(parent, np); -+ } -+ -+ return 0; -+} -+ -+static int of_register_virtio_mmio_fixup(void) -+{ -+ return of_register_fixup(of_fixup_virtio_mmio, NULL); -+} -+late_initcall(of_register_virtio_mmio_fixup); diff --git a/configs/platform-v7a/patches/barebox-2017.08.0/0007-ARM-vexpress-regenerate-config.patch b/configs/platform-v7a/patches/barebox-2017.08.0/0007-ARM-vexpress-regenerate-config.patch new file mode 100644 index 0000000..a370a27 --- /dev/null +++ b/configs/platform-v7a/patches/barebox-2017.08.0/0007-ARM-vexpress-regenerate-config.patch @@ -0,0 +1,63 @@ +From: Lucas Stach +Date: Fri, 1 Sep 2017 19:08:04 +0200 +Subject: [PATCH] ARM: vexpress: regenerate config + +Enable some more features, so the default configuration gets more +in line with other platforms. + +Signed-off-by: Lucas Stach +--- + arch/arm/configs/vexpress_defconfig | 16 +++++++++++++--- + 1 file changed, 13 insertions(+), 3 deletions(-) + +diff --git a/arch/arm/configs/vexpress_defconfig b/arch/arm/configs/vexpress_defconfig +index e31da4a8c668..f6a57de75cd9 100644 +--- a/arch/arm/configs/vexpress_defconfig ++++ b/arch/arm/configs/vexpress_defconfig +@@ -4,7 +4,6 @@ CONFIG_ARM_OPTIMZED_STRING_FUNCTIONS=y + CONFIG_MALLOC_SIZE=0x0 + CONFIG_MALLOC_TLSF=y + CONFIG_PROMPT="vexpress: " +-CONFIG_GLOB=y + CONFIG_HUSH_FANCY_PROMPT=y + CONFIG_CMDLINE_EDITING=y + CONFIG_AUTO_COMPLETE=y +@@ -12,9 +11,10 @@ CONFIG_MENU=y + CONFIG_BOOTM_SHOW_TYPE=y + CONFIG_BOOTM_VERBOSE=y + CONFIG_BOOTM_INITRD=y +-CONFIG_PARTITION=y +-CONFIG_DEFAULT_ENVIRONMENT_GENERIC=y ++CONFIG_DEFAULT_ENVIRONMENT_GENERIC_NEW=y ++CONFIG_CMD_DMESG=y + CONFIG_LONGHELP=y ++CONFIG_CMD_IOMEM=y + CONFIG_CMD_MEMINFO=y + # CONFIG_CMD_BOOTU is not set + CONFIG_CMD_GO=y +@@ -38,15 +38,25 @@ CONFIG_CMD_MENU_MANAGEMENT=y + CONFIG_CMD_PASSWD=y + CONFIG_CMD_READLINE=y + CONFIG_CMD_TIMEOUT=y ++CONFIG_CMD_CRC=y ++CONFIG_CMD_CRC_CMP=y + CONFIG_CMD_CLK=y ++CONFIG_CMD_DETECT=y + CONFIG_CMD_OFTREE=y + CONFIG_NET=y + CONFIG_NET_NFS=y + CONFIG_NET_NETCONSOLE=y + CONFIG_NET_RESOLV=y ++CONFIG_OF_BAREBOX_DRIVERS=y + CONFIG_SERIAL_AMBA_PL011=y + CONFIG_DRIVER_NET_SMC91111=y + # CONFIG_SPI is not set ++CONFIG_MTD=y ++CONFIG_MTD_CONCAT=y ++CONFIG_DRIVER_CFI=y ++CONFIG_MCI=y ++CONFIG_MCI_MMCI=y ++# CONFIG_PINCTRL is not set + CONFIG_FS_TFTP=y + CONFIG_DIGEST_SHA1_GENERIC=y + CONFIG_DIGEST_SHA256_GENERIC=y diff --git a/configs/platform-v7a/patches/barebox-2017.08.0/0008-docs-add-qemu-vexpress.patch b/configs/platform-v7a/patches/barebox-2017.08.0/0008-docs-add-qemu-vexpress.patch new file mode 100644 index 0000000..989dbb6 --- /dev/null +++ b/configs/platform-v7a/patches/barebox-2017.08.0/0008-docs-add-qemu-vexpress.patch @@ -0,0 +1,38 @@ +From: Lucas Stach +Date: Mon, 4 Sep 2017 12:22:06 +0200 +Subject: [PATCH] docs: add qemu vexpress + +Add a basic command line for QEMU vexpress. + +Signed-off-by: Lucas Stach +--- + Documentation/boards/arm-qemu-vexpress.rst | 20 ++++++++++++++++++++ + 1 file changed, 20 insertions(+) + create mode 100644 Documentation/boards/arm-qemu-vexpress.rst + +diff --git a/Documentation/boards/arm-qemu-vexpress.rst b/Documentation/boards/arm-qemu-vexpress.rst +new file mode 100644 +index 000000000000..dcbac8e62557 +--- /dev/null ++++ b/Documentation/boards/arm-qemu-vexpress.rst +@@ -0,0 +1,20 @@ ++QEMU vexpress ++======= ++ ++ARM Qemu vexpress ++----------------- ++ ++Running barebox on QEMU vexpress machine ++^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ++ ++Usage:: ++ ++ $ qemu-system-arm -m 1024M \ ++ -machine vexpress-a9 -cpu cortex-a9 \ ++ -nographic -no-reboot \ ++ -kernel images/barebox-vexpress-ca9.img ++ ++ $ qemu-system-arm -m 1024M \ ++ -machine vexpress-a15 -cpu cortex-a15 \ ++ -nographic -no-reboot \ ++ -kernel images/barebox-vexpress-ca15.img diff --git a/configs/platform-v7a/patches/barebox-2017.08.0/0009-vexpress-use-device-tree-provided-by-QEMU-if-availab.patch b/configs/platform-v7a/patches/barebox-2017.08.0/0009-vexpress-use-device-tree-provided-by-QEMU-if-availab.patch new file mode 100644 index 0000000..d6d8171 --- /dev/null +++ b/configs/platform-v7a/patches/barebox-2017.08.0/0009-vexpress-use-device-tree-provided-by-QEMU-if-availab.patch @@ -0,0 +1,50 @@ +From: Michael Olbrich +Date: Sat, 10 Sep 2016 17:40:56 +0200 +Subject: [PATCH] vexpress: use device tree provided by QEMU if available + +Signed-off-by: Michael Olbrich +--- + arch/arm/boards/vexpress/lowlevel.c | 20 ++++++++++++++++++-- + 1 file changed, 18 insertions(+), 2 deletions(-) + +diff --git a/arch/arm/boards/vexpress/lowlevel.c b/arch/arm/boards/vexpress/lowlevel.c +index 0a226b295c2a..9fe7c836b7b6 100644 +--- a/arch/arm/boards/vexpress/lowlevel.c ++++ b/arch/arm/boards/vexpress/lowlevel.c +@@ -9,18 +9,34 @@ + #include + #include + #include ++#include + #include + + static inline void start_vexpress_common(void *internal_dt) + { + void *fdt = internal_dt - get_runtime_offset(); ++ unsigned long membase, memsize = SZ_512M; + + arm_cpu_lowlevel_init(); + + if (amba_is_arm_sp804(IOMEM(0x10011000))) +- barebox_arm_entry(0x60000000, SZ_512M, fdt); ++ membase = 0x60000000; + else +- barebox_arm_entry(0x80000000, SZ_512M, fdt); ++ membase = 0x80000000; ++ ++ /* QEMU may put a DTB at the start of RAM */ ++ if (IS_ENABLED(CONFIG_OFDEVICE) && ++ get_unaligned_be32((void*)membase) == FDT_MAGIC) { ++ fdt = (void*)membase; ++ /* ++ * Need to move membase a bit as the PBL wants to relocate ++ * to the start of RAM, which would overwrite the DTB. ++ */ ++ membase += SZ_4M; ++ memsize -= SZ_4M; ++ } ++ ++ barebox_arm_entry(membase, memsize, fdt); + } + + extern char __dtb_vexpress_v2p_ca9_start[]; diff --git a/configs/platform-v7a/patches/barebox-2017.08.0/0010-vexpress-add-bootstate-node-to-the-device-tree.patch b/configs/platform-v7a/patches/barebox-2017.08.0/0010-vexpress-add-bootstate-node-to-the-device-tree.patch new file mode 100644 index 0000000..27cfa0b --- /dev/null +++ b/configs/platform-v7a/patches/barebox-2017.08.0/0010-vexpress-add-bootstate-node-to-the-device-tree.patch @@ -0,0 +1,90 @@ +From: Michael Olbrich +Date: Sat, 10 Sep 2016 17:54:20 +0200 +Subject: [PATCH] vexpress: add bootstate node to the device tree + +Signed-off-by: Michael Olbrich +--- + arch/arm/dts/vexpress-v2p-ca9.dts | 63 +++++++++++++++++++++++++++++++++++++++ + 1 file changed, 63 insertions(+) + +diff --git a/arch/arm/dts/vexpress-v2p-ca9.dts b/arch/arm/dts/vexpress-v2p-ca9.dts +index 541840ae22dc..d0975330f205 100644 +--- a/arch/arm/dts/vexpress-v2p-ca9.dts ++++ b/arch/arm/dts/vexpress-v2p-ca9.dts +@@ -6,6 +6,10 @@ + device-path = &barebox_env; + }; + ++ aliases { ++ state = &state; ++ }; ++ + smb@4000000 { + motherboard { + flash@0,00000000 { +@@ -21,6 +25,65 @@ + label = "barebox-environment"; + reg = <0x80000 0x80000>; + }; ++ ++ state_storage: partition@100000 { ++ label = "barebox-state"; ++ reg = <0x100000 0x100000>; ++ }; ++ }; ++ }; ++ }; ++ ++ /* State: mutable part */ ++ state: state { ++ magic = <0x4d433230>; ++ compatible = "barebox,state"; ++ backend-type = "raw"; ++ backend = <&state_storage>; ++ backend-stridesize = <0x40>; ++ backend-storage-type = "circular"; ++ #address-cells = <1>; ++ #size-cells = <1>; ++ ++ bootstate { ++ #address-cells = <1>; ++ #size-cells = <1>; ++ ++ system0 { /* the node's name here must match the subnode's name in the 'bootstate' node */ ++ #address-cells = <1>; ++ #size-cells = <1>; ++ ++ remaining_attempts@0 { ++ reg = <0x0 0x4>; ++ type = "uint32"; ++ default = <3>; ++ }; ++ priority@4 { ++ reg = <0x4 0x4>; ++ type = "uint32"; ++ default = <20>; ++ }; ++ }; ++ ++ system1 { /* the node's name here must match the subnode's name in the 'bootstate' node */ ++ #address-cells = <1>; ++ #size-cells = <1>; ++ ++ remaining_attempts@8 { ++ reg = <0x8 0x4>; ++ type = "uint32"; ++ default = <3>; ++ }; ++ priority@c { ++ reg = <0xC 0x4>; ++ type = "uint32"; ++ default = <20>; ++ }; ++ }; ++ ++ last_chosen@10 { ++ reg = <0x10 0x4>; ++ type = "uint32"; + }; + }; + }; diff --git a/configs/platform-v7a/patches/barebox-2017.08.0/0011-of-base-add-funtion-to-copy-a-device-tree-node.patch b/configs/platform-v7a/patches/barebox-2017.08.0/0011-of-base-add-funtion-to-copy-a-device-tree-node.patch new file mode 100644 index 0000000..9ea3cb4 --- /dev/null +++ b/configs/platform-v7a/patches/barebox-2017.08.0/0011-of-base-add-funtion-to-copy-a-device-tree-node.patch @@ -0,0 +1,50 @@ +From: Michael Olbrich +Date: Tue, 13 Sep 2016 21:17:12 +0200 +Subject: [PATCH] of: base: add funtion to copy a device tree node + +Signed-off-by: Michael Olbrich +--- + drivers/of/base.c | 16 ++++++++++++++++ + include/of.h | 2 ++ + 2 files changed, 18 insertions(+) + +diff --git a/drivers/of/base.c b/drivers/of/base.c +index 1649148dc0c6..4734f4332050 100644 +--- a/drivers/of/base.c ++++ b/drivers/of/base.c +@@ -1965,6 +1965,22 @@ out: + return dn; + } + ++struct device_node *of_copy_node(struct device_node *parent, const struct device_node *other) ++{ ++ struct device_node *np, *child; ++ struct property *pp; ++ ++ np = of_new_node(parent, other->name); ++ ++ list_for_each_entry(pp, &other->properties, list) ++ of_new_property(np, pp->name, pp->value, pp->length); ++ ++ for_each_child_of_node(other, child) ++ of_copy_node(np, child); ++ ++ return np; ++} ++ + void of_delete_node(struct device_node *node) + { + struct device_node *n, *nt; +diff --git a/include/of.h b/include/of.h +index 0ba73f197f28..c1136708ce6c 100644 +--- a/include/of.h ++++ b/include/of.h +@@ -144,6 +144,8 @@ extern struct device_node *of_new_node(struct device_node *parent, + const char *name); + extern struct device_node *of_create_node(struct device_node *root, + const char *path); ++extern struct device_node *of_copy_node(struct device_node *parent, ++ const struct device_node *other); + extern void of_delete_node(struct device_node *node); + + extern int of_machine_is_compatible(const char *compat); diff --git a/configs/platform-v7a/patches/barebox-2017.08.0/0012-ARM-vexpress-add-fixup-handler-for-virtio-mmio-devic.patch b/configs/platform-v7a/patches/barebox-2017.08.0/0012-ARM-vexpress-add-fixup-handler-for-virtio-mmio-devic.patch new file mode 100644 index 0000000..ff407c9 --- /dev/null +++ b/configs/platform-v7a/patches/barebox-2017.08.0/0012-ARM-vexpress-add-fixup-handler-for-virtio-mmio-devic.patch @@ -0,0 +1,54 @@ +From: Michael Olbrich +Date: Tue, 13 Sep 2016 21:20:10 +0200 +Subject: [PATCH] ARM: vexpress: add fixup handler for 'virtio,mmio' devices + +Qemu adds 'virtio,mmio' nodes to the device tree. Before passing it to the +bootloader or the Linux kernel. This fixup handler copies these nodes to +the new device tree. + +v2: +- move from general to platform specific init + +Signed-off-by: Michael Olbrich +Signed-off-by: Rouven Czerwinski +--- + arch/arm/boards/vexpress/init.c | 29 +++++++++++++++++++++++++++++ + 1 file changed, 29 insertions(+) + +diff --git a/arch/arm/boards/vexpress/init.c b/arch/arm/boards/vexpress/init.c +index 1bbc8c347638..946385393f44 100644 +--- a/arch/arm/boards/vexpress/init.c ++++ b/arch/arm/boards/vexpress/init.c +@@ -45,3 +45,32 @@ static int vexpress_core_init(void) + return 0; + } + postcore_initcall(vexpress_core_init); ++ ++static int of_fixup_virtio_mmio(struct device_node *root, void *unused) ++{ ++ struct device_node *barebox_root, *np, *parent; ++ ++ barebox_root = of_get_root_node(); ++ if (root == barebox_root) ++ return 0; ++ ++ for_each_compatible_node_from(np, barebox_root, NULL, "virtio,mmio") { ++ if (of_get_parent(np) == barebox_root) ++ parent = root; ++ else ++ parent = of_find_node_by_path_from(root, ++ of_get_parent(np)->full_name); ++ if (!parent) ++ return -EINVAL; ++ ++ of_copy_node(parent, np); ++ } ++ ++ return 0; ++} ++ ++static int of_register_virtio_mmio_fixup(void) ++{ ++ return of_register_fixup(of_fixup_virtio_mmio, NULL); ++} ++late_initcall(of_register_virtio_mmio_fixup); diff --git a/configs/platform-v7a/patches/barebox-2017.08.0/0201-ARM-imx-add-support-for-Udoo-Neo-full.patch b/configs/platform-v7a/patches/barebox-2017.08.0/0201-ARM-imx-add-support-for-Udoo-Neo-full.patch index 59a5c34..dfabd02 100644 --- a/configs/platform-v7a/patches/barebox-2017.08.0/0201-ARM-imx-add-support-for-Udoo-Neo-full.patch +++ b/configs/platform-v7a/patches/barebox-2017.08.0/0201-ARM-imx-add-support-for-Udoo-Neo-full.patch @@ -254,7 +254,7 @@ index 000000000000..e78c2685fd78 + imx6sx_barebox_entry(fdt); +} diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile -index d8abe452b40b..71ab6b701568 100644 +index c5e48092d344..f5b37891c400 100644 --- a/arch/arm/dts/Makefile +++ b/arch/arm/dts/Makefile @@ -85,6 +85,7 @@ pbl-dtb-$(CONFIG_MACH_TX6X) += imx6dl-tx6u.dtb.o @@ -264,7 +264,7 @@ index d8abe452b40b..71ab6b701568 100644 +pbl-dtb-$(CONFIG_MACH_UDOO_NEO) += imx6sx-udoo-neo-full.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_VSCOM_BALTOS) += am335x-baltos-minimal.dtb.o + pbl-dtb-$(CONFIG_MACH_VEXPRESS) += vexpress-v2p-ca9.dtb.o diff --git a/arch/arm/dts/imx6sx-udoo-neo-full.dts b/arch/arm/dts/imx6sx-udoo-neo-full.dts new file mode 100644 index 000000000000..9203d40207c5 diff --git a/configs/platform-v7a/patches/barebox-2017.08.0/0301-Release-2017.08.0-pengutronix-multi_v7-20170822-1.patch b/configs/platform-v7a/patches/barebox-2017.08.0/0301-Release-2017.08.0-pengutronix-multi_v7-20170822-1.patch deleted file mode 100644 index 6fe829d..0000000 --- a/configs/platform-v7a/patches/barebox-2017.08.0/0301-Release-2017.08.0-pengutronix-multi_v7-20170822-1.patch +++ /dev/null @@ -1,22 +0,0 @@ -From: Robert Schwebel -Date: Tue, 22 Aug 2017 18:26:22 +0200 -Subject: [PATCH] Release 2017.08.0/pengutronix/multi_v7/20170822-1 - -Signed-off-by: Robert Schwebel ---- - Makefile | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/Makefile b/Makefile -index ab44a1383365..eabe0ad5dc59 100644 ---- a/Makefile -+++ b/Makefile -@@ -1,7 +1,7 @@ - VERSION = 2017 - PATCHLEVEL = 08 - SUBLEVEL = 0 --EXTRAVERSION = -+EXTRAVERSION =-20170822-1 - NAME = None - - # *DOCUMENTATION* diff --git a/configs/platform-v7a/patches/barebox-2017.08.0/0301-Release-2017.08.0-pengutronix-multi_v7-20170912-1.patch b/configs/platform-v7a/patches/barebox-2017.08.0/0301-Release-2017.08.0-pengutronix-multi_v7-20170912-1.patch new file mode 100644 index 0000000..fc782e1 --- /dev/null +++ b/configs/platform-v7a/patches/barebox-2017.08.0/0301-Release-2017.08.0-pengutronix-multi_v7-20170912-1.patch @@ -0,0 +1,22 @@ +From: Robert Schwebel +Date: Tue, 12 Sep 2017 20:20:05 +0200 +Subject: [PATCH] Release 2017.08.0/pengutronix/multi_v7/20170912-1 + +Signed-off-by: Robert Schwebel +--- + Makefile | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Makefile b/Makefile +index ab44a1383365..ebad7750d2f3 100644 +--- a/Makefile ++++ b/Makefile +@@ -1,7 +1,7 @@ + VERSION = 2017 + PATCHLEVEL = 08 + SUBLEVEL = 0 +-EXTRAVERSION = ++EXTRAVERSION =-20170912-1 + NAME = None + + # *DOCUMENTATION* diff --git a/configs/platform-v7a/patches/barebox-2017.08.0/series b/configs/platform-v7a/patches/barebox-2017.08.0/series index 240cc72..b302dd7 100644 --- a/configs/platform-v7a/patches/barebox-2017.08.0/series +++ b/configs/platform-v7a/patches/barebox-2017.08.0/series @@ -1,24 +1,30 @@ # umpf-base: v2017.08.0 # umpf-name: 2017.08.0/pengutronix/multi_v7 -# umpf-version: 2017.08.0/pengutronix/multi_v7/20170822-1 +# umpf-version: 2017.08.0/pengutronix/multi_v7/20170912-1 # umpf-topic: v2017.08.0/topic/vexpress -# umpf-hashinfo: db4b9b7d1ffde3c6ba557654a09380b54a3fdfe7 -# umpf-topic-range: fbde027fdb1d8725253787dd3416702255e646f7..db4b9b7d1ffde3c6ba557654a09380b54a3fdfe7 -0001-vexpress-use-device-tree-provided-by-QEMU-if-availab.patch -0002-vexpress-device-tree-support.patch -0003-vexpress-add-bootstate-node-to-the-device-tree.patch -0004-of-base-add-funtion-to-copy-a-device-tree-node.patch -0005-commands-of_dump-don-t-use-flatten-unflatten-to-copy.patch -0006-common-oftree-add-fixup-handler-for-virtio-mmio-devi.patch +# umpf-hashinfo: 88699e144e8ee41ceafdfeb5dd43ab7584993707 +# umpf-topic-range: fbde027fdb1d8725253787dd3416702255e646f7..11c57f10775f6f2f8f7c985f87c030d49cc0841f +0001-ARM-vexpress-always-build-relocatable-image.patch +0002-of-populate-clock-providers-before-other-devices.patch +0003-clk-versatile-add-basic-clocks.patch +0004-clocksource-sp804-silently-ignore-secondary-instaces.patch +0005-mci-mmci-add-DT-support.patch +0006-ARM-vexpress-switch-to-DT-probe-and-multi-image-buil.patch +0007-ARM-vexpress-regenerate-config.patch +0008-docs-add-qemu-vexpress.patch +0009-vexpress-use-device-tree-provided-by-QEMU-if-availab.patch +0010-vexpress-add-bootstate-node-to-the-device-tree.patch +0011-of-base-add-funtion-to-copy-a-device-tree-node.patch +0012-ARM-vexpress-add-fixup-handler-for-virtio-mmio-devic.patch # umpf-topic: v2017.08.0/customers/pengutronix/beaglebone # umpf-hashinfo: a35d1683996a55b567b71078bc47fc0d87b9c55a -# umpf-topic-range: db4b9b7d1ffde3c6ba557654a09380b54a3fdfe7..61098368af6b9a173ce190d89a7bd04bd6880c53 +# umpf-topic-range: 11c57f10775f6f2f8f7c985f87c030d49cc0841f..44cdb676b391ed93208ae3458e0fdca3dca955c9 0101-beaglebone-add-state-entry-for-mmc0-and-mmc1.patch # umpf-topic: v2017.08.0/customers/pengutronix/udoo-neo # umpf-hashinfo: 42d6d5080ecc2082cf4df521679b6463844dcec3 -# umpf-topic-range: 61098368af6b9a173ce190d89a7bd04bd6880c53..1b809bf26f52d8a511bacc3ad59d7ec33f369bb4 +# umpf-topic-range: 44cdb676b391ed93208ae3458e0fdca3dca955c9..96dd12b2b7c81de89f4840de32d479f7a104e9f7 0201-ARM-imx-add-support-for-Udoo-Neo-full.patch -# umpf-release: 2017.08.0/pengutronix/multi_v7/20170822-1 -# umpf-topic-range: 1b809bf26f52d8a511bacc3ad59d7ec33f369bb4..60b688a82177e5819aeaab31769aacd0d5ffd1ea -0301-Release-2017.08.0-pengutronix-multi_v7-20170822-1.patch +# umpf-release: 2017.08.0/pengutronix/multi_v7/20170912-1 +# umpf-topic-range: 96dd12b2b7c81de89f4840de32d479f7a104e9f7..49033bd69393ab22402d248544ca4391076dcc3d +0301-Release-2017.08.0-pengutronix-multi_v7-20170912-1.patch # umpf-end diff --git a/configs/platform-v7a/rules/barebox-vexpress.make b/configs/platform-v7a/rules/barebox-vexpress.make index ffd37f8..b2086e6 100644 --- a/configs/platform-v7a/rules/barebox-vexpress.make +++ b/configs/platform-v7a/rules/barebox-vexpress.make @@ -42,7 +42,7 @@ BAREBOX_VEXPRESS_CONF_OPT := $(call barebox-opts, BAREBOX_VEXPRESS) BAREBOX_VEXPRESS_MAKE_ENV := $(BAREBOX_VEXPRESS_CONF_ENV) BAREBOX_VEXPRESS_MAKE_OPT := $(BAREBOX_VEXPRESS_CONF_OPT) -BAREBOX_VEXPRESS_IMAGES := barebox.bin +BAREBOX_VEXPRESS_IMAGES := images/barebox-vexpress-ca9.img BAREBOX_VEXPRESS_IMAGES := $(addprefix $(BAREBOX_VEXPRESS_DIR)/,$(BAREBOX_VEXPRESS_IMAGES)) ifdef PTXCONF_BAREBOX_VEXPRESS @@ -69,7 +69,7 @@ $(STATEDIR)/barebox-vexpress.install: @$(call targetinfo) @$(foreach image, $(BAREBOX_VEXPRESS_IMAGES), \ install -m 644 \ - $(image) $(IMAGEDIR)/$(notdir $(image))-vexpress;) + $(image) $(IMAGEDIR)/$(notdir $(image));) @install -D -m644 $(BAREBOX_VEXPRESS_DIR)/defaultenv/barebox_zero_env $(IMAGEDIR)/barebox-zero-env-vexpress @install -D -m644 $(BAREBOX_VEXPRESS_DIR)/arch/arm/dts/vexpress-v2p-ca9.dtb $(IMAGEDIR)/bb-vexpress-v2p-ca9.dtb @$(call touch) @@ -82,7 +82,7 @@ $(STATEDIR)/barebox-vexpress.clean: @$(call targetinfo) @$(call clean_pkg, BAREBOX_VEXPRESS) @$(foreach image, $(BAREBOX_VEXPRESS_IMAGES), \ - rm -fv $(IMAGEDIR)/$(notdir $(image))-vexpress;) + rm -fv $(IMAGEDIR)/$(notdir $(image));) # ---------------------------------------------------------------------------- # oldconfig / menuconfig -- cgit v1.2.3