summaryrefslogtreecommitdiffstats
path: root/meta-xilinx-bsp
diff options
context:
space:
mode:
Diffstat (limited to 'meta-xilinx-bsp')
-rw-r--r--meta-xilinx-bsp/classes/zynqmp-pmu.bbclass122
-rw-r--r--meta-xilinx-bsp/conf/machine/include/zynqmp-pmu-config.inc20
-rw-r--r--meta-xilinx-bsp/conf/machine/zcu102-zynqmp.conf3
-rw-r--r--meta-xilinx-bsp/conf/machine/zcu104-zynqmp.conf3
-rw-r--r--meta-xilinx-bsp/conf/machine/zcu106-zynqmp.conf3
-rw-r--r--meta-xilinx-bsp/recipes-bsp/pmu-firmware/pmu-firmware_2018.1.bb99
-rw-r--r--meta-xilinx-bsp/recipes-bsp/u-boot/u-boot-spl-zynq-init.inc2
7 files changed, 1 insertions, 251 deletions
diff --git a/meta-xilinx-bsp/classes/zynqmp-pmu.bbclass b/meta-xilinx-bsp/classes/zynqmp-pmu.bbclass
deleted file mode 100644
index 714eb96a..00000000
--- a/meta-xilinx-bsp/classes/zynqmp-pmu.bbclass
+++ /dev/null
@@ -1,122 +0,0 @@
1#
2# This class handles configuring a recipe to build for the ZynqMP PMU
3# architecture. The reason for this class is due to limitations of multilib
4# with regards to multiple architectures (which do not work correctly).
5#
6# This class is specifically intended to extend the binutils-cross, gcc-cross,
7# newlib, libgloss and pmu-firmware recipes so that binaries can be emitted
8# which target the PMU architecture alongside building for the APU architecture
9# (ARM64). But the class can be applied globally via BBCLASSEXTEND in for
10# example a <machine>.conf.
11#
12# This class is almost the same as a multilib variant with custom TUNE_* setup
13# to allow for a switched TUNE_ARCH.
14#
15
16ORIG_TARGET_ARCH := "${TARGET_ARCH}"
17
18# zynqmp-pmu target arch (hardcoded based on pre-gen data from arch-microblaze.inc)
19DEFAULTTUNE = "microblaze"
20ABIEXTENSION = ""
21TUNE_ARCH = "microblazeel"
22#TUNE_FEATURES_tune-microblaze += "v9.2 barrel-shift pattern-compare"
23TUNE_CCARGS = "-mlittle-endian -mxl-barrel-shift -mxl-pattern-compare -mno-xl-reorder -mcpu=v9.2 -mxl-soft-mul -mxl-soft-div"
24TUNE_LDARGS = ""
25TUNE_ASARGS = ""
26TUNE_PKGARCH = "microblazeel-v9.2-bs-cmp"
27TARGET_OS = "elf"
28TARGET_FPU = "fpu-soft"
29
30# rebuild the MACHINE overrides
31MACHINEOVERRIDES = "${MACHINE}${@':${SOC_FAMILY}' if d.getVar('SOC_FAMILY') else ''}:microblaze"
32
33# override tune provided archs
34PACKAGE_EXTRA_ARCHS = "${TUNE_PKGARCH}"
35
36# baremetal equivalent config (note the tclibc is not included, this is purely
37# for recipes/etc that check for the value)
38TCLIBC = "baremetal"
39LIBCEXTENSION = ""
40LIBCOVERRIDE = ":libc-baremetal"
41USE_NLS = "no"
42IMAGE_LINGUAS = ""
43LIBC_DEPENDENCIES = ""
44
45# gcc-cross specific baremetal setup (due to the override order this is important)
46EXTRA_OECONF_pn-${MLPREFIX}gcc-cross-${TARGET_ARCH}_append = " --without-headers"
47
48EXTRA_OECONF_GCC_FLOAT = ""
49
50# Setup a multiarch like prefix.
51prefix = "/usr/${TARGET_SYS}"
52# Make sure GCC can search in the prefix dir (for libgcc)
53TOOLCHAIN_OPTIONS += "-B${RECIPE_SYSROOT}${includedir}/ -B${RECIPE_SYSROOT}${libdir}/"
54TOOLCHAIN_OPTIONS += "-I =${includedir} -L =${libdir}"
55
56python multitarget_zynqmp_pmu_virtclass_handler () {
57 variant = "zynqmp-pmu"
58 pn = d.getVar("PN")
59 if not (pn.startswith(variant + "-") or pn.endswith("-" + variant)):
60 return
61
62 if bb.data.inherits_class('native', e.data) or bb.data.inherits_class('nativesdk', e.data) or bb.data.inherits_class('crosssdk', e.data):
63 raise bb.parse.SkipPackage("Can't extend native/nativesdk/crosssdk recipes")
64
65 initialpn = e.data.getVar("PN").replace("-" + variant, "").replace(variant + "-", "")
66 e.data.setVar("MLPREFIX", variant + "-")
67 e.data.setVar("OVERRIDES", e.data.getVar("OVERRIDES", False) + ":virtclass-" + variant)
68
69 # hide multilib variants, this class is not one but this works around recipes thinking it is (due to MLPREFIX).
70 e.data.setVar("MULTILIB_VARIANTS", "")
71
72 # work around for -cross recipes that embed the TARGET_ARCH value
73 if bb.data.inherits_class('cross', e.data):
74 if initialpn.endswith("-" + d.getVar("ORIG_TARGET_ARCH")):
75 initialpn = initialpn.replace("-" + d.getVar("ORIG_TARGET_ARCH"), "-" + d.getVar("TARGET_ARCH"))
76
77 e.data.setVar("PN", variant + "-" + initialpn)
78}
79
80addhandler multitarget_zynqmp_pmu_virtclass_handler
81multitarget_zynqmp_pmu_virtclass_handler[eventmask] = "bb.event.RecipePreFinalise"
82
83python () {
84 variant = "zynqmp-pmu"
85 pn = d.getVar("PN")
86 if not pn.startswith(variant + "-"):
87 return
88
89 if pn.endswith("gcc-cross-" + d.getVar("TARGET_ARCH")):
90 # work around, DEPENDS _remove being immediate in gcc-cross
91 d.setVar("DEPENDS_remove", "virtual/%slibc-for-gcc" % d.getVar("TARGET_PREFIX"))
92
93 if pn.endswith("libgcc"):
94 # work around, strip depends on libc via do_package* tasks (this class cannot set ASSUME_PROVIDED += libc)
95 for i in ["do_package", "do_package_write_ipk", "do_package_write_deb", "do_package_write_rpm"]:
96 sanitized = " ".join([dep for dep in d.getVarFlag(i, "depends").split() if not dep.startswith("virtual/%s-libc" % variant)])
97 d.setVarFlag(i, "depends", sanitized)
98
99 import oe.classextend
100
101 clsextend = oe.classextend.ClassExtender(variant, d)
102
103 clsextend.map_depends_variable("DEPENDS")
104 clsextend.map_variable("PROVIDES")
105
106 clsextend.rename_packages()
107 clsextend.rename_package_variables((d.getVar("PACKAGEVARS") or "").split())
108
109 clsextend.map_packagevars()
110 clsextend.map_regexp_variable("PACKAGES_DYNAMIC")
111 clsextend.map_variable("PACKAGE_INSTALL")
112}
113
114# microblaze elf insane definitions not currently in insane.bbclass
115PACKAGEQA_EXTRA_MACHDEFFUNCS += "package_qa_get_machine_dict_microblazeelf"
116def package_qa_get_machine_dict_microblazeelf(machdata, d):
117 machdata["elf"] = {
118 "microblaze": (189, 0, 0, False, 32),
119 "microblazeeb":(189, 0, 0, False, 32),
120 "microblazeel":(189, 0, 0, True, 32),
121 }
122 return machdata
diff --git a/meta-xilinx-bsp/conf/machine/include/zynqmp-pmu-config.inc b/meta-xilinx-bsp/conf/machine/include/zynqmp-pmu-config.inc
deleted file mode 100644
index fd9e9809..00000000
--- a/meta-xilinx-bsp/conf/machine/include/zynqmp-pmu-config.inc
+++ /dev/null
@@ -1,20 +0,0 @@
1
2# Enable the use of zynqmp-pmu for specific recipes only
3def zynqmp_pmu_enable_for_bpns(d):
4 bpn = d.getVar("BPN")
5 crossbpns = ["binutils", "gcc"]
6 targetbpns = ["libgcc", "newlib", "libgloss"]
7 if bpn in targetbpns:
8 return True
9 if bpn in crossbpns and bb.data.inherits_class('cross', d):
10 return True
11 return False
12
13BBCLASSEXTEND_append = "${@' zynqmp-pmu' if zynqmp_pmu_enable_for_bpns(d) else ''}"
14
15# Add the pkgarch to the extra list, this is done to avoid warnings about
16# missing manifests due to implicit dependency chains on populate_sysroot when
17# a recipe/task depends on a IMAGE_EXTRADEPENDS/do_deploy task which is
18# provided by a zynqmp-pmu-* target.
19PACKAGE_EXTRA_ARCHS_append = " microblazeel-v9.2-bs-cmp"
20
diff --git a/meta-xilinx-bsp/conf/machine/zcu102-zynqmp.conf b/meta-xilinx-bsp/conf/machine/zcu102-zynqmp.conf
index d7f19ca6..07e8d64d 100644
--- a/meta-xilinx-bsp/conf/machine/zcu102-zynqmp.conf
+++ b/meta-xilinx-bsp/conf/machine/zcu102-zynqmp.conf
@@ -9,7 +9,6 @@ require conf/machine/include/machine-xilinx-overrides.inc
9require conf/machine/include/machine-xilinx-default.inc 9require conf/machine/include/machine-xilinx-default.inc
10require conf/machine/include/machine-xilinx-board.inc 10require conf/machine/include/machine-xilinx-board.inc
11require conf/machine/include/machine-xilinx-qemu.inc 11require conf/machine/include/machine-xilinx-qemu.inc
12include conf/machine/include/zynqmp-pmu-config.inc
13 12
14MACHINE_FEATURES = "rtc ext2 ext3 vfat usbhost" 13MACHINE_FEATURES = "rtc ext2 ext3 vfat usbhost"
15 14
@@ -28,13 +27,11 @@ KERNEL_DEVICETREE = "xilinx/zynqmp-zcu102-rev1.0.dtb"
28 27
29PREFERRED_PROVIDER_virtual/kernel ?= "linux-xlnx" 28PREFERRED_PROVIDER_virtual/kernel ?= "linux-xlnx"
30PREFERRED_PROVIDER_virtual/bootloader ?= "u-boot-xlnx" 29PREFERRED_PROVIDER_virtual/bootloader ?= "u-boot-xlnx"
31PREFERRED_PROVIDER_virtual/pmu-firmware ?= "zynqmp-pmu-pmu-firmware"
32 30
33EXTRA_IMAGEDEPENDS += " \ 31EXTRA_IMAGEDEPENDS += " \
34 u-boot-zynq-uenv \ 32 u-boot-zynq-uenv \
35 arm-trusted-firmware \ 33 arm-trusted-firmware \
36 qemu-devicetrees \ 34 qemu-devicetrees \
37 virtual/pmu-firmware \
38 virtual/boot-bin \ 35 virtual/boot-bin \
39 " 36 "
40 37
diff --git a/meta-xilinx-bsp/conf/machine/zcu104-zynqmp.conf b/meta-xilinx-bsp/conf/machine/zcu104-zynqmp.conf
index f5a2af97..76838c19 100644
--- a/meta-xilinx-bsp/conf/machine/zcu104-zynqmp.conf
+++ b/meta-xilinx-bsp/conf/machine/zcu104-zynqmp.conf
@@ -9,7 +9,6 @@ require conf/machine/include/tune-zynqmp.inc
9require conf/machine/include/machine-xilinx-overrides.inc 9require conf/machine/include/machine-xilinx-overrides.inc
10require conf/machine/include/machine-xilinx-default.inc 10require conf/machine/include/machine-xilinx-default.inc
11require conf/machine/include/machine-xilinx-board.inc 11require conf/machine/include/machine-xilinx-board.inc
12include conf/machine/include/zynqmp-pmu-config.inc
13 12
14MACHINE_FEATURES = "rtc ext2 ext3 vfat usbhost" 13MACHINE_FEATURES = "rtc ext2 ext3 vfat usbhost"
15 14
@@ -24,12 +23,10 @@ KERNEL_DEVICETREE = "xilinx/zynqmp-zcu104-revC.dtb"
24 23
25PREFERRED_PROVIDER_virtual/kernel ?= "linux-xlnx" 24PREFERRED_PROVIDER_virtual/kernel ?= "linux-xlnx"
26PREFERRED_PROVIDER_virtual/bootloader ?= "u-boot-xlnx" 25PREFERRED_PROVIDER_virtual/bootloader ?= "u-boot-xlnx"
27PREFERRED_PROVIDER_virtual/pmu-firmware ?= "zynqmp-pmu-pmu-firmware"
28 26
29EXTRA_IMAGEDEPENDS += " \ 27EXTRA_IMAGEDEPENDS += " \
30 u-boot-zynq-uenv \ 28 u-boot-zynq-uenv \
31 arm-trusted-firmware \ 29 arm-trusted-firmware \
32 virtual/pmu-firmware \
33 virtual/boot-bin \ 30 virtual/boot-bin \
34 " 31 "
35IMAGE_BOOT_FILES += "uEnv.txt atf-uboot.ub ${KERNEL_IMAGETYPE}-zynqmp-zcu104-revC.dtb" 32IMAGE_BOOT_FILES += "uEnv.txt atf-uboot.ub ${KERNEL_IMAGETYPE}-zynqmp-zcu104-revC.dtb"
diff --git a/meta-xilinx-bsp/conf/machine/zcu106-zynqmp.conf b/meta-xilinx-bsp/conf/machine/zcu106-zynqmp.conf
index 628ec6c1..eca633e4 100644
--- a/meta-xilinx-bsp/conf/machine/zcu106-zynqmp.conf
+++ b/meta-xilinx-bsp/conf/machine/zcu106-zynqmp.conf
@@ -8,7 +8,6 @@ require conf/machine/include/tune-zynqmp.inc
8require conf/machine/include/machine-xilinx-overrides.inc 8require conf/machine/include/machine-xilinx-overrides.inc
9require conf/machine/include/machine-xilinx-default.inc 9require conf/machine/include/machine-xilinx-default.inc
10require conf/machine/include/machine-xilinx-board.inc 10require conf/machine/include/machine-xilinx-board.inc
11include conf/machine/include/zynqmp-pmu-config.inc
12 11
13MACHINE_FEATURES = "rtc ext2 ext3 vfat usbhost" 12MACHINE_FEATURES = "rtc ext2 ext3 vfat usbhost"
14 13
@@ -22,12 +21,10 @@ KERNEL_DEVICETREE = "xilinx/zynqmp-zcu106-revA.dtb"
22 21
23PREFERRED_PROVIDER_virtual/kernel ?= "linux-xlnx" 22PREFERRED_PROVIDER_virtual/kernel ?= "linux-xlnx"
24PREFERRED_PROVIDER_virtual/bootloader ?= "u-boot-xlnx" 23PREFERRED_PROVIDER_virtual/bootloader ?= "u-boot-xlnx"
25PREFERRED_PROVIDER_virtual/pmu-firmware ?= "zynqmp-pmu-pmu-firmware"
26 24
27EXTRA_IMAGEDEPENDS += " \ 25EXTRA_IMAGEDEPENDS += " \
28 u-boot-zynq-uenv \ 26 u-boot-zynq-uenv \
29 arm-trusted-firmware \ 27 arm-trusted-firmware \
30 virtual/pmu-firmware \
31 virtual/boot-bin \ 28 virtual/boot-bin \
32 " 29 "
33 30
diff --git a/meta-xilinx-bsp/recipes-bsp/pmu-firmware/pmu-firmware_2018.1.bb b/meta-xilinx-bsp/recipes-bsp/pmu-firmware/pmu-firmware_2018.1.bb
deleted file mode 100644
index e54e1037..00000000
--- a/meta-xilinx-bsp/recipes-bsp/pmu-firmware/pmu-firmware_2018.1.bb
+++ /dev/null
@@ -1,99 +0,0 @@
1SUMMARY = "Firmware for the PMU on the ZynqMP Programmable Silicon"
2HOMEPAGE = "https://github.com/Xilinx/embeddedsw"
3SECTION = "bsp"
4
5INHIBIT_DEFAULT_DEPS = "1"
6DEPENDS = "virtual/${TARGET_PREFIX}gcc newlib libgloss libgcc"
7
8# force this recipe to provide a target virtual/pmu-firmware. this is applied
9# after any class extender mapping and results in this recipe always providing
10# 'virtual/pmu-firmware'.
11python append_target_provides () {
12 d.appendVar("PROVIDES", " virtual/pmu-firmware")
13}
14addhandler append_target_provides
15append_target_provides[eventmask] = "bb.event.RecipeParsed"
16
17# This source links in a number of components with differing licenses, and some
18# licenses are not Open Source compatible. Additionally the pmu-firmware source
19# itself is licensed under a modified MIT license which restricts use to Xilinx
20# devices only.
21LICENSE = "Proprietary"
22LIC_FILES_CHKSUM = "file://../../../../license.txt;md5=04841c5ad8409b474da7180de5391926"
23
24inherit deploy
25
26XILINX_RELEASE_VERSION = "v2018.1"
27SRCREV = "aaa566bc3fa19255de4d434ebfa57ae3a9d261b2"
28PV = "${XILINX_RELEASE_VERSION}+git${SRCPV}"
29
30SRC_URI = "git://github.com/Xilinx/embeddedsw.git;protocol=https;nobranch=1"
31
32COMPATIBLE_HOST = "microblaze.*-elf"
33COMPATIBLE_MACHINE = "^$"
34COMPATIBLE_MACHINE_zynqmp = "zynqmp"
35
36PACKAGE_ARCH = "${MACHINE_ARCH}"
37
38S = "${WORKDIR}/git/lib/sw_apps/zynqmp_pmufw/src"
39
40# The makefile does not handle parallelization
41PARALLEL_MAKE = ""
42
43do_configure() {
44 # manually do the copy_bsp step first, so as to be able to fix up use of
45 # mb-* commands
46 ${S}/../misc/copy_bsp.sh
47}
48
49COMPILER = "${CC}"
50COMPILER_FLAGS = "-O2 -c"
51EXTRA_COMPILER_FLAGS = "-g -Wall -Wextra -Os -flto -ffat-lto-objects"
52ARCHIVER = "${AR}"
53
54# HACK: fix the dirty bug where xilsecure wants to call this PSVersion
55# function, which is not implemented for microblaze. The symbols never make it
56# into the final elf as the xilsecure function that uses it is not called in
57# pmufw.
58EXTRA_COMPILER_FLAGS_append = " -DXGetPSVersion_Info=atexit"
59
60BSP_DIR ?= "${S}/../misc/zynqmp_pmufw_bsp"
61BSP_TARGETS_DIR ?= "${BSP_DIR}/psu_pmu_0/libsrc"
62
63def bsp_make_vars(d):
64 s = ["COMPILER", "CC", "COMPILER_FLAGS", "EXTRA_COMPILER_FLAGS", "ARCHIVER", "AR", "AS"]
65 return " ".join(["\"%s=%s\"" % (v, d.getVar(v)) for v in s])
66
67do_compile() {
68 # the Makefile in ${S}/../misc/Makefile, does not handle CC, AR, AS, etc
69 # properly. So do its job manually. Preparing the includes first, then libs.
70 for i in $(ls ${BSP_TARGETS_DIR}/*/src/Makefile); do
71 oe_runmake -C $(dirname $i) -s include ${@bsp_make_vars(d)}
72 done
73 for i in $(ls ${BSP_TARGETS_DIR}/*/src/Makefile); do
74 oe_runmake -C $(dirname $i) -s libs ${@bsp_make_vars(d)}
75 done
76
77 # --build-id=none is required due to linker script not defining a location for it.
78 oe_runmake CC="${CC}" CC_FLAGS="-MMD -MP -Wl,--build-id=none"
79}
80
81do_install() {
82 :
83}
84
85PMU_FIRMWARE_BASE_NAME ?= "${BPN}-${PKGE}-${PKGV}-${PKGR}-${MACHINE}-${DATETIME}"
86PMU_FIRMWARE_BASE_NAME[vardepsexclude] = "DATETIME"
87
88do_deploy() {
89 install -Dm 0644 ${B}/executable.elf ${DEPLOYDIR}/${PMU_FIRMWARE_BASE_NAME}.elf
90 ln -sf ${PMU_FIRMWARE_BASE_NAME}.elf ${DEPLOYDIR}/${BPN}-${MACHINE}.elf
91 ln -sf ${BPN}-${MACHINE}.elf ${DEPLOYDIR}/pmu-${MACHINE}.elf
92 ${OBJCOPY} -O binary ${B}/executable.elf ${B}/executable.bin
93 install -m 0644 ${B}/executable.bin ${DEPLOYDIR}/${PMU_FIRMWARE_BASE_NAME}.bin
94 ln -sf ${PMU_FIRMWARE_BASE_NAME}.bin ${DEPLOYDIR}/${BPN}-${MACHINE}.bin
95 ln -sf ${BPN}-${MACHINE}.bin ${DEPLOYDIR}/pmu-${MACHINE}.bin
96}
97addtask deploy before do_build after do_install
98
99BBCLASSEXTEND = "zynqmp-pmu"
diff --git a/meta-xilinx-bsp/recipes-bsp/u-boot/u-boot-spl-zynq-init.inc b/meta-xilinx-bsp/recipes-bsp/u-boot/u-boot-spl-zynq-init.inc
index 9cf09ff6..6233bc82 100644
--- a/meta-xilinx-bsp/recipes-bsp/u-boot/u-boot-spl-zynq-init.inc
+++ b/meta-xilinx-bsp/recipes-bsp/u-boot/u-boot-spl-zynq-init.inc
@@ -65,7 +65,7 @@ python () {
65 65
66 if providesbin and d.getVar("SOC_FAMILY") in ["zynqmp"]: 66 if providesbin and d.getVar("SOC_FAMILY") in ["zynqmp"]:
67 # depend on the pmu-firmware build 67 # depend on the pmu-firmware build
68 d.appendVar("DEPENDS", " virtual/pmu-firmware") 68 #d.appendVar("DEPENDS", " virtual/pmu-firmware")
69 # determine the path relative to the source tree 69 # determine the path relative to the source tree
70 relpath = os.path.relpath(d.expand("${DEPLOY_DIR_IMAGE}/pmu-${MACHINE}.bin"), d.getVar("S")) 70 relpath = os.path.relpath(d.expand("${DEPLOY_DIR_IMAGE}/pmu-${MACHINE}.bin"), d.getVar("S"))
71 # setup PMU Firmware path via MAKEFLAGS 71 # setup PMU Firmware path via MAKEFLAGS