Hi Michal, On 22/06/2018 09:38, Michal Simek wrote: > On 20.6.2018 23:00, Luca Ceresoli wrote: >> U-Boot needs to link ps7_init_gpl.c on Zynq or psu_init_gpl.c on >> ZynqMP (PS init for short). The current logic to locate this file for >> both platforms is: >> >> 1. if a board-specific file exists in >> board/xilinx/zynq[mp]/$(CONFIG_DEFAULT_DEVICE_TREE)/ps?_init_gpl.c >> then use it >> 2. otherwise use board/xilinx/zynq/ps?_init_gpl.c >> >> In the latter case the file does not exist in the U-Boot sources and >> must be copied in the source tree from the outside before starting the >> build. This is typical when it is generated from Xilinx tools while >> developing a custom hardware. However making sure that a >> board-specific file is _not_ found (and used) requires some trickery >> such as removing or overwriting all PS init files (e.g.: the current >> meta-xilinx yocto layer [0]). >> >> This generates a few problems: >> >> * if the source tree is shared among different out-of-tree builds, >> they will pollute (and potentially corrupt) each other >> * the source tree cannot be read-only >> * any buildsystem must add a command to copy the PS init file binary >> * overwriting or deleting files in the source tree is ugly as hell >> >> Simplify usage by allowing to pass the path to the desired PS init >> file in kconfig variable XILINX_PS_INIT_FILE. It can be an absolute >> path or relative to $(srctree). If the variable is set, the >> user-specified file will always be used without being copied >> around. If the the variable is left empty, for backward compatibility >> fall back to the old behaviour. >> >> Since the issue is the same for Zynq and ZynqMP, add one kconfig >> variable in a common place and use it for both. >> >> Also use the new kconfig help text to document all the ways to give >> U-Boot the PS init file. >> >> Build-tested with all combinations of: >> - platform: zynq or zynqmp >> - PS init file: from XILINX_PS_INIT_FILE (absolute, relative path, >> non-existing), in-tree board-specific, in board/xilinx/zynq[mp]/ >> - building in-tree, in subdir, in other directory >> >> [0] >> https://github.com/Xilinx/meta-xilinx/blob/b2f74cc7fe5c4881589d5e440a17cb51fc66a7ab/meta-xilinx-bsp/recipes-bsp/u-boot/u-boot-spl-zynq-init.inc#L9 > > Please move this link out of commit message (also fix link above). It is > quite long and almost useless. > >> >> Signed-off-by: Luca Ceresoli <[email protected]> >> Cc: Albert Aribaud <[email protected]> >> Cc: Michal Simek <[email protected]> >> Cc: Nathan Rossi <[email protected]> >> --- >> arch/arm/Kconfig | 1 + >> board/xilinx/Kconfig | 41 +++++++++++++++++++++++++++++++++++++++++ >> board/xilinx/zynq/Makefile | 10 +++++++++- >> board/xilinx/zynqmp/Makefile | 10 +++++++++- >> 4 files changed, 60 insertions(+), 2 deletions(-) >> create mode 100644 board/xilinx/Kconfig >> >> diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig >> index 22234cde2ab6..e04979d0ef7e 100644 >> --- a/arch/arm/Kconfig >> +++ b/arch/arm/Kconfig >> @@ -1441,6 +1441,7 @@ source "board/toradex/colibri_pxa270/Kconfig" >> source "board/vscom/baltos/Kconfig" >> source "board/woodburn/Kconfig" >> source "board/work-microwave/work_92105/Kconfig" >> +source "board/xilinx/Kconfig" >> source "board/xilinx/zynqmp/Kconfig" >> source "board/zipitz2/Kconfig" >> >> diff --git a/board/xilinx/Kconfig b/board/xilinx/Kconfig >> new file mode 100644 >> index 000000000000..aa3fa061edef >> --- /dev/null >> +++ b/board/xilinx/Kconfig >> @@ -0,0 +1,41 @@ >> +# Copyright (c) 2018, Luca Ceresoli <[email protected]> >> +# >> +# SPDX-License-Identifier: GPL-2.0 > > Please make this as a first line. > >> + >> +if ARCH_ZYNQ || ARCH_ZYNQMP >> + >> +config XILINX_PS_INIT_FILE >> + string "Zynq/ZynqMP PS init file(s) location" >> + help >> + On Zynq and ZynqMP U-Boot SPL (or U-Boot proper if >> + ZYNQMP_PSU_INIT_ENABLED is set) is responsible for some >> + basic initializations, such as enabling peripherals and >> + configuring pinmuxes. The PS init file (called >> + psu_init_gpl.c on ZynqMP, ps7_init_gpl.c for Zynq-7000) >> + contains the code for such initializations. >> + >> + U-Boot contains PS init files for some boards, but each of >> + them describes only one specific configuration. Users of a >> + different board, or needing a different configuration, can >> + generate custom files using the Xilinx development tools. >> + >> + There are three ways to give a PS init file to U-Boot: >> + >> + 1. Set this variable to the path, either relative to the >> + source tree or absolute, where the psu_init_gpl.c or >> + ps7_init_gpl.c file is located. U-Boot will build this >> + file. >> + >> + 2. If you leave an empty string here, U-Boot will use >> + board/xilinx/zynq/$(CONFIG_DEFAULT_DEVICE_TREE)/ps7_init_gpl.c >> + for Zynq-7000, or >> + board/xilinx/zynqmp/$(CONFIG_DEFAULT_DEVICE_TREE)/psu_init_gpl.c >> + for ZynqMP. >> + >> + 3. If the above file does not exist, U-Boot will use >> + board/xilinx/zynq/ps7_init_gpl.c for Zynq-7000, or >> + board/xilinx/zynqmp/psu_init_gpl.c for ZynqMP. This file >> + is not provided by U-Boot, you have to copy it there >> + before the build. >> + >> +endif >> diff --git a/board/xilinx/zynq/Makefile b/board/xilinx/zynq/Makefile >> index 5a76a26720cd..03ad5f0532ee 100644 >> --- a/board/xilinx/zynq/Makefile >> +++ b/board/xilinx/zynq/Makefile >> @@ -5,10 +5,18 @@ >> >> obj-y := board.o >> >> -hw-platform-y :=$(shell echo $(CONFIG_DEFAULT_DEVICE_TREE)) >> +ifneq ($(CONFIG_XILINX_PS_INIT_FILE),"") >> +PS_INIT_FILE := $(shell cd $(srctree); readlink -f >> $(CONFIG_XILINX_PS_INIT_FILE)) >> +init-objs := ps_init_gpl.o >> +spl/board/xilinx/zynq/ps_init_gpl.o board/xilinx/zynq/ps_init_gpl.o: >> $(PS_INIT_FILE) >> + $(CC) $(c_flags) -I $(srctree)/$(src) -c -o $@ $^ >> +endif >> >> +ifeq ($(init-objs),) >> +hw-platform-y :=$(shell echo $(CONFIG_DEFAULT_DEVICE_TREE)) >> init-objs := $(if $(wildcard >> $(srctree)/$(src)/$(hw-platform-y)/ps7_init_gpl.c),\ >> $(hw-platform-y)/ps7_init_gpl.o) >> +endif >> >> ifeq ($(init-objs),) >> ifneq ($(wildcard $(srctree)/$(src)/ps7_init_gpl.c),) >> diff --git a/board/xilinx/zynqmp/Makefile b/board/xilinx/zynqmp/Makefile >> index 05ccd25dcef3..960b81fc5853 100644 >> --- a/board/xilinx/zynqmp/Makefile >> +++ b/board/xilinx/zynqmp/Makefile >> @@ -5,10 +5,18 @@ >> >> obj-y := zynqmp.o >> >> -hw-platform-y :=$(shell echo $(CONFIG_DEFAULT_DEVICE_TREE)) >> +ifneq ($(CONFIG_XILINX_PS_INIT_FILE),"") >> +PS_INIT_FILE := $(shell cd $(srctree); readlink -f >> $(CONFIG_XILINX_PS_INIT_FILE)) >> +init-objs := ps_init_gpl.o >> +spl/board/xilinx/zynqmp/ps_init_gpl.o board/xilinx/zynqmp/ps_init_gpl.o: >> $(PS_INIT_FILE) >> + $(CC) $(c_flags) -I $(srctree)/$(src) -c -o $@ $^ >> +endif >> >> +ifeq ($(init-objs),) >> +hw-platform-y :=$(shell echo $(CONFIG_DEFAULT_DEVICE_TREE)) >> init-objs := $(if $(wildcard >> $(srctree)/$(src)/$(hw-platform-y)/psu_init_gpl.c),\ >> $(hw-platform-y)/psu_init_gpl.o) >> +endif >> >> ifeq ($(init-objs),) >> ifneq ($(wildcard $(srctree)/$(src)/psu_init_gpl.c),) >> > > I have tested it and it looks good.
Good, thanks. I just sent v2 with the changes you requested. Regards, -- Luca _______________________________________________ U-Boot mailing list [email protected] https://lists.denx.de/listinfo/u-boot

