mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-12-05 02:51:00 +00:00
c28a9cfa40
Optionally allow U-Boot to load a configuration object into the Power Management Unit (PMU) firmware on Xilinx ZynqMP. The configuration object is required by the PMU FW to enable most SoC peripherals. So far the only way to boot using U-Boot SPL was to hard-code the configuration object in the PMU firmware. Allow a different boot process, where the PMU FW is equal for any ZynqMP chip and its configuration is passed at runtime by U-Boot SPL. All the code for Inter-processor communication with the PMU is isolated in a new file (pmu_ipc.c). The code is inspired by the same feature as implemented in the Xilinx First Stage Bootloader (FSBL) and Arm Trusted Firmware: *fb647e6b4c/lib/sw_apps/zynqmp_fsbl/src/xfsbl_misc_drivers.c (L295)
*c48d02bade/plat/xilinx/zynqmp/pm_service/pm_api_sys.c (L357)
SPL logs on the console before loading the configuration object: U-Boot SPL 2019.07-rc1-00511-gaec224515c87 (May 15 2019 - 08:43:41 +0200) Loading PMUFW cfg obj (2008 bytes) EL Level: EL3 ... Signed-off-by: Luca Ceresoli <luca@lucaceresoli.net> Signed-off-by: Michal Simek <michal.simek@xilinx.com>
54 lines
1.6 KiB
Makefile
54 lines
1.6 KiB
Makefile
# SPDX-License-Identifier: GPL-2.0+
|
|
#
|
|
# (C) Copyright 2014 - 2016 Xilinx, Inc.
|
|
# Michal Simek <michal.simek@xilinx.com>
|
|
|
|
obj-y := zynqmp.o
|
|
obj-y += ../common/board.o
|
|
|
|
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),)
|
|
init-objs := psu_init_gpl.o
|
|
$(if $(CONFIG_SPL_BUILD),\
|
|
$(warning Put custom psu_init_gpl.c/h to board/xilinx/zynqmp/custom_hw_platform/))
|
|
endif
|
|
endif
|
|
|
|
ifdef_any_of = $(filter-out undefined,$(foreach v,$(1),$(origin $(v))))
|
|
|
|
ifneq ($(call ifdef_any_of, CONFIG_ZYNQMP_PSU_INIT_ENABLED CONFIG_SPL_BUILD),)
|
|
obj-y += $(init-objs)
|
|
endif
|
|
|
|
ifneq ($(CONFIG_ZYNQMP_SPL_PM_CFG_OBJ_FILE),"")
|
|
obj-$(CONFIG_SPL_BUILD) += pm_cfg_obj.o
|
|
$(obj)/pm_cfg_obj.o: $(shell cd $(srctree); readlink -f $(CONFIG_ZYNQMP_SPL_PM_CFG_OBJ_FILE)) FORCE
|
|
endif
|
|
|
|
obj-$(CONFIG_MMC_SDHCI_ZYNQ) += tap_delays.o
|
|
|
|
ifndef CONFIG_SPL_BUILD
|
|
obj-$(CONFIG_CMD_ZYNQMP) += cmds.o
|
|
endif
|
|
|
|
# Suppress "warning: function declaration isn't a prototype"
|
|
CFLAGS_REMOVE_psu_init_gpl.o := -Wstrict-prototypes
|
|
|
|
# To include xil_io.h
|
|
CFLAGS_psu_init_gpl.o := -I$(srctree)/$(src)
|
|
|
|
# To suppress "warning: cast to pointer from integer of different size"
|
|
CFLAGS_psu_init_gpl.o += -Wno-int-to-pointer-cast
|