1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
inherit xilinx-platform-init
FORCE_PLATFORM_INIT[doc] = "This variable is used to force the overriding of all platform init files in u-boot source."
PLATFORM_BOARD_DIR ?= ""
PLATFORM_BOARD_DIR_zynq = "board/xilinx/zynq"
PLATFORM_BOARD_DIR_zynqmp = "board/xilinx/zynqmp"
do_zynq_platform_init() {
for f in ${PLATFORM_INIT_FILES}; do
if [ -d "${S}/${PLATFORM_BOARD_DIR}/custom_hw_platform" ]; then
cp ${PLATFORM_INIT_STAGE_DIR}/$f ${S}/${PLATFORM_BOARD_DIR}/custom_hw_platform/
else
cp ${PLATFORM_INIT_STAGE_DIR}/$f ${S}/${PLATFORM_BOARD_DIR}/
fi
# Newer u-boot sources use the init files in a sub directory named
# based on the name of the device tree. This is not straight forward to
# detect. Instead of detecting just overwrite all the platform init
# files so that the correct one is always used. This shotgun approach
# only works due to this recipe being machine arch specific. Do this
# overwrite un-conditionally as there is no guarantees that the chosen
# board config does not have the device tree config set.
for i in ${S}/${PLATFORM_BOARD_DIR}/*/; do
[ -d $i ] && cp ${PLATFORM_INIT_STAGE_DIR}/$f $i
done
done
}
python () {
# strip the tail _config/_defconfig for better comparison
def strip_config_name(c):
for i in ["_config", "_defconfig"]:
if c.endswith(i):
return c[0:len(c) - len(i)]
return c
if d.getVar("SOC_FAMILY") not in ["zynq", "zynqmp"]:
# continue on this is not a zynq/zynqmp target
return
# Determine if target machine needs to provide a custom platform init files
if d.getVar("SPL_BINARY"):
hasconfigs = [strip_config_name(c) for c in (d.getVar("HAS_PLATFORM_INIT") or "").split()]
currentconfig = strip_config_name(d.getVar("UBOOT_MACHINE"))
# only add the dependency if u-boot doesn't already provide the platform init files
if (currentconfig not in hasconfigs) or (d.getVar("FORCE_PLATFORM_INIT") == "1"):
# force the dependency on a recipe that provides the platform init files
d.appendVar("DEPENDS", " virtual/xilinx-platform-init")
# setup task to modify platform init after unpack and prepare_recipe_sysroot, and before configure
bb.build.addtask("do_zynq_platform_init", "do_configure", "do_unpack do_prepare_recipe_sysroot", d)
if "boot.bin" not in d.getVar("SPL_BINARY"):
# not deploying the boot.bin, just building SPL
return
# assume that U-Boot is to provide the boot.bin if no other provides are selected or U-Boot is selected
providesbin = not(d.getVar("PREFERRED_PROVIDER_virtual/boot-bin")) or d.getVar("PREFERRED_PROVIDER_virtual/boot-bin") == d.getVar("PN")
if providesbin:
# add provides, if U-Boot is set to provide boot.bin
d.appendVar("PROVIDES", " virtual/boot-bin")
else:
# prevent U-Boot from deploying the boot.bin
d.setVar("SPL_BINARY", "")
if providesbin and d.getVar("SOC_FAMILY") in ["zynqmp"]:
# depend on the pmu-firmware build
d.appendVar("DEPENDS", " virtual/pmu-firmware")
# determine the path relative to the source tree
relpath = os.path.relpath(d.expand("${DEPLOY_DIR_IMAGE}/pmu-${MACHINE}.bin"), d.getVar("S"))
# setup PMU Firmware path via MAKEFLAGS
d.appendVar("EXTRA_OEMAKE", " CONFIG_PMUFW_INIT_FILE=\"{0}\"".format(relpath))
}
|