summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Hatle <mark.hatle@amd.com>2023-10-23 08:51:20 -0600
committerMark Hatle <mark.hatle@amd.com>2023-10-23 08:56:37 -0600
commiteb42c7caeac33f42096673522e650441f05ca8da (patch)
tree33f97fe41ec8855cf591c2692c7c7038b6bc1ae3
parent387b31acf85b84bd34f339c87c0b51a9af4e16e4 (diff)
parent05911e19d85fd98c42054238392afe95a5125265 (diff)
downloadmeta-xilinx-eb42c7caeac33f42096673522e650441f05ca8da.tar.gz
Merge remote-tracking branch 'origin/rel-v2023.2' into nanbield
Signed-off-by: Mark Hatle <mark.hatle@amd.com>
-rw-r--r--.gitmodules4
-rw-r--r--README.building.md2
-rw-r--r--docs/README.dfx.user.dts.md475
-rw-r--r--docs/README.fpgamanager.custom.md3
-rw-r--r--meta-xilinx-bsp/README.md7
-rw-r--r--meta-xilinx-bsp/conf/machine/ac701-microblazeel.conf24
-rw-r--r--meta-xilinx-bsp/conf/machine/kc705-microblazeel.conf12
-rw-r--r--meta-xilinx-bsp/conf/machine/kcu105-microblazeel.conf24
-rw-r--r--meta-xilinx-bsp/conf/machine/vck190-versal.conf6
-rw-r--r--meta-xilinx-bsp/conf/machine/vcu118-microblazeel.conf20
-rw-r--r--meta-xilinx-bsp/conf/machine/vek280-versal.conf22
-rw-r--r--meta-xilinx-bsp/conf/machine/vmk180-versal.conf6
-rw-r--r--meta-xilinx-bsp/conf/machine/vpk120-versal.conf4
-rw-r--r--meta-xilinx-bsp/conf/machine/vpk180-versal.conf4
-rw-r--r--meta-xilinx-bsp/conf/machine/zc702-zynq7.conf2
-rw-r--r--meta-xilinx-bsp/conf/machine/zc706-zynq7.conf4
-rw-r--r--meta-xilinx-bsp/conf/machine/zcu102-zynqmp.conf6
-rw-r--r--meta-xilinx-bsp/conf/machine/zcu104-zynqmp.conf3
-rw-r--r--meta-xilinx-bsp/conf/machine/zcu106-zynqmp.conf7
-rw-r--r--meta-xilinx-bsp/conf/machine/zcu111-zynqmp.conf6
-rw-r--r--meta-xilinx-bsp/conf/machine/zcu1275-zynqmp.conf2
-rw-r--r--meta-xilinx-bsp/conf/machine/zcu1285-zynqmp.conf2
-rw-r--r--meta-xilinx-bsp/conf/machine/zcu208-zynqmp.conf2
-rw-r--r--meta-xilinx-bsp/conf/machine/zcu216-zynqmp.conf2
-rw-r--r--meta-xilinx-bsp/recipes-bsp/device-tree/device-tree.bbappend8
-rw-r--r--meta-xilinx-bsp/recipes-bsp/dfx-mgr/dfx-mgr_%.bbappend10
-rw-r--r--meta-xilinx-bsp/recipes-bsp/dfx-mgr/files/zcu106-xlnx-firmware-detect71
-rw-r--r--meta-xilinx-contrib/dynamic-layers/meta-xilinx-tools/recipes-bsp/bitstream/bitstream-extraction_%.bbappend2
-rw-r--r--meta-xilinx-contrib/recipes-kernel/linux/linux-xlnx/v2023.2/0001-drm-xilinx-Add-encoder-for-Digilent-boards.patch305
-rw-r--r--meta-xilinx-contrib/recipes-kernel/linux/linux-xlnx/v2023.2/0002-clk-Add-driver-for-axi_dynclk-IP-Core.patch607
-rw-r--r--meta-xilinx-contrib/recipes-kernel/linux/linux-xlnx/v2023.2/0003-drm-xilinx-Fix-DPMS-transition-to-on.patch54
-rw-r--r--meta-xilinx-contrib/recipes-kernel/linux/linux-xlnx/v2023.2/0004-minized-wifi-bluetooth.cfg33
-rw-r--r--meta-xilinx-contrib/recipes-kernel/linux/linux-xlnx_2023.2.bbappend12
-rw-r--r--meta-xilinx-core/classes/dfx_user_dts.bbclass267
-rw-r--r--meta-xilinx-core/classes/fpgamanager_custom.bbclass197
-rw-r--r--meta-xilinx-core/conf/layer.conf10
-rw-r--r--meta-xilinx-core/conf/machine/README75
-rw-r--r--meta-xilinx-core/conf/machine/include/machine-xilinx-default.inc52
-rw-r--r--meta-xilinx-core/conf/machine/microblaze-generic.conf43
-rw-r--r--meta-xilinx-core/conf/machine/versal-generic.conf3
-rw-r--r--meta-xilinx-core/conf/machine/versal-net-generic.conf2
-rw-r--r--meta-xilinx-core/conf/machine/zynq-generic.conf3
-rw-r--r--meta-xilinx-core/conf/machine/zynqmp-generic.conf5
-rw-r--r--meta-xilinx-core/dynamic-layers/openamp-layer/recipes-bsp/device-tree/device-tree.bbappend9
-rw-r--r--meta-xilinx-core/dynamic-layers/openamp-layer/recipes-bsp/device-tree/open-amp-device-tree.bb3
-rw-r--r--meta-xilinx-core/dynamic-layers/openamp-layer/recipes-openamp/libmetal/libmetal-xlnx_v2023.2.bb15
-rw-r--r--meta-xilinx-core/dynamic-layers/openamp-layer/recipes-openamp/open-amp/open-amp-xlnx_v2023.2.bb16
-rw-r--r--meta-xilinx-core/dynamic-layers/virtualization-layer/recipes-kernel/lopper/lopper_git.bbappend2
m---------meta-xilinx-core/gen-machine-conf0
-rw-r--r--meta-xilinx-core/recipes-bsp/ai-engine/ai-engine-driver_3.4.bb (renamed from meta-xilinx-core/recipes-bsp/ai-engine/ai-engine-driver_3.2.bb)6
-rw-r--r--meta-xilinx-core/recipes-bsp/ai-engine/aie-rt.inc6
-rw-r--r--meta-xilinx-core/recipes-bsp/ai-engine/aiefal_1.5.bb (renamed from meta-xilinx-core/recipes-bsp/ai-engine/aiefal_1.0.bb)2
-rw-r--r--meta-xilinx-core/recipes-bsp/arm-trusted-firmware/arm-trusted-firmware_2023.2.bb8
-rw-r--r--meta-xilinx-core/recipes-bsp/bitstream/bitstream.bb59
-rw-r--r--meta-xilinx-core/recipes-bsp/bootbin/xilinx-bootbin_1.0.bb21
-rw-r--r--meta-xilinx-core/recipes-bsp/bootgen/bootgen_2023.2.bb31
-rw-r--r--meta-xilinx-core/recipes-bsp/device-tree/device-tree.bb99
-rw-r--r--meta-xilinx-core/recipes-bsp/dfx-mgr/dfx-mgr_2023.2.bb72
-rw-r--r--meta-xilinx-core/recipes-bsp/libdfx/libdfx_2023.2.bb23
-rw-r--r--meta-xilinx-core/recipes-bsp/u-boot/u-boot-tools-xlnx_2023.2.bb21
-rw-r--r--meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx-2023.2.inc17
-rw-r--r--meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx-blob.inc8
-rw-r--r--meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx-scr.bb34
-rw-r--r--meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx-scr/boot.cmd.generic12
-rw-r--r--meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx-scr/boot.cmd.generic.root12
-rw-r--r--meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx.inc8
-rw-r--r--meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx_2023.2.bb4
-rw-r--r--meta-xilinx-core/recipes-devtools/qemu/qemu-devicetrees_2023.2.bb6
-rw-r--r--meta-xilinx-core/recipes-devtools/qemu/qemu-xilinx-2023.2.inc3
-rw-r--r--meta-xilinx-core/recipes-devtools/qemu/qemu-xilinx-native_2023.2.bb9
-rw-r--r--meta-xilinx-core/recipes-devtools/qemu/qemu-xilinx-system-native_2023.2.bb26
-rw-r--r--meta-xilinx-core/recipes-devtools/qemu/qemu-xilinx_2023.2.bb26
-rw-r--r--meta-xilinx-core/recipes-graphics/libgles/libmali-xlnx.bb2
-rw-r--r--meta-xilinx-core/recipes-graphics/wayland/weston_%.bbappend17
-rwxr-xr-xmeta-xilinx-core/recipes-graphics/xorg-xserver/xserver-xorg/monitor-hotplug.sh19
-rw-r--r--meta-xilinx-core/recipes-graphics/xorg-xserver/xserver-xorg_%.bbappend2
-rw-r--r--meta-xilinx-core/recipes-kernel/dp/kernel-module-dp_2023.2.bb24
-rw-r--r--meta-xilinx-core/recipes-kernel/hdmi/kernel-module-hdmi_2023.2.bb24
-rw-r--r--meta-xilinx-core/recipes-kernel/linux/linux-xlnx_2023.2.bb11
-rw-r--r--meta-xilinx-core/recipes-multimedia/vcu/kernel-module-vcu_2023.2.bb39
-rw-r--r--meta-xilinx-core/recipes-multimedia/vcu/libomxil-xlnx_2023.2.bb50
-rw-r--r--meta-xilinx-core/recipes-multimedia/vcu/libvcu-xlnx_2023.2.bb41
-rw-r--r--meta-xilinx-core/recipes-multimedia/vcu/vcu-firmware_2023.2.bb38
-rw-r--r--meta-xilinx-core/recipes-multimedia/vdu/kernel-module-vdu_2023.1.bb3
-rw-r--r--meta-xilinx-core/recipes-multimedia/vdu/kernel-module-vdu_2023.2.bb42
-rw-r--r--meta-xilinx-core/recipes-multimedia/vdu/libvdu-ctrlsw_2023.1.bb3
-rw-r--r--meta-xilinx-core/recipes-multimedia/vdu/libvdu-ctrlsw_2023.2.bb45
-rw-r--r--meta-xilinx-core/recipes-multimedia/vdu/libvdu-omxil_2023.1.bb3
-rw-r--r--meta-xilinx-core/recipes-multimedia/vdu/libvdu-omxil_2023.2.bb54
-rwxr-xr-xmeta-xilinx-core/recipes-multimedia/vdu/vdu-firmware_2023.1.bb3
-rw-r--r--meta-xilinx-core/recipes-multimedia/vdu/vdu-firmware_2023.2.bb43
-rw-r--r--meta-xilinx-core/recipes-xrt/xrt/xrt.inc14
-rw-r--r--meta-xilinx-core/recipes-xrt/xrt/xrt_git.bb9
-rw-r--r--meta-xilinx-standalone-experimental/README.md2
-rw-r--r--meta-xilinx-standalone-experimental/conf/dtb-embeddedsw.inc11
-rwxr-xr-xmeta-xilinx-standalone-experimental/recipes-core/meta/files/dt-processor.sh107
-rw-r--r--meta-xilinx-standalone-experimental/recipes-drivers/dmaps_git.bb19
-rw-r--r--meta-xilinx-standalone-experimental/recipes-libraries/xilffs_git.bb2
-rw-r--r--meta-xilinx-standalone/classes/xlnx-embeddedsw.bbclass3
-rw-r--r--meta-xilinx-standalone/conf/distro/xilinx-standalone.inc6
-rw-r--r--meta-xilinx-standalone/recipes-bsp/embeddedsw/fsbl-firmware_2023.2.bb11
-rw-r--r--meta-xilinx-standalone/recipes-bsp/embeddedsw/plm-firmware_2023.2.bb29
-rw-r--r--meta-xilinx-standalone/recipes-bsp/embeddedsw/pmu-firmware_2023.2.bb16
-rw-r--r--meta-xilinx-standalone/recipes-bsp/embeddedsw/psm-firmware_2023.2.bb34
-rw-r--r--meta-xilinx-vendor/conf/machine/ultra96-zynqmp.conf12
105 files changed, 3261 insertions, 443 deletions
diff --git a/.gitmodules b/.gitmodules
index ae8486a4..017e758a 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,4 +1,4 @@
1[submodule "gen-machine-conf"] 1[submodule "gen-machine-conf"]
2 path = meta-xilinx-core/gen-machine-conf 2 path = meta-xilinx-core/gen-machine-conf
3 url = https://github.com/Xilinx/gen-machine-conf.git 3 url = https://gitenterprise.xilinx.com/Petalinux/gen-machine-conf.git
4 branch = xlnx_rel_v2023.1 4 branch = xlnx_rel_v2023.2
diff --git a/README.building.md b/README.building.md
index 8bb866a7..7ffc1ab3 100644
--- a/README.building.md
+++ b/README.building.md
@@ -31,7 +31,7 @@ $ source poky/oe-init-build-env
314. Once initialized configure `bblayers.conf` by adding dependency layers as shown 314. Once initialized configure `bblayers.conf` by adding dependency layers as shown
32 below using `bitbake-layers` command. 32 below using `bitbake-layers` command.
33> **Note:** From step 3 by default `meta-yocto-bsp` will be included in bblayers.conf 33> **Note:** From step 3 by default `meta-yocto-bsp` will be included in bblayers.conf
34> file and this can be removed using `$ bitbake-layers add-layer meta-yocto-bsp` 34> file and this can be removed using `$ bitbake-layers remove-layer meta-yocto-bsp`
35> command. 35> command.
36 36
37``` 37```
diff --git a/docs/README.dfx.user.dts.md b/docs/README.dfx.user.dts.md
new file mode 100644
index 00000000..6cfc5fd0
--- /dev/null
+++ b/docs/README.dfx.user.dts.md
@@ -0,0 +1,475 @@
1# Build Instructions to create firmware recipes using dfx_user_dts bbclass
2
3* [Introduction](#introduction)
4* [How to create a firmware recipe app](#how-to-create-a-firmware-recipe-app)
5* [Test Procedure on Target](#test-procedure-on-target)
6 * [Loading PL bitstream or pdi and dt overlay](#loading-pl-bitstream-or-pdi-and-dt-overlay)
7 * [Testing PL functionality](#testing-pl-functionality)
8 * [Unloading PL bitstream or pdi and dt overlay](#unloading-pl-bitstream-or-pdi-and-dt-overlay)
9* [References](#references)
10
11## Introduction
12This readme describes the build instructions to create firmware recipes using
13dfx_user_dts.bbclass for dfx configuration. This bitbake class supports
14following use cases.
15
16> **Note:** Refer https://github.com/Xilinx/dfx-mgr/blob/master/README.md for
17> shell.json and accel.json file content.
18
19* **Zynq-7000 and ZynqMP**:
20 * Design: Vivado flat design.
21 * Input files to firmware recipes: .bit, .dtsi or dtbo and shell.json (optional)
22 * Usage Examples:
23```
24SRC_URI = " \
25 file://<flat_design_pl>.bit \
26 file://<flat_design_pl>.dtsi \
27 file://shell.json \
28 "
29```
30
31```
32SRC_URI = " \
33 file://<flat_design_pl>.bit \
34 file://<flat_design_pl>.dtbo \
35 file://shell.json \
36 "
37```
38
39* **ZynqMP and Versal**:
40 * Design: Vivado DFx design.
41 * Input files to firmware recipes: .bit(ZynqMP) or .pdi(Versal), .dtsi or dtbo
42 shell.json or accel.json (optional) and .xclbin (optional).
43 * Usage Examples:
44
45```
46# ZynqMP DFx Static
47SRC_URI = " \
48 file://<dfx_design_static_pl>.bit \
49 file://<dfx_design_static_pl>.dtsi \
50 file://shell.json \
51 file://<dfx_design_static_pl>.xclbin \
52 "
53```
54
55```
56# ZynqMP DFx Static
57SRC_URI = " \
58 file://<dfx_design_static_pl>.bit \
59 file://<dfx_design_static_pl>.dtbo \
60 file://shell.json \
61 file://<dfx_design_static_pl>.xclbin \
62 "
63```
64
65```
66# ZynqMP DFx RP
67SRC_URI = " \
68 file://<dfx_design_rp_rm_pl>.bit \
69 file://<dfx_design_rp_rm_pl>.dtsi \
70 file://accel.json \
71 file://<dfx_design_rp_rm_pl>.xclbin \
72 "
73```
74
75```
76# ZynqMP DFx RP
77SRC_URI = " \
78 file://<dfx_design_rp_rm_pl>.bit \
79 file://<dfx_design_rp_rm_pl>.dtbo \
80 file://accel.json \
81 file://<dfx_design_rp_rm_pl>.xclbin \
82 "
83```
84```
85# Versal DFx Static
86SRC_URI = " \
87 file://<dfx_design_static_pl>.pdi \
88 file://<dfx_design_static_pl>.dtsi \
89 file://shell.json \
90 file://<dfx_design_static_pl>.xclbin \
91 "
92```
93
94```
95# Versal DFx Static
96SRC_URI = " \
97 file://<dfx_design_static_pl>.pdi \
98 file://<dfx_design_static_pl>.dtbo \
99 file://shell.json \
100 file://<dfx_design_static_pl>.xclbin \
101 "
102```
103
104```
105# Versal DFx RP
106SRC_URI = " \
107 file://<dfx_design_rp_rm_pl>.pdi \
108 file://<dfx_design_rp_rm_pl>.dtsi \
109 file://accel.json \
110 file://<dfx_design_rp_rm_pl>.xclbin \
111 "
112```
113
114```
115# Versal DFx RP
116SRC_URI = " \
117 file://<dfx_design_rp_rm_pl>.pdi \
118 file://<dfx_design_rp_rm_pl>.dtbo \
119 file://accel.json \
120 file://<dfx_design_rp_rm_pl>.xclbin \
121 "
122```
123---
124
125## How to create a firmware recipe app
126
1271. Follow [Building Instructions](../README.building.md) upto step 4.
1282. Create recipes-firmware directory in meta layer and copy the .bit/pdi,
129 .dtsi/dtbo, .json and .xclbin file to these directories.
130```
131$ mkdir -p <meta-layer>/recipes-fimrware/<recipes-firmware-app>/files
132$ cp -r <path-to-files>/*.{bit or pdi, dtsi or dtbo, shell.json or accel.json and .xclbin} <meta-layer>/recipes-fimrware/<firmware-app-name>/files
133```
1343. Now create the recipes for flat or static or partial firmware using recipetool.
135```
136$ recipetool create -o <meta-layer>/recipes-fimrware/<firmware-app-name>/firmware-app-name.bb file:///<meta-layer>/recipes-fimrware/<firmware-app-name>/files
137```
1384. Modify the recipe and inherit dfx_user_dts bbclass as shown below.
139```
140SUMMARY = "Full Bitstream loading app firmware using dfx_user_dts bbclass"
141LICENSE = "MIT"
142LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
143
144inherit dfx_user_dts
145
146SRC_URI = "\
147 file://zcu111-pl-demo.bit \
148 file://zcu111-pl-demo.dtsi \
149 "
150
151COMPATIBLE_MACHINE ?= "^$"
152COMPATIBLE_MACHINE:zynqmp = "zynqmp"
153```
1545. Add firmware-recipe app to image and enable fpga-overlay machine features to
155 local.conf as shown below.
156> **Note:** fpga-manager-script provides fpgautil tool to load .bit/pdi and dtbo
157> at runtime linux.
158```
159MACHINE_FEATURES += "fpga-overlay"
160IMAGE_INSTALL:append = " \
161 firmware-app-name \
162 fpga-manager-script \
163 "
164```
1656. Follow [Building Instructions](../README.building.md) and continue from step 5.
1667. Once images are built firmware app files will be installed on target_rootfs.
167```
168# <target_rootfs>/lib/firmware/xilinx/firmware-app-name
169```
170---
171
172## Test Procedure on Target
173* Once Linux boots on target, use fpgautil command to load .bit or .pdi and
174 corresponding dt overlay as shown below.
175> **Note:** firmware can be loaded only with sudo or root permissions.
176---
177
178### Loading PL bitstream or pdi and dt overlay
179
180* ZynqMP
181```
182yocto-zynqmp-generic-20231:~$ sudo su
183yocto-zynqmp-generic-20231:/home/petalinux# cat /proc/interrupts
184 CPU0 CPU1 CPU2 CPU3
185 11: 13309 13021 13673 14170 GICv2 30 Level arch_timer
186 14: 0 0 0 0 GICv2 67 Level zynqmp_ipi
187 15: 0 0 0 0 GICv2 175 Level arm-pmu
188 16: 0 0 0 0 GICv2 176 Level arm-pmu
189 17: 0 0 0 0 GICv2 177 Level arm-pmu
190 18: 0 0 0 0 GICv2 178 Level arm-pmu
191 19: 0 0 0 0 GICv2 58 Level ffa60000.rtc
192 20: 0 0 0 0 GICv2 59 Level ffa60000.rtc
193 21: 0 0 0 0 GICv2 42 Level ff960000.memory-controller
194 22: 0 0 0 0 GICv2 88 Level ams-irq
195 23: 0 0 0 0 GICv2 155 Level axi-pmon, axi-pmon
196 24: 327 0 0 0 GICv2 53 Level xuartps
197 27: 0 0 0 0 GICv2 156 Level zynqmp-dma
198 28: 0 0 0 0 GICv2 157 Level zynqmp-dma
199 29: 0 0 0 0 GICv2 158 Level zynqmp-dma
200 30: 0 0 0 0 GICv2 159 Level zynqmp-dma
201 31: 0 0 0 0 GICv2 160 Level zynqmp-dma
202 32: 0 0 0 0 GICv2 161 Level zynqmp-dma
203 33: 0 0 0 0 GICv2 162 Level zynqmp-dma
204 34: 0 0 0 0 GICv2 163 Level zynqmp-dma
205 35: 0 0 0 0 GICv2 109 Level zynqmp-dma
206 36: 0 0 0 0 GICv2 110 Level zynqmp-dma
207 37: 0 0 0 0 GICv2 111 Level zynqmp-dma
208 38: 0 0 0 0 GICv2 112 Level zynqmp-dma
209 39: 0 0 0 0 GICv2 113 Level zynqmp-dma
210 40: 0 0 0 0 GICv2 114 Level zynqmp-dma
211 41: 0 0 0 0 GICv2 115 Level zynqmp-dma
212 42: 0 0 0 0 GICv2 116 Level zynqmp-dma
213 43: 0 0 0 0 GICv2 154 Level fd4c0000.dma-controller
214 44: 5938 0 0 0 GICv2 47 Level ff0f0000.spi
215 45: 76 0 0 0 GICv2 95 Level eth0, eth0
216 46: 0 0 0 0 GICv2 57 Level axi-pmon, axi-pmon
217 47: 4802 0 0 0 GICv2 49 Level cdns-i2c
218 48: 501 0 0 0 GICv2 50 Level cdns-i2c
219 50: 0 0 0 0 GICv2 84 Edge ff150000.watchdog
220 51: 0 0 0 0 GICv2 151 Level fd4a0000.display
221 52: 548 0 0 0 GICv2 81 Level mmc0
222 53: 0 0 0 0 GICv2 165 Level ahci-ceva[fd0c0000.ahci]
223 54: 0 0 0 0 GICv2 97 Level xhci-hcd:usb1
224 55: 0 0 0 0 zynq-gpio 22 Edge sw19
225IPI0: 64 25 87 38 Rescheduling interrupts
226IPI1: 1933 6579 1096 5686 Function call interrupts
227IPI2: 0 0 0 0 CPU stop interrupts
228IPI3: 0 0 0 0 CPU stop (for crash dump) interrupts
229IPI4: 0 0 0 0 Timer broadcast interrupts
230IPI5: 0 0 0 0 IRQ work interrupts
231IPI6: 0 0 0 0 CPU wake-up interrupts
232Err: 0
233yocto-zynqmp-generic-20231:/home/petalinux# tree /lib/firmware/
234/lib/firmware/
235`-- xilinx
236 `-- zcu111-pl-demo
237 |-- zcu111-pl-demo.bit.bin
238 `-- zcu111-pl-demo.dtbo
239
2402 directories, 2 files
241yocto-zynqmp-generic-20231:/home/petalinux# fpgautil -b /lib/firmware/xilinx/zcu111-pl-demo/zcu111-pl-demo.bit -o /lib/firmware/xilinx/zcu111-pl-demo/zcu111-pl-demo.dtbo
242[ 91.039773] fpga_manager fpga0: writing zcu111-pl-demo.bit to Xilinx ZynqMP FPGA Manager
243[ 91.528214] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /fpga-full/firmware-name
244[ 91.538354] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /fpga-full/pid
245[ 91.547598] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /fpga-full/resets
246[ 91.557087] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /fpga-full/uid
247[ 91.566804] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/afi0
248[ 91.576312] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/clocking0
249[ 91.586255] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/axi_gpio_0
250[ 91.596280] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/misc_clk_0
251[ 91.606300] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/axi_gpio_1
252[ 91.616325] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/axi_gpio_2
253[ 91.626342] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/axi_uartlite_0
254[ 91.636705] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/ddr4_0
255[ 91.661849] gpio gpiochip3: (a0000000.gpio): not an immutable chip, please consider fixing it!
256[ 91.662020] gpio gpiochip4: (a0010000.gpio): not an immutable chip, please consider fixing it!
257[ 91.863492] a0030000.serial: ttyUL0 at MMIO 0xa0030000 (irq = 58, base_baud = 0) is a uartlite
258[ 91.876674] uartlite a0030000.serial: Runtime PM usage count underflow!
259[ 91.906539] input: pl-gpio-keys as /devices/platform/pl-gpio-keys/input/input1
260Time taken to load BIN is 901.000000 Milli Seconds
261BIN FILE loaded through FPGA manager successfully
262yocto-zynqmp-generic-20231:/home/petalinux#
263```
264* Versal (DFx Static)
265```
266yocto-vck190-dfx-2023:~$ sudo su
267root@yocto-vck190-dfx-2023:~#
268root@yocto-vck190-dfx-2023:~# fpgautil -o /lib/firmware/xilinx/vck190-dfx-static/vck190-dfx-static.dtbo
269[ 257.555571] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /fpga/external-fpga-config
270[ 257.565879] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /fpga/pid
271[ 257.574670] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /fpga/uid
272[ 257.583599] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/fpga_PR0
273[ 257.593434] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/fpga_PR1
274[ 257.603268] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/fpga_PR2
275[ 257.613100] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/static_region_axi_bram_ctrl_0
276[ 257.624762] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/static_region_dfx_decoupler_rp1
277[ 257.636589] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/static_region_dfx_decoupler_rp2
278[ 257.648415] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/static_region_dfx_decoupler_rp3
279[ 257.663234] of-fpga-region fpga:fpga-PR0: FPGA Region probed
280[ 257.669135] of-fpga-region fpga:fpga-PR1: FPGA Region probed
281[ 257.675022] of-fpga-region fpga:fpga-PR2: FPGA Region probed
282root@yocto-vck190-dfx-2023:~#
283```
284* Versal (DFx RP)
285```
286root@yocto-vck190-dfx-2023:~# fpgautil -b /lib/firmware/xilinx/vck190-dfx-static/rp1/vck190-dfx-rp1rm1-dipsw/vck190-dfx-rp1rm1-dipsw.pdi -o /lib/firmware/xilinx/vck190-dfx-static/rp1/vck190-dfx-rp1rm1-dipsw/vck190-dfx-rp1rm1-dipsw.dtbo -f Partial -n PR0
287[ 273.511455] fpga_manager fpga0: writing vck190-dfx-rp1rm1-dipsw.pdi to Xilinx Versal FPGA Manager
288[284052.461]Loading PDI from DDR
289[284052.566]Monolithic/Master Device
290[284055.847]3.365 ms: PDI initialization time
291[284059.809]+++Loading Image#: 0x0, Name: pl_cfi, Id: 0x18700002
292[284065.432]---Loading Partition#: 0x0, Id: 0x103
293[284069.829] 0.033 ms for Partition#: 0x0, Size: 1312 Bytes
294[284074.973]---Loading Partition#: 0x1, Id: 0x105
295[284079.344] 0.007 ms for Partition#: 0x1, Size: 160 Bytes
296[284084.430]---Loading Partition#: 0x2, Id: 0x205
297[284088.844] 0.049 ms for Partition#: 0x2, Size: 960 Bytes
298[284093.887]---Loading Partition#: 0x3, Id: 0x203
299[284098.280] 0.030 ms for Partition#: 0x3, Size: 688 Bytes
300[284103.342]---Loading Partition#: 0x4, Id: 0x303
301[284108.863] 1.156 ms for Partition#: 0x4, Size: 209440 Bytes
302[284113.052]---Loading Partition#: 0x5, Id: 0x305
303[284117.712] 0.296 ms for Partition#: 0x5, Size: 3536 Bytes
304[284122.594]---Loading Partition#: 0x6, Id: 0x403
305[284126.991] 0.034 ms for Partition#: 0x6, Size: 8096 Bytes
306[284132.136]---Loading Partition#: 0x7, Id: 0x405
307[284136.507] 0.007 ms for Partition#: 0x7, Size: 160 Bytes
308[284141.636]Subsystem PDI Load: Done
309[ 273.615503] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /fpga/firmware-name
310[ 273.627382] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /fpga/fpga-bridges
311[ 273.636953] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /fpga/partial-fpga-config
312[ 273.647241] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /__symbols__/rp1_axi_gpio_0
313[ 273.660826] gpio gpiochip1: (a4010000.gpio): not an immutable chip, please consider fixing it!
314[ 273.670490] input: pl-gpio-keys as /devices/platform/pl-gpio-keys/input/input0
315Time taken to load BIN is 171.000000 Milli Seconds
316BIN FILE loaded through FPGA manager successfully
317root@yocto-vck190-dfx-2023:~#
318```
319---
320
321### Testing PL functionality
322
323* This examples uses PL GPIO DIP switches and Push buttons to capture interrupts.
324* Verify PL GPIO DIP switches and Push buttons are registered.
325* Move the DIP Switches ON/OFF and verify the interrupt counts.
326```
327yocto-zynqmp-generic-20231:/home/petalinux# cat /proc/interrupts
328 CPU0 CPU1 CPU2 CPU3
329 11: 23303 22971 24203 24990 GICv2 30 Level arch_timer
330 14: 0 0 0 0 GICv2 67 Level zynqmp_ipi
331 15: 0 0 0 0 GICv2 175 Level arm-pmu
332 16: 0 0 0 0 GICv2 176 Level arm-pmu
333 17: 0 0 0 0 GICv2 177 Level arm-pmu
334 18: 0 0 0 0 GICv2 178 Level arm-pmu
335 19: 0 0 0 0 GICv2 58 Level ffa60000.rtc
336 20: 0 0 0 0 GICv2 59 Level ffa60000.rtc
337 21: 0 0 0 0 GICv2 42 Level ff960000.memory-controller
338 22: 0 0 0 0 GICv2 88 Level ams-irq
339 23: 0 0 0 0 GICv2 155 Level axi-pmon, axi-pmon
340 24: 515 0 0 0 GICv2 53 Level xuartps
341 27: 0 0 0 0 GICv2 156 Level zynqmp-dma
342 28: 0 0 0 0 GICv2 157 Level zynqmp-dma
343 29: 0 0 0 0 GICv2 158 Level zynqmp-dma
344 30: 0 0 0 0 GICv2 159 Level zynqmp-dma
345 31: 0 0 0 0 GICv2 160 Level zynqmp-dma
346 32: 0 0 0 0 GICv2 161 Level zynqmp-dma
347 33: 0 0 0 0 GICv2 162 Level zynqmp-dma
348 34: 0 0 0 0 GICv2 163 Level zynqmp-dma
349 35: 0 0 0 0 GICv2 109 Level zynqmp-dma
350 36: 0 0 0 0 GICv2 110 Level zynqmp-dma
351 37: 0 0 0 0 GICv2 111 Level zynqmp-dma
352 38: 0 0 0 0 GICv2 112 Level zynqmp-dma
353 39: 0 0 0 0 GICv2 113 Level zynqmp-dma
354 40: 0 0 0 0 GICv2 114 Level zynqmp-dma
355 41: 0 0 0 0 GICv2 115 Level zynqmp-dma
356 42: 0 0 0 0 GICv2 116 Level zynqmp-dma
357 43: 0 0 0 0 GICv2 154 Level fd4c0000.dma-controller
358 44: 5938 0 0 0 GICv2 47 Level ff0f0000.spi
359 45: 110 0 0 0 GICv2 95 Level eth0, eth0
360 46: 0 0 0 0 GICv2 57 Level axi-pmon, axi-pmon
361 47: 4802 0 0 0 GICv2 49 Level cdns-i2c
362 48: 501 0 0 0 GICv2 50 Level cdns-i2c
363 50: 0 0 0 0 GICv2 84 Edge ff150000.watchdog
364 51: 0 0 0 0 GICv2 151 Level fd4a0000.display
365 52: 548 0 0 0 GICv2 81 Level mmc0
366 53: 0 0 0 0 GICv2 165 Level ahci-ceva[fd0c0000.ahci]
367 54: 0 0 0 0 GICv2 97 Level xhci-hcd:usb1
368 55: 0 0 0 0 zynq-gpio 22 Edge sw19
369 59: 0 0 0 0 gpio-xilinx 4 Edge PL_GPIO_PB_SW9_N
370 60: 0 0 0 0 gpio-xilinx 3 Edge PL_GPIO_PB_SW12_E
371 61: 0 0 0 0 gpio-xilinx 2 Edge PL_GPIO_PB_SW13_S
372 62: 0 0 0 0 gpio-xilinx 1 Edge PL_GPIO_PB_SW10_W
373 63: 0 0 0 0 gpio-xilinx 0 Edge PL_GPIO_PB_SW11_C
374 64: 0 0 0 0 gpio-xilinx 7 Edge PL_GPIO_DIP_SW7
375 65: 0 0 0 0 gpio-xilinx 6 Edge PL_GPIO_DIP_SW6
376 66: 0 0 0 0 gpio-xilinx 5 Edge PL_GPIO_DIP_SW5
377 67: 0 0 0 0 gpio-xilinx 4 Edge PL_GPIO_DIP_SW4
378 68: 0 0 0 0 gpio-xilinx 3 Edge PL_GPIO_DIP_SW3
379 69: 0 0 0 0 gpio-xilinx 2 Edge PL_GPIO_DIP_SW2
380 70: 0 0 0 0 gpio-xilinx 1 Edge PL_GPIO_DIP_SW1
381 71: 0 0 0 0 gpio-xilinx 0 Edge PL_GPIO_DIP_SW0
382IPI0: 64 25 87 38 Rescheduling interrupts
383IPI1: 2066 6747 1212 5791 Function call interrupts
384IPI2: 0 0 0 0 CPU stop interrupts
385IPI3: 0 0 0 0 CPU stop (for crash dump) interrupts
386IPI4: 0 0 0 0 Timer broadcast interrupts
387IPI5: 0 0 0 0 IRQ work interrupts
388IPI6: 0 0 0 0 CPU wake-up interrupts
389Err: 0
390yocto-zynqmp-generic-20231:/home/petalinux# cat /proc/interrupts
391 CPU0 CPU1 CPU2 CPU3
392 11: 28169 27725 29250 30190 GICv2 30 Level arch_timer
393 14: 0 0 0 0 GICv2 67 Level zynqmp_ipi
394 15: 0 0 0 0 GICv2 175 Level arm-pmu
395 16: 0 0 0 0 GICv2 176 Level arm-pmu
396 17: 0 0 0 0 GICv2 177 Level arm-pmu
397 18: 0 0 0 0 GICv2 178 Level arm-pmu
398 19: 0 0 0 0 GICv2 58 Level ffa60000.rtc
399 20: 0 0 0 0 GICv2 59 Level ffa60000.rtc
400 21: 0 0 0 0 GICv2 42 Level ff960000.memory-controller
401 22: 0 0 0 0 GICv2 88 Level ams-irq
402 23: 0 0 0 0 GICv2 155 Level axi-pmon, axi-pmon
403 24: 603 0 0 0 GICv2 53 Level xuartps
404 27: 0 0 0 0 GICv2 156 Level zynqmp-dma
405 28: 0 0 0 0 GICv2 157 Level zynqmp-dma
406 29: 0 0 0 0 GICv2 158 Level zynqmp-dma
407 30: 0 0 0 0 GICv2 159 Level zynqmp-dma
408 31: 0 0 0 0 GICv2 160 Level zynqmp-dma
409 32: 0 0 0 0 GICv2 161 Level zynqmp-dma
410 33: 0 0 0 0 GICv2 162 Level zynqmp-dma
411 34: 0 0 0 0 GICv2 163 Level zynqmp-dma
412 35: 0 0 0 0 GICv2 109 Level zynqmp-dma
413 36: 0 0 0 0 GICv2 110 Level zynqmp-dma
414 37: 0 0 0 0 GICv2 111 Level zynqmp-dma
415 38: 0 0 0 0 GICv2 112 Level zynqmp-dma
416 39: 0 0 0 0 GICv2 113 Level zynqmp-dma
417 40: 0 0 0 0 GICv2 114 Level zynqmp-dma
418 41: 0 0 0 0 GICv2 115 Level zynqmp-dma
419 42: 0 0 0 0 GICv2 116 Level zynqmp-dma
420 43: 0 0 0 0 GICv2 154 Level fd4c0000.dma-controller
421 44: 5938 0 0 0 GICv2 47 Level ff0f0000.spi
422 45: 134 0 0 0 GICv2 95 Level eth0, eth0
423 46: 0 0 0 0 GICv2 57 Level axi-pmon, axi-pmon
424 47: 4802 0 0 0 GICv2 49 Level cdns-i2c
425 48: 501 0 0 0 GICv2 50 Level cdns-i2c
426 50: 0 0 0 0 GICv2 84 Edge ff150000.watchdog
427 51: 0 0 0 0 GICv2 151 Level fd4a0000.display
428 52: 548 0 0 0 GICv2 81 Level mmc0
429 53: 0 0 0 0 GICv2 165 Level ahci-ceva[fd0c0000.ahci]
430 54: 0 0 0 0 GICv2 97 Level xhci-hcd:usb1
431 55: 0 0 0 0 zynq-gpio 22 Edge sw19
432 59: 2 0 0 0 gpio-xilinx 4 Edge PL_GPIO_PB_SW9_N
433 60: 4 0 0 0 gpio-xilinx 3 Edge PL_GPIO_PB_SW12_E
434 61: 2 0 0 0 gpio-xilinx 2 Edge PL_GPIO_PB_SW13_S
435 62: 2 0 0 0 gpio-xilinx 1 Edge PL_GPIO_PB_SW10_W
436 63: 2 0 0 0 gpio-xilinx 0 Edge PL_GPIO_PB_SW11_C
437 64: 2 0 0 0 gpio-xilinx 7 Edge PL_GPIO_DIP_SW7
438 65: 2 0 0 0 gpio-xilinx 6 Edge PL_GPIO_DIP_SW6
439 66: 4 0 0 0 gpio-xilinx 5 Edge PL_GPIO_DIP_SW5
440 67: 2 0 0 0 gpio-xilinx 4 Edge PL_GPIO_DIP_SW4
441 68: 2 0 0 0 gpio-xilinx 3 Edge PL_GPIO_DIP_SW3
442 69: 2 0 0 0 gpio-xilinx 2 Edge PL_GPIO_DIP_SW2
443 70: 2 0 0 0 gpio-xilinx 1 Edge PL_GPIO_DIP_SW1
444 71: 2 0 0 0 gpio-xilinx 0 Edge PL_GPIO_DIP_SW0
445IPI0: 64 26 87 38 Rescheduling interrupts
446IPI1: 2163 6791 1243 5866 Function call interrupts
447IPI2: 0 0 0 0 CPU stop interrupts
448IPI3: 0 0 0 0 CPU stop (for crash dump) interrupts
449IPI4: 0 0 0 0 Timer broadcast interrupts
450IPI5: 0 0 0 0 IRQ work interrupts
451IPI6: 0 0 0 0 CPU wake-up interrupts
452Err: 0
453yocto-zynqmp-generic-20231:/home/petalinux#
454```
455---
456
457### Unloading PL bitstream or pdi and dt overlay
458* Zynq or ZynqMP
459```
460yocto-zynqmp-generic-20231:/home/petalinux# fpgautil -R
461```
462* Versal (DFx RP)
463```
464root@yocto-vck190-dfx-2023:~# fpgautil -R -n PR0
465```
466* Versal (DFx Static)
467```
468root@yocto-vck190-dfx-2023:~# fpgautil -R -n Full
469```
470---
471
472## References
473* https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841645/Solution+Zynq+PL+Programming+With+FPGA+Manager
474* https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841847/Solution+ZynqMP+PL+Programming
475* https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/1188397412/Solution+Versal+PL+Programming
diff --git a/docs/README.fpgamanager.custom.md b/docs/README.fpgamanager.custom.md
index ada3985e..dcdaec55 100644
--- a/docs/README.fpgamanager.custom.md
+++ b/docs/README.fpgamanager.custom.md
@@ -8,6 +8,9 @@
8 * [Unloading PL bitstream or pdi and dt overlay](#unloading-pl-bitstream-or-pdi-and-dt-overlay) 8 * [Unloading PL bitstream or pdi and dt overlay](#unloading-pl-bitstream-or-pdi-and-dt-overlay)
9* [References](#references) 9* [References](#references)
10 10
11> **Note:** This README will be deprecated in 2024.1 release. User sthould start
12> using [DFx User DTS README](README.dfx.user.dts.md)
13
11## Introduction 14## Introduction
12This readme describes the build instructions to create firmware recipes using 15This readme describes the build instructions to create firmware recipes using
13fpgamanager_custom.bbclass for dynamic configuration. This bitbake class supports 16fpgamanager_custom.bbclass for dynamic configuration. This bitbake class supports
diff --git a/meta-xilinx-bsp/README.md b/meta-xilinx-bsp/README.md
index 96a23687..2d869913 100644
--- a/meta-xilinx-bsp/README.md
+++ b/meta-xilinx-bsp/README.md
@@ -33,15 +33,16 @@ The following boards are supported by the meta-xilinx-bsp layer:
33| | [ZCU104](https://www.xilinx.com/products/boards-and-kits/zcu104.html) | [zcu104-zynqmp](conf/machine/zcu104-zynqmp.conf) | `zcu104-zynqmp` | `zcu104-revc` | Yes | Yes | 33| | [ZCU104](https://www.xilinx.com/products/boards-and-kits/zcu104.html) | [zcu104-zynqmp](conf/machine/zcu104-zynqmp.conf) | `zcu104-zynqmp` | `zcu104-revc` | Yes | Yes |
34| | [ZCU106](https://www.xilinx.com/products/boards-and-kits/zcu106.html) | [zcu106-zynqmp](conf/machine/zcu106-zynqmp.conf) | `zcu106-zynqmp` | `zcu106-reva` | Yes | Yes | 34| | [ZCU106](https://www.xilinx.com/products/boards-and-kits/zcu106.html) | [zcu106-zynqmp](conf/machine/zcu106-zynqmp.conf) | `zcu106-zynqmp` | `zcu106-reva` | Yes | Yes |
35| | [ZCU111](https://www.xilinx.com/products/boards-and-kits/zcu111.html) | [zcu111-zynqmp](conf/machine/zcu111-zynqmp.conf) | `zcu111-zynqmp` | `zcu111-reva` | Yes | Yes | 35| | [ZCU111](https://www.xilinx.com/products/boards-and-kits/zcu111.html) | [zcu111-zynqmp](conf/machine/zcu111-zynqmp.conf) | `zcu111-zynqmp` | `zcu111-reva` | Yes | Yes |
36| | [ZCU1275](https://www.xilinx.com/products/boards-and-kits/zcu1275.html) | [zcu1275-zynqmp](conf/machine/zcu1275-zynqmp.conf) | `zcu1275-zynqmp` | `zcu1275-revb` | Yes | Yes |
37| | [ZCU1285](https://www.xilinx.com/products/boards-and-kits/zcu1285.html) | [zcu1285-zynqmp](conf/machine/zcu1285-zynqmp.conf) | `zcu1285-zynqmp` | `zcu1285-reva` | Yes | Yes |
38| | [ZCU208](https://www.xilinx.com/products/boards-and-kits/zcu208.html) | [zcu208-zynqmp](conf/machine/zcu208-zynqmp.conf) | `zcu208-zynqmp` | `zcu208-reva` | Yes | Yes | 36| | [ZCU208](https://www.xilinx.com/products/boards-and-kits/zcu208.html) | [zcu208-zynqmp](conf/machine/zcu208-zynqmp.conf) | `zcu208-zynqmp` | `zcu208-reva` | Yes | Yes |
39| | [ZCU216](https://www.xilinx.com/products/boards-and-kits/zcu216.html) | [zcu216-zynqmp](conf/machine/zcu216-zynqmp.conf) | `zcu216-zynqmp` | `zcu216-reva` | Yes | Yes | 37| | [ZCU216](https://www.xilinx.com/products/boards-and-kits/zcu216.html) | [zcu216-zynqmp](conf/machine/zcu216-zynqmp.conf) | `zcu216-zynqmp` | `zcu216-reva` | Yes | Yes |
38| | [ZCU670](https://www.xilinx.com/products/boards-and-kits/zcu670.html) | [zcu670-zynqmp](conf/machine/zcu670-zynqmp.conf) | `zcu670-zynqmp` | `zcu670-revb` | Yes | Yes |
40| Versal | [VCK190](https://www.xilinx.com/products/boards-and-kits/vck190.html) | [vck190-versal](conf/machine/vck190-versal.conf) | `vck190-versal` | `versal-vck190-reva-x-ebm-01-reva` | Yes | Yes | 39| Versal | [VCK190](https://www.xilinx.com/products/boards-and-kits/vck190.html) | [vck190-versal](conf/machine/vck190-versal.conf) | `vck190-versal` | `versal-vck190-reva-x-ebm-01-reva` | Yes | Yes |
41| | [VMK180](https://www.xilinx.com/products/boards-and-kits/vmk180.html) | [vmk180-versal](conf/machine/vmk180-versal.conf) | `vmk180-versal` | `versal-vmk180-reva-x-ebm-01-reva` | Yes | Yes | 40| | [VMK180](https://www.xilinx.com/products/boards-and-kits/vmk180.html) | [vmk180-versal](conf/machine/vmk180-versal.conf) | `vmk180-versal` | `versal-vmk180-reva-x-ebm-01-reva` | Yes | Yes |
41| | [VCK5000](https://www.xilinx.com/products/boards-and-kits/vck5000.html) | [vck5000-versal](conf/machine/vck5000-versal.conf) | `vck5000-versal` | `versal-vck5000-reva-x-ebm-01-reva` | No | No |
42| | [VPK120](https://www.xilinx.com/products/boards-and-kits/vpk120.html) | [vpk120-versal](conf/machine/vpk120-versal.conf) | `vpk120-versal` | `versal-vpk120-reva` | Yes | Yes | 42| | [VPK120](https://www.xilinx.com/products/boards-and-kits/vpk120.html) | [vpk120-versal](conf/machine/vpk120-versal.conf) | `vpk120-versal` | `versal-vpk120-reva` | Yes | Yes |
43| | [VPK180](https://www.xilinx.com/products/boards-and-kits/vpk180.html) | [vpk180-versal](conf/machine/vpk180-versal.conf) | `vpk180-versal` | `versal-vpk180-reva` | Yes | Yes | 43| | [VPK180](https://www.xilinx.com/products/boards-and-kits/vpk180.html) | [vpk180-versal](conf/machine/vpk180-versal.conf) | `vpk180-versal` | `versal-vpk180-reva` | Yes | Yes |
44| | [VEK280](https://www.xilinx.com/products/boards-and-kits/vek280.html) | [vek280-versal](conf/machine/vek280-versal.conf) | `vek280-versal` | `versal-vek280-reva` | Yes | Yes | 44| | [VEK280](https://www.xilinx.com/products/boards-and-kits/vek280.html) | [vek280-versal](conf/machine/vek280-versal.conf) | `vek280-versal` | `versal-vek280-revb` | Yes | Yes |
45| | [VHK158](https://www.xilinx.com/products/boards-and-kits/vhk158.html) | [vhk158-versal](conf/machine/vhk158-versal.conf) | `vhk158-versal` | `versal-vhk158-reva` | Yes | Yes |
45 46
46> **Note:** Additional information on Xilinx architectures can be found at: 47> **Note:** Additional information on Xilinx architectures can be found at:
47 https://www.xilinx.com/products/silicon-devices.html 48 https://www.xilinx.com/products/silicon-devices.html
diff --git a/meta-xilinx-bsp/conf/machine/ac701-microblazeel.conf b/meta-xilinx-bsp/conf/machine/ac701-microblazeel.conf
index 88a0d7bb..27cb3939 100644
--- a/meta-xilinx-bsp/conf/machine/ac701-microblazeel.conf
+++ b/meta-xilinx-bsp/conf/machine/ac701-microblazeel.conf
@@ -10,13 +10,6 @@ MACHINEOVERRIDES =. "${@['', 'ac701-microblazeel:']['ac701-microblazeel' !='${MA
10# defined before calling the required inclusion file else pre-expansion value 10# defined before calling the required inclusion file else pre-expansion value
11# defined in microblazeel-generic.conf will be set. 11# defined in microblazeel-generic.conf will be set.
12 12
13# Yocto AC701 FS-Boot variables
14YAML_SERIAL_CONSOLE_STDIN:pn-fs-boot ?= "axi_uartlite_0"
15YAML_SERIAL_CONSOLE_STDOUT:pn-fs-boot ?= "axi_uartlite_0"
16YAML_MAIN_MEMORY_CONFIG:pn-fs-boot ?= "MIG_7SERIES_0"
17YAML_FLASH_MEMORY_CONFIG:pn-fs-boot ?= "axi_quad_spi_0"
18XSCTH_PROC:pn-fs-boot ?= "microblaze_0"
19
20# Yocto AC701 device-tree variables 13# Yocto AC701 device-tree variables
21YAML_CONSOLE_DEVICE_CONFIG:pn-device-tree ?= "axi_uartlite_0" 14YAML_CONSOLE_DEVICE_CONFIG:pn-device-tree ?= "axi_uartlite_0"
22YAML_MAIN_MEMORY_CONFIG:pn-device-tree ?= "MIG_7SERIES_0" 15YAML_MAIN_MEMORY_CONFIG:pn-device-tree ?= "MIG_7SERIES_0"
@@ -25,6 +18,21 @@ DTC_FLAGS:pn-device-tree ?= ""
25XSCTH_PROC:pn-device-tree ?= "microblaze_0" 18XSCTH_PROC:pn-device-tree ?= "microblaze_0"
26YAML_DT_BOARD_FLAGS ?= "{BOARD ac701-full}" 19YAML_DT_BOARD_FLAGS ?= "{BOARD ac701-full}"
27 20
21# Yocto FS-Boot variables
22YAML_SERIAL_CONSOLE_STDIN:pn-fs-boot ?= "axi_uartlite_0"
23YAML_SERIAL_CONSOLE_STDOUT:pn-fs-boot ?= "axi_uartlite_0"
24YAML_MAIN_MEMORY_CONFIG:pn-fs-boot ?= "MIG_7SERIES_0"
25YAML_FLASH_MEMORY_CONFIG:pn-fs-boot ?= "axi_quad_spi_0"
26XSCTH_PROC:pn-fs-boot ?= "microblaze_0"
27
28# Yocto KERNEL Variables
29UBOOT_ENTRYPOINT ?= "0x80000000"
30UBOOT_LOADADDRESS ?= "0x80000000"
31
32# ac701-microblazeel Serial Console
33SERIAL_CONSOLES ?= "115200;ttyUL0"
34YAML_SERIAL_CONSOLE_BAUDRATE ?= "115200"
35
28# Set DDR Base address for u-boot-xlnx-scr variables 36# Set DDR Base address for u-boot-xlnx-scr variables
29DDR_BASEADDR ?= "0x80000000" 37DDR_BASEADDR ?= "0x80000000"
30SKIP_APPEND_BASEADDR ?= "0" 38SKIP_APPEND_BASEADDR ?= "0"
@@ -39,4 +47,4 @@ HDF_MACHINE = "ac701-microblazeel"
39 47
40#### No additional settings should be after the Postamble 48#### No additional settings should be after the Postamble
41#### Postamble 49#### Postamble
42PACKAGE_EXTRA_ARCHS:append = "${@['', 'ac701_microblazeel']['ac701-microblazeel' != '${MACHINE}']}" 50PACKAGE_EXTRA_ARCHS:append = "${@['', ' ac701_microblazeel']['ac701-microblazeel' != '${MACHINE}']}"
diff --git a/meta-xilinx-bsp/conf/machine/kc705-microblazeel.conf b/meta-xilinx-bsp/conf/machine/kc705-microblazeel.conf
index f24d0356..f3236f07 100644
--- a/meta-xilinx-bsp/conf/machine/kc705-microblazeel.conf
+++ b/meta-xilinx-bsp/conf/machine/kc705-microblazeel.conf
@@ -15,7 +15,7 @@ YAML_CONSOLE_DEVICE_CONFIG:pn-device-tree ?= "axi_uartlite_0"
15YAML_MAIN_MEMORY_CONFIG:pn-device-tree ?= "MIG_7SERIES_0" 15YAML_MAIN_MEMORY_CONFIG:pn-device-tree ?= "MIG_7SERIES_0"
16DT_PADDING_SIZE:pn-device-tree ?= "0x1000" 16DT_PADDING_SIZE:pn-device-tree ?= "0x1000"
17DTC_FLAGS:pn-device-tree ?= "" 17DTC_FLAGS:pn-device-tree ?= ""
18XSCTH_PROC:microblaze:pn-device-tree ?= "microblaze_0" 18XSCTH_PROC:pn-device-tree ?= "microblaze_0"
19YAML_DT_BOARD_FLAGS ?= "{BOARD kc705-full}" 19YAML_DT_BOARD_FLAGS ?= "{BOARD kc705-full}"
20 20
21# Yocto FS-Boot variables 21# Yocto FS-Boot variables
@@ -29,14 +29,14 @@ XSCTH_PROC:pn-fs-boot ?= "microblaze_0"
29UBOOT_ENTRYPOINT ?= "0x80000000" 29UBOOT_ENTRYPOINT ?= "0x80000000"
30UBOOT_LOADADDRESS ?= "0x80000000" 30UBOOT_LOADADDRESS ?= "0x80000000"
31 31
32# Set DDR Base address for u-boot-xlnx-scr variables
33DDR_BASEADDR ?= "0x80000000"
34SKIP_APPEND_BASEADDR ?= "0"
35
36# kc705-microblazeel Serial Console 32# kc705-microblazeel Serial Console
37SERIAL_CONSOLES ?= "115200;ttyUL0" 33SERIAL_CONSOLES ?= "115200;ttyUL0"
38YAML_SERIAL_CONSOLE_BAUDRATE ?= "115200" 34YAML_SERIAL_CONSOLE_BAUDRATE ?= "115200"
39 35
36# Set DDR Base address for u-boot-xlnx-scr variables
37DDR_BASEADDR ?= "0x80000000"
38SKIP_APPEND_BASEADDR ?= "0"
39
40# Required generic machine inclusion 40# Required generic machine inclusion
41require conf/machine/microblaze-generic.conf 41require conf/machine/microblaze-generic.conf
42 42
@@ -47,4 +47,4 @@ HDF_MACHINE = "kc705-microblazeel"
47 47
48#### No additional settings should be after the Postamble 48#### No additional settings should be after the Postamble
49#### Postamble 49#### Postamble
50PACKAGE_EXTRA_ARCHS:append = "${@['', 'kc705_microblazeel']['kc705-microblazeel' != '${MACHINE}']}" 50PACKAGE_EXTRA_ARCHS:append = "${@['', ' kc705_microblazeel']['kc705-microblazeel' != '${MACHINE}']}"
diff --git a/meta-xilinx-bsp/conf/machine/kcu105-microblazeel.conf b/meta-xilinx-bsp/conf/machine/kcu105-microblazeel.conf
index 3edf190e..a866f87c 100644
--- a/meta-xilinx-bsp/conf/machine/kcu105-microblazeel.conf
+++ b/meta-xilinx-bsp/conf/machine/kcu105-microblazeel.conf
@@ -10,13 +10,6 @@ MACHINEOVERRIDES =. "${@['', 'kcu105-microblazeel:']['kcu105-microblazeel' !='${
10# defined before calling the required inclusion file else pre-expansion value 10# defined before calling the required inclusion file else pre-expansion value
11# defined in microblazeel-generic.conf will be set. 11# defined in microblazeel-generic.conf will be set.
12 12
13# Yocto KCU105 FS-Boot variables
14YAML_SERIAL_CONSOLE_STDIN:pn-fs-boot ?= "axi_uartlite_0"
15YAML_SERIAL_CONSOLE_STDOUT:pn-fs-boot ?= "axi_uartlite_0"
16YAML_MAIN_MEMORY_CONFIG:pn-fs-boot ?= "DDR4_0"
17YAML_FLASH_MEMORY_CONFIG:pn-fs-boot ?= "axi_quad_spi_0"
18XSCTH_PROC:pn-fs-boot ?= "microblaze_0"
19
20# Yocto KCU105 device-tree variables 13# Yocto KCU105 device-tree variables
21YAML_CONSOLE_DEVICE_CONFIG:pn-device-tree ?= "axi_uartlite_0" 14YAML_CONSOLE_DEVICE_CONFIG:pn-device-tree ?= "axi_uartlite_0"
22YAML_MAIN_MEMORY_CONFIG:pn-device-tree ?= "DDR4_0" 15YAML_MAIN_MEMORY_CONFIG:pn-device-tree ?= "DDR4_0"
@@ -25,6 +18,21 @@ DTC_FLAGS:pn-device-tree ?= ""
25XSCTH_PROC:pn-device-tree ?= "microblaze_0" 18XSCTH_PROC:pn-device-tree ?= "microblaze_0"
26YAML_DT_BOARD_FLAGS ?= "{BOARD kcu105}" 19YAML_DT_BOARD_FLAGS ?= "{BOARD kcu105}"
27 20
21# Yocto FS-Boot variables
22YAML_SERIAL_CONSOLE_STDIN:pn-fs-boot ?= "axi_uartlite_0"
23YAML_SERIAL_CONSOLE_STDOUT:pn-fs-boot ?= "axi_uartlite_0"
24YAML_MAIN_MEMORY_CONFIG:pn-fs-boot ?= "DDR4_0"
25YAML_FLASH_MEMORY_CONFIG:pn-fs-boot ?= "axi_quad_spi_0"
26XSCTH_PROC:pn-fs-boot ?= "microblaze_0"
27
28# Yocto KERNEL Variables
29UBOOT_ENTRYPOINT ?= "0x80000000"
30UBOOT_LOADADDRESS ?= "0x80000000"
31
32# kcu105-microblazeel Serial Console
33SERIAL_CONSOLES ?= "115200;ttyUL0"
34YAML_SERIAL_CONSOLE_BAUDRATE ?= "115200"
35
28# Set DDR Base address for u-boot-xlnx-scr variables 36# Set DDR Base address for u-boot-xlnx-scr variables
29DDR_BASEADDR ?= "0x80000000" 37DDR_BASEADDR ?= "0x80000000"
30SKIP_APPEND_BASEADDR ?= "0" 38SKIP_APPEND_BASEADDR ?= "0"
@@ -39,4 +47,4 @@ HDF_MACHINE = "kcu105-microblazeel"
39 47
40#### No additional settings should be after the Postamble 48#### No additional settings should be after the Postamble
41#### Postamble 49#### Postamble
42PACKAGE_EXTRA_ARCHS:append = "${@['', 'kcu105_microblazeel']['kcu105-microblazeel' != '${MACHINE}']}" 50PACKAGE_EXTRA_ARCHS:append = "${@['', ' kcu105_microblazeel']['kcu105-microblazeel' != '${MACHINE}']}"
diff --git a/meta-xilinx-bsp/conf/machine/vck190-versal.conf b/meta-xilinx-bsp/conf/machine/vck190-versal.conf
index 1b3e8123..ed049268 100644
--- a/meta-xilinx-bsp/conf/machine/vck190-versal.conf
+++ b/meta-xilinx-bsp/conf/machine/vck190-versal.conf
@@ -2,10 +2,6 @@
2#@NAME: vck190-versal 2#@NAME: vck190-versal
3#@DESCRIPTION: Machine configuration for the VCK190 evaluation board. 3#@DESCRIPTION: Machine configuration for the VCK190 evaluation board.
4 4
5# Compatibility with old BOARD value.
6# TODO - Remove these once removed from petalinux bsp
7MACHINEOVERRIDES =. "vck190:"
8
9#### Preamble 5#### Preamble
10MACHINEOVERRIDES =. "${@['', 'vck190-versal:']['vck190-versal' !='${MACHINE}']}" 6MACHINEOVERRIDES =. "${@['', 'vck190-versal:']['vck190-versal' !='${MACHINE}']}"
11#### Regular settings follow 7#### Regular settings follow
@@ -46,4 +42,4 @@ HDF_MACHINE = "vck190-versal"
46 42
47#### No additional settings should be after the Postamble 43#### No additional settings should be after the Postamble
48#### Postamble 44#### Postamble
49PACKAGE_EXTRA_ARCHS:append = "${@['', 'vck190_versal']['vck190-versal' != '${MACHINE}']}" 45PACKAGE_EXTRA_ARCHS:append = "${@['', ' vck190_versal']['vck190-versal' != '${MACHINE}']}"
diff --git a/meta-xilinx-bsp/conf/machine/vcu118-microblazeel.conf b/meta-xilinx-bsp/conf/machine/vcu118-microblazeel.conf
index ada52ceb..bfd60336 100644
--- a/meta-xilinx-bsp/conf/machine/vcu118-microblazeel.conf
+++ b/meta-xilinx-bsp/conf/machine/vcu118-microblazeel.conf
@@ -10,13 +10,6 @@ MACHINEOVERRIDES =. "${@['', 'vcu118-microblazeel:']['vcu118-microblazeel' !='${
10# defined before calling the required inclusion file else pre-expansion value 10# defined before calling the required inclusion file else pre-expansion value
11# defined in microblazeel-generic.conf will be set. 11# defined in microblazeel-generic.conf will be set.
12 12
13# Yocto VCU118 FS-Boot variables
14YAML_SERIAL_CONSOLE_STDIN:pn-fs-boot ?= "axi_uartlite_0"
15YAML_SERIAL_CONSOLE_STDOUT:pn-fs-boot ?= "axi_uartlite_0"
16YAML_MAIN_MEMORY_CONFIG:pn-fs-boot ?= "DDR4_0"
17YAML_FLASH_MEMORY_CONFIG:pn-fs-boot ?= "axi_quad_spi_0"
18XSCTH_PROC:pn-fs-boot ?= "microblaze_0"
19
20# Yocto VCU118 device-tree variables 13# Yocto VCU118 device-tree variables
21YAML_CONSOLE_DEVICE_CONFIG:pn-device-tree ?= "axi_uartlite_0" 14YAML_CONSOLE_DEVICE_CONFIG:pn-device-tree ?= "axi_uartlite_0"
22YAML_MAIN_MEMORY_CONFIG:pn-device-tree ?= "DDR4_0" 15YAML_MAIN_MEMORY_CONFIG:pn-device-tree ?= "DDR4_0"
@@ -25,10 +18,21 @@ DTC_FLAGS:pn-device-tree ?= ""
25XSCTH_PROC:pn-device-tree ?= "microblaze_0" 18XSCTH_PROC:pn-device-tree ?= "microblaze_0"
26YAML_DT_BOARD_FLAGS ?= "{BOARD vcu118-rev2.0}" 19YAML_DT_BOARD_FLAGS ?= "{BOARD vcu118-rev2.0}"
27 20
21# Yocto FS-Boot variables
22YAML_SERIAL_CONSOLE_STDIN:pn-fs-boot ?= "axi_uartlite_0"
23YAML_SERIAL_CONSOLE_STDOUT:pn-fs-boot ?= "axi_uartlite_0"
24YAML_MAIN_MEMORY_CONFIG:pn-fs-boot ?= "DDR4_0"
25YAML_FLASH_MEMORY_CONFIG:pn-fs-boot ?= "axi_quad_spi_0"
26XSCTH_PROC:pn-fs-boot ?= "microblaze_0"
27
28# Yocto KERNEL Variables 28# Yocto KERNEL Variables
29UBOOT_ENTRYPOINT ?= "0x80000000" 29UBOOT_ENTRYPOINT ?= "0x80000000"
30UBOOT_LOADADDRESS ?= "0x80000000" 30UBOOT_LOADADDRESS ?= "0x80000000"
31 31
32# vcu118-microblazeel Serial Console
33SERIAL_CONSOLES ?= "115200;ttyUL0"
34YAML_SERIAL_CONSOLE_BAUDRATE ?= "115200"
35
32# Set DDR Base address for u-boot-xlnx-scr variables 36# Set DDR Base address for u-boot-xlnx-scr variables
33DDR_BASEADDR ?= "0x80000000" 37DDR_BASEADDR ?= "0x80000000"
34SKIP_APPEND_BASEADDR ?= "0" 38SKIP_APPEND_BASEADDR ?= "0"
@@ -43,4 +47,4 @@ HDF_MACHINE = "vcu118-microblazeel"
43 47
44#### No additional settings should be after the Postamble 48#### No additional settings should be after the Postamble
45#### Postamble 49#### Postamble
46PACKAGE_EXTRA_ARCHS:append = "${@['', 'vcu118_microblazeel']['vcu118-microblazeel' != '${MACHINE}']}" 50PACKAGE_EXTRA_ARCHS:append = "${@['', ' vcu118_microblazeel']['vcu118-microblazeel' != '${MACHINE}']}"
diff --git a/meta-xilinx-bsp/conf/machine/vek280-versal.conf b/meta-xilinx-bsp/conf/machine/vek280-versal.conf
index b533b833..625cbca1 100644
--- a/meta-xilinx-bsp/conf/machine/vek280-versal.conf
+++ b/meta-xilinx-bsp/conf/machine/vek280-versal.conf
@@ -12,12 +12,20 @@ MACHINEOVERRIDES =. "${@['', 'vek280-versal:']['vek280-versal' !='${MACHINE}']}"
12 12
13# Yocto device-tree variables 13# Yocto device-tree variables
14YAML_CONSOLE_DEVICE_CONFIG:pn-device-tree ?= "CIPS_0_pspmc_0_psv_sbsauart_0" 14YAML_CONSOLE_DEVICE_CONFIG:pn-device-tree ?= "CIPS_0_pspmc_0_psv_sbsauart_0"
15YAML_DT_BOARD_FLAGS ?= "{BOARD versal-vek280-reva}" 15YAML_DT_BOARD_FLAGS ?= "{BOARD versal-vek280-revb}"
16
17# Yocto arm-trusted-firmware(TF-A) variables
18ATF_CONSOLE ?= "pl011"
19TFA_BL33_LOAD ?= "0x8000000"
16 20
17# Yocto PLM variables 21# Yocto PLM variables
18YAML_SERIAL_CONSOLE_STDIN:pn-plm-firmware ?= "CIPS_0_pspmc_0_psv_sbsauart_0" 22YAML_SERIAL_CONSOLE_STDIN:pn-plm-firmware ?= "CIPS_0_pspmc_0_psv_sbsauart_0"
19YAML_SERIAL_CONSOLE_STDOUT:pn-plm-firmware ?= "CIPS_0_pspmc_0_psv_sbsauart_0" 23YAML_SERIAL_CONSOLE_STDOUT:pn-plm-firmware ?= "CIPS_0_pspmc_0_psv_sbsauart_0"
20 24
25# Yocto KERNEL Variables
26UBOOT_ENTRYPOINT ?= "0x200000"
27UBOOT_LOADADDRESS ?= "0x200000"
28
21# vek280-versal Serial Console 29# vek280-versal Serial Console
22SERIAL_CONSOLES ?= "115200;ttyAMA0" 30SERIAL_CONSOLES ?= "115200;ttyAMA0"
23YAML_SERIAL_CONSOLE_BAUDRATE ?= "115200" 31YAML_SERIAL_CONSOLE_BAUDRATE ?= "115200"
@@ -30,6 +38,16 @@ require conf/machine/versal-ai-edge-generic.conf
30# from local.conf. 38# from local.conf.
31HDF_MACHINE = "vek280-versal" 39HDF_MACHINE = "vek280-versal"
32 40
41# VEK280 board has 12GB memory only but default versal-generic has QB_MEM set to
42# 8G, Hence we need set 12G in QB_MEM.
43QB_MEM = "-m 12G"
44
45QEMU_HW_DTB_PS = "${QEMU_HW_DTB_PATH}/board-versal-ps-vek280.dtb"
46QEMU_HW_DTB_PMC = "${QEMU_HW_DTB_PATH}/board-versal-pmc-virt.dtb"
47
48# Yocto MACHINE_FEATURES Variable
49MACHINE_FEATURES += "vdu"
50
33#### No additional settings should be after the Postamble 51#### No additional settings should be after the Postamble
34#### Postamble 52#### Postamble
35PACKAGE_EXTRA_ARCHS:append = "${@['', 'vek280_versal']['vek280-versal' != '${MACHINE}']}" \ No newline at end of file 53PACKAGE_EXTRA_ARCHS:append = "${@['', ' vek280_versal']['vek280-versal' != '${MACHINE}']}"
diff --git a/meta-xilinx-bsp/conf/machine/vmk180-versal.conf b/meta-xilinx-bsp/conf/machine/vmk180-versal.conf
index 941f0aba..0f474f78 100644
--- a/meta-xilinx-bsp/conf/machine/vmk180-versal.conf
+++ b/meta-xilinx-bsp/conf/machine/vmk180-versal.conf
@@ -2,10 +2,6 @@
2#@NAME: vmk180-versal 2#@NAME: vmk180-versal
3#@DESCRIPTION: Machine configuration for the VMK180 evaluation board. 3#@DESCRIPTION: Machine configuration for the VMK180 evaluation board.
4 4
5# Compatibility with old BOARD value.
6# TODO - Remove these once removed from petalinux bsp
7MACHINEOVERRIDES =. "vmk180:"
8
9#### Preamble 5#### Preamble
10MACHINEOVERRIDES =. "${@['', 'vmk180-versal:']['vmk180-versal' !='${MACHINE}']}" 6MACHINEOVERRIDES =. "${@['', 'vmk180-versal:']['vmk180-versal' !='${MACHINE}']}"
11#### Regular settings follow 7#### Regular settings follow
@@ -46,4 +42,4 @@ HDF_MACHINE = "vmk180-versal"
46 42
47#### No additional settings should be after the Postamble 43#### No additional settings should be after the Postamble
48#### Postamble 44#### Postamble
49PACKAGE_EXTRA_ARCHS:append = "${@['', 'vmk180_versal']['vmk180-versal' != '${MACHINE}']}" 45PACKAGE_EXTRA_ARCHS:append = "${@['', ' vmk180_versal']['vmk180-versal' != '${MACHINE}']}"
diff --git a/meta-xilinx-bsp/conf/machine/vpk120-versal.conf b/meta-xilinx-bsp/conf/machine/vpk120-versal.conf
index 30818313..e200d42d 100644
--- a/meta-xilinx-bsp/conf/machine/vpk120-versal.conf
+++ b/meta-xilinx-bsp/conf/machine/vpk120-versal.conf
@@ -26,7 +26,7 @@ YAML_SERIAL_CONSOLE_STDOUT:pn-plm-firmware ?= "versal_cips_0_pspmc_0_psv_sbsauar
26UBOOT_ENTRYPOINT ?= "0x200000" 26UBOOT_ENTRYPOINT ?= "0x200000"
27UBOOT_LOADADDRESS ?= "0x200000" 27UBOOT_LOADADDRESS ?= "0x200000"
28 28
29# vpk120-versal Serial Console 29# vpk120-versal Serial Console
30SERIAL_CONSOLES ?= "115200;ttyAMA0" 30SERIAL_CONSOLES ?= "115200;ttyAMA0"
31YAML_SERIAL_CONSOLE_BAUDRATE ?= "115200" 31YAML_SERIAL_CONSOLE_BAUDRATE ?= "115200"
32 32
@@ -45,4 +45,4 @@ QEMU_HW_DTB_PMC = "${QEMU_HW_DTB_PATH}/board-versal-pmc-virt.dtb"
45 45
46#### No additional settings should be after the Postamble 46#### No additional settings should be after the Postamble
47#### Postamble 47#### Postamble
48PACKAGE_EXTRA_ARCHS:append = "${@['', 'vpk120_versal']['vpk120-versal' != '${MACHINE}']}" 48PACKAGE_EXTRA_ARCHS:append = "${@['', ' vpk120_versal']['vpk120-versal' != '${MACHINE}']}"
diff --git a/meta-xilinx-bsp/conf/machine/vpk180-versal.conf b/meta-xilinx-bsp/conf/machine/vpk180-versal.conf
index dd2dc111..92630e97 100644
--- a/meta-xilinx-bsp/conf/machine/vpk180-versal.conf
+++ b/meta-xilinx-bsp/conf/machine/vpk180-versal.conf
@@ -26,7 +26,7 @@ YAML_SERIAL_CONSOLE_STDOUT:pn-plm-firmware ?= "versal_cips_0_pspmc_0_psv_sbsauar
26UBOOT_ENTRYPOINT ?= "0x200000" 26UBOOT_ENTRYPOINT ?= "0x200000"
27UBOOT_LOADADDRESS ?= "0x200000" 27UBOOT_LOADADDRESS ?= "0x200000"
28 28
29# vpk180-versal Serial Console 29# vpk180-versal Serial Console
30SERIAL_CONSOLES ?= "115200;ttyAMA0" 30SERIAL_CONSOLES ?= "115200;ttyAMA0"
31YAML_SERIAL_CONSOLE_BAUDRATE ?= "115200" 31YAML_SERIAL_CONSOLE_BAUDRATE ?= "115200"
32 32
@@ -45,4 +45,4 @@ QEMU_HW_DTB_PMC = "${QEMU_HW_DTB_PATH}/board-versal-pmc-virt.dtb"
45 45
46#### No additional settings should be after the Postamble 46#### No additional settings should be after the Postamble
47#### Postamble 47#### Postamble
48PACKAGE_EXTRA_ARCHS:append = "${@['', 'vpk180_versal']['vpk180-versal' != '${MACHINE}']}" 48PACKAGE_EXTRA_ARCHS:append = "${@['', ' vpk180_versal']['vpk180-versal' != '${MACHINE}']}"
diff --git a/meta-xilinx-bsp/conf/machine/zc702-zynq7.conf b/meta-xilinx-bsp/conf/machine/zc702-zynq7.conf
index dc6f55b1..1db0616f 100644
--- a/meta-xilinx-bsp/conf/machine/zc702-zynq7.conf
+++ b/meta-xilinx-bsp/conf/machine/zc702-zynq7.conf
@@ -41,4 +41,4 @@ HDF_MACHINE = "zc702-zynq7"
41 41
42#### No additional settings should be after the Postamble 42#### No additional settings should be after the Postamble
43#### Postamble 43#### Postamble
44PACKAGE_EXTRA_ARCHS:append = "${@['', 'zc702_zynq7']['zc702-zynq7' != '${MACHINE}']}" 44PACKAGE_EXTRA_ARCHS:append = "${@['', ' zc702_zynq7']['zc702-zynq7' != '${MACHINE}']}"
diff --git a/meta-xilinx-bsp/conf/machine/zc706-zynq7.conf b/meta-xilinx-bsp/conf/machine/zc706-zynq7.conf
index e6b7ce57..7e0525d1 100644
--- a/meta-xilinx-bsp/conf/machine/zc706-zynq7.conf
+++ b/meta-xilinx-bsp/conf/machine/zc706-zynq7.conf
@@ -23,7 +23,7 @@ YAML_SERIAL_CONSOLE_STDOUT:pn-fsbl-firmware ?= "ps7_uart_1"
23UBOOT_ENTRYPOINT ?= "0x200000" 23UBOOT_ENTRYPOINT ?= "0x200000"
24UBOOT_LOADADDRESS ?= "0x200000" 24UBOOT_LOADADDRESS ?= "0x200000"
25 25
26# zc702-zynq7 Serial Console 26# zc706-zynq7 Serial Console
27SERIAL_CONSOLES ?= "115200;ttyPS0" 27SERIAL_CONSOLES ?= "115200;ttyPS0"
28YAML_SERIAL_CONSOLE_BAUDRATE ?= "115200" 28YAML_SERIAL_CONSOLE_BAUDRATE ?= "115200"
29 29
@@ -41,4 +41,4 @@ HDF_MACHINE = "zc706-zynq7"
41 41
42#### No additional settings should be after the Postamble 42#### No additional settings should be after the Postamble
43#### Postamble 43#### Postamble
44PACKAGE_EXTRA_ARCHS:append = "${@['', 'zc706_zynq7']['zc706-zynq7' != '${MACHINE}']}" 44PACKAGE_EXTRA_ARCHS:append = "${@['', ' zc706_zynq7']['zc706-zynq7' != '${MACHINE}']}"
diff --git a/meta-xilinx-bsp/conf/machine/zcu102-zynqmp.conf b/meta-xilinx-bsp/conf/machine/zcu102-zynqmp.conf
index c434067d..acd2544a 100644
--- a/meta-xilinx-bsp/conf/machine/zcu102-zynqmp.conf
+++ b/meta-xilinx-bsp/conf/machine/zcu102-zynqmp.conf
@@ -2,10 +2,6 @@
2#@NAME: zcu102-zynqmp 2#@NAME: zcu102-zynqmp
3#@DESCRIPTION: Machine configuration for the ZCU102 evaluation board. 3#@DESCRIPTION: Machine configuration for the ZCU102 evaluation board.
4 4
5# Compatibility with old BOARD value.
6# TODO - Remove these once removed from petalinux bsp
7MACHINEOVERRIDES =. "zcu102:"
8
9#### Preamble 5#### Preamble
10MACHINEOVERRIDES =. "${@['', 'zcu102-zynqmp:']['zcu102-zynqmp' !='${MACHINE}']}" 6MACHINEOVERRIDES =. "${@['', 'zcu102-zynqmp:']['zcu102-zynqmp' !='${MACHINE}']}"
11#### Regular settings follow 7#### Regular settings follow
@@ -55,4 +51,4 @@ HDF_MACHINE = "zcu102-zynqmp"
55 51
56#### No additional settings should be after the Postamble 52#### No additional settings should be after the Postamble
57#### Postamble 53#### Postamble
58PACKAGE_EXTRA_ARCHS:append = "${@['', 'zcu102_zynqmp']['zcu102-zynqmp' != '${MACHINE}']}" 54PACKAGE_EXTRA_ARCHS:append = "${@['', ' zcu102_zynqmp']['zcu102-zynqmp' != '${MACHINE}']}"
diff --git a/meta-xilinx-bsp/conf/machine/zcu104-zynqmp.conf b/meta-xilinx-bsp/conf/machine/zcu104-zynqmp.conf
index 710078eb..b4c11f3a 100644
--- a/meta-xilinx-bsp/conf/machine/zcu104-zynqmp.conf
+++ b/meta-xilinx-bsp/conf/machine/zcu104-zynqmp.conf
@@ -49,9 +49,10 @@ HDF_MACHINE = "zcu104-zynqmp"
49# the xsa. User can enable explicitly if required from local.conf. 49# the xsa. User can enable explicitly if required from local.conf.
50# KERNEL_DEVICETREE = "xilinx/zynqmp-zcu104-revC.dtb" 50# KERNEL_DEVICETREE = "xilinx/zynqmp-zcu104-revC.dtb"
51 51
52# Yocto IMAGE_FEATURES Variable
52MACHINE_HWCODECS = "libomxil-xlnx" 53MACHINE_HWCODECS = "libomxil-xlnx"
53IMAGE_FEATURES += "hwcodecs" 54IMAGE_FEATURES += "hwcodecs"
54 55
55#### No additional settings should be after the Postamble 56#### No additional settings should be after the Postamble
56#### Postamble 57#### Postamble
57PACKAGE_EXTRA_ARCHS:append = "${@['', 'zcu104_zynqmp']['zcu104-zynqmp' != '${MACHINE}']}" 58PACKAGE_EXTRA_ARCHS:append = "${@['', ' zcu104_zynqmp']['zcu104-zynqmp' != '${MACHINE}']}"
diff --git a/meta-xilinx-bsp/conf/machine/zcu106-zynqmp.conf b/meta-xilinx-bsp/conf/machine/zcu106-zynqmp.conf
index 23a936d8..ff273134 100644
--- a/meta-xilinx-bsp/conf/machine/zcu106-zynqmp.conf
+++ b/meta-xilinx-bsp/conf/machine/zcu106-zynqmp.conf
@@ -2,10 +2,6 @@
2#@NAME: zcu106-zynqmp 2#@NAME: zcu106-zynqmp
3#@DESCRIPTION: Machine configuration for the ZCU106 evaluation board. 3#@DESCRIPTION: Machine configuration for the ZCU106 evaluation board.
4 4
5# Compatibility with old BOARD value.
6# TODO - Remove these once removed from petalinux bsp
7MACHINEOVERRIDES =. "zcu106:"
8
9#### Preamble 5#### Preamble
10MACHINEOVERRIDES =. "${@['', 'zcu106-zynqmp:']['zcu106-zynqmp' !='${MACHINE}']}" 6MACHINEOVERRIDES =. "${@['', 'zcu106-zynqmp:']['zcu106-zynqmp' !='${MACHINE}']}"
11#### Regular settings follow 7#### Regular settings follow
@@ -53,9 +49,10 @@ HDF_MACHINE = "zcu106-zynqmp"
53# the xsa. User can enable explicitly if required from local.conf. 49# the xsa. User can enable explicitly if required from local.conf.
54# KERNEL_DEVICETREE = "xilinx/zynqmp-zcu106-revA.dtb" 50# KERNEL_DEVICETREE = "xilinx/zynqmp-zcu106-revA.dtb"
55 51
52# Yocto IMAGE_FEATURES Variable
56MACHINE_HWCODECS = "libomxil-xlnx" 53MACHINE_HWCODECS = "libomxil-xlnx"
57IMAGE_FEATURES += "hwcodecs" 54IMAGE_FEATURES += "hwcodecs"
58 55
59#### No additional settings should be after the Postamble 56#### No additional settings should be after the Postamble
60#### Postamble 57#### Postamble
61PACKAGE_EXTRA_ARCHS:append = "${@['', 'zcu106_zynqmp']['zcu106-zynqmp' != '${MACHINE}']}" 58PACKAGE_EXTRA_ARCHS:append = "${@['', ' zcu106_zynqmp']['zcu106-zynqmp' != '${MACHINE}']}"
diff --git a/meta-xilinx-bsp/conf/machine/zcu111-zynqmp.conf b/meta-xilinx-bsp/conf/machine/zcu111-zynqmp.conf
index 5868449f..77da93ca 100644
--- a/meta-xilinx-bsp/conf/machine/zcu111-zynqmp.conf
+++ b/meta-xilinx-bsp/conf/machine/zcu111-zynqmp.conf
@@ -2,10 +2,6 @@
2#@NAME: zcu111-zynqmp 2#@NAME: zcu111-zynqmp
3#@DESCRIPTION: Machine configuration for the ZCU111 evaluation board. 3#@DESCRIPTION: Machine configuration for the ZCU111 evaluation board.
4 4
5# Compatibility with old BOARD value.
6# TODO - Remove these once removed from petalinux bsp
7MACHINEOVERRIDES =. "zcu111:"
8
9#### Preamble 5#### Preamble
10MACHINEOVERRIDES =. "${@['', 'zcu111-zynqmp:']['zcu111-zynqmp' !='${MACHINE}']}" 6MACHINEOVERRIDES =. "${@['', 'zcu111-zynqmp:']['zcu111-zynqmp' !='${MACHINE}']}"
11#### Regular settings follow 7#### Regular settings follow
@@ -55,4 +51,4 @@ HDF_MACHINE = "zcu111-zynqmp"
55 51
56#### No additional settings should be after the Postamble 52#### No additional settings should be after the Postamble
57#### Postamble 53#### Postamble
58PACKAGE_EXTRA_ARCHS:append = "${@['', 'zcu111_zynqmp']['zcu111-zynqmp' != '${MACHINE}']}" 54PACKAGE_EXTRA_ARCHS:append = "${@['', ' zcu111_zynqmp']['zcu111-zynqmp' != '${MACHINE}']}"
diff --git a/meta-xilinx-bsp/conf/machine/zcu1275-zynqmp.conf b/meta-xilinx-bsp/conf/machine/zcu1275-zynqmp.conf
index 71c94038..18aa3eee 100644
--- a/meta-xilinx-bsp/conf/machine/zcu1275-zynqmp.conf
+++ b/meta-xilinx-bsp/conf/machine/zcu1275-zynqmp.conf
@@ -1,3 +1,5 @@
1XILINX_DEPRECATED[zcu1275-zynqmp] = "${@'zcu1275-zynqmp is not supported in 2023.2' if d.getVar("XILINX_RELEASE_VERSION") == 'v2023.2' else ''}"
2
1#@TYPE: Machine 3#@TYPE: Machine
2#@NAME: zcu1275-zynqmp 4#@NAME: zcu1275-zynqmp
3#@DESCRIPTION: Machine configuration for the ZCU1275 evaluation board. 5#@DESCRIPTION: Machine configuration for the ZCU1275 evaluation board.
diff --git a/meta-xilinx-bsp/conf/machine/zcu1285-zynqmp.conf b/meta-xilinx-bsp/conf/machine/zcu1285-zynqmp.conf
index 812a283f..6fba3619 100644
--- a/meta-xilinx-bsp/conf/machine/zcu1285-zynqmp.conf
+++ b/meta-xilinx-bsp/conf/machine/zcu1285-zynqmp.conf
@@ -1,3 +1,5 @@
1XILINX_DEPRECATED[zcu1285-zynqmp] = "${@'zcu1285-zynqmp is not supported in 2023.2' if d.getVar("XILINX_RELEASE_VERSION") == 'v2023.2' else ''}"
2
1#@TYPE: Machine 3#@TYPE: Machine
2#@NAME: zcu1285-zynqmp 4#@NAME: zcu1285-zynqmp
3#@DESCRIPTION: Machine configuration for the ZCU1285 evaluation board. 5#@DESCRIPTION: Machine configuration for the ZCU1285 evaluation board.
diff --git a/meta-xilinx-bsp/conf/machine/zcu208-zynqmp.conf b/meta-xilinx-bsp/conf/machine/zcu208-zynqmp.conf
index 273606e2..7bb2c9db 100644
--- a/meta-xilinx-bsp/conf/machine/zcu208-zynqmp.conf
+++ b/meta-xilinx-bsp/conf/machine/zcu208-zynqmp.conf
@@ -47,4 +47,4 @@ HDF_MACHINE = "zcu208-zynqmp"
47 47
48#### No additional settings should be after the Postamble 48#### No additional settings should be after the Postamble
49#### Postamble 49#### Postamble
50PACKAGE_EXTRA_ARCHS:append = "${@['', 'zcu208_zynqmp']['zcu208-zynqmp' != '${MACHINE}']}" 50PACKAGE_EXTRA_ARCHS:append = "${@['', ' zcu208_zynqmp']['zcu208-zynqmp' != '${MACHINE}']}"
diff --git a/meta-xilinx-bsp/conf/machine/zcu216-zynqmp.conf b/meta-xilinx-bsp/conf/machine/zcu216-zynqmp.conf
index 80a15358..f4e1619d 100644
--- a/meta-xilinx-bsp/conf/machine/zcu216-zynqmp.conf
+++ b/meta-xilinx-bsp/conf/machine/zcu216-zynqmp.conf
@@ -47,4 +47,4 @@ HDF_MACHINE = "zcu216-zynqmp"
47 47
48#### No additional settings should be after the Postamble 48#### No additional settings should be after the Postamble
49#### Postamble 49#### Postamble
50PACKAGE_EXTRA_ARCHS:append = "${@['', 'zcu216_zynqmp']['zcu216-zynqmp' != '${MACHINE}']}" 50PACKAGE_EXTRA_ARCHS:append = "${@['', ' zcu216_zynqmp']['zcu216-zynqmp' != '${MACHINE}']}"
diff --git a/meta-xilinx-bsp/recipes-bsp/device-tree/device-tree.bbappend b/meta-xilinx-bsp/recipes-bsp/device-tree/device-tree.bbappend
index 9ab3f24e..fa4816af 100644
--- a/meta-xilinx-bsp/recipes-bsp/device-tree/device-tree.bbappend
+++ b/meta-xilinx-bsp/recipes-bsp/device-tree/device-tree.bbappend
@@ -4,10 +4,4 @@ FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
4COMPATIBLE_MACHINE:qemu-zynq7 = ".*" 4COMPATIBLE_MACHINE:qemu-zynq7 = ".*"
5SRC_URI:append:qemu-zynq7 = " file://qemu-zynq7.dts" 5SRC_URI:append:qemu-zynq7 = " file://qemu-zynq7.dts"
6 6
7SRC_URI:append = "${@bb.utils.contains('MACHINE_FEATURES', 'provencore', ' file://pnc.dtsi', '', d)}" 7EXTRA_OVERLAYS:append = "${@bb.utils.contains('MACHINE_FEATURES', 'provencore', ' pnc.dtsi', '', d)}"
8
9do_configure:append() {
10 if [ ${@bb.utils.contains('MACHINE_FEATURES', 'provencore', 'true', '', d)} ]; then
11 echo '#include "pnc.dtsi"' >> ${DT_FILES_PATH}/system-top.dts
12 fi
13}
diff --git a/meta-xilinx-bsp/recipes-bsp/dfx-mgr/dfx-mgr_%.bbappend b/meta-xilinx-bsp/recipes-bsp/dfx-mgr/dfx-mgr_%.bbappend
new file mode 100644
index 00000000..8fdf14bb
--- /dev/null
+++ b/meta-xilinx-bsp/recipes-bsp/dfx-mgr/dfx-mgr_%.bbappend
@@ -0,0 +1,10 @@
1FILESEXTRAPATHS:append := ":${THISDIR}/files"
2
3SRC_URI += "file://zcu106-xlnx-firmware-detect"
4
5PACKAGE_ARCH:zcu106-zynqmp = "${MACHINE_ARCH}"
6
7# ZCU106 eval board firmware detection script.
8do_install:append:zcu106-zynqmp () {
9 install -m 0755 ${WORKDIR}/zcu106-xlnx-firmware-detect ${D}${bindir}/xlnx-firmware-detect
10}
diff --git a/meta-xilinx-bsp/recipes-bsp/dfx-mgr/files/zcu106-xlnx-firmware-detect b/meta-xilinx-bsp/recipes-bsp/dfx-mgr/files/zcu106-xlnx-firmware-detect
new file mode 100644
index 00000000..ef5654cc
--- /dev/null
+++ b/meta-xilinx-bsp/recipes-bsp/dfx-mgr/files/zcu106-xlnx-firmware-detect
@@ -0,0 +1,71 @@
1#! /bin/sh
2
3# Copyright (C) 2022 Xilinx, Inc. All rights reserved.
4# Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.
5#
6# SPDX-License-Identifier: MIT
7
8# read values from dfx-mgr conf file
9conffile="/etc/dfx-mgrd/daemon.conf"
10if [ ! -f "${conffile}" ]; then
11 echo "dfx-mgrd configuration file not found: ${conffile}"
12 exit 1
13fi
14
15fwbasedir=$(grep "firmware_location" ${conffile} | sed 's/.*:.*\[\"\(.*\)\"\],\?/\1/')
16if [ -z "${fwbasedir}" ]; then
17 echo "Property 'firmware_location' not found in ${conffile}"
18 exit 1
19fi
20
21fwfile=$(grep "default_accel" ${conffile} | sed 's/.*:.*\"\(.*\)\",\?/\1/')
22if [ -z "${fwfile}" ]; then
23 echo "Property 'default_accel' not found in ${conffile}"
24 exit 1
25fi
26
27# check if default firmware is already set and present
28if [ -f "${fwfile}" ]; then
29 fwname=$(cat ${fwfile})
30 fwdir="${fwbasedir}/${fwname}"
31 if [ -n "${fwname}" ] && [ -d "${fwdir}" ]; then
32 echo "Default firmware detected: ${fwname}"
33 exit 0
34 fi
35fi
36
37# search for firmware based on EEPROM board id
38echo "Trying to detect default firmware based on EEPROM..."
39
40#check if board is a zcu106 eval board product
41eeprom=$(ls /sys/bus/i2c/devices/*54/eeprom 2> /dev/null)
42if [ -n "${eeprom}" ]; then
43 boardid=`dd if=$eeprom bs=1 count=6 skip=208 2>/dev/null | tr '[:upper:]' '[:lower:]'`
44 revision=`dd if=$eeprom bs=1 count=3 skip=224 2>/dev/null | tr '[:upper:]' '[:lower:]'`
45
46 fwname="${boardid}-${revision}"
47 fwdir="${fwbasedir}/${fwname}"
48
49 fixed_rev=2.0
50 var=$(awk 'BEGIN{ print "'$fixed_rev'"<"'$revision'" }')
51
52 if [ "${boardid}" == "zcu106" ] && [ "${var}" -eq 1 ] ;then
53 revision=2.0
54 echo "later than 2.0 board revisions are supported in 2.0 bit and dtbo files"
55 fwname="${boardid}-${revision}"
56 fwdir="${fwbasedir}/${fwname}"
57 echo "${fwname}" > "${fwfile}"
58 exit 1
59 elif [ ! -d "${fwdir}" ] ; then
60 echo "No default firmware named ${fwname} found in ${fwbasedir} , Loading rev1.0 bitstream and dtbo as default "
61 revision=1.0
62 fwname=$(ls ${fwbasedir} | grep ${revision})
63 fwdir="${fwbasedir}/${fwname}"
64 echo "${fwname}" > "${fwfile}"
65 exit 1
66 fi
67
68 echo "Default firmware detected: ${fwname}"
69 echo "${fwname}" > "${fwfile}"
70 exit 0
71fi
diff --git a/meta-xilinx-contrib/dynamic-layers/meta-xilinx-tools/recipes-bsp/bitstream/bitstream-extraction_%.bbappend b/meta-xilinx-contrib/dynamic-layers/meta-xilinx-tools/recipes-bsp/bitstream/bitstream-extraction_%.bbappend
new file mode 100644
index 00000000..4653c93a
--- /dev/null
+++ b/meta-xilinx-contrib/dynamic-layers/meta-xilinx-tools/recipes-bsp/bitstream/bitstream-extraction_%.bbappend
@@ -0,0 +1,2 @@
1COMPATIBLE_MACHINE:zybo-linux-bd-zynq7 = "^$"
2
diff --git a/meta-xilinx-contrib/recipes-kernel/linux/linux-xlnx/v2023.2/0001-drm-xilinx-Add-encoder-for-Digilent-boards.patch b/meta-xilinx-contrib/recipes-kernel/linux/linux-xlnx/v2023.2/0001-drm-xilinx-Add-encoder-for-Digilent-boards.patch
new file mode 100644
index 00000000..660bc218
--- /dev/null
+++ b/meta-xilinx-contrib/recipes-kernel/linux/linux-xlnx/v2023.2/0001-drm-xilinx-Add-encoder-for-Digilent-boards.patch
@@ -0,0 +1,305 @@
1From 21cc8144efdaa3cd8dbd7279f87b14fa3432fae4 Mon Sep 17 00:00:00 2001
2From: Jason Wu <jason.wu.misc@gmail.com>
3Date: Sun, 10 Apr 2016 13:14:13 +1000
4Subject: [PATCH 1/3] drm: xilinx: Add encoder for Digilent boards
5
6Add the dglnt_encoder driver that enables DRM support for the VGA and
7HDMI output ports found on many Digilent boards.
8
9Upstream-Status: Pending
10
11Signed-off-by: Sam Bobrowicz <sbobrowicz@digilentinc.com>
12Signed-off-by: Jason Wu <jason.wu.misc@gmail.com>
13---
14 .../bindings/drm/xilinx/dglnt_encoder.txt | 23 +++
15 drivers/gpu/drm/xilinx/Kconfig | 6 +
16 drivers/gpu/drm/xilinx/Makefile | 1 +
17 drivers/gpu/drm/xilinx/dglnt_encoder.c | 217 +++++++++++++++++++++
18 4 files changed, 247 insertions(+)
19 create mode 100644 Documentation/devicetree/bindings/drm/xilinx/dglnt_encoder.txt
20 create mode 100644 drivers/gpu/drm/xilinx/dglnt_encoder.c
21
22diff --git a/Documentation/devicetree/bindings/drm/xilinx/dglnt_encoder.txt b/Documentation/devicetree/bindings/drm/xilinx/dglnt_encoder.txt
23new file mode 100644
24index 0000000..242b24e
25--- /dev/null
26+++ b/Documentation/devicetree/bindings/drm/xilinx/dglnt_encoder.txt
27@@ -0,0 +1,23 @@
28+Device-Tree bindings for Digilent DRM Encoder Slave
29+
30+This driver provides support for VGA and HDMI outputs on Digilent FPGA boards.
31+The VGA or HDMI port must be connected to a Xilinx display pipeline via an
32+axi2vid IP core.
33+
34+Required properties:
35+ - compatible: Should be "digilent,drm-encoder".
36+
37+Optional properties:
38+ - dglnt,edid-i2c: The I2C device connected to the DDC bus on the video
39+ connector. This is used to obtain the supported resolutions
40+ of an attached monitor. If not defined, then a default
41+ set of resolutions is used and the display will initialize
42+ to 720p. Note most VGA connectors on Digilent boards do
43+ not have the DDC bus routed out.
44+
45+Example:
46+
47+ encoder_0: digilent_encoder {
48+ compatible = "digilent,drm-encoder";
49+ dglnt,edid-i2c = <&i2c1>;
50+ };
51diff --git a/drivers/gpu/drm/xilinx/Kconfig b/drivers/gpu/drm/xilinx/Kconfig
52index 57e18a9..d9ecff2 100644
53--- a/drivers/gpu/drm/xilinx/Kconfig
54+++ b/drivers/gpu/drm/xilinx/Kconfig
55@@ -33,6 +33,12 @@ config DRM_XILINX_DP_SUB
56 help
57 DRM driver for Xilinx Display Port Subsystem.
58
59+config DRM_DIGILENT_ENCODER
60+ tristate "Digilent VGA/HDMI DRM Encoder Driver"
61+ depends on DRM_XILINX
62+ help
63+ DRM slave encoder for Video-out on Digilent boards.
64+
65 config DRM_XILINX_DP_SUB_DEBUG_FS
66 bool "Xilinx DRM DPSUB debugfs"
67 depends on DEBUG_FS && DRM_XILINX_DP_SUB
68diff --git a/drivers/gpu/drm/xilinx/Makefile b/drivers/gpu/drm/xilinx/Makefile
69index 19bc154..c2717e40 100644
70--- a/drivers/gpu/drm/xilinx/Makefile
71+++ b/drivers/gpu/drm/xilinx/Makefile
72@@ -7,6 +7,7 @@ xilinx_drm-y := xilinx_drm_crtc.o xilinx_drm_connector.o xilinx_drm_drv.o \
73 xilinx_drm_plane.o
74 xilinx_drm-y += xilinx_cresample.o xilinx_osd.o xilinx_rgb2yuv.o xilinx_vtc.o
75
76+obj-$(CONFIG_DRM_DIGILENT_ENCODER) += dglnt_encoder.o
77 obj-$(CONFIG_DRM_XILINX) += xilinx_drm.o
78 obj-$(CONFIG_DRM_XILINX_DP) += xilinx_drm_dp.o
79 obj-$(CONFIG_DRM_XILINX_DP_SUB) += xilinx_drm_dp_sub.o
80diff --git a/drivers/gpu/drm/xilinx/dglnt_encoder.c b/drivers/gpu/drm/xilinx/dglnt_encoder.c
81new file mode 100644
82index 0000000..cb9fc7d
83--- /dev/null
84+++ b/drivers/gpu/drm/xilinx/dglnt_encoder.c
85@@ -0,0 +1,217 @@
86+/*
87+ * dglnt_encoder.c - DRM slave encoder for Video-out on Digilent boards
88+ *
89+ * Copyright (C) 2015 Digilent
90+ * Author: Sam Bobrowicz <sbobrowicz@digilentinc.com>
91+ *
92+ * Based on udl_encoder.c and udl_connector.c, Copyright (C) 2012 Red Hat.
93+ * Also based on xilinx_drm_dp.c, Copyright (C) 2014 Xilinx, Inc.
94+ *
95+ * This software is licensed under the terms of the GNU General Public
96+ * License version 2, as published by the Free Software Foundation, and
97+ * may be copied, distributed, and modified under those terms.
98+ *
99+ * This program is distributed in the hope that it will be useful,
100+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
101+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
102+ * GNU General Public License for more details.
103+ */
104+
105+#include <drm/drmP.h>
106+#include <drm/drm_edid.h>
107+#include <drm/drm_encoder_slave.h>
108+
109+#include <linux/device.h>
110+#include <linux/module.h>
111+#include <linux/err.h>
112+#include <linux/i2c.h>
113+#include <linux/of.h>
114+#include <linux/of_platform.h>
115+#include <linux/platform_device.h>
116+
117+#define DGLNT_ENC_MAX_FREQ 150000
118+#define DGLNT_ENC_MAX_H 1920
119+#define DGLNT_ENC_MAX_V 1080
120+#define DGLNT_ENC_PREF_H 1280
121+#define DGLNT_ENC_PREF_V 720
122+
123+struct dglnt_encoder {
124+ struct drm_encoder *encoder;
125+ struct i2c_adapter *i2c_bus;
126+ bool i2c_present;
127+};
128+
129+static inline struct dglnt_encoder *to_dglnt_encoder(
130+ struct drm_encoder *encoder)
131+{
132+ return to_encoder_slave(encoder)->slave_priv;
133+}
134+
135+static bool dglnt_mode_fixup(struct drm_encoder *encoder,
136+ const struct drm_display_mode *mode,
137+ struct drm_display_mode *adjusted_mode)
138+{
139+ return true;
140+}
141+
142+static void dglnt_encoder_mode_set(struct drm_encoder *encoder,
143+ struct drm_display_mode *mode,
144+ struct drm_display_mode *adjusted_mode)
145+{
146+}
147+
148+static void
149+dglnt_encoder_dpms(struct drm_encoder *encoder, int mode)
150+{
151+}
152+
153+static void dglnt_encoder_save(struct drm_encoder *encoder)
154+{
155+}
156+
157+static void dglnt_encoder_restore(struct drm_encoder *encoder)
158+{
159+}
160+
161+static int dglnt_encoder_mode_valid(struct drm_encoder *encoder,
162+ struct drm_display_mode *mode)
163+{
164+ if (mode &&
165+ !(mode->flags & ((DRM_MODE_FLAG_INTERLACE |
166+ DRM_MODE_FLAG_DBLCLK) | DRM_MODE_FLAG_3D_MASK)) &&
167+ (mode->clock <= DGLNT_ENC_MAX_FREQ) &&
168+ (mode->hdisplay <= DGLNT_ENC_MAX_H) &&
169+ (mode->vdisplay <= DGLNT_ENC_MAX_V))
170+ return MODE_OK;
171+ return MODE_BAD;
172+}
173+
174+static int dglnt_encoder_get_modes(struct drm_encoder *encoder,
175+ struct drm_connector *connector)
176+{
177+ struct dglnt_encoder *dglnt = to_dglnt_encoder(encoder);
178+ struct edid *edid;
179+ int num_modes = 0;
180+
181+ if (dglnt->i2c_present) {
182+ edid = drm_get_edid(connector, dglnt->i2c_bus);
183+ drm_connector_update_edid_property(connector, edid);
184+ if (edid) {
185+ num_modes = drm_add_edid_modes(connector, edid);
186+ kfree(edid);
187+ }
188+ } else {
189+ num_modes = drm_add_modes_noedid(connector, DGLNT_ENC_MAX_H,
190+ DGLNT_ENC_MAX_V);
191+ drm_set_preferred_mode(connector, DGLNT_ENC_PREF_H,
192+ DGLNT_ENC_PREF_V);
193+ }
194+ return num_modes;
195+}
196+
197+static enum drm_connector_status dglnt_encoder_detect(
198+ struct drm_encoder *encoder,
199+ struct drm_connector *connector)
200+{
201+ struct dglnt_encoder *dglnt = to_dglnt_encoder(encoder);
202+
203+ if (dglnt->i2c_present) {
204+ if (drm_probe_ddc(dglnt->i2c_bus))
205+ return connector_status_connected;
206+ return connector_status_disconnected;
207+ } else
208+ return connector_status_unknown;
209+}
210+
211+static struct drm_encoder_slave_funcs dglnt_encoder_slave_funcs = {
212+ .dpms = dglnt_encoder_dpms,
213+ .save = dglnt_encoder_save,
214+ .restore = dglnt_encoder_restore,
215+ .mode_fixup = dglnt_mode_fixup,
216+ .mode_valid = dglnt_encoder_mode_valid,
217+ .mode_set = dglnt_encoder_mode_set,
218+ .detect = dglnt_encoder_detect,
219+ .get_modes = dglnt_encoder_get_modes,
220+};
221+
222+static int dglnt_encoder_encoder_init(struct platform_device *pdev,
223+ struct drm_device *dev,
224+ struct drm_encoder_slave *encoder)
225+{
226+ struct dglnt_encoder *dglnt = platform_get_drvdata(pdev);
227+ struct device_node *sub_node;
228+
229+ encoder->slave_priv = dglnt;
230+ encoder->slave_funcs = &dglnt_encoder_slave_funcs;
231+
232+ dglnt->encoder = &encoder->base;
233+
234+ /* get i2c adapter for edid */
235+ dglnt->i2c_present = false;
236+ sub_node = of_parse_phandle(pdev->dev.of_node, "dglnt,edid-i2c", 0);
237+ if (sub_node) {
238+ dglnt->i2c_bus = of_find_i2c_adapter_by_node(sub_node);
239+ if (!dglnt->i2c_bus)
240+ DRM_INFO("failed to get the edid i2c adapter, using default modes\n");
241+ else
242+ dglnt->i2c_present = true;
243+ of_node_put(sub_node);
244+ }
245+
246+ return 0;
247+}
248+
249+static int dglnt_encoder_probe(struct platform_device *pdev)
250+{
251+ struct dglnt_encoder *dglnt;
252+
253+ dglnt = devm_kzalloc(&pdev->dev, sizeof(*dglnt), GFP_KERNEL);
254+ if (!dglnt)
255+ return -ENOMEM;
256+
257+ platform_set_drvdata(pdev, dglnt);
258+
259+ return 0;
260+}
261+
262+static int dglnt_encoder_remove(struct platform_device *pdev)
263+{
264+ return 0;
265+}
266+
267+static const struct of_device_id dglnt_encoder_of_match[] = {
268+ { .compatible = "digilent,drm-encoder", },
269+ { /* end of table */ },
270+};
271+MODULE_DEVICE_TABLE(of, dglnt_encoder_of_match);
272+
273+static struct drm_platform_encoder_driver dglnt_encoder_driver = {
274+ .platform_driver = {
275+ .probe = dglnt_encoder_probe,
276+ .remove = dglnt_encoder_remove,
277+ .driver = {
278+ .owner = THIS_MODULE,
279+ .name = "dglnt-drm-enc",
280+ .of_match_table = dglnt_encoder_of_match,
281+ },
282+ },
283+
284+ .encoder_init = dglnt_encoder_encoder_init,
285+};
286+
287+static int __init dglnt_encoder_init(void)
288+{
289+ return platform_driver_register(&dglnt_encoder_driver.platform_driver);
290+}
291+
292+static void __exit dglnt_encoder_exit(void)
293+{
294+ platform_driver_unregister(&dglnt_encoder_driver.platform_driver);
295+}
296+
297+module_init(dglnt_encoder_init);
298+module_exit(dglnt_encoder_exit);
299+
300+MODULE_AUTHOR("Digilent, Inc.");
301+MODULE_DESCRIPTION("DRM slave encoder for Video-out on Digilent boards");
302+MODULE_LICENSE("GPL v2");
303--
3042.7.4
305
diff --git a/meta-xilinx-contrib/recipes-kernel/linux/linux-xlnx/v2023.2/0002-clk-Add-driver-for-axi_dynclk-IP-Core.patch b/meta-xilinx-contrib/recipes-kernel/linux/linux-xlnx/v2023.2/0002-clk-Add-driver-for-axi_dynclk-IP-Core.patch
new file mode 100644
index 00000000..9b6229db
--- /dev/null
+++ b/meta-xilinx-contrib/recipes-kernel/linux/linux-xlnx/v2023.2/0002-clk-Add-driver-for-axi_dynclk-IP-Core.patch
@@ -0,0 +1,607 @@
1From 217e3b6f4393926b8dcad841381527ef3fc808c2 Mon Sep 17 00:00:00 2001
2From: Jason Wu <jason.wu.misc@gmail.com>
3Date: Sun, 10 Apr 2016 13:16:06 +1000
4Subject: [PATCH 2/3] clk: Add driver for axi_dynclk IP Core
5
6Add support for the axi_dynclk IP Core available from Digilent. This IP
7core dynamically configures the clock resources inside a Xilinx FPGA to
8generate a clock with a software programmable frequency.
9
10Upstream-Status: Pending
11
12Signed-off-by: Sam Bobrowicz <sbobrowicz@digilentinc.com>
13Signed-off-by: Jason Wu <jason.wu.misc@gmail.com>
14---
15 drivers/clk/Kconfig | 8 +
16 drivers/clk/Makefile | 1 +
17 drivers/clk/clk-dglnt-dynclk.c | 547 +++++++++++++++++++++++++++++++++++++++++
18 3 files changed, 556 insertions(+)
19 create mode 100644 drivers/clk/clk-dglnt-dynclk.c
20
21diff --git a/drivers/clk/Kconfig b/drivers/clk/Kconfig
22index dccb111100..7fe65a702b 100644
23--- a/drivers/clk/Kconfig
24+++ b/drivers/clk/Kconfig
25@@ -148,6 +148,14 @@ config CLK_QORIQ
26 This adds the clock driver support for Freescale QorIQ platforms
27 using common clock framework.
28
29+config COMMON_CLK_DGLNT_DYNCLK
30+ tristate "Digilent axi_dynclk Driver"
31+ depends on ARCH_ZYNQ || MICROBLAZE
32+ help
33+ ---help---
34+ Support for the Digilent AXI Dynamic Clock core for Xilinx
35+ FPGAs.
36+
37 config COMMON_CLK_XGENE
38 bool "Clock driver for APM XGene SoC"
39 default y
40diff --git a/drivers/clk/Makefile b/drivers/clk/Makefile
41index 0760449dde..45ce97d053 100644
42--- a/drivers/clk/Makefile
43+++ b/drivers/clk/Makefile
44@@ -24,6 +24,7 @@ obj-$(CONFIG_COMMON_CLK_CDCE706) += clk-cdce706.o
45 obj-$(CONFIG_COMMON_CLK_CDCE925) += clk-cdce925.o
46 obj-$(CONFIG_ARCH_CLPS711X) += clk-clps711x.o
47 obj-$(CONFIG_COMMON_CLK_CS2000_CP) += clk-cs2000-cp.o
48+obj-$(CONFIG_COMMON_CLK_DGLNT_DYNCLK) += clk-dglnt-dynclk.o
49 obj-$(CONFIG_ARCH_EFM32) += clk-efm32gg.o
50 obj-$(CONFIG_ARCH_HIGHBANK) += clk-highbank.o
51 obj-$(CONFIG_COMMON_CLK_MAX77686) += clk-max77686.o
52diff --git a/drivers/clk/clk-dglnt-dynclk.c b/drivers/clk/clk-dglnt-dynclk.c
53new file mode 100644
54index 0000000000..496ad5fc90
55--- /dev/null
56+++ b/drivers/clk/clk-dglnt-dynclk.c
57@@ -0,0 +1,547 @@
58+/*
59+ * clk-dglnt-dynclk.c - Digilent AXI Dynamic Clock (axi_dynclk) Driver
60+ *
61+ * Copyright (C) 2015 Digilent
62+ * Author: Sam Bobrowicz <sbobrowicz@digilentinc.com>
63+ *
64+ * Reused code from clk-axi-clkgen.c, Copyright (C) 2012-2013 Analog Devices Inc.
65+ *
66+ * This software is licensed under the terms of the GNU General Public
67+ * License version 2, as published by the Free Software Foundation, and
68+ * may be copied, distributed, and modified under those terms.
69+ *
70+ * This program is distributed in the hope that it will be useful,
71+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
72+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
73+ * GNU General Public License for more details.
74+ */
75+
76+#include <linux/platform_device.h>
77+#include <linux/clk-provider.h>
78+#include <linux/clk.h>
79+#include <linux/slab.h>
80+#include <linux/io.h>
81+#include <linux/of.h>
82+#include <linux/module.h>
83+#include <linux/err.h>
84+#include <linux/kernel.h>
85+
86+#define CLK_BIT_WEDGE 13
87+#define CLK_BIT_NOCOUNT 12
88+
89+/* This value is used to signal an error */
90+#define ERR_CLKCOUNTCALC 0xFFFFFFFF
91+#define ERR_CLKDIVIDER (1 << CLK_BIT_WEDGE | 1 << CLK_BIT_NOCOUNT)
92+
93+#define DYNCLK_DIV_1_REGMASK 0x1041
94+/* 25 MHz (125 KHz / 5) */
95+#define DYNCLK_DEFAULT_FREQ 125000
96+
97+#define MMCM_FREQ_VCOMIN 600000
98+#define MMCM_FREQ_VCOMAX 1200000
99+#define MMCM_FREQ_PFDMIN 10000
100+#define MMCM_FREQ_PFDMAX 450000
101+#define MMCM_FREQ_OUTMIN 4000
102+#define MMCM_FREQ_OUTMAX 800000
103+#define MMCM_DIV_MAX 106
104+#define MMCM_FB_MIN 2
105+#define MMCM_FB_MAX 64
106+#define MMCM_CLKDIV_MAX 128
107+#define MMCM_CLKDIV_MIN 1
108+
109+#define OFST_DISPLAY_CTRL 0x0
110+#define OFST_DISPLAY_STATUS 0x4
111+#define OFST_DISPLAY_CLK_L 0x8
112+#define OFST_DISPLAY_FB_L 0x0C
113+#define OFST_DISPLAY_FB_H_CLK_H 0x10
114+#define OFST_DISPLAY_DIV 0x14
115+#define OFST_DISPLAY_LOCK_L 0x18
116+#define OFST_DISPLAY_FLTR_LOCK_H 0x1C
117+
118+static const u64 lock_lookup[64] = {
119+ 0b0011000110111110100011111010010000000001,
120+ 0b0011000110111110100011111010010000000001,
121+ 0b0100001000111110100011111010010000000001,
122+ 0b0101101011111110100011111010010000000001,
123+ 0b0111001110111110100011111010010000000001,
124+ 0b1000110001111110100011111010010000000001,
125+ 0b1001110011111110100011111010010000000001,
126+ 0b1011010110111110100011111010010000000001,
127+ 0b1100111001111110100011111010010000000001,
128+ 0b1110011100111110100011111010010000000001,
129+ 0b1111111111111000010011111010010000000001,
130+ 0b1111111111110011100111111010010000000001,
131+ 0b1111111111101110111011111010010000000001,
132+ 0b1111111111101011110011111010010000000001,
133+ 0b1111111111101000101011111010010000000001,
134+ 0b1111111111100111000111111010010000000001,
135+ 0b1111111111100011111111111010010000000001,
136+ 0b1111111111100010011011111010010000000001,
137+ 0b1111111111100000110111111010010000000001,
138+ 0b1111111111011111010011111010010000000001,
139+ 0b1111111111011101101111111010010000000001,
140+ 0b1111111111011100001011111010010000000001,
141+ 0b1111111111011010100111111010010000000001,
142+ 0b1111111111011001000011111010010000000001,
143+ 0b1111111111011001000011111010010000000001,
144+ 0b1111111111010111011111111010010000000001,
145+ 0b1111111111010101111011111010010000000001,
146+ 0b1111111111010101111011111010010000000001,
147+ 0b1111111111010100010111111010010000000001,
148+ 0b1111111111010100010111111010010000000001,
149+ 0b1111111111010010110011111010010000000001,
150+ 0b1111111111010010110011111010010000000001,
151+ 0b1111111111010010110011111010010000000001,
152+ 0b1111111111010001001111111010010000000001,
153+ 0b1111111111010001001111111010010000000001,
154+ 0b1111111111010001001111111010010000000001,
155+ 0b1111111111001111101011111010010000000001,
156+ 0b1111111111001111101011111010010000000001,
157+ 0b1111111111001111101011111010010000000001,
158+ 0b1111111111001111101011111010010000000001,
159+ 0b1111111111001111101011111010010000000001,
160+ 0b1111111111001111101011111010010000000001,
161+ 0b1111111111001111101011111010010000000001,
162+ 0b1111111111001111101011111010010000000001,
163+ 0b1111111111001111101011111010010000000001,
164+ 0b1111111111001111101011111010010000000001,
165+ 0b1111111111001111101011111010010000000001,
166+ 0b1111111111001111101011111010010000000001,
167+ 0b1111111111001111101011111010010000000001,
168+ 0b1111111111001111101011111010010000000001,
169+ 0b1111111111001111101011111010010000000001,
170+ 0b1111111111001111101011111010010000000001,
171+ 0b1111111111001111101011111010010000000001,
172+ 0b1111111111001111101011111010010000000001,
173+ 0b1111111111001111101011111010010000000001,
174+ 0b1111111111001111101011111010010000000001,
175+ 0b1111111111001111101011111010010000000001,
176+ 0b1111111111001111101011111010010000000001,
177+ 0b1111111111001111101011111010010000000001,
178+ 0b1111111111001111101011111010010000000001,
179+ 0b1111111111001111101011111010010000000001,
180+ 0b1111111111001111101011111010010000000001,
181+ 0b1111111111001111101011111010010000000001,
182+ 0b1111111111001111101011111010010000000001
183+};
184+
185+static const u32 filter_lookup_low[64] = {
186+ 0b0001011111,
187+ 0b0001010111,
188+ 0b0001111011,
189+ 0b0001011011,
190+ 0b0001101011,
191+ 0b0001110011,
192+ 0b0001110011,
193+ 0b0001110011,
194+ 0b0001110011,
195+ 0b0001001011,
196+ 0b0001001011,
197+ 0b0001001011,
198+ 0b0010110011,
199+ 0b0001010011,
200+ 0b0001010011,
201+ 0b0001010011,
202+ 0b0001010011,
203+ 0b0001010011,
204+ 0b0001010011,
205+ 0b0001010011,
206+ 0b0001010011,
207+ 0b0001010011,
208+ 0b0001010011,
209+ 0b0001100011,
210+ 0b0001100011,
211+ 0b0001100011,
212+ 0b0001100011,
213+ 0b0001100011,
214+ 0b0001100011,
215+ 0b0001100011,
216+ 0b0001100011,
217+ 0b0001100011,
218+ 0b0001100011,
219+ 0b0001100011,
220+ 0b0001100011,
221+ 0b0001100011,
222+ 0b0001100011,
223+ 0b0010010011,
224+ 0b0010010011,
225+ 0b0010010011,
226+ 0b0010010011,
227+ 0b0010010011,
228+ 0b0010010011,
229+ 0b0010010011,
230+ 0b0010010011,
231+ 0b0010010011,
232+ 0b0010010011,
233+ 0b0010100011,
234+ 0b0010100011,
235+ 0b0010100011,
236+ 0b0010100011,
237+ 0b0010100011,
238+ 0b0010100011,
239+ 0b0010100011,
240+ 0b0010100011,
241+ 0b0010100011,
242+ 0b0010100011,
243+ 0b0010100011,
244+ 0b0010100011,
245+ 0b0010100011,
246+ 0b0010100011,
247+ 0b0010100011,
248+ 0b0010100011,
249+ 0b0010100011
250+};
251+
252+struct dglnt_dynclk_reg;
253+struct dglnt_dynclk_mode;
254+struct dglnt_dynclk;
255+
256+struct dglnt_dynclk_reg {
257+ u32 clk0L;
258+ u32 clkFBL;
259+ u32 clkFBH_clk0H;
260+ u32 divclk;
261+ u32 lockL;
262+ u32 fltr_lockH;
263+};
264+
265+struct dglnt_dynclk_mode {
266+ u32 freq;
267+ u32 fbmult;
268+ u32 clkdiv;
269+ u32 maindiv;
270+};
271+
272+struct dglnt_dynclk {
273+ void __iomem *base;
274+ struct clk_hw clk_hw;
275+ unsigned long freq;
276+};
277+
278+u32 dglnt_dynclk_divider(u32 divide)
279+{
280+ u32 output = 0;
281+ u32 highTime = 0;
282+ u32 lowTime = 0;
283+
284+ if ((divide < 1) || (divide > 128))
285+ return ERR_CLKDIVIDER;
286+
287+ if (divide == 1)
288+ return DYNCLK_DIV_1_REGMASK;
289+
290+ highTime = divide / 2;
291+ /* if divide is odd */
292+ if (divide & 0x1) {
293+ lowTime = highTime + 1;
294+ output = 1 << CLK_BIT_WEDGE;
295+ } else {
296+ lowTime = highTime;
297+ }
298+
299+ output |= 0x03F & lowTime;
300+ output |= 0xFC0 & (highTime << 6);
301+ return output;
302+}
303+
304+u32 dglnt_dynclk_count_calc(u32 divide)
305+{
306+ u32 output = 0;
307+ u32 divCalc = 0;
308+
309+ divCalc = dglnt_dynclk_divider(divide);
310+ if (divCalc == ERR_CLKDIVIDER)
311+ output = ERR_CLKCOUNTCALC;
312+ else
313+ output = (0xFFF & divCalc) | ((divCalc << 10) & 0x00C00000);
314+ return output;
315+}
316+
317+
318+int dglnt_dynclk_find_reg(struct dglnt_dynclk_reg *regValues,
319+ struct dglnt_dynclk_mode *clkParams)
320+{
321+ if ((clkParams->fbmult < 2) || clkParams->fbmult > 64)
322+ return -EINVAL;
323+
324+ regValues->clk0L = dglnt_dynclk_count_calc(clkParams->clkdiv);
325+ if (regValues->clk0L == ERR_CLKCOUNTCALC)
326+ return -EINVAL;
327+
328+ regValues->clkFBL = dglnt_dynclk_count_calc(clkParams->fbmult);
329+ if (regValues->clkFBL == ERR_CLKCOUNTCALC)
330+ return -EINVAL;
331+
332+ regValues->clkFBH_clk0H = 0;
333+
334+ regValues->divclk = dglnt_dynclk_divider(clkParams->maindiv);
335+ if (regValues->divclk == ERR_CLKDIVIDER)
336+ return -EINVAL;
337+
338+ regValues->lockL = (u32)(lock_lookup[clkParams->fbmult - 1] &
339+ 0xFFFFFFFF);
340+
341+ regValues->fltr_lockH = (u32)((lock_lookup[clkParams->fbmult - 1] >>
342+ 32) & 0x000000FF);
343+ regValues->fltr_lockH |= ((filter_lookup_low[clkParams->fbmult - 1] <<
344+ 16) & 0x03FF0000);
345+
346+ return 0;
347+}
348+
349+void dglnt_dynclk_write_reg(struct dglnt_dynclk_reg *regValues,
350+ void __iomem *baseaddr)
351+{
352+ writel(regValues->clk0L, baseaddr + OFST_DISPLAY_CLK_L);
353+ writel(regValues->clkFBL, baseaddr + OFST_DISPLAY_FB_L);
354+ writel(regValues->clkFBH_clk0H, baseaddr + OFST_DISPLAY_FB_H_CLK_H);
355+ writel(regValues->divclk, baseaddr + OFST_DISPLAY_DIV);
356+ writel(regValues->lockL, baseaddr + OFST_DISPLAY_LOCK_L);
357+ writel(regValues->fltr_lockH, baseaddr + OFST_DISPLAY_FLTR_LOCK_H);
358+}
359+
360+u32 dglnt_dynclk_find_mode(u32 freq, u32 parentFreq,
361+ struct dglnt_dynclk_mode *bestPick)
362+{
363+ u32 bestError = MMCM_FREQ_OUTMAX;
364+ u32 curError;
365+ u32 curClkMult;
366+ u32 curFreq;
367+ u32 divVal;
368+ u32 curFb, curClkDiv;
369+ u32 minFb = 0;
370+ u32 maxFb = 0;
371+ u32 curDiv = 1;
372+ u32 maxDiv;
373+ bool freq_found = false;
374+
375+ bestPick->freq = 0;
376+ if (parentFreq == 0)
377+ return 0;
378+
379+ /* minimum frequency is actually dictated by VCOmin */
380+ if (freq < MMCM_FREQ_OUTMIN)
381+ freq = MMCM_FREQ_OUTMIN;
382+ if (freq > MMCM_FREQ_OUTMAX)
383+ freq = MMCM_FREQ_OUTMAX;
384+
385+ if (parentFreq > MMCM_FREQ_PFDMAX)
386+ curDiv = 2;
387+ maxDiv = parentFreq / MMCM_FREQ_PFDMIN;
388+ if (maxDiv > MMCM_DIV_MAX)
389+ maxDiv = MMCM_DIV_MAX;
390+
391+ while (curDiv <= maxDiv && !freq_found) {
392+ minFb = curDiv * DIV_ROUND_UP(MMCM_FREQ_VCOMIN, parentFreq);
393+ maxFb = curDiv * (MMCM_FREQ_VCOMAX / parentFreq);
394+ if (maxFb > MMCM_FB_MAX)
395+ maxFb = MMCM_FB_MAX;
396+ if (minFb < MMCM_FB_MIN)
397+ minFb = MMCM_FB_MIN;
398+
399+ divVal = curDiv * freq;
400+ /*
401+ * This multiplier is used to find the best clkDiv value for
402+ * each FB value
403+ */
404+ curClkMult = ((parentFreq * 1000) + (divVal / 2)) / divVal;
405+
406+ curFb = minFb;
407+ while (curFb <= maxFb && !freq_found) {
408+ curClkDiv = ((curClkMult * curFb) + 500) / 1000;
409+ if (curClkDiv > MMCM_CLKDIV_MAX)
410+ curClkDiv = MMCM_CLKDIV_MAX;
411+ if (curClkDiv < MMCM_CLKDIV_MIN)
412+ curClkDiv = MMCM_CLKDIV_MIN;
413+ curFreq = (((parentFreq * curFb) / curDiv) / curClkDiv);
414+ if (curFreq >= freq)
415+ curError = curFreq - freq;
416+ else
417+ curError = freq - curFreq;
418+ if (curError < bestError) {
419+ bestError = curError;
420+ bestPick->clkdiv = curClkDiv;
421+ bestPick->fbmult = curFb;
422+ bestPick->maindiv = curDiv;
423+ bestPick->freq = curFreq;
424+ }
425+ if (!curError)
426+ freq_found = true;
427+ curFb++;
428+ }
429+ curDiv++;
430+ }
431+ return bestPick->freq;
432+}
433+
434+static struct dglnt_dynclk *clk_hw_to_dglnt_dynclk(struct clk_hw *clk_hw)
435+{
436+ return container_of(clk_hw, struct dglnt_dynclk, clk_hw);
437+}
438+
439+
440+static int dglnt_dynclk_enable(struct clk_hw *clk_hw)
441+{
442+ struct dglnt_dynclk *dglnt_dynclk = clk_hw_to_dglnt_dynclk(clk_hw);
443+ unsigned int clock_state;
444+
445+ if (dglnt_dynclk->freq) {
446+ writel(1, dglnt_dynclk->base + OFST_DISPLAY_CTRL);
447+ do {
448+ clock_state = readl(dglnt_dynclk->base +
449+ OFST_DISPLAY_STATUS);
450+ } while (!clock_state);
451+ }
452+ return 0;
453+}
454+
455+static void dglnt_dynclk_disable(struct clk_hw *clk_hw)
456+{
457+ struct dglnt_dynclk *dglnt_dynclk = clk_hw_to_dglnt_dynclk(clk_hw);
458+
459+ writel(0, dglnt_dynclk->base + OFST_DISPLAY_CTRL);
460+}
461+
462+static int dglnt_dynclk_set_rate(struct clk_hw *clk_hw,
463+ unsigned long rate, unsigned long parent_rate)
464+{
465+ struct dglnt_dynclk *dglnt_dynclk = clk_hw_to_dglnt_dynclk(clk_hw);
466+ struct dglnt_dynclk_reg clkReg;
467+ struct dglnt_dynclk_mode clkMode;
468+
469+ if (parent_rate == 0 || rate == 0)
470+ return -EINVAL;
471+ if (rate == dglnt_dynclk->freq)
472+ return 0;
473+
474+ /*
475+ * Convert from Hz to KHz, then multiply by five to account for
476+ * BUFR division
477+ */
478+ rate = (rate + 100) / 200;
479+ /* convert from Hz to KHz */
480+ parent_rate = (parent_rate + 500) / 1000;
481+ if (!dglnt_dynclk_find_mode(rate, parent_rate, &clkMode))
482+ return -EINVAL;
483+
484+ /*
485+ * Write to the PLL dynamic configuration registers to configure it
486+ * with the calculated parameters.
487+ */
488+ dglnt_dynclk_find_reg(&clkReg, &clkMode);
489+ dglnt_dynclk_write_reg(&clkReg, dglnt_dynclk->base);
490+ dglnt_dynclk->freq = clkMode.freq * 200;
491+ dglnt_dynclk_disable(clk_hw);
492+ dglnt_dynclk_enable(clk_hw);
493+
494+ return 0;
495+}
496+
497+static long dglnt_dynclk_round_rate(struct clk_hw *hw, unsigned long rate,
498+ unsigned long *parent_rate)
499+{
500+ struct dglnt_dynclk_mode clkMode;
501+
502+ dglnt_dynclk_find_mode(((rate + 100) / 200),
503+ ((*parent_rate) + 500) / 1000, &clkMode);
504+
505+ return (clkMode.freq * 200);
506+}
507+
508+static unsigned long dglnt_dynclk_recalc_rate(struct clk_hw *clk_hw,
509+ unsigned long parent_rate)
510+{
511+ struct dglnt_dynclk *dglnt_dynclk = clk_hw_to_dglnt_dynclk(clk_hw);
512+
513+ return dglnt_dynclk->freq;
514+}
515+
516+
517+static const struct clk_ops dglnt_dynclk_ops = {
518+ .recalc_rate = dglnt_dynclk_recalc_rate,
519+ .round_rate = dglnt_dynclk_round_rate,
520+ .set_rate = dglnt_dynclk_set_rate,
521+ .enable = dglnt_dynclk_enable,
522+ .disable = dglnt_dynclk_disable,
523+};
524+
525+static const struct of_device_id dglnt_dynclk_ids[] = {
526+ { .compatible = "digilent,axi-dynclk", },
527+ { },
528+};
529+MODULE_DEVICE_TABLE(of, dglnt_dynclk_ids);
530+
531+static int dglnt_dynclk_probe(struct platform_device *pdev)
532+{
533+ const struct of_device_id *id;
534+ struct dglnt_dynclk *dglnt_dynclk;
535+ struct clk_init_data init;
536+ const char *parent_name;
537+ const char *clk_name;
538+ struct resource *mem;
539+ struct clk *clk;
540+
541+ if (!pdev->dev.of_node)
542+ return -ENODEV;
543+
544+ id = of_match_node(dglnt_dynclk_ids, pdev->dev.of_node);
545+ if (!id)
546+ return -ENODEV;
547+
548+ dglnt_dynclk = devm_kzalloc(&pdev->dev, sizeof(*dglnt_dynclk),
549+ GFP_KERNEL);
550+ if (!dglnt_dynclk)
551+ return -ENOMEM;
552+
553+ mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
554+ dglnt_dynclk->base = devm_ioremap_resource(&pdev->dev, mem);
555+ if (IS_ERR(dglnt_dynclk->base))
556+ return PTR_ERR(dglnt_dynclk->base);
557+
558+ parent_name = of_clk_get_parent_name(pdev->dev.of_node, 0);
559+ if (!parent_name)
560+ return -EINVAL;
561+
562+ clk_name = pdev->dev.of_node->name;
563+ of_property_read_string(pdev->dev.of_node, "clock-output-names",
564+ &clk_name);
565+
566+ init.name = clk_name;
567+ init.ops = &dglnt_dynclk_ops;
568+ init.flags = 0;
569+ init.parent_names = &parent_name;
570+ init.num_parents = 1;
571+
572+ dglnt_dynclk->freq = 0;
573+ dglnt_dynclk_disable(&dglnt_dynclk->clk_hw);
574+
575+ dglnt_dynclk->clk_hw.init = &init;
576+ clk = devm_clk_register(&pdev->dev, &dglnt_dynclk->clk_hw);
577+ if (IS_ERR(clk))
578+ return PTR_ERR(clk);
579+
580+ return of_clk_add_provider(pdev->dev.of_node, of_clk_src_simple_get,
581+ clk);
582+}
583+
584+static int dglnt_dynclk_remove(struct platform_device *pdev)
585+{
586+ of_clk_del_provider(pdev->dev.of_node);
587+
588+ return 0;
589+}
590+
591+static struct platform_driver dglnt_dynclk_driver = {
592+ .driver = {
593+ .name = "dglnt-dynclk",
594+ .owner = THIS_MODULE,
595+ .of_match_table = dglnt_dynclk_ids,
596+ },
597+ .probe = dglnt_dynclk_probe,
598+ .remove = dglnt_dynclk_remove,
599+};
600+module_platform_driver(dglnt_dynclk_driver);
601+
602+MODULE_LICENSE("GPL v2");
603+MODULE_AUTHOR("Sam Bobrowicz <sbobrowicz@digilentinc.com>");
604+MODULE_DESCRIPTION("CCF Driver for Digilent axi_dynclk IP Core");
605--
6062.14.2
607
diff --git a/meta-xilinx-contrib/recipes-kernel/linux/linux-xlnx/v2023.2/0003-drm-xilinx-Fix-DPMS-transition-to-on.patch b/meta-xilinx-contrib/recipes-kernel/linux/linux-xlnx/v2023.2/0003-drm-xilinx-Fix-DPMS-transition-to-on.patch
new file mode 100644
index 00000000..a98d84c5
--- /dev/null
+++ b/meta-xilinx-contrib/recipes-kernel/linux/linux-xlnx/v2023.2/0003-drm-xilinx-Fix-DPMS-transition-to-on.patch
@@ -0,0 +1,54 @@
1From 1a18e2b514ae9e75145597ac509a87f656c976ba Mon Sep 17 00:00:00 2001
2From: Nathan Rossi <nathan@nathanrossi.com>
3Date: Mon, 2 May 2016 23:46:42 +1000
4Subject: [PATCH 3/3] drm: xilinx: Fix DPMS transition to on
5
6Fix the issues where the VTC is reset (losing its timing config).
7
8Also fix the issue where the plane destroys its DMA descriptors and
9marks the DMA channels as inactive but never recreates the descriptors
10and never updates the active state when turning DPMS back on.
11
12Signed-off-by: Nathan Rossi <nathan@nathanrossi.com>
13Upstream-Status: Pending [This is a workaround]
14---
15 drivers/gpu/drm/xilinx/xilinx_drm_crtc.c | 1 -
16 drivers/gpu/drm/xilinx/xilinx_drm_plane.c | 3 ++-
17 2 files changed, 2 insertions(+), 2 deletions(-)
18
19diff --git a/drivers/gpu/drm/xilinx/xilinx_drm_crtc.c b/drivers/gpu/drm/xilinx/xilinx_drm_crtc.c
20index 631d35b921..93dbd4b58a 100644
21--- a/drivers/gpu/drm/xilinx/xilinx_drm_crtc.c
22+++ b/drivers/gpu/drm/xilinx/xilinx_drm_crtc.c
23@@ -88,7 +88,6 @@ static void xilinx_drm_crtc_dpms(struct drm_crtc *base_crtc, int dpms)
24 default:
25 if (crtc->vtc) {
26 xilinx_vtc_disable(crtc->vtc);
27- xilinx_vtc_reset(crtc->vtc);
28 }
29 if (crtc->cresample) {
30 xilinx_cresample_disable(crtc->cresample);
31diff --git a/drivers/gpu/drm/xilinx/xilinx_drm_plane.c b/drivers/gpu/drm/xilinx/xilinx_drm_plane.c
32index 6a248b72d4..d2518a4bdf 100644
33--- a/drivers/gpu/drm/xilinx/xilinx_drm_plane.c
34+++ b/drivers/gpu/drm/xilinx/xilinx_drm_plane.c
35@@ -140,7 +140,7 @@ void xilinx_drm_plane_commit(struct drm_plane *base_plane)
36 for (i = 0; i < MAX_NUM_SUB_PLANES; i++) {
37 struct xilinx_drm_plane_dma *dma = &plane->dma[i];
38
39- if (dma->chan && dma->is_active) {
40+ if (dma->chan) {
41 flags = DMA_CTRL_ACK | DMA_PREP_INTERRUPT;
42 desc = dmaengine_prep_interleaved_dma(dma->chan,
43 &dma->xt,
44@@ -153,6 +153,7 @@ void xilinx_drm_plane_commit(struct drm_plane *base_plane)
45 dmaengine_submit(desc);
46
47 dma_async_issue_pending(dma->chan);
48+ dma->is_active = true;
49 }
50 }
51 }
52--
532.14.2
54
diff --git a/meta-xilinx-contrib/recipes-kernel/linux/linux-xlnx/v2023.2/0004-minized-wifi-bluetooth.cfg b/meta-xilinx-contrib/recipes-kernel/linux/linux-xlnx/v2023.2/0004-minized-wifi-bluetooth.cfg
new file mode 100644
index 00000000..f71e53ab
--- /dev/null
+++ b/meta-xilinx-contrib/recipes-kernel/linux/linux-xlnx/v2023.2/0004-minized-wifi-bluetooth.cfg
@@ -0,0 +1,33 @@
1#
2# Bluetooth config
3#
4CONFIG_BT=y
5CONFIG_BT_BREDR=y
6CONFIG_BT_HS=y
7CONFIG_BT_LE=y
8CONFIG_BT_BCM=y
9CONFIG_BT_HCIUART=y
10CONFIG_BT_HCIUART_H4=y
11CONFIG_BT_HCIUART_BCM=y
12CONFIG_BT_HIDP=y
13CONFIG_CFG80211=y
14CONFIG_CFG80211_DEFAULT_PS=y
15CONFIG_CFG80211_CRDA_SUPPORT=y
16CONFIG_BRCMUTIL=y
17CONFIG_BRCMFMAC=y
18CONFIG_BRCMFMAC_PROTO_BCDC=y
19CONFIG_BRCMFMAC_SDIO=y
20CONFIG_CRYPTO_BLKCIPHER=y
21CONFIG_CRYPTO_MANAGER=y
22CONFIG_CRYPTO_ECB=y
23CONFIG_CRYPTO_CMAC=y
24CONFIG_CRYPTO_SHA256=y
25
26#
27# Regulator config
28#
29CONFIG_REGMAP_IRQ=y
30CONFIG_I2C_XILINX=y
31CONFIG_MFD_DA9062=y
32CONFIG_REGULATOR_DA9062=y
33
diff --git a/meta-xilinx-contrib/recipes-kernel/linux/linux-xlnx_2023.2.bbappend b/meta-xilinx-contrib/recipes-kernel/linux/linux-xlnx_2023.2.bbappend
new file mode 100644
index 00000000..c789c7a9
--- /dev/null
+++ b/meta-xilinx-contrib/recipes-kernel/linux/linux-xlnx_2023.2.bbappend
@@ -0,0 +1,12 @@
1FILESEXTRAPATHS:prepend := "${THISDIR}/linux-xlnx/v${@bb.parse.vars_from_file(d.getVar('FILE', False),d)[1] or ''}:"
2
3# Note: These patches are very old and doesn't apply on top of 5.x
4# kernel. For more details refer README.md file.
5
6#SRC_URI:append:zybo-linux-bd-zynq7 = " \
7# file://0001-drm-xilinx-Add-encoder-for-Digilent-boards.patch \
8# file://0002-clk-Add-driver-for-axi_dynclk-IP-Core.patch \
9# file://0003-drm-xilinx-Fix-DPMS-transition-to-on.patch \
10# "
11
12SRC_URI:append:minized-zynq7 = " file://0004-minized-wifi-bluetooth.cfg"
diff --git a/meta-xilinx-core/classes/dfx_user_dts.bbclass b/meta-xilinx-core/classes/dfx_user_dts.bbclass
new file mode 100644
index 00000000..4404aa05
--- /dev/null
+++ b/meta-xilinx-core/classes/dfx_user_dts.bbclass
@@ -0,0 +1,267 @@
1# This bbclass is inherited by flat, DFx Static and DFx RP firmware recipes.
2# dfx_user_dts.bbclass expects user to generate pl dtsi for flat, DFx Static
3# and DFx RP xsa outside of yocto.
4
5inherit devicetree
6
7DEPENDS = "dtc-native bootgen-native"
8
9# recipes that inherit from this class need to use an appropriate machine
10# override for COMPATIBLE_MACHINE to build successfully; don't allow building
11# for microblaze MACHINE
12COMPATIBLE_MACHINE ?= "^$"
13COMPATIBLE_MACHINE:microblaze = "^$"
14
15PACKAGE_ARCH = "${MACHINE_ARCH}"
16
17PROVIDES = ""
18
19do_fetch[cleandirs] = "${B}"
20
21DT_PADDING_SIZE = "0x1000"
22BOOTGEN_FLAGS ?= " -arch ${SOC_FAMILY} -w ${@bb.utils.contains('SOC_FAMILY','zynqmp','','-process_bitstream bin',d)}"
23
24S ?= "${WORKDIR}"
25FW_DIR ?= ""
26DTSI_PATH ?= ""
27DTBO_PATH ?= ""
28DT_FILES_PATH = "${S}/${DTSI_PATH}"
29FIRMWARE_NAME_DT_FILE ?= ""
30USER_DTS_FILE ?= ""
31
32FIRMWARE_NAME_DT_FILE[doc] = "DT file which has firmware-name device-tree property"
33USER_DTS_FILE[doc] = "Final DTSI or DTS file which is used for packaging final DT overlay"
34
35python() {
36 import re
37 soc_family = d.getVar("SOC_FAMILY")
38 if "git://" in d.getVar("SRC_URI") or "https://" in d.getVar("SRC_URI"):
39 d.setVar("S",'${WORKDIR}/git/'+d.getVar("FW_DIR"))
40 else:
41 dtsi_found = False
42 dtbo_found = False
43 bit_found = False
44 bin_found = False
45 pdi_found = False
46
47 # Required Inputs
48 if '.dtsi' in d.getVar("SRC_URI") or '.dts' in d.getVar("SRC_URI"):
49 dtsi_found = True
50 d.setVar("DTSI_PATH",os.path.dirname([a for a in d.getVar('SRC_URI').split() if '.dtsi' in a or '.dts' in a][0].lstrip('file://')))
51
52 if '.dtbo' in d.getVar("SRC_URI"):
53 dtbo_found = True
54 d.setVar("DTBO_PATH",os.path.dirname([a for a in d.getVar('SRC_URI').split() if '.dtbo' in a][0].lstrip('file://')))
55
56 if '.bit' in d.getVar("SRC_URI") and soc_family != "versal":
57 bit_found = True
58 d.setVar("BIT_PATH",os.path.dirname([a for a in d.getVar('SRC_URI').split() if '.bit' in a][0].lstrip('file://')))
59
60 if '.bin' in d.getVar("SRC_URI") and soc_family != "versal":
61 bin_found = True
62 d.setVar("BIT_PATH",os.path.dirname([a for a in d.getVar('SRC_URI').split() if '.bin' in a][0].lstrip('file://')))
63
64 if '.pdi' in d.getVar("SRC_URI") and soc_family == "versal":
65 pdi_found = True
66 d.setVar("PDI_PATH",os.path.dirname([a for a in d.getVar('SRC_URI').split() if '.pdi' in a][0].lstrip('file://')))
67
68 # Check for valid combination of input files in SRC_URI
69 if dtsi_found or dtbo_found:
70 bb.debug(2, "dtsi or dtbo found in SRC_URI")
71 if bit_found or pdi_found or bin_found:
72 bb.debug(2, "bitstream or pdi found in SRC_URI")
73 elif bit_found and bin_found:
74 raise bb.parse.SkipRecipe("Both '.bit' and '.bin' file found in SRC_URI, either .bit or .bin file is supported but not both.")
75 else:
76 raise bb.parse.SkipRecipe("Need one '.bit' or one '.pdi' file added to SRC_URI ")
77 else:
78 raise bb.parse.SkipRecipe("Need one '.dtsi' or one '.dtbo' file added to SRC_URI ")
79
80 # Check for valid combination of dtsi and dts files in SRC_URI
81 # Following file combinations are not supported use case.
82 # 1. More than one '.dtsi' and zero '.dts' file.
83 # 2. More than one '.dts' and zero or more than one '.dtsi'file .
84 pattern_dts = re.compile(r'[.]+dts\b')
85 pattern_dtsi = re.compile(r'[.]+dtsi\b')
86 dts_count = len([*re.finditer(pattern_dts, d.getVar('SRC_URI'))])
87 dtsi_count = len([*re.finditer(pattern_dtsi, d.getVar("SRC_URI"))])
88
89 if dtsi_count > 1 and dts_count == 0:
90 raise bb.parse.SkipRecipe("Recipe has more than one '.dtsi' and zero '.dts' found, this is an unsupported use case")
91 elif dts_count > 1:
92 raise bb.parse.SkipRecipe("Recipe has more than one '.dts' and zero or more than one '.dtsi' found, this is an unsupported use case")
93
94 # Optional input
95 if '.json' in d.getVar("SRC_URI"):
96 d.setVar("JSON_PATH",os.path.dirname([a for a in d.getVar('SRC_URI').split() if '.json' in a][0].lstrip('file://')))
97
98 if '.xclbin' in d.getVar("SRC_URI"):
99 d.setVar("XCL_PATH",os.path.dirname([a for a in d.getVar('SRC_URI').split() if '.xclbin' in a][0].lstrip('file://')))
100}
101
102# Function to get dts or dtsi file count.
103def get_dt_count(d, dt_ext):
104 import glob
105 dt_count = sum(1 for f in glob.iglob((d.getVar('S') + (d.getVar('DTSI_PATH')) + '/*.' + dt_ext),recursive=True) if os.path.isfile(f))
106 return dt_count
107
108# Function to search for dt firmware-name property in dts or dtsi file.
109python find_firmware_file() {
110 import glob
111 pattern_fw = 'firmware-name'
112 search_count = 0
113 for dt_files in glob.iglob((d.getVar('S') + (d.getVar('DTSI_PATH')) + '/*.dts*'),recursive=True):
114 with open(dt_files, "r") as f:
115 current_fd = f.read()
116 if pattern_fw in current_fd:
117 search_count += 1
118 if search_count > 1:
119 bb.error("firmware-name dt property found in more than one dt files! Please fix the dts or dtsi file.")
120 break
121 else:
122 d.setVar('FIRMWARE_NAME_DT_FILE', os.path.basename(dt_files))
123}
124
125do_configure[prefuncs] += "find_firmware_file"
126
127python do_configure() {
128 import glob, re, shutil
129 soc_family = d.getVar("SOC_FAMILY")
130
131 if bb.utils.contains('MACHINE_FEATURES', 'fpga-overlay', False, True, d):
132 bb.warn("Using fpga-manager.bbclass requires fpga-overlay MACHINE_FEATURE to be enabled")
133
134 # Renaming firmware-name using $PN as bitstream/PDI will be renamed using
135 # $PN when generating the bin/pdi file.
136 if os.path.isfile(d.getVar('S') + (d.getVar('DTSI_PATH') or '') + '/' + d.getVar('FIRMWARE_NAME_DT_FILE')):
137 orig_dtsi = glob.glob(d.getVar('S')+ (d.getVar('DTSI_PATH') or '') + '/' + d.getVar('FIRMWARE_NAME_DT_FILE'))[0]
138 new_dtsi = d.getVar('S') + '/pl.dtsi_firmwarename'
139 with open(new_dtsi, 'w') as newdtsi:
140 with open(orig_dtsi) as olddtsi:
141 for line in olddtsi:
142 if soc_family == 'versal':
143 newdtsi.write(re.sub('firmware-name.*\".*\"','firmware-name = \"'+d.getVar('PN')+'.pdi\"',line))
144 else:
145 newdtsi.write(re.sub('firmware-name.*\".*\"','firmware-name = \"'+d.getVar('PN')+'.bit.bin\"',line))
146 shutil.move(new_dtsi,orig_dtsi)
147}
148
149do_compile[prefuncs] += "find_firmware_file"
150
151python devicetree_do_compile:append() {
152 import glob, subprocess, shutil
153 soc_family = d.getVar("SOC_FAMILY")
154
155 dtbo_count = sum(1 for f in glob.iglob((d.getVar('S') + '/*.dtbo'),recursive=True) if os.path.isfile(f))
156
157 # Skip devicetree do_compile task if input file is dtbo in SRC_URI
158 if not dtbo_count:
159 # Convert .bit to bit.bin format only if dtsi is input.
160 # In case of dtbo as input, bbclass doesn't know if firmware-name is .bit or
161 # .bit.bin format and corresponding file name. Hence we are not doing
162 # bit.bin conversion.
163 if soc_family != 'versal' and glob.glob(d.getVar('S') + '/' + d.getVar('FIRMWARE_NAME_DT_FILE')):
164 pn = d.getVar('PN')
165 biffile = pn + '.bif'
166
167 with open(biffile, 'w') as f:
168 f.write('all:\n{\n\t' + glob.glob(d.getVar('S')+(d.getVar('BIT_PATH') or '') + '/*.bit')[0] + '\n}')
169
170 bootgenargs = ["bootgen"] + (d.getVar("BOOTGEN_FLAGS") or "").split()
171 bootgenargs += ["-image", biffile, "-o", pn + ".bit.bin"]
172 subprocess.run(bootgenargs, check = True)
173
174 # In Zynq7k using both "-process_bitstream bin" and "-o" in bootgen flag,
175 # to convert bit file to bin format, "-o" option will not be effective
176 # and generated output file name is ${S}+${BIT_PATH}/<bit_file_name>.bit.bin
177 # file, Hence we need to rename this file from <bit_file_name>.bit.bin to
178 # ${PN}.bit.bin which matches the firmware name in dtbo and move
179 # ${PN}.bit.bin to ${B} directory.
180 if soc_family == 'zynq':
181 src_bitbin_file = glob.glob(d.getVar('S') + (d.getVar('BIT_PATH') or '') + '/*.bit.bin')[0]
182 dst_bitbin_file = d.getVar('B') + '/' + pn + '.bit.bin'
183 shutil.move(src_bitbin_file, dst_bitbin_file)
184
185 if not os.path.isfile(pn + ".bit.bin"):
186 bb.fatal("Couldn't find %s file, Enable '-log trace' in BOOTGEN_FLAGS" \
187 "and check bootgen_log.txt" % (d.getVar('B') + '/' + pn + '.bit.bin'))
188}
189
190# If user inputs both dtsi and dts files then device-tree will generate dtbo
191# files for each dt file, Hence to package the firmware pick the right user dt
192# overlay file.
193python find_user_dts_overlay_file() {
194 import glob
195 dtbo_count = sum(1 for f in glob.iglob((d.getVar('S') + '/*.dtbo'),recursive=True) if os.path.isfile(f))
196 # Skip if input file is dtbo in SRC_URI
197 if not dtbo_count:
198 dts_count = get_dt_count(d, 'dts')
199 dtsi_count = get_dt_count(d, 'dtsi')
200 if dtsi_count == 1 and dts_count == 0:
201 dts_file =glob.glob(d.getVar('S')+ (d.getVar('DTSI_PATH') or '') + '/*.dtsi')[0]
202 elif dtsi_count >=0 and dts_count == 1:
203 dts_file = glob.glob(d.getVar('S')+ (d.getVar('DTSI_PATH') or '') + '/*.dts')[0]
204
205 d.setVar('USER_DTS_FILE', os.path.splitext(os.path.basename(dts_file))[0])
206}
207
208do_install[prefuncs] += "find_user_dts_overlay_file"
209
210do_install() {
211 install -d ${D}/${nonarch_base_libdir}/firmware/xilinx/${PN}/
212
213 # In case of dtbo as input, dtbo will be copied from directly from ${S}
214 # In case of dtsi as input, dtbo will be copied from directly from ${B}
215 if [ `ls ${S}/*.dtbo | wc -l` -eq 1 ]; then
216 install -Dm 0644 ${S}/*.dtbo ${D}/${nonarch_base_libdir}/firmware/xilinx/${PN}/
217 elif [ `ls ${S}/*.dtbo | wc -l` -gt 1 ]; then
218 bbfatal "Multiple DTBO found, use the right DTBO in SRC_URI from the following:\n$(basename -a ${S}/*.dtbo)"
219 elif [ -f ${B}/${USER_DTS_FILE}.dtbo ]; then
220 install -Dm 0644 ${B}/${USER_DTS_FILE}.dtbo ${D}/${nonarch_base_libdir}/firmware/xilinx/${PN}/${PN}.dtbo
221 else
222 bbfatal "A dtbo ending '.dtbo' expected but not found"
223 fi
224
225 if [ "${SOC_FAMILY}" == "versal" ]; then
226 # In case of dtbo as input, pdi will be copied from directly from ${S}
227 # without renaming the pdi name to ${PN}.pdi
228 if [ `ls ${S}/*.pdi | wc -l` -eq 1 ] && [ `ls ${S}/*.dtbo | wc -l` -eq 1 ]; then
229 install -Dm 0644 ${S}/*.pdi ${D}/${nonarch_base_libdir}/firmware/xilinx/${PN}/
230 elif [ `ls ${S}/*.pdi | wc -l` -gt 1 ]; then
231 bbfatal "Multiple PDI found, use the right PDI in SRC_URI from the following:\n$(basename -a ${S}/*.pdi)"
232 elif [ `ls ${S}/*.pdi | wc -l` -eq 1 ] && [ -f ${B}/${USER_DTS_FILE}.dtbo ]; then
233 install -Dm 0644 ${S}/*.pdi ${D}/${nonarch_base_libdir}/firmware/xilinx/${PN}/${PN}.pdi
234 else
235 bbfatal "A PDI file with '.pdi' expected but not found"
236 fi
237 else
238 # In case of dtbo as input, .bit or .bin will be copied from directly
239 # from ${S} without renaming the .bit/.bin name to ${PN}.bit/${PN}.bin
240 # if more than one .bit/.bin file is found then fail the task.
241 if [ `ls ${S}/*.bit | wc -l` -gt 1 ]; then
242 bbfatal "Multiple .bit found, use the right .bit in SRC_URI from the following:\n$(basename -a ${S}/*.bit)"
243 elif [ `ls ${S}/*.bin | wc -l` -gt 1 ]; then
244 bbfatal "Multiple .bin found, use the right .bin in SRC_URI from the following:\n$(basename -a ${S}/*.bin)"
245 elif [ `ls ${S}/*.bit | wc -l` -eq 1 ] && [ `ls ${S}/*.dtbo | wc -l` -eq 1 ]; then
246 install -Dm 0644 ${S}/*.bit ${D}/${nonarch_base_libdir}/firmware/xilinx/${PN}/
247 elif [ `ls ${S}/*.bin | wc -l` -eq 1 ] && [ `ls ${S}/*.dtbo | wc -l` -eq 1 ]; then
248 install -Dm 0644 ${S}/*.bin ${D}/${nonarch_base_libdir}/firmware/xilinx/${PN}/
249 elif [ -f ${B}/${PN}.bit.bin ] && [ -f ${B}/${USER_DTS_FILE}.dtbo ]; then
250 install -Dm 0644 ${B}/${PN}.bit.bin ${D}/${nonarch_base_libdir}/firmware/xilinx/${PN}/${PN}.bit.bin
251 else
252 bbfatal "A bitstream file with '.bit' or '.bin' expected but not found"
253 fi
254 fi
255
256 if ls ${S}/${XCL_PATH}/*.xclbin >/dev/null 2>&1; then
257 install -Dm 0644 ${S}/${XCL_PATH}/*.xclbin ${D}/${nonarch_base_libdir}/firmware/xilinx/${PN}/${PN}.xclbin
258 fi
259
260 if [ -f ${S}/${JSON_PATH}/shell.json ] || [ -f ${S}/${JSON_PATH}/accel.json ]; then
261 install -Dm 0644 ${S}/${JSON_PATH}/*.json ${D}/${nonarch_base_libdir}/firmware/xilinx/${PN}/
262 fi
263}
264
265do_deploy[noexec] = "1"
266
267FILES:${PN} += "${nonarch_base_libdir}/firmware/xilinx/${PN}"
diff --git a/meta-xilinx-core/classes/fpgamanager_custom.bbclass b/meta-xilinx-core/classes/fpgamanager_custom.bbclass
index e5255783..8c8997a1 100644
--- a/meta-xilinx-core/classes/fpgamanager_custom.bbclass
+++ b/meta-xilinx-core/classes/fpgamanager_custom.bbclass
@@ -1,177 +1,24 @@
1# This bbclass is inherited by flat, DFx Static and DFx RP firmware recipes. 1# This class inherits dfx_user_dts.bbclass for below use cases.
2# fpgamanager_custom.bbclass expects user to generate pl dtsi for flat, DFx Static 2# Zynq-7000 and ZynqMP: Full bitstream loading.
3# and DFx RP xsa outside of yocto. 3# ZynqMP: DFx Static and Partial bitstream loading.
4 4# Versal: DFx Static and Parial pdi loading.
5inherit devicetree 5# Versal: Full PDI loading.
6 6
7DEPENDS = "dtc-native bootgen-native" 7inherit dfx_user_dts
8 8
9# recipes that inherit from this class need to use an appropriate machine 9python fpgamanager_warn_msg () {
10# override for COMPATIBLE_MACHINE to build successfully; don't allow building 10 if not d.getVar("FPGAMANAGER_NO_WARN"):
11# for microblaze MACHINE 11 arch = d.getVar('SOC_FAMILY')
12COMPATIBLE_MACHINE ?= "^$" 12 pn = d.getVar('PN')
13COMPATIBLE_MACHINE:microblaze = "^$" 13 warn_msg = 'Users should start using dfx_user_dts bbclass for '
14 14 if arch == 'zynq':
15PACKAGE_ARCH = "${MACHINE_ARCH}" 15 warn_msg += 'Zynq-7000 Full bitstream loading use case.'
16 16 elif arch == 'zynqmp':
17PROVIDES = "" 17 warn_msg += 'ZynqMP Full or DFx Static or DFx Partial bitstream loading use case.'
18 18 elif arch == 'versal':
19do_fetch[cleandirs] = "${B}" 19 warn_msg += 'Versal DFx Static or DFx Partial or Full PDI loading use case.'
20 20
21DT_PADDING_SIZE = "0x1000" 21 bb.warn("Recipe %s has inherited fpgamanager_custom bbclass which will be deprecated in 2024.1 release. \n%s" % (pn, warn_msg))
22BOOTGEN_FLAGS ?= " -arch ${SOC_FAMILY} -w ${@bb.utils.contains('SOC_FAMILY','zynqmp','','-process_bitstream bin',d)}"
23
24S ?= "${WORKDIR}"
25FW_DIR ?= ""
26DTSI_PATH ?= ""
27DTBO_PATH ?= ""
28DT_FILES_PATH = "${S}/${DTSI_PATH}"
29
30python() {
31 soc_family = d.getVar("SOC_FAMILY")
32 if "git://" in d.getVar("SRC_URI") or "https://" in d.getVar("SRC_URI"):
33 d.setVar("S",'${WORKDIR}/git/'+d.getVar("FW_DIR"))
34 else:
35 dtsi_found = False
36 dtbo_found = False
37 bit_found = False
38 pdi_found = False
39
40 # Required Inputs
41 if '.dtsi' in d.getVar("SRC_URI"):
42 dtsi_found = True
43 d.setVar("DTSI_PATH",os.path.dirname([a for a in d.getVar('SRC_URI').split() if '.dtsi' in a][0].lstrip('file://')))
44
45 if '.dtbo' in d.getVar("SRC_URI"):
46 dtbo_found = True
47 d.setVar("DTBO_PATH",os.path.dirname([a for a in d.getVar('SRC_URI').split() if '.dtbo' in a][0].lstrip('file://')))
48
49 if '.bit' in d.getVar("SRC_URI") and soc_family != "versal":
50 bit_found = True
51 d.setVar("BIT_PATH",os.path.dirname([a for a in d.getVar('SRC_URI').split() if '.bit' in a][0].lstrip('file://')))
52
53 if '.pdi' in d.getVar("SRC_URI") and soc_family == "versal":
54 pdi_found = True
55 d.setVar("PDI_PATH",os.path.dirname([a for a in d.getVar('SRC_URI').split() if '.pdi' in a][0].lstrip('file://')))
56
57 # Check for valid combination of input files in SRC_URI
58 if dtsi_found or dtbo_found:
59 bb.debug(2, "dtsi or dtbo found in SRC_URI")
60 if bit_found or pdi_found:
61 bb.debug(2, "bitstream or pdi found in SRC_URI")
62 else:
63 raise bb.parse.SkipRecipe("Need one '.bit' or one '.pdi' file added to SRC_URI ")
64 else:
65 raise bb.parse.SkipRecipe("Need one '.dtsi' or one '.dtbo' file added to SRC_URI ")
66
67 # Optional input
68 if '.json' in d.getVar("SRC_URI"):
69 d.setVar("JSON_PATH",os.path.dirname([a for a in d.getVar('SRC_URI').split() if '.json' in a][0].lstrip('file://')))
70
71 if '.xclbin' in d.getVar("SRC_URI"):
72 d.setVar("XCL_PATH",os.path.dirname([a for a in d.getVar('SRC_URI').split() if '.xclbin' in a][0].lstrip('file://')))
73} 22}
74python do_configure() {
75 import glob, re, shutil
76 soc_family = d.getVar("SOC_FAMILY")
77
78 if bb.utils.contains('MACHINE_FEATURES', 'fpga-overlay', False, True, d):
79 bb.warn("Using fpga-manager.bbclass requires fpga-overlay MACHINE_FEATURE to be enabled")
80
81 # Renaming firmware-name using $PN as bitstream/PDI will be renamed using
82 # $PN when generating the bin/pdi file.
83 if '.dtsi' in d.getVar("SRC_URI"):
84 orig_dtsi = glob.glob(d.getVar('S')+ (d.getVar('DTSI_PATH') or '') + '/*.dtsi')[0]
85 new_dtsi = d.getVar('S') + '/pl.dtsi_firmwarename'
86 with open(new_dtsi, 'w') as newdtsi:
87 with open(orig_dtsi) as olddtsi:
88 for line in olddtsi:
89 if soc_family == 'versal':
90 newdtsi.write(re.sub('firmware-name.*\".*\"','firmware-name = \"'+d.getVar('PN')+'.pdi\"',line))
91 else:
92 newdtsi.write(re.sub('firmware-name.*\".*\"','firmware-name = \"'+d.getVar('PN')+'.bit.bin\"',line))
93 shutil.move(new_dtsi,orig_dtsi)
94}
95
96python devicetree_do_compile:append() {
97 import glob, subprocess, shutil
98 soc_family = d.getVar("SOC_FAMILY")
99
100 # Convert .bit to bit.bin format only if dtsi is input.
101 # In case of dtbo as input, bbclass doesn't know if firmware-name is .bit or
102 # .bit.bin format and corresponding file name. Hence we are not doing
103 # bit.bin conversion.
104 if soc_family != 'versal' and glob.glob(d.getVar('S') + '/*.dtsi'):
105 pn = d.getVar('PN')
106 biffile = pn + '.bif'
107
108 with open(biffile, 'w') as f:
109 f.write('all:\n{\n\t' + glob.glob(d.getVar('S')+(d.getVar('BIT_PATH') or '') + '/*.bit')[0] + '\n}')
110
111 bootgenargs = ["bootgen"] + (d.getVar("BOOTGEN_FLAGS") or "").split()
112 bootgenargs += ["-image", biffile, "-o", pn + ".bit.bin"]
113 subprocess.run(bootgenargs, check = True)
114
115 # In Zynq7k using both "-process_bitstream bin" and "-o" in bootgen flag,
116 # to convert bit file to bin format, "-o" option will not be effective
117 # and generated output file name is ${S}+${BIT_PATH}/<bit_file_name>.bit.bin
118 # file, Hence we need to rename this file from <bit_file_name>.bit.bin to
119 # ${PN}.bit.bin which matches the firmware name in dtbo and move
120 # ${PN}.bit.bin to ${B} directory.
121 if soc_family == 'zynq':
122 src_bitbin_file = glob.glob(d.getVar('S') + (d.getVar('BIT_PATH') or '') + '/*.bit.bin')[0]
123 dst_bitbin_file = d.getVar('B') + '/' + pn + '.bit.bin'
124 shutil.move(src_bitbin_file, dst_bitbin_file)
125
126 if not os.path.isfile(pn + ".bit.bin"):
127 bb.fatal("Couldn't find %s file, Enable '-log trace' in BOOTGEN_FLAGS" \
128 "and check bootgen_log.txt" % (d.getVar('B') + '/' + pn + '.bit.bin'))
129}
130
131do_install() {
132 install -d ${D}/${nonarch_base_libdir}/firmware/xilinx/${PN}/
133
134 # In case of dtbo as input, dtbo will be copied from directly from ${S}
135 # In case of dtsi as input, dtbo will be copied from directly from ${B}
136 if [ -f ${S}/*.dtbo ]; then
137 install -Dm 0644 ${S}/*.dtbo ${D}/${nonarch_base_libdir}/firmware/xilinx/${PN}/
138 elif [ -f ${B}/*.dtbo ]; then
139 install -Dm 0644 ${B}/*.dtbo ${D}/${nonarch_base_libdir}/firmware/xilinx/${PN}/${PN}.dtbo
140 else
141 bbfatal "A dtbo ending '.dtbo' expected but not found"
142 fi
143
144 if [ "${SOC_FAMILY}" == "versal" ]; then
145 # In case of dtbo as input, pdi will be copied from directly from ${S}
146 # without renaming the pdi name to ${PN}.pdi
147 if [ -f ${S}/*.pdi ] && [ -f ${S}/*.dtbo ]; then
148 install -Dm 0644 ${S}/*.pdi ${D}/${nonarch_base_libdir}/firmware/xilinx/${PN}/
149 elif [ -f ${S}/*.pdi ] && [ -f ${B}/*.dtbo ]; then
150 install -Dm 0644 ${S}/*.pdi ${D}/${nonarch_base_libdir}/firmware/xilinx/${PN}/${PN}.pdi
151 else
152 bbfatal "A PDI file with '.pdi' expected but not found"
153 fi
154 else
155 # In case of dtbo as input, .bit or .bit.in will be copied from directly
156 # from ${S} without renaming the .bit name to ${PN}.bit.bin
157 if [ -f ${S}/*.bit* ] && [ -f ${S}/*.dtbo ]; then
158 install -Dm 0644 ${S}/*.bit* ${D}/${nonarch_base_libdir}/firmware/xilinx/${PN}/
159 elif [ -f ${B}/${PN}.bit.bin ] && [ -f ${B}/*.dtbo ]; then
160 install -Dm 0644 ${B}/${PN}.bit.bin ${D}/${nonarch_base_libdir}/firmware/xilinx/${PN}/${PN}.bit.bin
161 else
162 bbfatal "A bitstream file with '.bit' or '.bit.bin' expected but not found"
163 fi
164 fi
165
166 if ls ${S}/${XCL_PATH}/*.xclbin >/dev/null 2>&1; then
167 install -Dm 0644 ${S}/${XCL_PATH}/*.xclbin ${D}/${nonarch_base_libdir}/firmware/xilinx/${PN}/${PN}.xclbin
168 fi
169
170 if [ -f ${S}/${JSON_PATH}/shell.json ] || [ -f ${S}/${JSON_PATH}/accel.json ]; then
171 install -Dm 0644 ${S}/${JSON_PATH}/*.json ${D}/${nonarch_base_libdir}/firmware/xilinx/${PN}/
172 fi
173}
174
175do_deploy[noexec] = "1"
176 23
177FILES:${PN} += "${nonarch_base_libdir}/firmware/xilinx/${PN}" 24do_install[postfuncs] += "fpgamanager_warn_msg" \ No newline at end of file
diff --git a/meta-xilinx-core/conf/layer.conf b/meta-xilinx-core/conf/layer.conf
index 9745bb4d..afbf71c3 100644
--- a/meta-xilinx-core/conf/layer.conf
+++ b/meta-xilinx-core/conf/layer.conf
@@ -42,27 +42,26 @@ SIGGEN_EXCLUDE_SAFE_RECIPE_DEPS += " \
42 *->xserver-xorg \ 42 *->xserver-xorg \
43" 43"
44 44
45XILINX_RELEASE_VERSION ??= "v2023.1" 45XILINX_RELEASE_VERSION ??= "v2023.2"
46 46
47BUILDCFG_VARS:append = " SOC_VARIANT XILINX_RELEASE_VERSION" 47BUILDCFG_VARS:append = " SOC_VARIANT XILINX_RELEASE_VERSION"
48 48
49XILINX_QEMU_VERSION[v2022.1] = "v7.1.0-xilinx-v2022.1%" 49XILINX_QEMU_VERSION[v2022.1] = "v7.1.0-xilinx-v2022.1%"
50XILINX_QEMU_VERSION[v2022.2] = "v7.1.0-xilinx-v2022.2%" 50XILINX_QEMU_VERSION[v2022.2] = "v7.1.0-xilinx-v2022.2%"
51XILINX_QEMU_VERSION[v2023.1] = "v7.1.0-xilinx-v2023.1%" 51XILINX_QEMU_VERSION[v2023.1] = "v7.1.0-xilinx-v2023.1%"
52XILINX_QEMU_VERSION[v2023.2] = "v7.1.0-xilinx-v2023.2%"
52PREFERRED_VERSION_qemu-xilinx ?= "${@d.getVarFlag('XILINX_QEMU_VERSION', d.getVar('XILINX_RELEASE_VERSION')) or 'undefined'}" 53PREFERRED_VERSION_qemu-xilinx ?= "${@d.getVarFlag('XILINX_QEMU_VERSION', d.getVar('XILINX_RELEASE_VERSION')) or 'undefined'}"
53PREFERRED_VERSION_qemu-xilinx-native ?= "${@d.getVarFlag('XILINX_QEMU_VERSION', d.getVar('XILINX_RELEASE_VERSION')) or 'undefined'}" 54PREFERRED_VERSION_qemu-xilinx-native ?= "${@d.getVarFlag('XILINX_QEMU_VERSION', d.getVar('XILINX_RELEASE_VERSION')) or 'undefined'}"
54PREFERRED_VERSION_qemu-xilinx-system-native ?= "${@d.getVarFlag('XILINX_QEMU_VERSION', d.getVar('XILINX_RELEASE_VERSION')) or 'undefined'}" 55PREFERRED_VERSION_qemu-xilinx-system-native ?= "${@d.getVarFlag('XILINX_QEMU_VERSION', d.getVar('XILINX_RELEASE_VERSION')) or 'undefined'}"
55PREFERRED_VERSION_qemu-devicetrees ?= "xilinx-${XILINX_RELEASE_VERSION}%" 56PREFERRED_VERSION_qemu-devicetrees ?= "xilinx-${XILINX_RELEASE_VERSION}%"
56PREFERRED_PROVIDER_qemu ?= "qemu-xilinx" 57PREFERRED_PROVIDER_qemu ?= "qemu-xilinx"
57 58
58XILINX_ATF_VERSION[v2022.1] = "2.6-xilinx-v2022.1%"
59XILINX_ATF_VERSION[v2022.2] = "2.6-xilinx-v2022.2%"
60XILINX_ATF_VERSION[v2023.1] = "2.8-xilinx-v2023.1%" 59XILINX_ATF_VERSION[v2023.1] = "2.8-xilinx-v2023.1%"
60XILINX_ATF_VERSION[v2023.2] = "2.8-xilinx-v2023.2%"
61PREFERRED_VERSION_arm-trusted-firmware ?= "${@d.getVarFlag('XILINX_ATF_VERSION', d.getVar('XILINX_RELEASE_VERSION')) or 'undefined'}" 61PREFERRED_VERSION_arm-trusted-firmware ?= "${@d.getVarFlag('XILINX_ATF_VERSION', d.getVar('XILINX_RELEASE_VERSION')) or 'undefined'}"
62 62
63XILINX_UBOOT_VERSION[v2022.1] = "v2021.01-xilinx-v2022.1%"
64XILINX_UBOOT_VERSION[v2022.2] = "v2021.01-xilinx-v2022.2%"
65XILINX_UBOOT_VERSION[v2023.1] = "v2023.01-xilinx-v2023.1%" 63XILINX_UBOOT_VERSION[v2023.1] = "v2023.01-xilinx-v2023.1%"
64XILINX_UBOOT_VERSION[v2023.2] = "v2023.01-xilinx-v2023.2%"
66 65
67PREFERRED_VERSION_u-boot-xlnx ?= "${@d.getVarFlag('XILINX_UBOOT_VERSION', d.getVar('XILINX_RELEASE_VERSION')) or 'undefined'}" 66PREFERRED_VERSION_u-boot-xlnx ?= "${@d.getVarFlag('XILINX_UBOOT_VERSION', d.getVar('XILINX_RELEASE_VERSION')) or 'undefined'}"
68PREFERRED_VERSION_u-boot-tools-xlnx ?= "${@d.getVarFlag('XILINX_UBOOT_VERSION', d.getVar('XILINX_RELEASE_VERSION')) or 'undefined'}" 67PREFERRED_VERSION_u-boot-tools-xlnx ?= "${@d.getVarFlag('XILINX_UBOOT_VERSION', d.getVar('XILINX_RELEASE_VERSION')) or 'undefined'}"
@@ -70,6 +69,7 @@ PREFERRED_VERSION_u-boot-tools-xlnx ?= "${@d.getVarFlag('XILINX_UBOOT_VERSION',
70XILINX_LINUX_VERSION[v2022.1] = "5.15.19-xilinx-v2022.1%" 69XILINX_LINUX_VERSION[v2022.1] = "5.15.19-xilinx-v2022.1%"
71XILINX_LINUX_VERSION[v2022.2] = "5.15.36-xilinx-v2022.2%" 70XILINX_LINUX_VERSION[v2022.2] = "5.15.36-xilinx-v2022.2%"
72XILINX_LINUX_VERSION[v2023.1] = "6.1.30-xilinx-v2023.1%" 71XILINX_LINUX_VERSION[v2023.1] = "6.1.30-xilinx-v2023.1%"
72XILINX_LINUX_VERSION[v2023.2] = "6.1.30-xilinx-v2023.2%"
73PREFERRED_VERSION_linux-xlnx ?= "${@d.getVarFlag('XILINX_LINUX_VERSION', d.getVar('XILINX_RELEASE_VERSION')) or 'undefined'}" 73PREFERRED_VERSION_linux-xlnx ?= "${@d.getVarFlag('XILINX_LINUX_VERSION', d.getVar('XILINX_RELEASE_VERSION')) or 'undefined'}"
74 74
75# Add support to eSDK for gen-machine-conf if it exists 75# Add support to eSDK for gen-machine-conf if it exists
diff --git a/meta-xilinx-core/conf/machine/README b/meta-xilinx-core/conf/machine/README
index 5361dc81..de8cf58d 100644
--- a/meta-xilinx-core/conf/machine/README
+++ b/meta-xilinx-core/conf/machine/README
@@ -142,20 +142,83 @@ you should not use :<machine> override values for the same reason. Note,
142not every machine file will have all of these variables, only the ones 142not every machine file will have all of these variables, only the ones
143you need to override should be set. 143you need to override should be set.
144 144
145Variables set before required inclusion file:
146Variables that changes based on hw design or board specific requirement must be
147set before required inclusion file else pre-expansion value defined in generic
148machine conf will be set. This way user can also override these variables from
149local.conf
150
145System wide setting: 151System wide setting:
146TUNE_FEATURES:tune-<tune> - Specific tune features 152TUNE_FEATURES:tune-<tune> - Specific tune features
147 153
148external-hdf recipe from meta-xilinx-tools: 154external-hdf recipe from meta-xilinx-tools:
149HDF_MACHINE - Used by the recipe to find the correct XSA 155HDF_MACHINE - Machine to load from reference defign xsa using hdf-examples recipe
150HDF_EXT - only xsa is supported, legacy variable 156HDF_EXT - Only ".xsa" externsion is supported, legacy variable.
151HDF_BASE - protocol if not using the default external-hdf repository 157HDF_BASE - Download protocol (file://, git://, http:// or https://) protocol if
152HDF_PATH - path to the repository or XSA file 158 not using the default external-hdf repository.
159HDF_PATH - Path to the repository or XSA file
160
161fs-boot recipe from meta-xilinx-tools:
162YAML_SERIAL_CONSOLE_STDIN:pn-fs-boot - YAML based uart stdin configuration for
163MicroBlaze. Example: axi_uartlite_0 or axi_uart16550_0 etc,.
164YAML_SERIAL_CONSOLE_STDOUT:pn-fs-boot - YAML based uart stdout configuration for
165MicroBlaze. Example: axi_uartlite_0 or axi_uart16550_0 etc,.
166YAML_MAIN_MEMORY_CONFIG:pn-fs-boot - YAML based DDR4 or MIG configuration for
167MicroBlaze. Example: DDR4_0 or MIG_7SERIES_0 etc,.
168YAML_FLASH_MEMORY_CONFIG:pn-fs-boot - YAML based flash configuration for
169MicroBlaze. Example: axi_emc_0 or axi_quad_spi_0 etc,.
170XSCTH_PROC:pn-fs-boot - Processor IP used while configuring embeddedsw compoments.
171Example: microblaze_0 or microblaze_1 etc,.
172
173fsbl-firmware recipe from meta-xilinx-tools:
174YAML_SERIAL_CONSOLE_STDIN:pn-fsbl-firmware - YAML based FSBL uart stdin configuration
175for Zynq-7000 and ZynqMP devices.
176YAML_SERIAL_CONSOLE_STDOUT:pn-fsbl-firmware - YAML based FSBL uart stdout configuration
177for Zynq-7000 and ZynqMP devices.
178
179pmu-firmware recipe from meta-xilinx-tools:
180YAML_SERIAL_CONSOLE_STDIN:pn-pmu-firmware - YAML based PMUFW uart stdin configuration
181for ZynqMP devices.
182YAML_SERIAL_CONSOLE_STDOUT:pn-pmu-firmware - YAML based PMUFW uart stdout configuration
183for ZynqMP devices.
184
185plm-firmware recipe from meta-xilinx-tools:
186YAML_SERIAL_CONSOLE_STDIN:pn-plm-firmware - YAML based PLM uart stdin configuration
187for Versal devices.
188YAML_SERIAL_CONSOLE_STDOUT:pn-fplmsbl-firmware - YAML based PLM uart stdout
189configuration for Versal devices.
153 190
154device-tree recipe from meta-xilinx-tools: 191device-tree recipe from meta-xilinx-tools:
155YAML_DT_BOARD_FLAGS - flags used for dtgen 192YAML_CONSOLE_DEVICE_CONFIG:pn-device-tree - YAML based uart console configuration
193for all device families. Example: axi_uartlite_0 or psu_uart_0 etc,.
194YAML_MAIN_MEMORY_CONFIG:pn-device-tree - YAML based memory configuration for all
195device families. Example: DDR4_0 or PS7_DDR_0 or PSU_DDR_0 etc,.
196XSCTH_PROC:pn-device-tree - Processor IP used while configuring device-tree
197compoments. Example: microblaze_0 or microblaze_1 etc,.
198YAML_DT_BOARD_FLAGS:pn-device-tree - YAML based configuration for setting eval
199board specific dtsi files available in DTG repo.
200
201arm-trusted-firmware recipe from meta-xilinx-core:
202ATF_CONSOLE - Uart console configuration for all aarch64 device families.
203Example: pl011 or cadence or cadence1 etc,.
204TFA_BL33_LOAD - BL33 preloadded base address to EXTRA_OEMAKE for aarch64.
156 205
157u-boot-xlnx recipe from meta-xilinx-core: 206u-boot-xlnx recipe from meta-xilinx-core:
158UBOOT_MACHINE - Name of the defconfig to use 207UBOOT_MACHINE - Name of the defconfig to use
159HAS_PLATFORM_INIT - List of defconfig files available for u-boot 208HAS_PLATFORM_INIT - List of defconfig files available for u-boot only for SPL boot.
209
210u-boot-xlnx-scr recipe from meta-xilinx-core:
211DDR_BASEADDR - Base address for DDR used for loading the images from u-boot env.
212SKIP_APPEND_BASEADDR - Skip appending ${DDR_BASEADDR} for image offsets.
213
214Varibable set after required inclusion file:
215Varibables that does not intend to change must be set before required inclusion
216file.
217
218external-hdf recipe from meta-xilinx-tools:
219HDF_MACHINE - Used by the recipe to find the correct XSA
220HDF_EXT - only xsa is supported, legacy variable
221HDF_BASE - protocol if not using the default external-hdf repository
222HDF_PATH - path to the repository or XSA file
160 223
161...and more... 224...and more...
diff --git a/meta-xilinx-core/conf/machine/include/machine-xilinx-default.inc b/meta-xilinx-core/conf/machine/include/machine-xilinx-default.inc
index 4a4384a1..e99b1f0e 100644
--- a/meta-xilinx-core/conf/machine/include/machine-xilinx-default.inc
+++ b/meta-xilinx-core/conf/machine/include/machine-xilinx-default.inc
@@ -64,33 +64,38 @@ FIT_CONF_DEFAULT_DTB ?= "${@os.path.basename(d.getVar('CONFIG_DTFILE')).replace(
64# Define to avoid parsse errors below if undefind elsewhere 64# Define to avoid parsse errors below if undefind elsewhere
65INITRAMFS_IMAGE ??= "" 65INITRAMFS_IMAGE ??= ""
66 66
67# IMAGE_BOOT_FILES is a whitespace-separated list of entries specifying files to be installed into the boot partition
68# entries can change the installed filename by specifying the destination name after a semicolon (e.g. u-boot.img;uboot)
69# make sure to use the installed filename when scanning IMAGE_BOOT_FILES
70IMAGE_BOOT_FILES_INSTALLED = "${@' '.join([x.split(';')[-1] for x in d.getVar('IMAGE_BOOT_FILES').split()])}"
71
67# Automatically add WKS_FILE_DEPENDS based on the configuration 72# Automatically add WKS_FILE_DEPENDS based on the configuration
68# Initial value from oe-core/meta/classes-recipe/image_types_wic.bbclass 73# Initial value from oe-core/meta/classes-recipe/image_types_wic.bbclass
69WKS_FILE_DEPENDS ?= "${WKS_FILE_DEPENDS_DEFAULT} ${WKS_FILE_DEPENDS_BOOTLOADERS}" 74WKS_FILE_DEPENDS ?= "${WKS_FILE_DEPENDS_DEFAULT} ${WKS_FILE_DEPENDS_BOOTLOADERS}"
70WKS_FILE_DEPENDS .= "${@bb.utils.contains('IMAGE_BOOT_FILES', 'boot.bin', ' virtual/boot-bin', '', d)}" 75WKS_FILE_DEPENDS .= "${@bb.utils.contains('IMAGE_BOOT_FILES_INSTALLED', 'boot.bin', ' virtual/boot-bin', '', d)}"
71WKS_FILE_DEPENDS .= "${@bb.utils.contains('IMAGE_BOOT_FILES', 'system.dtb', ' virtual/dtb', '', d)}" 76WKS_FILE_DEPENDS .= "${@bb.utils.contains('IMAGE_BOOT_FILES_INSTALLED', 'system.dtb', ' virtual/dtb', '', d)}"
72WKS_FILE_DEPENDS .= "${@bb.utils.contains('IMAGE_BOOT_FILES', 'boot.scr', ' u-boot-xlnx-scr', '', d)}" 77WKS_FILE_DEPENDS .= "${@bb.utils.contains('IMAGE_BOOT_FILES_INSTALLED', 'boot.scr', ' u-boot-xlnx-scr', '', d)}"
73WKS_FILE_DEPENDS .= "${@bb.utils.contains('IMAGE_BOOT_FILES', 'uEnv.txt', ' u-boot-xlnx-uenv', '', d)}" 78WKS_FILE_DEPENDS .= "${@bb.utils.contains('IMAGE_BOOT_FILES_INSTALLED', 'uEnv.txt', ' u-boot-xlnx-uenv', '', d)}"
74WKS_FILE_DEPENDS .= "${@bb.utils.contains('IMAGE_BOOT_FILES', 'atf-uboot.ub', ' arm-trusted-firmware', '', d)}" 79WKS_FILE_DEPENDS .= "${@bb.utils.contains('IMAGE_BOOT_FILES_INSTALLED', 'atf-uboot.ub', ' arm-trusted-firmware', '', d)}"
75WKS_FILE_DEPENDS .= "${@bb.utils.contains('IMAGE_BOOT_FILES', 'Image', ' virtual/kernel', '', d)}" 80WKS_FILE_DEPENDS .= "${@bb.utils.contains('IMAGE_BOOT_FILES_INSTALLED', 'Image', ' virtual/kernel', '', d)}"
76WKS_FILE_DEPENDS .= "${@bb.utils.contains('IMAGE_BOOT_FILES', 'uImage', ' virtual/kernel', '', d)}" 81WKS_FILE_DEPENDS .= "${@bb.utils.contains('IMAGE_BOOT_FILES_INSTALLED', 'uImage', ' virtual/kernel', '', d)}"
77WKS_FILE_DEPENDS .= "${@bb.utils.contains('IMAGE_BOOT_FILES', 'zImage', ' virtual/kernel', '', d)}" 82WKS_FILE_DEPENDS .= "${@bb.utils.contains('IMAGE_BOOT_FILES_INSTALLED', 'zImage', ' virtual/kernel', '', d)}"
78WKS_FILE_DEPENDS .= "${@bb.utils.contains('IMAGE_BOOT_FILES', 'u-boot.bin', ' virtual/bootloader', '', d)}" 83WKS_FILE_DEPENDS .= "${@bb.utils.contains('IMAGE_BOOT_FILES_INSTALLED', 'u-boot.bin', ' virtual/bootloader', '', d)}"
79WKS_FILE_DEPENDS .= "${@bb.utils.contains('IMAGE_BOOT_FILES', 'u-boot.elf', ' virtual/bootloader', '', d)}" 84WKS_FILE_DEPENDS .= "${@bb.utils.contains('IMAGE_BOOT_FILES_INSTALLED', 'u-boot.elf', ' virtual/bootloader', '', d)}"
80WKS_FILE_DEPENDS .= "${@bb.utils.contains('IMAGE_BOOT_FILES', '${INITRAMFS_IMAGE}-${MACHINE}.cpio.gz.u-boot', ' ${INITRAMFS_IMAGE}', '', d)}" 85WKS_FILE_DEPENDS .= "${@bb.utils.contains('IMAGE_BOOT_FILES_INSTALLED', '${INITRAMFS_IMAGE}-${MACHINE}.cpio.gz.u-boot', ' ${INITRAMFS_IMAGE}', '', d)}"
81 86
82# Automatically add IMAGE_BOOT_FILES to /boot via packages 87# Automatically add IMAGE_BOOT_FILES to /boot via packages
83MACHINE_ESSENTIAL_EXTRA_RDEPENDS .= "${@bb.utils.contains('IMAGE_BOOT_FILES', 'boot.bin', ' ${PREFERRED_PROVIDER_virtual/boot-bin}', '', d)}" 88MACHINE_ESSENTIAL_EXTRA_RDEPENDS .= "${@bb.utils.contains('IMAGE_BOOT_FILES_INSTALLED', 'boot.bin', ' ${PREFERRED_PROVIDER_virtual/boot-bin}', '', d)}"
84MACHINE_ESSENTIAL_EXTRA_RDEPENDS .= "${@bb.utils.contains('IMAGE_BOOT_FILES', 'system.dtb', ' ${PREFERRED_PROVIDER_virtual/dtb}', '', d)}" 89MACHINE_ESSENTIAL_EXTRA_RDEPENDS .= "${@bb.utils.contains('IMAGE_BOOT_FILES_INSTALLED', 'system.dtb', ' ${PREFERRED_PROVIDER_virtual/dtb}', '', d)}"
85MACHINE_ESSENTIAL_EXTRA_RDEPENDS .= "${@bb.utils.contains('IMAGE_BOOT_FILES', 'boot.scr', ' u-boot-xlnx-scr', '', d)}" 90MACHINE_ESSENTIAL_EXTRA_RDEPENDS .= "${@bb.utils.contains('IMAGE_BOOT_FILES_INSTALLED', 'boot.scr', ' u-boot-xlnx-scr', '', d)}"
86MACHINE_ESSENTIAL_EXTRA_RDEPENDS .= "${@bb.utils.contains('IMAGE_BOOT_FILES', 'uEnv.txt', ' u-boot-xlnx-uenv', '', d)}" 91MACHINE_ESSENTIAL_EXTRA_RDEPENDS .= "${@bb.utils.contains('IMAGE_BOOT_FILES_INSTALLED', 'uEnv.txt', ' u-boot-xlnx-uenv', '', d)}"
87MACHINE_ESSENTIAL_EXTRA_RDEPENDS .= "${@bb.utils.contains('IMAGE_BOOT_FILES', 'atf-uboot.ub', ' arm-trusted-firmware', '', d)}" 92MACHINE_ESSENTIAL_EXTRA_RDEPENDS .= "${@bb.utils.contains('IMAGE_BOOT_FILES_INSTALLED', 'atf-uboot.ub', ' arm-trusted-firmware', '', d)}"
88MACHINE_ESSENTIAL_EXTRA_RDEPENDS .= "${@bb.utils.contains('IMAGE_BOOT_FILES', 'u-boot.bin', ' ${PREFERRED_PROVIDER_virtual/bootloader}-bin', '', d)}" 93MACHINE_ESSENTIAL_EXTRA_RDEPENDS .= "${@bb.utils.contains('IMAGE_BOOT_FILES_INSTALLED', 'u-boot.bin', ' ${PREFERRED_PROVIDER_virtual/bootloader}-bin', '', d)}"
89MACHINE_ESSENTIAL_EXTRA_RDEPENDS .= "${@bb.utils.contains('IMAGE_BOOT_FILES', 'u-boot.elf', ' ${PREFERRED_PROVIDER_virtual/bootloader}-elf', '', d)}" 94MACHINE_ESSENTIAL_EXTRA_RDEPENDS .= "${@bb.utils.contains('IMAGE_BOOT_FILES_INSTALLED', 'u-boot.elf', ' ${PREFERRED_PROVIDER_virtual/bootloader}-elf', '', d)}"
90MACHINE_ESSENTIAL_EXTRA_RDEPENDS .= "${@bb.utils.contains('IMAGE_BOOT_FILES', 'Image', ' kernel-image-image', '', d)}" 95MACHINE_ESSENTIAL_EXTRA_RDEPENDS .= "${@bb.utils.contains('IMAGE_BOOT_FILES_INSTALLED', 'Image', ' kernel-image-image', '', d)}"
91MACHINE_ESSENTIAL_EXTRA_RDEPENDS .= "${@bb.utils.contains('IMAGE_BOOT_FILES', 'uImage', ' kernel-image-uimage', '', d)}" 96MACHINE_ESSENTIAL_EXTRA_RDEPENDS .= "${@bb.utils.contains('IMAGE_BOOT_FILES_INSTALLED', 'uImage', ' kernel-image-uimage', '', d)}"
92MACHINE_ESSENTIAL_EXTRA_RDEPENDS .= "${@bb.utils.contains('IMAGE_BOOT_FILES', 'zImage', ' kernel-image-zimage', '', d)}" 97MACHINE_ESSENTIAL_EXTRA_RDEPENDS .= "${@bb.utils.contains('IMAGE_BOOT_FILES_INSTALLED', 'zImage', ' kernel-image-zimage', '', d)}"
93MACHINE_ESSENTIAL_EXTRA_RDEPENDS .= "${@bb.utils.contains('IMAGE_BOOT_FILES', '${INITRAMFS_IMAGE}-${MACHINE}.cpio.gz.u-boot', ' initramdisk-${INITRAMFS_IMAGE}', '', d)}" 98MACHINE_ESSENTIAL_EXTRA_RDEPENDS .= "${@bb.utils.contains('IMAGE_BOOT_FILES_INSTALLED', '${INITRAMFS_IMAGE}-${MACHINE}.cpio.gz.u-boot', ' initramdisk-${INITRAMFS_IMAGE}', '', d)}"
94 99
95# Default SD card wks file, split /boot and / 100# Default SD card wks file, split /boot and /
96WKS_FILES ?= "xilinx-default-sd.wks" 101WKS_FILES ?= "xilinx-default-sd.wks"
@@ -128,3 +133,6 @@ def get_default_image_boot_files(d):
128XSERVER_EXT ?= "" 133XSERVER_EXT ?= ""
129 134
130FPGA_MNGR_RECONFIG_ENABLE ?= "1" 135FPGA_MNGR_RECONFIG_ENABLE ?= "1"
136
137# This variable is supported only with SysVinit.
138SERIAL_CONSOLES_CHECK = "${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', '${SERIAL_CONSOLES}', '', d)}"
diff --git a/meta-xilinx-core/conf/machine/microblaze-generic.conf b/meta-xilinx-core/conf/machine/microblaze-generic.conf
index 9916a4ca..5bf87344 100644
--- a/meta-xilinx-core/conf/machine/microblaze-generic.conf
+++ b/meta-xilinx-core/conf/machine/microblaze-generic.conf
@@ -2,23 +2,36 @@
2#@NAME: microblaze-generic 2#@NAME: microblaze-generic
3#@DESCRIPTION: Machine configuration for the microblaze-generic devices 3#@DESCRIPTION: Machine configuration for the microblaze-generic devices
4 4
5# Deprecated board config
6USE_BOARD = "${@"conf/machine/include/xilinx-board-pre.inc" if d.getVar("BOARD") or d.getVar("BOARD_VARIANT") else ""}"
7require ${USE_BOARD}
8unset USE_BOARD
9
5#### Preamble 10#### Preamble
6MACHINEOVERRIDES =. "${@['', 'microblaze-generic:']['microblaze-generic' != '${MACHINE}']}" 11MACHINEOVERRIDES =. "${@['', 'microblaze-generic:']['microblaze-generic' != '${MACHINE}']}"
7#### Regular settings follow 12#### Regular settings follow
8 13
9# Set the default for a modern full feature microblaze... 14# Set the default for a modern full feature microblaze...
10TUNE_FEATURES:tune-microblaze ?= "microblaze v11.0 barrel-shift pattern-compare reorder divide-hard multiply-high" 15TUNE_FEATURES:tune-microblaze ?= "microblaze v11.0 pattern-compare barrel-shift divide-hard multiply-high fpu-hard reorder"
11DEFAULTTUNE ?= "microblaze" 16DEFAULTTUNE ?= "microblaze"
12 17
13# Variables that changes based on hw design or board specific requirement must be 18# Variables that changes based on hw design or board specific requirement must be
14# defined before calling the required inclusion file else pre-expansion value 19# defined before calling the required inclusion file else pre-expansion value
15# defined in local.conf without machine override will not be reflected. 20# defined in local.conf without machine override will not be reflected.
16 21
22# Yocto Microblaze device-tree variables
23YAML_CONSOLE_DEVICE_CONFIG:pn-device-tree ?= "axi_uartlite_0"
24YAML_MAIN_MEMORY_CONFIG:pn-device-tree ?= "DDR4_0"
25DT_PADDING_SIZE:pn-device-tree ?= "0x1000"
26DTC_FLAGS:pn-device-tree ?= ""
27XSCTH_PROC:pn-device-tree ?= "microblaze_0"
28YAML_DT_BOARD_FLAGS ?= "{BOARD kcu105}"
29
17# Yocto Microblaze FS-Boot variables 30# Yocto Microblaze FS-Boot variables
18YAML_SERIAL_CONSOLE_STDIN:pn-fs-boot ?= "axi_uartlite_0" 31YAML_SERIAL_CONSOLE_STDIN:pn-fs-boot ?= "axi_uartlite_0"
19YAML_SERIAL_CONSOLE_STDOUT:pn-fs-boot ?= "axi_uartlite_0" 32YAML_SERIAL_CONSOLE_STDOUT:pn-fs-boot ?= "axi_uartlite_0"
20YAML_MAIN_MEMORY_CONFIG:pn-fs-boot ?= "MIG_7SERIES_0" 33YAML_MAIN_MEMORY_CONFIG:pn-fs-boot ?= "DDR4_0"
21YAML_FLASH_MEMORY_CONFIG:pn-fs-boot ?= "axi_emc_0" 34YAML_FLASH_MEMORY_CONFIG:pn-fs-boot ?= "axi_quad_spi_0"
22XSCTH_PROC:pn-fs-boot ?= "microblaze_0" 35XSCTH_PROC:pn-fs-boot ?= "microblaze_0"
23 36
24# Yocto Microblaze u-boot-xlnx variables 37# Yocto Microblaze u-boot-xlnx variables
@@ -26,14 +39,6 @@ UBOOT_MACHINE ?= "microblaze-generic_defconfig"
26UBOOT_INITIAL_ENV = "" 39UBOOT_INITIAL_ENV = ""
27BOOTMODE ?= "generic.root" 40BOOTMODE ?= "generic.root"
28 41
29# Yocto device-tree variables
30YAML_CONSOLE_DEVICE_CONFIG:pn-device-tree ?= "axi_uartlite_0"
31YAML_MAIN_MEMORY_CONFIG:pn-device-tree ?= "MIG_7SERIES_0"
32DT_PADDING_SIZE:pn-device-tree ?= "0x1000"
33DTC_FLAGS:pn-device-tree ?= ""
34XSCTH_PROC:pn-device-tree ?= "microblaze_0"
35YAML_DT_BOARD_FLAGS ?= "{BOARD kc705-full}"
36
37# Yocto Microblaze KERNEL Variables 42# Yocto Microblaze KERNEL Variables
38UBOOT_ENTRYPOINT ?= "0x80000000" 43UBOOT_ENTRYPOINT ?= "0x80000000"
39UBOOT_LOADADDRESS ?= "0x80000000" 44UBOOT_LOADADDRESS ?= "0x80000000"
@@ -41,7 +46,6 @@ KERNEL_EXTRA_ARGS += "UIMAGE_LOADADDR=${UBOOT_ENTRYPOINT}"
41 46
42# Microblaze Serial Console settings 47# Microblaze Serial Console settings
43SERIAL_CONSOLES ?= "115200;ttyUL0" 48SERIAL_CONSOLES ?= "115200;ttyUL0"
44SERIAL_CONSOLES_CHECK = "${SERIAL_CONSOLES}"
45YAML_SERIAL_CONSOLE_BAUDRATE ?= "115200" 49YAML_SERIAL_CONSOLE_BAUDRATE ?= "115200"
46 50
47require conf/machine/include/soc-tune-include.inc 51require conf/machine/include/soc-tune-include.inc
@@ -56,21 +60,21 @@ MB_MACHINE_ARCH = "${@[d.getVar('TUNE_PKGARCH'), d.getVar('TUNE_PKGARCH') + '-ge
56 60
57MACHINE_ARCH = "${@['${MB_MACHINE_ARCH}', '${DEF_MACHINE_ARCH}']['microblaze-generic' != "${MACHINE}"]}" 61MACHINE_ARCH = "${@['${MB_MACHINE_ARCH}', '${DEF_MACHINE_ARCH}']['microblaze-generic' != "${MACHINE}"]}"
58 62
59# microblaze-generic.conf uses kc705-microblazeel xsa as reference input. 63# microblaze-generic.conf uses kcu105-microblazeel xsa as reference input.
60# User can override with custom xsa using HDF_BASE and HDF_PATH variables from 64# User can override with custom xsa using HDF_BASE and HDF_PATH variables from
61# local.conf. 65# local.conf.
62HDF_MACHINE = "kc705-microblazeel" 66HDF_MACHINE = "kcu105-microblazeel"
63 67
64MACHINE_FEATURES = "" 68MACHINE_FEATURES = ""
65 69
66KERNEL_IMAGETYPE ?= "linux.bin.ub" 70KERNEL_IMAGETYPE ?= "linux.bin.ub"
67KERNEL_IMAGETYPES = "" 71KERNEL_IMAGETYPES = ""
68 72
69MACHINE_ESSENTIAL_EXTRA_RDEPENDS += "device-tree" 73MACHINE_ESSENTIAL_EXTRA_RDEPENDS += "${PREFERRED_PROVIDER_virtual/dtb}"
70 74
71IMAGE_BOOT_FILES += " \ 75IMAGE_BOOT_FILES += " \
72 ${@bb.utils.contains('PREFERRED_PROVIDER_virtual/dtb', 'device-tree', 'system.dtb', '', d)} \ 76 ${@bb.utils.contains('PREFERRED_PROVIDER_virtual/dtb', 'device-tree', 'system.dtb', '', d)} \
73 " 77 "
74 78
75EXTRA_IMAGEDEPENDS += " \ 79EXTRA_IMAGEDEPENDS += " \
76 libyaml-native \ 80 libyaml-native \
@@ -93,3 +97,8 @@ QB_NETWORK_DEVICE = "-net nic,netdev=net0,macaddr=@MAC@"
93#### No additional settings should be after the Postamble 97#### No additional settings should be after the Postamble
94#### Postamble 98#### Postamble
95PACKAGE_EXTRA_ARCHS:append = "${@['', ' ${MB_MACHINE_ARCH}']['microblaze-generic' != "${MACHINE}"]}" 99PACKAGE_EXTRA_ARCHS:append = "${@['', ' ${MB_MACHINE_ARCH}']['microblaze-generic' != "${MACHINE}"]}"
100
101# Deprecated board config
102USE_BOARD = "${@"conf/machine/include/xilinx-board-post.inc" if d.getVar("BOARD") or d.getVar("BOARD_VARIANT") else ""}"
103require ${USE_BOARD}
104unset USE_BOARD
diff --git a/meta-xilinx-core/conf/machine/versal-generic.conf b/meta-xilinx-core/conf/machine/versal-generic.conf
index e44e99f2..f87dc140 100644
--- a/meta-xilinx-core/conf/machine/versal-generic.conf
+++ b/meta-xilinx-core/conf/machine/versal-generic.conf
@@ -33,7 +33,6 @@ UBOOT_LOADADDRESS ?= "0x200000"
33 33
34# Versal Serial Console 34# Versal Serial Console
35SERIAL_CONSOLES ?= "115200;ttyAMA0" 35SERIAL_CONSOLES ?= "115200;ttyAMA0"
36SERIAL_CONSOLES_CHECK = "${SERIAL_CONSOLES}"
37YAML_SERIAL_CONSOLE_BAUDRATE ?= "115200" 36YAML_SERIAL_CONSOLE_BAUDRATE ?= "115200"
38 37
39require conf/machine/include/soc-versal.inc 38require conf/machine/include/soc-versal.inc
@@ -47,7 +46,7 @@ HDF_MACHINE = "vck190-versal"
47 46
48MACHINE_FEATURES += "rtc ext2 ext3 vfat usbhost" 47MACHINE_FEATURES += "rtc ext2 ext3 vfat usbhost"
49 48
50MACHINE_ESSENTIAL_EXTRA_RDEPENDS += "device-tree" 49MACHINE_ESSENTIAL_EXTRA_RDEPENDS += "${PREFERRED_PROVIDER_virtual/dtb}"
51 50
52# Default SD image build onfiguration, use qemu-sd to pad 51# Default SD image build onfiguration, use qemu-sd to pad
53IMAGE_CLASSES += "image-types-xilinx-qemu" 52IMAGE_CLASSES += "image-types-xilinx-qemu"
diff --git a/meta-xilinx-core/conf/machine/versal-net-generic.conf b/meta-xilinx-core/conf/machine/versal-net-generic.conf
index 4b368e83..e1f222e2 100644
--- a/meta-xilinx-core/conf/machine/versal-net-generic.conf
+++ b/meta-xilinx-core/conf/machine/versal-net-generic.conf
@@ -1,3 +1,5 @@
1XILINX_DEPRECATED[versal-net] = "Versal-net is not supported in 2023.2"
2
1#@TYPE: Machine 3#@TYPE: Machine
2#@NAME: versal-net-generic 4#@NAME: versal-net-generic
3#@DESCRIPTION: Machine configuration for the versal-net-generic devices 5#@DESCRIPTION: Machine configuration for the versal-net-generic devices
diff --git a/meta-xilinx-core/conf/machine/zynq-generic.conf b/meta-xilinx-core/conf/machine/zynq-generic.conf
index df82a683..e97be2ff 100644
--- a/meta-xilinx-core/conf/machine/zynq-generic.conf
+++ b/meta-xilinx-core/conf/machine/zynq-generic.conf
@@ -32,7 +32,6 @@ KERNEL_EXTRA_ARGS += "UIMAGE_LOADADDR=${UBOOT_ENTRYPOINT}"
32 32
33# Zynq-7000 Serial Console settings 33# Zynq-7000 Serial Console settings
34SERIAL_CONSOLES ?= "115200;ttyPS0" 34SERIAL_CONSOLES ?= "115200;ttyPS0"
35SERIAL_CONSOLES_CHECK = "${SERIAL_CONSOLES}"
36YAML_SERIAL_CONSOLE_BAUDRATE ?= "115200" 35YAML_SERIAL_CONSOLE_BAUDRATE ?= "115200"
37 36
38require conf/machine/include/soc-zynq.inc 37require conf/machine/include/soc-zynq.inc
@@ -46,7 +45,7 @@ HDF_MACHINE = "zc702-zynq7"
46 45
47MACHINE_FEATURES += "rtc ext2 ext3 vfat usbhost usbgadget" 46MACHINE_FEATURES += "rtc ext2 ext3 vfat usbhost usbgadget"
48 47
49MACHINE_ESSENTIAL_EXTRA_RDEPENDS += "device-tree" 48MACHINE_ESSENTIAL_EXTRA_RDEPENDS += "${PREFERRED_PROVIDER_virtual/dtb}"
50 49
51EXTRA_IMAGEDEPENDS += " \ 50EXTRA_IMAGEDEPENDS += " \
52 libyaml-native \ 51 libyaml-native \
diff --git a/meta-xilinx-core/conf/machine/zynqmp-generic.conf b/meta-xilinx-core/conf/machine/zynqmp-generic.conf
index d24da3b4..b60014df 100644
--- a/meta-xilinx-core/conf/machine/zynqmp-generic.conf
+++ b/meta-xilinx-core/conf/machine/zynqmp-generic.conf
@@ -44,7 +44,6 @@ UBOOT_LOADADDRESS ?= "0x200000"
44 44
45# ZynqMP Serial Console 45# ZynqMP Serial Console
46SERIAL_CONSOLES ?= "115200;ttyPS0" 46SERIAL_CONSOLES ?= "115200;ttyPS0"
47SERIAL_CONSOLES_CHECK = "${SERIAL_CONSOLES}"
48YAML_SERIAL_CONSOLE_BAUDRATE ?= "115200" 47YAML_SERIAL_CONSOLE_BAUDRATE ?= "115200"
49 48
50require conf/machine/include/soc-zynqmp.inc 49require conf/machine/include/soc-zynqmp.inc
@@ -65,7 +64,7 @@ IMAGE_CLASSES += "image-types-xilinx-qemu"
65# Add wic.qemu-sd only if initramfs_image not set due to circular dependecies 64# Add wic.qemu-sd only if initramfs_image not set due to circular dependecies
66IMAGE_FSTYPES += "${@'wic.qemu-sd' if (d.getVar('INITRAMFS_IMAGE') or '') == '' else 'cpio.gz.u-boot'}" 65IMAGE_FSTYPES += "${@'wic.qemu-sd' if (d.getVar('INITRAMFS_IMAGE') or '') == '' else 'cpio.gz.u-boot'}"
67 66
68MACHINE_ESSENTIAL_EXTRA_RDEPENDS += "device-tree" 67MACHINE_ESSENTIAL_EXTRA_RDEPENDS += "${PREFERRED_PROVIDER_virtual/dtb}"
69 68
70EXTRA_IMAGEDEPENDS += " \ 69EXTRA_IMAGEDEPENDS += " \
71 libyaml-native \ 70 libyaml-native \
@@ -150,8 +149,6 @@ QB_PMU_OPT = " \
150 149
151QB_OPT_APPEND += " -pmu-args '${QB_PMU_OPT}'" 150QB_OPT_APPEND += " -pmu-args '${QB_PMU_OPT}'"
152 151
153do_write_qemuboot_conf[depends] += "u-boot-xlnx-uenv:do_deploy"
154
155#### No additional settings should be after the Postamble 152#### No additional settings should be after the Postamble
156#### Postamble 153#### Postamble
157PACKAGE_EXTRA_ARCHS:append = "${@['', ' zynqmp_generic']['zynqmp-generic' != "${MACHINE}"]}" 154PACKAGE_EXTRA_ARCHS:append = "${@['', ' zynqmp_generic']['zynqmp-generic' != "${MACHINE}"]}"
diff --git a/meta-xilinx-core/dynamic-layers/openamp-layer/recipes-bsp/device-tree/device-tree.bbappend b/meta-xilinx-core/dynamic-layers/openamp-layer/recipes-bsp/device-tree/device-tree.bbappend
index 4fd8b971..7dcee565 100644
--- a/meta-xilinx-core/dynamic-layers/openamp-layer/recipes-bsp/device-tree/device-tree.bbappend
+++ b/meta-xilinx-core/dynamic-layers/openamp-layer/recipes-bsp/device-tree/device-tree.bbappend
@@ -1,12 +1,5 @@
1FILESEXTRAPATHS:prepend := "${THISDIR}/files:" 1FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
2 2
3SRC_URI = " \
4 file://zynq-openamp.dtsi \
5 file://zynqmp-openamp.dtsi \
6 file://versal-openamp.dtsi \
7 file://versal-net-openamp.dtsi \
8"
9
10# openamp.dtsi is in the WORKDIR 3# openamp.dtsi is in the WORKDIR
11DT_INCLUDE:append = " ${WORKDIR}" 4DT_INCLUDE:append = " ${WORKDIR}"
12 5
@@ -21,7 +14,7 @@ def set_openamp_extra_overlays(d):
21 distro_features = d.getVar('DISTRO_FEATURES', True) 14 distro_features = d.getVar('DISTRO_FEATURES', True)
22 enable_openamp_dtsi = d.getVar('ENABLE_OPENAMP_DTSI') 15 enable_openamp_dtsi = d.getVar('ENABLE_OPENAMP_DTSI')
23 if 'openamp' in distro_features and enable_openamp_dtsi == '1': 16 if 'openamp' in distro_features and enable_openamp_dtsi == '1':
24 return d.getVar('OPENAMP_EXTRA_OVERLAYS', True) 17 return ' ${OPENAMP_EXTRA_OVERLAYS}'
25 else: 18 else:
26 return '' 19 return ''
27 20
diff --git a/meta-xilinx-core/dynamic-layers/openamp-layer/recipes-bsp/device-tree/open-amp-device-tree.bb b/meta-xilinx-core/dynamic-layers/openamp-layer/recipes-bsp/device-tree/open-amp-device-tree.bb
index 8f77bd54..9f481fec 100644
--- a/meta-xilinx-core/dynamic-layers/openamp-layer/recipes-bsp/device-tree/open-amp-device-tree.bb
+++ b/meta-xilinx-core/dynamic-layers/openamp-layer/recipes-bsp/device-tree/open-amp-device-tree.bb
@@ -11,6 +11,8 @@ SRC_URI = " \
11 file://zynqmp-openamp-overlay.dts \ 11 file://zynqmp-openamp-overlay.dts \
12 file://versal-openamp.dtsi \ 12 file://versal-openamp.dtsi \
13 file://versal-openamp-overlay.dts \ 13 file://versal-openamp-overlay.dts \
14 file://versal-net-openamp.dtsi \
15 file://versal-net-openamp-overlay.dts \
14" 16"
15 17
16# We don't have anything to include from the kernel 18# We don't have anything to include from the kernel
@@ -19,6 +21,7 @@ KERNEL_INCLUDE = ""
19COMPATIBLE_MACHINE:zynq = "${MACHINE}" 21COMPATIBLE_MACHINE:zynq = "${MACHINE}"
20COMPATIBLE_MACHINE:zynqmp = "${MACHINE}" 22COMPATIBLE_MACHINE:zynqmp = "${MACHINE}"
21COMPATIBLE_MACHINE:versal = "${MACHINE}" 23COMPATIBLE_MACHINE:versal = "${MACHINE}"
24COMPATIBLE_MACHINE:versal-net = "${MACHINE}"
22 25
23inherit devicetree image-artifact-names features_check 26inherit devicetree image-artifact-names features_check
24 27
diff --git a/meta-xilinx-core/dynamic-layers/openamp-layer/recipes-openamp/libmetal/libmetal-xlnx_v2023.2.bb b/meta-xilinx-core/dynamic-layers/openamp-layer/recipes-openamp/libmetal/libmetal-xlnx_v2023.2.bb
new file mode 100644
index 00000000..5618ae88
--- /dev/null
+++ b/meta-xilinx-core/dynamic-layers/openamp-layer/recipes-openamp/libmetal/libmetal-xlnx_v2023.2.bb
@@ -0,0 +1,15 @@
1SRCBRANCH ?= "2023.2"
2SRCREV = "00fd771adc7adaed664ed6c5bc3d48d25856fe5c"
3BRANCH = "xlnx_rel_v2023.2"
4LIC_FILES_CHKSUM ?= "file://LICENSE.md;md5=f4d5df0f12dcea1b1a0124219c0dbab4"
5PV = "${SRCBRANCH}+git${SRCPV}"
6
7REPO = "git://github.com/Xilinx/libmetal.git;protocol=https"
8
9include ${LAYER_PATH_openamp-layer}/recipes-openamp/libmetal/libmetal.inc
10
11RPROVIDES:${PN}-dbg += "libmetal-dbg"
12RPROVIDES:${PN}-dev += "libmetal-dev"
13RPROVIDES:${PN}-lic += "libmetal-lic"
14RPROVIDES:${PN}-src += "libmetal-src"
15RPROVIDES:${PN}-staticdev += "libmetal-staticdev"
diff --git a/meta-xilinx-core/dynamic-layers/openamp-layer/recipes-openamp/open-amp/open-amp-xlnx_v2023.2.bb b/meta-xilinx-core/dynamic-layers/openamp-layer/recipes-openamp/open-amp/open-amp-xlnx_v2023.2.bb
new file mode 100644
index 00000000..8c6b4431
--- /dev/null
+++ b/meta-xilinx-core/dynamic-layers/openamp-layer/recipes-openamp/open-amp/open-amp-xlnx_v2023.2.bb
@@ -0,0 +1,16 @@
1SRCBRANCH ?= "2023.2"
2SRCREV = "73a546f2b5faffe71680b1e5389f3328be60773f"
3BRANCH = "xlnx_rel_v2023.2"
4LIC_FILES_CHKSUM ?= "file://LICENSE.md;md5=ab88daf995c0bd0071c2e1e55f3d3505"
5PV = "${SRCBRANCH}+git${SRCPV}"
6REPO = "git://github.com/Xilinx/open-amp.git;protocol=https"
7
8include ${LAYER_PATH_openamp-layer}/recipes-openamp/open-amp/open-amp.inc
9require ${LAYER_PATH_openamp-layer}/vendor/xilinx/recipes-openamp/open-amp/open-amp-xlnx.inc
10
11RPROVIDES:${PN}-dbg += "open-amp-dbg"
12RPROVIDES:${PN}-dev += "open-amp-dev"
13RPROVIDES:${PN}-lic += "open-amp-lic"
14RPROVIDES:${PN}-src += "open-amp-src"
15RPROVIDES:${PN}-staticdev += "open-amp-staticdev"
16
diff --git a/meta-xilinx-core/dynamic-layers/virtualization-layer/recipes-kernel/lopper/lopper_git.bbappend b/meta-xilinx-core/dynamic-layers/virtualization-layer/recipes-kernel/lopper/lopper_git.bbappend
index 0440b1bc..56cb8a45 100644
--- a/meta-xilinx-core/dynamic-layers/virtualization-layer/recipes-kernel/lopper/lopper_git.bbappend
+++ b/meta-xilinx-core/dynamic-layers/virtualization-layer/recipes-kernel/lopper/lopper_git.bbappend
@@ -1,5 +1,5 @@
1SRC_URI = "git://github.com/devicetree-org/lopper.git;branch=master;protocol=https" 1SRC_URI = "git://github.com/devicetree-org/lopper.git;branch=master;protocol=https"
2SRCREV = "395f00d44ee259d5db6fd6165c6cd18c8fe40e2f" 2SRCREV = "807435ae6fa0a07e8c84b458d138f3f54614eb5c"
3 3
4FILESEXTRAPATHS:prepend := "${THISDIR}/lopper:" 4FILESEXTRAPATHS:prepend := "${THISDIR}/lopper:"
5 5
diff --git a/meta-xilinx-core/gen-machine-conf b/meta-xilinx-core/gen-machine-conf
Subproject a08b0e9e88b4c70336b12d57d4704343474d608 Subproject 911941fc094dc0073c2f01a2b94de3cc6e993fe
diff --git a/meta-xilinx-core/recipes-bsp/ai-engine/ai-engine-driver_3.2.bb b/meta-xilinx-core/recipes-bsp/ai-engine/ai-engine-driver_3.4.bb
index 810b51fd..f86c5985 100644
--- a/meta-xilinx-core/recipes-bsp/ai-engine/ai-engine-driver_3.2.bb
+++ b/meta-xilinx-core/recipes-bsp/ai-engine/ai-engine-driver_3.4.bb
@@ -12,7 +12,7 @@ I = "${AIEDIR}/include"
12COMPATIBLE_MACHINE = "^$" 12COMPATIBLE_MACHINE = "^$"
13COMPATIBLE_MACHINE:versal-ai-core = "versal-ai-core" 13COMPATIBLE_MACHINE:versal-ai-core = "versal-ai-core"
14COMPATIBLE_MACHINE:versal-ai-edge = "${SOC_VARIANT_ARCH}" 14COMPATIBLE_MACHINE:versal-ai-edge = "${SOC_VARIANT_ARCH}"
15PV = "3.2" 15PV = "3.3"
16 16
17IOBACKENDS ?= "Linux" 17IOBACKENDS ?= "Linux"
18 18
@@ -25,7 +25,7 @@ RPROVIDES:${PN} = "libxaiengine"
25# The makefile isn't ready for parallel execution at the moment 25# The makefile isn't ready for parallel execution at the moment
26PARALLEL_MAKE = "-j 1" 26PARALLEL_MAKE = "-j 1"
27 27
28CFLAGS += "-Wall -Wextra -fno-thread-jumps -fno-tree-pre" 28CFLAGS += "-Wall -Wextra"
29CFLAGS += "${@bb.utils.contains('IOBACKENDS', 'Linux', ' -D__AIELINUX__', '', d)}" 29CFLAGS += "${@bb.utils.contains('IOBACKENDS', 'Linux', ' -D__AIELINUX__', '', d)}"
30CFLAGS += "${@bb.utils.contains('IOBACKENDS', 'metal', ' -D__AIEMETAL__', '', d)}" 30CFLAGS += "${@bb.utils.contains('IOBACKENDS', 'metal', ' -D__AIEMETAL__', '', d)}"
31EXTRA_OEMAKE = "-C ${AIEDIR}/src -f Makefile.Linux CFLAGS='${CFLAGS}'" 31EXTRA_OEMAKE = "-C ${AIEDIR}/src -f Makefile.Linux CFLAGS='${CFLAGS}'"
@@ -45,3 +45,5 @@ do_install(){
45} 45}
46 46
47PACKAGE_ARCH:versal-ai-core = "${SOC_VARIANT_ARCH}" 47PACKAGE_ARCH:versal-ai-core = "${SOC_VARIANT_ARCH}"
48PACKAGE_ARCH:versal-ai-edge = "${SOC_VARIANT_ARCH}"
49
diff --git a/meta-xilinx-core/recipes-bsp/ai-engine/aie-rt.inc b/meta-xilinx-core/recipes-bsp/ai-engine/aie-rt.inc
index 5eeb69d4..11059465 100644
--- a/meta-xilinx-core/recipes-bsp/ai-engine/aie-rt.inc
+++ b/meta-xilinx-core/recipes-bsp/ai-engine/aie-rt.inc
@@ -2,10 +2,10 @@ SECTION = "libs"
2 2
3REPO ?= "git://github.com/Xilinx/aie-rt.git;protocol=https" 3REPO ?= "git://github.com/Xilinx/aie-rt.git;protocol=https"
4 4
5BRANCH ?= "xlnx_rel_v2023.1" 5BRANCH ?= "xlnx_rel_v2023.2"
6SRCREV ?= "1ad203de0b7f282b1c0659fd2ae3f218652c7274" 6SRCREV ?= "84debe5d22c144fb09269b8410df4cb8a6aa3b2a"
7 7
8LICENSE = "BSD-3-Clause" 8LICENSE = "BSD-3-Clause"
9LIC_FILES_CHKSUM ?= "file://license.txt;md5=b81abf1f508952331dd7d2ab36408f5b" 9LIC_FILES_CHKSUM ?= "file://license.txt;md5=04a153cae61a8a606fc79dff49c2c897"
10 10
11SRC_URI = "${REPO};branch=${BRANCH}" 11SRC_URI = "${REPO};branch=${BRANCH}"
diff --git a/meta-xilinx-core/recipes-bsp/ai-engine/aiefal_1.0.bb b/meta-xilinx-core/recipes-bsp/ai-engine/aiefal_1.5.bb
index 7bb4b849..2c6c9cd1 100644
--- a/meta-xilinx-core/recipes-bsp/ai-engine/aiefal_1.0.bb
+++ b/meta-xilinx-core/recipes-bsp/ai-engine/aiefal_1.5.bb
@@ -31,3 +31,5 @@ FILES:${PN}-demos = " \
31" 31"
32 32
33PACKAGE_ARCH:versal-ai-core = "${SOC_VARIANT_ARCH}" 33PACKAGE_ARCH:versal-ai-core = "${SOC_VARIANT_ARCH}"
34PACKAGE_ARCH:versal-ai-edge = "${SOC_VARIANT_ARCH}"
35
diff --git a/meta-xilinx-core/recipes-bsp/arm-trusted-firmware/arm-trusted-firmware_2023.2.bb b/meta-xilinx-core/recipes-bsp/arm-trusted-firmware/arm-trusted-firmware_2023.2.bb
new file mode 100644
index 00000000..6ebd6cb5
--- /dev/null
+++ b/meta-xilinx-core/recipes-bsp/arm-trusted-firmware/arm-trusted-firmware_2023.2.bb
@@ -0,0 +1,8 @@
1ATF_VERSION = "2.8"
2SRCREV = "6be857cb66300fb21e3f61308e4197911c8ac30d"
3BRANCH = "xlnx_rebase_v2.8"
4LIC_FILES_CHKSUM = "file://license.rst;md5=1dd070c98a281d18d9eefd938729b031"
5
6
7include arm-trusted-firmware.inc
8
diff --git a/meta-xilinx-core/recipes-bsp/bitstream/bitstream.bb b/meta-xilinx-core/recipes-bsp/bitstream/bitstream.bb
new file mode 100644
index 00000000..f61761f4
--- /dev/null
+++ b/meta-xilinx-core/recipes-bsp/bitstream/bitstream.bb
@@ -0,0 +1,59 @@
1DESCRIPTION = "Recipe to provide a bitstream via virtual/bitstream"
2
3LICENSE = "MIT"
4LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
5
6INHIBIT_DEFAULT_DEPS = "1"
7
8# We never want to prefer this over another provider
9DEFAULT_PREFERENCE = "-1"
10
11PROVIDES = "virtual/bitstream"
12
13COMPATIBLE_MACHINE = "$^"
14COMPATIBLE_MACHINE:zynq = ".*"
15COMPATIBLE_MACHINE:zynqmp = ".*"
16
17# Since we're just copying, we can run any config
18COMPATIBLE_HOST = ".*"
19
20PACKAGE_ARCH = "${MACHINE_ARCH}"
21
22# Path where the bitstream can be found
23BITSTREAM_PATH ?= ""
24
25inherit deploy
26
27do_install() {
28 if [ ! -e ${BITSTREAM_PATH} ]; then
29 echo "Unable to find BITSTREAM_PATH (${BITSTREAM_PATH})"
30 exit 1
31 fi
32
33 install -Dm 0644 ${BITSTREAM_PATH} ${D}/boot/.
34}
35
36# If the item is already in OUR deploy_image_dir, nothing to deploy!
37SHOULD_DEPLOY = "${@'false' if (d.getVar('BITSTREAM_PATH')).startswith(d.getVar('DEPLOY_DIR_IMAGE')) else 'true'}"
38do_deploy() {
39 # If the item is already in OUR deploy_image_dir, nothing to deploy!
40 if ${SHOULD_DEPLOY}; then
41 install -Dm 0644 ${BITSTREAM_PATH} ${DEPLOYDIR}/.
42 fi
43}
44
45def check_bitstream_vars(d):
46 # If BITSTREAM_PATH is not defined, we error and instruct the user
47 # Don't cache this, as the items on disk can change!
48 d.setVar('BB_DONT_CACHE', '1')
49 if d.getVar('BITSTREAM_PATH') and not os.path.exists(d.getVar('BITSTREAM_PATH')):
50 raise bb.parse.SkipRecipe("The expected bitstream file %s is not available.\nSee the meta-xilinx-core README.")
51
52 if not d.getVar('BITSTREAM_PATH'):
53 raise bb.parse.SkipRecipe("Something is depending on virtual/bitstream and you have not provided a bitstream using BITSTREAM_PATH variable.\n See the meta-xilinx-core README.")
54
55python() {
56 # Need to allow bbappends to change the check
57 check_bitstream_vars(d)
58}
59
diff --git a/meta-xilinx-core/recipes-bsp/bootbin/xilinx-bootbin_1.0.bb b/meta-xilinx-core/recipes-bsp/bootbin/xilinx-bootbin_1.0.bb
index 5133fbd8..4c8bfa0e 100644
--- a/meta-xilinx-core/recipes-bsp/bootbin/xilinx-bootbin_1.0.bb
+++ b/meta-xilinx-core/recipes-bsp/bootbin/xilinx-bootbin_1.0.bb
@@ -44,6 +44,10 @@ BOOTGEN_EXTRA_ARGS ?= ""
44do_patch[noexec] = "1" 44do_patch[noexec] = "1"
45 45
46def create_bif(config, attrflags, attrimage, ids, common_attr, biffd, d): 46def create_bif(config, attrflags, attrimage, ids, common_attr, biffd, d):
47 arch = d.getVar("SOC_FAMILY")
48 bb.error("create_bif function not defined for arch: %s" % (arch))
49
50def create_zynq_bif(config, attrflags, attrimage, ids, common_attr, biffd, d):
47 import re, os 51 import re, os
48 for cfg in config: 52 for cfg in config:
49 if cfg not in attrflags and common_attr: 53 if cfg not in attrflags and common_attr:
@@ -117,23 +121,32 @@ def create_versal_bif(config, attrflags, attrimage, ids, common_attr, biffd, d):
117python do_configure() { 121python do_configure() {
118 fp = d.getVar("BIF_FILE_PATH") 122 fp = d.getVar("BIF_FILE_PATH")
119 if fp == (d.getVar('B') + '/bootgen.bif'): 123 if fp == (d.getVar('B') + '/bootgen.bif'):
120 arch = d.getVar("SOC_FAMILY")
121 biffunc = {'versal':create_versal_bif, 'zynq':create_bif, 'zynqmp':create_bif}
122 biffd = open(fp, 'w') 124 biffd = open(fp, 'w')
123 biffd.write("the_ROM_image:\n") 125 biffd.write("the_ROM_image:\n")
124 biffd.write("{\n") 126 biffd.write("{\n")
125 127
128 arch = d.getVar("SOC_FAMILY")
126 bifattr = (d.getVar("BIF_COMMON_ATTR") or "").split() 129 bifattr = (d.getVar("BIF_COMMON_ATTR") or "").split()
127 if bifattr: 130 if bifattr:
128 attrflags = d.getVarFlags("BIF_COMMON_ATTR") or {} 131 attrflags = d.getVarFlags("BIF_COMMON_ATTR") or {}
129 biffunc[arch](bifattr, attrflags,'','', 1, biffd, d) 132 if arch in ['zynq', 'zynqmp']:
133 create_zynq_bif(bifattr, attrflags,'','', 1, biffd, d)
134 elif arch in ['versal']:
135 create_versal_bif(bifattr, attrflags,'','', 1, biffd, d)
136 else:
137 create_bif(bifattr, attrflags,'','', 1, biffd, d)
130 138
131 bifpartition = (d.getVar("BIF_PARTITION_ATTR") or "").split() 139 bifpartition = (d.getVar("BIF_PARTITION_ATTR") or "").split()
132 if bifpartition: 140 if bifpartition:
133 attrflags = d.getVarFlags("BIF_PARTITION_ATTR") or {} 141 attrflags = d.getVarFlags("BIF_PARTITION_ATTR") or {}
134 attrimage = d.getVarFlags("BIF_PARTITION_IMAGE") or {} 142 attrimage = d.getVarFlags("BIF_PARTITION_IMAGE") or {}
135 ids = d.getVarFlags("BIF_PARTITION_ID") or {} 143 ids = d.getVarFlags("BIF_PARTITION_ID") or {}
136 biffunc[arch](bifpartition, attrflags, attrimage, ids, 0, biffd, d) 144 if arch in ['zynq', 'zynqmp']:
145 create_zynq_bif(bifpartition, attrflags, attrimage, ids, 0, biffd, d)
146 elif arch in ['versal']:
147 create_versal_bif(bifpartition, attrflags, attrimage, ids, 0, biffd, d)
148 else:
149 create_bif(bifpartition, attrflags, attrimage, ids, 0, biffd, d)
137 150
138 biffd.write("}") 151 biffd.write("}")
139 biffd.close() 152 biffd.close()
diff --git a/meta-xilinx-core/recipes-bsp/bootgen/bootgen_2023.2.bb b/meta-xilinx-core/recipes-bsp/bootgen/bootgen_2023.2.bb
new file mode 100644
index 00000000..03f323e1
--- /dev/null
+++ b/meta-xilinx-core/recipes-bsp/bootgen/bootgen_2023.2.bb
@@ -0,0 +1,31 @@
1SUMMARY = "Building and installing bootgen"
2DESCRIPTION = "Building and installing bootgen, a Xilinx tool that lets you stitch binary files together and generate device boot images"
3
4LICENSE = "Apache-2.0"
5LIC_FILES_CHKSUM = "file://LICENSE;md5=d526b6d0807bf263b97da1da876f39b1"
6
7S = "${WORKDIR}/git"
8
9DEPENDS += "openssl"
10RDEPENDS:${PN} += "openssl"
11
12REPO ?= "git://github.com/Xilinx/bootgen.git;protocol=https"
13BRANCH = "xlnx_rel_v2023.2"
14SRCREV = "8e6702bb5064b806e45028486de7376962470a36"
15
16BRANCHARG = "${@['nobranch=1', 'branch=${BRANCH}'][d.getVar('BRANCH', True) != '']}"
17SRC_URI = "${REPO};${BRANCHARG}"
18
19EXTRA_OEMAKE += 'CROSS_COMPILER="${CXX}" -C ${S}'
20CXXFLAGS:append = " -std=c++0x"
21
22TARGET_CC_ARCH += "${LDFLAGS}"
23
24do_install() {
25 install -d ${D}${bindir}
26 install -Dm 0755 ${S}/bootgen ${D}${bindir}
27}
28
29FILES:${PN} = "${bindir}/bootgen"
30
31BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-xilinx-core/recipes-bsp/device-tree/device-tree.bb b/meta-xilinx-core/recipes-bsp/device-tree/device-tree.bb
index 91a13fa1..8d7211f5 100644
--- a/meta-xilinx-core/recipes-bsp/device-tree/device-tree.bb
+++ b/meta-xilinx-core/recipes-bsp/device-tree/device-tree.bb
@@ -9,6 +9,11 @@ LIC_FILES_CHKSUM = " \
9 file://${COMMON_LICENSE_DIR}/GPL-2.0-or-later;md5=fed54355545ffd980b814dab4a3b312c \ 9 file://${COMMON_LICENSE_DIR}/GPL-2.0-or-later;md5=fed54355545ffd980b814dab4a3b312c \
10 " 10 "
11 11
12# Since we're not based on a kernel default to nothing.
13# This needs to be before the devicetree inherit, as it configured for use
14# with a linux kernel by default.
15KERNEL_INCLUDE ?= ""
16
12inherit devicetree image-artifact-names 17inherit devicetree image-artifact-names
13 18
14# Fall back to SYSTEM_DTFILE if specified... 19# Fall back to SYSTEM_DTFILE if specified...
@@ -17,7 +22,29 @@ inherit devicetree image-artifact-names
17# system. 22# system.
18SYSTEM_DTFILE ??= "" 23SYSTEM_DTFILE ??= ""
19CONFIG_DTFILE ??= "${SYSTEM_DTFILE}" 24CONFIG_DTFILE ??= "${SYSTEM_DTFILE}"
20DT_FILES_PATH = "${@os.path.dirname(d.getVar('CONFIG_DTFILE')) if d.getVar('CONFIG_DTFILE') else d.getVar('S')}" 25
26BASE_DTS ?= "${@os.path.basename(d.getVar('CONFIG_DTFILE') or '').rstrip('.dtb').rstrip('.dts') or 'system-top'}"
27
28EXTRA_DT_FILES ?= ""
29EXTRA_DTFILE_PREFIX ?= "system-top"
30EXTRA_DTFILES_BUNDLE ?= ""
31UBOOT_DT_FILES ?= ""
32UBOOT_DTFILE_PREFIX ?= "system-top"
33UBOOT_DTFILES_BUNDLE ?= ""
34EXTRA_OVERLAYS ?= ""
35
36SYSTEM_DTFILE[doc] = "System Device Tree which accepts at 0...1 dts file"
37CONFIG_DTFILE[doc] = "Domain Specific Device Tree which accepts 0...1 dts file"
38EXTRA_DT_FILES[doc] = "Add extra files to DT_FILES_PATH, it accepts 1...n dtsi files and adds to SRC_URI"
39EXTRA_OVERLAYS[doc] = "Add extra files to DT_FILES_PATH and adds a #include for each to the BASE_DTS, it access 1..n dtsi files and adds to SRC_URI"
40
41# There should only be ONE CONFIG_DTFILE listed
42# These need to be passed in from global, not from a bbappend
43FILESEXTRAPATHS:prepend := "${@'%s:' % os.path.dirname(d.getVar('CONFIG_DTFILE') or '') if (d.getVar('CONFIG_DTFILE')) else ''}"
44SRC_URI:append := " ${@'file://%s' % os.path.basename(d.getVar('CONFIG_DTFILE') or '') if (d.getVar('CONFIG_DTFILE')) else ''}"
45
46SRC_URI:append = " ${@" ".join(["file://%s" % f for f in (d.getVar('EXTRA_DT_FILES') or "").split()])}"
47SRC_URI:append = " ${@" ".join(["file://%s" % f for f in (d.getVar('EXTRA_OVERLAYS') or "").split()])}"
21 48
22COMPATIBLE_MACHINE:zynq = ".*" 49COMPATIBLE_MACHINE:zynq = ".*"
23COMPATIBLE_MACHINE:zynqmp = ".*" 50COMPATIBLE_MACHINE:zynqmp = ".*"
@@ -30,11 +57,71 @@ PROVIDES = "virtual/dtb"
30# common zynq include 57# common zynq include
31SRC_URI:append:zynq = " file://zynq-7000-qspi-dummy.dtsi" 58SRC_URI:append:zynq = " file://zynq-7000-qspi-dummy.dtsi"
32 59
33DTB_FILE_NAME = "${@os.path.basename(d.getVar('CONFIG_DTFILE')).replace('.dts', '.dtb') if d.getVar('CONFIG_DTFILE') else ''}" 60DTB_FILE_NAME ?= "${BASE_DTS}.dtb"
34 61
35DTB_BASE_NAME ?= "${MACHINE}-system${IMAGE_VERSION_SUFFIX}" 62DTB_BASE_NAME ?= "${MACHINE}-system${IMAGE_VERSION_SUFFIX}"
36 63
64# Copy the EXTRA_DT_FILES and EXTRA_OVERLAYS files in prepend operation so that
65# it can be preprocessed.
66do_configure:prepend () {
67 # Create DT_FILES_PATH directory if doesn't exist during prepend operation.
68 if [ ! -d ${DT_FILES_PATH} ]; then
69 mkdir -p ${DT_FILES_PATH}
70 fi
71
72 for f in ${EXTRA_DT_FILES} ${EXTRA_OVERLAYS}; do
73 if [ "$(realpath ${WORKDIR}/${f})" != "$(realpath ${DT_FILES_PATH}/`basename ${f}`)" ]; then
74 cp ${WORKDIR}/${f} ${DT_FILES_PATH}/
75 fi
76 done
77}
78
79do_configure:append () {
80 for f in ${EXTRA_OVERLAYS}; do
81 if [ ! -e ${DT_FILES_PATH}/${BASE_DTS}.dts ]; then
82 if [ -e ${DT_FILES_PATH}/${BASE_DTS}.dtb ]; then
83 bberror "Unable to find ${BASE_DTS}.dts, to use EXTRA_OVERLAYS you must use a 'dts' and not 'dtb' in CONFIG_DTFILE"
84 else
85 bberror "Unable to find ${BASE_DTS}.dts, to use EXTRA_OVERLAYS you must set a valid CONFIG_DTFILE or use system-top.dts"
86 fi
87 exit 1
88 fi
89 echo "/include/ \"$f\"" >> ${DT_FILES_PATH}/${BASE_DTS}.dts
90 done
91}
92
93devicetree_do_compile:append() {
94 import subprocess
95
96 dtb_file = d.getVar('DTB_FILE_NAME') or ''
97 if not dtb_file or not os.path.isfile(dtb_file):
98 bb.error("Expected file ${DTB_FILE_NAME} doesn't exist")
99
100 if d.getVar('EXTRA_DTFILES_BUNDLE'):
101 ccdtb_prefix = d.getVar('EXTRA_DTFILE_PREFIX')
102 extra_dt_files = d.getVar('EXTRA_DT_FILES').split() or []
103
104 for dtsfile in extra_dt_files:
105 dtname = os.path.splitext(os.path.basename(dtsfile))[0]
106 if os.path.isfile(f"{dtname}.dtbo"):
107 fdtargs = ["fdtoverlay", "-o", f"{ccdtb_prefix}-{dtname}.dtb", "-i", dtb_file, f"{dtname}.dtbo"]
108 bb.note("Running {0}".format(" ".join(fdtargs)))
109 subprocess.run(fdtargs, check = True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
110
111 if d.getVar('UBOOT_DTFILES_BUNDLE'):
112 uboot_ccdtb_prefix = d.getVar('UBOOT_DTFILE_PREFIX')
113 uboot_dt_files = d.getVar('UBOOT_DT_FILES').split() or []
114
115 for dtsfile in uboot_dt_files:
116 dtname = os.path.splitext(os.path.basename(dtsfile))[0]
117 if os.path.isfile(f"{dtname}.dtbo"):
118 fdtargs = ["fdtoverlay", "-o", f"{uboot_ccdtb_prefix}-{dtname}.dtb", "-i", dtb_file, f"{dtname}.dtbo"]
119 bb.note("Running {0}".format(" ".join(fdtargs)))
120 subprocess.run(fdtargs, check = True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
121}
122
37FILES:${PN} += "/boot/system.dtb" 123FILES:${PN} += "/boot/system.dtb"
124
38devicetree_do_install:append() { 125devicetree_do_install:append() {
39 if [ -n "${DTB_FILE_NAME}" ]; then 126 if [ -n "${DTB_FILE_NAME}" ]; then
40 # If it's already a dtb, we have to copy from the original location 127 # If it's already a dtb, we have to copy from the original location
@@ -73,14 +160,6 @@ def check_devicetree_variables(d):
73 160
74 if not d.getVar('CONFIG_DTFILE'): 161 if not d.getVar('CONFIG_DTFILE'):
75 raise bb.parse.SkipRecipe("CONFIG_DTFILE or SYSTEM_DTFILE is not defined.") 162 raise bb.parse.SkipRecipe("CONFIG_DTFILE or SYSTEM_DTFILE is not defined.")
76 else:
77 if not os.path.exists(d.getVar('CONFIG_DTFILE')):
78 if not d.getVar('WITHIN_EXT_SDK'):
79 raise bb.parse.SkipRecipe("The device tree %s is not available." % d.getVar('CONFIG_DTFILE'))
80 else:
81 d.appendVar('SRC_URI', ' file://${CONFIG_DTFILE}')
82 d.setVarFlag('do_install', 'file-checksums', '${CONFIG_DTFILE}:True')
83 d.setVarFlag('do_deploy', 'file-checksums', '${CONFIG_DTFILE}:True')
84 163
85python() { 164python() {
86 # Need to allow bbappends to change the check 165 # Need to allow bbappends to change the check
diff --git a/meta-xilinx-core/recipes-bsp/dfx-mgr/dfx-mgr_2023.2.bb b/meta-xilinx-core/recipes-bsp/dfx-mgr/dfx-mgr_2023.2.bb
new file mode 100644
index 00000000..0d24c9fc
--- /dev/null
+++ b/meta-xilinx-core/recipes-bsp/dfx-mgr/dfx-mgr_2023.2.bb
@@ -0,0 +1,72 @@
1SUMMARY = "Xilinx dfx-mgr libraries"
2DESCRIPTION = "Xilinx Runtime User Space Libraries and Binaries"
3
4LICENSE = "MIT"
5LIC_FILES_CHKSUM = "file://LICENSE;md5=d67bcef754e935bf77b6d7051bd62b5e"
6
7REPO ?= "git://github.com/Xilinx/dfx-mgr.git;protocol=https"
8BRANCHARG = "${@['nobranch=1', 'branch=${BRANCH}'][d.getVar('BRANCH', True) != '']}"
9SRC_URI = "${REPO};${BRANCHARG}"
10
11BRANCH = "xlnx_rel_v2023.2"
12SRCREV = "4dbd33accb043bd92ecbec2a3507f85a22045c51"
13SOMAJOR = "1"
14SOMINOR = "0"
15SOVERSION = "${SOMAJOR}.${SOMINOR}"
16
17COMPATIBLE_MACHINE = "^$"
18COMPATIBLE_MACHINE:zynqmp = "zynqmp"
19COMPATIBLE_MACHINE:versal = "versal"
20
21S = "${WORKDIR}/git"
22
23inherit cmake update-rc.d systemd
24
25DEPENDS += " libwebsockets inotify-tools libdfx zocl libdrm"
26RDEPENDS:${PN} += " freeipmi"
27EXTRA_OECMAKE += " \
28 -DCMAKE_SYSROOT:PATH=${RECIPE_SYSROOT} \
29 "
30
31INITSCRIPT_NAME = "dfx-mgr.sh"
32INITSCRIPT_PARAMS = "start 99 S ."
33
34SYSTEMD_PACKAGES="${PN}"
35SYSTEMD_SERVICE:${PN}="dfx-mgr.service"
36SYSTEMD_AUTO_ENABLE:${PN}="enable"
37
38
39do_install(){
40 install -d ${D}${bindir}
41 install -d ${D}${libdir}
42 install -d ${D}${includedir}
43 install -d ${D}${base_libdir}/firmware/xilinx
44 install -d ${D}${sysconfdir}/dfx-mgrd
45
46 cp ${B}/example/sys/linux/dfx-mgrd-static ${D}${bindir}/dfx-mgrd
47 cp ${B}/example/sys/linux/dfx-mgr-client-static ${D}${bindir}/dfx-mgr-client
48 chrpath -d ${D}${bindir}/dfx-mgrd
49 chrpath -d ${D}${bindir}/dfx-mgr-client
50 install -m 0644 ${S}/src/dfxmgr_client.h ${D}${includedir}
51
52 oe_soinstall ${B}/src/libdfx-mgr.so.${SOVERSION} ${D}${libdir}
53
54 install -m 0755 ${S}/src/daemon.conf ${D}${sysconfdir}/dfx-mgrd/
55
56 if ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'true', 'false', d)}; then
57 install -d ${D}${sysconfdir}/init.d/
58 install -m 0755 ${S}/src/dfx-mgr.sh ${D}${sysconfdir}/init.d/
59 fi
60
61 install -m 0755 ${S}/src/dfx-mgr.sh ${D}${bindir}
62 install -m 0755 ${S}/src/scripts/xlnx-firmware-detect ${D}${bindir}
63
64 install -d ${D}${systemd_system_unitdir}
65 install -m 0644 ${S}/src/dfx-mgr.service ${D}${systemd_system_unitdir}
66}
67
68PACKAGES =+ "libdfx-mgr"
69
70FILES:${PN} += "${base_libdir}/firmware/xilinx"
71FILES:${PN} += "${@bb.utils.contains('DISTRO_FEATURES','sysvinit','${sysconfdir}/init.d/dfx-mgr.sh', '', d)} ${systemd_system_unitdir}"
72FILES:libdfx-mgr = "${libdir}/libdfx-mgr.so.${SOVERSION} ${libdir}/libdfx-mgr.so.${SOMAJOR}"
diff --git a/meta-xilinx-core/recipes-bsp/libdfx/libdfx_2023.2.bb b/meta-xilinx-core/recipes-bsp/libdfx/libdfx_2023.2.bb
new file mode 100644
index 00000000..b3ccb884
--- /dev/null
+++ b/meta-xilinx-core/recipes-bsp/libdfx/libdfx_2023.2.bb
@@ -0,0 +1,23 @@
1SUMMARY = "Xilinx libdfx library"
2DESCRIPTION = "Xilinx libdfx Library and headers"
3
4LICENSE = "MIT & GPL-2.0-or-later"
5LIC_FILES_CHKSUM = "file://LICENSE.md;md5=94aba86aec117f003b958a52f019f1a7"
6
7BRANCH ?= "xlnx_rel_v2023.2"
8REPO ?= "git://github.com/Xilinx/libdfx.git;protocol=https"
9BRANCHARG = "${@['nobranch=1', 'branch=${BRANCH}'][d.getVar('BRANCH', True) != '']}"
10SRC_URI = "${REPO};${BRANCHARG}"
11SRCREV = "52c1d83c72a2b2e85d256411a199ed1baed12ae1"
12
13COMPATIBLE_MACHINE = "^$"
14COMPATIBLE_MACHINE:zynqmp = "zynqmp"
15COMPATIBLE_MACHINE:versal = "versal"
16
17S = "${WORKDIR}/git"
18
19inherit cmake
20
21# Due to an update where the soname/version was defined, we need to use an RREPLACES
22# so updates will work properly.
23RREPLACES:${PN} = "libdfx"
diff --git a/meta-xilinx-core/recipes-bsp/u-boot/u-boot-tools-xlnx_2023.2.bb b/meta-xilinx-core/recipes-bsp/u-boot/u-boot-tools-xlnx_2023.2.bb
new file mode 100644
index 00000000..43fec635
--- /dev/null
+++ b/meta-xilinx-core/recipes-bsp/u-boot/u-boot-tools-xlnx_2023.2.bb
@@ -0,0 +1,21 @@
1require u-boot-tools-xlnx.inc
2require u-boot-xlnx-2023.2.inc
3
4# MUST clear CONFIG_VIDEO to avoid a compilation failure trying to construct
5# bmp_logo.h
6SED_CONFIG_EFI:append = ' -e "s/CONFIG_VIDEO=.*/# CONFIG_VIDEO is not set/"'
7
8# Default do_compile fails with:
9# | error: object directory ../downloads/git2/github.com.Xilinx.u-boot-xlnx.git/objects does not exist; check .git/objects/info/alternates.
10# The regular workaround of calling 'git diff' seems to be problematic.
11do_compile () {
12 oe_runmake -C ${S} tools-only_defconfig O=${B}
13
14 # Disable CONFIG_CMD_LICENSE, license.h is not used by tools and
15 # generating it requires bin2header tool, which for target build
16 # is built with target tools and thus cannot be executed on host.
17 sed -i -e "s/CONFIG_CMD_LICENSE=.*/# CONFIG_CMD_LICENSE is not set/" ${SED_CONFIG_EFI} ${B}/.config
18
19 oe_runmake -C ${S} cross_tools NO_SDL=1 O=${B}
20}
21
diff --git a/meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx-2023.2.inc b/meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx-2023.2.inc
new file mode 100644
index 00000000..0cfbd846
--- /dev/null
+++ b/meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx-2023.2.inc
@@ -0,0 +1,17 @@
1UBOOT_VERSION = "v2023.01"
2
3UBRANCH = "xlnx_rebase_v2023.01"
4
5SRCREV = "0fc19cad5a07a09958443e7a5b6f11e420ef195c"
6
7LICENSE = "GPL-2.0-or-later"
8LIC_FILES_CHKSUM = "file://README;beginline=1;endline=4;md5=744e7e3bb0c94b4b9f6b3db3bf893897"
9
10# u-boot-xlnx has support for these
11HAS_PLATFORM_INIT ?= " \
12 xilinx_zynqmp_virt_config \
13 xilinx_zynq_virt_defconfig \
14 xilinx_versal_vc_p_a2197_revA_x_prc_01_revA \
15 "
16
17DEPENDS += "bc-native dtc-native python3-setuptools-native gnutls-native"
diff --git a/meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx-blob.inc b/meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx-blob.inc
index 86ba4fc6..bbf4125f 100644
--- a/meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx-blob.inc
+++ b/meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx-blob.inc
@@ -101,7 +101,7 @@ do_blob_generate () {
101 BASE_DTB=$(echo $CC_DTB | cut -d: -f2) 101 BASE_DTB=$(echo $CC_DTB | cut -d: -f2)
102 OUTPUT_DTB=$(echo $CC_DTB | cut -d: -f3) 102 OUTPUT_DTB=$(echo $CC_DTB | cut -d: -f3)
103 if [ "${SYSTEM_DTB_BLOB}" = "1" ]; then 103 if [ "${SYSTEM_DTB_BLOB}" = "1" ]; then
104 BASE_SYS_DTB="${RECIPE_SYSROOT}/${DTB_PATH}/${DTB_NAME}" 104 BASE_SYS_DTB="${RECIPE_SYSROOT}/${DTB_PATH}/${DTB_FILE_NAME}"
105 else 105 else
106 BASE_SYS_DTB="${B}/arch/arm/dts/${BASE_DTB}" 106 BASE_SYS_DTB="${B}/arch/arm/dts/${BASE_DTB}"
107 fi 107 fi
@@ -125,13 +125,13 @@ do_blob_generate () {
125 its_filename="dtblob.its" 125 its_filename="dtblob.its"
126 dtblob_emit_its_section "${its_filename}" "header" 126 dtblob_emit_its_section "${its_filename}" "header"
127 dtblob_emit_its_section "${its_filename}" "imagestart" 127 dtblob_emit_its_section "${its_filename}" "imagestart"
128 for dtb in ${RECIPE_SYSROOT}/${DTB_PATH}/${DTB_NAME} $(find ${DT_BLOB_DIR} -name '*.dtb' | sort); do 128 for dtb in ${RECIPE_SYSROOT}/${DTB_PATH}/${DTB_FILE_NAME} $(find ${DT_BLOB_DIR} -name '*.dtb' | sort); do
129 dtblob_emit_dtb "${its_filename}" "$(basename $dtb .dtb)" "$dtb" 129 dtblob_emit_dtb "${its_filename}" "$(basename $dtb .dtb)" "$dtb"
130 done 130 done
131 dtblob_emit_its_section "${its_filename}" "sectend" 131 dtblob_emit_its_section "${its_filename}" "sectend"
132 dtblob_emit_its_section "${its_filename}" "confstart" 132 dtblob_emit_its_section "${its_filename}" "confstart"
133 dtbcount=1 133 dtbcount=1
134 for dtb in ${RECIPE_SYSROOT}/${DTB_PATH}/${DTB_NAME} $(find ${DT_BLOB_DIR} -name '*.dtb' | sort); do 134 for dtb in ${RECIPE_SYSROOT}/${DTB_PATH}/${DTB_FILE_NAME} $(find ${DT_BLOB_DIR} -name '*.dtb' | sort); do
135 dtblob_emit_config "${its_filename}" "$(basename $dtb .dtb)" "$(basename $dtb .dtb)" "$dtbcount" 135 dtblob_emit_config "${its_filename}" "$(basename $dtb .dtb)" "$(basename $dtb .dtb)" "$dtbcount"
136 dtbcount=`expr $dtbcount + 1` 136 dtbcount=`expr $dtbcount + 1`
137 done 137 done
@@ -143,6 +143,8 @@ do_blob_generate () {
143 bbnote "Node ${DT_BLOB_DIR}/${DTB} with ${DT_BLOB_DIR}/${DUP_DTB}" 143 bbnote "Node ${DT_BLOB_DIR}/${DTB} with ${DT_BLOB_DIR}/${DUP_DTB}"
144 dtblob_emit_config "${its_filename}" "$DTB" "$DUP_DTB" "$dtbcount" 144 dtblob_emit_config "${its_filename}" "$DTB" "$DUP_DTB" "$dtbcount"
145 dtbcount=`expr $dtbcount + 1` 145 dtbcount=`expr $dtbcount + 1`
146 else
147 bberror "CC_DTBS_DUP file not found ${DT_BLOB_DIR}/${DTB}.dtb"
146 fi 148 fi
147 done 149 done
148 150
diff --git a/meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx-scr.bb b/meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx-scr.bb
index afa4de23..6410fc25 100644
--- a/meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx-scr.bb
+++ b/meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx-scr.bb
@@ -71,7 +71,14 @@ DEVICETREE_OFFSET:zynqmp ??= "0x100000"
71DEVICETREE_OFFSET:zynq ??= "0x100000" 71DEVICETREE_OFFSET:zynq ??= "0x100000"
72DEVICETREE_OFFSET:versal ??= "0x1000" 72DEVICETREE_OFFSET:versal ??= "0x1000"
73 73
74DEVICETREE_OVERLAY_ADDRESS ?= "${@hex(int(d.getVar("DEVICETREE_ADDRESS"),16) + 0xf00000)}" 74DEVICETREE_OVERLAY_OFFSET:microblaze ??= "0x1e00000"
75DEVICETREE_OVERLAY_OFFSET:zynqmp ??= "0x100000"
76DEVICETREE_OVERLAY_OFFSET:zynq ??= "0x100000"
77DEVICETREE_OVERLAY_OFFSET:versal ??= "0x1000"
78DEVICETREE_OVERLAY_PADSIZE ??= "0xf00000"
79
80DEVICETREE_OVERLAY_ADDRESS ?= "${@hex(int(append_baseaddr(d,d.getVar('DEVICETREE_OVERLAY_OFFSET')),16) \
81 + int(d.getVar('DEVICETREE_OVERLAY_PADSIZE'),16))}"
75 82
76KERNEL_LOAD_ADDRESS ?= "${@append_baseaddr(d,d.getVar('KERNEL_OFFSET'))}" 83KERNEL_LOAD_ADDRESS ?= "${@append_baseaddr(d,d.getVar('KERNEL_OFFSET'))}"
77 84
@@ -162,14 +169,8 @@ NAND_FIT_IMAGE_OFFSET ??= "0x4180000"
162NAND_FIT_IMAGE_OFFSET:zynq ??= "0x1080000" 169NAND_FIT_IMAGE_OFFSET:zynq ??= "0x1080000"
163NAND_FIT_IMAGE_SIZE ??= "0x6400000" 170NAND_FIT_IMAGE_SIZE ??= "0x6400000"
164 171
165# Xen boot script variables. Define here and set it from meta-virtualization 172# Add variables as addendum.
166XEN_OFFSET ??= "0xBA00000" 173SCRIPT_SED_ADDENDUM = ""
167XEN_LOAD_ADDRESS ?= "${@append_baseaddr(d,d.getVar('XEN_OFFSET'))}"
168XEN_IMAGE_NAME ??= "xen"
169DOM0_MEM ??= "1500M"
170XEN_SERIAL_CONSOLES ??= "serial0"
171XEN_CMDLINE_APPEND ??= ""
172DOM0_MAX_VCPUS ??= "1"
173 174
174# Default to booting with the rootfs device being partition 2 for SD/eMMC 175# Default to booting with the rootfs device being partition 2 for SD/eMMC
175PARTNUM ?= "2" 176PARTNUM ?= "2"
@@ -181,6 +182,9 @@ KERNEL_ROOT_SD ?= "root=/dev/\${bootdev}${PARTNUM} ro rootwait"
181# Set Kernel root filesystem parameter for JTAG/QSPI/OSPI/NAND(using RAMDISK) boot 182# Set Kernel root filesystem parameter for JTAG/QSPI/OSPI/NAND(using RAMDISK) boot
182KERNEL_ROOT_RAMDISK ?= "root=/dev/ram0 rw" 183KERNEL_ROOT_RAMDISK ?= "root=/dev/ram0 rw"
183 184
185# Append the kernel command line
186KERNEL_COMMAND_APPEND ?= ""
187
184BITSTREAM_LOAD_ADDRESS ?= "0x100000" 188BITSTREAM_LOAD_ADDRESS ?= "0x100000"
185 189
186do_configure[noexec] = "1" 190do_configure[noexec] = "1"
@@ -189,6 +193,9 @@ def append_baseaddr(d,offset):
189 skip_append = d.getVar('SKIP_APPEND_BASEADDR') or "" 193 skip_append = d.getVar('SKIP_APPEND_BASEADDR') or ""
190 if skip_append == "1": 194 if skip_append == "1":
191 return offset 195 return offset
196 if offset.startswith('$'):
197 # If offset startswith '$' Assuming as uboot env variable.
198 return offset
192 import subprocess 199 import subprocess
193 baseaddr = d.getVar('DDR_BASEADDR') or "0x0" 200 baseaddr = d.getVar('DDR_BASEADDR') or "0x0"
194 subcmd = "$((%s+%s));" % (baseaddr,offset) 201 subcmd = "$((%s+%s));" % (baseaddr,offset)
@@ -240,13 +247,8 @@ do_compile() {
240 -e 's/@@PARTNUM@@/${PARTNUM}/' \ 247 -e 's/@@PARTNUM@@/${PARTNUM}/' \
241 -e 's:@@KERNEL_ROOT_SD@@:${KERNEL_ROOT_SD}:' \ 248 -e 's:@@KERNEL_ROOT_SD@@:${KERNEL_ROOT_SD}:' \
242 -e 's:@@KERNEL_ROOT_RAMDISK@@:${KERNEL_ROOT_RAMDISK}:' \ 249 -e 's:@@KERNEL_ROOT_RAMDISK@@:${KERNEL_ROOT_RAMDISK}:' \
243 -e 's/@@XEN_IMAGE_NAME@@/${XEN_IMAGE_NAME}/' \ 250 -e 's:@@KERNEL_COMMAND_APPEND@@:${KERNEL_COMMAND_APPEND}:' \
244 -e 's/@@XEN_OFFSET@@/${XEN_OFFSET}/' \ 251 ${SCRIPT_SED_ADDENDUM} \
245 -e 's/@@XEN_LOAD_ADDRESS@@/${XEN_LOAD_ADDRESS}/' \
246 -e 's/@@DOM0_MEM@@/${DOM0_MEM}/' \
247 -e 's/@@DOM0_MAX_VCPUS@@/${DOM0_MAX_VCPUS}/' \
248 -e 's:@@XEN_SERIAL_CONSOLES@@:${XEN_SERIAL_CONSOLES}:' \
249 -e 's:@@XEN_CMDLINE_APPEND@@:${XEN_CMDLINE_APPEND}:' \
250 "${WORKDIR}/boot.cmd.${BOOTMODE}${BOOTFILE_EXT}" > "${WORKDIR}/boot.cmd" 252 "${WORKDIR}/boot.cmd.${BOOTMODE}${BOOTFILE_EXT}" > "${WORKDIR}/boot.cmd"
251 253
252 mkimage -A arm -T script -C none -n "Boot script" -d "${WORKDIR}/boot.cmd" boot.scr 254 mkimage -A arm -T script -C none -n "Boot script" -d "${WORKDIR}/boot.cmd" boot.scr
diff --git a/meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx-scr/boot.cmd.generic b/meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx-scr/boot.cmd.generic
index ff2a5688..d99932ed 100644
--- a/meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx-scr/boot.cmd.generic
+++ b/meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx-scr/boot.cmd.generic
@@ -9,10 +9,16 @@ ramdisk_name=@@RAMDISK_IMAGE1@@
9rootfs_name=@@RAMDISK_IMAGE@@ 9rootfs_name=@@RAMDISK_IMAGE@@
10@@PRE_BOOTENV@@ 10@@PRE_BOOTENV@@
11 11
12
13setenv get_bootargs 'fdt addr $fdtcontroladdr;fdt get value bootargs /chosen bootargs;'
14setenv update_bootargs 'if test -n ${launch_ramdisk_init} && test ${bootargs} = "";then if run get_bootargs;then setenv bootargs "\$bootargs launch_ramdisk_init=${launch_ramdisk_init} $extrabootargs";fi;fi'
15
16
12for boot_target in ${boot_targets}; 17for boot_target in ${boot_targets};
13do 18do
14 echo "Trying to load boot images from ${boot_target}" 19 echo "Trying to load boot images from ${boot_target}"
15 if test "${boot_target}" = "jtag" ; then 20 if test "${boot_target}" = "jtag" ; then
21 run update_bootargs
16 @@KERNEL_BOOTCMD@@ @@KERNEL_LOAD_ADDRESS@@ @@RAMDISK_IMAGE_ADDRESS@@ @@DEVICETREE_ADDRESS@@ 22 @@KERNEL_BOOTCMD@@ @@KERNEL_LOAD_ADDRESS@@ @@RAMDISK_IMAGE_ADDRESS@@ @@DEVICETREE_ADDRESS@@
17 fi 23 fi
18 if test "${boot_target}" = "mmc0" || test "${boot_target}" = "mmc1" || test "${boot_target}" = "usb0" || test "${boot_target}" = "usb1"; then 24 if test "${boot_target}" = "mmc0" || test "${boot_target}" = "mmc1" || test "${boot_target}" = "usb0" || test "${boot_target}" = "usb1"; then
@@ -34,6 +40,7 @@ do
34 fi 40 fi
35 if test -e ${devtype} ${devnum}:${distro_bootpart} /system.dtb; then 41 if test -e ${devtype} ${devnum}:${distro_bootpart} /system.dtb; then
36 fatload ${devtype} ${devnum}:${distro_bootpart} @@DEVICETREE_ADDRESS@@ system.dtb; 42 fatload ${devtype} ${devnum}:${distro_bootpart} @@DEVICETREE_ADDRESS@@ system.dtb;
43 setenv fdtcontroladdr @@DEVICETREE_ADDRESS@@
37 fi 44 fi
38 if test -e ${devtype} ${devnum}:${distro_bootpart} /devicetree/openamp.dtbo; then 45 if test -e ${devtype} ${devnum}:${distro_bootpart} /devicetree/openamp.dtbo; then
39 fatload ${devtype} ${devnum}:${distro_bootpart} @@DEVICETREE_OVERLAY_ADDRESS@@ devicetree/openamp.dtbo; 46 fatload ${devtype} ${devnum}:${distro_bootpart} @@DEVICETREE_OVERLAY_ADDRESS@@ devicetree/openamp.dtbo;
@@ -41,6 +48,7 @@ do
41 fdt resize 8192 48 fdt resize 8192
42 fdt apply @@DEVICETREE_OVERLAY_ADDRESS@@ 49 fdt apply @@DEVICETREE_OVERLAY_ADDRESS@@
43 fi 50 fi
51 run update_bootargs
44 if test -e ${devtype} ${devnum}:${distro_bootpart} /${ramdisk_name} && test "${skip_tinyramdisk}" != "yes"; then 52 if test -e ${devtype} ${devnum}:${distro_bootpart} /${ramdisk_name} && test "${skip_tinyramdisk}" != "yes"; then
45 fatload ${devtype} ${devnum}:${distro_bootpart} @@RAMDISK_IMAGE_ADDRESS@@ ${ramdisk_name}; 53 fatload ${devtype} ${devnum}:${distro_bootpart} @@RAMDISK_IMAGE_ADDRESS@@ ${ramdisk_name};
46 @@KERNEL_BOOTCMD@@ @@KERNEL_LOAD_ADDRESS@@ @@RAMDISK_IMAGE_ADDRESS@@ @@DEVICETREE_ADDRESS@@ 54 @@KERNEL_BOOTCMD@@ @@KERNEL_LOAD_ADDRESS@@ @@RAMDISK_IMAGE_ADDRESS@@ @@DEVICETREE_ADDRESS@@
@@ -51,7 +59,7 @@ do
51 fi 59 fi
52 @@KERNEL_BOOTCMD@@ @@KERNEL_LOAD_ADDRESS@@ - @@DEVICETREE_ADDRESS@@ 60 @@KERNEL_BOOTCMD@@ @@KERNEL_LOAD_ADDRESS@@ - @@DEVICETREE_ADDRESS@@
53 fi 61 fi
54 if test "${boot_target}" = "xspi0" || test "${boot_target}" = "qspi" || test "${boot_target}" = "qspi0"; then 62 if test "${boot_target}" = "xspi0" || test "${boot_target}" = "xspi1" || test "${boot_target}" = "qspi" || test "${boot_target}" = "qspi0"; then
55 sf probe 0 0 0; 63 sf probe 0 0 0;
56 sf read @@FIT_IMAGE_LOAD_ADDRESS@@ @@QSPI_FIT_IMAGE_OFFSET@@ @@QSPI_FIT_IMAGE_SIZE@@ 64 sf read @@FIT_IMAGE_LOAD_ADDRESS@@ @@QSPI_FIT_IMAGE_OFFSET@@ @@QSPI_FIT_IMAGE_SIZE@@
57 bootm @@FIT_IMAGE_LOAD_ADDRESS@@; 65 bootm @@FIT_IMAGE_LOAD_ADDRESS@@;
@@ -59,6 +67,7 @@ do
59 67
60 sf read @@KERNEL_LOAD_ADDRESS@@ @@QSPI_KERNEL_OFFSET@@ @@QSPI_KERNEL_SIZE@@ 68 sf read @@KERNEL_LOAD_ADDRESS@@ @@QSPI_KERNEL_OFFSET@@ @@QSPI_KERNEL_SIZE@@
61 sf read @@RAMDISK_IMAGE_ADDRESS@@ @@QSPI_RAMDISK_OFFSET@@ @@QSPI_RAMDISK_SIZE@@ 69 sf read @@RAMDISK_IMAGE_ADDRESS@@ @@QSPI_RAMDISK_OFFSET@@ @@QSPI_RAMDISK_SIZE@@
70 run update_bootargs
62 @@KERNEL_BOOTCMD@@ @@KERNEL_LOAD_ADDRESS@@ @@RAMDISK_IMAGE_ADDRESS@@ @@DEVICETREE_ADDRESS@@; 71 @@KERNEL_BOOTCMD@@ @@KERNEL_LOAD_ADDRESS@@ @@RAMDISK_IMAGE_ADDRESS@@ @@DEVICETREE_ADDRESS@@;
63 echo "Booting using Separate images failed" 72 echo "Booting using Separate images failed"
64 fi 73 fi
@@ -70,6 +79,7 @@ do
70 79
71 nand read @@KERNEL_LOAD_ADDRESS@@ @@NAND_KERNEL_OFFSET@@ @@NAND_KERNEL_SIZE@@ 80 nand read @@KERNEL_LOAD_ADDRESS@@ @@NAND_KERNEL_OFFSET@@ @@NAND_KERNEL_SIZE@@
72 nand read @@RAMDISK_IMAGE_ADDRESS@@ @@NAND_RAMDISK_OFFSET@@ @@NAND_RAMDISK_SIZE@@ 81 nand read @@RAMDISK_IMAGE_ADDRESS@@ @@NAND_RAMDISK_OFFSET@@ @@NAND_RAMDISK_SIZE@@
82 run update_bootargs
73 @@KERNEL_BOOTCMD@@ @@KERNEL_LOAD_ADDRESS@@ @@RAMDISK_IMAGE_ADDRESS@@ @@DEVICETREE_ADDRESS@@; 83 @@KERNEL_BOOTCMD@@ @@KERNEL_LOAD_ADDRESS@@ @@RAMDISK_IMAGE_ADDRESS@@ @@DEVICETREE_ADDRESS@@;
74 echo "Booting using Separate images failed" 84 echo "Booting using Separate images failed"
75 fi 85 fi
diff --git a/meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx-scr/boot.cmd.generic.root b/meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx-scr/boot.cmd.generic.root
index 816707cb..ed12f941 100644
--- a/meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx-scr/boot.cmd.generic.root
+++ b/meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx-scr/boot.cmd.generic.root
@@ -15,7 +15,7 @@ do
15 if test "${boot_target}" = "jtag" ; then 15 if test "${boot_target}" = "jtag" ; then
16 fdt addr @@DEVICETREE_ADDRESS@@ 16 fdt addr @@DEVICETREE_ADDRESS@@
17 fdt get value bootargs /chosen bootargs 17 fdt get value bootargs /chosen bootargs
18 setenv bootargs $bootargs @@KERNEL_ROOT_RAMDISK@@ 18 setenv bootargs $bootargs @@KERNEL_COMMAND_APPEND@@ @@KERNEL_ROOT_RAMDISK@@
19 @@KERNEL_BOOTCMD@@ @@KERNEL_LOAD_ADDRESS@@ @@RAMDISK_IMAGE_ADDRESS@@ @@DEVICETREE_ADDRESS@@ 19 @@KERNEL_BOOTCMD@@ @@KERNEL_LOAD_ADDRESS@@ @@RAMDISK_IMAGE_ADDRESS@@ @@DEVICETREE_ADDRESS@@
20 fi 20 fi
21 if test "${boot_target}" = "mmc0" || test "${boot_target}" = "mmc1" || test "${boot_target}" = "usb0" || test "${boot_target}" = "usb1"; then 21 if test "${boot_target}" = "mmc0" || test "${boot_target}" = "mmc1" || test "${boot_target}" = "usb0" || test "${boot_target}" = "usb1"; then
@@ -65,7 +65,7 @@ do
65 fatload ${devtype} ${devnum}:${distro_bootpart} @@RAMDISK_IMAGE_ADDRESS@@ ${ramdisk_name}; 65 fatload ${devtype} ${devnum}:${distro_bootpart} @@RAMDISK_IMAGE_ADDRESS@@ ${ramdisk_name};
66 fdt addr @@DEVICETREE_ADDRESS@@ 66 fdt addr @@DEVICETREE_ADDRESS@@
67 fdt get value bootargs /chosen bootargs 67 fdt get value bootargs /chosen bootargs
68 setenv bootargs $bootargs @@KERNEL_ROOT_RAMDISK@@ 68 setenv bootargs $bootargs @@KERNEL_COMMAND_APPEND@@ @@KERNEL_ROOT_RAMDISK@@
69 @@KERNEL_BOOTCMD@@ @@KERNEL_LOAD_ADDRESS@@ @@RAMDISK_IMAGE_ADDRESS@@ @@DEVICETREE_ADDRESS@@ 69 @@KERNEL_BOOTCMD@@ @@KERNEL_LOAD_ADDRESS@@ @@RAMDISK_IMAGE_ADDRESS@@ @@DEVICETREE_ADDRESS@@
70 fi 70 fi
71 echo "Checking for /${rootfs_name}" 71 echo "Checking for /${rootfs_name}"
@@ -74,12 +74,12 @@ do
74 fatload ${devtype} ${devnum}:${distro_bootpart} @@RAMDISK_IMAGE_ADDRESS@@ ${rootfs_name}; 74 fatload ${devtype} ${devnum}:${distro_bootpart} @@RAMDISK_IMAGE_ADDRESS@@ ${rootfs_name};
75 fdt addr @@DEVICETREE_ADDRESS@@ 75 fdt addr @@DEVICETREE_ADDRESS@@
76 fdt get value bootargs /chosen bootargs 76 fdt get value bootargs /chosen bootargs
77 setenv bootargs $bootargs @@KERNEL_ROOT_RAMDISK@@ 77 setenv bootargs $bootargs @@KERNEL_COMMAND_APPEND@@ @@KERNEL_ROOT_RAMDISK@@
78 @@KERNEL_BOOTCMD@@ @@KERNEL_LOAD_ADDRESS@@ @@RAMDISK_IMAGE_ADDRESS@@ @@DEVICETREE_ADDRESS@@ 78 @@KERNEL_BOOTCMD@@ @@KERNEL_LOAD_ADDRESS@@ @@RAMDISK_IMAGE_ADDRESS@@ @@DEVICETREE_ADDRESS@@
79 fi 79 fi
80 fdt addr @@DEVICETREE_ADDRESS@@ 80 fdt addr @@DEVICETREE_ADDRESS@@
81 fdt get value bootargs /chosen bootargs 81 fdt get value bootargs /chosen bootargs
82 setenv bootargs $bootargs @@KERNEL_ROOT_SD@@ 82 setenv bootargs $bootargs @@KERNEL_COMMAND_APPEND@@ @@KERNEL_ROOT_SD@@
83 @@KERNEL_BOOTCMD@@ @@KERNEL_LOAD_ADDRESS@@ - @@DEVICETREE_ADDRESS@@ 83 @@KERNEL_BOOTCMD@@ @@KERNEL_LOAD_ADDRESS@@ - @@DEVICETREE_ADDRESS@@
84 fi 84 fi
85 if test "${boot_target}" = "xspi0" || test "${boot_target}" = "qspi" || test "${boot_target}" = "qspi0"; then 85 if test "${boot_target}" = "xspi0" || test "${boot_target}" = "qspi" || test "${boot_target}" = "qspi0"; then
@@ -93,7 +93,7 @@ do
93 sf read @@RAMDISK_IMAGE_ADDRESS@@ @@QSPI_RAMDISK_OFFSET@@ @@QSPI_RAMDISK_SIZE@@ 93 sf read @@RAMDISK_IMAGE_ADDRESS@@ @@QSPI_RAMDISK_OFFSET@@ @@QSPI_RAMDISK_SIZE@@
94 fdt addr @@DEVICETREE_ADDRESS@@ 94 fdt addr @@DEVICETREE_ADDRESS@@
95 fdt get value bootargs /chosen bootargs 95 fdt get value bootargs /chosen bootargs
96 setenv bootargs $bootargs @@KERNEL_ROOT_RAMDISK@@ 96 setenv bootargs $bootargs @@KERNEL_COMMAND_APPEND@@ @@KERNEL_ROOT_RAMDISK@@
97 @@KERNEL_BOOTCMD@@ @@KERNEL_LOAD_ADDRESS@@ @@RAMDISK_IMAGE_ADDRESS@@ @@DEVICETREE_ADDRESS@@; 97 @@KERNEL_BOOTCMD@@ @@KERNEL_LOAD_ADDRESS@@ @@RAMDISK_IMAGE_ADDRESS@@ @@DEVICETREE_ADDRESS@@;
98 echo "Booting using Separate images failed" 98 echo "Booting using Separate images failed"
99 fi 99 fi
@@ -108,7 +108,7 @@ do
108 nand read @@RAMDISK_IMAGE_ADDRESS@@ @@NAND_RAMDISK_OFFSET@@ @@NAND_RAMDISK_SIZE@@ 108 nand read @@RAMDISK_IMAGE_ADDRESS@@ @@NAND_RAMDISK_OFFSET@@ @@NAND_RAMDISK_SIZE@@
109 fdt addr @@DEVICETREE_ADDRESS@@ 109 fdt addr @@DEVICETREE_ADDRESS@@
110 fdt get value bootargs /chosen bootargs 110 fdt get value bootargs /chosen bootargs
111 setenv bootargs $bootargs @@KERNEL_ROOT_RAMDISK@@ 111 setenv bootargs $bootargs @@KERNEL_COMMAND_APPEND@@ @@KERNEL_ROOT_RAMDISK@@
112 @@KERNEL_BOOTCMD@@ @@KERNEL_LOAD_ADDRESS@@ @@RAMDISK_IMAGE_ADDRESS@@ @@DEVICETREE_ADDRESS@@; 112 @@KERNEL_BOOTCMD@@ @@KERNEL_LOAD_ADDRESS@@ @@RAMDISK_IMAGE_ADDRESS@@ @@DEVICETREE_ADDRESS@@;
113 echo "Booting using Separate images failed" 113 echo "Booting using Separate images failed"
114 fi 114 fi
diff --git a/meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx.inc b/meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx.inc
index 10dfbb60..4c7ea934 100644
--- a/meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx.inc
+++ b/meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx.inc
@@ -9,7 +9,7 @@ SYSROOT_DIRS += "/boot"
9 9
10BASE_DTS ?= "${@os.path.basename(d.getVar('CONFIG_DTFILE') or '').rstrip('.dtb').rstrip('.dts') or 'system-top'}" 10BASE_DTS ?= "${@os.path.basename(d.getVar('CONFIG_DTFILE') or '').rstrip('.dtb').rstrip('.dts') or 'system-top'}"
11DTB_PATH ?= "boot/devicetree/" 11DTB_PATH ?= "boot/devicetree/"
12DTB_NAME ?= "" 12DTB_FILE_NAME ?= ""
13 13
14# This vairable is used for U-boot user specified dts from u-boot repo path 14# This vairable is used for U-boot user specified dts from u-boot repo path
15# u-boot-xlnx/arch/arm/dts/versal-vck190-revA-x-ebm-01-revA.dts. 15# u-boot-xlnx/arch/arm/dts/versal-vck190-revA-x-ebm-01-revA.dts.
@@ -17,7 +17,7 @@ DTB_NAME ?= ""
17# Example: UBOOT_USER_SPECIFIED_DTS = "versal-vck190-revA-x-ebm-01-revA" 17# Example: UBOOT_USER_SPECIFIED_DTS = "versal-vck190-revA-x-ebm-01-revA"
18UBOOT_USER_SPECIFIED_DTS ?= "" 18UBOOT_USER_SPECIFIED_DTS ?= ""
19 19
20EXTRA_OEMAKE += "${@'EXT_DTB=${RECIPE_SYSROOT}/${DTB_PATH}/${DTB_NAME}' if (d.getVar('DTB_NAME') != '' and d.getVar('UBOOT_USER_SPECIFIED_DTS') == '') else '' }" 20EXTRA_OEMAKE += "${@'EXT_DTB=${RECIPE_SYSROOT}/${DTB_PATH}/${DTB_FILE_NAME}' if (d.getVar('DTB_FILE_NAME') != '' and d.getVar('UBOOT_USER_SPECIFIED_DTS') == '') else '' }"
21EXTRA_OEMAKE += "${@'DEVICE_TREE=${UBOOT_USER_SPECIFIED_DTS}' if (d.getVar('UBOOT_USER_SPECIFIED_DTS') != '') else '' }" 21EXTRA_OEMAKE += "${@'DEVICE_TREE=${UBOOT_USER_SPECIFIED_DTS}' if (d.getVar('UBOOT_USER_SPECIFIED_DTS') != '') else '' }"
22 22
23python __anonymous () { 23python __anonymous () {
@@ -25,8 +25,8 @@ python __anonymous () {
25 providerdtb = d.getVar("PREFERRED_PROVIDER_virtual/dtb") 25 providerdtb = d.getVar("PREFERRED_PROVIDER_virtual/dtb")
26 if providerdtb: 26 if providerdtb:
27 d.appendVarFlag('do_configure', 'depends', ' virtual/dtb:do_populate_sysroot') 27 d.appendVarFlag('do_configure', 'depends', ' virtual/dtb:do_populate_sysroot')
28 if d.getVar("DTB_NAME") is not None: 28 if d.getVar("DTB_FILE_NAME") is not None:
29 d.setVar('DTB_NAME', d.getVar('BASE_DTS')+ '.dtb') 29 d.setVar('DTB_FILE_NAME', d.getVar('BASE_DTS')+ '.dtb')
30} 30}
31 31
32do_configure:prepend () { 32do_configure:prepend () {
diff --git a/meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx_2023.2.bb b/meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx_2023.2.bb
new file mode 100644
index 00000000..22075424
--- /dev/null
+++ b/meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx_2023.2.bb
@@ -0,0 +1,4 @@
1
2require u-boot-xlnx.inc
3require u-boot-spl-zynq-init.inc
4require u-boot-xlnx-2023.2.inc
diff --git a/meta-xilinx-core/recipes-devtools/qemu/qemu-devicetrees_2023.2.bb b/meta-xilinx-core/recipes-devtools/qemu/qemu-devicetrees_2023.2.bb
new file mode 100644
index 00000000..d41743c1
--- /dev/null
+++ b/meta-xilinx-core/recipes-devtools/qemu/qemu-devicetrees_2023.2.bb
@@ -0,0 +1,6 @@
1
2require qemu-devicetrees.inc
3
4BRANCH ?= "xlnx_rel_v2023.2"
5SRCREV ?= "d1013382d9a5ef816cd020e7840813b7a2d65c51"
6
diff --git a/meta-xilinx-core/recipes-devtools/qemu/qemu-xilinx-2023.2.inc b/meta-xilinx-core/recipes-devtools/qemu/qemu-xilinx-2023.2.inc
new file mode 100644
index 00000000..db6e1528
--- /dev/null
+++ b/meta-xilinx-core/recipes-devtools/qemu/qemu-xilinx-2023.2.inc
@@ -0,0 +1,3 @@
1XILINX_QEMU_VERSION = "v7.1.0"
2BRANCH = "xlnx_rel_v2023.2"
3SRCREV = "23b643ba1683a47ef49447a45643fe2172d6f8ca"
diff --git a/meta-xilinx-core/recipes-devtools/qemu/qemu-xilinx-native_2023.2.bb b/meta-xilinx-core/recipes-devtools/qemu/qemu-xilinx-native_2023.2.bb
new file mode 100644
index 00000000..ccfa9956
--- /dev/null
+++ b/meta-xilinx-core/recipes-devtools/qemu/qemu-xilinx-native_2023.2.bb
@@ -0,0 +1,9 @@
1require qemu-xilinx-2023.2.inc
2require qemu-xilinx-native-7.1.inc
3require qemu-native-alt.inc
4
5BPN = "qemu-xilinx"
6
7EXTRA_OECONF:append = " --target-list=${@get_qemu_usermode_target_list(d)} --disable-tools --disable-blobs --disable-guest-agent"
8
9PACKAGECONFIG ??= "pie"
diff --git a/meta-xilinx-core/recipes-devtools/qemu/qemu-xilinx-system-native_2023.2.bb b/meta-xilinx-core/recipes-devtools/qemu/qemu-xilinx-system-native_2023.2.bb
new file mode 100644
index 00000000..21208f72
--- /dev/null
+++ b/meta-xilinx-core/recipes-devtools/qemu/qemu-xilinx-system-native_2023.2.bb
@@ -0,0 +1,26 @@
1require qemu-system-native-alt.inc
2require qemu-xilinx-2023.2.inc
3require qemu-xilinx-native-7.1.inc
4
5PROVIDES = "qemu-system-native"
6
7EXTRA_OECONF:append = " --target-list=${@get_qemu_system_target_list(d)}"
8
9PACKAGECONFIG ??= "fdt alsa kvm gcrypt pie slirp"
10
11PACKAGECONFIG:remove = "${@'kvm' if not os.path.exists('/usr/include/linux/kvm.h') else ''}"
12
13DEPENDS += "pixman-native qemu-xilinx-native bison-native ninja-native meson-native"
14DEPENDS += "qemu-xilinx-multiarch-helper-native"
15
16do_install:append() {
17 # The following is also installed by qemu-native
18 rm -f ${D}${datadir}/qemu/trace-events-all
19 rm -rf ${D}${datadir}/qemu/keymaps
20 rm -rf ${D}${datadir}/icons
21 rm -rf ${D}${includedir}/qemu-plugin.h
22
23 # Install qmp.py to be used with testimage
24 install -d ${D}${libdir}/qemu-python/qmp/
25 install -D ${S}/python/qemu/qmp/* ${D}${libdir}/qemu-python/qmp/
26}
diff --git a/meta-xilinx-core/recipes-devtools/qemu/qemu-xilinx_2023.2.bb b/meta-xilinx-core/recipes-devtools/qemu/qemu-xilinx_2023.2.bb
new file mode 100644
index 00000000..e79df9d7
--- /dev/null
+++ b/meta-xilinx-core/recipes-devtools/qemu/qemu-xilinx_2023.2.bb
@@ -0,0 +1,26 @@
1require qemu-xilinx-2023.2.inc
2require recipes-devtools/qemu/qemu.inc
3require qemu-xilinx-7.1.inc
4require qemu-alt.inc
5
6# Links to libmali-xlnx, so it becomes MACHINE_ARCH specific
7DEFAULT_PACKAGE_ARCH := "${PACKAGE_ARCH}"
8MALI_PACKAGE_ARCH[vardepsexclude] = "MACHINE_ARCH"
9MALI_PACKAGE_ARCH = "${@'${MACHINE_ARCH}' if d.getVar('PREFERRED_PROVIDER_virtual/libgles1') == 'libmali-xlnx' else '${DEFAULT_PACKAGE_ARCH}'}"
10PACKAGE_ARCH[vardepsexclude] = "MALI_PACKAGE_ARCH"
11PACKAGE_ARCH:class-target = "${@bb.utils.contains_any('DEPENDS', 'libepoxy virglrenderer', '${MALI_PACKAGE_ARCH}', '${DEFAULT_PACKAGE_ARCH}', d)}"
12
13BBCLASSEXTEND = "nativesdk"
14
15RDEPENDS:${PN}:class-target += "bash"
16
17PROVIDES:class-nativesdk = "nativesdk-qemu"
18RPROVIDES:${PN}:class-nativesdk = "nativesdk-qemu"
19
20EXTRA_OECONF:append:class-target = " --target-list=${@get_qemu_target_list(d)}"
21EXTRA_OECONF:append:class-nativesdk = " --target-list=${@get_qemu_target_list(d)}"
22EXTRA_OECONF:append:class-target:mipsarcho32 = "${@bb.utils.contains('BBEXTENDCURR', 'multilib', ' --disable-capstone', '', d)}"
23
24do_install:append:class-nativesdk() {
25 ${@bb.utils.contains('PACKAGECONFIG', 'gtk+', 'make_qemu_wrapper', '', d)}
26}
diff --git a/meta-xilinx-core/recipes-graphics/libgles/libmali-xlnx.bb b/meta-xilinx-core/recipes-graphics/libgles/libmali-xlnx.bb
index 07de26dc..db99c4d7 100644
--- a/meta-xilinx-core/recipes-graphics/libgles/libmali-xlnx.bb
+++ b/meta-xilinx-core/recipes-graphics/libgles/libmali-xlnx.bb
@@ -13,7 +13,7 @@ PROVIDES += "virtual/libgles1 virtual/libgles2 virtual/egl virtual/libgbm"
13FILESEXTRAPATHS:prepend := "${THISDIR}/files:" 13FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
14 14
15REPO ?= "git://github.com/Xilinx/mali-userspace-binaries.git;protocol=https" 15REPO ?= "git://github.com/Xilinx/mali-userspace-binaries.git;protocol=https"
16BRANCH ?= "xlnx_rel_v2023.1" 16BRANCH ?= "xlnx_rel_v2023.2"
17SRCREV ?= "b3a772aad859cdadc8513b11c3e995546c20e75e" 17SRCREV ?= "b3a772aad859cdadc8513b11c3e995546c20e75e"
18BRANCHARG = "${@['nobranch=1', 'branch=${BRANCH}'][d.getVar('BRANCH', True) != '']}" 18BRANCHARG = "${@['nobranch=1', 'branch=${BRANCH}'][d.getVar('BRANCH', True) != '']}"
19 19
diff --git a/meta-xilinx-core/recipes-graphics/wayland/weston_%.bbappend b/meta-xilinx-core/recipes-graphics/wayland/weston_%.bbappend
new file mode 100644
index 00000000..ca77f0d3
--- /dev/null
+++ b/meta-xilinx-core/recipes-graphics/wayland/weston_%.bbappend
@@ -0,0 +1,17 @@
1FILESEXTRAPATHS:prepend:zynqmp := "${THISDIR}/files:"
2
3SRC_URI:append:zynqmp = " file://0001-libweston-Remove-substitute-format-for-ARGB8888.patch"
4
5# Due to the SRC_URI zynqmp specific change, this needs to be SOC_FAMILY_ARCH specific
6SOC_FAMILY_ARCH ??= "${TUNE_PKGARCH}"
7DEFAULT_PACKAGE_ARCH := "${PACKAGE_ARCH}"
8DEFAULT_PACKAGE_ARCH:zynqmp = "${SOC_FAMILY_ARCH}"
9PACKAGE_ARCH = "${DEFAULT_PACKAGE_ARCH}"
10
11
12# Links to libmali-xlnx, so it becomes MACHINE_ARCH specific
13DEFAULT_PACKAGE_ARCH := "${PACKAGE_ARCH}"
14MALI_PACKAGE_ARCH[vardepsexclude] = "MACHINE_ARCH"
15MALI_PACKAGE_ARCH = "${@'${MACHINE_ARCH}' if d.getVar('PREFERRED_PROVIDER_virtual/libgles1') == 'libmali-xlnx' else '${DEFAULT_PACKAGE_ARCH}'}"
16PACKAGE_ARCH[vardepsexclude] = "MALI_PACKAGE_ARCH"
17PACKAGE_ARCH = "${@bb.utils.contains_any('DEPENDS', 'virtual/libgles1 virtual/libgles2 virtual/egl virtual/libgbm', '${MALI_PACKAGE_ARCH}', '${DEFAULT_PACKAGE_ARCH}', d)}"
diff --git a/meta-xilinx-core/recipes-graphics/xorg-xserver/xserver-xorg/monitor-hotplug.sh b/meta-xilinx-core/recipes-graphics/xorg-xserver/xserver-xorg/monitor-hotplug.sh
index d603082d..bceb5607 100755
--- a/meta-xilinx-core/recipes-graphics/xorg-xserver/xserver-xorg/monitor-hotplug.sh
+++ b/meta-xilinx-core/recipes-graphics/xorg-xserver/xserver-xorg/monitor-hotplug.sh
@@ -27,12 +27,27 @@ DEVICES=$(find /sys/class/drm/*/status)
27 27
28# inspired by /etc/acpd/lid.sh and the function it sources. 28# inspired by /etc/acpd/lid.sh and the function it sources.
29 29
30displaynum=`ls /tmp/.X11-unix/* | sed s#/tmp/.X11-unix/X##` 30# Read first X display number from the list.
31displaynum=`ls /tmp/.X11-unix/* | sed s#/tmp/.X11-unix/X## | head -n 1`
32displaynum=${displaynum%% *}
33
31display=":$displaynum.0" 34display=":$displaynum.0"
32export DISPLAY=":$displaynum.0" 35export DISPLAY=":$displaynum.0"
33 36
34# from https://wiki.archlinux.org/index.php/Acpid#Laptop_Monitor_Power_Off 37# from https://wiki.archlinux.org/index.php/Acpid#Laptop_Monitor_Power_Off
35export XAUTHORITY=$(ps -C Xorg -f --no-header | sed -n 's/.*-auth //; s/ -[^ ].*//; p') 38
39# Clear XAUTHORITY by default in case X session is not using display manager.
40unset XAUTHORITY
41
42# Detect X session command line started for the display $displaynum and extract
43# -auth argument if any.
44ps -eo args | grep -e "Xorg\W*:$displaynum" | grep -e -auth | while read -r line
45do
46 if [[ "${line%% *}" == *Xorg ]]; then
47 export XAUTHORITY=`echo $line | sed -n 's/.*-auth //; s/ -[^ ].*//; p'`
48 break
49 fi
50done
36 51
37for i in /sys/class/drm/*/*/status ; 52for i in /sys/class/drm/*/*/status ;
38do 53do
diff --git a/meta-xilinx-core/recipes-graphics/xorg-xserver/xserver-xorg_%.bbappend b/meta-xilinx-core/recipes-graphics/xorg-xserver/xserver-xorg_%.bbappend
index 460ff581..7486200d 100644
--- a/meta-xilinx-core/recipes-graphics/xorg-xserver/xserver-xorg_%.bbappend
+++ b/meta-xilinx-core/recipes-graphics/xorg-xserver/xserver-xorg_%.bbappend
@@ -17,7 +17,7 @@ do_install:append() {
17 install -m 0755 ${WORKDIR}/monitor-hotplug.sh ${D}${bindir} 17 install -m 0755 ${WORKDIR}/monitor-hotplug.sh ${D}${bindir}
18 18
19 install -d ${D}${sysconfdir}/udev/rules.d 19 install -d ${D}${sysconfdir}/udev/rules.d
20 install -m 0644 ${WORKDIR}/99-monitor-hotplug.rules ${D}${sysconfdir}/udev/rules.d/99-monitor-hotplug.rules 20 install -m 0644 ${WORKDIR}/99-monitor-hotplug.rules ${D}${sysconfdir}/udev/rules.d/local.rules
21} 21}
22 22
23FILES:${PN} += "${sysconfdir}/udev/rules.d/*" 23FILES:${PN} += "${sysconfdir}/udev/rules.d/*"
diff --git a/meta-xilinx-core/recipes-kernel/dp/kernel-module-dp_2023.2.bb b/meta-xilinx-core/recipes-kernel/dp/kernel-module-dp_2023.2.bb
new file mode 100644
index 00000000..d1c6bd3d
--- /dev/null
+++ b/meta-xilinx-core/recipes-kernel/dp/kernel-module-dp_2023.2.bb
@@ -0,0 +1,24 @@
1SUMMARY = "Xilinx DisplayPort Linux Kernel module"
2DESCRIPTION = "Out-of-tree DisplayPort(DP) kernel modules provider for aarch64 devices"
3SECTION = "kernel/modules"
4LICENSE = "GPL-2.0-only"
5LIC_FILES_CHKSUM = "file://LICENSE.md;md5=eb723b61539feef013de476e68b5c50a"
6
7XLNX_DP_VERSION = "6.1.0"
8PV = "${XLNX_DP_VERSION}+xilinx-v${@bb.parse.vars_from_file(d.getVar('FILE', False),d)[1] or ''}+git${SRCPV}"
9
10S = "${WORKDIR}/git"
11
12BRANCH ?= "xlnx_rel_v2023.2"
13REPO ?= "git://github.com/xilinx/dp-modules.git;protocol=https"
14SRCREV ?= "5b0969ac09f301c33bccc140c8f60e832f5cf222"
15
16BRANCHARG = "${@['nobranch=1', 'branch=${BRANCH}'][d.getVar('BRANCH', True) != '']}"
17SRC_URI = "${REPO};${BRANCHARG}"
18
19inherit module
20
21EXTRA_OEMAKE += "O=${STAGING_KERNEL_BUILDDIR}"
22COMPATIBLE_MACHINE = "^$"
23COMPATIBLE_MACHINE:zynqmp = "zynqmp"
24COMPATIBLE_MACHINE:versal = "versal"
diff --git a/meta-xilinx-core/recipes-kernel/hdmi/kernel-module-hdmi_2023.2.bb b/meta-xilinx-core/recipes-kernel/hdmi/kernel-module-hdmi_2023.2.bb
new file mode 100644
index 00000000..bc89f5f3
--- /dev/null
+++ b/meta-xilinx-core/recipes-kernel/hdmi/kernel-module-hdmi_2023.2.bb
@@ -0,0 +1,24 @@
1SUMMARY = "Xilinx HDMI Linux Kernel module"
2DESCRIPTION = "Out-of-tree HDMI kernel modules provider for MPSoC EG/EV devices"
3SECTION = "kernel/modules"
4LICENSE = "GPL-2.0-only"
5LIC_FILES_CHKSUM = "file://LICENSE.md;md5=b34277fe156508fd5a650609dc36d1fe"
6
7XLNX_HDMI_VERSION = "6.1"
8PV = "${XLNX_HDMI_VERSION}+xilinx-v${@bb.parse.vars_from_file(d.getVar('FILE', False),d)[1] or ''}+git${SRCPV}"
9
10S = "${WORKDIR}/git"
11
12BRANCH ?= "xlnx_rel_v2023.2"
13REPO ?= "git://github.com/Xilinx/hdmi-modules.git;protocol=https"
14SRCREV = "82209b0021a7b5d7ef71a859eed4bafeb541ed08"
15
16BRANCHARG = "${@['nobranch=1', 'branch=${BRANCH}'][d.getVar('BRANCH', True) != '']}"
17SRC_URI = "${REPO};${BRANCHARG}"
18
19inherit module
20
21EXTRA_OEMAKE += "O=${STAGING_KERNEL_BUILDDIR}"
22COMPATIBLE_MACHINE = "^$"
23COMPATIBLE_MACHINE:zynqmp = "zynqmp"
24COMPATIBLE_MACHINE:versal = "versal"
diff --git a/meta-xilinx-core/recipes-kernel/linux/linux-xlnx_2023.2.bb b/meta-xilinx-core/recipes-kernel/linux/linux-xlnx_2023.2.bb
new file mode 100644
index 00000000..8842cb10
--- /dev/null
+++ b/meta-xilinx-core/recipes-kernel/linux/linux-xlnx_2023.2.bb
@@ -0,0 +1,11 @@
1LINUX_VERSION = "6.1.30"
2YOCTO_META ?= "git://git.yoctoproject.org/yocto-kernel-cache;type=kmeta;name=meta;branch=yocto-6.1;destsuffix=yocto-kmeta"
3KBRANCH="xlnx_rebase_v6.1_LTS"
4SRCREV = "a19da02cf5b44420ec6afb1eef348c21d9e8cda2"
5SRCREV_meta = "185bcfcbe480c742247d9117011794c69682914f"
6
7KCONF_AUDIT_LEVEL="0"
8
9include linux-xlnx.inc
10
11FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
diff --git a/meta-xilinx-core/recipes-multimedia/vcu/kernel-module-vcu_2023.2.bb b/meta-xilinx-core/recipes-multimedia/vcu/kernel-module-vcu_2023.2.bb
new file mode 100644
index 00000000..e8bd3397
--- /dev/null
+++ b/meta-xilinx-core/recipes-multimedia/vcu/kernel-module-vcu_2023.2.bb
@@ -0,0 +1,39 @@
1SUMMARY = "Linux kernel module for Video Code Unit"
2DESCRIPTION = "Out-of-tree VCU decoder, encoder and common kernel modules provider for MPSoC EV devices"
3SECTION = "kernel/modules"
4LICENSE = "GPL-2.0-only"
5LIC_FILES_CHKSUM = "file://LICENSE.md;md5=eb723b61539feef013de476e68b5c50a"
6
7XILINX_VCU_VERSION = "1.0.0"
8PV = "${XILINX_VCU_VERSION}-xilinx-v${@bb.parse.vars_from_file(d.getVar('FILE', False),d)[1] or ''}+git${SRCPV}"
9
10S = "${WORKDIR}/git"
11
12FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
13
14BRANCH = "xlnx_rel_v2023.2"
15REPO = "git://github.com/Xilinx/vcu-modules.git;protocol=https"
16SRCREV = "689c8d823b383e2a8a5249be49de627f866cfaf2"
17
18BRANCHARG = "${@['nobranch=1', 'branch=${BRANCH}'][d.getVar('BRANCH', True) != '']}"
19SRC_URI = " \
20 ${REPO};${BRANCHARG} \
21 file://99-vcu-enc-dec.rules \
22 "
23
24inherit module features_check
25
26REQUIRED_MACHINE_FEATURES = "vcu"
27
28EXTRA_OEMAKE += "O=${STAGING_KERNEL_BUILDDIR}"
29
30RDEPENDS:${PN} = "vcu-firmware"
31
32KERNEL_MODULE_AUTOLOAD += "dmaproxy"
33
34do_install:append() {
35 install -d ${D}${sysconfdir}/udev/rules.d
36 install -m 0644 ${WORKDIR}/99-vcu-enc-dec.rules ${D}${sysconfdir}/udev/rules.d/
37}
38
39FILES:${PN} = "${sysconfdir}/udev/rules.d/*"
diff --git a/meta-xilinx-core/recipes-multimedia/vcu/libomxil-xlnx_2023.2.bb b/meta-xilinx-core/recipes-multimedia/vcu/libomxil-xlnx_2023.2.bb
new file mode 100644
index 00000000..2c77e2b4
--- /dev/null
+++ b/meta-xilinx-core/recipes-multimedia/vcu/libomxil-xlnx_2023.2.bb
@@ -0,0 +1,50 @@
1SUMMARY = "OpenMAX Integration layer for VCU"
2DESCRIPTION = "OMX IL Libraries,test applications and headers for VCU"
3LICENSE = "MIT"
4LIC_FILES_CHKSUM = "file://LICENSE.md;md5=ef69c2bb405668101824f0b644631e2e"
5
6XILINX_VCU_VERSION = "1.0.0"
7PV = "${XILINX_VCU_VERSION}-xilinx-v${@bb.parse.vars_from_file(d.getVar('FILE', False),d)[1] or ''}+git${SRCPV}"
8
9BRANCH ?= "xlnx_rel_v2023.2"
10REPO ?= "git://github.com/Xilinx/vcu-omx-il.git;protocol=https"
11SRCREV = "3a04b5adc661a0eced626c1373dbbfe699ae6fe0"
12
13BRANCHARG = "${@['nobranch=1', 'branch=${BRANCH}'][d.getVar('BRANCH', True) != '']}"
14SRC_URI = "${REPO};${BRANCHARG}"
15
16S = "${WORKDIR}/git"
17
18inherit features_check
19
20REQUIRED_MACHINE_FEATURES = "vcu"
21
22PACKAGE_ARCH = "${MACHINE_ARCH}"
23
24DEPENDS = "libvcu-xlnx"
25RDEPENDS:${PN} = "kernel-module-vcu libvcu-xlnx"
26
27EXTERNAL_INCLUDE="${STAGING_INCDIR}/vcu-ctrl-sw/include"
28
29EXTRA_OEMAKE = " \
30 CC='${CC}' CXX='${CXX} ${CXXFLAGS}' \
31 EXTERNAL_INCLUDE='${EXTERNAL_INCLUDE}' \
32 "
33
34do_install() {
35 install -d ${D}${libdir}
36 install -d ${D}${includedir}/vcu-omx-il
37
38 install -m 0644 ${S}/omx_header/*.h ${D}${includedir}/vcu-omx-il
39
40 oe_runmake install INSTALL_PATH=${D}${bindir}
41
42 oe_libinstall -C ${S}/bin/ -so libOMX.allegro.core ${D}/${libdir}/
43 oe_libinstall -C ${S}/bin/ -so libOMX.allegro.video_decoder ${D}/${libdir}/
44 oe_libinstall -C ${S}/bin/ -so libOMX.allegro.video_encoder ${D}/${libdir}/
45}
46
47# These libraries shouldn't get installed in world builds unless something
48# explicitly depends upon them.
49
50EXCLUDE_FROM_WORLD = "1"
diff --git a/meta-xilinx-core/recipes-multimedia/vcu/libvcu-xlnx_2023.2.bb b/meta-xilinx-core/recipes-multimedia/vcu/libvcu-xlnx_2023.2.bb
new file mode 100644
index 00000000..e6d38a4a
--- /dev/null
+++ b/meta-xilinx-core/recipes-multimedia/vcu/libvcu-xlnx_2023.2.bb
@@ -0,0 +1,41 @@
1SUMMARY = "Control Software for VCU"
2DESCRIPTION = "Control software libraries, test applications and headers provider for VCU"
3LICENSE = "MIT"
4LIC_FILES_CHKSUM = "file://LICENSE.md;md5=ef69c2bb405668101824f0b644631e2e"
5
6XILINX_VCU_VERSION = "1.0.0"
7PV = "${XILINX_VCU_VERSION}-xilinx-v${@bb.parse.vars_from_file(d.getVar('FILE', False),d)[1] or ''}+git${SRCPV}"
8
9BRANCH ?= "xlnx_rel_v2023.2"
10REPO ?= "git://github.com/Xilinx/vcu-ctrl-sw.git;protocol=https"
11SRCREV = "84b0856cad7844d69f57ac4d9447c20930875475"
12
13BRANCHARG = "${@['nobranch=1', 'branch=${BRANCH}'][d.getVar('BRANCH', True) != '']}"
14SRC_URI = "${REPO};${BRANCHARG}"
15
16S = "${WORKDIR}/git"
17
18inherit features_check
19
20REQUIRED_MACHINE_FEATURES = "vcu"
21
22RDEPENDS:${PN} = "kernel-module-vcu"
23
24EXTRA_OEMAKE = "CC='${CC}' CXX='${CXX} ${CXXFLAGS}'"
25
26do_install() {
27 install -d ${D}${libdir}
28 install -d ${D}${includedir}/vcu-ctrl-sw/include
29
30 oe_runmake install_headers INSTALL_HDR_PATH=${D}${includedir}/vcu-ctrl-sw/include INSTALL_PATH=${D}/${bindir}
31 oe_libinstall -C ${S}/bin/ -so liballegro_decode ${D}/${libdir}/
32 oe_libinstall -C ${S}/bin/ -so liballegro_encode ${D}/${libdir}/
33}
34
35# These libraries shouldn't get installed in world builds unless something
36# explicitly depends upon them.
37
38EXCLUDE_FROM_WORLD = "1"
39
40# Disable buildpaths QA check warnings.
41INSANE_SKIP:${PN} += "buildpaths"
diff --git a/meta-xilinx-core/recipes-multimedia/vcu/vcu-firmware_2023.2.bb b/meta-xilinx-core/recipes-multimedia/vcu/vcu-firmware_2023.2.bb
new file mode 100644
index 00000000..b4cb66df
--- /dev/null
+++ b/meta-xilinx-core/recipes-multimedia/vcu/vcu-firmware_2023.2.bb
@@ -0,0 +1,38 @@
1SUMMARY = "Firmware for VCU"
2DESCRIPTION = "Firmware binaries provider for VCU"
3LICENSE = "Proprietary"
4LIC_FILES_CHKSUM = "file://LICENSE.md;md5=52eb1e8f27e0e189b175c7d75f028cc6"
5
6XILINX_VCU_VERSION = "1.0.0"
7PV = "${XILINX_VCU_VERSION}-xilinx-v${@bb.parse.vars_from_file(d.getVar('FILE', False),d)[1] or ''}+git${SRCPV}"
8
9S = "${WORKDIR}/git"
10
11BRANCH ?= "xlnx_rel_v2023.2"
12REPO ?= "git://github.com/Xilinx/vcu-firmware.git;protocol=https"
13SRCREV = "f4ab98d26aa3e244a487f518f5a76071137c8402"
14
15BRANCHARG = "${@['nobranch=1', 'branch=${BRANCH}'][d.getVar('BRANCH', True) != '']}"
16SRC_URI = "${REPO};${BRANCHARG}"
17
18inherit features_check
19
20REQUIRED_MACHINE_FEATURES = "vcu"
21
22do_install() {
23 install -Dm 0644 ${S}/${XILINX_VCU_VERSION}/lib/firmware/al5d_b.fw ${D}/lib/firmware/al5d_b.fw
24 install -Dm 0644 ${S}/${XILINX_VCU_VERSION}/lib/firmware/al5d.fw ${D}/lib/firmware/al5d.fw
25 install -Dm 0644 ${S}/${XILINX_VCU_VERSION}/lib/firmware/al5e_b.fw ${D}/lib/firmware/al5e_b.fw
26 install -Dm 0644 ${S}/${XILINX_VCU_VERSION}/lib/firmware/al5e.fw ${D}/lib/firmware/al5e.fw
27}
28
29# Inhibit warnings about files being stripped
30INHIBIT_PACKAGE_DEBUG_SPLIT = "1"
31INHIBIT_PACKAGE_STRIP = "1"
32FILES:${PN} = "/lib/firmware/*"
33
34# These libraries shouldn't get installed in world builds unless something
35# explicitly depends upon them.
36EXCLUDE_FROM_WORLD = "1"
37
38INSANE_SKIP:${PN} = "ldflags"
diff --git a/meta-xilinx-core/recipes-multimedia/vdu/kernel-module-vdu_2023.1.bb b/meta-xilinx-core/recipes-multimedia/vdu/kernel-module-vdu_2023.1.bb
index a1396278..9b835490 100644
--- a/meta-xilinx-core/recipes-multimedia/vdu/kernel-module-vdu_2023.1.bb
+++ b/meta-xilinx-core/recipes-multimedia/vdu/kernel-module-vdu_2023.1.bb
@@ -5,7 +5,8 @@ LICENSE = "GPLv2"
5LIC_FILES_CHKSUM = "file://LICENSE.md;md5=eb723b61539feef013de476e68b5c50a" 5LIC_FILES_CHKSUM = "file://LICENSE.md;md5=eb723b61539feef013de476e68b5c50a"
6 6
7XILINX_VDU_VERSION = "1.0.0" 7XILINX_VDU_VERSION = "1.0.0"
8PV = "${XILINX_VDU_VERSION}-xilinx-${XILINX_RELEASE_VERSION}+git${SRCPV}" 8PV =. "${XILINX_VDU_VERSION}-xilinx-v"
9PV .= "+git${SRCPV}"
9 10
10S = "${WORKDIR}/git" 11S = "${WORKDIR}/git"
11FILESEXTRAPATHS:prepend := "${THISDIR}/files:" 12FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
diff --git a/meta-xilinx-core/recipes-multimedia/vdu/kernel-module-vdu_2023.2.bb b/meta-xilinx-core/recipes-multimedia/vdu/kernel-module-vdu_2023.2.bb
new file mode 100644
index 00000000..1c9ba8ad
--- /dev/null
+++ b/meta-xilinx-core/recipes-multimedia/vdu/kernel-module-vdu_2023.2.bb
@@ -0,0 +1,42 @@
1SUMMARY = "Linux kernel module for Video Decode Unit"
2DESCRIPTION = "Out-of-tree VDU decoder common kernel modules"
3SECTION = "kernel/modules"
4LICENSE = "GPLv2"
5LIC_FILES_CHKSUM = "file://LICENSE.md;md5=eb723b61539feef013de476e68b5c50a"
6
7XILINX_VDU_VERSION = "1.0.0"
8PV =. "${XILINX_VDU_VERSION}-xilinx-v"
9PV .= "+git${SRCPV}"
10
11S = "${WORKDIR}/git"
12FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
13
14BRANCH ?= "xlnx_rel_v2023.2"
15REPO ?= "git://github.com/Xilinx/vdu-modules.git;protocol=https"
16SRCREV ?= "4d5134f54006f904f0b28f00e05dd3febd5fcfd3"
17
18BRANCHARG = "${@['nobranch=1', 'branch=${BRANCH}'][d.getVar('BRANCH', True) != '']}"
19SRC_URI = "${REPO};${BRANCHARG} \
20 file://99-vdu-enc-dec.rules \
21"
22
23inherit module features_check
24
25REQUIRED_MACHINE_FEATURES = "vdu"
26
27EXTRA_OEMAKE += "O=${STAGING_KERNEL_BUILDDIR}"
28
29RDEPENDS:${PN} = "vdu-firmware"
30
31COMPATIBLE_MACHINE = "^$"
32COMPATIBLE_MACHINE:versal-ai-core = "versal-ai-core"
33COMPATIBLE_MACHINE:versal-ai-edge = "versal-ai-edge"
34
35PACKAGE_ARCH = "${SOC_FAMILY_ARCH}"
36
37do_install:append() {
38 install -d ${D}${sysconfdir}/udev/rules.d
39 install -m 0644 ${WORKDIR}/99-vdu-enc-dec.rules ${D}${sysconfdir}/udev/rules.d/
40}
41
42FILES:${PN} = "${sysconfdir}/udev/rules.d/*"
diff --git a/meta-xilinx-core/recipes-multimedia/vdu/libvdu-ctrlsw_2023.1.bb b/meta-xilinx-core/recipes-multimedia/vdu/libvdu-ctrlsw_2023.1.bb
index 82f3c4f5..602dc2fc 100644
--- a/meta-xilinx-core/recipes-multimedia/vdu/libvdu-ctrlsw_2023.1.bb
+++ b/meta-xilinx-core/recipes-multimedia/vdu/libvdu-ctrlsw_2023.1.bb
@@ -4,7 +4,8 @@ LICENSE = "MIT"
4LIC_FILES_CHKSUM = "file://LICENSE.md;md5=aaf483d309243c4596f6373eb9c8325f" 4LIC_FILES_CHKSUM = "file://LICENSE.md;md5=aaf483d309243c4596f6373eb9c8325f"
5 5
6XILINX_VDU_VERSION = "1.0.0" 6XILINX_VDU_VERSION = "1.0.0"
7PV = "${XILINX_VDU_VERSION}-xilinx-${XILINX_RELEASE_VERSION}+git${SRCPV}" 7PV =. "${XILINX_VDU_VERSION}-xilinx-v"
8PV .= "+git${SRCPV}"
8 9
9inherit autotools features_check 10inherit autotools features_check
10 11
diff --git a/meta-xilinx-core/recipes-multimedia/vdu/libvdu-ctrlsw_2023.2.bb b/meta-xilinx-core/recipes-multimedia/vdu/libvdu-ctrlsw_2023.2.bb
new file mode 100644
index 00000000..2b9af94f
--- /dev/null
+++ b/meta-xilinx-core/recipes-multimedia/vdu/libvdu-ctrlsw_2023.2.bb
@@ -0,0 +1,45 @@
1SUMMARY = "Control Software for VDU"
2DESCRIPTION = "Control software libraries, test applications and headers provider for VDU"
3LICENSE = "MIT"
4LIC_FILES_CHKSUM = "file://LICENSE.md;md5=aaf483d309243c4596f6373eb9c8325f"
5
6XILINX_VDU_VERSION = "1.0.0"
7PV =. "${XILINX_VDU_VERSION}-xilinx-v"
8PV .= "+git${SRCPV}"
9
10inherit autotools features_check
11
12REQUIRED_MACHINE_FEATURES = "vdu"
13
14BRANCH ?= "xlnx_rel_v2023.2"
15REPO ?= "git://github.com/Xilinx/vdu-ctrl-sw.git;protocol=https"
16SRCREV ?= "1beb8f247d01b1a728faea36ce8f7847c895482f"
17
18BRANCHARG = "${@['nobranch=1', 'branch=${BRANCH}'][d.getVar('BRANCH', True) != '']}"
19SRC_URI = "${REPO};${BRANCHARG}"
20
21S = "${WORKDIR}/git"
22
23COMPATIBLE_MACHINE = "^$"
24COMPATIBLE_MACHINE:versal-ai-core = "versal-ai-core"
25COMPATIBLE_MACHINE:versal-ai-edge = "versal-ai-edge"
26
27PACKAGE_ARCH = "${SOC_FAMILY_ARCH}"
28
29RDEPENDS:${PN} = "kernel-module-vdu"
30
31do_compile[dirs] = "${S}"
32do_install[dirs] = "${S}"
33
34EXTRA_OEMAKE = "CC='${CC}' CXX='${CXX} ${CXXFLAGS}'"
35EXTRA_OEMAKE +=" INSTALL_HDR_PATH=${D}${includedir}/vdu-ctrl-sw/include INSTALL_PATH=${D}${bindir}"
36
37do_install:append() {
38
39 oe_libinstall -C ${S}/bin/ -so liballegro_decode ${D}/${libdir}/
40}
41
42# These libraries shouldn't get installed in world builds unless something
43# explicitly depends upon them.
44
45EXCLUDE_FROM_WORLD = "1"
diff --git a/meta-xilinx-core/recipes-multimedia/vdu/libvdu-omxil_2023.1.bb b/meta-xilinx-core/recipes-multimedia/vdu/libvdu-omxil_2023.1.bb
index 88b50193..b4fc482e 100644
--- a/meta-xilinx-core/recipes-multimedia/vdu/libvdu-omxil_2023.1.bb
+++ b/meta-xilinx-core/recipes-multimedia/vdu/libvdu-omxil_2023.1.bb
@@ -4,7 +4,8 @@ LICENSE = "MIT"
4LIC_FILES_CHKSUM = "file://LICENSE.md;md5=aaf483d309243c4596f6373eb9c8325f" 4LIC_FILES_CHKSUM = "file://LICENSE.md;md5=aaf483d309243c4596f6373eb9c8325f"
5 5
6XILINX_VDU_VERSION = "1.0.0" 6XILINX_VDU_VERSION = "1.0.0"
7PV = "${XILINX_VDU_VERSION}-xilinx-${XILINX_RELEASE_VERSION}+git${SRCPV}" 7PV =. "${XILINX_VDU_VERSION}-xilinx-v"
8PV .= "+git${SRCPV}"
8 9
9BRANCH ?= "xlnx_rel_v2023.1" 10BRANCH ?= "xlnx_rel_v2023.1"
10REPO ?= "git://github.com/Xilinx/vdu-omx-il.git;protocol=https" 11REPO ?= "git://github.com/Xilinx/vdu-omx-il.git;protocol=https"
diff --git a/meta-xilinx-core/recipes-multimedia/vdu/libvdu-omxil_2023.2.bb b/meta-xilinx-core/recipes-multimedia/vdu/libvdu-omxil_2023.2.bb
new file mode 100644
index 00000000..f6f159d2
--- /dev/null
+++ b/meta-xilinx-core/recipes-multimedia/vdu/libvdu-omxil_2023.2.bb
@@ -0,0 +1,54 @@
1SUMMARY = "OpenMAX Integration layer for VDU"
2DESCRIPTION = "OMX IL Libraries,test application and headers for VDU"
3LICENSE = "MIT"
4LIC_FILES_CHKSUM = "file://LICENSE.md;md5=aaf483d309243c4596f6373eb9c8325f"
5
6XILINX_VDU_VERSION = "1.0.0"
7PV =. "${XILINX_VDU_VERSION}-xilinx-v"
8PV .= "+git${SRCPV}"
9
10BRANCH ?= "xlnx_rel_v2023.2"
11REPO ?= "git://github.com/Xilinx/vdu-omx-il.git;protocol=https"
12SRCREV ?= "811eefac953fd5e098c69cada97a0dd35f5e9015"
13
14BRANCHARG = "${@['nobranch=1', 'branch=${BRANCH}'][d.getVar('BRANCH', True) != '']}"
15SRC_URI = "${REPO};${BRANCHARG} \
16 "
17S = "${WORKDIR}/git"
18
19inherit autotools features_check
20
21REQUIRED_MACHINE_FEATURES = "vdu"
22
23COMPATIBLE_MACHINE = "^$"
24COMPATIBLE_MACHINE:versal-ai-core = "versal-ai-core"
25COMPATIBLE_MACHINE:versal-ai-edge = "versal-ai-edge"
26
27PACKAGE_ARCH = "${SOC_FAMILY_ARCH}"
28
29DEPENDS = "libvdu-ctrlsw"
30RDEPENDS:${PN} = "kernel-module-vdu libvdu-ctrlsw"
31
32EXTERNAL_INCLUDE="${STAGING_INCDIR}/vdu-ctrl-sw/include"
33
34do_compile[dirs] = "${S}"
35do_install[dirs] = "${S}"
36
37EXTRA_OEMAKE = " \
38 CC='${CC}' CXX='${CXX} ${CXXFLAGS}' \
39 EXTERNAL_INCLUDE='${EXTERNAL_INCLUDE}' \
40 INSTALL_PATH=${D}${bindir} \
41 INCLUDE_INST_PATH=${D}${includedir} \
42 "
43
44do_install:append() {
45 install -d ${D}${libdir}
46
47 oe_libinstall -C ${S}/bin/ -so libOMX.allegro.core ${D}/${libdir}/
48 oe_libinstall -C ${S}/bin/ -so libOMX.allegro.video_decoder ${D}/${libdir}/
49}
50
51# These libraries shouldn't get installed in world builds unless something
52# explicitly depends upon them.
53
54EXCLUDE_FROM_WORLD = "1"
diff --git a/meta-xilinx-core/recipes-multimedia/vdu/vdu-firmware_2023.1.bb b/meta-xilinx-core/recipes-multimedia/vdu/vdu-firmware_2023.1.bb
index e96e0d24..8cc2cce1 100755
--- a/meta-xilinx-core/recipes-multimedia/vdu/vdu-firmware_2023.1.bb
+++ b/meta-xilinx-core/recipes-multimedia/vdu/vdu-firmware_2023.1.bb
@@ -4,7 +4,8 @@ LICENSE = "Proprietary"
4LIC_FILES_CHKSUM = "file://LICENSE.md;md5=c5784f63397086d836580d8785d1deb9" 4LIC_FILES_CHKSUM = "file://LICENSE.md;md5=c5784f63397086d836580d8785d1deb9"
5 5
6XILINX_VDU_VERSION = "1.0.0" 6XILINX_VDU_VERSION = "1.0.0"
7PV = "${XILINX_VDU_VERSION}-xilinx-${XILINX_RELEASE_VERSION}+git${SRCPV}" 7PV =. "${XILINX_VDU_VERSION}-xilinx-v"
8PV .= "+git${SRCPV}"
8 9
9S = "${WORKDIR}/git" 10S = "${WORKDIR}/git"
10 11
diff --git a/meta-xilinx-core/recipes-multimedia/vdu/vdu-firmware_2023.2.bb b/meta-xilinx-core/recipes-multimedia/vdu/vdu-firmware_2023.2.bb
new file mode 100644
index 00000000..e9ef222b
--- /dev/null
+++ b/meta-xilinx-core/recipes-multimedia/vdu/vdu-firmware_2023.2.bb
@@ -0,0 +1,43 @@
1SUMMARY = "Firmware for VDU"
2DESCRIPTION = "Firmware binaries provider for VDU"
3LICENSE = "Proprietary"
4LIC_FILES_CHKSUM = "file://LICENSE.md;md5=c5784f63397086d836580d8785d1deb9"
5
6XILINX_VDU_VERSION = "1.0.0"
7PV =. "${XILINX_VDU_VERSION}-xilinx-v"
8PV .= "+git${SRCPV}"
9
10S = "${WORKDIR}/git"
11
12inherit autotools features_check
13
14REQUIRED_MACHINE_FEATURES = "vdu"
15
16BRANCH ?= "xlnx_rel_v2023.2"
17REPO ?= "git://github.com/Xilinx/vdu-firmware.git;protocol=https"
18SRCREV ?= "731897772730178f6a4e77eedeb4fb53faa1ab4d"
19
20BRANCHARG = "${@['nobranch=1', 'branch=${BRANCH}'][d.getVar('BRANCH', True) != '']}"
21SRC_URI = "${REPO};${BRANCHARG}"
22
23COMPATIBLE_MACHINE = "^$"
24COMPATIBLE_MACHINE:versal-ai-core = "versal-ai-core"
25COMPATIBLE_MACHINE:versal-ai-edge = "versal-ai-edge"
26
27PACKAGE_ARCH = "${SOC_FAMILY_ARCH}"
28EXTRA_OEMAKE +="INSTALL_PATH=${D}/lib/firmware"
29
30do_compile[noexec] = "1"
31do_install[dirs] = "${S}"
32
33# Inhibit warnings about files being stripped
34INHIBIT_PACKAGE_DEBUG_SPLIT = "1"
35INHIBIT_PACKAGE_STRIP = "1"
36FILES:${PN} = "/lib/firmware/*"
37
38
39# These libraries shouldn't get installed in world builds unless something
40# explicitly depends upon them.
41EXCLUDE_FROM_WORLD = "1"
42
43INSANE_SKIP:${PN} = "ldflags"
diff --git a/meta-xilinx-core/recipes-xrt/xrt/xrt.inc b/meta-xilinx-core/recipes-xrt/xrt/xrt.inc
index 3b150673..14b2b968 100644
--- a/meta-xilinx-core/recipes-xrt/xrt/xrt.inc
+++ b/meta-xilinx-core/recipes-xrt/xrt/xrt.inc
@@ -1,8 +1,14 @@
1REPO ?= "git://github.com/Xilinx/XRT.git;protocol=https" 1REPO ?= "git://github.com/Xilinx/XRT.git;protocol=https"
2BRANCHARG = "${@['nobranch=1', 'branch=${BRANCH}'][d.getVar('BRANCH', True) != '']}" 2BRANCHARG = "${@['nobranch=1', 'branch=${BRANCH}'][d.getVar('BRANCH', True) != '']}"
3SRC_URI = "${REPO};${BRANCHARG}" 3SRC_URI = "${REPO};${BRANCHARG};name=xrt"
4 4
5BRANCH= "2023.1" 5BRANCH= "2023.2"
6SRCREV= "64c933573e7e50a8aba939a74209590c2b739e8b" 6SRCREV_xrt = "2865a62b6a417dea523d2d5646154aa94a2cbc28"
7PV = "202310.2.15.0" 7PV = "202320.2.16.0"
8 8
9SRC_URI += "git://github.com/Xilinx/dma_ip_drivers.git;branch=master;name=dma_ip_drivers;destsuffix=git/src/runtime_src/core/pcie/driver/linux/xocl/lib/libqdma;protocol=https"
10SRCREV_dma_ip_drivers = "9f02769a2eddde008158c96efa39d7edb6512578"
11
12SRC_URI += "git://github.com/serge1/ELFIO.git;branch=main;name=ELFIO;destsuffix=git/src/runtime_src/core/common/elf;protocol=https"
13SRCREV_ELFIO = "a04810f12625207cce72665d783babb80f0175a8"
14SRCREV_FORMAT = "xrt"
diff --git a/meta-xilinx-core/recipes-xrt/xrt/xrt_git.bb b/meta-xilinx-core/recipes-xrt/xrt/xrt_git.bb
index 1124948f..f4e7b5de 100644
--- a/meta-xilinx-core/recipes-xrt/xrt/xrt_git.bb
+++ b/meta-xilinx-core/recipes-xrt/xrt/xrt_git.bb
@@ -3,14 +3,13 @@ DESCRIPTION = "Xilinx Runtime User Space Libraries and headers"
3 3
4require xrt.inc 4require xrt.inc
5 5
6SRC_URI += "file://xrt-cstdint.patch;striplevel=2" 6LICENSE = "GPL-2.0-or-later & Apache-2.0 & MIT"
7 7LIC_FILES_CHKSUM = "file://../LICENSE;md5=de2c993ac479f02575bcbfb14ef9b485 \
8LICENSE = "GPL-2.0-or-later & Apache-2.0"
9LIC_FILES_CHKSUM = "file://../LICENSE;md5=da5408f748bce8a9851dac18e66f4bcf \
10 file://runtime_src/core/edge/drm/zocl/LICENSE;md5=7d040f51aae6ac6208de74e88a3795f8 \ 8 file://runtime_src/core/edge/drm/zocl/LICENSE;md5=7d040f51aae6ac6208de74e88a3795f8 \
11 file://runtime_src/core/pcie/driver/linux/xocl/LICENSE;md5=b234ee4d69f5fce4486a80fdaf4a4263 \ 9 file://runtime_src/core/pcie/driver/linux/xocl/LICENSE;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
12 file://runtime_src/core/pcie/linux/LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57 \ 10 file://runtime_src/core/pcie/linux/LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57 \
13 file://runtime_src/core/tools/xbutil2/LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57 " 11 file://runtime_src/core/tools/xbutil2/LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57 \
12 file://runtime_src/core/common/elf/LICENSE.txt;md5=b996e8b74af169e7e72e22d9e7d05b06 "
14 13
15COMPATIBLE_MACHINE ?= "^$" 14COMPATIBLE_MACHINE ?= "^$"
16COMPATIBLE_MACHINE:zynqmp = ".*" 15COMPATIBLE_MACHINE:zynqmp = ".*"
diff --git a/meta-xilinx-standalone-experimental/README.md b/meta-xilinx-standalone-experimental/README.md
index 8014265b..31aa0f63 100644
--- a/meta-xilinx-standalone-experimental/README.md
+++ b/meta-xilinx-standalone-experimental/README.md
@@ -34,7 +34,7 @@ $ bitbake meta-xilinx-setup
34``` 34```
353. Install the setup SDK: 353. Install the setup SDK:
36``` 36```
37$ .${TMPDIR}/tmp/deploy/sdk/x86_64-xilinx-nativesdk-prestep-2023.1....sh -d prestep -y 37$ .${TMPDIR}/tmp/deploy/sdk/x86_64-xilinx-nativesdk-prestep-2023.2....sh -d prestep -y
38``` 38```
39 39
40Then follow the instructions in the 'prestep/README-setup' file. 40Then follow the instructions in the 'prestep/README-setup' file.
diff --git a/meta-xilinx-standalone-experimental/conf/dtb-embeddedsw.inc b/meta-xilinx-standalone-experimental/conf/dtb-embeddedsw.inc
index b252e609..a9192f62 100644
--- a/meta-xilinx-standalone-experimental/conf/dtb-embeddedsw.inc
+++ b/meta-xilinx-standalone-experimental/conf/dtb-embeddedsw.inc
@@ -2,13 +2,10 @@
2# meta-xilinx/meta-xilinx-standalone/classes/xlnx-embeddedsw.bbclass 2# meta-xilinx/meta-xilinx-standalone/classes/xlnx-embeddedsw.bbclass
3 3
4# Make it clear decoupling is 'experimental' in the version 4# Make it clear decoupling is 'experimental' in the version
5ESW_VER = "2023.1_sdt_experimental" 5ESW_VER = "2023_sdt_experimental"
6 6
7REPO = "git://github.com/Xilinx/embeddedsw-experimental-dt-support.git;protocol=https" 7REPO = "git://github.com/Xilinx/embeddedsw-experimental-dt-support.git;protocol=https"
8 8
9ESW_BRANCH[2023.1_sdt_experimental] = "xlnx_rel_v2023.1_sdt" 9ESW_BRANCH[2023_sdt_experimental] = "xlnx_rel_v2023.2_sdt"
10ESW_REV[2023.1_sdt_experimental] = "b47bfef27d7af0690add590b9c98e6fc51a1a1f6" 10ESW_REV[2023_sdt_experimental] = "742a608800e7621fb7c376daf5124333b5826d6d"
11LIC_FILES_CHKSUM[master] = '7c92de7a21a6613265035c28f4a92f48' 11LIC_FILES_CHKSUM[xlnx_rel_v2023.2_sdt] = 'ce611484168a6000bd35df68fc4f4290'
12LIC_FILES_CHKSUM[xlnx_rel_v2022.1_sdt_experimental_beta] = 'e26f53a7d6f58f4b1a9687099417225c'
13LIC_FILES_CHKSUM[xlnx_rel_v2023.1_sdt_experimental] = 'ce611484168a6000bd35df68fc4f4290'
14LIC_FILES_CHKSUM[xlnx_rel_v2023.1_sdt] = 'ce611484168a6000bd35df68fc4f4290'
diff --git a/meta-xilinx-standalone-experimental/recipes-core/meta/files/dt-processor.sh b/meta-xilinx-standalone-experimental/recipes-core/meta/files/dt-processor.sh
index 939fabe4..1c754689 100755
--- a/meta-xilinx-standalone-experimental/recipes-core/meta/files/dt-processor.sh
+++ b/meta-xilinx-standalone-experimental/recipes-core/meta/files/dt-processor.sh
@@ -1,6 +1,7 @@
1#! /bin/bash 1#! /bin/bash
2 2
3# Copyright (c) 2021 Xilinx Inc 3# Copyright (c) 2021-2022 Xilinx Inc
4# Copyright (C) 2022-2023 Advanced Micro Devices, Inc. All rights reserved.
4# 5#
5# Permission is hereby granted, free of charge, to any person obtaining a copy 6# Permission is hereby granted, free of charge, to any person obtaining a copy
6# of this software and associated documentation files (the "Software"), to deal 7# of this software and associated documentation files (the "Software"), to deal
@@ -39,10 +40,13 @@ $0
39 [-o <overlay_dts>] Generate overlay dts 40 [-o <overlay_dts>] Generate overlay dts
40 [-e <external_fpga>] Apply a partial overlay 41 [-e <external_fpga>] Apply a partial overlay
41 [-m <machine_conf>] The name of the machine .conf to generate 42 [-m <machine_conf>] The name of the machine .conf to generate
43 [-D <dts_path>] Absolute path or subdirectory of conf/dts to place DTS files in (usually auto detected from DTS)
42 [-t <machine>] Machine type: zynqmp or versal (usually auto detected) 44 [-t <machine>] Machine type: zynqmp or versal (usually auto detected)
43 [-v <soc_variant>] SOC Variant: cg, dr, eg, ev, ai-prime, premium (usually auto detected) 45 [-v <soc_variant>] SOC Variant: cg, dr, eg, ev, ai-prime, premium (usually auto detected)
46 [-r <require_machine>] This machine will be required, instead of the generic machine if defined
47 [-O <overrides>] Optional, can add additional overrides to the generated machine
44 [-p <psu_init_path>] Path to psu_init files, defaults to system_dts path 48 [-p <psu_init_path>] Path to psu_init files, defaults to system_dts path
45 [-i <pdu_path>] Path to the pdi file 49 [-i <pdi_path>] Path to the pdi file
46 [-l <config_file>] write local.conf changes to this file 50 [-l <config_file>] write local.conf changes to this file
47 [-P <petalinux_schema>] Path to petalinux schema file 51 [-P <petalinux_schema>] Path to petalinux schema file
48 52
@@ -54,7 +58,7 @@ parse_args() {
54 [ $# -eq 0 ] && usage 58 [ $# -eq 0 ] && usage
55 [ $1 = "--help" ] && usage 59 [ $1 = "--help" ] && usage
56 60
57 while getopts ":c:s:d:o:e:m:l:hP:p:i:t:v:" opt; do 61 while getopts ":c:s:d:o:e:m:D:l:hP:p:i:t:v:r:O:" opt; do
58 case ${opt} in 62 case ${opt} in
59 c) config_dir=$OPTARG ;; 63 c) config_dir=$OPTARG ;;
60 s) system_dts=$OPTARG ;; 64 s) system_dts=$OPTARG ;;
@@ -62,8 +66,11 @@ parse_args() {
62 d) domain_file=$OPTARG ;; 66 d) domain_file=$OPTARG ;;
63 e) external_fpga=$OPTARG ;; 67 e) external_fpga=$OPTARG ;;
64 m) mach_conf=$OPTARG ; mach_conf=${mach_conf%%.conf} ;; 68 m) mach_conf=$OPTARG ; mach_conf=${mach_conf%%.conf} ;;
69 D) dts_path=$OPTARG ;;
65 t) machine=$OPTARG ;; 70 t) machine=$OPTARG ;;
66 v) soc_variant=$OPTARG ;; 71 v) soc_variant=$OPTARG ;;
72 r) incmachine=$OPTARG ;;
73 O) overrides=$OPTARG ;;
67 p) psu_init_path=$OPTARG ;; 74 p) psu_init_path=$OPTARG ;;
68 i) pdi_path=$OPTARG ;; 75 i) pdi_path=$OPTARG ;;
69 l) localconf=$OPTARG ;; 76 l) localconf=$OPTARG ;;
@@ -133,11 +140,15 @@ detect_machine() {
133 soc_variant="hbm" ;; 140 soc_variant="hbm" ;;
134 # Special Case Starter Kit SOMs 141 # Special Case Starter Kit SOMs
135 xck26) 142 xck26)
136 incmachine="k26-smk.conf" 143 if [ -z "${incmachine}" ]; then
144 incmachine="k26-smk.conf"
145 fi
137 machine="zynqmp" 146 machine="zynqmp"
138 soc_variant="ev" ;; 147 soc_variant="ev" ;;
139 xck24) 148 xck24)
140 incmachine="k24-smk.conf" 149 if [ -z "${incmachine}" ]; then
150 incmachine="k24-smk.conf"
151 fi
141 machine="zynqmp" 152 machine="zynqmp"
142 soc_variant="eg" ;; 153 soc_variant="eg" ;;
143 esac 154 esac
@@ -199,7 +210,7 @@ cortex_a53_linux() {
199 210
200 # Check if it is overlay dts otherwise just create linux dts 211 # Check if it is overlay dts otherwise just create linux dts
201 ( 212 (
202 cd dts || error "Unable to cd to dts dir" 213 cd ${dts_path} || error "Unable to cd to ${dts_path} dir"
203 if [ "${overlay_dts}" = "true" ]; then 214 if [ "${overlay_dts}" = "true" ]; then
204 if [ "${external_fpga}" = "true" ]; then 215 if [ "${external_fpga}" = "true" ]; then
205 LOPPER_DTC_FLAGS="-b 0 -@" ${lopper} -f "${system_dts}" -- xlnx_overlay_dt ${machine} full \ 216 LOPPER_DTC_FLAGS="-b 0 -@" ${lopper} -f "${system_dts}" -- xlnx_overlay_dt ${machine} full \
@@ -232,7 +243,7 @@ cortex_a53_linux() {
232 243
233 ## Generate a multiconfig 244 ## Generate a multiconfig
234 cat <<EOF >"${conf_file}" 245 cat <<EOF >"${conf_file}"
235CONFIG_DTFILE = "\${TOPDIR}/conf/dts/${dts_file}" 246CONFIG_DTFILE = "${dts_file_path}/${dts_file}"
236 247
237TMPDIR = "\${BASE_TMPDIR}/tmp-${mc_name}" 248TMPDIR = "\${BASE_TMPDIR}/tmp-${mc_name}"
238EOF 249EOF
@@ -268,7 +279,7 @@ cortex_a53_baremetal() {
268 279
269 # Build device tree 280 # Build device tree
270 ( 281 (
271 cd dts || error "Unable to cd to dts dir" 282 cd ${dts_path} || error "Unable to cd to ${dts_path} dir"
272 if [ -n "${domain_file}" ]; then 283 if [ -n "${domain_file}" ]; then
273 LOPPER_DTC_FLAGS="-b 0 -@" ${lopper} -f --enhanced -x '*.yaml' \ 284 LOPPER_DTC_FLAGS="-b 0 -@" ${lopper} -f --enhanced -x '*.yaml' \
274 -i "${domain_file}" -i "${lops_dir}/lop-a53-imux.dts" "${system_dts}" "${dts_file}" \ 285 -i "${domain_file}" -i "${lops_dir}/lop-a53-imux.dts" "${system_dts}" "${dts_file}" \
@@ -309,7 +320,7 @@ EOF
309 cat /dev/null >"${conf_file}" 320 cat /dev/null >"${conf_file}"
310 fi 321 fi
311 cat <<EOF >>"${conf_file}" 322 cat <<EOF >>"${conf_file}"
312CONFIG_DTFILE = "\${TOPDIR}/conf/dts/${dts_file}" 323CONFIG_DTFILE = "${dts_file_path}/${dts_file}"
313 324
314ESW_MACHINE = "$3" 325ESW_MACHINE = "$3"
315DEFAULTTUNE = "cortexa53" 326DEFAULTTUNE = "cortexa53"
@@ -335,7 +346,7 @@ cortex_a53_freertos() {
335 346
336 # Build device tree 347 # Build device tree
337 ( 348 (
338 cd dts || error "Unable to cd to dts dir" 349 cd ${dts_path} || error "Unable to cd to ${dts_path} dir"
339 if [ -n "${domain_file}" ]; then 350 if [ -n "${domain_file}" ]; then
340 LOPPER_DTC_FLAGS="-b 0 -@" ${lopper} -f --enhanced -x '*.yaml' \ 351 LOPPER_DTC_FLAGS="-b 0 -@" ${lopper} -f --enhanced -x '*.yaml' \
341 -i "${domain_file}" -i "${lops_dir}/lop-a53-imux.dts" "${system_dts}" "${dts_file}" \ 352 -i "${domain_file}" -i "${lops_dir}/lop-a53-imux.dts" "${system_dts}" "${dts_file}" \
@@ -361,7 +372,7 @@ cortex_a53_freertos() {
361 sed -i ${features} -e "s,DISTRO_FEATURES,MACHINE_FEATURES," 372 sed -i ${features} -e "s,DISTRO_FEATURES,MACHINE_FEATURES,"
362 373
363 cat <<EOF >"${conf_file}" 374 cat <<EOF >"${conf_file}"
364CONFIG_DTFILE = "\${TOPDIR}/conf/dts/${dts_file}" 375CONFIG_DTFILE = "${dts_file_path}/${dts_file}"
365 376
366ESW_MACHINE = "$3" 377ESW_MACHINE = "$3"
367DEFAULTTUNE = "cortexa53" 378DEFAULTTUNE = "cortexa53"
@@ -396,10 +407,10 @@ cortex_a72_linux() {
396 fi 407 fi
397 408
398 ( 409 (
399 cd dts || error "Unable to cd to dts dir" 410 cd ${dts_path} || error "Unable to cd to ${dts_path} dir"
400 # Check if it is overlay dts otherwise just create linux dts 411 # Check if it is overlay dts otherwise just create linux dts
401 if [ "${overlay_dts}" = "true" ]; then 412 if [ "${overlay_dts}" = "true" ]; then
402 # As there is no partial support on Versal, As per fpga manager implementatin there is 413 # As there is no partial support on Versal, As per fpga manager implementation there is
403 # a flag "external_fpga" which says apply overlay without loading the bit file. 414 # a flag "external_fpga" which says apply overlay without loading the bit file.
404 if [ "${external_fpga}" = "true" ]; then 415 if [ "${external_fpga}" = "true" ]; then
405 LOPPER_DTC_FLAGS="-b 0 -@" ${lopper} -f "${system_dts}" -- xlnx_overlay_dt \ 416 LOPPER_DTC_FLAGS="-b 0 -@" ${lopper} -f "${system_dts}" -- xlnx_overlay_dt \
@@ -432,7 +443,7 @@ cortex_a72_linux() {
432 443
433 ## Generate a multiconfig 444 ## Generate a multiconfig
434 cat <<EOF >"${conf_file}" 445 cat <<EOF >"${conf_file}"
435CONFIG_DTFILE = "\${TOPDIR}/conf/dts/${dts_file}" 446CONFIG_DTFILE = "${dts_file_path}/${dts_file}"
436 447
437TMPDIR = "\${BASE_TMPDIR}/tmp-${mc_name}" 448TMPDIR = "\${BASE_TMPDIR}/tmp-${mc_name}"
438EOF 449EOF
@@ -453,7 +464,7 @@ cortex_a72_baremetal() {
453 464
454 # Build device tree 465 # Build device tree
455 ( 466 (
456 cd dts || error "Unable to cd to dts dir" 467 cd ${dts_path} || error "Unable to cd to ${dts_path} dir"
457 if [ -n "${domain_file}" ]; then 468 if [ -n "${domain_file}" ]; then
458 LOPPER_DTC_FLAGS="-b 0 -@" ${lopper} -f --enhanced -x '*.yaml' \ 469 LOPPER_DTC_FLAGS="-b 0 -@" ${lopper} -f --enhanced -x '*.yaml' \
459 -i "${domain_file}" -i "${lops_dir}/lop-a72-imux.dts" "${system_dts}" "${dts_file}" \ 470 -i "${domain_file}" -i "${lops_dir}/lop-a72-imux.dts" "${system_dts}" "${dts_file}" \
@@ -479,7 +490,7 @@ cortex_a72_baremetal() {
479 sed -i ${features} -e "s,DISTRO_FEATURES,MACHINE_FEATURES," 490 sed -i ${features} -e "s,DISTRO_FEATURES,MACHINE_FEATURES,"
480 491
481 cat <<EOF >"${conf_file}" 492 cat <<EOF >"${conf_file}"
482CONFIG_DTFILE = "\${TOPDIR}/conf/dts/${dts_file}" 493CONFIG_DTFILE = "${dts_file_path}/${dts_file}"
483 494
484ESW_MACHINE = "$3" 495ESW_MACHINE = "$3"
485DEFAULTTUNE = "cortexa72" 496DEFAULTTUNE = "cortexa72"
@@ -505,7 +516,7 @@ cortex_a72_freertos() {
505 516
506 # Build device tree 517 # Build device tree
507 ( 518 (
508 cd dts || error "Unable to cd to dts dir" 519 cd ${dts_path} || error "Unable to cd to ${dts_path} dir"
509 if [ -n "${domain_file}" ]; then 520 if [ -n "${domain_file}" ]; then
510 LOPPER_DTC_FLAGS="-b 0 -@" lopper -f --enhanced -x '*.yaml' \ 521 LOPPER_DTC_FLAGS="-b 0 -@" lopper -f --enhanced -x '*.yaml' \
511 -i "${domain_file}" -i "${lops_dir}/lop-a72-imux.dts" "${system_dts}" "${dts_file}" \ 522 -i "${domain_file}" -i "${lops_dir}/lop-a72-imux.dts" "${system_dts}" "${dts_file}" \
@@ -531,7 +542,7 @@ cortex_a72_freertos() {
531 sed -i ${features} -e "s,DISTRO_FEATURES,MACHINE_FEATURES," 542 sed -i ${features} -e "s,DISTRO_FEATURES,MACHINE_FEATURES,"
532 543
533 cat <<EOF >"${conf_file}" 544 cat <<EOF >"${conf_file}"
534CONFIG_DTFILE = "\${TOPDIR}/conf/dts/${dts_file}" 545CONFIG_DTFILE = "${dts_file_path}/${dts_file}"
535 546
536ESW_MACHINE = "$3" 547ESW_MACHINE = "$3"
537DEFAULTTUNE = "cortexa72" 548DEFAULTTUNE = "cortexa72"
@@ -572,7 +583,7 @@ cortex_r5_baremetal() {
572 583
573 # Build device tree 584 # Build device tree
574 ( 585 (
575 cd dts || error "Unable to cd to dts dir" 586 cd ${dts_path} || error "Unable to cd to ${dts_path} dir"
576 if [ -n "$domain_file" ]; then 587 if [ -n "$domain_file" ]; then
577 LOPPER_DTC_FLAGS="-b 0 -@" ${lopper} -f --enhanced -x '*.yaml' \ 588 LOPPER_DTC_FLAGS="-b 0 -@" ${lopper} -f --enhanced -x '*.yaml' \
578 -i "${domain_file}" -i "${lops_dir}/lop-r5-imux.dts" "${system_dts}" "${dts_file}" \ 589 -i "${domain_file}" -i "${lops_dir}/lop-r5-imux.dts" "${system_dts}" "${dts_file}" \
@@ -612,7 +623,7 @@ EOF
612 cat /dev/null >"${conf_file}" 623 cat /dev/null >"${conf_file}"
613 fi 624 fi
614 cat <<EOF >>"${conf_file}" 625 cat <<EOF >>"${conf_file}"
615CONFIG_DTFILE = "\${TOPDIR}/conf/dts/${dts_file}" 626CONFIG_DTFILE = "${dts_file_path}/${dts_file}"
616 627
617ESW_MACHINE = "$3" 628ESW_MACHINE = "$3"
618DEFAULTTUNE = "cortexr5" 629DEFAULTTUNE = "cortexr5"
@@ -638,7 +649,7 @@ cortex_r5_freertos() {
638 649
639 # Build device tree 650 # Build device tree
640 ( 651 (
641 cd dts || error "Unable to cd to dts dir" 652 cd ${dts_path} || error "Unable to cd to ${dts_path} dir"
642 if [ -n "$domain_file" ]; then 653 if [ -n "$domain_file" ]; then
643 LOPPER_DTC_FLAGS="-b 0 -@" ${lopper} -f --enhanced -x '*.yaml' \ 654 LOPPER_DTC_FLAGS="-b 0 -@" ${lopper} -f --enhanced -x '*.yaml' \
644 -i "${domain_file}" -i "${lops_dir}/lop-r5-imux.dts" "${system_dts}" "${dts_file}" \ 655 -i "${domain_file}" -i "${lops_dir}/lop-r5-imux.dts" "${system_dts}" "${dts_file}" \
@@ -664,7 +675,7 @@ cortex_r5_freertos() {
664 sed -i ${features} -e "s,DISTRO_FEATURES,MACHINE_FEATURES," 675 sed -i ${features} -e "s,DISTRO_FEATURES,MACHINE_FEATURES,"
665 676
666 cat <<EOF >"${conf_file}" 677 cat <<EOF >"${conf_file}"
667CONFIG_DTFILE = "\${TOPDIR}/conf/dts/${dts_file}" 678CONFIG_DTFILE = "${dts_file_path}/${dts_file}"
668 679
669ESW_MACHINE = "$3" 680ESW_MACHINE = "$3"
670DEFAULTTUNE = "cortexr5" 681DEFAULTTUNE = "cortexr5"
@@ -684,7 +695,7 @@ process_microblaze() {
684 695
685 mkdir -p machine/include/${mach_conf} 696 mkdir -p machine/include/${mach_conf}
686 ( 697 (
687 cd dts || error "Unable to cd to dts dir" 698 cd ${dts_path} || error "Unable to cd to ${dts_path} dir"
688 LOPPER_DTC_FLAGS="-b 0 -@" ${lopper} -f --enhanced -i "${lops_dir}/lop-microblaze-yocto.dts" "${system_dts}" \ 699 LOPPER_DTC_FLAGS="-b 0 -@" ${lopper} -f --enhanced -i "${lops_dir}/lop-microblaze-yocto.dts" "${system_dts}" \
689 || error "lopper failed" 700 || error "lopper failed"
690 rm -f lop-microblaze-yocto.dts.dtb 701 rm -f lop-microblaze-yocto.dts.dtb
@@ -714,7 +725,7 @@ pmu-microblaze() {
714 725
715 # Build device tree 726 # Build device tree
716 ( 727 (
717 cd dts || error "Unable to cd to dts dir" 728 cd ${dts_path} || error "Unable to cd to ${dts_path} dir"
718 LOPPER_DTC_FLAGS="-b 0 -@" ${lopper} -f "${system_dts}" "${dts_file}" || error "lopper failed" 729 LOPPER_DTC_FLAGS="-b 0 -@" ${lopper} -f "${system_dts}" "${dts_file}" || error "lopper failed"
719 ) 730 )
720 731
@@ -732,7 +743,7 @@ pmu-microblaze() {
732 sed -i ${features} -e "s,DISTRO_FEATURES,MACHINE_FEATURES," 743 sed -i ${features} -e "s,DISTRO_FEATURES,MACHINE_FEATURES,"
733 744
734 cat <<EOF >"${conf_file}" 745 cat <<EOF >"${conf_file}"
735CONFIG_DTFILE = "\${TOPDIR}/conf/dts/${dts_file}" 746CONFIG_DTFILE = "${dts_file_path}/${dts_file}"
736 747
737ESW_MACHINE = "$1" 748ESW_MACHINE = "$1"
738 749
@@ -765,7 +776,7 @@ pmc-microblaze() {
765 776
766 # Build device tree 777 # Build device tree
767 ( 778 (
768 cd dts || error "Unable to cd to dts dir" 779 cd ${dts_path} || error "Unable to cd to ${dts_path} dir"
769 LOPPER_DTC_FLAGS="-b 0 -@" ${lopper} -f "${system_dts}" "${dts_file}" || error "lopper failed" 780 LOPPER_DTC_FLAGS="-b 0 -@" ${lopper} -f "${system_dts}" "${dts_file}" || error "lopper failed"
770 ) 781 )
771 782
@@ -783,7 +794,7 @@ pmc-microblaze() {
783 sed -i ${features} -e "s,DISTRO_FEATURES,MACHINE_FEATURES," 794 sed -i ${features} -e "s,DISTRO_FEATURES,MACHINE_FEATURES,"
784 795
785 cat <<EOF >"${conf_file}" 796 cat <<EOF >"${conf_file}"
786CONFIG_DTFILE = "\${TOPDIR}/conf/dts/${dts_file}" 797CONFIG_DTFILE = "${dts_file_path}/${dts_file}"
787 798
788ESW_MACHINE = "$1" 799ESW_MACHINE = "$1"
789 800
@@ -816,7 +827,7 @@ psm-microblaze() {
816 827
817 # Build device tree 828 # Build device tree
818 ( 829 (
819 cd dts || error "Unable to cd to dts dir" 830 cd ${dts_path} || error "Unable to cd to ${dts_path} dir"
820 LOPPER_DTC_FLAGS="-b 0 -@" ${lopper} -f "${system_dts}" "${dts_file}" || error "lopper failed" 831 LOPPER_DTC_FLAGS="-b 0 -@" ${lopper} -f "${system_dts}" "${dts_file}" || error "lopper failed"
821 ) 832 )
822 833
@@ -834,7 +845,7 @@ psm-microblaze() {
834 sed -i ${features} -e "s,DISTRO_FEATURES,MACHINE_FEATURES," 845 sed -i ${features} -e "s,DISTRO_FEATURES,MACHINE_FEATURES,"
835 846
836 cat <<EOF >"${conf_file}" 847 cat <<EOF >"${conf_file}"
837CONFIG_DTFILE = "\${TOPDIR}/conf/dts/${dts_file}" 848CONFIG_DTFILE = "${dts_file_path}/${dts_file}"
838 849
839ESW_MACHINE = "$1" 850ESW_MACHINE = "$1"
840 851
@@ -874,6 +885,13 @@ MACHINEOVERRIDES =. "\${@['', '${mach_conf}:']['${mach_conf}' != '\${MACHINE}']}
874 885
875EOF 886EOF
876 887
888 if [ -n "${overrides}" ]; then
889 cat <<EOF >>"${conf_file}"
890MACHINEOVERRIDES .= ":${overrides}"
891
892EOF
893 fi
894
877 if [ "${machine}" == "zynqmp" ]; then 895 if [ "${machine}" == "zynqmp" ]; then
878 cat <<EOF >>"${conf_file}" 896 cat <<EOF >>"${conf_file}"
879TUNEFILE[microblaze-pmu] = "conf/machine/include/${mach_conf}/microblaze.inc" 897TUNEFILE[microblaze-pmu] = "conf/machine/include/${mach_conf}/microblaze.inc"
@@ -890,7 +908,7 @@ EOF
890 cat <<EOF >>"${conf_file}" 908 cat <<EOF >>"${conf_file}"
891 909
892# Set the default (linux) domain device tree 910# Set the default (linux) domain device tree
893CONFIG_DTFILE ?= "\${TOPDIR}/conf/dts/${system_conf}" 911CONFIG_DTFILE ?= "${dts_file_path}/${system_conf}"
894CONFIG_DTFILE[vardepsexclude] += "TOPDIR" 912CONFIG_DTFILE[vardepsexclude] += "TOPDIR"
895 913
896require conf/machine/${incmachine} 914require conf/machine/${incmachine}
@@ -969,10 +987,10 @@ EOF
969 987
970 cat <<EOF >>"${conf_file}" 988 cat <<EOF >>"${conf_file}"
971# Enable the correct version of the firmware components 989# Enable the correct version of the firmware components
972PREFERRED_VERSION_fsbl-firmware = "2023.1_sdt_experimental%" 990PREFERRED_VERSION_fsbl-firmware = "2023_sdt_experimental%"
973PREFERRED_VERSION_pmu-firmware = "2023.1_sdt_experimental%" 991PREFERRED_VERSION_pmu-firmware = "2023_sdt_experimental%"
974PREFERRED_VERSION_plm-firmware = "2023.1_sdt_experimental%" 992PREFERRED_VERSION_plm-firmware = "2023_sdt_experimental%"
975PREFERRED_VERSION_psm-firmware = "2023.1_sdt_experimental%" 993PREFERRED_VERSION_psm-firmware = "2023_sdt_experimental%"
976 994
977# Exclude BASE_TMPDIR from hash calculations 995# Exclude BASE_TMPDIR from hash calculations
978BB_HASHEXCLUDE_COMMON:append = " BASE_TMPDIR" 996BB_HASHEXCLUDE_COMMON:append = " BASE_TMPDIR"
@@ -1125,9 +1143,9 @@ BASE_TMPDIR ?= "\${TOPDIR}"
1125 1143
1126# The following is the full set of multiconfigs for this configuration 1144# The following is the full set of multiconfigs for this configuration
1127# A large list can cause a slow parse. 1145# A large list can cause a slow parse.
1128BBMULTICONFIG ?= "${multiconf}" 1146#BBMULTICONFIG ?= "${multiconf}"
1129# Alternatively trim the list to the minimum 1147# Alternatively trim the list to the minimum
1130#BBMULTICONFIG = "${multiconf_min}" 1148BBMULTICONFIG = "${multiconf_min}"
1131EOF 1149EOF
1132} 1150}
1133 1151
@@ -1171,6 +1189,22 @@ if [ -z "${mach_conf}" ]; then
1171 mach_conf=${local_mach_conf} 1189 mach_conf=${local_mach_conf}
1172fi 1190fi
1173 1191
1192if [ -z "${dts_path}"]; then
1193 dts_path=${local_mach_conf}
1194fi
1195# Is it relative? If so, relative to conf/dts
1196if [ "${dts_path##/}" = "${dts_path}" ]; then
1197 dts_path="dts/${dts_path}"
1198else
1199 dts_path=$(realpath ${dts_path})
1200fi
1201# Convert the DTS_PATH into something we can put in a config file
1202if [ "${dts_path##/}" = "${dts_path}" ]; then
1203 dts_file_path="\${TOPDIR}/conf/${dts_path}"
1204else
1205 dts_file_path="${dts_path}"
1206fi
1207
1174# Generate CPU list 1208# Generate CPU list
1175( 1209(
1176 cd dts || error "Unable to cd to dts dir" 1210 cd dts || error "Unable to cd to dts dir"
@@ -1182,6 +1216,7 @@ fi
1182detect_machine 1216detect_machine
1183# Now that we know the machine name, we can create the directory 1217# Now that we know the machine name, we can create the directory
1184mkdir -p machine/include/${mach_conf} 1218mkdir -p machine/include/${mach_conf}
1219mkdir -p ${dts_path}
1185 1220
1186echo "System Configuration:" 1221echo "System Configuration:"
1187echo "MODEL = \"${model}\"" 1222echo "MODEL = \"${model}\""
diff --git a/meta-xilinx-standalone-experimental/recipes-drivers/dmaps_git.bb b/meta-xilinx-standalone-experimental/recipes-drivers/dmaps_git.bb
index 0891fb86..1dcd8404 100644
--- a/meta-xilinx-standalone-experimental/recipes-drivers/dmaps_git.bb
+++ b/meta-xilinx-standalone-experimental/recipes-drivers/dmaps_git.bb
@@ -1,3 +1,18 @@
1inherit esw_examples 1inherit features_check
2 2
3ESW_COMPONENT_SRC = "/XilinxProcessorIPLib/drivers/dmaps/examples/" 3REQUIRED_MACHINE_FEATURES = "dmaps"
4
5inherit esw python3native
6
7DEPENDS += "xilstandalone "
8
9ESW_COMPONENT_SRC = "/XilinxProcessorIPLib/drivers/dmaps/src/"
10ESW_COMPONENT_NAME = "libdmaps.a"
11
12addtask do_generate_driver_data before do_configure after do_prepare_recipe_sysroot
13do_prepare_recipe_sysroot[rdeptask] = "do_unpack"
14
15do_configure:prepend() {
16 LOPPER_DTC_FLAGS="-b 0 -@" lopper ${DTS_FILE} -- baremetal_xparameters_xlnx.py ${ESW_MACHINE} ${S}
17 install -m 0755 xparameters.h ${S}/${ESW_COMPONENT_SRC}/
18}
diff --git a/meta-xilinx-standalone-experimental/recipes-libraries/xilffs_git.bb b/meta-xilinx-standalone-experimental/recipes-libraries/xilffs_git.bb
index 298e3033..b8dc3b33 100644
--- a/meta-xilinx-standalone-experimental/recipes-libraries/xilffs_git.bb
+++ b/meta-xilinx-standalone-experimental/recipes-libraries/xilffs_git.bb
@@ -1,4 +1,4 @@
1inherit esw features_check 1inherit esw
2 2
3ESW_COMPONENT_SRC = "/lib/sw_services/xilffs/src/" 3ESW_COMPONENT_SRC = "/lib/sw_services/xilffs/src/"
4ESW_COMPONENT_NAME = "libxilffs.a" 4ESW_COMPONENT_NAME = "libxilffs.a"
diff --git a/meta-xilinx-standalone/classes/xlnx-embeddedsw.bbclass b/meta-xilinx-standalone/classes/xlnx-embeddedsw.bbclass
index 51c8bdde..15b91fdb 100644
--- a/meta-xilinx-standalone/classes/xlnx-embeddedsw.bbclass
+++ b/meta-xilinx-standalone/classes/xlnx-embeddedsw.bbclass
@@ -6,11 +6,13 @@ REPO ??= "git://github.com/Xilinx/embeddedsw.git;protocol=https"
6ESW_BRANCH[2022.1] = "xlnx_rel_v2022.1_update" 6ESW_BRANCH[2022.1] = "xlnx_rel_v2022.1_update"
7ESW_BRANCH[2022.2] = "xlnx_rel_v2022.2" 7ESW_BRANCH[2022.2] = "xlnx_rel_v2022.2"
8ESW_BRANCH[2023.1] = "xlnx_rel_v2023.1_update" 8ESW_BRANCH[2023.1] = "xlnx_rel_v2023.1_update"
9ESW_BRANCH[2023.2] = "xlnx_rel_v2023.2"
9BRANCH ??= "${@d.getVarFlag('ESW_BRANCH', d.getVar('ESW_VER')) or '${ESW_VER}'}" 10BRANCH ??= "${@d.getVarFlag('ESW_BRANCH', d.getVar('ESW_VER')) or '${ESW_VER}'}"
10 11
11ESW_REV[2022.1] = "56d94a506fd9f80949f4cff08e13015928603f01" 12ESW_REV[2022.1] = "56d94a506fd9f80949f4cff08e13015928603f01"
12ESW_REV[2022.2] = "5330a64c8efd14f0eef09befdbb8d3d738c33ec2" 13ESW_REV[2022.2] = "5330a64c8efd14f0eef09befdbb8d3d738c33ec2"
13ESW_REV[2023.1] = "af784f742dad0ca6e69e05baf8de51152c396b9a" 14ESW_REV[2023.1] = "af784f742dad0ca6e69e05baf8de51152c396b9a"
15ESW_REV[2023.2] = "c9a0ee31b2a14cbcfcb56ca369037319b4ad4847"
14SRCREV ??= "${@d.getVarFlag('ESW_REV', d.getVar('ESW_VER')) or 'invalid'}" 16SRCREV ??= "${@d.getVarFlag('ESW_REV', d.getVar('ESW_VER')) or 'invalid'}"
15 17
16EMBEDDEDSW_BRANCHARG ?= "${@['nobranch=1', 'branch=${BRANCH}'][d.getVar('BRANCH') != '']}" 18EMBEDDEDSW_BRANCHARG ?= "${@['nobranch=1', 'branch=${BRANCH}'][d.getVar('BRANCH') != '']}"
@@ -20,6 +22,7 @@ LICENSE = "MIT"
20LIC_FILES_CHKSUM[xlnx_rel_v2022.1_update] = 'e62cb7a722c4430999e0a55a7234035d' 22LIC_FILES_CHKSUM[xlnx_rel_v2022.1_update] = 'e62cb7a722c4430999e0a55a7234035d'
21LIC_FILES_CHKSUM[xlnx_rel_v2022.2] = 'ce611484168a6000bd35df68fc4f4290' 23LIC_FILES_CHKSUM[xlnx_rel_v2022.2] = 'ce611484168a6000bd35df68fc4f4290'
22LIC_FILES_CHKSUM[xlnx_rel_v2023.1_update] = '3c310a3ee2197a4c92c6a0e2937c207c' 24LIC_FILES_CHKSUM[xlnx_rel_v2023.1_update] = '3c310a3ee2197a4c92c6a0e2937c207c'
25LIC_FILES_CHKSUM[xlnx_rel_v2023.2] = '9fceecdbcad88698f265578f3d4cb26c'
23LIC_FILES_CHKSUM ??= "file://license.txt;md5=${@d.getVarFlag('LIC_FILES_CHKSUM', d.getVar('BRANCH')) or '0'}" 26LIC_FILES_CHKSUM ??= "file://license.txt;md5=${@d.getVarFlag('LIC_FILES_CHKSUM', d.getVar('BRANCH')) or '0'}"
24 27
25SRC_URI = "${EMBEDDEDSW_SRCURI}" 28SRC_URI = "${EMBEDDEDSW_SRCURI}"
diff --git a/meta-xilinx-standalone/conf/distro/xilinx-standalone.inc b/meta-xilinx-standalone/conf/distro/xilinx-standalone.inc
index 4b51dd1b..814cb9cd 100644
--- a/meta-xilinx-standalone/conf/distro/xilinx-standalone.inc
+++ b/meta-xilinx-standalone/conf/distro/xilinx-standalone.inc
@@ -39,13 +39,11 @@ TOOLCHAIN_HOST_TASK:append:sdkmingw32 = " nativesdk-mingw-w64-winpthreads"
39# do so. 39# do so.
40DISABLE_STATIC:class-target ?= "" 40DISABLE_STATIC:class-target ?= ""
41 41
42SECURITY_CFLAGS:class-target ?= ""
43SECURITY_LDFLAGS:class-target ?= ""
44
45require conf/distro/include/no-static-libs.inc 42require conf/distro/include/no-static-libs.inc
46require conf/distro/include/yocto-uninative.inc 43require conf/distro/include/yocto-uninative.inc
47require conf/distro/include/security_flags.inc
48INHERIT += "uninative" 44INHERIT += "uninative"
49 45
50BB_SIGNATURE_HANDLER ?= "OEEquivHash" 46BB_SIGNATURE_HANDLER ?= "OEEquivHash"
51BB_HASHSERVE ??= "auto" 47BB_HASHSERVE ??= "auto"
48
49MACHINE_FEATURES_BACKFILL_CONSIDERED += "rtc qemu-usermode"
diff --git a/meta-xilinx-standalone/recipes-bsp/embeddedsw/fsbl-firmware_2023.2.bb b/meta-xilinx-standalone/recipes-bsp/embeddedsw/fsbl-firmware_2023.2.bb
new file mode 100644
index 00000000..8816dc4d
--- /dev/null
+++ b/meta-xilinx-standalone/recipes-bsp/embeddedsw/fsbl-firmware_2023.2.bb
@@ -0,0 +1,11 @@
1require fsbl-firmware.inc
2
3FILESPATH .= ":${FILE_DIRNAME}/embeddedsw/2023.1:${FILE_DIRNAME}/embeddedsw"
4
5SRC_URI += " \
6 file://makefile-skip-copy_bsp.sh.patch \
7 file://fsbl-fixups.patch \
8 "
9
10# This version does not build for zynq
11COMPATIBLE_MACHINE:zynq = "none"
diff --git a/meta-xilinx-standalone/recipes-bsp/embeddedsw/plm-firmware_2023.2.bb b/meta-xilinx-standalone/recipes-bsp/embeddedsw/plm-firmware_2023.2.bb
new file mode 100644
index 00000000..37861b75
--- /dev/null
+++ b/meta-xilinx-standalone/recipes-bsp/embeddedsw/plm-firmware_2023.2.bb
@@ -0,0 +1,29 @@
1require plm-firmware.inc
2
3# Separate build directories for versal and versal-net
4SOC_DIR = "versal"
5SOC_DIR:versal-net = "versal_net"
6B = "${S}/lib/sw_apps/versal_plm/src/${SOC_DIR}"
7
8BSP_DIR ?= "${B}/../../misc/versal_plm_bsp"
9
10FILESPATH .= ":${FILE_DIRNAME}/embeddedsw/2023.1:${FILE_DIRNAME}/embeddedsw"
11
12SRC_URI += " \
13 file://makefile-skip-copy_bsp.sh.patch \
14 file://0001-versal_fw-Fixup-core-makefiles.patch \
15 "
16
17EXTRA_COMPILER_FLAGS = "-g -ffunction-sections -fdata-sections -Wall -Wextra -Os -flto -ffat-lto-objects"
18
19do_configure() {
20 # manually do the copy_bsp step first, so as to be able to fix up use of
21 # mb-* commands
22 ${B}/../../misc/${SOC_DIR}/copy_bsp.sh
23}
24
25do_compile() {
26 oe_runmake
27
28 ${MB_OBJCOPY} -O binary ${B}/${ESW_COMPONENT} ${B}/${ESW_COMPONENT}.bin
29}
diff --git a/meta-xilinx-standalone/recipes-bsp/embeddedsw/pmu-firmware_2023.2.bb b/meta-xilinx-standalone/recipes-bsp/embeddedsw/pmu-firmware_2023.2.bb
new file mode 100644
index 00000000..fe6deddc
--- /dev/null
+++ b/meta-xilinx-standalone/recipes-bsp/embeddedsw/pmu-firmware_2023.2.bb
@@ -0,0 +1,16 @@
1require pmu-firmware.inc
2
3FILESPATH .= ":${FILE_DIRNAME}/embeddedsw/2023.1:${FILE_DIRNAME}/embeddedsw"
4
5SRC_URI += " \
6 file://makefile-skip-copy_bsp.sh.patch \
7 file://0001-zynqmp_pmufw-Fixup-core-makefiles.patch \
8 "
9
10EXTRA_COMPILER_FLAGS = "-ffunction-sections -fdata-sections -Wall -Wextra -Os -flto -ffat-lto-objects"
11
12do_compile() {
13 oe_runmake
14
15 ${MB_OBJCOPY} -O binary ${B}/${ESW_COMPONENT} ${B}/${ESW_COMPONENT}.bin
16}
diff --git a/meta-xilinx-standalone/recipes-bsp/embeddedsw/psm-firmware_2023.2.bb b/meta-xilinx-standalone/recipes-bsp/embeddedsw/psm-firmware_2023.2.bb
new file mode 100644
index 00000000..569c5a46
--- /dev/null
+++ b/meta-xilinx-standalone/recipes-bsp/embeddedsw/psm-firmware_2023.2.bb
@@ -0,0 +1,34 @@
1require psm-firmware.inc
2
3# Separate build directories for versal and versal-net
4SOC_DIR = "versal"
5SOC_DIR:versal-net = "versal_net"
6B = "${S}/lib/sw_apps/versal_psmfw/src/${SOC_DIR}"
7
8BSP_DIR ?= "${B}/../../misc/versal_psmfw_bsp"
9
10FILESPATH .= ":${FILE_DIRNAME}/embeddedsw/2023.1:${FILE_DIRNAME}/embeddedsw"
11
12SRC_URI += " \
13 file://makefile-skip-copy_bsp.sh.patch \
14 file://0001-versal_fw-Fixup-core-makefiles.patch \
15 "
16
17EXTRA_COMPILER_FLAGS = "-g -ffunction-sections -fdata-sections -Wall -Wextra"
18
19# Override default since we're in a subdirectory deeper now...
20do_configure() {
21 # manually do the copy_bsp step first, so as to be able to fix up use of
22 # mb-* commands
23 if [ ${SOC_DIR} != "versal" ]; then
24 ${B}/../../misc/${SOC_DIR}/copy_bsp.sh
25 else
26 ${B}/../../misc/copy_bsp.sh
27 fi
28}
29
30do_compile() {
31 oe_runmake
32
33 ${MB_OBJCOPY} -O binary ${B}/${ESW_COMPONENT} ${B}/${ESW_COMPONENT}.bin
34}
diff --git a/meta-xilinx-vendor/conf/machine/ultra96-zynqmp.conf b/meta-xilinx-vendor/conf/machine/ultra96-zynqmp.conf
index 6a88d757..daa73f2a 100644
--- a/meta-xilinx-vendor/conf/machine/ultra96-zynqmp.conf
+++ b/meta-xilinx-vendor/conf/machine/ultra96-zynqmp.conf
@@ -2,10 +2,6 @@
2#@NAME: ultra96-zynqmp 2#@NAME: ultra96-zynqmp
3#@DESCRIPTION: Machine support for Ultra96 Evaluation Board. 3#@DESCRIPTION: Machine support for Ultra96 Evaluation Board.
4 4
5# Compatibility with old BOARD value.
6# TODO - Remove these once removed from petalinux bsp
7MACHINEOVERRIDES =. "ultra96:"
8
9#### Preamble 5#### Preamble
10MACHINEOVERRIDES =. "${@['', 'ultra96-zynqmp:']['ultra96-zynqmp' !='${MACHINE}']}" 6MACHINEOVERRIDES =. "${@['', 'ultra96-zynqmp:']['ultra96-zynqmp' !='${MACHINE}']}"
11#### Regular settings follow 7#### Regular settings follow
@@ -51,6 +47,10 @@ require conf/machine/zynqmp-eg-generic.conf
51# from local.conf. 47# from local.conf.
52HDF_MACHINE = "ultra96-zynqmp" 48HDF_MACHINE = "ultra96-zynqmp"
53 49
50# KERNEL_DEVICETREE is disabled as we use board device tree from DTG to match
51# the xsa. User can enable explicitly if required from local.conf.
52# KERNEL_DEVICETREE = "xilinx/zynqmp-zcu100-revC.dtb"
53
54# Ultra96 has 2GB memory only but default zynqmp-generic has QB_MEM set to 4G, 54# Ultra96 has 2GB memory only but default zynqmp-generic has QB_MEM set to 4G,
55# Hence set QB_MEM to 2GB. 55# Hence set QB_MEM to 2GB.
56QB_MEM = "-m 2G" 56QB_MEM = "-m 2G"
@@ -71,3 +71,7 @@ MACHINE_ESSENTIAL_EXTRA_RDEPENDS += " \
71 linux-firmware-wl18xx \ 71 linux-firmware-wl18xx \
72 linux-firmware-ti-bt-wl180x \ 72 linux-firmware-ti-bt-wl180x \
73 " 73 "
74
75#### No additional settings should be after the Postamble
76#### Postamble
77PACKAGE_EXTRA_ARCHS:append = "${@['', ' ultra96_zynqmp']['ultra96-zynqmp' != '${MACHINE}']}"