aboutsummaryrefslogtreecommitdiffstats
path: root/recipes-bsp/firmware/firmware-qcom-rb5_1.0.bb
blob: b91442060ab36a804d851c614d63d57df9260984 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
# Provide base URI of NHLOS_Binaries.zip and adreno_1.0_qrb5165_rb5.tar.gz
# files.  Use "file://" if those files are copied into
# recipes-bsp/firmware/files/ directory.
# NHLOS_URI ?= "file://"
# ADRENO_URI ?= "file://"

DESCRIPTION = "QCOM Firmware for Qualcomm Robotics RB5 platform"

LICENSE = "Proprietary"

# There is no license file in the archive
#LIC_FILES_CHKSUM = "file://license.txt;md5="
ERROR_QA_remove = "license-checksum"

NHLOS_ARCHIVE = "NHLOS_Binaries.zip"
ADRENO_ARCHIVE = "adreno_1.0_qrb5165_rb5.tar.gz"

SRC_URI_NHLOS = "${NHLOS_URI}${NHLOS_ARCHIVE}"
SRC_URI_ADRENO = "${ADRENO_URI}${ADRENO_ARCHIVE};unpack=0"

COMPATIBLE_MACHINE = "(sm8250)"
PACKAGE_ARCH = "${MACHINE_ARCH}"

# do_unpack is written in Python, so let's use do_compile here
do_compile() {
    if [ -r ${WORKDIR}/${ADRENO_ARCHIVE} ] ; then
        tar xzf ${WORKDIR}/${ADRENO_ARCHIVE} .//lib/firmware
    fi
}

do_install() {
    if [ -n "${ADRENO_URI}" ] ; then
        install -d  ${D}${nonarch_base_libdir}/firmware/qcom
        install -m 0444 ./lib/firmware/a650_*.* ${D}${nonarch_base_libdir}/firmware/qcom
    else
        install -d ${D}${nonarch_base_libdir}/firmware/qcom
        install -d ${D}${nonarch_base_libdir}/firmware/system

        install -d ${D}${systemd_system_unitdir}
        install -m 0644 ${WORKDIR}/lib-firmware-system.service ${D}${systemd_system_unitdir}

        # Symlink firmware to proper paths.
        for img in a650_gmu.bin a650_sqe.fw a650_zap.mdt a650_zap.elf a650_zap.b00 a650_zap.b01 a650_zap.b02
        do
            ln -s ../system/lib/firmware/${img} ${D}${nonarch_base_libdir}/firmware/qcom
        done
    fi

    if [ -n "${NHLOS_URI}" ] ; then
        cd ${WORKDIR}/NHLOS_Binaries
        install -d  ${D}${nonarch_base_libdir}/firmware/qcom/sm8250
        install -m 0444 adsp.b* adsp.mdt adspr.jsn adspua.jsn ${D}${nonarch_base_libdir}/firmware/qcom/sm8250
        install -m 0444 cdsp.b* cdsp.mdt cdspr.jsn ${D}${nonarch_base_libdir}/firmware/qcom/sm8250
        install -m 0444 slpi.b* slpi.mdt ${D}${nonarch_base_libdir}/firmware/qcom/sm8250
        install -m 0444 venus.b* venus.mdt ${D}${nonarch_base_libdir}/firmware/qcom/sm8250

        install -d ${D}${nonarch_base_libdir}/firmware/ath11k/QCA6390/hw2.0/
        install -m 0444 bdwlan.e04 ${D}${nonarch_base_libdir}/firmware/ath11k/QCA6390/hw2.0/board.bin

        install -m 0444 verinfo/Ver_Info.txt ${D}${nonarch_base_libdir}/firmware/qcom/sm8250
        cd ..
    else
        install -d ${D}${nonarch_base_libdir}/firmware/qcom/sm8250
        install -d ${D}${nonarch_base_libdir}/firmware/modem

        install -d ${D}${systemd_system_unitdir}
        install -m 0644 ${WORKDIR}/lib-firmware-modem.service ${D}${systemd_system_unitdir}

        # Unfortunately Qualcomm firmware partition uses different layout there, so we have to symlink firmware to proper paths.
        # Bettere be safe than sorry. Install more links that are actually present there in case firmware is changed.
        for base in adsp cdsp slpi venus
        do
            for idx in $(seq 0 20)
            do
                ln -s ../../modem/image/$base.b`printf %02d $idx` ${D}${nonarch_base_libdir}/firmware/qcom/sm8250
            done
            ln -s ../../modem/image/${base}.mdt ${D}${nonarch_base_libdir}/firmware/qcom/sm8250
        done
        for img in adspr adspua cdspr
        do
            ln -s ../../modem/image/${img}.jsn ${D}${nonarch_base_libdir}/firmware/qcom/sm8250
        done

        install -d ${D}${nonarch_base_libdir}/firmware/ath11k/QCA6390/hw2.0/
        ln -s ../../../modem/image/bdwlan.e04 ${D}${nonarch_base_libdir}/firmware/ath11k/QCA6390/hw2.0/board.bin
    fi
}

inherit systemd

FILES_${PN} += "${nonarch_base_libdir}/firmware/"
INSANE_SKIP_${PN} += "arch"
INHIBIT_PACKAGE_DEBUG_SPLIT = "1"
INHIBIT_PACKAGE_STRIP = "1"
INHIBIT_DEFAULT_DEPS = "1"

# We list firmware-qcom-rb5 in RRECOMMENDS, so we can not skip the recipe here
# If firmware files are not provided, do not download/package anything
python () {
    if d.getVar("NHLOS_URI") == "" and d.getVar("ADRENO_URI") == "":
        bb.warn("Not packaging RB5 firmware. Please update HNLOS_URI and ADRENO_URI")

    uri = d.getVar("NHLOS_URI")
    if uri != None and uri != "":
        d.appendVar("SRC_URI", " ${SRC_URI_NHLOS}")
        d.appendVarFlag('do_unpack', 'depends', ' unzip-native:do_populate_sysroot')
    else:
        d.appendVar("SRC_URI", " file://lib-firmware-modem.service")
        d.appendVar("SYSTEMD_SERVICE_" + d.getVar("PN"), " lib-firmware-modem.service")

    uri = d.getVar("ADRENO_URI")
    if uri != None and uri != "":
        d.appendVar("SRC_URI", " ${SRC_URI_ADRENO}")
    else:
        d.appendVar("SRC_URI", " file://lib-firmware-system.service")
        d.appendVar("SYSTEMD_SERVICE_" + d.getVar("PN"), " lib-firmware-system.service")
}