aboutsummaryrefslogtreecommitdiffstats
path: root/recipes-bsp
diff options
context:
space:
mode:
Diffstat (limited to 'recipes-bsp')
-rw-r--r--recipes-bsp/firmware-nexus/firmware-qcom-nexus.inc28
-rw-r--r--recipes-bsp/firmware-nexus/firmware-qcom-nexus4.bb33
-rw-r--r--recipes-bsp/firmware-nexus/firmware-qcom-nexus5.bb23
-rw-r--r--recipes-bsp/firmware-nexus/firmware-qcom-nexus5x.bb17
-rw-r--r--recipes-bsp/firmware-nexus/firmware-qcom-nexus6.bb19
-rw-r--r--recipes-bsp/firmware-nexus/firmware-qcom-nexus6p.bb16
-rw-r--r--recipes-bsp/firmware-nexus/firmware-qcom-nexus7-2013.bb33
-rw-r--r--recipes-bsp/firmware-nexus/firmware-qcom-pixel.bb17
-rw-r--r--recipes-bsp/firmware-nexus/firmware-qcom-pixel.inc79
-rw-r--r--recipes-bsp/firmware-nexus/firmware-qcom-pixel2.bb17
-rw-r--r--recipes-bsp/firmware-nexus/firmware-qcom-pixel3.bb13
-rw-r--r--recipes-bsp/firmware-nexus/firmware-qcom-pixel3a.bb13
-rw-r--r--recipes-bsp/firmware-nexus/firmware-qcom-pixel4.bb14
-rw-r--r--recipes-bsp/firmware-nexus/firmware-qcom-pixel4a-5g.bb13
-rw-r--r--recipes-bsp/firmware-nexus/firmware-qcom-pixel4a.bb13
-rw-r--r--recipes-bsp/firmware-nexus/firmware-qcom-pixel5.bb13
-rw-r--r--recipes-bsp/firmware-nexus/firmware-qcom-pixel5a-5g.bb13
-rw-r--r--recipes-bsp/firmware-nexus/firmware-qcom-radio.inc34
-rw-r--r--recipes-bsp/firmware-woa/files/adspr.jsn22
-rw-r--r--recipes-bsp/firmware-woa/files/adspua.jsn29
-rw-r--r--recipes-bsp/firmware-woa/files/battmgr.jsn22
-rw-r--r--recipes-bsp/firmware-woa/files/cdspr.jsn22
-rw-r--r--recipes-bsp/firmware-woa/files/slpir.jsn21
-rw-r--r--recipes-bsp/firmware-woa/files/slpius.jsn21
-rw-r--r--recipes-bsp/firmware-woa/firmware-qcom-sc8180x_200.0.105.0.bb40
-rw-r--r--recipes-bsp/firmware-woa/firmware-woa.inc19
-rw-r--r--recipes-bsp/firmware/firmware-ath6kl_git.bb49
-rw-r--r--recipes-bsp/firmware/firmware-qcom-adreno.inc40
-rw-r--r--recipes-bsp/firmware/firmware-qcom-dragonboard-apq8074.bb21
-rw-r--r--recipes-bsp/firmware/firmware-qcom-dragonboard410c.inc21
-rw-r--r--recipes-bsp/firmware/firmware-qcom-dragonboard820c_01700.1.bb29
-rw-r--r--recipes-bsp/firmware/firmware-qcom-dragonboard845c_20190529180356-v4.bb25
-rw-r--r--recipes-bsp/firmware/firmware-qcom-ifc6410.bb22
-rw-r--r--recipes-bsp/firmware/firmware-qcom-ifc6560.bb30
-rw-r--r--recipes-bsp/firmware/firmware-qcom-nexus7-2013.bb40
-rw-r--r--recipes-bsp/firmware/firmware-qcom-nhlos.inc60
-rw-r--r--recipes-bsp/firmware/firmware-qcom-rb1_20230823-v2.bb25
-rw-r--r--recipes-bsp/firmware/firmware-qcom-rb2_20230823-v2.bb25
-rw-r--r--recipes-bsp/firmware/firmware-qcom-rb5_20210331-v4.bb26
-rw-r--r--recipes-bsp/firmware/firmware-qcom-sm8150-hdk.bb42
-rw-r--r--recipes-bsp/firmware/firmware-qcom-sm8350-hdk.bb31
-rw-r--r--recipes-bsp/firmware/firmware-qcom-sm8450-hdk.bb44
-rw-r--r--recipes-bsp/firmware/firmware-qcom.inc48
-rw-r--r--recipes-bsp/firmware/firmware-wcn6855_git.bb52
-rw-r--r--recipes-bsp/images/initramfs-firmware-db8074-image.bb7
-rw-r--r--recipes-bsp/images/initramfs-firmware-ifc6560-image.bb16
-rw-r--r--recipes-bsp/images/initramfs-firmware-image.bb29
-rw-r--r--recipes-bsp/images/initramfs-firmware-image.inc17
-rw-r--r--recipes-bsp/images/initramfs-firmware-nexus-image.bb24
-rw-r--r--recipes-bsp/images/initramfs-firmware-rb12-image.bb14
-rw-r--r--recipes-bsp/images/initramfs-firmware-sc8180x-image.bb17
-rw-r--r--recipes-bsp/images/initramfs-firmware-sm8150-hdk-image.bb11
-rw-r--r--recipes-bsp/images/initramfs-firmware-sm8350-hdk-image.bb11
-rw-r--r--recipes-bsp/images/initramfs-firmware-sm8450-hdk-image.bb11
-rw-r--r--recipes-bsp/packagegroups/packagegroup-firmware-dragonboard-apq8074.bb10
-rw-r--r--recipes-bsp/packagegroups/packagegroup-firmware-dragonboard410c.bb11
-rw-r--r--recipes-bsp/packagegroups/packagegroup-firmware-dragonboard820c.bb13
-rw-r--r--recipes-bsp/packagegroups/packagegroup-firmware-dragonboard845c.bb13
-rw-r--r--recipes-bsp/packagegroups/packagegroup-firmware-ifc6410.bb14
-rw-r--r--recipes-bsp/packagegroups/packagegroup-firmware-ifc6560.bb14
-rw-r--r--recipes-bsp/packagegroups/packagegroup-firmware-lenovo-x13s.bb12
-rw-r--r--recipes-bsp/packagegroups/packagegroup-firmware-rb1.bb13
-rw-r--r--recipes-bsp/packagegroups/packagegroup-firmware-rb2.bb14
-rw-r--r--recipes-bsp/packagegroups/packagegroup-firmware-rb5.bb14
-rw-r--r--recipes-bsp/packagegroups/packagegroup-firmware-sc8180x.bb16
-rw-r--r--recipes-bsp/packagegroups/packagegroup-firmware-sm8150-hdk.bb15
-rw-r--r--recipes-bsp/packagegroups/packagegroup-firmware-sm8350-hdk.bb17
-rw-r--r--recipes-bsp/packagegroups/packagegroup-firmware-sm8450-hdk.bb14
68 files changed, 1464 insertions, 117 deletions
diff --git a/recipes-bsp/firmware-nexus/firmware-qcom-nexus.inc b/recipes-bsp/firmware-nexus/firmware-qcom-nexus.inc
new file mode 100644
index 0000000..892bf6d
--- /dev/null
+++ b/recipes-bsp/firmware-nexus/firmware-qcom-nexus.inc
@@ -0,0 +1,28 @@
+LICENSE = "Proprietary"
+LIC_FILES_CHKSUM = "file://license.txt;md5=0d238870f50c84250a14191d17aaf1d5"
+
+SRC_URI = "https://dl.google.com/dl/android/aosp/qcom-${FW_QCOM_NAME}-${AOSP_BUILD}-${CHECKSUM_qcom}.tgz;name=qcom"
+
+PV = "${AOSP_BUILD}"
+
+require recipes-bsp/firmware/firmware-qcom.inc
+
+DEPENDS += "pil-squasher-native"
+
+# extract the license file
+do_extract() {
+ head -n 280 ${WORKDIR}/extract-qcom-${FW_QCOM_NAME}.sh | tail -n +16 > ${S}/license.txt
+ tail -n +315 ${WORKDIR}/extract-qcom-${FW_QCOM_NAME}.sh | tar xzfv - -C ${S}
+}
+addtask extract after do_unpack before do_patch
+
+do_compile() {
+ for fw in ${S}/vendor/qcom/${FW_QCOM_NAME}/proprietary/*.mdt ; do
+ pil-squasher ${B}/`basename $fw mdt`mbn $fw
+ done
+}
+
+do_install() {
+ install -d ${D}${FW_QCOM_PATH}
+ install -m 0644 license.txt ${D}${FW_QCOM_PATH}
+}
diff --git a/recipes-bsp/firmware-nexus/firmware-qcom-nexus4.bb b/recipes-bsp/firmware-nexus/firmware-qcom-nexus4.bb
new file mode 100644
index 0000000..58e7e3f
--- /dev/null
+++ b/recipes-bsp/firmware-nexus/firmware-qcom-nexus4.bb
@@ -0,0 +1,33 @@
+DESCRIPTION = "QCOM Firmware for LGE Google Nexus 4"
+
+LICENSE = "Proprietary"
+LIC_FILES_CHKSUM = "file://license.txt;md5=0d238870f50c84250a14191d17aaf1d5"
+
+FW_QCOM_NAME = "mako"
+FW_QCOM_SUBDIR = "apq8064/LGE/${FW_QCOM_NAME}"
+AOSP_BUILD = "lmy48t"
+CHECKSUM_qcom = "8c489b7e"
+
+SRC_URI[qcom.sha256sum] = "d87a4e4958c5750818fd525c32c7b6a659cd8da7e0dd46d92c16ad8c5aa1bf68"
+
+require recipes-bsp/firmware-nexus/firmware-qcom-nexus.inc
+
+SRC_URI += "git://android.googlesource.com/device/lge/${FW_QCOM_NAME};protocol=https;branch=master;name=aosp"
+SRCREV_aosp = "33f0114334f9304dd69a8dfac24bc7f3d195d3be"
+PV:append = "+git${SRCPV}"
+
+RDEPENDS:${PN} += "linux-firmware-qcom-adreno-a3xx"
+
+do_install:append() {
+ install -d ${D}${FW_QCOM_PATH}
+
+ install -m 0644 dsps.mbn ${D}${FW_QCOM_PATH}
+ install -m 0644 q6.mbn ${D}${FW_QCOM_PATH}
+ install -m 0644 vidc.mbn ${D}${FW_QCOM_PATH}
+ install -m 0644 wcnss.mbn ${D}${FW_QCOM_PATH}
+
+ install -m 0644 vendor/qcom/${FW_QCOM_NAME}/proprietary/vidc_1080p.fw ${D}${FW_QCOM_PATH}
+
+ install -m 0644 ${WORKDIR}/git/WCNSS_cfg.dat ${D}${FW_QCOM_PATH}
+ install -m 0644 ${WORKDIR}/git/WCNSS_qcom_wlan_nv.bin ${D}${FW_QCOM_PATH}
+}
diff --git a/recipes-bsp/firmware-nexus/firmware-qcom-nexus5.bb b/recipes-bsp/firmware-nexus/firmware-qcom-nexus5.bb
new file mode 100644
index 0000000..f11fc9a
--- /dev/null
+++ b/recipes-bsp/firmware-nexus/firmware-qcom-nexus5.bb
@@ -0,0 +1,23 @@
+DESCRIPTION = "QCOM Firmware for LGE Google Nexus 5"
+
+FW_QCOM_NAME = "hammerhead"
+FW_QCOM_SUBDIR = "msm8974/LGE/${FW_QCOM_NAME}"
+AOSP_BUILD = "m4b30z"
+CHECKSUM_qcom = "d6c0fe26"
+CHECKSUM_factory = "625c027b"
+
+SRC_URI[qcom.sha256sum] = "f8c29461e279b311958f9476ef78b9ab654aeb9903f5c2912f11d5d4bcfd021d"
+SRC_URI[factory.sha256sum] = "625c027b21afe6de7c3d0de66e3a42000269dd00c2ef9a5347007734537f3ea2"
+
+RDEPENDS:${PN} += "linux-firmware-qcom-adreno-a3xx"
+
+require recipes-bsp/firmware-nexus/firmware-qcom-nexus.inc
+RADIO_VFAT = "1"
+require recipes-bsp/firmware-nexus/firmware-qcom-radio.inc
+
+do_install:append() {
+ install -d ${D}${FW_QCOM_PATH}
+
+ install -m 0644 adsp.mbn ${D}${FW_QCOM_PATH}
+ install -m 0644 venus.mbn ${D}${FW_QCOM_PATH}
+}
diff --git a/recipes-bsp/firmware-nexus/firmware-qcom-nexus5x.bb b/recipes-bsp/firmware-nexus/firmware-qcom-nexus5x.bb
new file mode 100644
index 0000000..317ea5a
--- /dev/null
+++ b/recipes-bsp/firmware-nexus/firmware-qcom-nexus5x.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "QCOM Firmware for LGE Google Nexus 5X"
+
+LIC_FILES_CHKSUM = "file://license.txt;md5=76ab107d8eb5f8a7927011ac29447b4a"
+
+FW_QCOM_NAME = "bullhead"
+FW_QCOM_SUBDIR = "msm8992/LGE/${FW_QCOM_NAME}"
+VENDOR = "lge"
+AOSP_BUILD = "opm7.181205.001"
+CHECKSUM_vendor = "bb4176a6"
+CHECKSUM_factory = "5f189d84"
+
+SRC_URI[vendor.sha256sum] = "eaba58f7219eb477697869454138d151b38a1589db1ab40cec1b4525774fe869"
+SRC_URI[factory.sha256sum] = "5f189d84781a26b49aca0de84a941a32ae0150da0aab89f1d7709d56c31b3c0a"
+
+require firmware-qcom-pixel.inc
+RADIO_VFAT = "1"
+require firmware-qcom-radio.inc
diff --git a/recipes-bsp/firmware-nexus/firmware-qcom-nexus6.bb b/recipes-bsp/firmware-nexus/firmware-qcom-nexus6.bb
new file mode 100644
index 0000000..9d6df42
--- /dev/null
+++ b/recipes-bsp/firmware-nexus/firmware-qcom-nexus6.bb
@@ -0,0 +1,19 @@
+DESCRIPTION = "QCOM Firmware for Motorola Google Nexus 6"
+
+FW_QCOM_NAME = "shamu"
+FW_QCOM_SUBDIR = "apq8084/Motorola/${FW_QCOM_NAME}"
+AOSP_BUILD = "ngi77b"
+CHECKSUM_qcom = "b5a5aacc"
+
+SRC_URI[qcom.sha256sum] = "811ccc3c8bd4b832a26fc36aac5a46af7000d849c7217032e1d0819bfb2000dc"
+
+RDEPENDS:${PN} += "linux-firmware-qcom-adreno-a4xx"
+
+require recipes-bsp/firmware-nexus/firmware-qcom-nexus.inc
+
+do_install:append() {
+ install -d ${D}${FW_QCOM_PATH}
+
+ install -m 0644 adsp.mbn ${D}${FW_QCOM_PATH}
+ install -m 0644 venus.mbn ${D}${FW_QCOM_PATH}
+}
diff --git a/recipes-bsp/firmware-nexus/firmware-qcom-nexus6p.bb b/recipes-bsp/firmware-nexus/firmware-qcom-nexus6p.bb
new file mode 100644
index 0000000..aa69cb5
--- /dev/null
+++ b/recipes-bsp/firmware-nexus/firmware-qcom-nexus6p.bb
@@ -0,0 +1,16 @@
+DESCRIPTION = "QCOM Firmware for LGE Google Nexus 6P"
+
+LIC_FILES_CHKSUM = "file://license.txt;md5=ab57c77a2230b7254cd6be1f1c0d6806"
+
+FW_QCOM_NAME = "angler"
+FW_QCOM_SUBDIR = "msm8994/Huawei/${FW_QCOM_NAME}"
+VENDOR = "huawei"
+AOSP_BUILD = "opm7.181205.001"
+CHECKSUM_vendor = "52ed73ce"
+CHECKSUM_factory = "b75ce068"
+
+SRC_URI[vendor.sha256sum] = "2eb9a77de059739d33c7fad07e34034f03a93d70eea39460bb0d9278e5763053"
+SRC_URI[factory.sha256sum] = "b75ce068f23a0e793805f80fccbc081eca52861ef5eb080c47f502de4c3f9713"
+
+require firmware-qcom-pixel.inc
+require firmware-qcom-radio.inc
diff --git a/recipes-bsp/firmware-nexus/firmware-qcom-nexus7-2013.bb b/recipes-bsp/firmware-nexus/firmware-qcom-nexus7-2013.bb
new file mode 100644
index 0000000..f9ef2e2
--- /dev/null
+++ b/recipes-bsp/firmware-nexus/firmware-qcom-nexus7-2013.bb
@@ -0,0 +1,33 @@
+DESCRIPTION = "QCOM Firmware for Asus Google Nexus 7 (2013)"
+
+FW_QCOM_NAME = "flo"
+FW_QCOM_SUBDIR = "apq8064/Asus/${FW_QCOM_NAME}"
+AOSP_BUILD = "mob30x"
+CHECKSUM_qcom = "43963492"
+
+SRC_URI[qcom.sha256sum] = "1ccc740a461be8ea84369b1c13fc89cb3f26f8bc1400fedec8b3dd1f630a7994"
+
+RDEPENDS:${PN} += "linux-firmware-qcom-adreno-a3xx"
+
+require recipes-bsp/firmware-nexus/firmware-qcom-nexus.inc
+
+SRC_URI += "git://android.googlesource.com/device/asus/${FW_QCOM_NAME};protocol=https;branch=master;name=aosp"
+SRCREV_aosp = "9d9fee956a9c4c7be4f69f7a472d3fc0e759c2dd"
+PV:append = "+git${SRCPV}"
+
+do_install:append() {
+ install -d ${D}${FW_QCOM_PATH}
+
+ install -m 0644 dsps.mbn ${D}${FW_QCOM_PATH}
+ install -m 0644 gss.mbn ${D}${FW_QCOM_PATH}
+ install -m 0644 q6.mbn ${D}${FW_QCOM_PATH}
+ install -m 0644 vidc.mbn ${D}${FW_QCOM_PATH}
+ install -m 0644 wcnss.mbn ${D}${FW_QCOM_PATH}
+
+ install -m 0644 vendor/qcom/${FW_QCOM_NAME}/proprietary/vidcfw.elf ${D}${FW_QCOM_PATH}
+ install -m 0644 vendor/qcom/${FW_QCOM_NAME}/proprietary/vidc_1080p.fw ${D}${FW_QCOM_PATH}
+
+ install -m 0644 ${WORKDIR}/git/WCNSS_cfg.dat ${D}${FW_QCOM_PATH}
+ install -m 0644 ${WORKDIR}/git/WCNSS_qcom_wlan_nv_deb.bin ${D}${FW_QCOM_PATH}
+ install -m 0644 ${WORKDIR}/git/WCNSS_qcom_wlan_nv_flo.bin ${D}${FW_QCOM_PATH}/WCNSS_qcom_wlan_nv.bin
+}
diff --git a/recipes-bsp/firmware-nexus/firmware-qcom-pixel.bb b/recipes-bsp/firmware-nexus/firmware-qcom-pixel.bb
new file mode 100644
index 0000000..0d5886c
--- /dev/null
+++ b/recipes-bsp/firmware-nexus/firmware-qcom-pixel.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "QCOM Firmware for Google Pixel / Pixel XL"
+
+FW_QCOM_NAME = "sailfish"
+FW_QCOM_SUBDIR = "msm8996/Google/${FW_QCOM_NAME}"
+EXTRA_DEVICE_SUBDIR = "msm8996/Google/marlin"
+AOSP_BUILD = "qp1a.191005.007.a3"
+CHECKSUM_vendor = "a1615a0f"
+CHECKSUM_factory = "d4552659"
+
+SRC_URI[vendor.sha256sum] = "1cfffa986c4640a8bb3466f69a6f9bf511b4b6a8cb06fb0e1474a331e53876d6"
+SRC_URI[factory.sha256sum] = "d455265945bb936a653730031af7d7a4aba70dc0c775024666a53491c9833b61"
+
+RDEPENDS:${PN} += "linux-firmware-qcom-adreno-a530"
+
+require firmware-qcom-pixel.inc
+RADIO_ROOTDIR = "1"
+require firmware-qcom-radio.inc
diff --git a/recipes-bsp/firmware-nexus/firmware-qcom-pixel.inc b/recipes-bsp/firmware-nexus/firmware-qcom-pixel.inc
new file mode 100644
index 0000000..c354631
--- /dev/null
+++ b/recipes-bsp/firmware-nexus/firmware-qcom-pixel.inc
@@ -0,0 +1,79 @@
+LICENSE = "Proprietary"
+LIC_FILES_CHKSUM ?= "file://license.txt;md5=63a79fa5adc049f2e411b1f700cf0f19"
+
+VENDOR ?= "google_devices"
+EXTRA_DEVICE_SUBDIR ??= ""
+
+SRC_URI = "https://dl.google.com/dl/android/aosp/${VENDOR}-${FW_QCOM_NAME}-${AOSP_BUILD}-${CHECKSUM_vendor}.tgz;name=vendor"
+
+PV = "${AOSP_BUILD}"
+
+require recipes-bsp/firmware/firmware-qcom.inc
+
+DEPENDS += "pil-squasher-native"
+
+VENDOR_IMG_SPARSE ?= "1"
+
+# extract the license file
+do_extract() {
+ head -n 280 ${WORKDIR}/extract-${VENDOR}-${FW_QCOM_NAME}.sh | tail -n +16 > ${S}/license.txt
+ tail -n +315 ${WORKDIR}/extract-${VENDOR}-${FW_QCOM_NAME}.sh | tar xzfv - -C ${S}
+ if [ "${VENDOR_IMG_SPARSE}" = "1" ] ; then
+ simg2img ${S}/vendor/${VENDOR}/${FW_QCOM_NAME}/proprietary/vendor.img ${B}/vendor.img
+ else
+ rm -f ${B}/vendor.img
+ ln -sr ${S}/vendor/${VENDOR}/${FW_QCOM_NAME}/proprietary/vendor.img ${B}/vendor.img
+ fi
+
+ # FIXME: also extract fastrpc shell
+ mkdir -p ${B}/firmware
+ debugfs ${B}/vendor.img -R 'ls -p /firmware' | \
+ grep '^/[0-9]*/100' | cut -d/ -f6 > ${B}/firmware/fw.lst
+ debugfs ${B}/vendor.img -R 'ls -p /firmware' | \
+ grep '^/[0-9]*/100' | cut -d/ -f6 | \
+ while read name ; do echo "dump /firmware/$name ${B}/firmware/$name" ; done | \
+ debugfs ${B}/vendor.img
+
+ radio="${S}/vendor/${VENDOR}/${FW_QCOM_NAME}/proprietary/radio.img"
+ if [ -r "${radio}" ] ; then
+ rm -rf "${radio}_images"
+ qc_image_unpacker -i "${radio}" -f || exit 1
+
+ if ! [ -r "${radio}_images"/modem ] ; then
+ echo "modem image not found"
+ exit 1
+ fi
+
+ mkdir -p ${B}/firmware
+ mcopy -i "${radio}_images"/modem ::/image/* ${B}/firmware/
+ mdir -i "${radio}_images"/modem ::/image
+ fi
+}
+addtask extract after do_unpack before do_patch
+do_extract[depends] += "rust-android-sparse-native:do_populate_sysroot e2fsprogs-native:do_populate_sysroot qc-image-unpacker-native:do_populate_sysroot mtools-native:do_populate_sysroot"
+
+do_compile() {
+ for fw in ${B}/firmware/*.mdt ; do
+ pil-squasher ${B}/`basename $fw mdt`mbn $fw || exit 1
+ done
+}
+
+do_install() {
+ install -d ${D}${FW_QCOM_PATH}
+ for fw in adsp cdsp ipa_fws modem slpi venus ; do
+ ls ${B}/$fw*.mbn && install -m 0644 ${B}/$fw*.mbn ${D}${FW_QCOM_PATH}
+ done
+
+ ls ${B}/firmware/*.jsn && install -m 0644 ${B}/firmware/*.jsn ${D}${FW_QCOM_PATH}
+
+ ls ${B}/firmware/a[0-9]*_gmu.bin && install -m 0644 ${B}/firmware/a[0-9]*_gmu.bin ${D}${FW_QCOM_PATH}
+ ls ${B}/a[0-9]*.mbn && install -m 0644 ${B}/a[0-9]*.mbn ${D}${FW_QCOM_PATH}
+
+ install -m 0644 license.txt ${D}${FW_QCOM_PATH}
+
+ # Remove duplicates
+ rm -f ${D}${FW_QCOM_PATH}/a630_gmu.bin
+ rm -f ${D}${FW_QCOM_PATH}/a650_gmu.bin
+
+ [ -z "${EXTRA_DEVICE_SUBDIR}" ] || ln -sr ${D}${FW_QCOM_PATH} ${D}${FW_QCOM_BASE_PATH}/${EXTRA_DEVICE_SUBDIR}
+}
diff --git a/recipes-bsp/firmware-nexus/firmware-qcom-pixel2.bb b/recipes-bsp/firmware-nexus/firmware-qcom-pixel2.bb
new file mode 100644
index 0000000..8a43922
--- /dev/null
+++ b/recipes-bsp/firmware-nexus/firmware-qcom-pixel2.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "QCOM Firmware for Google Pixel 2 / 2XL"
+
+FW_QCOM_NAME = "walleye"
+FW_QCOM_SUBDIR = "msm8998/Google/${FW_QCOM_NAME}"
+EXTRA_DEVICE_SUBDIR = "msm8998/Google/taimen"
+AOSP_BUILD = "rp1a.201005.004.a1"
+CHECKSUM_vendor = "2fdea26a"
+
+SRC_URI[vendor.sha256sum] = "4ec6cf5dfd6616ae39cf61f95657662e4b17dd193b6ab30547ef016359cfc118"
+
+RDEPENDS:${PN} += "linux-firmware-qcom-adreno-a530"
+
+require firmware-qcom-pixel.inc
+
+do_install:append() {
+ install -m 0644 ${B}/firmware/a540_gpmu.fw2 ${D}${FW_QCOM_PATH}
+}
diff --git a/recipes-bsp/firmware-nexus/firmware-qcom-pixel3.bb b/recipes-bsp/firmware-nexus/firmware-qcom-pixel3.bb
new file mode 100644
index 0000000..cf64e35
--- /dev/null
+++ b/recipes-bsp/firmware-nexus/firmware-qcom-pixel3.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "QCOM Firmware for Google Pixel 3 / 3 XL"
+
+FW_QCOM_NAME = "blueline"
+FW_QCOM_SUBDIR = "sdm845/Google/${FW_QCOM_NAME}"
+EXTRA_DEVICE_SUBDIR = "sdm845/Google/crosshatch"
+AOSP_BUILD = "sp1a.210812.016.c1"
+CHECKSUM_vendor = "0b9f3bc0"
+
+SRC_URI[vendor.sha256sum] = "5e48f4769d3cdba3c958f956d13df56b60e18e8fe03893d38f4125b421ab7ff9"
+
+RDEPENDS:${PN} += "linux-firmware-qcom-adreno-a630"
+
+require firmware-qcom-pixel.inc
diff --git a/recipes-bsp/firmware-nexus/firmware-qcom-pixel3a.bb b/recipes-bsp/firmware-nexus/firmware-qcom-pixel3a.bb
new file mode 100644
index 0000000..4431055
--- /dev/null
+++ b/recipes-bsp/firmware-nexus/firmware-qcom-pixel3a.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "QCOM Firmware for Google Pixel 3a / 3a XL"
+
+FW_QCOM_NAME = "sargo"
+FW_QCOM_SUBDIR = "sdm670/Google/${FW_QCOM_NAME}"
+EXTRA_DEVICE_SUBDIR = "sdm670/Google/bonito"
+AOSP_BUILD = "sp2a.220505.008"
+CHECKSUM_vendor = "772e1993"
+
+SRC_URI[vendor.sha256sum] = "702c4563207f77eefa7822ffbfaf0cc8a33059140f417b2deda1844ae4bb097c"
+
+RDEPENDS:${PN} += "linux-firmware-qcom-adreno-a630"
+
+require firmware-qcom-pixel.inc
diff --git a/recipes-bsp/firmware-nexus/firmware-qcom-pixel4.bb b/recipes-bsp/firmware-nexus/firmware-qcom-pixel4.bb
new file mode 100644
index 0000000..af88c70
--- /dev/null
+++ b/recipes-bsp/firmware-nexus/firmware-qcom-pixel4.bb
@@ -0,0 +1,14 @@
+DESCRIPTION = "QCOM Firmware for Google Pixel 4 / 4 XL"
+
+FW_QCOM_NAME = "flame"
+FW_QCOM_SUBDIR = "sm8150/Google/${FW_QCOM_NAME}"
+EXTRA_DEVICE_SUBDIR = "sm8150/Google/coral"
+AOSP_BUILD = "tp1a.221005.002"
+CHECKSUM_vendor = "bed97aaa"
+
+SRC_URI[vendor.sha256sum] = "6644a17f9a5ac25b7f63fa3130b8ab0b8dbe768915fabadce3da9cab5dd39e35"
+
+RDEPENDS:${PN} += "linux-firmware-qcom-adreno-a630"
+
+VENDOR_IMG_SPARSE = "0"
+require firmware-qcom-pixel.inc
diff --git a/recipes-bsp/firmware-nexus/firmware-qcom-pixel4a-5g.bb b/recipes-bsp/firmware-nexus/firmware-qcom-pixel4a-5g.bb
new file mode 100644
index 0000000..989038b
--- /dev/null
+++ b/recipes-bsp/firmware-nexus/firmware-qcom-pixel4a-5g.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "QCOM Firmware for Google Pixel 4a (5G)"
+
+FW_QCOM_NAME = "bramble"
+FW_QCOM_SUBDIR = "sm7250/Google/${FW_QCOM_NAME}"
+AOSP_BUILD = "tp1a.221105.002"
+CHECKSUM_vendor = "793c7b07"
+
+SRC_URI[vendor.sha256sum] = "b643f4f01a87750094049e0854abc6f2b506560bdc556fcc449eb9c2ff19038e"
+
+RDEPENDS:${PN} += "linux-firmware-qcom-adreno-a650"
+
+VENDOR_IMG_SPARSE = "0"
+require firmware-qcom-pixel.inc
diff --git a/recipes-bsp/firmware-nexus/firmware-qcom-pixel4a.bb b/recipes-bsp/firmware-nexus/firmware-qcom-pixel4a.bb
new file mode 100644
index 0000000..07490c3
--- /dev/null
+++ b/recipes-bsp/firmware-nexus/firmware-qcom-pixel4a.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "QCOM Firmware for Google Pixel 4a"
+
+FW_QCOM_NAME = "sunfish"
+FW_QCOM_SUBDIR = "sdm730/Google/${FW_QCOM_NAME}"
+AOSP_BUILD = "tp1a.221105.002"
+CHECKSUM_vendor = "6d6cfc6a"
+
+SRC_URI[vendor.sha256sum] = "5013b1aad7ae7a0724f08e26bf73954464d8a314b8c10f21f4e62e49237907c5"
+
+RDEPENDS:${PN} += "linux-firmware-qcom-adreno-a630"
+
+VENDOR_IMG_SPARSE = "0"
+require firmware-qcom-pixel.inc
diff --git a/recipes-bsp/firmware-nexus/firmware-qcom-pixel5.bb b/recipes-bsp/firmware-nexus/firmware-qcom-pixel5.bb
new file mode 100644
index 0000000..bf5e855
--- /dev/null
+++ b/recipes-bsp/firmware-nexus/firmware-qcom-pixel5.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "QCOM Firmware for Google Pixel 5"
+
+FW_QCOM_NAME = "redfin"
+FW_QCOM_SUBDIR = "sm7250/Google/${FW_QCOM_NAME}"
+AOSP_BUILD = "tp1a.221105.002"
+CHECKSUM_vendor = "2b78e8a6"
+
+SRC_URI[vendor.sha256sum] = "e2ab6c9024c282ace3fca7d66522075c4fc5188bcb00b3fb9dd8230056aef93f"
+
+RDEPENDS:${PN} += "linux-firmware-qcom-adreno-a650"
+
+VENDOR_IMG_SPARSE = "0"
+require firmware-qcom-pixel.inc
diff --git a/recipes-bsp/firmware-nexus/firmware-qcom-pixel5a-5g.bb b/recipes-bsp/firmware-nexus/firmware-qcom-pixel5a-5g.bb
new file mode 100644
index 0000000..3ac989c
--- /dev/null
+++ b/recipes-bsp/firmware-nexus/firmware-qcom-pixel5a-5g.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "QCOM Firmware for Google Pixel 5a 5G"
+
+FW_QCOM_NAME = "barbet"
+FW_QCOM_SUBDIR = "sm7250/Google/${FW_QCOM_NAME}"
+AOSP_BUILD = "tp1a.221105.002"
+CHECKSUM_vendor = "425252ac"
+
+SRC_URI[vendor.sha256sum] = "72ccf1e403824214bfbfeccac55c865bb179b15ff50f9066f87bde4c925fbc27"
+
+RDEPENDS:${PN} += "linux-firmware-qcom-adreno-a650"
+
+VENDOR_IMG_SPARSE = "0"
+require firmware-qcom-pixel.inc
diff --git a/recipes-bsp/firmware-nexus/firmware-qcom-radio.inc b/recipes-bsp/firmware-nexus/firmware-qcom-radio.inc
new file mode 100644
index 0000000..4310684
--- /dev/null
+++ b/recipes-bsp/firmware-nexus/firmware-qcom-radio.inc
@@ -0,0 +1,34 @@
+FACTORY_NAME ?= "${FW_QCOM_NAME}"
+SRC_URI += "https://dl.google.com/dl/android/aosp/${FACTORY_NAME}-${AOSP_BUILD}-factory-${CHECKSUM_factory}.zip;name=factory"
+
+DEPENDS += "pil-squasher-native qc-image-unpacker-native"
+
+do_extract[depends] += "mtools-native:do_populate_sysroot"
+
+do_extract:append() {
+ mkdir -p ${B}/radio
+ radio="${WORKDIR}/${FACTORY_NAME}-${AOSP_BUILD}/radio-*img"
+ if [ "${RADIO_VFAT}" = "1" ] ; then
+ mcopy -i $radio ::/image/* ${B}/radio
+ else
+ rm -rf ${radio}_images
+ qc_image_unpacker -i $radio -f || exit 1
+ if [ "${RADIO_ROOTDIR}" = "1" ] ; then
+ mcopy -i ${radio}_images/modem ::/* ${B}/radio
+ else
+ mcopy -i ${radio}_images/modem ::/image/* ${B}/radio
+ fi
+ fi
+}
+
+do_compile:append() {
+ pil-squasher ${B}/radio/modem.mbn ${B}/radio/modem.mdt
+ if [ -r ${B}/radio/mba.mdt ] ; then
+ pil-squasher ${B}/radio/mba.mbn ${B}/radio/mba.mdt
+ fi
+}
+
+do_install:append() {
+ install -d ${D}${FW_QCOM_PATH}
+ install -m 0644 ${B}/radio/*.mbn ${D}${FW_QCOM_PATH}
+}
diff --git a/recipes-bsp/firmware-woa/files/adspr.jsn b/recipes-bsp/firmware-woa/files/adspr.jsn
new file mode 100644
index 0000000..29445b7
--- /dev/null
+++ b/recipes-bsp/firmware-woa/files/adspr.jsn
@@ -0,0 +1,22 @@
+{
+ "sr_version": {
+ "major": 1,
+ "minor": 1,
+ "patch": 1
+ },
+ "sr_domain": {
+ "soc": "msm",
+ "domain": "adsp",
+ "subdomain": "root_pd",
+ "qmi_instance_id": 74
+ },
+ "sr_service": [
+ {
+ "provider": "tms",
+ "service": "servreg",
+ "service_data_valid": 0,
+ "service_data": 0,
+ "dcomment": "data can be used to configure ACK timeout.Make data_valid 1 as well.Unit is second"
+ }
+ ]
+}
diff --git a/recipes-bsp/firmware-woa/files/adspua.jsn b/recipes-bsp/firmware-woa/files/adspua.jsn
new file mode 100644
index 0000000..ab4254a
--- /dev/null
+++ b/recipes-bsp/firmware-woa/files/adspua.jsn
@@ -0,0 +1,29 @@
+{
+ "sr_version": {
+ "major": 1,
+ "minor": 1,
+ "patch": 1
+ },
+ "sr_domain": {
+ "soc": "msm",
+ "domain": "adsp",
+ "subdomain": "audio_pd",
+ "qmi_instance_id": 74
+ },
+ "sr_service": [
+ {
+ "provider": "tms",
+ "service": "servreg",
+ "service_data_valid": 0,
+ "service_data": 0,
+ "dcomment": "data can be used to configure ACK timeout.Make data_valid 1 as well.Unit is second"
+ },
+ {
+ "provider": "avs",
+ "service": "audio",
+ "service_data_valid": 0,
+ "service_data": 0,
+ "dcomment": "No comment"
+ }
+ ]
+} \ No newline at end of file
diff --git a/recipes-bsp/firmware-woa/files/battmgr.jsn b/recipes-bsp/firmware-woa/files/battmgr.jsn
new file mode 100644
index 0000000..504cd31
--- /dev/null
+++ b/recipes-bsp/firmware-woa/files/battmgr.jsn
@@ -0,0 +1,22 @@
+{
+ "sr_version": {
+ "major": 1,
+ "minor": 1,
+ "patch": 1
+ },
+ "sr_domain": {
+ "soc": "msm",
+ "domain": "adsp",
+ "subdomain": "charger_pd",
+ "qmi_instance_id": 74
+ },
+ "sr_service": [
+ {
+ "provider": "tms",
+ "service": "servreg",
+ "service_data_valid": 0,
+ "service_data": 0,
+ "dcomment": "data can be used to configure ACK timeout.Make data_valid 1 as well.Unit is second"
+ }
+ ]
+} \ No newline at end of file
diff --git a/recipes-bsp/firmware-woa/files/cdspr.jsn b/recipes-bsp/firmware-woa/files/cdspr.jsn
new file mode 100644
index 0000000..4491d95
--- /dev/null
+++ b/recipes-bsp/firmware-woa/files/cdspr.jsn
@@ -0,0 +1,22 @@
+{
+ "sr_version": {
+ "major": 1,
+ "minor": 1,
+ "patch": 1
+ },
+ "sr_domain": {
+ "soc": "msm",
+ "domain": "cdsp",
+ "subdomain": "root_pd",
+ "qmi_instance_id": 76
+ },
+ "sr_service": [
+ {
+ "provider": "tms",
+ "service": "servreg",
+ "service_data_valid": 0,
+ "service_data": 0,
+ "dcomment": "data can be used to configure ACK timeout.Make data_valid 1 as well.Unit is second"
+ }
+ ]
+} \ No newline at end of file
diff --git a/recipes-bsp/firmware-woa/files/slpir.jsn b/recipes-bsp/firmware-woa/files/slpir.jsn
new file mode 100644
index 0000000..1264d4c
--- /dev/null
+++ b/recipes-bsp/firmware-woa/files/slpir.jsn
@@ -0,0 +1,21 @@
+{
+ "sr_version": {
+ "major": 1,
+ "minor": 1,
+ "patch": 1
+ },
+ "sr_domain": {
+ "soc": "msm",
+ "domain": "slpi",
+ "subdomain": "root_pd",
+ "qmi_instance_id": 90
+ },
+ "sr_service": [
+ {
+ "provider": "tms",
+ "service": "servreg",
+ "service_data_valid": 0,
+ "service_data": 0
+ }
+ ]
+} \ No newline at end of file
diff --git a/recipes-bsp/firmware-woa/files/slpius.jsn b/recipes-bsp/firmware-woa/files/slpius.jsn
new file mode 100644
index 0000000..9da70bd
--- /dev/null
+++ b/recipes-bsp/firmware-woa/files/slpius.jsn
@@ -0,0 +1,21 @@
+{
+ "sr_version": {
+ "major": 1,
+ "minor": 1,
+ "patch": 1
+ },
+ "sr_domain": {
+ "soc": "msm",
+ "domain": "slpi",
+ "subdomain": "sensor_pd",
+ "qmi_instance_id": 90
+ },
+ "sr_service": [
+ {
+ "provider": "tms",
+ "service": "servreg",
+ "service_data_valid": 0,
+ "service_data": 0
+ }
+ ]
+} \ No newline at end of file
diff --git a/recipes-bsp/firmware-woa/firmware-qcom-sc8180x_200.0.105.0.bb b/recipes-bsp/firmware-woa/firmware-qcom-sc8180x_200.0.105.0.bb
new file mode 100644
index 0000000..3709bb4
--- /dev/null
+++ b/recipes-bsp/firmware-woa/firmware-qcom-sc8180x_200.0.105.0.bb
@@ -0,0 +1,40 @@
+DESCRIPTION = "Qualcomm Firmware for Compute SC8180X devices"
+
+LICENSE = "CLOSED"
+
+FW_QCOM_NAME = "sc8180x"
+WOA_SUBDIR = "8180_CLS"
+
+SRC_URI = "\
+ ${WOA_FW_URL}/qcdx8180.cab;name=dx \
+ ${WOA_FW_URL}/qcipa8180.cab;name=ipa \
+ ${WOA_FW_URL}/qcsubsys_ext_adsp8180.cab;name=adsp \
+ ${WOA_FW_URL}/qcsubsys_ext_cdsp8180.cab;name=cdsp \
+ ${WOA_FW_URL}/qcsubsys_ext_mpss8180.cab;name=mpss \
+ ${WOA_FW_URL}/qcsubsys_ext_scss8180.cab;name=slpi \
+ file://adspr.jsn \
+ file://adspua.jsn \
+ file://battmgr.jsn \
+ file://cdspr.jsn \
+ file://slpir.jsn \
+ file://slpius.jsn \
+"
+
+SRC_URI[dx.sha256sum] = "c5295509720898758e9a61f1f5f64a013cb6c7706e82d1598232cdca5754d115"
+SRC_URI[ipa.sha256sum] = "e083779b7ee99edfd0fc4a54fb562c355476cf359f29cc729052158f97c3769d"
+SRC_URI[adsp.sha256sum] = "0679e45ae07b4b19db97ac06b12fce64cba4dfe65102d1f615564ca90387e8dd"
+SRC_URI[cdsp.sha256sum] = "eb6b1ff4d02736cd2b2ecaaf4136c164d712fcec7d8ad232434be1c67b703ffc"
+SRC_URI[mpss.sha256sum] = "7c7ed01e9c8cff1c7d1546a2b6f14c23d9224afd0de9a6f52c33ad04bfe053a8"
+SRC_URI[slpi.sha256sum] = "4dc4be421f46ffa3ee8b9141faac4214e7d19e60dc7c63734ef2bdba08cca73d"
+
+SPLIT_FIRMWARE_PACKAGES = "\
+ linux-firmware-qcom-${FW_QCOM_NAME}-adreno \
+ linux-firmware-qcom-${FW_QCOM_NAME}-audio \
+ linux-firmware-qcom-${FW_QCOM_NAME}-compute \
+ linux-firmware-qcom-${FW_QCOM_NAME}-ipa \
+ linux-firmware-qcom-${FW_QCOM_NAME}-modem \
+ linux-firmware-qcom-${FW_QCOM_NAME}-sensors \
+ linux-firmware-qcom-${FW_QCOM_NAME}-venus \
+"
+
+require firmware-woa.inc
diff --git a/recipes-bsp/firmware-woa/firmware-woa.inc b/recipes-bsp/firmware-woa/firmware-woa.inc
new file mode 100644
index 0000000..0624ecb
--- /dev/null
+++ b/recipes-bsp/firmware-woa/firmware-woa.inc
@@ -0,0 +1,19 @@
+DEPENDS += "cabextract-native"
+require recipes-bsp/firmware/firmware-qcom.inc
+
+WOA_FW_URL = "https://github.com/WOA-Project/Qualcomm-Reference-Drivers/raw/master/${WOA_SUBDIR}/${PV}"
+
+do_compile:append() {
+ for file in ${WORKDIR}/*cab ; do
+ cabextract $file || exit 1
+ done
+}
+
+do_install:append() {
+ install -d ${D}${FW_QCOM_PATH}
+
+ install -m 0644 ${B}/*.mbn ${D}${FW_QCOM_PATH}
+ ls ${B}/*.elf && install -m 0644 ${B}/*.elf ${D}${FW_QCOM_PATH}
+
+ install -m 0644 ${WORKDIR}/*.jsn ${D}${FW_QCOM_PATH}
+}
diff --git a/recipes-bsp/firmware/firmware-ath6kl_git.bb b/recipes-bsp/firmware/firmware-ath6kl_git.bb
new file mode 100644
index 0000000..81d237a
--- /dev/null
+++ b/recipes-bsp/firmware/firmware-ath6kl_git.bb
@@ -0,0 +1,49 @@
+# Extra firmware files, which are covered by the separate license.
+# They are not a part of linux-firmware and will never be:
+# https://lists.infradead.org/pipermail/ath6kl/2017-July/000296.html
+
+SUMMARY = "Additional firmware files for Qualcomm/Atheros Ath6k SoC"
+
+LICENSE = "Firmware-qualcommAthos_ath6kl"
+LIC_FILES_CHKSUM = "file://LICENSE.qca_firmware;md5=2a397c0e988f4c52d3d526133b617c8d"
+NO_GENERIC_LICENSE[Firmware-qualcommAthos_ath6kl] = "LICENSE.qca_firmware"
+
+SRC_URI = "git://github.com/qca/ath6kl-firmware;protocol=https;branch=master"
+SRCREV = "2e02576c1dab6fd35118eea1004f50aaaed3794f"
+
+PV = "3.5.0.349-1+git${SRCPV}"
+
+S = "${WORKDIR}/git"
+
+inherit allarch
+
+CLEANBROKEN = "1"
+
+do_compile() {
+ :
+}
+
+FWDIR = "${nonarch_base_libdir}/firmware"
+
+do_install() {
+ install -d ${D}${FWDIR}/ath6k/AR6004/hw1.3
+ install -d ${D}${FWDIR}/ath6k/AR6004/hw3.0
+
+ install -m 0644 ath6k/AR6004/hw1.3/* ${D}${FWDIR}/ath6k/AR6004/hw1.3
+ install -m 0644 ath6k/AR6004/hw3.0/* ${D}${FWDIR}/ath6k/AR6004/hw3.0
+
+ install -m 0644 LICENSE.qca_firmware ${D}${FWDIR}
+}
+
+FILES:${PN} += "${FWDIR}"
+
+# There is a conflict between linux-firmware version and and the updated one
+
+inherit update-alternatives
+ALTERNATIVE:${PN} = "ar6004-hw13-bdata"
+ALTERNATIVE_LINK_NAME[ar6004-hw13-bdata] = "${nonarch_base_libdir}/firmware/ath6k/AR6004/hw1.3/bdata.bin"
+ALTERNATIVE_PRIORITY = "100"
+
+# Firmware files are generally not ran on the CPU, so they can be
+# allarch despite being architecture specific
+INSANE_SKIP = "arch"
diff --git a/recipes-bsp/firmware/firmware-qcom-adreno.inc b/recipes-bsp/firmware/firmware-qcom-adreno.inc
new file mode 100644
index 0000000..2fad318
--- /dev/null
+++ b/recipes-bsp/firmware/firmware-qcom-adreno.inc
@@ -0,0 +1,40 @@
+# Handle Adreno firmware unpacking in a generic way
+# Include the file to be able to dissect the archive.
+# If ADRENO_URI is defined, the image will be dissected automatically
+# Handle fwpath=... as a path to Adreno firmware inside the archive
+
+ADRENO_URI ??= ""
+
+# Conditionally populate SRC_URI. We have to do it here rather than in python
+# script to let base.bbclass to pick up dependencies
+SRC_URI += "${@['', '${ADRENO_URI};subdir=adreno;name=adreno'][d.getVar('ADRENO_URI') != ''] }"
+
+# the file is unpacked to this dir, clean it up
+do_unpack[cleandirs] = "${WORKDIR}/adreno"
+
+DEPENDS += "pil-squasher-native"
+
+python () {
+ uri = d.getVar("ADRENO_URI")
+ if uri == "":
+ bb.warn("%s: not packaging ADRENO firmware. Please provide ADRENO_URI" % d.getVar("PN"))
+ else:
+ urldata = bb.fetch2.FetchData(d.getVar("ADRENO_URI"), d)
+ if "fwpath" in urldata.parm:
+ d.setVar("ADRENO_PATH", urldata.parm["fwpath"])
+ else:
+ d.setVar("ADRENO_PATH", "")
+}
+
+do_compile:append() {
+ if [ -n "${ADRENO_URI}" ] ; then
+ for fw in ${WORKDIR}/adreno/${ADRENO_PATH}/*_zap.mdt ; do
+ pil-squasher ${B}/`basename $fw mdt`mbn $fw || exit 1
+ done
+ for fw in ${FW_QCOM_LIST} ; do
+ if [ -r ${WORKDIR}/adreno/${ADRENO_PATH}/$fw ] ; then
+ cp ${WORKDIR}/adreno/${ADRENO_PATH}/$fw ${B}/
+ fi
+ done
+ fi
+}
diff --git a/recipes-bsp/firmware/firmware-qcom-dragonboard-apq8074.bb b/recipes-bsp/firmware/firmware-qcom-dragonboard-apq8074.bb
new file mode 100644
index 0000000..595c41e
--- /dev/null
+++ b/recipes-bsp/firmware/firmware-qcom-dragonboard-apq8074.bb
@@ -0,0 +1,21 @@
+# Specify location of the corresponding NON-HLOS.bin file by adding
+# NHLOS_URI:pn-firmware-qcom-dragonboard-apq8074 = "..." to local.conf. Use
+# "file://" if the file is provided locally.
+
+DESCRIPTION = "QCOM Firmware for Dragonboard APQ8074 board"
+
+LICENSE = "CLOSED"
+
+# dragonboard8074 firmware is unsigned, so install into generic location
+FW_QCOM_NAME = "apq8074"
+
+FW_QCOM_LIST = "adsp.mbn mba.mbn modem.mbn wcnss.mbn"
+
+require recipes-bsp/firmware/firmware-qcom.inc
+require recipes-bsp/firmware/firmware-qcom-nhlos.inc
+
+SPLIT_FIRMWARE_PACKAGES = " \
+ linux-firmware-qcom-${FW_QCOM_NAME}-audio \
+ linux-firmware-qcom-${FW_QCOM_NAME}-modem \
+ linux-firmware-qcom-${FW_QCOM_NAME}-wifi \
+"
diff --git a/recipes-bsp/firmware/firmware-qcom-dragonboard410c.inc b/recipes-bsp/firmware/firmware-qcom-dragonboard410c.inc
index 1e4b454..1acb8d0 100644
--- a/recipes-bsp/firmware/firmware-qcom-dragonboard410c.inc
+++ b/recipes-bsp/firmware/firmware-qcom-dragonboard410c.inc
@@ -3,32 +3,15 @@ DESCRIPTION = "QCOM Firmware for DragonBoard 410c"
LICENSE = "Proprietary"
LIC_FILES_CHKSUM = "file://LICENSE;md5=4d087ee0965cb059f1b2f9429e166f64"
-DEPENDS += "mtools-native pil-squasher-native"
+FW_QCOM_NAME = "apq8016"
require recipes-bsp/firmware/firmware-qcom.inc
S = "${WORKDIR}/linux-board-support-package-r${PV}"
do_install() {
- install -d ${D}${nonarch_base_libdir}/firmware/
-
- install -d ${D}/boot
- cp ./efs-seed/fs_image_linux.tar.gz.mbn.img ${D}/boot/modem_fsg
-
- cp -r ./proprietary-linux/wlan ${D}${nonarch_base_libdir}/firmware/
-
- install -d ${D}${nonarch_base_libdir}/firmware/qcom/msm8916
- MTOOLS_SKIP_CHECK=1 mcopy -i ./bootloaders-linux/NON-HLOS.bin \
- ::image/modem.* ::image/mba.mbn ::image/wcnss.* ${D}${nonarch_base_libdir}/firmware/qcom/msm8916
-
- pil-squasher ${D}${nonarch_base_libdir}/firmware/qcom/msm8916/modem.mbn \
- ${D}${nonarch_base_libdir}/firmware/qcom/msm8916/modem.mdt
-
- pil-squasher ${D}${nonarch_base_libdir}/firmware/qcom/msm8916/wcnss.mbn \
- ${D}${nonarch_base_libdir}/firmware/qcom/msm8916/wcnss.mdt
+ install -d ${D}${FW_QCOM_PATH}
install -d ${D}${sysconfdir}/
install -m 0644 LICENSE ${D}${sysconfdir}/QCOM-LINUX-BOARD-SUPPORT-LICENSE-${PN}
}
-
-FILES:${PN} += "/boot/modem_fsg"
diff --git a/recipes-bsp/firmware/firmware-qcom-dragonboard820c_01700.1.bb b/recipes-bsp/firmware/firmware-qcom-dragonboard820c_01700.1.bb
index f3ca958..816a8ae 100644
--- a/recipes-bsp/firmware/firmware-qcom-dragonboard820c_01700.1.bb
+++ b/recipes-bsp/firmware/firmware-qcom-dragonboard820c_01700.1.bb
@@ -7,37 +7,22 @@ SRC_URI = "https://releases.linaro.org/96boards/dragonboard820c/qualcomm/firmwar
SRC_URI[md5sum] = "587138c5e677342db9a88d5c8747ec6c"
SRC_URI[sha256sum] = "6ee9c461b2b5dd2d3bd705bb5ea3f44b319ecb909b2772f305ce12439e089cd9"
-require recipes-bsp/firmware/firmware-qcom.inc
+FW_QCOM_NAME = "apq8096"
-DEPENDS += "pil-squasher-native qca-swiss-army-knife-native"
-inherit python3native
+require recipes-bsp/firmware/firmware-qcom.inc
S = "${WORKDIR}/linux-board-support-package-r${PV}"
-do_compile() {
- # Build board-2.bin needed by WiFi
- ath10k-generate-pci-board-2_json.sh ./proprietary-linux/ board-2.json
- python3 "${STAGING_BINDIR_NATIVE}/ath10k-bdencoder" -c board-2.json -o board-2.bin
-}
-
do_install() {
install -d ${D}${nonarch_base_libdir}/firmware/
- install -d ${D}${nonarch_base_libdir}/firmware/qcom/msm8996/
+ install -d ${D}${FW_QCOM_PATH}/
- install -m 0444 ./proprietary-linux/adsp*.* ${D}${nonarch_base_libdir}/firmware/qcom/msm8996/
- pil-squasher ${D}${nonarch_base_libdir}/firmware/qcom/msm8996/adsp.mbn ./proprietary-linux/adsp.mdt
-
- install -m 0444 ./bootloaders-linux/adspso.bin ${D}${nonarch_base_libdir}/firmware/qcom/msm8996/
-
- install -d ${D}${nonarch_base_libdir}/firmware/ath10k/QCA6174/hw3.0/
- install -m 0444 ${S}/board-2.bin ${D}${nonarch_base_libdir}/firmware/ath10k/QCA6174/hw3.0/board-2.bin
+ install -m 0444 ./bootloaders-linux/adspso.bin ${D}${FW_QCOM_PATH}/
install -d ${D}${sysconfdir}/
install -m 0644 LICENSE ${D}${sysconfdir}/QCOM-LINUX-BOARD-SUPPORT-LICENSE-${PN}
}
-inherit update-alternatives
-
-ALTERNATIVE:${PN} = "qca6174-board2"
-ALTERNATIVE_LINK_NAME[qca6174-board2] = "/lib/firmware/ath10k/QCA6174/hw3.0/board-2.bin"
-ALTERNATIVE_PRIORITY = "100"
+SPLIT_FIRMWARE_PACKAGES = " \
+ ${PN}-dspso \
+"
diff --git a/recipes-bsp/firmware/firmware-qcom-dragonboard845c_20190529180356-v4.bb b/recipes-bsp/firmware/firmware-qcom-dragonboard845c_20190529180356-v4.bb
index e23f465..b2760e8 100644
--- a/recipes-bsp/firmware/firmware-qcom-dragonboard845c_20190529180356-v4.bb
+++ b/recipes-bsp/firmware/firmware-qcom-dragonboard845c_20190529180356-v4.bb
@@ -7,31 +7,24 @@ SRC_URI = "https://releases.linaro.org/96boards/dragonboard845c/qualcomm/firmwar
SRC_URI[md5sum] = "ad69855a1275547b16d94a1b5405ac62"
SRC_URI[sha256sum] = "4289d2f2a7124b104d0274879e702aae9b1e50c42eec3747f8584c6744ef65e3"
-require recipes-bsp/firmware/firmware-qcom.inc
+FW_QCOM_NAME = "sdm845"
-DEPENDS += "qca-swiss-army-knife-native"
-inherit python3native
+require recipes-bsp/firmware/firmware-qcom.inc
-do_compile() {
- # Build board-2.bin needed by WiFi
- ath10k-generate-board-2_json.sh ./38-bdwlan_split board-2.json
- python3 "${STAGING_BINDIR_NATIVE}/ath10k-bdencoder" -c board-2.json -o board-2.bin
-}
+DEPENDS += "pil-squasher-native"
do_install() {
install -d ${D}${nonarch_base_libdir}/firmware/
- install -d ${D}${nonarch_base_libdir}/firmware/qcom/sdm845
+ install -d ${D}${FW_QCOM_PATH}
- install -m 0444 ./08-dspso/dspso.bin ${D}${nonarch_base_libdir}/firmware/qcom/sdm845
+ install -m 0444 ./08-dspso/dspso.bin ${D}${FW_QCOM_PATH}
install -m 0444 ./17-USB3-201-202-FW/K2026090.mem ${D}${nonarch_base_libdir}/firmware/renesas_usb_fw.mem
- install -m 0444 ./18-adreno-fw/a630_zap*.* ${D}${nonarch_base_libdir}/firmware/qcom/
- install -m 0444 ./20-adsp_split/firmware/adsp*.* ${D}${nonarch_base_libdir}/firmware/qcom/sdm845
- install -m 0444 ./21-cdsp_split/firmware/cdsp*.* ${D}${nonarch_base_libdir}/firmware/qcom/sdm845
-
- install -d ${D}${nonarch_base_libdir}/firmware/ath10k/WCN3990/hw1.0/
- install -m 0444 ./board-2.bin ${D}${nonarch_base_libdir}/firmware/ath10k/WCN3990/hw1.0/
install -d ${D}${sysconfdir}/
install -m 0644 LICENSE.qcom.txt ${D}${sysconfdir}/QCOM-LINUX-BOARD-SUPPORT-LICENSE-${PN}
}
+
+SPLIT_FIRMWARE_PACKAGES = " \
+ ${PN}-dspso \
+"
diff --git a/recipes-bsp/firmware/firmware-qcom-ifc6410.bb b/recipes-bsp/firmware/firmware-qcom-ifc6410.bb
new file mode 100644
index 0000000..1fbeac2
--- /dev/null
+++ b/recipes-bsp/firmware/firmware-qcom-ifc6410.bb
@@ -0,0 +1,22 @@
+# Specify location of the corresponding NON-HLOS.bin file by adding
+# NHLOS_URI:pn-firmware-qcom-ifc6410 = "..." to local.conf. Use "file://"
+# if the file is provided locally.
+
+DESCRIPTION = "QCOM Firmware for Inforce IFC6410 board"
+
+LICENSE = "CLOSED"
+
+# ifc6410 firmware is unsigned, so install into generic location
+FW_QCOM_NAME = "apq8064"
+
+FW_QCOM_LIST = "dsps.mbn gss.mbn q6.mbn wcnss.mbn"
+
+require recipes-bsp/firmware/firmware-qcom.inc
+require recipes-bsp/firmware/firmware-qcom-nhlos.inc
+
+SPLIT_FIRMWARE_PACKAGES = " \
+ linux-firmware-qcom-${FW_QCOM_NAME}-dsps \
+ linux-firmware-qcom-${FW_QCOM_NAME}-gss \
+ linux-firmware-qcom-${FW_QCOM_NAME}-q6 \
+ linux-firmware-qcom-${FW_QCOM_NAME}-wifi \
+"
diff --git a/recipes-bsp/firmware/firmware-qcom-ifc6560.bb b/recipes-bsp/firmware/firmware-qcom-ifc6560.bb
new file mode 100644
index 0000000..03aca78
--- /dev/null
+++ b/recipes-bsp/firmware/firmware-qcom-ifc6560.bb
@@ -0,0 +1,30 @@
+# Specify location of the corresponding NON-HLOS.bin file by adding
+# NHLOS_URI:pn-firmware-qcom-ifc6560 = "..." to local.conf. Use "file://"
+# if the file is provided locally.
+
+DESCRIPTION = "QCOM Firmware for Inforce IFC6560 board"
+
+LICENSE = "CLOSED"
+
+# ifc6560 isn't locked, so install firmware into generic location
+FW_QCOM_NAME = "sda660"
+
+FW_QCOM_LIST = "\
+ a508_zap.mbn a512_zap.mbn \
+ adsp.mbn \
+ cdsp.mbn \
+ mba.mbn modem.mbn modemuw.jsn \
+ venus.mbn \
+"
+
+require recipes-bsp/firmware/firmware-qcom.inc
+require recipes-bsp/firmware/firmware-qcom-nhlos.inc
+require recipes-bsp/firmware/firmware-qcom-adreno.inc
+
+SPLIT_FIRMWARE_PACKAGES = "\
+ linux-firmware-qcom-${FW_QCOM_NAME}-adreno \
+ linux-firmware-qcom-${FW_QCOM_NAME}-audio \
+ linux-firmware-qcom-${FW_QCOM_NAME}-compute \
+ linux-firmware-qcom-${FW_QCOM_NAME}-modem \
+ linux-firmware-qcom-${FW_QCOM_NAME}-venus \
+"
diff --git a/recipes-bsp/firmware/firmware-qcom-nexus7-2013.bb b/recipes-bsp/firmware/firmware-qcom-nexus7-2013.bb
deleted file mode 100644
index a17c5ac..0000000
--- a/recipes-bsp/firmware/firmware-qcom-nexus7-2013.bb
+++ /dev/null
@@ -1,40 +0,0 @@
-DESCRIPTION = "QCOM Firmware for Asus Google Nexus 7 (2013)"
-
-LICENSE = "Proprietary"
-LIC_FILES_CHKSUM = "file://license.txt;md5=0d238870f50c84250a14191d17aaf1d5"
-
-SRC_URI = "https://dl.google.com/dl/android/aosp/qcom-flo-mob30x-43963492.tgz;name=google \
- git://android.googlesource.com/device/asus/flo;protocol=https;branch=master;name=aosp"
-SRC_URI[google.md5sum] = "5c21950c751544cc92b5fe95c6f3be37"
-SRC_URI[google.sha256sum] = "1ccc740a461be8ea84369b1c13fc89cb3f26f8bc1400fedec8b3dd1f630a7994"
-SRCREV_aosp = "9d9fee956a9c4c7be4f69f7a472d3fc0e759c2dd"
-
-require recipes-bsp/firmware/firmware-qcom.inc
-
-DEPENDS += "pil-squasher-native"
-
-# extract the license file
-do_extract() {
- head -n 280 ${WORKDIR}/extract-qcom-flo.sh | tail -n +16 > ${S}/license.txt
- tail -n +315 ${WORKDIR}/extract-qcom-flo.sh | tar xzfv - -C ${S}
-}
-addtask extract after do_unpack before do_patch
-
-do_compile() {
- for fw in ${S}/vendor/qcom/flo/proprietary/*.mdt ; do
- pil-squasher ${B}/`basename $fw mdt`mbn $fw
- done
-}
-
-do_install() {
- install -d ${D}${nonarch_base_libdir}/firmware/qcom/flo
- install -m 0644 ${B}/*.mbn ${D}${nonarch_base_libdir}/firmware/qcom/flo
- install -m 0644 vendor/qcom/flo/proprietary/vidcfw.elf ${D}${nonarch_base_libdir}/firmware/qcom/flo
- install -m 0644 vendor/qcom/flo/proprietary/vidc_1080p.fw ${D}${nonarch_base_libdir}/firmware/qcom/flo
-
- install -m 0644 license.txt ${D}${nonarch_base_libdir}/firmware/qcom/flo
-
- install -m 0644 ${WORKDIR}/git/WCNSS_cfg.dat ${D}${nonarch_base_libdir}/firmware/qcom/flo
- install -m 0644 ${WORKDIR}/git/WCNSS_qcom_wlan_nv_deb.bin ${D}${nonarch_base_libdir}/firmware/qcom/flo
- install -m 0644 ${WORKDIR}/git/WCNSS_qcom_wlan_nv_flo.bin ${D}${nonarch_base_libdir}/firmware/qcom/flo/WCNSS_qcom_wlan_nv.bin
-}
diff --git a/recipes-bsp/firmware/firmware-qcom-nhlos.inc b/recipes-bsp/firmware/firmware-qcom-nhlos.inc
new file mode 100644
index 0000000..a4d5808
--- /dev/null
+++ b/recipes-bsp/firmware/firmware-qcom-nhlos.inc
@@ -0,0 +1,60 @@
+# Handle NON-HLOS.bin unpacking in a generic way
+# Include the file to be able to dissect the image using handle_nonhlos_image()
+# If NHLOS_URI is defined, the image will be dissected automatically
+
+NHLOS_URI ??= ""
+
+# List all firmware files to be installed
+FW_QCOM_LIST ??= ""
+
+DEPENDS += "pil-squasher-native mtools-native"
+
+# Conditionally populate SRC_URI. We have to do it here rather than in python
+# script to let base.bbclass to pick up dependencies
+SRC_URI += "${NHLOS_URI}"
+
+handle_nonhlos_image() {
+ mkdir -p ${B}/firmware
+ mcopy -n -s -i "$1" ::/* ${B}/firmware/
+ for fw in ${B}/firmware/image/*.mdt ; do
+ pil-squasher ${B}/`basename $fw mdt`mbn $fw || exit 1
+ done
+}
+
+# If the URL is the file:// URI, the whole local path will be duplicated in the WORKDIR.
+# Otherwise we just need the last (filename) part of the path.
+def get_nhlos_path(path):
+ from urllib.parse import urlparse
+ if path == "":
+ return ""
+ url = urlparse(path)
+ if url.scheme == "file":
+ return url.path
+ return url.path.rsplit('/', 1)[1]
+
+do_compile:prepend() {
+ if [ -n "${NHLOS_URI}" ] ; then
+ handle_nonhlos_image ${WORKDIR}/${@get_nhlos_path(d.getVar("NHLOS_URI"))}
+ fi
+}
+
+do_install:prepend() {
+ install -d ${D}${FW_QCOM_PATH}
+
+ for fw in ${FW_QCOM_LIST} ; do
+ if [ -r ${B}/$fw ] ; then
+ install -m 0644 ${B}/$fw ${D}${FW_QCOM_PATH}
+ fi
+
+ if [ -r ${B}/firmware/image/$fw ] ; then
+ install -m 0644 ${B}/firmware/image/$fw ${D}${FW_QCOM_PATH}
+ fi
+ done
+}
+
+# If firmware files are not provided, do not download/package anything
+python () {
+ uri = d.getVar("NHLOS_URI")
+ if uri == "":
+ bb.warn("%s: not packaging NHLOS firmware. Please provide HNLOS_URI" % d.getVar("PN"))
+}
diff --git a/recipes-bsp/firmware/firmware-qcom-rb1_20230823-v2.bb b/recipes-bsp/firmware/firmware-qcom-rb1_20230823-v2.bb
new file mode 100644
index 0000000..3d8a802
--- /dev/null
+++ b/recipes-bsp/firmware/firmware-qcom-rb1_20230823-v2.bb
@@ -0,0 +1,25 @@
+DESCRIPTION = "QCOM Firmware for Qualcomm Robotics RB1 platform"
+
+LICENSE = "Proprietary"
+LIC_FILES_CHKSUM = "file://LICENSE.qcom.txt;md5=cbbe399f2c983ad51768f4561587f000"
+
+SRC_URI = "http://releases.linaro.org/96boards/rb1/qualcomm/firmware/RB1_firmware_${PV}.zip;subdir=${BP}"
+SRC_URI[md5sum] = "db892ca115845938c6672d756448d512"
+SRC_URI[sha256sum] = "e7f95cc61d601f6267f87741c333ec5663a6fb538c79770dc094c2556fa757c0"
+
+FW_QCOM_NAME = "qcm2290"
+
+require recipes-bsp/firmware/firmware-qcom.inc
+
+do_install() {
+ install -d ${D}${sysconfdir}/
+ install -m 0644 LICENSE.qcom.txt ${D}${sysconfdir}/QCOM-LINUX-BOARD-SUPPORT-LICENSE-${PN}
+
+ install -d ${D}${FW_QCOM_PATH}
+
+ install -m 0444 04-dspso/dspso.bin ${D}${FW_QCOM_PATH}
+}
+
+SPLIT_FIRMWARE_PACKAGES = " \
+ ${PN}-dspso \
+"
diff --git a/recipes-bsp/firmware/firmware-qcom-rb2_20230823-v2.bb b/recipes-bsp/firmware/firmware-qcom-rb2_20230823-v2.bb
new file mode 100644
index 0000000..480985a
--- /dev/null
+++ b/recipes-bsp/firmware/firmware-qcom-rb2_20230823-v2.bb
@@ -0,0 +1,25 @@
+DESCRIPTION = "QCOM Firmware for Qualcomm Robotics RB2 platform"
+
+LICENSE = "Proprietary"
+LIC_FILES_CHKSUM = "file://LICENSE.qcom.txt;md5=cbbe399f2c983ad51768f4561587f000"
+
+SRC_URI = "http://releases.linaro.org/96boards/rb2/qualcomm/firmware/RB2_firmware_${PV}.zip;subdir=${BP}"
+SRC_URI[md5sum] = "53b6cda776cb534883e6c2a048ad97ec"
+SRC_URI[sha256sum] = "5d96c6f224cd4667afd47770b6cd0ad2ad912fe67fec86f4478ad8dcffae8531"
+
+FW_QCOM_NAME = "qrb4210"
+
+require recipes-bsp/firmware/firmware-qcom.inc
+
+do_install() {
+ install -d ${D}${sysconfdir}/
+ install -m 0644 LICENSE.qcom.txt ${D}${sysconfdir}/QCOM-LINUX-BOARD-SUPPORT-LICENSE-${PN}
+
+ install -d ${D}${FW_QCOM_PATH}
+
+ install -m 0444 04-dspso/dspso.bin ${D}${FW_QCOM_PATH}
+}
+
+SPLIT_FIRMWARE_PACKAGES = " \
+ ${PN}-dspso \
+"
diff --git a/recipes-bsp/firmware/firmware-qcom-rb5_20210331-v4.bb b/recipes-bsp/firmware/firmware-qcom-rb5_20210331-v4.bb
index 44dc7e7..201c646 100644
--- a/recipes-bsp/firmware/firmware-qcom-rb5_20210331-v4.bb
+++ b/recipes-bsp/firmware/firmware-qcom-rb5_20210331-v4.bb
@@ -14,33 +14,19 @@ SRC_URI[sha256sum] = "30e2c02be32de9f809b590f4fe76d9eb66d35f8c7d13b1f2850beb3d79
# 20210331-v4
PE = "1"
-DEPENDS += "qca-swiss-army-knife-native"
+FW_QCOM_NAME = "sm8250"
require recipes-bsp/firmware/firmware-qcom.inc
-do_compile() {
- # Build board-2.bin needed by WiFi
- ath11k-generate-board-2_json.sh ./38-bdwlan_split board-2.json
- python3 "${STAGING_BINDIR_NATIVE}/ath10k-bdencoder" -m ath11k -c board-2.json -o board-2.bin
-}
-
do_install() {
- install -d ${D}${nonarch_base_libdir}/firmware/qcom/sm8250
-
- install -m 0444 ./08-dspso/dspso.bin ${D}${nonarch_base_libdir}/firmware/qcom/sm8250
+ install -d ${D}${FW_QCOM_PATH}
- install -m 0444 ./30-slpi_split/slpi.mbn ${D}${nonarch_base_libdir}/firmware/qcom/sm8250/
- install -m 0444 ./39-jsn/slpi*.jsn ${D}${nonarch_base_libdir}/firmware/qcom/sm8250/
-
- install -d ${D}${nonarch_base_libdir}/firmware/ath11k/QCA6390/hw2.0/
- install -m 0444 ${S}/board-2.bin ${D}${nonarch_base_libdir}/firmware/ath11k/QCA6390/hw2.0/board-2.bin
+ install -m 0444 ./08-dspso/dspso.bin ${D}${FW_QCOM_PATH}
install -d ${D}${sysconfdir}/
install -m 0644 LICENSE.qcom.txt ${D}${sysconfdir}/QCOM-LINUX-BOARD-SUPPORT-LICENSE-${PN}
}
-inherit update-alternatives
-
-ALTERNATIVE:${PN} = "qca6390-board2"
-ALTERNATIVE_LINK_NAME[qca6390-board2] = "/lib/firmware/ath11k/QCA6390/hw2.0/board-2.bin"
-ALTERNATIVE_PRIORITY = "100"
+SPLIT_FIRMWARE_PACKAGES = " \
+ ${PN}-dspso \
+"
diff --git a/recipes-bsp/firmware/firmware-qcom-sm8150-hdk.bb b/recipes-bsp/firmware/firmware-qcom-sm8150-hdk.bb
new file mode 100644
index 0000000..8579aa7
--- /dev/null
+++ b/recipes-bsp/firmware/firmware-qcom-sm8150-hdk.bb
@@ -0,0 +1,42 @@
+# Specify location of the corresponding NON-HLOS.bin file by adding
+# NHLOS_URI:pn-firmware-qcom-sm8350-hdk = "..." to local.conf. Use "file://"
+# if the file is provided locally.
+
+DESCRIPTION = "QCOM Firmware for SM8150 HDK (aka HDK855) board"
+
+LICENSE = "CLOSED"
+
+FW_QCOM_NAME = "sm8150"
+
+FW_QCOM_LIST = "\
+ a640_zap.mbn \
+ adsp.mbn adspr.jsn adspua.jsn \
+ cdsp.mbn cdspr.jsn \
+ ipa_fws.mbn \
+ modem.mbn modemuw.jsn \
+ slpi.mbn slpir.jsn \
+"
+
+require recipes-bsp/firmware/firmware-qcom.inc
+require recipes-bsp/firmware/firmware-qcom-nhlos.inc
+include recipes-bsp/firmware/firmware-qcom-adreno.inc
+
+SPLIT_FIRMWARE_PACKAGES = "\
+ linux-firmware-qcom-${FW_QCOM_NAME}-adreno \
+ linux-firmware-qcom-${FW_QCOM_NAME}-audio \
+ linux-firmware-qcom-${FW_QCOM_NAME}-compute \
+ linux-firmware-qcom-${FW_QCOM_NAME}-ipa \
+ linux-firmware-qcom-${FW_QCOM_NAME}-modem \
+ linux-firmware-qcom-${FW_QCOM_NAME}-sensors \
+ linux-firmware-qcom-adreno-a640 \
+"
+
+do_install:append() {
+ if [ -n "${ADRENO_URI}" ] ; then
+ install -m 0644 ${WORKDIR}/adreno/${ADRENO_PATH}/a640_gmu.bin ${D}${FW_QCOM_BASE_PATH}
+ fi
+}
+
+FILES:linux-firmware-qcom-adreno-a640 += "${FW_QCOM_BASE_PATH}/a640_gmu.bin"
+RDEPENDS:linux-firmware-qcom-adreno-a640 += "linux-firmware-qcom-adreno-a630"
+RDEPENDS:linux-firmware-qcom-adreno-a640:remove = "${PN}"
diff --git a/recipes-bsp/firmware/firmware-qcom-sm8350-hdk.bb b/recipes-bsp/firmware/firmware-qcom-sm8350-hdk.bb
new file mode 100644
index 0000000..f412673
--- /dev/null
+++ b/recipes-bsp/firmware/firmware-qcom-sm8350-hdk.bb
@@ -0,0 +1,31 @@
+# Specify location of the corresponding NON-HLOS.bin file by adding
+# NHLOS_URI:pn-firmware-qcom-sm8350-hdk = "..." to local.conf. Use "file://"
+# if the file is provided locally.
+
+DESCRIPTION = "QCOM Firmware for SM8350 HDK (aka HDK888) board"
+
+LICENSE = "CLOSED"
+
+FW_QCOM_NAME = "sm8350"
+
+FW_QCOM_LIST = "\
+ a660_zap.mbn a615_zap.mbn \
+ adsp.mbn adspr.jsn adspua.jsn battmgr.jsn \
+ cdsp.mbn cdspr.jsn \
+ ipa_fws.mbn \
+ modem.mbn modemr.jsn \
+ slpi.mbn slpir.jsn \
+"
+
+require recipes-bsp/firmware/firmware-qcom.inc
+require recipes-bsp/firmware/firmware-qcom-nhlos.inc
+require recipes-bsp/firmware/firmware-qcom-adreno.inc
+
+SPLIT_FIRMWARE_PACKAGES = "\
+ linux-firmware-qcom-${FW_QCOM_NAME}-adreno \
+ linux-firmware-qcom-${FW_QCOM_NAME}-audio \
+ linux-firmware-qcom-${FW_QCOM_NAME}-compute \
+ linux-firmware-qcom-${FW_QCOM_NAME}-ipa \
+ linux-firmware-qcom-${FW_QCOM_NAME}-modem \
+ linux-firmware-qcom-${FW_QCOM_NAME}-sensors \
+"
diff --git a/recipes-bsp/firmware/firmware-qcom-sm8450-hdk.bb b/recipes-bsp/firmware/firmware-qcom-sm8450-hdk.bb
new file mode 100644
index 0000000..b928bd6
--- /dev/null
+++ b/recipes-bsp/firmware/firmware-qcom-sm8450-hdk.bb
@@ -0,0 +1,44 @@
+# Specify location of the corresponding NON-HLOS.bin file by adding
+# NHLOS_URI:pn-firmware-qcom-sm8450-hdk = "..." to local.conf. Use "file://"
+# if the file is provided locally.
+
+DESCRIPTION = "QCOM Firmware for SM8450 HDK board"
+
+LICENSE = "CLOSED"
+
+FW_QCOM_NAME = "sm8450"
+
+FW_QCOM_LIST = "\
+ a730_zap.mbn \
+ adsp.mbn adspr.jsn adspua.jsn battmgr.jsn \
+ cdsp.mbn cdspr.jsn \
+ ipa_fws.mbn \
+ modem.mbn modemr.jsn \
+ slpi.mbn slpir.jsn slpius.jsn \
+"
+
+require recipes-bsp/firmware/firmware-qcom.inc
+require recipes-bsp/firmware/firmware-qcom-nhlos.inc
+require recipes-bsp/firmware/firmware-qcom-adreno.inc
+
+SPLIT_FIRMWARE_PACKAGES = "\
+ linux-firmware-qcom-${FW_QCOM_NAME}-adreno \
+ linux-firmware-qcom-${FW_QCOM_NAME}-audio \
+ linux-firmware-qcom-${FW_QCOM_NAME}-compute \
+ linux-firmware-qcom-${FW_QCOM_NAME}-ipa \
+ linux-firmware-qcom-${FW_QCOM_NAME}-modem \
+ linux-firmware-qcom-${FW_QCOM_NAME}-sensors \
+ linux-firmware-qcom-adreno-a730 \
+ linux-firmware-qcom-adreno-gmu-a700 \
+"
+
+do_install:append() {
+ if [ -n "${ADRENO_URI}" ] ; then
+ install -m 0644 ${WORKDIR}/adreno/${ADRENO_PATH}/a730_sqe.fw ${D}${FW_QCOM_BASE_PATH}
+ install -m 0644 ${WORKDIR}/adreno/${ADRENO_PATH}/gmu_gen70000.bin ${D}${FW_QCOM_BASE_PATH}
+ fi
+}
+
+FILES:linux-firmware-qcom-adreno-a730 += "${FW_QCOM_BASE_PATH}/a730_sqe.fw"
+FILES:linux-firmware-qcom-adreno-gmu-a700 += "${FW_QCOM_BASE_PATH}/gmu_gen70000.bin"
+RDEPENDS:linux-firmware-qcom-adreno-a730 += "linux-firmware-qcom-adreno-gmu-a700"
diff --git a/recipes-bsp/firmware/firmware-qcom.inc b/recipes-bsp/firmware/firmware-qcom.inc
index c458878..55b1d7e 100644
--- a/recipes-bsp/firmware/firmware-qcom.inc
+++ b/recipes-bsp/firmware/firmware-qcom.inc
@@ -4,6 +4,54 @@ FILES:${PN} += "${nonarch_base_libdir}/firmware/"
INSANE_SKIP:${PN} += "arch already-stripped"
+# Default settings
+# package name part in linux-firmware-qcom-...-audio
+FW_QCOM_NAME ?= "unset"
+# Subdir inside /lib/firmware/qcom. Typically it is equal to FW_QCOM_NAME but might differ in complex cases (like C630 Yoga).
+FW_QCOM_SUBDIR ?= "${FW_QCOM_NAME}"
+FW_QCOM_BASE_PATH = "${nonarch_base_libdir}/firmware/qcom"
+FW_QCOM_PATH = "${FW_QCOM_BASE_PATH}/${FW_QCOM_SUBDIR}"
+
+SPLIT_FIRMWARE_PACKAGES ?= ""
+
+PACKAGE_BEFORE_PN += "${SPLIT_FIRMWARE_PACKAGES}"
+# RRECOMMEND all non-split packages split from this recipe. Split firmware files re usually replaced with the squashed ones.
+RRECOMMENDS:${PN} += "${@ ' '.join(filter(lambda p: not p.endswith('-split'), d.getVar('SPLIT_FIRMWARE_PACKAGES').split())) }"
+
+# Default settings for several split packages
+FILES:${PN}-dspso += "${FW_QCOM_BASE_PATH}/*/*dspso.bin"
+FILES:linux-firmware-qcom-${FW_QCOM_NAME}-adreno = "${FW_QCOM_PATH}/*_zap.mbn ${FW_QCOM_PATH}/qcdxkmsuc*.mbn"
+FILES:linux-firmware-qcom-${FW_QCOM_NAME}-audio = "${FW_QCOM_PATH}/adsp.mbn ${FW_QCOM_PATH}/adsp*.jsn ${FW_QCOM_PATH}/battmgr*.jsn ${FW_QCOM_PATH}/qcadsp*.mbn"
+FILES:linux-firmware-qcom-${FW_QCOM_NAME}-audio-split = "${FW_QCOM_PATH}/adsp.mdt ${FW_QCOM_PATH}/adsp.b*"
+FILES:linux-firmware-qcom-${FW_QCOM_NAME}-compute = "${FW_QCOM_PATH}/cdsp.mbn ${FW_QCOM_PATH}/cdsp*.jsn ${FW_QCOM_PATH}/qccdsp*.mbn"
+FILES:linux-firmware-qcom-${FW_QCOM_NAME}-compute-split = "${FW_QCOM_PATH}/cdsp.mdt ${FW_QCOM_PATH}/cdsp.b*"
+FILES:linux-firmware-qcom-${FW_QCOM_NAME}-dsps = "${FW_QCOM_PATH}/dsps.mbn"
+FILES:linux-firmware-qcom-${FW_QCOM_NAME}-gss = "${FW_QCOM_PATH}/gss.mbn"
+FILES:linux-firmware-qcom-${FW_QCOM_NAME}-ipa = "${FW_QCOM_PATH}/ipa_fws.mbn ${FW_QCOM_PATH}/ipa_fws.elf"
+FILES:linux-firmware-qcom-${FW_QCOM_NAME}-modem = "${FW_QCOM_PATH}/mba.mbn ${FW_QCOM_PATH}/modem.mbn ${FW_QCOM_PATH}/modem*.jsn ${FW_QCOM_PATH}/qcmpss*.mbn"
+FILES:linux-firmware-qcom-${FW_QCOM_NAME}-modem-split = "${FW_QCOM_PATH}/modem.mdt ${FW_QCOM_PATH}/modem.b*"
+FILES:linux-firmware-qcom-${FW_QCOM_NAME}-q6 = "${FW_QCOM_PATH}/q6.mbn"
+FILES:linux-firmware-qcom-${FW_QCOM_NAME}-sensors = "${FW_QCOM_PATH}/slpi.mbn ${FW_QCOM_PATH}/slpi*.jsn ${FW_QCOM_PATH}/qcslpi*.mbn"
+FILES:linux-firmware-qcom-${FW_QCOM_NAME}-sensors-split = "${FW_QCOM_PATH}/slpi.mdt ${FW_QCOM_PATH}/slpi.b*"
+FILES:linux-firmware-qcom-${FW_QCOM_NAME}-venus = "${FW_QCOM_PATH}/venus.mbn ${FW_QCOM_PATH}/vidc* ${FW_QCOM_PATH}/qcvss*.mbn"
+FILES:linux-firmware-qcom-${FW_QCOM_NAME}-wifi = "${FW_QCOM_PATH}/wcnss.mbn ${FW_QCOM_PATH}/wlanmdsp.mbn"
+FILES:linux-firmware-qcom-${FW_QCOM_NAME}-wifi-split = "${FW_QCOM_PATH}/wcnss.mdt ${FW_QCOM_PATH}/wcnss.b*"
+
+python() {
+ pn = d.getVar("PN")
+ insanes = d.getVar("INSANE_SKIP:%s" % pn)
+ for pkg in d.getVar("SPLIT_FIRMWARE_PACKAGES").split():
+ # Depend on the main package to get the license file
+ d.appendVar("RDEPENDS:" + pkg, " " + pn)
+ # and append the INSANE_SKIP of the main package to pass QA
+ d.appendVar("INSANE_SKIP:" + pkg, " " + insanes)
+ # If it's a package with the split frmware, depend on non-split files (for jsn files, etc)
+ if pkg.endswith("-split"):
+ d.appendVar("RDEPENDS:" + pkg, " " + pkg[:-6])
+ if d.getVar("FW_QCOM_NAME") == "unset" and d.getVar("SPLIT_FIRMWARE_PACKAGES") != "":
+ bb.error("%s: split firmware-qcom packages engaged, but FW_QCOM_NAME is not defined" % pn)
+}
+
INHIBIT_PACKAGE_DEBUG_SPLIT = "1"
INHIBIT_PACKAGE_STRIP = "1"
INHIBIT_DEFAULT_DEPS = "1"
diff --git a/recipes-bsp/firmware/firmware-wcn6855_git.bb b/recipes-bsp/firmware/firmware-wcn6855_git.bb
new file mode 100644
index 0000000..2283519
--- /dev/null
+++ b/recipes-bsp/firmware/firmware-wcn6855_git.bb
@@ -0,0 +1,52 @@
+SUMMARY = "Firmware files for Qualcomm/Atheros WCN6855 SoC"
+
+LICENSE = "Firmware-qualcommAthos_ath10k"
+LIC_FILES_CHKSUM = "file://LICENSE.QualcommAtheros_ath10k;md5=cb42b686ee5f5cb890275e4321db60a8"
+NO_GENERIC_LICENSE[Firmware-qualcommAthos_ath10k] = "LICENSE.QualcommAtheros_ath10k"
+
+SRC_URI = "git://chromium.googlesource.com/chromiumos/third_party/linux-firmware;protocol=https;branch=master"
+SRCREV = "d233ddd89abe06448070471963a58c0a7da81d79"
+
+PV = "1.1-01720.1+git${SRCPV}"
+
+S = "${WORKDIR}/git"
+
+inherit allarch
+
+CLEANBROKEN = "1"
+
+do_compile() {
+ :
+}
+
+FWDIR = "${nonarch_base_libdir}/firmware/ath11k/WCN6855/hw2.0"
+FWDIR21 = "${nonarch_base_libdir}/firmware/ath11k/WCN6855/hw2.1"
+
+do_install() {
+ install -d ${D}${FWDIR}
+
+ install -m 0644 ath11k/WCN6855/hw2.0/* ${D}${FWDIR}
+
+ install -d ${D}${FWDIR21}
+ ln -sr ${D}${FWDIR}/board.bin ${D}${FWDIR21}/
+}
+
+inherit update-alternatives
+
+ALTERNATIVE:${PN} += "wcn6855-hw20-amss wcn6855-hw20-m3 wcn6855-hw20-regdb"
+ALTERNATIVE_LINK_NAME[wcn6855-hw20-amss] = "${nonarch_base_libdir}/firmware/ath11k/WCN6855/hw2.0/amss.bin"
+ALTERNATIVE_LINK_NAME[wcn6855-hw20-m3] = "${nonarch_base_libdir}/firmware/ath11k/WCN6855/hw2.0/m3.bin"
+ALTERNATIVE_LINK_NAME[wcn6855-hw20-regdb] = "${nonarch_base_libdir}/firmware/ath11k/WCN6855/hw2.0/regdb.bin"
+ALTERNATIVE_PRIORITY = "100"
+
+PACKAGE_BEFORE_PN = "${PN}-board"
+
+RDEPENDS:${PN}-board += "${PN}"
+RDEPENDS:${PN} += "linux-firmware-ath10k-license"
+
+FILES:${PN} = "${FWDIR}"
+FILES:${PN}-board = "${FWDIR}/board*.bin ${FWDIR21}/board*.bin"
+
+# Firmware files are generally not ran on the CPU, so they can be
+# allarch despite being architecture specific
+INSANE_SKIP = "arch"
diff --git a/recipes-bsp/images/initramfs-firmware-db8074-image.bb b/recipes-bsp/images/initramfs-firmware-db8074-image.bb
new file mode 100644
index 0000000..c531a23
--- /dev/null
+++ b/recipes-bsp/images/initramfs-firmware-db8074-image.bb
@@ -0,0 +1,7 @@
+DESCRIPTION = "Tiny ramdisk image with Dragonboard APQ8074 firmware files"
+
+PACKAGE_INSTALL += " \
+ packagegroup-firmware-dragonboard-apq8074 \
+"
+
+require initramfs-firmware-image.inc
diff --git a/recipes-bsp/images/initramfs-firmware-ifc6560-image.bb b/recipes-bsp/images/initramfs-firmware-ifc6560-image.bb
new file mode 100644
index 0000000..c667b77
--- /dev/null
+++ b/recipes-bsp/images/initramfs-firmware-ifc6560-image.bb
@@ -0,0 +1,16 @@
+DESCRIPTION = "Tiny ramdisk image with all Nexus and Pixel devices firmware files"
+
+PACKAGE_INSTALL += " \
+ packagegroup-firmware-ifc6560 \
+"
+
+BAD_RECOMMENDATIONS = "\
+ linux-firmware-qcom-sda660-audio \
+ linux-firmware-qcom-sda660-compute \
+ linux-firmware-qcom-sda660-modem \
+ linux-firmware-qcom-sda660-venus \
+ linux-firmware-qca \
+ linux-firmware-ath10k \
+"
+
+require initramfs-firmware-image.inc
diff --git a/recipes-bsp/images/initramfs-firmware-image.bb b/recipes-bsp/images/initramfs-firmware-image.bb
new file mode 100644
index 0000000..61b2e95
--- /dev/null
+++ b/recipes-bsp/images/initramfs-firmware-image.bb
@@ -0,0 +1,29 @@
+DESCRIPTION = "Tiny ramdisk image with firmware files"
+
+# Do not install anything by default
+PACKAGE_INSTALL = ""
+
+PACKAGE_INSTALL:qcom-armv8a = " \
+ packagegroup-firmware-dragonboard410c \
+ packagegroup-firmware-dragonboard820c \
+ packagegroup-firmware-dragonboard845c \
+ packagegroup-firmware-rb1 \
+ packagegroup-firmware-rb2 \
+ packagegroup-firmware-rb5 \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'wifi', 'wireless-regdb-static', '', d)} \
+"
+
+BAD_RECOMMENDATIONS = " \
+ firmware-qcom-dragonboard820c-dspso \
+ firmware-qcom-dragonboard845c-dspso \
+ firmware-qcom-rb1-dspso \
+ firmware-qcom-rb2-dspso \
+ firmware-qcom-rb5-dspso \
+"
+
+PACKAGE_INSTALL:qcom-armv7a = " \
+ packagegroup-firmware-ifc6410 \
+ firmware-qcom-nexus7-2013 \
+"
+
+require initramfs-firmware-image.inc
diff --git a/recipes-bsp/images/initramfs-firmware-image.inc b/recipes-bsp/images/initramfs-firmware-image.inc
new file mode 100644
index 0000000..2ce4f36
--- /dev/null
+++ b/recipes-bsp/images/initramfs-firmware-image.inc
@@ -0,0 +1,17 @@
+# We do not use kernel image or kernel modules in the image, so remove the
+# dependency on the kernel
+KERNELDEPMODDEPEND = ""
+KERNEL_DEPLOY_DEPEND = ""
+
+IMAGE_LINGUAS = ""
+LICENSE = "MIT"
+
+IMAGE_FSTYPES = "${INITRAMFS_FSTYPES}"
+IMAGE_NAME_SUFFIX ?= ""
+inherit core-image
+
+IMAGE_ROOTFS_SIZE = "8192"
+IMAGE_ROOTFS_EXTRA_SPACE = "0"
+
+# Inhibit installing /init
+IMAGE_BUILDING_DEBUGFS = "true"
diff --git a/recipes-bsp/images/initramfs-firmware-nexus-image.bb b/recipes-bsp/images/initramfs-firmware-nexus-image.bb
new file mode 100644
index 0000000..668d993
--- /dev/null
+++ b/recipes-bsp/images/initramfs-firmware-nexus-image.bb
@@ -0,0 +1,24 @@
+DESCRIPTION = "Tiny ramdisk image with all Nexus and Pixel devices firmware files"
+
+# Firmware support for newer Nexus and Pixel devices depends on simg2img, which
+# is provided by the meta-oe only. So they are split into the bbappend in
+# dynamic-layers/openembedded-layer.
+PACKAGE_INSTALL += " \
+ firmware-qcom-nexus4 \
+ firmware-qcom-nexus5 \
+ firmware-qcom-nexus5x \
+ firmware-qcom-nexus6 \
+ firmware-qcom-nexus6p \
+ firmware-qcom-nexus7-2013 \
+ firmware-qcom-pixel \
+ firmware-qcom-pixel2 \
+ firmware-qcom-pixel3 \
+ firmware-qcom-pixel3a \
+ firmware-qcom-pixel4 \
+ firmware-qcom-pixel4a \
+ firmware-qcom-pixel4a-5g \
+ firmware-qcom-pixel5 \
+ firmware-qcom-pixel5a-5g \
+"
+
+require initramfs-firmware-image.inc
diff --git a/recipes-bsp/images/initramfs-firmware-rb12-image.bb b/recipes-bsp/images/initramfs-firmware-rb12-image.bb
new file mode 100644
index 0000000..30c793a
--- /dev/null
+++ b/recipes-bsp/images/initramfs-firmware-rb12-image.bb
@@ -0,0 +1,14 @@
+DESCRIPTION = "Tiny ramdisk image with RB1/RB2 devices firmware files"
+
+PACKAGE_INSTALL += " \
+ packagegroup-firmware-rb1 \
+ packagegroup-firmware-rb2 \
+"
+
+BAD_RECOMMENDATIONS = " \
+ firmware-qcom-rb1-dspso \
+ firmware-qcom-rb2-dspso \
+ linux-firmware-qcom-venus-6.0 \
+"
+
+require initramfs-firmware-image.inc
diff --git a/recipes-bsp/images/initramfs-firmware-sc8180x-image.bb b/recipes-bsp/images/initramfs-firmware-sc8180x-image.bb
new file mode 100644
index 0000000..8c8c1a9
--- /dev/null
+++ b/recipes-bsp/images/initramfs-firmware-sc8180x-image.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "Tiny ramdisk image with SC8180X devices firmware files"
+
+PACKAGE_INSTALL += " \
+ packagegroup-firmware-sc8180x \
+"
+
+BAD_RECOMMENDATIONS = " \
+ linux-firmware-qca \
+ linux-firmware-ath10k \
+ linux-firmware-qcom-sc8180x-compute \
+ linux-firmware-qcom-sc8180x-ipa \
+ linux-firmware-qcom-sc8180x-modem \
+ linux-firmware-qcom-sc8180x-sensors \
+ linux-firmware-qcom-sc8180x-venus \
+"
+
+require initramfs-firmware-image.inc
diff --git a/recipes-bsp/images/initramfs-firmware-sm8150-hdk-image.bb b/recipes-bsp/images/initramfs-firmware-sm8150-hdk-image.bb
new file mode 100644
index 0000000..3ffcbe7
--- /dev/null
+++ b/recipes-bsp/images/initramfs-firmware-sm8150-hdk-image.bb
@@ -0,0 +1,11 @@
+DESCRIPTION = "Tiny ramdisk image with SM8150 HDK devices firmware files"
+
+PACKAGE_INSTALL += " \
+ packagegroup-firmware-sm8150-hdk \
+"
+
+BAD_RECOMMENDATIONS = " \
+ linux-firmware-qcom-sm8150-sensors \
+"
+
+require initramfs-firmware-image.inc
diff --git a/recipes-bsp/images/initramfs-firmware-sm8350-hdk-image.bb b/recipes-bsp/images/initramfs-firmware-sm8350-hdk-image.bb
new file mode 100644
index 0000000..587012e
--- /dev/null
+++ b/recipes-bsp/images/initramfs-firmware-sm8350-hdk-image.bb
@@ -0,0 +1,11 @@
+DESCRIPTION = "Tiny ramdisk image with SM8350 HDK devices firmware files"
+
+PACKAGE_INSTALL += " \
+ packagegroup-firmware-sm8350-hdk \
+"
+
+BAD_RECOMMENDATIONS = " \
+ linux-firmware-qcom-sm8350-sensors \
+"
+
+require initramfs-firmware-image.inc
diff --git a/recipes-bsp/images/initramfs-firmware-sm8450-hdk-image.bb b/recipes-bsp/images/initramfs-firmware-sm8450-hdk-image.bb
new file mode 100644
index 0000000..4c2cf62
--- /dev/null
+++ b/recipes-bsp/images/initramfs-firmware-sm8450-hdk-image.bb
@@ -0,0 +1,11 @@
+DESCRIPTION = "Tiny ramdisk image with SM8450 HDK devices firmware files"
+
+PACKAGE_INSTALL += " \
+ packagegroup-firmware-sm8450-hdk \
+"
+
+BAD_RECOMMENDATIONS = " \
+ linux-firmware-qcom-sm8450-sensors \
+"
+
+require initramfs-firmware-image.inc
diff --git a/recipes-bsp/packagegroups/packagegroup-firmware-dragonboard-apq8074.bb b/recipes-bsp/packagegroups/packagegroup-firmware-dragonboard-apq8074.bb
new file mode 100644
index 0000000..7432a89
--- /dev/null
+++ b/recipes-bsp/packagegroups/packagegroup-firmware-dragonboard-apq8074.bb
@@ -0,0 +1,10 @@
+SUMMARY = "Firmware packages for the Dragonboard APQ8074 board"
+
+inherit packagegroup
+
+RRECOMMENDS:${PN} += " \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'linux-firmware-qcom-adreno-a3xx', '', d)} \
+ linux-firmware-qcom-apq8074-audio \
+ linux-firmware-qcom-apq8074-modem \
+ linux-firmware-qcom-apq8074-wifi \
+"
diff --git a/recipes-bsp/packagegroups/packagegroup-firmware-dragonboard410c.bb b/recipes-bsp/packagegroups/packagegroup-firmware-dragonboard410c.bb
new file mode 100644
index 0000000..8b55a3b
--- /dev/null
+++ b/recipes-bsp/packagegroups/packagegroup-firmware-dragonboard410c.bb
@@ -0,0 +1,11 @@
+SUMMARY = "Firmware packages for the DragonBoard 410c board"
+
+inherit packagegroup
+
+RRECOMMENDS:${PN} += " \
+ firmware-qcom-dragonboard410c \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'linux-firmware-qcom-adreno-a3xx', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'wifi', 'linux-firmware-qcom-apq8016-wifi', '', d)} \
+ linux-firmware-qcom-apq8016-modem \
+ linux-firmware-qcom-venus-1.8 \
+"
diff --git a/recipes-bsp/packagegroups/packagegroup-firmware-dragonboard820c.bb b/recipes-bsp/packagegroups/packagegroup-firmware-dragonboard820c.bb
new file mode 100644
index 0000000..d7339a4
--- /dev/null
+++ b/recipes-bsp/packagegroups/packagegroup-firmware-dragonboard820c.bb
@@ -0,0 +1,13 @@
+SUMMARY = "Firmware packages for the DragonBoard 820c board"
+
+inherit packagegroup
+
+RRECOMMENDS:${PN} += " \
+ firmware-qcom-dragonboard820c \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'linux-firmware-qcom-adreno-a530 linux-firmware-qcom-apq8096-adreno', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'wifi', 'linux-firmware-ath10k', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', 'linux-firmware-qca', '', d)} \
+ linux-firmware-qcom-apq8096-audio \
+ linux-firmware-qcom-apq8096-modem \
+ linux-firmware-qcom-venus-4.2 \
+"
diff --git a/recipes-bsp/packagegroups/packagegroup-firmware-dragonboard845c.bb b/recipes-bsp/packagegroups/packagegroup-firmware-dragonboard845c.bb
new file mode 100644
index 0000000..66b9005
--- /dev/null
+++ b/recipes-bsp/packagegroups/packagegroup-firmware-dragonboard845c.bb
@@ -0,0 +1,13 @@
+SUMMARY = "Firmware packages for the DragonBoard 845c board"
+
+inherit packagegroup
+
+RRECOMMENDS:${PN} += " \
+ firmware-qcom-dragonboard845c \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'linux-firmware-qcom-adreno-a630 linux-firmware-qcom-sdm845-adreno', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'wifi', 'linux-firmware-ath10k linux-firmware-qcom-sdm845-modem', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', 'linux-firmware-qca linux-firmware-qcom-sdm845-modem', '', d)} \
+ linux-firmware-qcom-sdm845-audio \
+ linux-firmware-qcom-sdm845-compute \
+ linux-firmware-qcom-venus-5.2 \
+"
diff --git a/recipes-bsp/packagegroups/packagegroup-firmware-ifc6410.bb b/recipes-bsp/packagegroups/packagegroup-firmware-ifc6410.bb
new file mode 100644
index 0000000..8b22ef8
--- /dev/null
+++ b/recipes-bsp/packagegroups/packagegroup-firmware-ifc6410.bb
@@ -0,0 +1,14 @@
+SUMMARY = "Firmware packages for the IFC6410 board"
+
+inherit packagegroup
+
+RRECOMMENDS:${PN} += " \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'linux-firmware-qcom-adreno-a3xx', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'wifi', 'linux-firmware-ath6k firmware-ath6kl', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', 'linux-firmware-ar3k', '', d)} \
+ firmware-qcom-ifc6410 \
+ linux-firmware-qcom-apq8064-dsps \
+ linux-firmware-qcom-apq8064-gss \
+ linux-firmware-qcom-apq8064-q6 \
+ linux-firmware-qcom-apq8064-wifi \
+"
diff --git a/recipes-bsp/packagegroups/packagegroup-firmware-ifc6560.bb b/recipes-bsp/packagegroups/packagegroup-firmware-ifc6560.bb
new file mode 100644
index 0000000..8b3507b
--- /dev/null
+++ b/recipes-bsp/packagegroups/packagegroup-firmware-ifc6560.bb
@@ -0,0 +1,14 @@
+SUMMARY = "Firmware packages for the IFC6560 board"
+
+inherit packagegroup
+
+RRECOMMENDS:${PN} += " \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'linux-firmware-qcom-adreno-a530 linux-firmware-qcom-sda660-adreno', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', 'linux-firmware-qca', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'wifi', 'linux-firmware-ath10k', '', d)} \
+ firmware-qcom-ifc6560 \
+ linux-firmware-qcom-sda660-audio \
+ linux-firmware-qcom-sda660-compute \
+ linux-firmware-qcom-sda660-modem \
+ linux-firmware-qcom-sda660-venus \
+"
diff --git a/recipes-bsp/packagegroups/packagegroup-firmware-lenovo-x13s.bb b/recipes-bsp/packagegroups/packagegroup-firmware-lenovo-x13s.bb
new file mode 100644
index 0000000..dc63332
--- /dev/null
+++ b/recipes-bsp/packagegroups/packagegroup-firmware-lenovo-x13s.bb
@@ -0,0 +1,12 @@
+SUMMARY = "Firmware packages for the Lenovo X13s laptop"
+
+inherit packagegroup
+
+RRECOMMENDS:${PN} += " \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'linux-firmware-qcom-sc8280xp-lenovo-x13s-adreno', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'wifi', 'linux-firmware-ath11k', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', 'linux-firmware-qca', '', d)} \
+ linux-firmware-qcom-sc8280xp-lenovo-x13s-audio \
+ linux-firmware-qcom-sc8280xp-lenovo-x13s-compute \
+ linux-firmware-qcom-sc8280xp-lenovo-x13s-sensors \
+"
diff --git a/recipes-bsp/packagegroups/packagegroup-firmware-rb1.bb b/recipes-bsp/packagegroups/packagegroup-firmware-rb1.bb
new file mode 100644
index 0000000..6ff96ab
--- /dev/null
+++ b/recipes-bsp/packagegroups/packagegroup-firmware-rb1.bb
@@ -0,0 +1,13 @@
+SUMMARY = "Firmware packages for the RB1 Robotics platform"
+
+inherit packagegroup
+
+RRECOMMENDS:${PN} += " \
+ firmware-qcom-rb1 \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'linux-firmware-qcom-adreno-a630 linux-firmware-qcom-qcm2290-adreno', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'wifi', 'linux-firmware-ath10k linux-firmware-qcom-qcm2290-wifi ', '', d)} \
+ linux-firmware-lt9611uxc \
+ linux-firmware-qcom-qcm2290-audio \
+ linux-firmware-qcom-qcm2290-modem \
+ linux-firmware-qcom-venus-6.0 \
+"
diff --git a/recipes-bsp/packagegroups/packagegroup-firmware-rb2.bb b/recipes-bsp/packagegroups/packagegroup-firmware-rb2.bb
new file mode 100644
index 0000000..9f622df
--- /dev/null
+++ b/recipes-bsp/packagegroups/packagegroup-firmware-rb2.bb
@@ -0,0 +1,14 @@
+SUMMARY = "Firmware packages for the RB2 Robotics platform"
+
+inherit packagegroup
+
+RRECOMMENDS:${PN} += " \
+ firmware-qcom-rb2 \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'linux-firmware-qcom-adreno-a630 linux-firmware-qcom-qrb4210-adreno', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'wifi', 'linux-firmware-ath10k linux-firmware-qcom-qrb4210-wifi', '', d)} \
+ linux-firmware-lt9611uxc \
+ linux-firmware-qcom-qrb4210-audio \
+ linux-firmware-qcom-qrb4210-compute \
+ linux-firmware-qcom-qrb4210-modem \
+ linux-firmware-qcom-venus-6.0 \
+"
diff --git a/recipes-bsp/packagegroups/packagegroup-firmware-rb5.bb b/recipes-bsp/packagegroups/packagegroup-firmware-rb5.bb
new file mode 100644
index 0000000..b0f0702
--- /dev/null
+++ b/recipes-bsp/packagegroups/packagegroup-firmware-rb5.bb
@@ -0,0 +1,14 @@
+SUMMARY = "Firmware packages for the RB5 Robotics platform"
+
+inherit packagegroup
+
+RRECOMMENDS:${PN} += " \
+ firmware-qcom-rb5 \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'linux-firmware-qcom-adreno-a650 linux-firmware-qcom-sm8250-adreno', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'wifi', 'linux-firmware-ath11k', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', 'linux-firmware-qca', '', d)} \
+ linux-firmware-lt9611uxc \
+ linux-firmware-qcom-sm8250-audio \
+ linux-firmware-qcom-sm8250-compute \
+ linux-firmware-qcom-vpu-1.0 \
+"
diff --git a/recipes-bsp/packagegroups/packagegroup-firmware-sc8180x.bb b/recipes-bsp/packagegroups/packagegroup-firmware-sc8180x.bb
new file mode 100644
index 0000000..0961961
--- /dev/null
+++ b/recipes-bsp/packagegroups/packagegroup-firmware-sc8180x.bb
@@ -0,0 +1,16 @@
+SUMMARY = "Firmware packages for the SC8180X devices"
+
+inherit packagegroup
+
+RRECOMMENDS:${PN} += " \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'linux-firmware-qcom-adreno-a640 linux-firmware-qcom-sc8180x-adreno', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', 'linux-firmware-qca', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'wifi', 'linux-firmware-ath10k', '', d)} \
+ firmware-qcom-sc8180x \
+ linux-firmware-qcom-sc8180x-audio \
+ linux-firmware-qcom-sc8180x-compute \
+ linux-firmware-qcom-sc8180x-ipa \
+ linux-firmware-qcom-sc8180x-modem \
+ linux-firmware-qcom-sc8180x-sensors \
+ linux-firmware-qcom-sc8180x-venus \
+"
diff --git a/recipes-bsp/packagegroups/packagegroup-firmware-sm8150-hdk.bb b/recipes-bsp/packagegroups/packagegroup-firmware-sm8150-hdk.bb
new file mode 100644
index 0000000..935b8b6
--- /dev/null
+++ b/recipes-bsp/packagegroups/packagegroup-firmware-sm8150-hdk.bb
@@ -0,0 +1,15 @@
+SUMMARY = "Firmware packages for the SM8150-HDK (aka HDK855) board"
+
+inherit packagegroup
+
+RRECOMMENDS:${PN} += " \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'linux-firmware-qcom-adreno-a640 linux-firmware-qcom-sm8150-adreno', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', 'linux-firmware-qca', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'wifi', 'linux-firmware-ath11k', '', d)} \
+ firmware-qcom-sm8150-hdk \
+ linux-firmware-qcom-sm8150-audio \
+ linux-firmware-qcom-sm8150-compute \
+ linux-firmware-qcom-sm8150-ipa \
+ linux-firmware-qcom-sm8150-modem \
+ linux-firmware-qcom-sm8150-sensors \
+"
diff --git a/recipes-bsp/packagegroups/packagegroup-firmware-sm8350-hdk.bb b/recipes-bsp/packagegroups/packagegroup-firmware-sm8350-hdk.bb
new file mode 100644
index 0000000..0b1f548
--- /dev/null
+++ b/recipes-bsp/packagegroups/packagegroup-firmware-sm8350-hdk.bb
@@ -0,0 +1,17 @@
+SUMMARY = "Firmware packages for the SM8350-HDK (aka HDK888) board"
+
+inherit packagegroup
+
+RRECOMMENDS:${PN} += " \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'linux-firmware-qcom-adreno-a660', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', 'linux-firmware-qca', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'wifi', 'linux-firmware-ath11k', '', d)} \
+ firmware-qcom-sm8350-hdk \
+ linux-firmware-qcom-sm8350-adreno \
+ linux-firmware-qcom-sm8350-audio \
+ linux-firmware-qcom-sm8350-compute \
+ linux-firmware-qcom-sm8350-ipa \
+ linux-firmware-qcom-sm8350-modem \
+ linux-firmware-qcom-sm8350-sensors \
+ linux-firmware-qcom-vpu-2.0 \
+"
diff --git a/recipes-bsp/packagegroups/packagegroup-firmware-sm8450-hdk.bb b/recipes-bsp/packagegroups/packagegroup-firmware-sm8450-hdk.bb
new file mode 100644
index 0000000..e895ca4
--- /dev/null
+++ b/recipes-bsp/packagegroups/packagegroup-firmware-sm8450-hdk.bb
@@ -0,0 +1,14 @@
+SUMMARY = "Firmware packages for the SM8450-HDK board"
+
+inherit packagegroup
+
+RRECOMMENDS:${PN} += " \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'linux-firmware-qcom-adreno-a730 linux-firmware-qcom-sm8450-adreno', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', 'linux-firmware-qca', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'wifi', 'linux-firmware-ath11k', '', d)} \
+ firmware-qcom-sm8450-hdk \
+ linux-firmware-qcom-sm8450-audio \
+ linux-firmware-qcom-sm8450-compute \
+ linux-firmware-qcom-sm8450-modem \
+ linux-firmware-qcom-sm8450-sensors \
+"