diff options
89 files changed, 3114 insertions, 708 deletions
diff --git a/meta-dpdk/COPYING.MIT b/meta-dpdk/COPYING.MIT deleted file mode 100644 index fb950dc6..00000000 --- a/meta-dpdk/COPYING.MIT +++ /dev/null | |||
@@ -1,17 +0,0 @@ | |||
1 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
2 | of this software and associated documentation files (the "Software"), to deal | ||
3 | in the Software without restriction, including without limitation the rights | ||
4 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
5 | copies of the Software, and to permit persons to whom the Software is | ||
6 | furnished to do so, subject to the following conditions: | ||
7 | |||
8 | The above copyright notice and this permission notice shall be included in | ||
9 | all copies or substantial portions of the Software. | ||
10 | |||
11 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
12 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
13 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
14 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
15 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
16 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||
17 | THE SOFTWARE. | ||
diff --git a/meta-dpdk/LICENSE b/meta-dpdk/LICENSE deleted file mode 100644 index e57d3b90..00000000 --- a/meta-dpdk/LICENSE +++ /dev/null | |||
@@ -1,5 +0,0 @@ | |||
1 | All metadata files (including, but not limited to bb, bbappend, | ||
2 | bbclass, inc and conf files) are MIT licensed unless otherwise stated. | ||
3 | Source code included in tree for individual recipes is under the | ||
4 | LICENSE stated in the associated recipe (.bb file) unless otherwise | ||
5 | stated. | ||
diff --git a/meta-dpdk/README b/meta-dpdk/README deleted file mode 100644 index 1b256d02..00000000 --- a/meta-dpdk/README +++ /dev/null | |||
@@ -1,56 +0,0 @@ | |||
1 | meta-dpdk | ||
2 | ========= | ||
3 | |||
4 | This README file contains information on building the DPDK package. | ||
5 | |||
6 | This is a fork of meta-dpdk, git://git.yoctoproject.org/meta-dpdk | ||
7 | langdale branch as of commit bd1b4f10262f12dd66a91383757ccba4eeda0b08. | ||
8 | |||
9 | The software in this fork is specific to the AMD Embedded versal-net. | ||
10 | |||
11 | Dependencies | ||
12 | ============ | ||
13 | |||
14 | This layer depends on: | ||
15 | |||
16 | URI: git://git.openembedded.org/bitbake | ||
17 | branch: master | ||
18 | |||
19 | URI: git://git.openembedded.org/openembedded-core | ||
20 | layers: meta | ||
21 | branch: master | ||
22 | |||
23 | |||
24 | Guidelines for submitting patches | ||
25 | ==================================== | ||
26 | |||
27 | Please submit any patches against this fork of meta-dpdk to the meta-xilinx | ||
28 | mailing list (meta-xilinx@lists.yoctoproject.org). | ||
29 | |||
30 | Regardless of how you submit a patch or patchset, the patches should | ||
31 | at minimum follow the suggestions outlined in the 'Submitting a Change | ||
32 | to the Yocto Project' section in the Yocto Project Development Manual. | ||
33 | Specifically, they should: | ||
34 | |||
35 | - Include a 'Signed-off-by:' line. A commit can't legally be pulled | ||
36 | in without this. | ||
37 | |||
38 | - Provide a single-line, short summary of the change. This short | ||
39 | description should be prefixed by the BSP or recipe name, as | ||
40 | appropriate, followed by a colon. Capitalize the first character | ||
41 | of the summary (following the colon). | ||
42 | |||
43 | - For the body of the commit message, provide detailed information | ||
44 | that describes what you changed, why you made the change, and the | ||
45 | approach you used. | ||
46 | |||
47 | - If the change addresses a specific bug or issue that is associated | ||
48 | with a bug-tracking ID, include a reference to that ID in your | ||
49 | detailed description in the following format: [YOCTO #<bug-id>]. | ||
50 | |||
51 | - Pay attention to line length - please don't allow any particular | ||
52 | line in the commit message to stretch past 72 characters. | ||
53 | |||
54 | - For any non-trivial patch, provide information about how you | ||
55 | tested the patch, and for any non-trivial or non-obvious testing | ||
56 | setup, provide details of that setup. | ||
diff --git a/meta-dpdk/conf/layer.conf b/meta-dpdk/conf/layer.conf deleted file mode 100644 index 2b33f7a9..00000000 --- a/meta-dpdk/conf/layer.conf +++ /dev/null | |||
@@ -1,24 +0,0 @@ | |||
1 | # We have a conf and classes directory, add to BBPATH | ||
2 | BBPATH .= ":${LAYERDIR}" | ||
3 | |||
4 | # We have recipes-* directories, add to BBFILES | ||
5 | BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \ | ||
6 | ${LAYERDIR}/recipes-*/*/*.bbappend" | ||
7 | |||
8 | BBFILE_COLLECTIONS += "dpdk" | ||
9 | BBFILE_PATTERN_dpdk := "^${LAYERDIR}/" | ||
10 | BBFILE_PRIORITY_dpdk = "5" | ||
11 | |||
12 | LAYERDEPENDS_dpdk = "core" | ||
13 | |||
14 | # This should only be incremented on significant changes that will | ||
15 | # cause compatibility issues with other layers | ||
16 | LAYERVERSION_dpdk = "1" | ||
17 | LAYERSERIES_COMPAT_dpdk = "kirkstone langdale" | ||
18 | |||
19 | BBFILES_DYNAMIC += " \ | ||
20 | clang-layer:${LAYERDIR}/dynamic-layers/clang-layer/*/*/*.bb \ | ||
21 | clang-layer:${LAYERDIR}/dynamic-layers/clang-layer/*/*/*.bbappend \ | ||
22 | petalinux:${LAYERDIR}/dynamic-layers/petalinux/recipes-*/*/*.bb \ | ||
23 | petalinux:${LAYERDIR}/dynamic-layers/petalinux/recipes-*/*/*.bbappend \ | ||
24 | " | ||
diff --git a/meta-dpdk/dynamic-layers/clang-layer/recipes-support/xdp-tools/xdp-tools/0001-configure-skip-toolchain-checks.patch b/meta-dpdk/dynamic-layers/clang-layer/recipes-support/xdp-tools/xdp-tools/0001-configure-skip-toolchain-checks.patch deleted file mode 100644 index 32a88b20..00000000 --- a/meta-dpdk/dynamic-layers/clang-layer/recipes-support/xdp-tools/xdp-tools/0001-configure-skip-toolchain-checks.patch +++ /dev/null | |||
@@ -1,46 +0,0 @@ | |||
1 | From 53f8a8dffa571de99b50f1a7b757cfd7d8c24d21 Mon Sep 17 00:00:00 2001 | ||
2 | From: Naveen Saini <naveen.kumar.saini@intel.com> | ||
3 | Date: Mon, 17 Oct 2022 15:44:16 +0800 | ||
4 | Subject: [PATCH 1/4] configure: skip toolchain checks | ||
5 | |||
6 | Current logic fetch full command line along with the tool. i.e | ||
7 | gcc -m64 -march=skylake -mtune=generic ... | ||
8 | |||
9 | Which throws ERROR: Cannot find tool -m64 | ||
10 | |||
11 | So need to re-write for loop, so it can work in cross-compilation | ||
12 | environment too. | ||
13 | |||
14 | Upstream-Status: Inappropriate | ||
15 | |||
16 | Signed-off-by: Naveen Saini <naveen.kumar.saini@intel.com> | ||
17 | --- | ||
18 | configure | 12 ++++++------ | ||
19 | 1 file changed, 6 insertions(+), 6 deletions(-) | ||
20 | |||
21 | diff --git a/configure b/configure | ||
22 | index 70fdfdf..48d1ea5 100755 | ||
23 | --- a/configure | ||
24 | +++ b/configure | ||
25 | @@ -38,12 +38,12 @@ check_toolchain() | ||
26 | : ${EMACS=emacs} | ||
27 | : ${ARCH_INCLUDES=} | ||
28 | |||
29 | - for TOOL in $PKG_CONFIG $CC $LD $OBJCOPY $CLANG $LLC $M4; do | ||
30 | - if [ ! $(command -v ${TOOL} 2>/dev/null) ]; then | ||
31 | - echo "*** ERROR: Cannot find tool ${TOOL}" ; | ||
32 | - exit 1; | ||
33 | - fi; | ||
34 | - done | ||
35 | + #for TOOL in $PKG_CONFIG $CC $LD $OBJCOPY $CLANG $LLC $M4; do | ||
36 | + # if [ ! $(command -v ${TOOL} 2>/dev/null) ]; then | ||
37 | + # echo "*** ERROR: Cannot find tool ${TOOL}" ; | ||
38 | + # exit 1; | ||
39 | + # fi; | ||
40 | + #done | ||
41 | |||
42 | clang_version=$($CLANG --version | grep -Po '(?<=clang version )[[:digit:]]+') | ||
43 | echo "Found clang binary '$CLANG' with version $clang_version (from '$($CLANG --version | head -n 1)')" | ||
44 | -- | ||
45 | 2.25.1 | ||
46 | |||
diff --git a/meta-dpdk/dynamic-layers/clang-layer/recipes-support/xdp-tools/xdp-tools/0002-Makefile-It-does-not-detect-libbpf-header-from-sysro.patch b/meta-dpdk/dynamic-layers/clang-layer/recipes-support/xdp-tools/xdp-tools/0002-Makefile-It-does-not-detect-libbpf-header-from-sysro.patch deleted file mode 100644 index 2e667836..00000000 --- a/meta-dpdk/dynamic-layers/clang-layer/recipes-support/xdp-tools/xdp-tools/0002-Makefile-It-does-not-detect-libbpf-header-from-sysro.patch +++ /dev/null | |||
@@ -1,44 +0,0 @@ | |||
1 | From 2840cf0b89497f545fae2eed7ece3f3c5fc558e3 Mon Sep 17 00:00:00 2001 | ||
2 | From: Naveen Saini <naveen.kumar.saini@intel.com> | ||
3 | Date: Mon, 17 Oct 2022 15:50:34 +0800 | ||
4 | Subject: [PATCH 2/4] Makefile: It does not detect libbpf header from sysroot | ||
5 | |||
6 | So adding sysroot headers path. | ||
7 | |||
8 | Upstream-Status: OE-Specific | ||
9 | |||
10 | Signed-off-by: Naveen Saini <naveen.kumar.saini@intel.com> | ||
11 | --- | ||
12 | lib/common.mk | 2 +- | ||
13 | lib/libxdp/Makefile | 2 +- | ||
14 | 2 files changed, 2 insertions(+), 2 deletions(-) | ||
15 | |||
16 | diff --git a/lib/common.mk b/lib/common.mk | ||
17 | index 56c0406..ab0bad8 100644 | ||
18 | --- a/lib/common.mk | ||
19 | +++ b/lib/common.mk | ||
20 | @@ -55,7 +55,7 @@ LIBXDP_SOURCES := $(wildcard $(LIBXDP_DIR)/*.[ch] $(LIBXDP_DIR)/*.in) | ||
21 | KERN_USER_H ?= $(wildcard common_kern_user.h) | ||
22 | |||
23 | CFLAGS += -I$(HEADER_DIR) -I$(LIB_DIR)/util $(ARCH_INCLUDES) | ||
24 | -BPF_CFLAGS += -I$(HEADER_DIR) $(ARCH_INCLUDES) | ||
25 | +BPF_CFLAGS += -I$(HEADER_DIR) $(ARCH_INCLUDES) -I${STAGING_INCDIR}/ | ||
26 | |||
27 | BPF_HEADERS := $(wildcard $(HEADER_DIR)/bpf/*.h) $(wildcard $(HEADER_DIR)/xdp/*.h) | ||
28 | |||
29 | diff --git a/lib/libxdp/Makefile b/lib/libxdp/Makefile | ||
30 | index 358b751..8f459d8 100644 | ||
31 | --- a/lib/libxdp/Makefile | ||
32 | +++ b/lib/libxdp/Makefile | ||
33 | @@ -30,7 +30,7 @@ PC_FILE := $(OBJDIR)/libxdp.pc | ||
34 | TEMPLATED_SOURCES := xdp-dispatcher.c | ||
35 | |||
36 | CFLAGS += -I$(HEADER_DIR) | ||
37 | -BPF_CFLAGS += -I$(HEADER_DIR) | ||
38 | +BPF_CFLAGS += -I$(HEADER_DIR) -I${STAGING_INCDIR}/ | ||
39 | |||
40 | |||
41 | ifndef BUILD_STATIC_ONLY | ||
42 | -- | ||
43 | 2.25.1 | ||
44 | |||
diff --git a/meta-dpdk/dynamic-layers/clang-layer/recipes-support/xdp-tools/xdp-tools/0003-Makefile-fix-KeyError-failure.patch b/meta-dpdk/dynamic-layers/clang-layer/recipes-support/xdp-tools/xdp-tools/0003-Makefile-fix-KeyError-failure.patch deleted file mode 100644 index 41c57f6e..00000000 --- a/meta-dpdk/dynamic-layers/clang-layer/recipes-support/xdp-tools/xdp-tools/0003-Makefile-fix-KeyError-failure.patch +++ /dev/null | |||
@@ -1,31 +0,0 @@ | |||
1 | From 157546fbc4f18751c52b3c8788879c05cf253331 Mon Sep 17 00:00:00 2001 | ||
2 | From: Naveen Saini <naveen.kumar.saini@intel.com> | ||
3 | Date: Mon, 17 Oct 2022 16:02:46 +0800 | ||
4 | Subject: [PATCH 3/4] Makefile: fix KeyError failure | ||
5 | |||
6 | Error: | ||
7 | Exception: KeyError: 'getpwuid(): uid not found: 11857215' | ||
8 | |||
9 | Upstream-Status: Inappropriate | ||
10 | |||
11 | Signed-off-by: Naveen Saini <naveen.kumar.saini@intel.com> | ||
12 | --- | ||
13 | lib/libxdp/Makefile | 2 +- | ||
14 | 1 file changed, 1 insertion(+), 1 deletion(-) | ||
15 | |||
16 | diff --git a/lib/libxdp/Makefile b/lib/libxdp/Makefile | ||
17 | index 8f459d8..9a340a3 100644 | ||
18 | --- a/lib/libxdp/Makefile | ||
19 | +++ b/lib/libxdp/Makefile | ||
20 | @@ -55,7 +55,7 @@ install: all | ||
21 | $(Q)install -d -m 0755 $(DESTDIR)$(BPF_OBJECT_DIR) | ||
22 | $(Q)install -m 0644 $(LIB_HEADERS) $(DESTDIR)$(HDRDIR)/ | ||
23 | $(Q)install -m 0644 $(PC_FILE) $(DESTDIR)$(LIBDIR)/pkgconfig/ | ||
24 | - $(Q)cp -fpR $(SHARED_LIBS) $(STATIC_LIBS) $(DESTDIR)$(LIBDIR) | ||
25 | + $(Q)cp -fpR --no-preserve=ownership $(SHARED_LIBS) $(STATIC_LIBS) $(DESTDIR)$(LIBDIR) | ||
26 | $(Q)install -m 0755 $(XDP_OBJS) $(DESTDIR)$(BPF_OBJECT_DIR) | ||
27 | $(if $(MAN_FILES),$(Q)install -m 0755 -d $(DESTDIR)$(MANDIR)/man3) | ||
28 | $(if $(MAN_FILES),$(Q)install -m 0644 $(MAN_FILES) $(DESTDIR)$(MANDIR)/man3) | ||
29 | -- | ||
30 | 2.25.1 | ||
31 | |||
diff --git a/meta-dpdk/dynamic-layers/clang-layer/recipes-support/xdp-tools/xdp-tools/0004-Makefile-fix-libxdp.pc-error.patch b/meta-dpdk/dynamic-layers/clang-layer/recipes-support/xdp-tools/xdp-tools/0004-Makefile-fix-libxdp.pc-error.patch deleted file mode 100644 index b1e15e52..00000000 --- a/meta-dpdk/dynamic-layers/clang-layer/recipes-support/xdp-tools/xdp-tools/0004-Makefile-fix-libxdp.pc-error.patch +++ /dev/null | |||
@@ -1,34 +0,0 @@ | |||
1 | From 46b3ff797135574aa0ee42f633a281d44f48da95 Mon Sep 17 00:00:00 2001 | ||
2 | From: Naveen Saini <naveen.kumar.saini@intel.com> | ||
3 | Date: Mon, 17 Oct 2022 16:05:15 +0800 | ||
4 | Subject: [PATCH 4/4] Makefile: fix libxdp.pc error | ||
5 | |||
6 | Error: | ||
7 | do_populate_sysroot: QA Issue: libxdp.pc failed sanity test (tmpdir) in | ||
8 | path ... xdp-tools/1.2.8-r0/sysroot-destdir/usr/lib/pkgconfig [pkgconfig] | ||
9 | |||
10 | Upstream-Status: Inappropriate | ||
11 | |||
12 | Signed-off-by: Naveen Saini <naveen.kumar.saini@intel.com> | ||
13 | --- | ||
14 | lib/libxdp/Makefile | 4 ++-- | ||
15 | 1 file changed, 2 insertions(+), 2 deletions(-) | ||
16 | |||
17 | diff --git a/lib/libxdp/Makefile b/lib/libxdp/Makefile | ||
18 | index 9a340a3..bc39177 100644 | ||
19 | --- a/lib/libxdp/Makefile | ||
20 | +++ b/lib/libxdp/Makefile | ||
21 | @@ -76,8 +76,8 @@ $(OBJDIR)/libxdp.so.$(LIBXDP_VERSION): $(SHARED_OBJS) | ||
22 | $^ $(LDFLAGS) $(LDLIBS) -o $@ | ||
23 | |||
24 | $(OBJDIR)/libxdp.pc: | ||
25 | - $(Q)sed -e "s|@PREFIX@|$(PREFIX)|" \ | ||
26 | - -e "s|@LIBDIR@|$(LIBDIR)|" \ | ||
27 | + $(Q)sed -e "s|@PREFIX@|$(prefix)|" \ | ||
28 | + -e "s|@LIBDIR@|$(libdir)|" \ | ||
29 | -e "s|@VERSION@|$(TOOLS_VERSION)|" \ | ||
30 | < libxdp.pc.template > $@ | ||
31 | |||
32 | -- | ||
33 | 2.25.1 | ||
34 | |||
diff --git a/meta-dpdk/dynamic-layers/clang-layer/recipes-support/xdp-tools/xdp-tools_1.2.8.bb b/meta-dpdk/dynamic-layers/clang-layer/recipes-support/xdp-tools/xdp-tools_1.2.8.bb deleted file mode 100644 index 7cd49a0b..00000000 --- a/meta-dpdk/dynamic-layers/clang-layer/recipes-support/xdp-tools/xdp-tools_1.2.8.bb +++ /dev/null | |||
@@ -1,37 +0,0 @@ | |||
1 | SUMMARY = "Utilities and example programs for use with XDP" | ||
2 | HOMEPAGE = "https://github.com/xdp-project/xdp-tools" | ||
3 | LICENSE = "GPL-2.0-or-later & LGPL-2.1-or-later & BSD-2-Clause" | ||
4 | LIC_FILES_CHKSUM = "file://LICENSE;md5=9ee53f8d06bbdb4c11b1557ecc4f8cd5 \ | ||
5 | file://LICENSES/GPL-2.0;md5=994331978b428511800bfbd17eea3001 \ | ||
6 | file://LICENSES/LGPL-2.1;md5=b370887980db5dd40659b50909238dbd \ | ||
7 | file://LICENSES/BSD-2-Clause;md5=5d6306d1b08f8df623178dfd81880927" | ||
8 | |||
9 | DEPENDS += " libbpf clang-native zlib elfutils libpcap" | ||
10 | |||
11 | SRC_URI = "git://github.com/xdp-project/xdp-tools.git;branch=v1.2;protocol=https \ | ||
12 | file://0001-configure-skip-toolchain-checks.patch \ | ||
13 | file://0002-Makefile-It-does-not-detect-libbpf-header-from-sysro.patch \ | ||
14 | file://0003-Makefile-fix-KeyError-failure.patch \ | ||
15 | file://0004-Makefile-fix-libxdp.pc-error.patch \ | ||
16 | " | ||
17 | |||
18 | SRCREV = "d4ff1f9bcf8b03556b625ab6e16958598482e861" | ||
19 | |||
20 | S = "${WORKDIR}/git" | ||
21 | |||
22 | inherit pkgconfig | ||
23 | |||
24 | EXTRA_OEMAKE += "PREFIX=${D}${prefix} LIBDIR=${D}${libdir} BUILD_STATIC_ONLY=1 PRODUCTION=1" | ||
25 | |||
26 | CFLAGS += "-fPIC" | ||
27 | |||
28 | export STAGING_INCDIR | ||
29 | |||
30 | do_install () { | ||
31 | oe_runmake install | ||
32 | |||
33 | # Remove object files *.o | ||
34 | rm -rf ${D}/${libdir}/bpf | ||
35 | } | ||
36 | |||
37 | RDEPENDS:${PN} += "bash" | ||
diff --git a/meta-dpdk/dynamic-layers/petalinux/recipes-core/images/petalinux-image-everything.bbappend b/meta-dpdk/dynamic-layers/petalinux/recipes-core/images/petalinux-image-everything.bbappend deleted file mode 100644 index 732b1b45..00000000 --- a/meta-dpdk/dynamic-layers/petalinux/recipes-core/images/petalinux-image-everything.bbappend +++ /dev/null | |||
@@ -1,2 +0,0 @@ | |||
1 | COMMON_INSTALL:append:versal-net = " dpdk libmcdi" | ||
2 | |||
diff --git a/meta-dpdk/recipes-extended/dpdk/dpdk.inc b/meta-dpdk/recipes-extended/dpdk/dpdk.inc deleted file mode 100644 index 9ce9737e..00000000 --- a/meta-dpdk/recipes-extended/dpdk/dpdk.inc +++ /dev/null | |||
@@ -1,12 +0,0 @@ | |||
1 | DESCRIPTION = "Data Plane Development Kit" | ||
2 | HOMEPAGE = "http://dpdk.org" | ||
3 | |||
4 | LICENSE = "BSD-3-Clause & LGPL-2.1-only & GPL-2.0-only" | ||
5 | LIC_FILES_CHKSUM = "file://license/gpl-2.0.txt;md5=b234ee4d69f5fce4486a80fdaf4a4263 \ | ||
6 | file://license/lgpl-2.1.txt;md5=4b54a1fd55a448865a0b32d41598759d \ | ||
7 | file://license/bsd-3-clause.txt;md5=0f00d99239d922ffd13cabef83b33444" | ||
8 | |||
9 | SRC_URI = "git://dpdk.org/dpdk${STABLE};branch=${BRANCH} \ | ||
10 | " | ||
11 | |||
12 | CVE_PRODUCT = "data_plane_development_kit" | ||
diff --git a/meta-dpdk/recipes-extended/dpdk/dpdk_22.11.0.bb b/meta-dpdk/recipes-extended/dpdk/dpdk_22.11.0.bb deleted file mode 100644 index abce8d16..00000000 --- a/meta-dpdk/recipes-extended/dpdk/dpdk_22.11.0.bb +++ /dev/null | |||
@@ -1,71 +0,0 @@ | |||
1 | include dpdk.inc | ||
2 | |||
3 | SRC_URI = "git://github.com/Xilinx-CNS/cns-dpdk-next-sfc.git;branch=${BRANCH};protocol=https" | ||
4 | |||
5 | BRANCH = "cdx_22.11" | ||
6 | SRCREV = "92339d519b50996915e7dbb5b8246b34febcba93" | ||
7 | S = "${WORKDIR}/git" | ||
8 | |||
9 | # kernel module is provide by dpdk-module recipe, so disable here | ||
10 | EXTRA_OEMESON = " \ | ||
11 | -Denable_kmods=false \ | ||
12 | -Dexamples=cdma_demo,cdx_test \ | ||
13 | " | ||
14 | |||
15 | COMPATIBLE_MACHINE = "null" | ||
16 | COMPATIBLE_MACHINE:versal-net = "${MACHINE}" | ||
17 | COMPATIBLE_HOST:libc-musl:class-target = "null" | ||
18 | COMPATIBLE_HOST:linux-gnux32 = "null" | ||
19 | |||
20 | PACKAGECONFIG ??= " " | ||
21 | PACKAGECONFIG[afxdp] = ",,libbpf xdp-tools" | ||
22 | PACKAGECONFIG[libvirt] = ",,libvirt" | ||
23 | |||
24 | RDEPENDS:${PN} += "pciutils python3-core" | ||
25 | RDEPENDS:${PN}-examples += "bash" | ||
26 | DEPENDS = "numactl python3-pyelftools-native" | ||
27 | |||
28 | inherit meson pkgconfig | ||
29 | |||
30 | INSTALL_PATH = "${prefix}/share/dpdk" | ||
31 | |||
32 | do_write_config:append(){ | ||
33 | sed -i "/\[properties\]/a platform = \'cdx\'" ${WORKDIR}/meson.cross | ||
34 | } | ||
35 | |||
36 | do_install:append(){ | ||
37 | # remove source files | ||
38 | rm -rf ${D}/${INSTALL_PATH}/examples/* | ||
39 | |||
40 | # Install examples | ||
41 | install -m 0755 -d ${D}/${INSTALL_PATH}/examples/ | ||
42 | for dirname in ${B}/examples/dpdk-* | ||
43 | do | ||
44 | if [ ! -d ${dirname} ] && [ -x ${dirname} ]; then | ||
45 | install -m 0755 ${dirname} ${D}/${INSTALL_PATH}/examples/ | ||
46 | fi | ||
47 | done | ||
48 | |||
49 | } | ||
50 | |||
51 | PACKAGES =+ "${PN}-examples ${PN}-tools" | ||
52 | |||
53 | FILES:${PN} += " ${bindir}/dpdk-testpmd \ | ||
54 | ${bindir}/dpdk-proc-info \ | ||
55 | ${libdir}/*.so* \ | ||
56 | ${libdir}/dpdk/pmds-22.0/*.so* \ | ||
57 | " | ||
58 | FILES:${PN}-examples = " \ | ||
59 | ${INSTALL_PATH}/examples/* \ | ||
60 | " | ||
61 | |||
62 | FILES:${PN}-tools = " \ | ||
63 | ${bindir}/dpdk-pdump \ | ||
64 | ${bindir}/dpdk-test \ | ||
65 | ${bindir}/dpdk-test-* \ | ||
66 | ${bindir}/dpdk-*.py \ | ||
67 | " | ||
68 | |||
69 | CVE_PRODUCT = "data_plane_development_kit" | ||
70 | |||
71 | INSANE_SKIP:${PN} = "dev-so" | ||
diff --git a/meta-dpdk/recipes-extended/dpdk/libmcdi_0.1.0.bb b/meta-dpdk/recipes-extended/dpdk/libmcdi_0.1.0.bb deleted file mode 100644 index 0bc9a849..00000000 --- a/meta-dpdk/recipes-extended/dpdk/libmcdi_0.1.0.bb +++ /dev/null | |||
@@ -1,33 +0,0 @@ | |||
1 | DESCRIPTION = "Management Controller Driver Interface library" | ||
2 | |||
3 | LICENSE = "MIT" | ||
4 | LIC_FILES_CHKSUM = "file://COPYING.MIT;md5=838c366f69b72c5df05c96dff79b35f2" | ||
5 | |||
6 | SRC_URI = "git://github.com/Xilinx-CNS/mcdi-lib.git;branch=${BRANCH};protocol=https" | ||
7 | BRANCH = "master" | ||
8 | SRCREV = "db448189e5fcb38b4750faf6afe243d7998863bc" | ||
9 | |||
10 | S = "${WORKDIR}/git" | ||
11 | |||
12 | COMPATIBLE_MACHINE = "^$" | ||
13 | COMPATIBLE_MACHINE:versal-net = "${MACHINE}" | ||
14 | |||
15 | MCDI_PATH_EXAMPLES = "${datadir}/${BPN}/examples" | ||
16 | |||
17 | do_compile() { | ||
18 | oe_runmake all CC="${CC}" CROSS_COMPILE="${TARGET_PREFIX}" | ||
19 | } | ||
20 | |||
21 | do_install() { | ||
22 | oe_runmake install prefix="${prefix}" DESTDIR="${D}" | ||
23 | |||
24 | install -d ${D}/${MCDI_PATH_EXAMPLES} | ||
25 | install -m 0755 ${B}/example/mcdi_example_app ${D}/${MCDI_PATH_EXAMPLES} | ||
26 | install -m 0755 ${B}/init/init_app ${D}/${MCDI_PATH_EXAMPLES} | ||
27 | } | ||
28 | |||
29 | PACKAGES =+ "${PN}-examples" | ||
30 | |||
31 | FILES:${PN}-examples = " \ | ||
32 | ${MCDI_PATH_EXAMPLES}/* \ | ||
33 | " | ||
diff --git a/meta-xilinx-bsp/conf/layer.conf b/meta-xilinx-bsp/conf/layer.conf index 56a5bc29..051ca361 100644 --- a/meta-xilinx-bsp/conf/layer.conf +++ b/meta-xilinx-bsp/conf/layer.conf | |||
@@ -17,5 +17,3 @@ BBFILE_PRIORITY_xilinx-bsp = "5" | |||
17 | LAYERDEPENDS_xilinx-bsp = "xilinx" | 17 | LAYERDEPENDS_xilinx-bsp = "xilinx" |
18 | 18 | ||
19 | LAYERSERIES_COMPAT_xilinx-bsp = "langdale" | 19 | LAYERSERIES_COMPAT_xilinx-bsp = "langdale" |
20 | |||
21 | PREFERRED_VERSION_kc705-bitstream ?= "${XILINX_RELEASE_VERSION}" | ||
diff --git a/meta-xilinx-bsp/conf/machine/vck5000-versal.conf b/meta-xilinx-bsp/conf/machine/vck5000-versal.conf deleted file mode 100644 index 9396bd97..00000000 --- a/meta-xilinx-bsp/conf/machine/vck5000-versal.conf +++ /dev/null | |||
@@ -1,45 +0,0 @@ | |||
1 | #@TYPE: Machine | ||
2 | #@NAME: vck500-versal | ||
3 | #@DESCRIPTION: Machine configuration for the VCK5000 evaluation board. | ||
4 | |||
5 | #### Preamble | ||
6 | MACHINEOVERRIDES =. "${@['', 'vck5000-versal:']['vck5000-versal' !='${MACHINE}']}" | ||
7 | #### Regular settings follow | ||
8 | |||
9 | # Variables that changes based on hw design or board specific requirement must be | ||
10 | # defined before calling the required inclusion file else pre-expansion value | ||
11 | # defined in versal-generic.conf will be set. | ||
12 | |||
13 | # Yocto device-tree variables | ||
14 | YAML_CONSOLE_DEVICE_CONFIG:pn-device-tree ?= "versal_cips_0_pspmc_0_psv_sbsauart_0" | ||
15 | YAML_DT_BOARD_FLAGS ?= "{BOARD template}" | ||
16 | |||
17 | # Yocto arm-trusted-firmware(TF-A) variables | ||
18 | ATF_CONSOLE ?= "pl011" | ||
19 | TFA_BL33_LOAD ?= "0x8000000" | ||
20 | |||
21 | # Yocto PLM variables | ||
22 | YAML_SERIAL_CONSOLE_STDIN:pn-plm-firmware ?= "versal_cips_0_pspmc_0_psv_sbsauart_0" | ||
23 | YAML_SERIAL_CONSOLE_STDOUT:pn-plm-firmware ?= "versal_cips_0_pspmc_0_psv_sbsauart_0" | ||
24 | |||
25 | # Yocto KERNEL Variables | ||
26 | UBOOT_ENTRYPOINT ?= "0x200000" | ||
27 | UBOOT_LOADADDRESS ?= "0x200000" | ||
28 | |||
29 | # vck5000-versal Serial Console | ||
30 | SERIAL_CONSOLES ?= "115200;ttyAMA0" | ||
31 | YAML_SERIAL_CONSOLE_BAUDRATE ?= "115200" | ||
32 | |||
33 | # Required generic machine inclusion | ||
34 | # VCK5000 board uses Versal AI Core device hence use soc variant based generic | ||
35 | # machine inclusion | ||
36 | require conf/machine/versal-ai-core-generic.conf | ||
37 | |||
38 | # This machine conf file uses vck5000-versal xsa as reference input. | ||
39 | # User can override with vck5000 custom xsa using HDF_BASE and HDF_PATH variables | ||
40 | # from local.conf. | ||
41 | HDF_MACHINE = "vck5000-versal" | ||
42 | |||
43 | #### No additional settings should be after the Postamble | ||
44 | #### Postamble | ||
45 | PACKAGE_EXTRA_ARCHS:append = "${@['', ' vck5000_versal']['vck5000-versal' != '${MACHINE}']}" | ||
diff --git a/meta-xilinx-bsp/conf/machine/vhk158-versal.conf b/meta-xilinx-bsp/conf/machine/vhk158-versal.conf deleted file mode 100644 index b09bde28..00000000 --- a/meta-xilinx-bsp/conf/machine/vhk158-versal.conf +++ /dev/null | |||
@@ -1,52 +0,0 @@ | |||
1 | #@TYPE: Machine | ||
2 | #@NAME: vhk158-versal | ||
3 | #@DESCRIPTION: Machine configuration for the VHK158 evaluation board. | ||
4 | |||
5 | #### Preamble | ||
6 | MACHINEOVERRIDES =. "${@['', 'vhk158-versal:']['vhk158-versal' !='${MACHINE}']}" | ||
7 | #### Regular settings follow | ||
8 | |||
9 | # Variables that changes based on hw design or board specific requirement must be | ||
10 | # defined before calling the required inclusion file else pre-expansion value | ||
11 | # defined in versal-generic.conf will be set. | ||
12 | |||
13 | # Yocto device-tree variables | ||
14 | YAML_CONSOLE_DEVICE_CONFIG:pn-device-tree ?= "versal_cips_0_pspmc_0_psv_sbsauart_0" | ||
15 | YAML_DT_BOARD_FLAGS ?= "{BOARD versal-vhk158-reva}" | ||
16 | |||
17 | # Yocto arm-trusted-firmware(TF-A) variables | ||
18 | ATF_CONSOLE ?= "pl011" | ||
19 | TFA_BL33_LOAD ?= "0x8000000" | ||
20 | |||
21 | # Yocto PLM variables | ||
22 | YAML_SERIAL_CONSOLE_STDIN:pn-plm-firmware ?= "versal_cips_0_pspmc_0_psv_sbsauart_0" | ||
23 | YAML_SERIAL_CONSOLE_STDOUT:pn-plm-firmware ?= "versal_cips_0_pspmc_0_psv_sbsauart_0" | ||
24 | |||
25 | # Yocto KERNEL Variables | ||
26 | UBOOT_ENTRYPOINT ?= "0x200000" | ||
27 | UBOOT_LOADADDRESS ?= "0x200000" | ||
28 | |||
29 | # vhk158-versal Serial Console | ||
30 | SERIAL_CONSOLES ?= "115200;ttyAMA0" | ||
31 | YAML_SERIAL_CONSOLE_BAUDRATE ?= "115200" | ||
32 | |||
33 | # Required generic machine inclusion | ||
34 | # VHK158 board uses Versal HBM device hence use soc variant based generic | ||
35 | # machine inclusion | ||
36 | require conf/machine/versal-hbm-generic.conf | ||
37 | |||
38 | # This machine conf file uses vhk158-versal xsa as reference input. | ||
39 | # User can override with vhk158 custom xsa using HDF_BASE and HDF_PATH variables | ||
40 | # from local.conf. | ||
41 | HDF_MACHINE = "vhk158-versal" | ||
42 | |||
43 | # VHK158 has 32GB memory only but default versal-generic has QB_MEM set to 8G, | ||
44 | # Since versal-vhk158-reva.dts has 32GB set, we need set same in QB_MEM | ||
45 | QB_MEM = "-m 32G" | ||
46 | |||
47 | QEMU_HW_DTB_PS = "${QEMU_HW_DTB_PATH}/board-versal-ps-vhk158.dtb" | ||
48 | QEMU_HW_DTB_PMC = "${QEMU_HW_DTB_PATH}/board-versal-pmc-virt.dtb" | ||
49 | |||
50 | #### No additional settings should be after the Postamble | ||
51 | #### Postamble | ||
52 | PACKAGE_EXTRA_ARCHS:append = "${@['', ' vhk158_versal']['vhk158-versal' != '${MACHINE}']}" | ||
diff --git a/meta-xilinx-bsp/conf/machine/zcu1275-zynqmp.conf b/meta-xilinx-bsp/conf/machine/zcu1275-zynqmp.conf new file mode 100644 index 00000000..71c94038 --- /dev/null +++ b/meta-xilinx-bsp/conf/machine/zcu1275-zynqmp.conf | |||
@@ -0,0 +1,50 @@ | |||
1 | #@TYPE: Machine | ||
2 | #@NAME: zcu1275-zynqmp | ||
3 | #@DESCRIPTION: Machine configuration for the ZCU1275 evaluation board. | ||
4 | |||
5 | #### Preamble | ||
6 | MACHINEOVERRIDES =. "${@['', 'zcu1275-zynqmp:']['zcu1275-zynqmp' !='${MACHINE}']}" | ||
7 | #### Regular settings follow | ||
8 | |||
9 | # Yocto device-tree variables | ||
10 | YAML_CONSOLE_DEVICE_CONFIG:pn-device-tree ?= "psu_uart_0" | ||
11 | YAML_MAIN_MEMORY_CONFIG:pn-device-tree ?= "PSU_DDR_0" | ||
12 | YAML_DT_BOARD_FLAGS ?= "{BOARD zcu1275-revb}" | ||
13 | |||
14 | # Yocto arm-trusted-firmware(TF-A) variables | ||
15 | ATF_CONSOLE ?= "cadence" | ||
16 | TFA_BL33_LOAD ?= "0x8000000" | ||
17 | |||
18 | # Yocto PMUFW variables | ||
19 | YAML_SERIAL_CONSOLE_STDIN:pn-pmu-firmware ?= "psu_uart_0" | ||
20 | YAML_SERIAL_CONSOLE_STDOUT:pn-pmu-firmware ?= "psu_uart_0" | ||
21 | |||
22 | # Yocto FSBL variables | ||
23 | YAML_SERIAL_CONSOLE_STDIN:pn-fsbl-firmware ?= "psu_uart_0" | ||
24 | YAML_SERIAL_CONSOLE_STDOUT:pn-fsbl-firmware ?= "psu_uart_0" | ||
25 | |||
26 | # Yocto KERNEL Variables | ||
27 | UBOOT_ENTRYPOINT ?= "0x200000" | ||
28 | UBOOT_LOADADDRESS ?= "0x200000" | ||
29 | |||
30 | # zcu1275-zynqmp Serial Console | ||
31 | SERIAL_CONSOLES ?= "115200;ttyPS0" | ||
32 | YAML_SERIAL_CONSOLE_BAUDRATE ?= "115200" | ||
33 | |||
34 | # Required generic machine inclusion | ||
35 | # ZCU1275 board uses ZynqMP DR device hence use soc variant based generic machine | ||
36 | # inclusion | ||
37 | require conf/machine/zynqmp-dr-generic.conf | ||
38 | |||
39 | # This eval board machine conf file uses zcu1275-zynqmp xsa as reference input. | ||
40 | # User can override with zcu1275 custom xsa using HDF_BASE and HDF_PATH variables | ||
41 | # from local.conf. | ||
42 | HDF_MACHINE = "zcu1275-zynqmp" | ||
43 | |||
44 | # KERNEL_DEVICETREE is disabled as we use board device tree from DTG to match | ||
45 | # the xsa. User can enable explicitly if required from local.conf. | ||
46 | # KERNEL_DEVICETREE = "xilinx/zynqmp-zcu1275-revB.dtb" | ||
47 | |||
48 | #### No additional settings should be after the Postamble | ||
49 | #### Postamble | ||
50 | PACKAGE_EXTRA_ARCHS:append = "${@['', 'zcu1275_zynqmp']['zcu1275-zynqmp' != '${MACHINE}']}" | ||
diff --git a/meta-xilinx-bsp/conf/machine/zcu670-zynqmp.conf b/meta-xilinx-bsp/conf/machine/zcu1285-zynqmp.conf index c726e9f5..812a283f 100644 --- a/meta-xilinx-bsp/conf/machine/zcu670-zynqmp.conf +++ b/meta-xilinx-bsp/conf/machine/zcu1285-zynqmp.conf | |||
@@ -1,9 +1,9 @@ | |||
1 | #@TYPE: Machine | 1 | #@TYPE: Machine |
2 | #@NAME: zcu670-zynqmp | 2 | #@NAME: zcu1285-zynqmp |
3 | #@DESCRIPTION: Machine configuration for the ZCU670 evaluation board. | 3 | #@DESCRIPTION: Machine configuration for the ZCU1285 evaluation board. |
4 | 4 | ||
5 | #### Preamble | 5 | #### Preamble |
6 | MACHINEOVERRIDES =. "${@['', 'zcu670-zynqmp:']['zcu670-zynqmp' !='${MACHINE}']}" | 6 | MACHINEOVERRIDES =. "${@['', 'zcu1285-zynqmp:']['zcu1285-zynqmp' !='${MACHINE}']}" |
7 | #### Regular settings follow | 7 | #### Regular settings follow |
8 | 8 | ||
9 | # Variables that changes based on hw design or board specific requirement must be | 9 | # Variables that changes based on hw design or board specific requirement must be |
@@ -13,7 +13,7 @@ MACHINEOVERRIDES =. "${@['', 'zcu670-zynqmp:']['zcu670-zynqmp' !='${MACHINE}']}" | |||
13 | # Yocto device-tree variables | 13 | # Yocto device-tree variables |
14 | YAML_CONSOLE_DEVICE_CONFIG:pn-device-tree ?= "psu_uart_0" | 14 | YAML_CONSOLE_DEVICE_CONFIG:pn-device-tree ?= "psu_uart_0" |
15 | YAML_MAIN_MEMORY_CONFIG:pn-device-tree ?= "PSU_DDR_0" | 15 | YAML_MAIN_MEMORY_CONFIG:pn-device-tree ?= "PSU_DDR_0" |
16 | YAML_DT_BOARD_FLAGS ?= "{BOARD zcu670-revb}" | 16 | YAML_DT_BOARD_FLAGS ?= "{BOARD zcu1285-reva}" |
17 | 17 | ||
18 | # Yocto arm-trusted-firmware(TF-A) variables | 18 | # Yocto arm-trusted-firmware(TF-A) variables |
19 | ATF_CONSOLE ?= "cadence" | 19 | ATF_CONSOLE ?= "cadence" |
@@ -31,20 +31,24 @@ YAML_SERIAL_CONSOLE_STDOUT:pn-fsbl-firmware ?= "psu_uart_0" | |||
31 | UBOOT_ENTRYPOINT ?= "0x200000" | 31 | UBOOT_ENTRYPOINT ?= "0x200000" |
32 | UBOOT_LOADADDRESS ?= "0x200000" | 32 | UBOOT_LOADADDRESS ?= "0x200000" |
33 | 33 | ||
34 | # zcu670-zynqmp Serial Console | 34 | # zcu1285-zynqmp Serial Console |
35 | SERIAL_CONSOLES ?= "115200;ttyPS0" | 35 | SERIAL_CONSOLES ?= "115200;ttyPS0" |
36 | YAML_SERIAL_CONSOLE_BAUDRATE ?= "115200" | 36 | YAML_SERIAL_CONSOLE_BAUDRATE ?= "115200" |
37 | 37 | ||
38 | # Required generic machine inclusion | 38 | # Required generic machine inclusion |
39 | # ZCU670 board uses ZynqMP DR device hence use soc variant based generic machine | 39 | # ZCU1285 board uses ZynqMP DR device hence use soc variant based generic machine |
40 | # inclusion | 40 | # inclusion |
41 | require conf/machine/zynqmp-dr-generic.conf | 41 | require conf/machine/zynqmp-dr-generic.conf |
42 | 42 | ||
43 | # This eval board machine conf file uses zcu670-zynqmp xsa as reference input. | 43 | # This eval board machine conf file uses zcu1285-zynqmp xsa as reference input. |
44 | # User can override with zcu670 custom xsa using HDF_BASE and HDF_PATH variables | 44 | # User can override with zcu1285 custom xsa using HDF_BASE and HDF_PATH variables |
45 | # from local.conf. | 45 | # from local.conf. |
46 | HDF_MACHINE = "zcu670-zynqmp" | 46 | HDF_MACHINE = "zcu1285-zynqmp" |
47 | |||
48 | # KERNEL_DEVICETREE is disabled as we use board device tree from DTG to match | ||
49 | # the xsa. User can enable explicitly if required from local.conf. | ||
50 | # KERNEL_DEVICETREE = "xilinx/zynqmp-zcu1285-revA.dtb" | ||
47 | 51 | ||
48 | #### No additional settings should be after the Postamble | 52 | #### No additional settings should be after the Postamble |
49 | #### Postamble | 53 | #### Postamble |
50 | PACKAGE_EXTRA_ARCHS:append = "${@['', ' zcu670_zynqmp']['zcu670-zynqmp' != '${MACHINE}']}" | 54 | PACKAGE_EXTRA_ARCHS:append = "${@['', 'zcu1285_zynqmp']['zcu1285-zynqmp' != '${MACHINE}']}" |
diff --git a/meta-xilinx-bsp/recipes-bsp/reference-design/kc705-bitstream_2022.2.bb b/meta-xilinx-bsp/recipes-bsp/reference-design/kc705-bitstream_2022.2.bb deleted file mode 100644 index e512777c..00000000 --- a/meta-xilinx-bsp/recipes-bsp/reference-design/kc705-bitstream_2022.2.bb +++ /dev/null | |||
@@ -1,48 +0,0 @@ | |||
1 | SUMMARY = "KC705 Pre-built Bitstream" | ||
2 | DESCRIPTION = "A Pre-built bitstream for the KC705, which is capable of booting a Linux system." | ||
3 | HOMEPAGE = "http://www.xilinx.com" | ||
4 | SECTION = "bsp" | ||
5 | |||
6 | # The BSP package does not include any license information. | ||
7 | LICENSE = "Proprietary" | ||
8 | LICENSE_FLAGS = "xilinx" | ||
9 | LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Proprietary;md5=0557f9d92cf58f2ccdd50f62f8ac0b28" | ||
10 | |||
11 | COMPATIBLE_MACHINE = "kc705-microblazeel" | ||
12 | |||
13 | inherit deploy | ||
14 | inherit xilinx-fetch-restricted | ||
15 | |||
16 | BSP_NAME = "xilinx-kc705" | ||
17 | BSP_FILE = "${BSP_NAME}-v${PV}-final.bsp" | ||
18 | SRC_URI = "https://www.xilinx.com/member/forms/download/xef.html?filename=${BSP_FILE};downloadfilename=${BSP_FILE}" | ||
19 | SRC_URI[md5sum] = "5c0365a8a26cc27b4419aa1d7dd82351" | ||
20 | SRC_URI[sha256sum] = "a909a91a37a9925ee2f972ccb10f986a26ff9785c1a71a483545a192783bf773" | ||
21 | |||
22 | PROVIDES = "virtual/bitstream" | ||
23 | |||
24 | FILES:${PN} += "/boot/download.bit" | ||
25 | |||
26 | INHIBIT_DEFAULT_DEPS = "1" | ||
27 | PACKAGE_ARCH = "${MACHINE_ARCH}" | ||
28 | |||
29 | # deps needed to extract content from the .bsp file | ||
30 | DEPENDS += "tar-native gzip-native" | ||
31 | |||
32 | do_compile() { | ||
33 | # Extract the bitstream into workdir | ||
34 | tar -xf ${WORKDIR}/${BSP_FILE} ${BSP_NAME}-axi-full-${PV}/pre-built/linux/images/download.bit -C ${S} | ||
35 | # move the bit file to ${S}/ as it is in a subdir in the tar file | ||
36 | for i in $(find -type f -name download.bit); do mv $i ${S}; done | ||
37 | } | ||
38 | |||
39 | do_install() { | ||
40 | install -D ${S}/download.bit ${D}/boot/download.bit | ||
41 | } | ||
42 | |||
43 | do_deploy () { | ||
44 | install -D ${S}/download.bit ${DEPLOYDIR}/download.bit | ||
45 | } | ||
46 | |||
47 | addtask deploy before do_build after do_install | ||
48 | |||
diff --git a/meta-xilinx-contrib/recipes-bsp/bitstream/bitstream-extraction_%.bbappend b/meta-xilinx-contrib/recipes-bsp/bitstream/bitstream-extraction_%.bbappend new file mode 100644 index 00000000..4653c93a --- /dev/null +++ b/meta-xilinx-contrib/recipes-bsp/bitstream/bitstream-extraction_%.bbappend | |||
@@ -0,0 +1,2 @@ | |||
1 | COMPATIBLE_MACHINE:zybo-linux-bd-zynq7 = "^$" | ||
2 | |||
diff --git a/meta-xilinx-contrib/recipes-kernel/linux/linux-xlnx/v2022.1/0001-drm-xilinx-Add-encoder-for-Digilent-boards.patch b/meta-xilinx-contrib/recipes-kernel/linux/linux-xlnx/v2022.1/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/v2022.1/0001-drm-xilinx-Add-encoder-for-Digilent-boards.patch | |||
@@ -0,0 +1,305 @@ | |||
1 | From 21cc8144efdaa3cd8dbd7279f87b14fa3432fae4 Mon Sep 17 00:00:00 2001 | ||
2 | From: Jason Wu <jason.wu.misc@gmail.com> | ||
3 | Date: Sun, 10 Apr 2016 13:14:13 +1000 | ||
4 | Subject: [PATCH 1/3] drm: xilinx: Add encoder for Digilent boards | ||
5 | |||
6 | Add the dglnt_encoder driver that enables DRM support for the VGA and | ||
7 | HDMI output ports found on many Digilent boards. | ||
8 | |||
9 | Upstream-Status: Pending | ||
10 | |||
11 | Signed-off-by: Sam Bobrowicz <sbobrowicz@digilentinc.com> | ||
12 | Signed-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 | |||
22 | diff --git a/Documentation/devicetree/bindings/drm/xilinx/dglnt_encoder.txt b/Documentation/devicetree/bindings/drm/xilinx/dglnt_encoder.txt | ||
23 | new file mode 100644 | ||
24 | index 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 | + }; | ||
51 | diff --git a/drivers/gpu/drm/xilinx/Kconfig b/drivers/gpu/drm/xilinx/Kconfig | ||
52 | index 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 | ||
68 | diff --git a/drivers/gpu/drm/xilinx/Makefile b/drivers/gpu/drm/xilinx/Makefile | ||
69 | index 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 | ||
80 | diff --git a/drivers/gpu/drm/xilinx/dglnt_encoder.c b/drivers/gpu/drm/xilinx/dglnt_encoder.c | ||
81 | new file mode 100644 | ||
82 | index 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 | -- | ||
304 | 2.7.4 | ||
305 | |||
diff --git a/meta-xilinx-contrib/recipes-kernel/linux/linux-xlnx/v2022.1/0002-clk-Add-driver-for-axi_dynclk-IP-Core.patch b/meta-xilinx-contrib/recipes-kernel/linux/linux-xlnx/v2022.1/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/v2022.1/0002-clk-Add-driver-for-axi_dynclk-IP-Core.patch | |||
@@ -0,0 +1,607 @@ | |||
1 | From 217e3b6f4393926b8dcad841381527ef3fc808c2 Mon Sep 17 00:00:00 2001 | ||
2 | From: Jason Wu <jason.wu.misc@gmail.com> | ||
3 | Date: Sun, 10 Apr 2016 13:16:06 +1000 | ||
4 | Subject: [PATCH 2/3] clk: Add driver for axi_dynclk IP Core | ||
5 | |||
6 | Add support for the axi_dynclk IP Core available from Digilent. This IP | ||
7 | core dynamically configures the clock resources inside a Xilinx FPGA to | ||
8 | generate a clock with a software programmable frequency. | ||
9 | |||
10 | Upstream-Status: Pending | ||
11 | |||
12 | Signed-off-by: Sam Bobrowicz <sbobrowicz@digilentinc.com> | ||
13 | Signed-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 | |||
21 | diff --git a/drivers/clk/Kconfig b/drivers/clk/Kconfig | ||
22 | index 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 | ||
40 | diff --git a/drivers/clk/Makefile b/drivers/clk/Makefile | ||
41 | index 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 | ||
52 | diff --git a/drivers/clk/clk-dglnt-dynclk.c b/drivers/clk/clk-dglnt-dynclk.c | ||
53 | new file mode 100644 | ||
54 | index 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 | -- | ||
606 | 2.14.2 | ||
607 | |||
diff --git a/meta-xilinx-contrib/recipes-kernel/linux/linux-xlnx/v2022.1/0003-drm-xilinx-Fix-DPMS-transition-to-on.patch b/meta-xilinx-contrib/recipes-kernel/linux/linux-xlnx/v2022.1/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/v2022.1/0003-drm-xilinx-Fix-DPMS-transition-to-on.patch | |||
@@ -0,0 +1,54 @@ | |||
1 | From 1a18e2b514ae9e75145597ac509a87f656c976ba Mon Sep 17 00:00:00 2001 | ||
2 | From: Nathan Rossi <nathan@nathanrossi.com> | ||
3 | Date: Mon, 2 May 2016 23:46:42 +1000 | ||
4 | Subject: [PATCH 3/3] drm: xilinx: Fix DPMS transition to on | ||
5 | |||
6 | Fix the issues where the VTC is reset (losing its timing config). | ||
7 | |||
8 | Also fix the issue where the plane destroys its DMA descriptors and | ||
9 | marks the DMA channels as inactive but never recreates the descriptors | ||
10 | and never updates the active state when turning DPMS back on. | ||
11 | |||
12 | Signed-off-by: Nathan Rossi <nathan@nathanrossi.com> | ||
13 | Upstream-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 | |||
19 | diff --git a/drivers/gpu/drm/xilinx/xilinx_drm_crtc.c b/drivers/gpu/drm/xilinx/xilinx_drm_crtc.c | ||
20 | index 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); | ||
31 | diff --git a/drivers/gpu/drm/xilinx/xilinx_drm_plane.c b/drivers/gpu/drm/xilinx/xilinx_drm_plane.c | ||
32 | index 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 | -- | ||
53 | 2.14.2 | ||
54 | |||
diff --git a/meta-xilinx-contrib/recipes-kernel/linux/linux-xlnx/v2022.1/0004-minized-wifi-bluetooth.cfg b/meta-xilinx-contrib/recipes-kernel/linux/linux-xlnx/v2022.1/0004-minized-wifi-bluetooth.cfg new file mode 100644 index 00000000..f71e53ab --- /dev/null +++ b/meta-xilinx-contrib/recipes-kernel/linux/linux-xlnx/v2022.1/0004-minized-wifi-bluetooth.cfg | |||
@@ -0,0 +1,33 @@ | |||
1 | # | ||
2 | # Bluetooth config | ||
3 | # | ||
4 | CONFIG_BT=y | ||
5 | CONFIG_BT_BREDR=y | ||
6 | CONFIG_BT_HS=y | ||
7 | CONFIG_BT_LE=y | ||
8 | CONFIG_BT_BCM=y | ||
9 | CONFIG_BT_HCIUART=y | ||
10 | CONFIG_BT_HCIUART_H4=y | ||
11 | CONFIG_BT_HCIUART_BCM=y | ||
12 | CONFIG_BT_HIDP=y | ||
13 | CONFIG_CFG80211=y | ||
14 | CONFIG_CFG80211_DEFAULT_PS=y | ||
15 | CONFIG_CFG80211_CRDA_SUPPORT=y | ||
16 | CONFIG_BRCMUTIL=y | ||
17 | CONFIG_BRCMFMAC=y | ||
18 | CONFIG_BRCMFMAC_PROTO_BCDC=y | ||
19 | CONFIG_BRCMFMAC_SDIO=y | ||
20 | CONFIG_CRYPTO_BLKCIPHER=y | ||
21 | CONFIG_CRYPTO_MANAGER=y | ||
22 | CONFIG_CRYPTO_ECB=y | ||
23 | CONFIG_CRYPTO_CMAC=y | ||
24 | CONFIG_CRYPTO_SHA256=y | ||
25 | |||
26 | # | ||
27 | # Regulator config | ||
28 | # | ||
29 | CONFIG_REGMAP_IRQ=y | ||
30 | CONFIG_I2C_XILINX=y | ||
31 | CONFIG_MFD_DA9062=y | ||
32 | CONFIG_REGULATOR_DA9062=y | ||
33 | |||
diff --git a/meta-xilinx-contrib/recipes-kernel/linux/linux-xlnx/v2022.2/0001-drm-xilinx-Add-encoder-for-Digilent-boards.patch b/meta-xilinx-contrib/recipes-kernel/linux/linux-xlnx/v2022.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/v2022.2/0001-drm-xilinx-Add-encoder-for-Digilent-boards.patch | |||
@@ -0,0 +1,305 @@ | |||
1 | From 21cc8144efdaa3cd8dbd7279f87b14fa3432fae4 Mon Sep 17 00:00:00 2001 | ||
2 | From: Jason Wu <jason.wu.misc@gmail.com> | ||
3 | Date: Sun, 10 Apr 2016 13:14:13 +1000 | ||
4 | Subject: [PATCH 1/3] drm: xilinx: Add encoder for Digilent boards | ||
5 | |||
6 | Add the dglnt_encoder driver that enables DRM support for the VGA and | ||
7 | HDMI output ports found on many Digilent boards. | ||
8 | |||
9 | Upstream-Status: Pending | ||
10 | |||
11 | Signed-off-by: Sam Bobrowicz <sbobrowicz@digilentinc.com> | ||
12 | Signed-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 | |||
22 | diff --git a/Documentation/devicetree/bindings/drm/xilinx/dglnt_encoder.txt b/Documentation/devicetree/bindings/drm/xilinx/dglnt_encoder.txt | ||
23 | new file mode 100644 | ||
24 | index 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 | + }; | ||
51 | diff --git a/drivers/gpu/drm/xilinx/Kconfig b/drivers/gpu/drm/xilinx/Kconfig | ||
52 | index 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 | ||
68 | diff --git a/drivers/gpu/drm/xilinx/Makefile b/drivers/gpu/drm/xilinx/Makefile | ||
69 | index 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 | ||
80 | diff --git a/drivers/gpu/drm/xilinx/dglnt_encoder.c b/drivers/gpu/drm/xilinx/dglnt_encoder.c | ||
81 | new file mode 100644 | ||
82 | index 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 | -- | ||
304 | 2.7.4 | ||
305 | |||
diff --git a/meta-xilinx-contrib/recipes-kernel/linux/linux-xlnx/v2022.2/0002-clk-Add-driver-for-axi_dynclk-IP-Core.patch b/meta-xilinx-contrib/recipes-kernel/linux/linux-xlnx/v2022.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/v2022.2/0002-clk-Add-driver-for-axi_dynclk-IP-Core.patch | |||
@@ -0,0 +1,607 @@ | |||
1 | From 217e3b6f4393926b8dcad841381527ef3fc808c2 Mon Sep 17 00:00:00 2001 | ||
2 | From: Jason Wu <jason.wu.misc@gmail.com> | ||
3 | Date: Sun, 10 Apr 2016 13:16:06 +1000 | ||
4 | Subject: [PATCH 2/3] clk: Add driver for axi_dynclk IP Core | ||
5 | |||
6 | Add support for the axi_dynclk IP Core available from Digilent. This IP | ||
7 | core dynamically configures the clock resources inside a Xilinx FPGA to | ||
8 | generate a clock with a software programmable frequency. | ||
9 | |||
10 | Upstream-Status: Pending | ||
11 | |||
12 | Signed-off-by: Sam Bobrowicz <sbobrowicz@digilentinc.com> | ||
13 | Signed-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 | |||
21 | diff --git a/drivers/clk/Kconfig b/drivers/clk/Kconfig | ||
22 | index 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 | ||
40 | diff --git a/drivers/clk/Makefile b/drivers/clk/Makefile | ||
41 | index 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 | ||
52 | diff --git a/drivers/clk/clk-dglnt-dynclk.c b/drivers/clk/clk-dglnt-dynclk.c | ||
53 | new file mode 100644 | ||
54 | index 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 | -- | ||
606 | 2.14.2 | ||
607 | |||
diff --git a/meta-xilinx-contrib/recipes-kernel/linux/linux-xlnx/v2022.2/0003-drm-xilinx-Fix-DPMS-transition-to-on.patch b/meta-xilinx-contrib/recipes-kernel/linux/linux-xlnx/v2022.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/v2022.2/0003-drm-xilinx-Fix-DPMS-transition-to-on.patch | |||
@@ -0,0 +1,54 @@ | |||
1 | From 1a18e2b514ae9e75145597ac509a87f656c976ba Mon Sep 17 00:00:00 2001 | ||
2 | From: Nathan Rossi <nathan@nathanrossi.com> | ||
3 | Date: Mon, 2 May 2016 23:46:42 +1000 | ||
4 | Subject: [PATCH 3/3] drm: xilinx: Fix DPMS transition to on | ||
5 | |||
6 | Fix the issues where the VTC is reset (losing its timing config). | ||
7 | |||
8 | Also fix the issue where the plane destroys its DMA descriptors and | ||
9 | marks the DMA channels as inactive but never recreates the descriptors | ||
10 | and never updates the active state when turning DPMS back on. | ||
11 | |||
12 | Signed-off-by: Nathan Rossi <nathan@nathanrossi.com> | ||
13 | Upstream-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 | |||
19 | diff --git a/drivers/gpu/drm/xilinx/xilinx_drm_crtc.c b/drivers/gpu/drm/xilinx/xilinx_drm_crtc.c | ||
20 | index 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); | ||
31 | diff --git a/drivers/gpu/drm/xilinx/xilinx_drm_plane.c b/drivers/gpu/drm/xilinx/xilinx_drm_plane.c | ||
32 | index 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 | -- | ||
53 | 2.14.2 | ||
54 | |||
diff --git a/meta-xilinx-contrib/recipes-kernel/linux/linux-xlnx/v2022.2/0004-minized-wifi-bluetooth.cfg b/meta-xilinx-contrib/recipes-kernel/linux/linux-xlnx/v2022.2/0004-minized-wifi-bluetooth.cfg new file mode 100644 index 00000000..f71e53ab --- /dev/null +++ b/meta-xilinx-contrib/recipes-kernel/linux/linux-xlnx/v2022.2/0004-minized-wifi-bluetooth.cfg | |||
@@ -0,0 +1,33 @@ | |||
1 | # | ||
2 | # Bluetooth config | ||
3 | # | ||
4 | CONFIG_BT=y | ||
5 | CONFIG_BT_BREDR=y | ||
6 | CONFIG_BT_HS=y | ||
7 | CONFIG_BT_LE=y | ||
8 | CONFIG_BT_BCM=y | ||
9 | CONFIG_BT_HCIUART=y | ||
10 | CONFIG_BT_HCIUART_H4=y | ||
11 | CONFIG_BT_HCIUART_BCM=y | ||
12 | CONFIG_BT_HIDP=y | ||
13 | CONFIG_CFG80211=y | ||
14 | CONFIG_CFG80211_DEFAULT_PS=y | ||
15 | CONFIG_CFG80211_CRDA_SUPPORT=y | ||
16 | CONFIG_BRCMUTIL=y | ||
17 | CONFIG_BRCMFMAC=y | ||
18 | CONFIG_BRCMFMAC_PROTO_BCDC=y | ||
19 | CONFIG_BRCMFMAC_SDIO=y | ||
20 | CONFIG_CRYPTO_BLKCIPHER=y | ||
21 | CONFIG_CRYPTO_MANAGER=y | ||
22 | CONFIG_CRYPTO_ECB=y | ||
23 | CONFIG_CRYPTO_CMAC=y | ||
24 | CONFIG_CRYPTO_SHA256=y | ||
25 | |||
26 | # | ||
27 | # Regulator config | ||
28 | # | ||
29 | CONFIG_REGMAP_IRQ=y | ||
30 | CONFIG_I2C_XILINX=y | ||
31 | CONFIG_MFD_DA9062=y | ||
32 | CONFIG_REGULATOR_DA9062=y | ||
33 | |||
diff --git a/meta-xilinx-contrib/recipes-kernel/linux/linux-xlnx_2022.1.bbappend b/meta-xilinx-contrib/recipes-kernel/linux/linux-xlnx_2022.1.bbappend new file mode 100644 index 00000000..c789c7a9 --- /dev/null +++ b/meta-xilinx-contrib/recipes-kernel/linux/linux-xlnx_2022.1.bbappend | |||
@@ -0,0 +1,12 @@ | |||
1 | FILESEXTRAPATHS: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 | |||
12 | SRC_URI:append:minized-zynq7 = " file://0004-minized-wifi-bluetooth.cfg" | ||
diff --git a/meta-xilinx-contrib/recipes-kernel/linux/linux-xlnx_2022.2.bbappend b/meta-xilinx-contrib/recipes-kernel/linux/linux-xlnx_2022.2.bbappend new file mode 100644 index 00000000..c789c7a9 --- /dev/null +++ b/meta-xilinx-contrib/recipes-kernel/linux/linux-xlnx_2022.2.bbappend | |||
@@ -0,0 +1,12 @@ | |||
1 | FILESEXTRAPATHS: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 | |||
12 | SRC_URI:append:minized-zynq7 = " file://0004-minized-wifi-bluetooth.cfg" | ||
diff --git a/meta-xilinx-core/conf/layer.conf b/meta-xilinx-core/conf/layer.conf index 5441fd96..d7eb9aa8 100644 --- a/meta-xilinx-core/conf/layer.conf +++ b/meta-xilinx-core/conf/layer.conf | |||
@@ -46,6 +46,8 @@ XILINX_RELEASE_VERSION ??= "v2023.2" | |||
46 | 46 | ||
47 | BUILDCFG_VARS:append = " SOC_VARIANT XILINX_RELEASE_VERSION" | 47 | BUILDCFG_VARS:append = " SOC_VARIANT XILINX_RELEASE_VERSION" |
48 | 48 | ||
49 | XILINX_QEMU_VERSION[v2022.1] = "v7.1.0-xilinx-v2022.1%" | ||
50 | XILINX_QEMU_VERSION[v2022.2] = "v7.1.0-xilinx-v2022.2%" | ||
49 | XILINX_QEMU_VERSION[v2023.1] = "v7.1.0-xilinx-v2023.1%" | 51 | XILINX_QEMU_VERSION[v2023.1] = "v7.1.0-xilinx-v2023.1%" |
50 | XILINX_QEMU_VERSION[v2023.2] = "v7.1.0-xilinx-v2023.2%" | 52 | XILINX_QEMU_VERSION[v2023.2] = "v7.1.0-xilinx-v2023.2%" |
51 | PREFERRED_VERSION_qemu-xilinx ?= "${@d.getVarFlag('XILINX_QEMU_VERSION', d.getVar('XILINX_RELEASE_VERSION')) or 'undefined'}" | 53 | PREFERRED_VERSION_qemu-xilinx ?= "${@d.getVarFlag('XILINX_QEMU_VERSION', d.getVar('XILINX_RELEASE_VERSION')) or 'undefined'}" |
@@ -63,7 +65,9 @@ XILINX_UBOOT_VERSION[v2023.2] = "v2023.01-xilinx-v2023.2%" | |||
63 | PREFERRED_VERSION_u-boot-xlnx ?= "${@d.getVarFlag('XILINX_UBOOT_VERSION', d.getVar('XILINX_RELEASE_VERSION')) or 'undefined'}" | 65 | PREFERRED_VERSION_u-boot-xlnx ?= "${@d.getVarFlag('XILINX_UBOOT_VERSION', d.getVar('XILINX_RELEASE_VERSION')) or 'undefined'}" |
64 | PREFERRED_VERSION_u-boot-tools-xlnx ?= "${@d.getVarFlag('XILINX_UBOOT_VERSION', d.getVar('XILINX_RELEASE_VERSION')) or 'undefined'}" | 66 | PREFERRED_VERSION_u-boot-tools-xlnx ?= "${@d.getVarFlag('XILINX_UBOOT_VERSION', d.getVar('XILINX_RELEASE_VERSION')) or 'undefined'}" |
65 | 67 | ||
66 | XILINX_LINUX_VERSION[v2023.1] = "6.1.5-xilinx-v2023.1%" | 68 | XILINX_LINUX_VERSION[v2022.1] = "5.15.19-xilinx-v2022.1%" |
69 | XILINX_LINUX_VERSION[v2022.2] = "5.15.36-xilinx-v2022.2%" | ||
70 | XILINX_LINUX_VERSION[v2023.1] = "6.1.30-xilinx-v2023.1%" | ||
67 | XILINX_LINUX_VERSION[v2023.2] = "6.1.30-xilinx-v2023.2%" | 71 | XILINX_LINUX_VERSION[v2023.2] = "6.1.30-xilinx-v2023.2%" |
68 | PREFERRED_VERSION_linux-xlnx ?= "${@d.getVarFlag('XILINX_LINUX_VERSION', d.getVar('XILINX_RELEASE_VERSION')) or 'undefined'}" | 72 | PREFERRED_VERSION_linux-xlnx ?= "${@d.getVarFlag('XILINX_LINUX_VERSION', d.getVar('XILINX_RELEASE_VERSION')) or 'undefined'}" |
69 | 73 | ||
diff --git a/meta-xilinx-core/recipes-bsp/ai-engine/ai-engine-driver_3.3.bb b/meta-xilinx-core/recipes-bsp/ai-engine/ai-engine-driver_3.3.bb new file mode 100644 index 00000000..6a4fd880 --- /dev/null +++ b/meta-xilinx-core/recipes-bsp/ai-engine/ai-engine-driver_3.3.bb | |||
@@ -0,0 +1,47 @@ | |||
1 | SUMMARY = "Xilinx AI Engine runtime" | ||
2 | DESCRIPTION = "This library provides APIs for the runtime support of the Xilinx AI Engine IP" | ||
3 | |||
4 | require aie-rt.inc | ||
5 | |||
6 | SECTION = "libs" | ||
7 | |||
8 | AIEDIR ?= "${S}/driver" | ||
9 | S = "${WORKDIR}/git" | ||
10 | I = "${AIEDIR}/include" | ||
11 | |||
12 | COMPATIBLE_MACHINE = "^$" | ||
13 | COMPATIBLE_MACHINE:versal-ai-core = "versal-ai-core" | ||
14 | COMPATIBLE_MACHINE:versal-ai-edge = "${SOC_VARIANT_ARCH}" | ||
15 | PV = "3.3" | ||
16 | |||
17 | IOBACKENDS ?= "Linux" | ||
18 | |||
19 | DEPENDS = "${@bb.utils.contains('IOBACKENDS', 'metal', 'libmetal', '', d)}" | ||
20 | RDEPENDS:${PN} = "${@bb.utils.contains('IOBACKENDS', 'metal', 'libmetal', '', d)}" | ||
21 | |||
22 | PROVIDES = "libxaiengine" | ||
23 | RPROVIDES:${PN} = "libxaiengine" | ||
24 | |||
25 | # The makefile isn't ready for parallel execution at the moment | ||
26 | PARALLEL_MAKE = "-j 1" | ||
27 | |||
28 | CFLAGS += "-Wall -Wextra -fno-thread-jumps -fno-tree-pre" | ||
29 | CFLAGS += "${@bb.utils.contains('IOBACKENDS', 'Linux', ' -D__AIELINUX__', '', d)}" | ||
30 | CFLAGS += "${@bb.utils.contains('IOBACKENDS', 'metal', ' -D__AIEMETAL__', '', d)}" | ||
31 | EXTRA_OEMAKE = "-C ${AIEDIR}/src -f Makefile.Linux CFLAGS='${CFLAGS}'" | ||
32 | |||
33 | |||
34 | do_compile(){ | ||
35 | oe_runmake | ||
36 | } | ||
37 | |||
38 | do_install(){ | ||
39 | install -d ${D}${includedir} | ||
40 | install ${I}/*.h ${D}${includedir}/ | ||
41 | install -d ${D}${includedir}/xaiengine | ||
42 | install ${I}/xaiengine/*.h ${D}${includedir}/xaiengine/ | ||
43 | install -d ${D}${libdir} | ||
44 | cp -dr ${AIEDIR}/src/*.so* ${D}${libdir} | ||
45 | } | ||
46 | |||
47 | PACKAGE_ARCH:versal-ai-core = "${SOC_VARIANT_ARCH}" | ||
diff --git a/meta-xilinx-core/recipes-bsp/ai-engine/ai-engine-driver_3.4.bb b/meta-xilinx-core/recipes-bsp/ai-engine/ai-engine-driver_3.4.bb index e364462b..f86c5985 100644 --- a/meta-xilinx-core/recipes-bsp/ai-engine/ai-engine-driver_3.4.bb +++ b/meta-xilinx-core/recipes-bsp/ai-engine/ai-engine-driver_3.4.bb | |||
@@ -1,7 +1,7 @@ | |||
1 | SUMMARY = "Xilinx AI Engine runtime" | 1 | SUMMARY = "Xilinx AI Engine runtime" |
2 | DESCRIPTION = "This library provides APIs for the runtime support of the Xilinx AI Engine IP" | 2 | DESCRIPTION = "This library provides APIs for the runtime support of the Xilinx AI Engine IP" |
3 | 3 | ||
4 | require aie-rt.inc | 4 | require aie-rt-2022.inc |
5 | 5 | ||
6 | SECTION = "libs" | 6 | SECTION = "libs" |
7 | 7 | ||
diff --git a/meta-xilinx-core/recipes-bsp/ai-engine/aie-rt-2022.inc b/meta-xilinx-core/recipes-bsp/ai-engine/aie-rt-2022.inc new file mode 100644 index 00000000..85121654 --- /dev/null +++ b/meta-xilinx-core/recipes-bsp/ai-engine/aie-rt-2022.inc | |||
@@ -0,0 +1,11 @@ | |||
1 | SECTION = "libs" | ||
2 | |||
3 | REPO ?= "git://github.com/Xilinx/aie-rt.git;protocol=https" | ||
4 | |||
5 | BRANCH ?= "xlnx_rel_v2022.2" | ||
6 | SRCREV ?= "ae24c8ede049906323510693f37e6167a963fd0e" | ||
7 | |||
8 | LICENSE = "BSD-3-Clause" | ||
9 | LIC_FILES_CHKSUM ?= "file://license.txt;md5=b81abf1f508952331dd7d2ab36408f5b" | ||
10 | |||
11 | SRC_URI = "${REPO};branch=${BRANCH}" | ||
diff --git a/meta-xilinx-core/recipes-bsp/ai-engine/aiefal_1.4.bb b/meta-xilinx-core/recipes-bsp/ai-engine/aiefal_1.4.bb new file mode 100644 index 00000000..641c39a9 --- /dev/null +++ b/meta-xilinx-core/recipes-bsp/ai-engine/aiefal_1.4.bb | |||
@@ -0,0 +1,33 @@ | |||
1 | SUMMARY = "Xilinx AI Engine FAL(Functional Abstraction Layer)" | ||
2 | DESCRIPTION = "AIE FAL provides functional abstraction APIs for runtime support of Xilinx AI Engine IP" | ||
3 | |||
4 | require aie-rt.inc | ||
5 | |||
6 | SECTION = "devel" | ||
7 | |||
8 | XAIEFAL_DIR ?= "fal" | ||
9 | S = "${WORKDIR}/git" | ||
10 | |||
11 | COMPATIBLE_MACHINE = "^$" | ||
12 | COMPATIBLE_MACHINE:versal-ai-core = "versal-ai-core" | ||
13 | COMPATIBLE_MACHINE:versal-ai-edge = "${SOC_VARIANT_ARCH}" | ||
14 | |||
15 | IOBACKENDS ?= "Linux" | ||
16 | |||
17 | PROVIDES = "aiefal" | ||
18 | ALLOW_EMPTY:${PN} = "1" | ||
19 | |||
20 | inherit pkgconfig cmake | ||
21 | |||
22 | DEPENDS = "libxaiengine" | ||
23 | |||
24 | OECMAKE_SOURCEPATH = "${S}/${XAIEFAL_DIR}" | ||
25 | |||
26 | EXTRA_OECMAKE = "-DWITH_TESTS=OFF " | ||
27 | EXTRA_OECMAKE:append = "${@'-DWITH_EXAMPLES=ON' if d.getVar('WITH_EXAMPLES') == 'y' else '-DWITH_EXAMPLES=OFF'}" | ||
28 | |||
29 | FILES:${PN}-demos = " \ | ||
30 | ${bindir}/* \ | ||
31 | " | ||
32 | |||
33 | PACKAGE_ARCH:versal-ai-core = "${SOC_VARIANT_ARCH}" | ||
diff --git a/meta-xilinx-core/recipes-bsp/ai-engine/aiefal_1.5.bb b/meta-xilinx-core/recipes-bsp/ai-engine/aiefal_1.5.bb index 6ac86a1b..2c6c9cd1 100644 --- a/meta-xilinx-core/recipes-bsp/ai-engine/aiefal_1.5.bb +++ b/meta-xilinx-core/recipes-bsp/ai-engine/aiefal_1.5.bb | |||
@@ -1,7 +1,7 @@ | |||
1 | SUMMARY = "Xilinx AI Engine FAL(Functional Abstraction Layer)" | 1 | SUMMARY = "Xilinx AI Engine FAL(Functional Abstraction Layer)" |
2 | DESCRIPTION = "AIE FAL provides functional abstraction APIs for runtime support of Xilinx AI Engine IP" | 2 | DESCRIPTION = "AIE FAL provides functional abstraction APIs for runtime support of Xilinx AI Engine IP" |
3 | 3 | ||
4 | require aie-rt.inc | 4 | require aie-rt-2022.inc |
5 | 5 | ||
6 | SECTION = "devel" | 6 | SECTION = "devel" |
7 | 7 | ||
diff --git a/meta-xilinx-core/recipes-bsp/arm-trusted-firmware/arm-trusted-firmware_2022.1.bb b/meta-xilinx-core/recipes-bsp/arm-trusted-firmware/arm-trusted-firmware_2022.1.bb new file mode 100644 index 00000000..f02bb879 --- /dev/null +++ b/meta-xilinx-core/recipes-bsp/arm-trusted-firmware/arm-trusted-firmware_2022.1.bb | |||
@@ -0,0 +1,8 @@ | |||
1 | ATF_VERSION = "2.6" | ||
2 | SRCREV = "67ca59c67f542322554d78820bf9ddaa736d6a84" | ||
3 | BRANCH = "xlnx_rebase_v2.6" | ||
4 | LIC_FILES_CHKSUM = "file://license.rst;md5=1dd070c98a281d18d9eefd938729b031" | ||
5 | |||
6 | |||
7 | include arm-trusted-firmware.inc | ||
8 | |||
diff --git a/meta-xilinx-core/recipes-bsp/arm-trusted-firmware/arm-trusted-firmware_2022.2.bb b/meta-xilinx-core/recipes-bsp/arm-trusted-firmware/arm-trusted-firmware_2022.2.bb new file mode 100644 index 00000000..5ef2e6ac --- /dev/null +++ b/meta-xilinx-core/recipes-bsp/arm-trusted-firmware/arm-trusted-firmware_2022.2.bb | |||
@@ -0,0 +1,8 @@ | |||
1 | ATF_VERSION = "2.6" | ||
2 | SRCREV = "0897efd45ccad29a3dbab610578c70e3a52b2caa" | ||
3 | BRANCH = "xlnx_rebase_v2.6" | ||
4 | LIC_FILES_CHKSUM = "file://license.rst;md5=1dd070c98a281d18d9eefd938729b031" | ||
5 | |||
6 | |||
7 | include arm-trusted-firmware.inc | ||
8 | |||
diff --git a/meta-xilinx-core/recipes-bsp/arm-trusted-firmware/arm-trusted-firmware_2023.1.bb b/meta-xilinx-core/recipes-bsp/arm-trusted-firmware/arm-trusted-firmware_2023.1.bb index 454fbe86..2bcbe7d4 100644 --- a/meta-xilinx-core/recipes-bsp/arm-trusted-firmware/arm-trusted-firmware_2023.1.bb +++ b/meta-xilinx-core/recipes-bsp/arm-trusted-firmware/arm-trusted-firmware_2023.1.bb | |||
@@ -1,5 +1,5 @@ | |||
1 | ATF_VERSION = "2.8" | 1 | ATF_VERSION = "2.8" |
2 | SRCREV = "6fcc6b179dc14de0f6ba19a1829e597b60f7aee5" | 2 | SRCREV = "c9b71dc96f3f18ca94cad590612aae3224c8c84d" |
3 | BRANCH = "xlnx_rebase_v2.8" | 3 | BRANCH = "xlnx_rebase_v2.8" |
4 | LIC_FILES_CHKSUM = "file://license.rst;md5=1dd070c98a281d18d9eefd938729b031" | 4 | LIC_FILES_CHKSUM = "file://license.rst;md5=1dd070c98a281d18d9eefd938729b031" |
5 | 5 | ||
diff --git a/meta-xilinx-core/recipes-bsp/bootgen/bootgen_1.0.bb b/meta-xilinx-core/recipes-bsp/bootgen/bootgen_1.0.bb new file mode 100644 index 00000000..fdf28f41 --- /dev/null +++ b/meta-xilinx-core/recipes-bsp/bootgen/bootgen_1.0.bb | |||
@@ -0,0 +1,31 @@ | |||
1 | SUMMARY = "Building and installing bootgen" | ||
2 | DESCRIPTION = "Building and installing bootgen, a Xilinx tool that lets you stitch binary files together and generate device boot images" | ||
3 | |||
4 | LICENSE = "Apache-2.0" | ||
5 | LIC_FILES_CHKSUM = "file://LICENSE;md5=d526b6d0807bf263b97da1da876f39b1" | ||
6 | |||
7 | S = "${WORKDIR}/git" | ||
8 | |||
9 | DEPENDS += "openssl" | ||
10 | RDEPENDS:${PN} += "openssl" | ||
11 | |||
12 | REPO ?= "git://github.com/Xilinx/bootgen.git;protocol=https" | ||
13 | BRANCH ?= "xlnx_rel_v2022.2" | ||
14 | SRCREV = "cf4ba93b99644dc4429ef633471a639e1382f0e7" | ||
15 | |||
16 | BRANCHARG = "${@['nobranch=1', 'branch=${BRANCH}'][d.getVar('BRANCH', True) != '']}" | ||
17 | SRC_URI = "${REPO};${BRANCHARG}" | ||
18 | |||
19 | EXTRA_OEMAKE += 'CROSS_COMPILER="${CXX}" -C ${S}' | ||
20 | CXXFLAGS:append = " -std=c++0x" | ||
21 | |||
22 | TARGET_CC_ARCH += "${LDFLAGS}" | ||
23 | |||
24 | do_install() { | ||
25 | install -d ${D}${bindir} | ||
26 | install -Dm 0755 ${S}/bootgen ${D}${bindir} | ||
27 | } | ||
28 | |||
29 | FILES:${PN} = "${bindir}/bootgen" | ||
30 | |||
31 | BBCLASSEXTEND = "native nativesdk" | ||
diff --git a/meta-xilinx-core/recipes-bsp/dfx-mgr/dfx-mgr_1.0.bb b/meta-xilinx-core/recipes-bsp/dfx-mgr/dfx-mgr_1.0.bb new file mode 100644 index 00000000..b4de4fe6 --- /dev/null +++ b/meta-xilinx-core/recipes-bsp/dfx-mgr/dfx-mgr_1.0.bb | |||
@@ -0,0 +1,78 @@ | |||
1 | SUMMARY = "Xilinx dfx-mgr libraries" | ||
2 | DESCRIPTION = "Xilinx Runtime User Space Libraries and Binaries" | ||
3 | |||
4 | LICENSE = "MIT" | ||
5 | LIC_FILES_CHKSUM = "file://LICENSE;md5=d67bcef754e935bf77b6d7051bd62b5e" | ||
6 | |||
7 | REPO ?= "git://github.com/Xilinx/dfx-mgr.git;protocol=https" | ||
8 | BRANCHARG = "${@['nobranch=1', 'branch=${BRANCH}'][d.getVar('BRANCH', True) != '']}" | ||
9 | SRC_URI = "${REPO};${BRANCHARG}" | ||
10 | |||
11 | BRANCH = "xlnx_rel_v2022.2" | ||
12 | SRCREV = "bc06691eb35d7f0acb7c2508b6d050d77b0264a0" | ||
13 | SOMAJOR = "1" | ||
14 | SOMINOR = "0" | ||
15 | SOVERSION = "${SOMAJOR}.${SOMINOR}" | ||
16 | |||
17 | COMPATIBLE_MACHINE = "^$" | ||
18 | COMPATIBLE_MACHINE:zynqmp = "zynqmp" | ||
19 | COMPATIBLE_MACHINE:versal = "versal" | ||
20 | |||
21 | S = "${WORKDIR}/git" | ||
22 | |||
23 | inherit cmake update-rc.d systemd | ||
24 | |||
25 | DEPENDS += " libwebsockets inotify-tools libdfx zocl libdrm" | ||
26 | RDEPENDS:${PN} += " fru-print" | ||
27 | EXTRA_OECMAKE += " \ | ||
28 | -DCMAKE_SYSROOT:PATH=${RECIPE_SYSROOT} \ | ||
29 | " | ||
30 | |||
31 | # Workaround for: the comparison will always evaluate as 'true' for the address of 'defaul_accel_name' will never be NULL [-Werror=address] | ||
32 | CFLAGS += "-Wno-address" | ||
33 | |||
34 | # Workaround for: '__builtin_strncpy' specified bound depends on the length of the source argument [-Werror=stringop-truncation] | ||
35 | CFLAGS += "-Wno-stringop-truncation" | ||
36 | |||
37 | INITSCRIPT_NAME = "dfx-mgr.sh" | ||
38 | INITSCRIPT_PARAMS = "start 99 S ." | ||
39 | |||
40 | SYSTEMD_PACKAGES="${PN}" | ||
41 | SYSTEMD_SERVICE:${PN}="dfx-mgr.service" | ||
42 | SYSTEMD_AUTO_ENABLE:${PN}="enable" | ||
43 | |||
44 | |||
45 | do_install(){ | ||
46 | install -d ${D}${bindir} | ||
47 | install -d ${D}${libdir} | ||
48 | install -d ${D}${includedir} | ||
49 | install -d ${D}${base_libdir}/firmware/xilinx | ||
50 | install -d ${D}${sysconfdir}/dfx-mgrd | ||
51 | |||
52 | cp ${B}/example/sys/linux/dfx-mgrd-static ${D}${bindir}/dfx-mgrd | ||
53 | cp ${B}/example/sys/linux/dfx-mgr-client-static ${D}${bindir}/dfx-mgr-client | ||
54 | chrpath -d ${D}${bindir}/dfx-mgrd | ||
55 | chrpath -d ${D}${bindir}/dfx-mgr-client | ||
56 | install -m 0644 ${S}/src/dfxmgr_client.h ${D}${includedir} | ||
57 | |||
58 | oe_soinstall ${B}/src/libdfx-mgr.so.${SOVERSION} ${D}${libdir} | ||
59 | |||
60 | install -m 0755 ${S}/src/daemon.conf ${D}${sysconfdir}/dfx-mgrd/ | ||
61 | |||
62 | if ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'true', 'false', d)}; then | ||
63 | install -d ${D}${sysconfdir}/init.d/ | ||
64 | install -m 0755 ${S}/src/dfx-mgr.sh ${D}${sysconfdir}/init.d/ | ||
65 | fi | ||
66 | |||
67 | install -m 0755 ${S}/src/dfx-mgr.sh ${D}${bindir} | ||
68 | install -m 0755 ${S}/src/scripts/xlnx-firmware-detect ${D}${bindir} | ||
69 | |||
70 | install -d ${D}${systemd_system_unitdir} | ||
71 | install -m 0644 ${S}/src/dfx-mgr.service ${D}${systemd_system_unitdir} | ||
72 | } | ||
73 | |||
74 | PACKAGES =+ "libdfx-mgr" | ||
75 | |||
76 | FILES:${PN} += "${base_libdir}/firmware/xilinx" | ||
77 | FILES:${PN} += "${@bb.utils.contains('DISTRO_FEATURES','sysvinit','${sysconfdir}/init.d/dfx-mgr.sh', '', d)} ${systemd_system_unitdir}" | ||
78 | FILES:libdfx-mgr = "${libdir}/libdfx-mgr.so.${SOVERSION} ${libdir}/libdfx-mgr.so.${SOMAJOR}" | ||
diff --git a/meta-xilinx-core/recipes-bsp/libdfx/libdfx_1.0.bb b/meta-xilinx-core/recipes-bsp/libdfx/libdfx_1.0.bb new file mode 100644 index 00000000..2c180561 --- /dev/null +++ b/meta-xilinx-core/recipes-bsp/libdfx/libdfx_1.0.bb | |||
@@ -0,0 +1,23 @@ | |||
1 | SUMMARY = "Xilinx libdfx library" | ||
2 | DESCRIPTION = "Xilinx libdfx Library and headers" | ||
3 | |||
4 | LICENSE = "MIT & GPL-2.0-or-later" | ||
5 | LIC_FILES_CHKSUM = "file://LICENSE.md;md5=94aba86aec117f003b958a52f019f1a7" | ||
6 | |||
7 | BRANCH ?= "xlnx_rel_v2022.2" | ||
8 | REPO ?= "git://github.com/Xilinx/libdfx.git;protocol=https" | ||
9 | BRANCHARG = "${@['nobranch=1', 'branch=${BRANCH}'][d.getVar('BRANCH', True) != '']}" | ||
10 | SRC_URI = "${REPO};${BRANCHARG}" | ||
11 | SRCREV = "f2b7bbca9d6936141024becfb92266600eeefc2b" | ||
12 | |||
13 | COMPATIBLE_MACHINE = "^$" | ||
14 | COMPATIBLE_MACHINE:zynqmp = "zynqmp" | ||
15 | COMPATIBLE_MACHINE:versal = "versal" | ||
16 | |||
17 | S = "${WORKDIR}/git" | ||
18 | |||
19 | inherit 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. | ||
23 | RREPLACES:${PN} = "libdfx" | ||
diff --git a/meta-xilinx-core/recipes-bsp/u-boot/u-boot-tools-xlnx_2022.1.bb b/meta-xilinx-core/recipes-bsp/u-boot/u-boot-tools-xlnx_2022.1.bb new file mode 100644 index 00000000..eaf8d4ce --- /dev/null +++ b/meta-xilinx-core/recipes-bsp/u-boot/u-boot-tools-xlnx_2022.1.bb | |||
@@ -0,0 +1,21 @@ | |||
1 | require u-boot-tools-xlnx.inc | ||
2 | require u-boot-xlnx-2022.1.inc | ||
3 | |||
4 | # MUST clear CONFIG_VIDEO to avoid a compilation failure trying to construct | ||
5 | # bmp_logo.h | ||
6 | SED_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. | ||
11 | do_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-tools-xlnx_2022.2.bb b/meta-xilinx-core/recipes-bsp/u-boot/u-boot-tools-xlnx_2022.2.bb new file mode 100644 index 00000000..44636872 --- /dev/null +++ b/meta-xilinx-core/recipes-bsp/u-boot/u-boot-tools-xlnx_2022.2.bb | |||
@@ -0,0 +1,21 @@ | |||
1 | require u-boot-tools-xlnx.inc | ||
2 | require u-boot-xlnx-2022.2.inc | ||
3 | |||
4 | # MUST clear CONFIG_VIDEO to avoid a compilation failure trying to construct | ||
5 | # bmp_logo.h | ||
6 | SED_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. | ||
11 | do_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-2022.1.inc b/meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx-2022.1.inc new file mode 100644 index 00000000..a0c0b50d --- /dev/null +++ b/meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx-2022.1.inc | |||
@@ -0,0 +1,17 @@ | |||
1 | UBOOT_VERSION = "v2021.01" | ||
2 | |||
3 | UBRANCH ?= "xlnx_rebase_v2022.01_2022.1_update" | ||
4 | |||
5 | SRCREV = "91ad7924e7f59584d597353e1bb86794341e0a7e" | ||
6 | |||
7 | LICENSE = "GPL-2.0-or-later" | ||
8 | LIC_FILES_CHKSUM = "file://README;beginline=1;endline=4;md5=744e7e3bb0c94b4b9f6b3db3bf893897" | ||
9 | |||
10 | # u-boot-xlnx has support for these | ||
11 | HAS_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 | |||
17 | DEPENDS += "bc-native dtc-native python3-setuptools-native gnutls-native" | ||
diff --git a/meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx-2022.2.inc b/meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx-2022.2.inc new file mode 100644 index 00000000..6415861d --- /dev/null +++ b/meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx-2022.2.inc | |||
@@ -0,0 +1,17 @@ | |||
1 | UBOOT_VERSION = "v2021.01" | ||
2 | |||
3 | UBRANCH ?= "xlnx_rebase_v2022.01" | ||
4 | |||
5 | SRCREV = "b31476685debf5512ed0d4e8000fa5167a22f530" | ||
6 | |||
7 | LICENSE = "GPL-2.0-or-later" | ||
8 | LIC_FILES_CHKSUM = "file://README;beginline=1;endline=4;md5=744e7e3bb0c94b4b9f6b3db3bf893897" | ||
9 | |||
10 | # u-boot-xlnx has support for these | ||
11 | HAS_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 | |||
17 | DEPENDS += "bc-native dtc-native python3-setuptools-native gnutls-native" | ||
diff --git a/meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx-2023.1.inc b/meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx-2023.1.inc index fd51561a..72f43f71 100644 --- a/meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx-2023.1.inc +++ b/meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx-2023.1.inc | |||
@@ -1,8 +1,8 @@ | |||
1 | UBOOT_VERSION = "v2023.01" | 1 | UBOOT_VERSION = "v2023.01" |
2 | 2 | ||
3 | UBRANCH = "xlnx_rebase_v2023.01" | 3 | UBRANCH = "xlnx_rebase_v2023.01_update" |
4 | 4 | ||
5 | SRCREV = "8624651f9ae49d326e29d9ec9a80a881a769640a" | 5 | SRCREV = "1689570b68dd3827e527a520805aa0bb7f58ee09" |
6 | 6 | ||
7 | LICENSE = "GPL-2.0-or-later" | 7 | LICENSE = "GPL-2.0-or-later" |
8 | LIC_FILES_CHKSUM = "file://README;beginline=1;endline=4;md5=744e7e3bb0c94b4b9f6b3db3bf893897" | 8 | LIC_FILES_CHKSUM = "file://README;beginline=1;endline=4;md5=744e7e3bb0c94b4b9f6b3db3bf893897" |
diff --git a/meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx_2022.1.bb b/meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx_2022.1.bb new file mode 100644 index 00000000..c1c45e56 --- /dev/null +++ b/meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx_2022.1.bb | |||
@@ -0,0 +1,4 @@ | |||
1 | |||
2 | require u-boot-xlnx.inc | ||
3 | require u-boot-spl-zynq-init.inc | ||
4 | require u-boot-xlnx-2022.1.inc | ||
diff --git a/meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx_2022.2.bb b/meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx_2022.2.bb new file mode 100644 index 00000000..b10f321b --- /dev/null +++ b/meta-xilinx-core/recipes-bsp/u-boot/u-boot-xlnx_2022.2.bb | |||
@@ -0,0 +1,4 @@ | |||
1 | |||
2 | require u-boot-xlnx.inc | ||
3 | require u-boot-spl-zynq-init.inc | ||
4 | require u-boot-xlnx-2022.2.inc | ||
diff --git a/meta-xilinx-core/recipes-devtools/qemu/qemu-devicetrees_2022.1.bb b/meta-xilinx-core/recipes-devtools/qemu/qemu-devicetrees_2022.1.bb new file mode 100644 index 00000000..7c734cd6 --- /dev/null +++ b/meta-xilinx-core/recipes-devtools/qemu/qemu-devicetrees_2022.1.bb | |||
@@ -0,0 +1,8 @@ | |||
1 | |||
2 | require qemu-devicetrees.inc | ||
3 | |||
4 | BRANCH ?= "xlnx_rel_v2022.1" | ||
5 | SRCREV ?= "0499324af1178057c3730b0989c8fb5c5bbc4cf8" | ||
6 | |||
7 | FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:" | ||
8 | SRC_URI:append = " file://0001-Makefile-Use-python3-instead-of-python.patch" | ||
diff --git a/meta-xilinx-core/recipes-devtools/qemu/qemu-devicetrees_2022.2.bb b/meta-xilinx-core/recipes-devtools/qemu/qemu-devicetrees_2022.2.bb new file mode 100644 index 00000000..6675ba3e --- /dev/null +++ b/meta-xilinx-core/recipes-devtools/qemu/qemu-devicetrees_2022.2.bb | |||
@@ -0,0 +1,6 @@ | |||
1 | |||
2 | require qemu-devicetrees.inc | ||
3 | |||
4 | BRANCH ?= "xlnx_rel_v2022.2" | ||
5 | SRCREV ?= "cf5d357e16c13ac447861f908e83951ffb7b4301" | ||
6 | |||
diff --git a/meta-xilinx-core/recipes-devtools/qemu/qemu-devicetrees_2023.1.bb b/meta-xilinx-core/recipes-devtools/qemu/qemu-devicetrees_2023.1.bb index 91e787bd..dc1feda4 100644 --- a/meta-xilinx-core/recipes-devtools/qemu/qemu-devicetrees_2023.1.bb +++ b/meta-xilinx-core/recipes-devtools/qemu/qemu-devicetrees_2023.1.bb | |||
@@ -2,5 +2,5 @@ | |||
2 | require qemu-devicetrees.inc | 2 | require qemu-devicetrees.inc |
3 | 3 | ||
4 | BRANCH ?= "xlnx_rel_v2023.1" | 4 | BRANCH ?= "xlnx_rel_v2023.1" |
5 | SRCREV ?= "1c45adcde1fc06432c01be250bf668c6477d8459" | 5 | SRCREV ?= "56538937584f527fb408347c3b430142e74723e8" |
6 | 6 | ||
diff --git a/meta-xilinx-core/recipes-devtools/qemu/qemu-xilinx-2022.1.inc b/meta-xilinx-core/recipes-devtools/qemu/qemu-xilinx-2022.1.inc new file mode 100644 index 00000000..bb8fac70 --- /dev/null +++ b/meta-xilinx-core/recipes-devtools/qemu/qemu-xilinx-2022.1.inc | |||
@@ -0,0 +1,8 @@ | |||
1 | # Note this isn't really the 2022.1 or 2022.2 version of qemu-xilinx | ||
2 | # Instead it's the current master version, as qemu 6.1.0 doesn't | ||
3 | # work reliabily anymore. | ||
4 | |||
5 | XILINX_QEMU_VERSION = "v7.1.0" | ||
6 | BRANCH = "master" | ||
7 | SRCREV = "21adc9f99e813fb24fb65421259b5b0614938376" | ||
8 | |||
diff --git a/meta-xilinx-core/recipes-devtools/qemu/qemu-xilinx-2022.2.inc b/meta-xilinx-core/recipes-devtools/qemu/qemu-xilinx-2022.2.inc new file mode 100644 index 00000000..bb8fac70 --- /dev/null +++ b/meta-xilinx-core/recipes-devtools/qemu/qemu-xilinx-2022.2.inc | |||
@@ -0,0 +1,8 @@ | |||
1 | # Note this isn't really the 2022.1 or 2022.2 version of qemu-xilinx | ||
2 | # Instead it's the current master version, as qemu 6.1.0 doesn't | ||
3 | # work reliabily anymore. | ||
4 | |||
5 | XILINX_QEMU_VERSION = "v7.1.0" | ||
6 | BRANCH = "master" | ||
7 | SRCREV = "21adc9f99e813fb24fb65421259b5b0614938376" | ||
8 | |||
diff --git a/meta-xilinx-core/recipes-devtools/qemu/qemu-xilinx-6.1.0/0010-configure-Add-pkg-config-handling-for-libgcrypt.patch b/meta-xilinx-core/recipes-devtools/qemu/qemu-xilinx-6.1.0/0010-configure-Add-pkg-config-handling-for-libgcrypt.patch deleted file mode 100644 index 4298964d..00000000 --- a/meta-xilinx-core/recipes-devtools/qemu/qemu-xilinx-6.1.0/0010-configure-Add-pkg-config-handling-for-libgcrypt.patch +++ /dev/null | |||
@@ -1,29 +0,0 @@ | |||
1 | From b51e6dd833172954c718bd600d846540eeb07220 Mon Sep 17 00:00:00 2001 | ||
2 | From: He Zhe <zhe.he@windriver.com> | ||
3 | Date: Wed, 28 Aug 2019 19:56:28 +0800 | ||
4 | Subject: [PATCH] configure: Add pkg-config handling for libgcrypt | ||
5 | |||
6 | libgcrypt may also be controlled by pkg-config, this patch adds pkg-config | ||
7 | handling for libgcrypt. | ||
8 | |||
9 | Upstream-Status: Denied [https://lists.nongnu.org/archive/html/qemu-devel/2019-08/msg06333.html] | ||
10 | |||
11 | Signed-off-by: He Zhe <zhe.he@windriver.com> | ||
12 | |||
13 | --- | ||
14 | meson.build | 2 +- | ||
15 | 1 file changed, 1 insertion(+), 1 deletion(-) | ||
16 | |||
17 | diff --git a/meson.build b/meson.build | ||
18 | index b3e7ec0e9..4cbe715b7 100644 | ||
19 | --- a/meson.build | ||
20 | +++ b/meson.build | ||
21 | @@ -874,7 +874,7 @@ endif | ||
22 | if not gnutls_crypto.found() | ||
23 | if (not get_option('gcrypt').auto() or have_system) and not get_option('nettle').enabled() | ||
24 | gcrypt = dependency('libgcrypt', version: '>=1.8', | ||
25 | - method: 'config-tool', | ||
26 | + method: 'pkg-config', | ||
27 | required: get_option('gcrypt'), | ||
28 | kwargs: static_kwargs) | ||
29 | # Debian has removed -lgpg-error from libgcrypt-config | ||
diff --git a/meta-xilinx-core/recipes-devtools/qemu/qemu-xilinx-6.1.0/cross.patch b/meta-xilinx-core/recipes-devtools/qemu/qemu-xilinx-6.1.0/cross.patch deleted file mode 100644 index bdb77ec7..00000000 --- a/meta-xilinx-core/recipes-devtools/qemu/qemu-xilinx-6.1.0/cross.patch +++ /dev/null | |||
@@ -1,40 +0,0 @@ | |||
1 | From f51ece86f84c877f255746cba22a6745f37d2b7f Mon Sep 17 00:00:00 2001 | ||
2 | From: Richard Purdie <richard.purdie@linuxfoundation.org> | ||
3 | Date: Tue, 5 Jan 2021 23:00:14 +0000 | ||
4 | Subject: [PATCH] qemu: Upgrade 5.1.0->5.2.0 | ||
5 | |||
6 | We need to be able to trigger configure's cross code but we don't want | ||
7 | to set cross_prefix as it does other things we don't want. Patch things | ||
8 | so we can do what we need in the target config case. | ||
9 | |||
10 | Upstream-Status: Inappropriate [may be rewritten in a way upstream may accept?] | ||
11 | Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org> | ||
12 | --- | ||
13 | configure | 4 ---- | ||
14 | 1 file changed, 4 deletions(-) | ||
15 | |||
16 | diff --git a/configure b/configure | ||
17 | index 9a79a004d..563b7827f 100755 | ||
18 | --- a/configure | ||
19 | +++ b/configure | ||
20 | @@ -5128,7 +5128,6 @@ if test "$skip_meson" = no; then | ||
21 | fi | ||
22 | echo "strip = [$(meson_quote $strip)]" >> $cross | ||
23 | echo "windres = [$(meson_quote $windres)]" >> $cross | ||
24 | - if test "$cross_compile" = "yes"; then | ||
25 | cross_arg="--cross-file config-meson.cross" | ||
26 | echo "[host_machine]" >> $cross | ||
27 | if test "$mingw32" = "yes" ; then | ||
28 | @@ -5160,9 +5159,6 @@ if test "$skip_meson" = no; then | ||
29 | else | ||
30 | echo "endian = 'little'" >> $cross | ||
31 | fi | ||
32 | - else | ||
33 | - cross_arg="--native-file config-meson.cross" | ||
34 | - fi | ||
35 | mv $cross config-meson.cross | ||
36 | |||
37 | rm -rf meson-private meson-info meson-logs | ||
38 | -- | ||
39 | 2.17.1 | ||
40 | |||
diff --git a/meta-xilinx-core/recipes-devtools/qemu/qemu-xilinx-native.inc b/meta-xilinx-core/recipes-devtools/qemu/qemu-xilinx-native.inc deleted file mode 100644 index b22ab432..00000000 --- a/meta-xilinx-core/recipes-devtools/qemu/qemu-xilinx-native.inc +++ /dev/null | |||
@@ -1,11 +0,0 @@ | |||
1 | require recipes-devtools/qemu/qemu-native.inc | ||
2 | require qemu-xilinx.inc | ||
3 | |||
4 | DEPENDS = "glib-2.0-native zlib-native ninja-native meson-native" | ||
5 | |||
6 | SRC_URI:remove = "file://0012-fix-libcap-header-issue-on-some-distro.patch" | ||
7 | SRC_URI:remove = "file://0013-cpus.c-Add-error-messages-when-qemi_cpu_kick_thread-.patch" | ||
8 | |||
9 | do_install:append(){ | ||
10 | rm -rf ${D}${datadir}/icons | ||
11 | } | ||
diff --git a/meta-xilinx-core/recipes-devtools/qemu/qemu-xilinx-native_2022.1.bb b/meta-xilinx-core/recipes-devtools/qemu/qemu-xilinx-native_2022.1.bb new file mode 100644 index 00000000..42794f55 --- /dev/null +++ b/meta-xilinx-core/recipes-devtools/qemu/qemu-xilinx-native_2022.1.bb | |||
@@ -0,0 +1,9 @@ | |||
1 | require qemu-xilinx-2022.1.inc | ||
2 | require qemu-xilinx-native-7.1.inc | ||
3 | require qemu-native-alt.inc | ||
4 | |||
5 | BPN = "qemu-xilinx" | ||
6 | |||
7 | EXTRA_OECONF:append = " --target-list=${@get_qemu_usermode_target_list(d)} --disable-tools --disable-blobs --disable-guest-agent" | ||
8 | |||
9 | PACKAGECONFIG ??= "pie" | ||
diff --git a/meta-xilinx-core/recipes-devtools/qemu/qemu-xilinx-native_2022.2.bb b/meta-xilinx-core/recipes-devtools/qemu/qemu-xilinx-native_2022.2.bb new file mode 100644 index 00000000..e6a69f3a --- /dev/null +++ b/meta-xilinx-core/recipes-devtools/qemu/qemu-xilinx-native_2022.2.bb | |||
@@ -0,0 +1,9 @@ | |||
1 | require qemu-xilinx-2022.2.inc | ||
2 | require qemu-xilinx-native-7.1.inc | ||
3 | require qemu-native-alt.inc | ||
4 | |||
5 | BPN = "qemu-xilinx" | ||
6 | |||
7 | EXTRA_OECONF:append = " --target-list=${@get_qemu_usermode_target_list(d)} --disable-tools --disable-blobs --disable-guest-agent" | ||
8 | |||
9 | PACKAGECONFIG ??= "pie" | ||
diff --git a/meta-xilinx-core/recipes-devtools/qemu/qemu-xilinx-system-native_2022.1.bb b/meta-xilinx-core/recipes-devtools/qemu/qemu-xilinx-system-native_2022.1.bb new file mode 100644 index 00000000..6a2742bf --- /dev/null +++ b/meta-xilinx-core/recipes-devtools/qemu/qemu-xilinx-system-native_2022.1.bb | |||
@@ -0,0 +1,26 @@ | |||
1 | require qemu-system-native-alt.inc | ||
2 | require qemu-xilinx-2022.1.inc | ||
3 | require qemu-xilinx-native-7.1.inc | ||
4 | |||
5 | PROVIDES = "qemu-system-native" | ||
6 | |||
7 | EXTRA_OECONF:append = " --target-list=${@get_qemu_system_target_list(d)}" | ||
8 | |||
9 | PACKAGECONFIG ??= "fdt alsa kvm gcrypt pie slirp" | ||
10 | |||
11 | PACKAGECONFIG:remove = "${@'kvm' if not os.path.exists('/usr/include/linux/kvm.h') else ''}" | ||
12 | |||
13 | DEPENDS += "pixman-native qemu-xilinx-native bison-native ninja-native meson-native" | ||
14 | DEPENDS += "qemu-xilinx-multiarch-helper-native" | ||
15 | |||
16 | do_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-system-native_2022.2.bb b/meta-xilinx-core/recipes-devtools/qemu/qemu-xilinx-system-native_2022.2.bb new file mode 100644 index 00000000..1f02812d --- /dev/null +++ b/meta-xilinx-core/recipes-devtools/qemu/qemu-xilinx-system-native_2022.2.bb | |||
@@ -0,0 +1,26 @@ | |||
1 | require qemu-system-native-alt.inc | ||
2 | require qemu-xilinx-2022.2.inc | ||
3 | require qemu-xilinx-native-7.1.inc | ||
4 | |||
5 | PROVIDES = "qemu-system-native" | ||
6 | |||
7 | EXTRA_OECONF:append = " --target-list=${@get_qemu_system_target_list(d)}" | ||
8 | |||
9 | PACKAGECONFIG ??= "fdt alsa kvm gcrypt pie slirp" | ||
10 | |||
11 | PACKAGECONFIG:remove = "${@'kvm' if not os.path.exists('/usr/include/linux/kvm.h') else ''}" | ||
12 | |||
13 | DEPENDS += "pixman-native qemu-xilinx-native bison-native ninja-native meson-native" | ||
14 | DEPENDS += "qemu-xilinx-multiarch-helper-native" | ||
15 | |||
16 | do_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.inc b/meta-xilinx-core/recipes-devtools/qemu/qemu-xilinx.inc deleted file mode 100644 index 788a3fe0..00000000 --- a/meta-xilinx-core/recipes-devtools/qemu/qemu-xilinx.inc +++ /dev/null | |||
@@ -1,47 +0,0 @@ | |||
1 | SUMMARY = "Xilinx's fork of a fast open source processor emulator" | ||
2 | HOMEPAGE = "https://github.com/xilinx/qemu/" | ||
3 | |||
4 | # x86_64 is needed to build nativesdks | ||
5 | QEMU_TARGETS = "aarch64 arm microblaze microblazeel x86_64" | ||
6 | |||
7 | LIC_FILES_CHKSUM = " \ | ||
8 | file://COPYING;md5=441c28d2cf86e15a37fa47e15a72fbac \ | ||
9 | file://COPYING.LIB;endline=24;md5=8c5efda6cf1e1b03dcfd0e6c0d271c7f \ | ||
10 | " | ||
11 | DEPENDS = "glib-2.0 zlib pixman bison-native ninja-native meson-native" | ||
12 | |||
13 | FILESEXTRAPATHS:prepend := "${THISDIR}/qemu-xilinx-6.1.0:" | ||
14 | |||
15 | PV = "${XILINX_QEMU_VERSION}-xilinx-v${@bb.parse.vars_from_file(d.getVar('FILE', False),d)[1] or ''}+git${SRCPV}" | ||
16 | REPO ?= "gitsm://github.com/Xilinx/qemu.git;protocol=https" | ||
17 | |||
18 | BRANCHARG = "${@['nobranch=1', 'branch=${BRANCH}'][d.getVar('BRANCH', True) != '']}" | ||
19 | SRC_URI = "${REPO};${BRANCHARG}" | ||
20 | |||
21 | SRC_URI:append = " file://0010-configure-Add-pkg-config-handling-for-libgcrypt.patch" | ||
22 | |||
23 | S = "${WORKDIR}/git" | ||
24 | |||
25 | # Disable KVM completely | ||
26 | PACKAGECONFIG:remove = "kvm" | ||
27 | PACKAGECONFIG:append = " fdt sdl gcrypt pie slirp" | ||
28 | |||
29 | |||
30 | # Remove when version is in sync with core oe-core | ||
31 | PACKAGECONFIG:remove:class-nativesdk= "pulsedio" | ||
32 | PACKAGECONFIG:remove:class-native = "pulsedio" | ||
33 | PACKAGECONFIG[alsa] = "--audio-drv-list=alsa,,alsa-lib" | ||
34 | PACKAGECONFIG[pulsedio] = "--audio-drv-list=pa,,pulseaudio" | ||
35 | PACKAGECONFIG[selinux] = "" | ||
36 | PACKAGECONFIG[slirp] = "--enable-slirp=git,--disable-slirp,," | ||
37 | PACKAGECONFIG[jack] = "" | ||
38 | |||
39 | DISABLE_STATIC:pn-${PN} = "" | ||
40 | |||
41 | do_install:append() { | ||
42 | # Prevent QA warnings about installed ${localstatedir}/run | ||
43 | if [ -d ${D}${localstatedir}/run ]; then rmdir ${D}${localstatedir}/run; fi | ||
44 | } | ||
45 | |||
46 | FILES:${PN} += "${datadir}/qemu/" | ||
47 | FILES:${PN}:append:class-nativesdk:mingw32 = " ${SDKPATHNATIVE}" | ||
diff --git a/meta-xilinx-core/recipes-devtools/qemu/qemu-xilinx_2022.1.bb b/meta-xilinx-core/recipes-devtools/qemu/qemu-xilinx_2022.1.bb new file mode 100644 index 00000000..04b0efe4 --- /dev/null +++ b/meta-xilinx-core/recipes-devtools/qemu/qemu-xilinx_2022.1.bb | |||
@@ -0,0 +1,24 @@ | |||
1 | require qemu-xilinx-2022.1.inc | ||
2 | require recipes-devtools/qemu/qemu.inc | ||
3 | require qemu-xilinx-7.1.inc | ||
4 | require qemu-alt.inc | ||
5 | |||
6 | # Links to libmali-xlnx, so it becomes MACHINE_ARCH specific | ||
7 | DEFAULT_PACKAGE_ARCH := "${PACKAGE_ARCH}" | ||
8 | MALI_PACKAGE_ARCH = "${@'${MACHINE_ARCH}' if d.getVar('PREFERRED_PROVIDER_virtual/libgles1') == 'libmali-xlnx' else '${DEFAULT_PACKAGE_ARCH}'}" | ||
9 | PACKAGE_ARCH:class-target = "${@bb.utils.contains_any('DEPENDS', 'libepoxy virglrenderer', '${MALI_PACKAGE_ARCH}', '${DEFAULT_PACKAGE_ARCH}', d)}" | ||
10 | |||
11 | BBCLASSEXTEND = "nativesdk" | ||
12 | |||
13 | RDEPENDS:${PN}:class-target += "bash" | ||
14 | |||
15 | PROVIDES:class-nativesdk = "nativesdk-qemu" | ||
16 | RPROVIDES:${PN}:class-nativesdk = "nativesdk-qemu" | ||
17 | |||
18 | EXTRA_OECONF:append:class-target = " --target-list=${@get_qemu_target_list(d)}" | ||
19 | EXTRA_OECONF:append:class-nativesdk = " --target-list=${@get_qemu_target_list(d)}" | ||
20 | EXTRA_OECONF:append:class-target:mipsarcho32 = "${@bb.utils.contains('BBEXTENDCURR', 'multilib', ' --disable-capstone', '', d)}" | ||
21 | |||
22 | do_install:append:class-nativesdk() { | ||
23 | ${@bb.utils.contains('PACKAGECONFIG', 'gtk+', 'make_qemu_wrapper', '', d)} | ||
24 | } | ||
diff --git a/meta-xilinx-core/recipes-devtools/qemu/qemu-xilinx_2022.2.bb b/meta-xilinx-core/recipes-devtools/qemu/qemu-xilinx_2022.2.bb new file mode 100644 index 00000000..9d3ad975 --- /dev/null +++ b/meta-xilinx-core/recipes-devtools/qemu/qemu-xilinx_2022.2.bb | |||
@@ -0,0 +1,24 @@ | |||
1 | require qemu-xilinx-2022.2.inc | ||
2 | require recipes-devtools/qemu/qemu.inc | ||
3 | require qemu-xilinx-7.1.inc | ||
4 | require qemu-alt.inc | ||
5 | |||
6 | # Links to libmali-xlnx, so it becomes MACHINE_ARCH specific | ||
7 | DEFAULT_PACKAGE_ARCH := "${PACKAGE_ARCH}" | ||
8 | MALI_PACKAGE_ARCH = "${@'${MACHINE_ARCH}' if d.getVar('PREFERRED_PROVIDER_virtual/libgles1') == 'libmali-xlnx' else '${DEFAULT_PACKAGE_ARCH}'}" | ||
9 | PACKAGE_ARCH:class-target = "${@bb.utils.contains_any('DEPENDS', 'libepoxy virglrenderer', '${MALI_PACKAGE_ARCH}', '${DEFAULT_PACKAGE_ARCH}', d)}" | ||
10 | |||
11 | BBCLASSEXTEND = "nativesdk" | ||
12 | |||
13 | RDEPENDS:${PN}:class-target += "bash" | ||
14 | |||
15 | PROVIDES:class-nativesdk = "nativesdk-qemu" | ||
16 | RPROVIDES:${PN}:class-nativesdk = "nativesdk-qemu" | ||
17 | |||
18 | EXTRA_OECONF:append:class-target = " --target-list=${@get_qemu_target_list(d)}" | ||
19 | EXTRA_OECONF:append:class-nativesdk = " --target-list=${@get_qemu_target_list(d)}" | ||
20 | EXTRA_OECONF:append:class-target:mipsarcho32 = "${@bb.utils.contains('BBEXTENDCURR', 'multilib', ' --disable-capstone', '', d)}" | ||
21 | |||
22 | do_install:append:class-nativesdk() { | ||
23 | ${@bb.utils.contains('PACKAGECONFIG', 'gtk+', 'make_qemu_wrapper', '', d)} | ||
24 | } | ||
diff --git a/meta-xilinx-core/recipes-kernel/dp/kernel-module-dp_2022.2.bb b/meta-xilinx-core/recipes-kernel/dp/kernel-module-dp_2022.2.bb new file mode 100644 index 00000000..dda6ec31 --- /dev/null +++ b/meta-xilinx-core/recipes-kernel/dp/kernel-module-dp_2022.2.bb | |||
@@ -0,0 +1,24 @@ | |||
1 | SUMMARY = "Xilinx DisplayPort Linux Kernel module" | ||
2 | DESCRIPTION = "Out-of-tree DisplayPort(DP) kernel modules provider for aarch64 devices" | ||
3 | SECTION = "kernel/modules" | ||
4 | LICENSE = "GPL-2.0-only" | ||
5 | LIC_FILES_CHKSUM = "file://LICENSE.md;md5=eb723b61539feef013de476e68b5c50a" | ||
6 | |||
7 | XLNX_DP_VERSION = "5.10.0" | ||
8 | PV = "${XLNX_DP_VERSION}+xilinx-v${@bb.parse.vars_from_file(d.getVar('FILE', False),d)[1] or ''}+git${SRCPV}" | ||
9 | |||
10 | S = "${WORKDIR}/git" | ||
11 | |||
12 | BRANCH ?= "xlnx_rel_v2022.2" | ||
13 | REPO ?= "git://github.com/xilinx/dp-modules.git;protocol=https" | ||
14 | SRCREV ?= "c57b2ce95ee6c86f35caecbc7007644ff8f6d337" | ||
15 | |||
16 | BRANCHARG = "${@['nobranch=1', 'branch=${BRANCH}'][d.getVar('BRANCH', True) != '']}" | ||
17 | SRC_URI = "${REPO};${BRANCHARG}" | ||
18 | |||
19 | inherit module | ||
20 | |||
21 | EXTRA_OEMAKE += "O=${STAGING_KERNEL_BUILDDIR}" | ||
22 | COMPATIBLE_MACHINE = "^$" | ||
23 | COMPATIBLE_MACHINE:zynqmp = "zynqmp" | ||
24 | COMPATIBLE_MACHINE:versal = "versal" | ||
diff --git a/meta-xilinx-core/recipes-kernel/hdmi/kernel-module-hdmi_2022.2.bb b/meta-xilinx-core/recipes-kernel/hdmi/kernel-module-hdmi_2022.2.bb new file mode 100644 index 00000000..c1f66013 --- /dev/null +++ b/meta-xilinx-core/recipes-kernel/hdmi/kernel-module-hdmi_2022.2.bb | |||
@@ -0,0 +1,24 @@ | |||
1 | SUMMARY = "Xilinx HDMI Linux Kernel module" | ||
2 | DESCRIPTION = "Out-of-tree HDMI kernel modules provider for MPSoC EG/EV devices" | ||
3 | SECTION = "kernel/modules" | ||
4 | LICENSE = "GPL-2.0-only" | ||
5 | LIC_FILES_CHKSUM = "file://LICENSE.md;md5=b34277fe156508fd5a650609dc36d1fe" | ||
6 | |||
7 | XLNX_HDMI_VERSION = "5.15.19" | ||
8 | PV = "${XLNX_HDMI_VERSION}+xilinx-v${@bb.parse.vars_from_file(d.getVar('FILE', False),d)[1] or ''}+git${SRCPV}" | ||
9 | |||
10 | S = "${WORKDIR}/git" | ||
11 | |||
12 | BRANCH ?= "xlnx_rel_v2022.2" | ||
13 | REPO ?= "git://github.com/Xilinx/hdmi-modules.git;protocol=https" | ||
14 | SRCREV = "25b6fe7a26a975be15c002b48cfd4c291486491e" | ||
15 | |||
16 | BRANCHARG = "${@['nobranch=1', 'branch=${BRANCH}'][d.getVar('BRANCH', True) != '']}" | ||
17 | SRC_URI = "${REPO};${BRANCHARG}" | ||
18 | |||
19 | inherit module | ||
20 | |||
21 | EXTRA_OEMAKE += "O=${STAGING_KERNEL_BUILDDIR}" | ||
22 | COMPATIBLE_MACHINE = "^$" | ||
23 | COMPATIBLE_MACHINE:zynqmp = "zynqmp" | ||
24 | COMPATIBLE_MACHINE:versal = "versal" | ||
diff --git a/meta-xilinx-core/recipes-kernel/linux/linux-xlnx_2022.1.bb b/meta-xilinx-core/recipes-kernel/linux/linux-xlnx_2022.1.bb new file mode 100644 index 00000000..41c1ffe2 --- /dev/null +++ b/meta-xilinx-core/recipes-kernel/linux/linux-xlnx_2022.1.bb | |||
@@ -0,0 +1,9 @@ | |||
1 | LINUX_VERSION = "5.15.19" | ||
2 | KBRANCH="xlnx_rebase_v5.15_LTS_2022.1_update" | ||
3 | SRCREV = "75872fda9ad270b611ee6ae2433492da1e22b688" | ||
4 | |||
5 | KCONF_AUDIT_LEVEL="0" | ||
6 | |||
7 | include linux-xlnx.inc | ||
8 | |||
9 | FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:" | ||
diff --git a/meta-xilinx-core/recipes-kernel/linux/linux-xlnx_2022.2.bb b/meta-xilinx-core/recipes-kernel/linux/linux-xlnx_2022.2.bb new file mode 100644 index 00000000..260224b8 --- /dev/null +++ b/meta-xilinx-core/recipes-kernel/linux/linux-xlnx_2022.2.bb | |||
@@ -0,0 +1,9 @@ | |||
1 | LINUX_VERSION = "5.15.36" | ||
2 | KBRANCH="xlnx_rebase_v5.15_LTS" | ||
3 | SRCREV = "19984dd147fa7fbb7cb14b17400263ad0925c189" | ||
4 | |||
5 | KCONF_AUDIT_LEVEL="0" | ||
6 | |||
7 | include linux-xlnx.inc | ||
8 | |||
9 | FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:" | ||
diff --git a/meta-xilinx-core/recipes-multimedia/vcu/kernel-module-vcu_2022.1.bb b/meta-xilinx-core/recipes-multimedia/vcu/kernel-module-vcu_2022.1.bb new file mode 100644 index 00000000..7ef1d5fd --- /dev/null +++ b/meta-xilinx-core/recipes-multimedia/vcu/kernel-module-vcu_2022.1.bb | |||
@@ -0,0 +1,39 @@ | |||
1 | SUMMARY = "Linux kernel module for Video Code Unit" | ||
2 | DESCRIPTION = "Out-of-tree VCU decoder, encoder and common kernel modules provider for MPSoC EV devices" | ||
3 | SECTION = "kernel/modules" | ||
4 | LICENSE = "GPL-2.0-only" | ||
5 | LIC_FILES_CHKSUM = "file://LICENSE.md;md5=eb723b61539feef013de476e68b5c50a" | ||
6 | |||
7 | XILINX_VCU_VERSION = "1.0.0" | ||
8 | PV = "${XILINX_VCU_VERSION}-xilinx-v${@bb.parse.vars_from_file(d.getVar('FILE', False),d)[1] or ''}+git${SRCPV}" | ||
9 | |||
10 | S = "${WORKDIR}/git" | ||
11 | |||
12 | FILESEXTRAPATHS:prepend := "${THISDIR}/files:" | ||
13 | |||
14 | BRANCH = "xlnx_rel_v2022.1" | ||
15 | REPO = "git://github.com/Xilinx/vcu-modules.git;protocol=https" | ||
16 | SRCREV = "9d2657550eccebccce08cacfcdd369367b9f6be4" | ||
17 | |||
18 | BRANCHARG = "${@['nobranch=1', 'branch=${BRANCH}'][d.getVar('BRANCH', True) != '']}" | ||
19 | SRC_URI = " \ | ||
20 | ${REPO};${BRANCHARG} \ | ||
21 | file://99-vcu-enc-dec.rules \ | ||
22 | " | ||
23 | |||
24 | inherit module features_check | ||
25 | |||
26 | REQUIRED_MACHINE_FEATURES = "vcu" | ||
27 | |||
28 | EXTRA_OEMAKE += "O=${STAGING_KERNEL_BUILDDIR}" | ||
29 | |||
30 | RDEPENDS:${PN} = "vcu-firmware" | ||
31 | |||
32 | KERNEL_MODULE_AUTOLOAD += "dmaproxy" | ||
33 | |||
34 | do_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 | |||
39 | FILES:${PN} = "${sysconfdir}/udev/rules.d/*" | ||
diff --git a/meta-xilinx-core/recipes-multimedia/vcu/kernel-module-vcu_2022.2.bb b/meta-xilinx-core/recipes-multimedia/vcu/kernel-module-vcu_2022.2.bb new file mode 100644 index 00000000..b1c96d3c --- /dev/null +++ b/meta-xilinx-core/recipes-multimedia/vcu/kernel-module-vcu_2022.2.bb | |||
@@ -0,0 +1,39 @@ | |||
1 | SUMMARY = "Linux kernel module for Video Code Unit" | ||
2 | DESCRIPTION = "Out-of-tree VCU decoder, encoder and common kernel modules provider for MPSoC EV devices" | ||
3 | SECTION = "kernel/modules" | ||
4 | LICENSE = "GPL-2.0-only" | ||
5 | LIC_FILES_CHKSUM = "file://LICENSE.md;md5=eb723b61539feef013de476e68b5c50a" | ||
6 | |||
7 | XILINX_VCU_VERSION = "1.0.0" | ||
8 | PV = "${XILINX_VCU_VERSION}-xilinx-v${@bb.parse.vars_from_file(d.getVar('FILE', False),d)[1] or ''}+git${SRCPV}" | ||
9 | |||
10 | S = "${WORKDIR}/git" | ||
11 | |||
12 | FILESEXTRAPATHS:prepend := "${THISDIR}/files:" | ||
13 | |||
14 | BRANCH = "xlnx_rel_v2022.2" | ||
15 | REPO = "git://github.com/Xilinx/vcu-modules.git;protocol=https" | ||
16 | SRCREV = "b131e220285e06658b6ab27f9e19b1c592a55f3a" | ||
17 | |||
18 | BRANCHARG = "${@['nobranch=1', 'branch=${BRANCH}'][d.getVar('BRANCH', True) != '']}" | ||
19 | SRC_URI = " \ | ||
20 | ${REPO};${BRANCHARG} \ | ||
21 | file://99-vcu-enc-dec.rules \ | ||
22 | " | ||
23 | |||
24 | inherit module features_check | ||
25 | |||
26 | REQUIRED_MACHINE_FEATURES = "vcu" | ||
27 | |||
28 | EXTRA_OEMAKE += "O=${STAGING_KERNEL_BUILDDIR}" | ||
29 | |||
30 | RDEPENDS:${PN} = "vcu-firmware" | ||
31 | |||
32 | KERNEL_MODULE_AUTOLOAD += "dmaproxy" | ||
33 | |||
34 | do_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 | |||
39 | FILES:${PN} = "${sysconfdir}/udev/rules.d/*" | ||
diff --git a/meta-xilinx-core/recipes-multimedia/vcu/libomxil-xlnx_2022.1.bb b/meta-xilinx-core/recipes-multimedia/vcu/libomxil-xlnx_2022.1.bb new file mode 100644 index 00000000..47c521c4 --- /dev/null +++ b/meta-xilinx-core/recipes-multimedia/vcu/libomxil-xlnx_2022.1.bb | |||
@@ -0,0 +1,51 @@ | |||
1 | SUMMARY = "OpenMAX Integration layer for VCU" | ||
2 | DESCRIPTION = "OMX IL Libraries,test applications and headers for VCU" | ||
3 | LICENSE = "Proprietary" | ||
4 | LIC_FILES_CHKSUM = "file://LICENSE.md;md5=03a7aef7e6f6a76a59fd9b8ba450b493" | ||
5 | |||
6 | XILINX_VCU_VERSION = "1.0.0" | ||
7 | PV = "${XILINX_VCU_VERSION}-xilinx-v${@bb.parse.vars_from_file(d.getVar('FILE', False),d)[1] or ''}+git${SRCPV}" | ||
8 | |||
9 | BRANCH ?= "xlnx_rel_v2022.1" | ||
10 | REPO ?= "git://github.com/Xilinx/vcu-omx-il.git;protocol=https" | ||
11 | SRCREV = "b3308c608be7ed9250b9c6732f6e0a02b1a2e985" | ||
12 | |||
13 | BRANCHARG = "${@['nobranch=1', 'branch=${BRANCH}'][d.getVar('BRANCH', True) != '']}" | ||
14 | SRC_URI = "${REPO};${BRANCHARG}" | ||
15 | |||
16 | S = "${WORKDIR}/git" | ||
17 | |||
18 | inherit features_check | ||
19 | |||
20 | REQUIRED_MACHINE_FEATURES = "vcu" | ||
21 | |||
22 | PACKAGE_ARCH = "${MACHINE_ARCH}" | ||
23 | |||
24 | DEPENDS = "libvcu-xlnx" | ||
25 | RDEPENDS:${PN} = "kernel-module-vcu libvcu-xlnx" | ||
26 | |||
27 | EXTERNAL_INCLUDE="${STAGING_INCDIR}/vcu-ctrl-sw/include" | ||
28 | |||
29 | EXTRA_OEMAKE = " \ | ||
30 | CC='${CC}' CXX='${CXX} ${CXXFLAGS}' \ | ||
31 | EXTERNAL_INCLUDE='${EXTERNAL_INCLUDE}' \ | ||
32 | " | ||
33 | |||
34 | do_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 | install -Dm 0755 ${S}/bin/omx_decoder ${D}/${bindir}/omx_decoder | ||
41 | install -Dm 0755 ${S}/bin/omx_encoder ${D}/${bindir}/omx_encoder | ||
42 | |||
43 | oe_libinstall -C ${S}/bin/ -so libOMX.allegro.core ${D}/${libdir}/ | ||
44 | oe_libinstall -C ${S}/bin/ -so libOMX.allegro.video_decoder ${D}/${libdir}/ | ||
45 | oe_libinstall -C ${S}/bin/ -so libOMX.allegro.video_encoder ${D}/${libdir}/ | ||
46 | } | ||
47 | |||
48 | # These libraries shouldn't get installed in world builds unless something | ||
49 | # explicitly depends upon them. | ||
50 | |||
51 | EXCLUDE_FROM_WORLD = "1" | ||
diff --git a/meta-xilinx-core/recipes-multimedia/vcu/libomxil-xlnx_2022.2.bb b/meta-xilinx-core/recipes-multimedia/vcu/libomxil-xlnx_2022.2.bb new file mode 100644 index 00000000..c5b956bc --- /dev/null +++ b/meta-xilinx-core/recipes-multimedia/vcu/libomxil-xlnx_2022.2.bb | |||
@@ -0,0 +1,50 @@ | |||
1 | SUMMARY = "OpenMAX Integration layer for VCU" | ||
2 | DESCRIPTION = "OMX IL Libraries,test applications and headers for VCU" | ||
3 | LICENSE = "Proprietary" | ||
4 | LIC_FILES_CHKSUM = "file://LICENSE.md;md5=03a7aef7e6f6a76a59fd9b8ba450b493" | ||
5 | |||
6 | XILINX_VCU_VERSION = "1.0.0" | ||
7 | PV = "${XILINX_VCU_VERSION}-xilinx-v${@bb.parse.vars_from_file(d.getVar('FILE', False),d)[1] or ''}+git${SRCPV}" | ||
8 | |||
9 | BRANCH ?= "xlnx_rel_v2022.2" | ||
10 | REPO ?= "git://github.com/Xilinx/vcu-omx-il.git;protocol=https" | ||
11 | SRCREV = "6752f5da88a8783f689ae762065295b89902d6d4" | ||
12 | |||
13 | BRANCHARG = "${@['nobranch=1', 'branch=${BRANCH}'][d.getVar('BRANCH', True) != '']}" | ||
14 | SRC_URI = "${REPO};${BRANCHARG}" | ||
15 | |||
16 | S = "${WORKDIR}/git" | ||
17 | |||
18 | COMPATIBLE_MACHINE = "^$" | ||
19 | COMPATIBLE_MACHINE:zynqmp = "zynqmp" | ||
20 | |||
21 | PACKAGE_ARCH = "${MACHINE_ARCH}" | ||
22 | |||
23 | DEPENDS = "libvcu-xlnx" | ||
24 | RDEPENDS:${PN} = "kernel-module-vcu libvcu-xlnx" | ||
25 | |||
26 | EXTERNAL_INCLUDE="${STAGING_INCDIR}/vcu-ctrl-sw/include" | ||
27 | |||
28 | EXTRA_OEMAKE = " \ | ||
29 | CC='${CC}' CXX='${CXX} ${CXXFLAGS}' \ | ||
30 | EXTERNAL_INCLUDE='${EXTERNAL_INCLUDE}' \ | ||
31 | " | ||
32 | |||
33 | do_install() { | ||
34 | install -d ${D}${libdir} | ||
35 | install -d ${D}${includedir}/vcu-omx-il | ||
36 | |||
37 | install -m 0644 ${S}/omx_header/*.h ${D}${includedir}/vcu-omx-il | ||
38 | |||
39 | install -Dm 0755 ${S}/bin/omx_decoder ${D}/${bindir}/omx_decoder | ||
40 | install -Dm 0755 ${S}/bin/omx_encoder ${D}/${bindir}/omx_encoder | ||
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 | |||
50 | EXCLUDE_FROM_WORLD = "1" | ||
diff --git a/meta-xilinx-core/recipes-multimedia/vcu/libvcu-xlnx_2022.1.bb b/meta-xilinx-core/recipes-multimedia/vcu/libvcu-xlnx_2022.1.bb new file mode 100644 index 00000000..71e6e572 --- /dev/null +++ b/meta-xilinx-core/recipes-multimedia/vcu/libvcu-xlnx_2022.1.bb | |||
@@ -0,0 +1,46 @@ | |||
1 | SUMMARY = "Control Software for VCU" | ||
2 | DESCRIPTION = "Control software libraries, test applications and headers provider for VCU" | ||
3 | LICENSE = "Proprietary" | ||
4 | LIC_FILES_CHKSUM = "file://LICENSE.md;md5=03a7aef7e6f6a76a59fd9b8ba450b493" | ||
5 | |||
6 | XILINX_VCU_VERSION = "1.0.0" | ||
7 | PV = "${XILINX_VCU_VERSION}-xilinx-v${@bb.parse.vars_from_file(d.getVar('FILE', False),d)[1] or ''}+git${SRCPV}" | ||
8 | |||
9 | BRANCH ?= "xlnx_rel_v2022.1" | ||
10 | REPO ?= "git://github.com/Xilinx/vcu-ctrl-sw.git;protocol=https" | ||
11 | SRCREV = "5bf158af204b181f00ac009c8745557642ecfe5f" | ||
12 | |||
13 | BRANCHARG = "${@['nobranch=1', 'branch=${BRANCH}'][d.getVar('BRANCH', True) != '']}" | ||
14 | SRC_URI = "${REPO};${BRANCHARG}" | ||
15 | |||
16 | S = "${WORKDIR}/git" | ||
17 | |||
18 | inherit features_check | ||
19 | |||
20 | REQUIRED_MACHINE_FEATURES = "vcu" | ||
21 | |||
22 | PACKAGE_ARCH = "${MACHINE_ARCH}" | ||
23 | |||
24 | RDEPENDS:${PN} = "kernel-module-vcu" | ||
25 | |||
26 | EXTRA_OEMAKE = "CC='${CC}' CXX='${CXX} ${CXXFLAGS}'" | ||
27 | |||
28 | do_install() { | ||
29 | install -d ${D}${libdir} | ||
30 | install -d ${D}${includedir}/vcu-ctrl-sw/include | ||
31 | |||
32 | install -Dm 0755 ${S}/bin/ctrlsw_encoder ${D}/${bindir}/ctrlsw_encoder | ||
33 | install -Dm 0755 ${S}/bin/ctrlsw_decoder ${D}/${bindir}/ctrlsw_decoder | ||
34 | |||
35 | oe_runmake install_headers INSTALL_HDR_PATH=${D}${includedir}/vcu-ctrl-sw/include | ||
36 | oe_libinstall -C ${S}/bin/ -so liballegro_decode ${D}/${libdir}/ | ||
37 | oe_libinstall -C ${S}/bin/ -so liballegro_encode ${D}/${libdir}/ | ||
38 | } | ||
39 | |||
40 | # These libraries shouldn't get installed in world builds unless something | ||
41 | # explicitly depends upon them. | ||
42 | |||
43 | EXCLUDE_FROM_WORLD = "1" | ||
44 | |||
45 | # Disable buildpaths QA check warnings. | ||
46 | INSANE_SKIP:${PN} += "buildpaths" | ||
diff --git a/meta-xilinx-core/recipes-multimedia/vcu/libvcu-xlnx_2022.2.bb b/meta-xilinx-core/recipes-multimedia/vcu/libvcu-xlnx_2022.2.bb new file mode 100644 index 00000000..130d79bc --- /dev/null +++ b/meta-xilinx-core/recipes-multimedia/vcu/libvcu-xlnx_2022.2.bb | |||
@@ -0,0 +1,46 @@ | |||
1 | SUMMARY = "Control Software for VCU" | ||
2 | DESCRIPTION = "Control software libraries, test applications and headers provider for VCU" | ||
3 | LICENSE = "Proprietary" | ||
4 | LIC_FILES_CHKSUM = "file://LICENSE.md;md5=03a7aef7e6f6a76a59fd9b8ba450b493" | ||
5 | |||
6 | XILINX_VCU_VERSION = "1.0.0" | ||
7 | PV = "${XILINX_VCU_VERSION}-xilinx-v${@bb.parse.vars_from_file(d.getVar('FILE', False),d)[1] or ''}+git${SRCPV}" | ||
8 | |||
9 | BRANCH ?= "xlnx_rel_v2022.2" | ||
10 | REPO ?= "git://github.com/Xilinx/vcu-ctrl-sw.git;protocol=https" | ||
11 | SRCREV = "3c59dede1923a159a8db736ce0b4ab55633a2114" | ||
12 | |||
13 | BRANCHARG = "${@['nobranch=1', 'branch=${BRANCH}'][d.getVar('BRANCH', True) != '']}" | ||
14 | SRC_URI = "${REPO};${BRANCHARG}" | ||
15 | |||
16 | S = "${WORKDIR}/git" | ||
17 | |||
18 | inherit features_check | ||
19 | |||
20 | REQUIRED_MACHINE_FEATURES = "vcu" | ||
21 | |||
22 | PACKAGE_ARCH = "${MACHINE_ARCH}" | ||
23 | |||
24 | RDEPENDS:${PN} = "kernel-module-vcu" | ||
25 | |||
26 | EXTRA_OEMAKE = "CC='${CC}' CXX='${CXX} ${CXXFLAGS}'" | ||
27 | |||
28 | do_install() { | ||
29 | install -d ${D}${libdir} | ||
30 | install -d ${D}${includedir}/vcu-ctrl-sw/include | ||
31 | |||
32 | install -Dm 0755 ${S}/bin/ctrlsw_encoder ${D}/${bindir}/ctrlsw_encoder | ||
33 | install -Dm 0755 ${S}/bin/ctrlsw_decoder ${D}/${bindir}/ctrlsw_decoder | ||
34 | |||
35 | oe_runmake install_headers INSTALL_HDR_PATH=${D}${includedir}/vcu-ctrl-sw/include | ||
36 | oe_libinstall -C ${S}/bin/ -so liballegro_decode ${D}/${libdir}/ | ||
37 | oe_libinstall -C ${S}/bin/ -so liballegro_encode ${D}/${libdir}/ | ||
38 | } | ||
39 | |||
40 | # These libraries shouldn't get installed in world builds unless something | ||
41 | # explicitly depends upon them. | ||
42 | |||
43 | EXCLUDE_FROM_WORLD = "1" | ||
44 | |||
45 | # Disable buildpaths QA check warnings. | ||
46 | INSANE_SKIP:${PN} += "buildpaths" | ||
diff --git a/meta-xilinx-core/recipes-multimedia/vcu/vcu-firmware_2022.1.bb b/meta-xilinx-core/recipes-multimedia/vcu/vcu-firmware_2022.1.bb new file mode 100644 index 00000000..c5c2b045 --- /dev/null +++ b/meta-xilinx-core/recipes-multimedia/vcu/vcu-firmware_2022.1.bb | |||
@@ -0,0 +1,40 @@ | |||
1 | SUMMARY = "Firmware for VCU" | ||
2 | DESCRIPTION = "Firmware binaries provider for VCU" | ||
3 | LICENSE = "Proprietary" | ||
4 | LIC_FILES_CHKSUM = "file://LICENSE;md5=63b45903a9a50120df488435f03cf498" | ||
5 | |||
6 | XILINX_VCU_VERSION = "1.0.0" | ||
7 | PV = "${XILINX_VCU_VERSION}-xilinx-v${@bb.parse.vars_from_file(d.getVar('FILE', False),d)[1] or ''}+git${SRCPV}" | ||
8 | |||
9 | S = "${WORKDIR}/git" | ||
10 | |||
11 | BRANCH ?= "xlnx_rel_v2022.1" | ||
12 | REPO ?= "git://github.com/Xilinx/vcu-firmware.git;protocol=https" | ||
13 | SRCREV = "569f980527fd58f43baf16bd0b294bf8c7cdf963" | ||
14 | |||
15 | BRANCHARG = "${@['nobranch=1', 'branch=${BRANCH}'][d.getVar('BRANCH', True) != '']}" | ||
16 | SRC_URI = "${REPO};${BRANCHARG}" | ||
17 | |||
18 | inherit features_check | ||
19 | |||
20 | REQUIRED_MACHINE_FEATURES = "vcu" | ||
21 | |||
22 | PACKAGE_ARCH = "${MACHINE_ARCH}" | ||
23 | |||
24 | do_install() { | ||
25 | install -Dm 0644 ${S}/${XILINX_VCU_VERSION}/lib/firmware/al5d_b.fw ${D}/lib/firmware/al5d_b.fw | ||
26 | install -Dm 0644 ${S}/${XILINX_VCU_VERSION}/lib/firmware/al5d.fw ${D}/lib/firmware/al5d.fw | ||
27 | install -Dm 0644 ${S}/${XILINX_VCU_VERSION}/lib/firmware/al5e_b.fw ${D}/lib/firmware/al5e_b.fw | ||
28 | install -Dm 0644 ${S}/${XILINX_VCU_VERSION}/lib/firmware/al5e.fw ${D}/lib/firmware/al5e.fw | ||
29 | } | ||
30 | |||
31 | # Inhibit warnings about files being stripped | ||
32 | INHIBIT_PACKAGE_DEBUG_SPLIT = "1" | ||
33 | INHIBIT_PACKAGE_STRIP = "1" | ||
34 | FILES:${PN} = "/lib/firmware/*" | ||
35 | |||
36 | # These libraries shouldn't get installed in world builds unless something | ||
37 | # explicitly depends upon them. | ||
38 | EXCLUDE_FROM_WORLD = "1" | ||
39 | |||
40 | INSANE_SKIP:${PN} = "ldflags" | ||
diff --git a/meta-xilinx-core/recipes-multimedia/vcu/vcu-firmware_2022.2.bb b/meta-xilinx-core/recipes-multimedia/vcu/vcu-firmware_2022.2.bb new file mode 100644 index 00000000..594a94c3 --- /dev/null +++ b/meta-xilinx-core/recipes-multimedia/vcu/vcu-firmware_2022.2.bb | |||
@@ -0,0 +1,40 @@ | |||
1 | SUMMARY = "Firmware for VCU" | ||
2 | DESCRIPTION = "Firmware binaries provider for VCU" | ||
3 | LICENSE = "Proprietary" | ||
4 | LIC_FILES_CHKSUM = "file://LICENSE;md5=63b45903a9a50120df488435f03cf498" | ||
5 | |||
6 | XILINX_VCU_VERSION = "1.0.0" | ||
7 | PV = "${XILINX_VCU_VERSION}-xilinx-v${@bb.parse.vars_from_file(d.getVar('FILE', False),d)[1] or ''}+git${SRCPV}" | ||
8 | |||
9 | S = "${WORKDIR}/git" | ||
10 | |||
11 | BRANCH ?= "xlnx_rel_v2022.2" | ||
12 | REPO ?= "git://github.com/Xilinx/vcu-firmware.git;protocol=https" | ||
13 | SRCREV = "3980c778d71fa51a15e89bf70fd8fb28d5cb12e0" | ||
14 | |||
15 | BRANCHARG = "${@['nobranch=1', 'branch=${BRANCH}'][d.getVar('BRANCH', True) != '']}" | ||
16 | SRC_URI = "${REPO};${BRANCHARG}" | ||
17 | |||
18 | inherit features_check | ||
19 | |||
20 | REQUIRED_MACHINE_FEATURES = "vcu" | ||
21 | |||
22 | PACKAGE_ARCH = "${MACHINE_ARCH}" | ||
23 | |||
24 | do_install() { | ||
25 | install -Dm 0644 ${S}/${XILINX_VCU_VERSION}/lib/firmware/al5d_b.fw ${D}/lib/firmware/al5d_b.fw | ||
26 | install -Dm 0644 ${S}/${XILINX_VCU_VERSION}/lib/firmware/al5d.fw ${D}/lib/firmware/al5d.fw | ||
27 | install -Dm 0644 ${S}/${XILINX_VCU_VERSION}/lib/firmware/al5e_b.fw ${D}/lib/firmware/al5e_b.fw | ||
28 | install -Dm 0644 ${S}/${XILINX_VCU_VERSION}/lib/firmware/al5e.fw ${D}/lib/firmware/al5e.fw | ||
29 | } | ||
30 | |||
31 | # Inhibit warnings about files being stripped | ||
32 | INHIBIT_PACKAGE_DEBUG_SPLIT = "1" | ||
33 | INHIBIT_PACKAGE_STRIP = "1" | ||
34 | FILES:${PN} = "/lib/firmware/*" | ||
35 | |||
36 | # These libraries shouldn't get installed in world builds unless something | ||
37 | # explicitly depends upon them. | ||
38 | EXCLUDE_FROM_WORLD = "1" | ||
39 | |||
40 | INSANE_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 9b835490..9b835490 100755..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 | |||
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 602dc2fc..602dc2fc 100755..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 | |||
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 b4fc482e..b4fc482e 100755..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 | |||
diff --git a/meta-xilinx-standalone-experimental/conf/dtb-embeddedsw.inc b/meta-xilinx-standalone-experimental/conf/dtb-embeddedsw.inc index 2ddb173d..b1de721e 100644 --- a/meta-xilinx-standalone-experimental/conf/dtb-embeddedsw.inc +++ b/meta-xilinx-standalone-experimental/conf/dtb-embeddedsw.inc | |||
@@ -9,6 +9,4 @@ REPO = "git://github.com/Xilinx/embeddedsw-experimental-dt-support.git;protocol= | |||
9 | ESW_BRANCH[2023_sdt_experimental] = "xlnx_rel_v2023.2_sdt" | 9 | ESW_BRANCH[2023_sdt_experimental] = "xlnx_rel_v2023.2_sdt" |
10 | ESW_REV[2023_sdt_experimental] = "742a608800e7621fb7c376daf5124333b5826d6d" | 10 | ESW_REV[2023_sdt_experimental] = "742a608800e7621fb7c376daf5124333b5826d6d" |
11 | LIC_FILES_CHKSUM[master] = '7c92de7a21a6613265035c28f4a92f48' | 11 | LIC_FILES_CHKSUM[master] = '7c92de7a21a6613265035c28f4a92f48' |
12 | LIC_FILES_CHKSUM[xlnx_rel_v2022.1_sdt_experimental_beta] = 'e26f53a7d6f58f4b1a9687099417225c' | ||
13 | LIC_FILES_CHKSUM[xlnx_rel_v2023.1_sdt_experimental] = 'ce611484168a6000bd35df68fc4f4290' | ||
14 | LIC_FILES_CHKSUM[xlnx_rel_v2023.2_sdt] = 'ce611484168a6000bd35df68fc4f4290' | 12 | LIC_FILES_CHKSUM[xlnx_rel_v2023.2_sdt] = 'ce611484168a6000bd35df68fc4f4290' |
diff --git a/meta-xilinx-standalone/classes/xlnx-embeddedsw.bbclass b/meta-xilinx-standalone/classes/xlnx-embeddedsw.bbclass index 12db0da2..13ae11b1 100644 --- a/meta-xilinx-standalone/classes/xlnx-embeddedsw.bbclass +++ b/meta-xilinx-standalone/classes/xlnx-embeddedsw.bbclass | |||
@@ -3,11 +3,15 @@ ESW_VER ?= "${@bb.parse.vars_from_file(d.getVar('FILE', False),d)[1] or 'master' | |||
3 | 3 | ||
4 | REPO ??= "git://github.com/Xilinx/embeddedsw.git;protocol=https" | 4 | REPO ??= "git://github.com/Xilinx/embeddedsw.git;protocol=https" |
5 | 5 | ||
6 | ESW_BRANCH[2023.1] = "xlnx_rel_v2023.1" | 6 | ESW_BRANCH[2022.1] = "xlnx_rel_v2022.1_update" |
7 | ESW_BRANCH[2022.2] = "xlnx_rel_v2022.2" | ||
8 | ESW_BRANCH[2023.1] = "xlnx_rel_v2023.1_update" | ||
7 | ESW_BRANCH[2023.2] = "xlnx_rel_v2023.2" | 9 | ESW_BRANCH[2023.2] = "xlnx_rel_v2023.2" |
8 | BRANCH ??= "${@d.getVarFlag('ESW_BRANCH', d.getVar('ESW_VER')) or '${ESW_VER}'}" | 10 | BRANCH ??= "${@d.getVarFlag('ESW_BRANCH', d.getVar('ESW_VER')) or '${ESW_VER}'}" |
9 | 11 | ||
10 | ESW_REV[2023.1] = "e24fe92b5517ee447e560790e798cad792f53bab" | 12 | ESW_REV[2022.1] = "56d94a506fd9f80949f4cff08e13015928603f01" |
13 | ESW_REV[2022.2] = "5330a64c8efd14f0eef09befdbb8d3d738c33ec2" | ||
14 | ESW_REV[2023.1] = "af784f742dad0ca6e69e05baf8de51152c396b9a" | ||
11 | ESW_REV[2023.2] = "c9a0ee31b2a14cbcfcb56ca369037319b4ad4847" | 15 | ESW_REV[2023.2] = "c9a0ee31b2a14cbcfcb56ca369037319b4ad4847" |
12 | SRCREV ??= "${@d.getVarFlag('ESW_REV', d.getVar('ESW_VER')) or '${AUTOREV}'}" | 16 | SRCREV ??= "${@d.getVarFlag('ESW_REV', d.getVar('ESW_VER')) or '${AUTOREV}'}" |
13 | 17 | ||
@@ -15,7 +19,9 @@ EMBEDDEDSW_BRANCHARG ?= "${@['nobranch=1', 'branch=${BRANCH}'][d.getVar('BRANCH' | |||
15 | EMBEDDEDSW_SRCURI ?= "${REPO};${EMBEDDEDSW_BRANCHARG}" | 19 | EMBEDDEDSW_SRCURI ?= "${REPO};${EMBEDDEDSW_BRANCHARG}" |
16 | 20 | ||
17 | LICENSE = "MIT" | 21 | LICENSE = "MIT" |
18 | LIC_FILES_CHKSUM[xlnx_rel_v2023.1] = '3c310a3ee2197a4c92c6a0e2937c207c' | 22 | LIC_FILES_CHKSUM[xlnx_rel_v2022.1_update] = 'e62cb7a722c4430999e0a55a7234035d' |
23 | LIC_FILES_CHKSUM[xlnx_rel_v2022.2] = 'ce611484168a6000bd35df68fc4f4290' | ||
24 | LIC_FILES_CHKSUM[xlnx_rel_v2023.1_update] = '3c310a3ee2197a4c92c6a0e2937c207c' | ||
19 | LIC_FILES_CHKSUM[xlnx_rel_v2023.2] = '9fceecdbcad88698f265578f3d4cb26c' | 25 | LIC_FILES_CHKSUM[xlnx_rel_v2023.2] = '9fceecdbcad88698f265578f3d4cb26c' |
20 | LIC_FILES_CHKSUM ??= "file://license.txt;md5=${@d.getVarFlag('LIC_FILES_CHKSUM', d.getVar('BRANCH')) or '0'}" | 26 | LIC_FILES_CHKSUM ??= "file://license.txt;md5=${@d.getVarFlag('LIC_FILES_CHKSUM', d.getVar('BRANCH')) or '0'}" |
21 | 27 | ||
diff --git a/meta-xilinx-standalone/recipes-bsp/embeddedsw/fsbl-firmware_2022.1.bb b/meta-xilinx-standalone/recipes-bsp/embeddedsw/fsbl-firmware_2022.1.bb new file mode 100644 index 00000000..3f9740a0 --- /dev/null +++ b/meta-xilinx-standalone/recipes-bsp/embeddedsw/fsbl-firmware_2022.1.bb | |||
@@ -0,0 +1,11 @@ | |||
1 | require fsbl-firmware.inc | ||
2 | |||
3 | FILESPATH .= ":${FILE_DIRNAME}/embeddedsw" | ||
4 | |||
5 | SRC_URI += " \ | ||
6 | file://makefile-skip-copy_bsp.sh.patch \ | ||
7 | file://fsbl-fixups.patch \ | ||
8 | " | ||
9 | |||
10 | # This version does not build for zynq | ||
11 | COMPATIBLE_MACHINE:zynq = "none" | ||
diff --git a/meta-xilinx-standalone/recipes-bsp/embeddedsw/fsbl-firmware_2022.2.bb b/meta-xilinx-standalone/recipes-bsp/embeddedsw/fsbl-firmware_2022.2.bb new file mode 100644 index 00000000..3f9740a0 --- /dev/null +++ b/meta-xilinx-standalone/recipes-bsp/embeddedsw/fsbl-firmware_2022.2.bb | |||
@@ -0,0 +1,11 @@ | |||
1 | require fsbl-firmware.inc | ||
2 | |||
3 | FILESPATH .= ":${FILE_DIRNAME}/embeddedsw" | ||
4 | |||
5 | SRC_URI += " \ | ||
6 | file://makefile-skip-copy_bsp.sh.patch \ | ||
7 | file://fsbl-fixups.patch \ | ||
8 | " | ||
9 | |||
10 | # This version does not build for zynq | ||
11 | COMPATIBLE_MACHINE:zynq = "none" | ||
diff --git a/meta-xilinx-standalone/recipes-bsp/embeddedsw/plm-firmware_2022.1.bb b/meta-xilinx-standalone/recipes-bsp/embeddedsw/plm-firmware_2022.1.bb new file mode 100644 index 00000000..cc810241 --- /dev/null +++ b/meta-xilinx-standalone/recipes-bsp/embeddedsw/plm-firmware_2022.1.bb | |||
@@ -0,0 +1,16 @@ | |||
1 | require plm-firmware.inc | ||
2 | |||
3 | FILESPATH .= ":${FILE_DIRNAME}/embeddedsw" | ||
4 | |||
5 | SRC_URI += " \ | ||
6 | file://makefile-skip-copy_bsp.sh.patch \ | ||
7 | file://0001-versal_fw-Fixup-core-makefiles.patch \ | ||
8 | " | ||
9 | |||
10 | EXTRA_COMPILER_FLAGS = "-g -ffunction-sections -fdata-sections -Wall -Wextra -Os -flto -ffat-lto-objects" | ||
11 | |||
12 | do_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/plm-firmware_2022.2.bb b/meta-xilinx-standalone/recipes-bsp/embeddedsw/plm-firmware_2022.2.bb new file mode 100644 index 00000000..cc810241 --- /dev/null +++ b/meta-xilinx-standalone/recipes-bsp/embeddedsw/plm-firmware_2022.2.bb | |||
@@ -0,0 +1,16 @@ | |||
1 | require plm-firmware.inc | ||
2 | |||
3 | FILESPATH .= ":${FILE_DIRNAME}/embeddedsw" | ||
4 | |||
5 | SRC_URI += " \ | ||
6 | file://makefile-skip-copy_bsp.sh.patch \ | ||
7 | file://0001-versal_fw-Fixup-core-makefiles.patch \ | ||
8 | " | ||
9 | |||
10 | EXTRA_COMPILER_FLAGS = "-g -ffunction-sections -fdata-sections -Wall -Wextra -Os -flto -ffat-lto-objects" | ||
11 | |||
12 | do_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/pmu-firmware_2022.1.bb b/meta-xilinx-standalone/recipes-bsp/embeddedsw/pmu-firmware_2022.1.bb new file mode 100644 index 00000000..2c554d6d --- /dev/null +++ b/meta-xilinx-standalone/recipes-bsp/embeddedsw/pmu-firmware_2022.1.bb | |||
@@ -0,0 +1,16 @@ | |||
1 | require pmu-firmware.inc | ||
2 | |||
3 | FILESPATH .= ":${FILE_DIRNAME}/embeddedsw" | ||
4 | |||
5 | SRC_URI += " \ | ||
6 | file://makefile-skip-copy_bsp.sh.patch \ | ||
7 | file://0001-zynqmp_pmufw-Fixup-core-makefiles.patch \ | ||
8 | " | ||
9 | |||
10 | EXTRA_COMPILER_FLAGS = "-ffunction-sections -fdata-sections -Wall -Wextra -Os -flto -ffat-lto-objects" | ||
11 | |||
12 | do_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/pmu-firmware_2022.2.bb b/meta-xilinx-standalone/recipes-bsp/embeddedsw/pmu-firmware_2022.2.bb new file mode 100644 index 00000000..2c554d6d --- /dev/null +++ b/meta-xilinx-standalone/recipes-bsp/embeddedsw/pmu-firmware_2022.2.bb | |||
@@ -0,0 +1,16 @@ | |||
1 | require pmu-firmware.inc | ||
2 | |||
3 | FILESPATH .= ":${FILE_DIRNAME}/embeddedsw" | ||
4 | |||
5 | SRC_URI += " \ | ||
6 | file://makefile-skip-copy_bsp.sh.patch \ | ||
7 | file://0001-zynqmp_pmufw-Fixup-core-makefiles.patch \ | ||
8 | " | ||
9 | |||
10 | EXTRA_COMPILER_FLAGS = "-ffunction-sections -fdata-sections -Wall -Wextra -Os -flto -ffat-lto-objects" | ||
11 | |||
12 | do_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_2022.1.bb b/meta-xilinx-standalone/recipes-bsp/embeddedsw/psm-firmware_2022.1.bb new file mode 100644 index 00000000..d861fb1c --- /dev/null +++ b/meta-xilinx-standalone/recipes-bsp/embeddedsw/psm-firmware_2022.1.bb | |||
@@ -0,0 +1,16 @@ | |||
1 | require psm-firmware.inc | ||
2 | |||
3 | FILESPATH .= ":${FILE_DIRNAME}/embeddedsw" | ||
4 | |||
5 | SRC_URI += " \ | ||
6 | file://makefile-skip-copy_bsp.sh.patch \ | ||
7 | file://0001-versal_fw-Fixup-core-makefiles.patch \ | ||
8 | " | ||
9 | |||
10 | EXTRA_COMPILER_FLAGS = "-g -ffunction-sections -fdata-sections -Wall -Wextra" | ||
11 | |||
12 | do_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_2022.2.bb b/meta-xilinx-standalone/recipes-bsp/embeddedsw/psm-firmware_2022.2.bb new file mode 100644 index 00000000..d861fb1c --- /dev/null +++ b/meta-xilinx-standalone/recipes-bsp/embeddedsw/psm-firmware_2022.2.bb | |||
@@ -0,0 +1,16 @@ | |||
1 | require psm-firmware.inc | ||
2 | |||
3 | FILESPATH .= ":${FILE_DIRNAME}/embeddedsw" | ||
4 | |||
5 | SRC_URI += " \ | ||
6 | file://makefile-skip-copy_bsp.sh.patch \ | ||
7 | file://0001-versal_fw-Fixup-core-makefiles.patch \ | ||
8 | " | ||
9 | |||
10 | EXTRA_COMPILER_FLAGS = "-g -ffunction-sections -fdata-sections -Wall -Wextra" | ||
11 | |||
12 | do_compile() { | ||
13 | oe_runmake | ||
14 | |||
15 | ${MB_OBJCOPY} -O binary ${B}/${ESW_COMPONENT} ${B}/${ESW_COMPONENT}.bin | ||
16 | } | ||