diff options
14 files changed, 889 insertions, 21 deletions
diff --git a/recipes-bsp/firmware/firmware-qcom-dragonboard845c_20190529180356-v4.bb b/recipes-bsp/firmware/firmware-qcom-dragonboard845c_20190529180356-v4.bb index 91fb2e1..fbc9187 100644 --- a/recipes-bsp/firmware/firmware-qcom-dragonboard845c_20190529180356-v4.bb +++ b/recipes-bsp/firmware/firmware-qcom-dragonboard845c_20190529180356-v4.bb @@ -3,26 +3,19 @@ DESCRIPTION = "QCOM Firmware for DragonBoard 845c" LICENSE = "Proprietary" LIC_FILES_CHKSUM = "file://LICENSE.qcom.txt;md5=cbbe399f2c983ad51768f4561587f000" -SRC_URI = "https://releases.linaro.org/96boards/dragonboard845c/qualcomm/firmware/RB3_firmware_${PV}.zip \ - git://github.com/alimon/qca-swiss-army-knife \ - file://generate_board-2_json.sh" +SRC_URI = "https://releases.linaro.org/96boards/dragonboard845c/qualcomm/firmware/RB3_firmware_${PV}.zip;subdir=${BP}" SRC_URI[md5sum] = "ad69855a1275547b16d94a1b5405ac62" SRC_URI[sha256sum] = "4289d2f2a7124b104d0274879e702aae9b1e50c42eec3747f8584c6744ef65e3" -SRCREV = "0c01a2abc3e9855b71f0fbea2c335011104d9ec0" COMPATIBLE_MACHINE = "(dragonboard-845c)" PACKAGE_ARCH = "${MACHINE_ARCH}" -DEPENDS += "bash-native" +DEPENDS += "qca-swiss-army-knife-native" inherit python3native -S = "${WORKDIR}" - do_compile() { # Build board-2.bin needed by WiFi - mkdir -p bdf - cp ./38-bdwlan_split/bdwlan*.* bdf - bash generate_board-2_json.sh bdf board-2.json - python3 git/tools/scripts/ath10k/ath10k-bdencoder -c board-2.json -o board-2.bin + 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 } do_install() { diff --git a/recipes-bsp/firmware/firmware-qcom-rb5_20210118133815-v2.bb b/recipes-bsp/firmware/firmware-qcom-rb5_20210118133815-v2.bb index fbd7f4f..da3f19b 100644 --- a/recipes-bsp/firmware/firmware-qcom-rb5_20210118133815-v2.bb +++ b/recipes-bsp/firmware/firmware-qcom-rb5_20210118133815-v2.bb @@ -15,10 +15,18 @@ SRC_URI = " \ SRC_URI[md5sum] = "d9289f59fe4f93ce433707294c9286ca" SRC_URI[sha256sum] = "9d7b42916d83c8f721258175b8d7a9ed758ebe02228d36099e6ea1a2b2a556d3" +DEPENDS += "qca-swiss-army-knife-native" + PACKAGE_ARCH = "${MACHINE_ARCH}" VENUS_FW = "vpu-1.0" +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 @@ -36,7 +44,7 @@ do_install() { install -m 0444 ./33-venus_split/venus.b* ./33-venus_split/venus.mdt ${D}${nonarch_base_libdir}/firmware/qcom/${VENUS_FW} install -d ${D}${nonarch_base_libdir}/firmware/ath11k/QCA6390/hw2.0/ - install -m 0444 ./38-bdwlan_split/bdwlan.e04 ${D}${nonarch_base_libdir}/firmware/ath11k/QCA6390/hw2.0/board.bin + install -m 0444 ${S}/board-2.bin ${D}${nonarch_base_libdir}/firmware/ath11k/QCA6390/hw2.0/board-2.bin install -d ${D}${sysconfdir}/ install -m 0644 LICENSE.qcom.txt ${D}${sysconfdir}/QCOM-LINUX-BOARD-SUPPORT-LICENSE-${PN} @@ -55,3 +63,9 @@ RCONFLICTS_${PN} += "linux-firmware-qcom-adreno-a650" RPROVIDES_${PN} += "linux-firmware-qcom-${VENUS_FW}" RREPLACES_${PN} += "linux-firmware-qcom-${VENUS_FW}" RCONFLICTS_${PN} += "linux-firmware-qcom-${VENUS_FW}" + +inherit update-alternatives + +ALTERNATIVE_${PN} = "qca6390-board2" +ALTERNATIVE_LINK_NAME[qca6390-board2] = "/lib/firmware/ath11k/QCA6390/hw2.0/board-2.bin" +ALTERNATIVE_PRIORITY = "100" diff --git a/recipes-devtools/qca-swiss-army-knife/qca-swiss-army-knife/0001-ath10k-bdencoder-Switch-to-python3.patch b/recipes-devtools/qca-swiss-army-knife/qca-swiss-army-knife/0001-ath10k-bdencoder-Switch-to-python3.patch new file mode 100644 index 0000000..3be757b --- /dev/null +++ b/recipes-devtools/qca-swiss-army-knife/qca-swiss-army-knife/0001-ath10k-bdencoder-Switch-to-python3.patch @@ -0,0 +1,146 @@ +From 71d960adea6e5287ac80e976e58865f59328f6c4 Mon Sep 17 00:00:00 2001 +From: Sven Eckelmann <sven@narfation.org> +Date: Wed, 14 Oct 2020 15:52:02 +0200 +Subject: [PATCH 1/2] ath10k-bdencoder: Switch to python3 + +Python 2.x is EOL since January 2020. The first distributions already +started to drop the interpreters from their next distribution release. Just +add some minor changes to make it python3 compatible. + +Signed-off-by: Sven Eckelmann <sven@narfation.org> +--- + tools/scripts/ath10k/ath10k-bdencoder | 35 ++++++++++++++------------- + 1 file changed, 18 insertions(+), 17 deletions(-) + +diff --git a/tools/scripts/ath10k/ath10k-bdencoder b/tools/scripts/ath10k/ath10k-bdencoder +index 5f41a6be9446..1635e87b6f5f 100755 +--- a/tools/scripts/ath10k/ath10k-bdencoder ++++ b/tools/scripts/ath10k/ath10k-bdencoder +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/python3 + # + # Copyright (c) 2015 Qualcomm Atheros, Inc. + # Copyright (c) 2018, The Linux Foundation. All rights reserved. +@@ -33,7 +33,7 @@ import mailbox + MAX_BUF_LEN = 2000000 + + # the signature length also includes null byte and padding +-ATH10K_BOARD_SIGNATURE = "QCA-ATH10K-BOARD" ++ATH10K_BOARD_SIGNATURE = b"QCA-ATH10K-BOARD" + ATH10K_BOARD_SIGNATURE_LEN = 20 + + PADDING_MAGIC = 0x6d +@@ -83,7 +83,7 @@ def add_ie(buf, offset, id, value): + def xclip(msg): + p = subprocess.Popen(['xclip', '-selection', 'clipboard'], + stdin=subprocess.PIPE) +- p.communicate(msg) ++ p.communicate(msg.encode()) + + + # to workaround annoying python feature of returning negative hex values +@@ -105,7 +105,8 @@ class BoardName(): + def parse_ie(buf, offset, length): + self = BoardName() + fmt = '<%ds' % length +- (self.name, ) = struct.unpack_from(fmt, buf, offset) ++ (name, ) = struct.unpack_from(fmt, buf, offset) ++ self.name = name.decode() + + logging.debug('BoardName.parse_ie(): offset %d length %d self %s' % + (offset, length, self)) +@@ -310,7 +311,7 @@ class BoardContainer: + allnames.append(name) + + def _add_signature(self, buf, offset): +- signature = ATH10K_BOARD_SIGNATURE + '\0' ++ signature = ATH10K_BOARD_SIGNATURE + b'\0' + length = len(signature) + pad_len = padding_needed(length) + length = length + pad_len +@@ -321,7 +322,7 @@ class BoardContainer: + struct.pack_into('<B', padding, i, PADDING_MAGIC) + + fmt = '<%ds%ds' % (len(signature), pad_len) +- struct.pack_into(fmt, buf, offset, signature.encode(), padding.raw) ++ struct.pack_into(fmt, buf, offset, signature, padding.raw) + offset += length + + # make sure ATH10K_BOARD_SIGNATURE_LEN is correct +@@ -445,7 +446,7 @@ def cmd_extract(args): + b['data'] = filename + mapping.append(b) + +- f = open(filename, 'w') ++ f = open(filename, 'wb') + f.write(board.data.data) + f.close() + +@@ -483,11 +484,11 @@ def diff_boardfiles(filename1, filename2, diff): + + container1 = BoardContainer().open(filename1) + (temp1_fd, temp1_pathname) = tempfile.mkstemp() +- os.write(temp1_fd, container1.get_summary(sort=True)) ++ os.write(temp1_fd, container1.get_summary(sort=True).encode()) + + container2 = BoardContainer().open(filename2) + (temp2_fd, temp2_pathname) = tempfile.mkstemp() +- os.write(temp2_fd, container2.get_summary(sort=True)) ++ os.write(temp2_fd, container2.get_summary(sort=True).encode()) + + # this function is used both with --diff and --diffstat + if diff: +@@ -509,7 +510,7 @@ def diff_boardfiles(filename1, filename2, diff): + print('Failed to run wdiff: %s' % (e)) + return 1 + +- result += '%s\n' % (output) ++ result += '%s\n' % (output.decode()) + + # create simple statistics about changes in board images + +@@ -577,7 +578,7 @@ def cmd_add_board(args): + new_filename = args.add_board[1] + new_names = args.add_board[2:] + +- f = open(new_filename, 'r') ++ f = open(new_filename, 'rb') + new_data = f.read() + f.close() + +@@ -620,15 +621,15 @@ def cmd_add_mbox(args): + name = filename.rstrip(BIN_SUFFIX) + board_files[name] = part.get_payload(decode=True) + +- print 'Found mail "%s" with %d board files' % (msg['Subject'], +- len(board_files)) ++ print('Found mail "%s" with %d board files' % (msg['Subject'], ++ len(board_files))) + + # copy the original file for diff + (temp_fd, temp_pathname) = tempfile.mkstemp() + shutil.copyfile(board_filename, temp_pathname) + + container = BoardContainer.open(board_filename) +- for name, data in board_files.iteritems(): ++ for name, data in board_files.items(): + names = [name] + container.add_board(data, names) + +@@ -650,9 +651,9 @@ def cmd_add_mbox(args): + + os.remove(temp_pathname) + +- print '----------------------------------------------' +- print applied_msg +- print '----------------------------------------------' ++ print('----------------------------------------------') ++ print(applied_msg) ++ print('----------------------------------------------') + + xclip(applied_msg) + +-- +2.29.2 + diff --git a/recipes-devtools/qca-swiss-army-knife/qca-swiss-army-knife/0001-read-powers-port-to-python3.patch b/recipes-devtools/qca-swiss-army-knife/qca-swiss-army-knife/0001-read-powers-port-to-python3.patch new file mode 100644 index 0000000..5c69e81 --- /dev/null +++ b/recipes-devtools/qca-swiss-army-knife/qca-swiss-army-knife/0001-read-powers-port-to-python3.patch @@ -0,0 +1,212 @@ +From 4ffa07ff681c628750ba7c66e8a97f5f57b35fa0 Mon Sep 17 00:00:00 2001 +From: Dmitry Baryshkov <dbaryshkov@gmail.com> +Date: Thu, 17 Dec 2020 00:37:39 +0300 +Subject: [PATCH 1/3] read-powers: port to python3 + +Signed-off-by: Dmitry Baryshkov <dbaryshkov@gmail.com> +--- + tools/scripts/ath9k/read-powers | 74 ++++++++++++++++----------------- + 1 file changed, 37 insertions(+), 37 deletions(-) + +diff --git a/tools/scripts/ath9k/read-powers b/tools/scripts/ath9k/read-powers +index 1d430e78b695..535747db8f0b 100755 +--- a/tools/scripts/ath9k/read-powers ++++ b/tools/scripts/ath9k/read-powers +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/env python3 + # + # Copyright (c) 2010 Atheros Communications Inc. + # +@@ -117,7 +117,7 @@ def powertx_rate1 (val): + ofdm_rates["12"] = (val >> 16) & 0xff + ofdm_rates["18"] = (val >> 24) & 0xff + +- print "%010s: 0x%08x" % ("Rate 1", val) ++ print("%010s: 0x%08x" % ("Rate 1", val)) + + def powertx_rate2 (val): + ofdm_rates["24"] = (val >> 0) & 0xff; +@@ -125,7 +125,7 @@ def powertx_rate2 (val): + ofdm_rates["48"] = (val >> 16) & 0xff + ofdm_rates["54"] = (val >> 24) & 0xff + +- print "%010s: 0x%08x" % ("Rate 2", val) ++ print("%010s: 0x%08x" % ("Rate 2", val)) + + def powertx_rate3 (val): + cck_rates["1L"] = (val >> 0) & 0xff; +@@ -134,7 +134,7 @@ def powertx_rate3 (val): + cck_rates["2L"] = (val >> 16) & 0xff; + cck_rates["2S"] = (val >> 24) & 0xff; + +- print "%010s: 0x%08x" % ("Rate 3", val) ++ print("%010s: 0x%08x" % ("Rate 3", val)) + + def powertx_rate4 (val): + cck_rates["5.5L"] = (val >> 0) & 0xff; +@@ -142,7 +142,7 @@ def powertx_rate4 (val): + cck_rates["11L"] = (val >> 16) & 0xff + cck_rates["11S"] = (val >> 24) & 0xff + +- print "%010s: 0x%08x" % ("Rate 4", val) ++ print("%010s: 0x%08x" % ("Rate 4", val)) + + def powertx_rate5 (val): + mcs_rates_ht20["0"] = (val >> 0) & 0xff; +@@ -165,7 +165,7 @@ def powertx_rate5 (val): + + mcs_rates_ht20["5"] = (val >> 24) & 0xff + +- print "%010s: 0x%08x" % ("Rate 5", val) ++ print("%010s: 0x%08x" % ("Rate 5", val)) + + def powertx_rate6 (val): + mcs_rates_ht20["6"] = (val >> 0) & 0xff; +@@ -173,7 +173,7 @@ def powertx_rate6 (val): + mcs_rates_ht20["12"] = (val >> 16) & 0xff + mcs_rates_ht20["13"] = (val >> 24) & 0xff + +- print "%010s: 0x%08x" % ("Rate 6", val) ++ print("%010s: 0x%08x" % ("Rate 6", val)) + + def powertx_rate7 (val): + mcs_rates_ht40["0"] = (val >> 0) & 0xff; +@@ -196,7 +196,7 @@ def powertx_rate7 (val): + + mcs_rates_ht40["5"] = (val >> 24) & 0xff + +- print "%010s: 0x%08x" % ("Rate 7", val) ++ print("%010s: 0x%08x" % ("Rate 7", val)) + + def powertx_rate8 (val): + mcs_rates_ht40["6"] = (val >> 0) & 0xff; +@@ -204,7 +204,7 @@ def powertx_rate8 (val): + mcs_rates_ht40["12"] = (val >> 16) & 0xff + mcs_rates_ht40["13"] = (val >> 24) & 0xff + +- print "%010s: 0x%08x" % ("Rate 8", val) ++ print("%010s: 0x%08x" % ("Rate 8", val)) + + # What is 40 dup CCK, 40 dup OFDM, 20 ext cck, 20 ext ODFM ? + def powertx_rate9 (val): +@@ -213,7 +213,7 @@ def powertx_rate9 (val): + ext_dup_rates["20 ext CCK"] = (val >> 16) & 0xff + ext_dup_rates["20 ext OFDM"] = (val >> 24) & 0xff + +- print "%010s: 0x%08x" % ("Rate 9", val) ++ print("%010s: 0x%08x" % ("Rate 9", val)) + + def powertx_rate10 (val): + mcs_rates_ht20["14"] = (val >> 0) & 0xff; +@@ -221,7 +221,7 @@ def powertx_rate10 (val): + mcs_rates_ht20["20"] = (val >> 16) & 0xff + mcs_rates_ht20["21"] = (val >> 24) & 0xff + +- print "%010s: 0x%08x" % ("Rate 10", val) ++ print("%010s: 0x%08x" % ("Rate 10", val)) + + def powertx_rate11 (val): + mcs_rates_ht20["22"] = (val >> 0) & 0xff; +@@ -230,7 +230,7 @@ def powertx_rate11 (val): + mcs_rates_ht40["22"] = (val >> 16) & 0xff + mcs_rates_ht40["23"] = (val >> 24) & 0xff + +- print "%010s: 0x%08x" % ("Rate 11", val) ++ print("%010s: 0x%08x" % ("Rate 11", val)) + + def powertx_rate12 (val): + mcs_rates_ht40["14"] = (val >> 0) & 0xff; +@@ -238,7 +238,7 @@ def powertx_rate12 (val): + mcs_rates_ht40["20"] = (val >> 16) & 0xff + mcs_rates_ht40["21"] = (val >> 24) & 0xff + +- print "%010s: 0x%08x" % ("Rate 12", val) ++ print("%010s: 0x%08x" % ("Rate 12", val)) + + registers = { + "0x00a3c0" : powertx_rate1, +@@ -256,43 +256,43 @@ registers = { + } + + def process_cck_rates(): +- print "CCK Rates" +- print "======================" +- for rate, double_dbm in cck_rates.iteritems(): ++ print("CCK Rates") ++ print("======================") ++ for rate, double_dbm in cck_rates.items(): + dbm = "%.2f dBm" % (double_dbm / 2) +- print "%010s %010s" % (rate + " Mbps", dbm) ++ print("%010s %010s" % (rate + " Mbps", dbm)) + + def process_ofdm_rates(): +- print "OFDM Rates" +- print "======================" +- for rate, double_dbm in sorted(map(lambda (k,v): (int(k,0), v), ofdm_rates.iteritems())): ++ print("OFDM Rates") ++ print("======================") ++ for rate, double_dbm in sorted(ofdm_rates.items(), key=lambda i: int(i[0], 0)): + rate_s = "%s" % rate + dbm = "%.02f dBm" % (double_dbm / 2) +- print "%010s %010s" % (rate_s + " Mbps", dbm) ++ print("%010s %010s" % (rate_s + " Mbps", dbm)) + + def process_mcs_ht20_rates(): +- print "MCS20 Rates" +- print "======================" +- for rate, double_dbm in sorted(map(lambda (k,v): (int(k,0), v), mcs_rates_ht20.iteritems())): ++ print("MCS20 Rates") ++ print("======================") ++ for rate, double_dbm in sorted(mcs_rates_ht20.items(), key=lambda i: int(i[0], 0)): + rate_s = "%s" % rate + dbm = "%.02f dBm" % (double_dbm / 2) +- print "%010s %010s" % ("MCS" + rate_s, dbm) ++ print("%010s %010s" % ("MCS" + rate_s, dbm)) + + + def process_mcs_ht40_rates(): +- print "MCS40 Rates" +- print "======================" +- for rate, double_dbm in sorted(map(lambda (k,v): (int(k,0), v), mcs_rates_ht40.iteritems())): ++ print("MCS40 Rates") ++ print("======================") ++ for rate, double_dbm in sorted(mcs_rates_ht40.items(), key=lambda i: int(i[0], 0)): + rate_s = "%s" % rate + dbm = "%.2f dBm" % (double_dbm / 2) +- print "%010s %010s" % ("MCS" + rate_s, dbm) ++ print("%010s %010s" % ("MCS" + rate_s, dbm)) + + def process_ext_dup_rates(): +- print "EXT-DUP Rates" +- print "==========================" +- for rate, double_dbm in ext_dup_rates.iteritems(): ++ print("EXT-DUP Rates") ++ print("==========================") ++ for rate, double_dbm in ext_dup_rates.items(): + dbm = "%.2f dBm" % (double_dbm / 2) +- print "%015s %010s" % (rate, dbm) ++ print("%015s %010s" % (rate, dbm)) + + def print_power_reg (reg, val): + if not reg in map(lambda x: int(x, 0), registers.keys()): +@@ -300,12 +300,12 @@ def print_power_reg (reg, val): + registers.get("0x%06x" % reg)(val) + + try: +- print "Power register" +- print "======================" ++ print("Power register") ++ print("======================") + for line in sys.stdin.readlines(): +- reg, val = map(lambda x: int(x, 0), string.split(line)) ++ reg, val = map(lambda x: int(x, 0), line.split()) + print_power_reg(reg, val) +- print "-------------------------------------" ++ print("-------------------------------------") + + process_cck_rates() + process_ofdm_rates() +-- +2.29.2 + diff --git a/recipes-devtools/qca-swiss-army-knife/qca-swiss-army-knife/0002-ath10k-bdencoder-Add-option-to-switch-to-ath11k-mode.patch b/recipes-devtools/qca-swiss-army-knife/qca-swiss-army-knife/0002-ath10k-bdencoder-Add-option-to-switch-to-ath11k-mode.patch new file mode 100644 index 0000000..b5aa1c8 --- /dev/null +++ b/recipes-devtools/qca-swiss-army-knife/qca-swiss-army-knife/0002-ath10k-bdencoder-Add-option-to-switch-to-ath11k-mode.patch @@ -0,0 +1,116 @@ +From 68fd447a4d1e137307927fb9c0d9e05c6559bc96 Mon Sep 17 00:00:00 2001 +From: Sven Eckelmann <sven@narfation.org> +Date: Wed, 14 Oct 2020 17:26:19 +0200 +Subject: [PATCH 2/2] ath10k-bdencoder: Add option to switch to ath11k mode + +The board-2.bin also exists on ath11k but there is no encoder available at +the moment. Just use an option to change the two positions where the ath11k +differs from the ath10k board-2.bin + +Signed-off-by: Sven Eckelmann <sven@narfation.org> +[DB: fixed firmware url] +Signed-off-by: Dmitry Baryshkov <dbaryshkov@gmail.com> +--- + tools/scripts/ath10k/ath10k-bdencoder | 35 ++++++++++++++++++++++++--- + 1 file changed, 31 insertions(+), 4 deletions(-) + +diff --git a/tools/scripts/ath10k/ath10k-bdencoder b/tools/scripts/ath10k/ath10k-bdencoder +index 1635e87b6f5f..d613f6340bf9 100755 +--- a/tools/scripts/ath10k/ath10k-bdencoder ++++ b/tools/scripts/ath10k/ath10k-bdencoder +@@ -34,6 +34,8 @@ MAX_BUF_LEN = 2000000 + + # the signature length also includes null byte and padding + ATH10K_BOARD_SIGNATURE = b"QCA-ATH10K-BOARD" ++ATH11K_BOARD_SIGNATURE = b"QCA-ATH11K-BOARD" ++BOARD_SIGNATURE = b'' + ATH10K_BOARD_SIGNATURE_LEN = 20 + + PADDING_MAGIC = 0x6d +@@ -44,6 +46,7 @@ TYPE_LENGTH_SIZE = 8 + BIN_SUFFIX = '.bin' + + ATH10K_FIRMWARE_URL = 'https://github.com/kvalo/ath10k-firmware/commit' ++ATH11K_FIRMWARE_URL = 'https://github.com/kvalo/ath11k-firmware/commit' + + ATH10K_BD_IE_BOARD = 0 + ATH10K_BD_IE_BOARD_EXT = 1 +@@ -311,7 +314,7 @@ class BoardContainer: + allnames.append(name) + + def _add_signature(self, buf, offset): +- signature = ATH10K_BOARD_SIGNATURE + b'\0' ++ signature = BOARD_SIGNATURE + b'\0' + length = len(signature) + pad_len = padding_needed(length) + length = length + pad_len +@@ -343,10 +346,10 @@ class BoardContainer: + + offset = 0 + +- fmt = '<%dsb' % (len(ATH10K_BOARD_SIGNATURE)) ++ fmt = '<%dsb' % (len(BOARD_SIGNATURE)) + (signature, null) = struct.unpack_from(fmt, buf, offset) + +- if signature != ATH10K_BOARD_SIGNATURE or null != 0: ++ if signature != BOARD_SIGNATURE or null != 0: + print("invalid signature found in %s" % name) + return 1 + +@@ -600,6 +603,11 @@ def git_get_head_id(): + + + def cmd_add_mbox(args): ++ if args.mode == 10: ++ firmware_url = ATH10K_FIRMWARE_URL ++ elif args.mode == 11: ++ firmware_url = ATH11K_FIRMWARE_URL ++ + board_filename = args.add_mbox[0] + mbox_filename = args.add_mbox[1] + +@@ -658,8 +666,19 @@ def cmd_add_mbox(args): + xclip(applied_msg) + + ++def mode_parse(v): ++ if v == 'ath10k': ++ return 10 ++ elif v == 'ath11k': ++ return 11 ++ else: ++ raise argparse.ArgumentTypeError('ath10k or ath11k expected.') ++ ++ + def main(): +- description = '''ath10k board-N.bin files manegement tool ++ global BOARD_SIGNATURE ++ ++ description = '''ath10k/ath11k board-N.bin files management tool + + ath10k-bdencoder is for creating (--create), listing (--info) and + comparing (--diff, --diffstat) ath10k board-N.bin files. The +@@ -709,12 +728,20 @@ can use --extract switch to see examples from real board-N.bin files. + parser.add_argument("-o", "--output", metavar="BOARD_FILE", + help='name of the output file, otherwise the default is: %s' % + (DEFAULT_BOARD_FILE)) ++ parser.add_argument("-m", "--mode", metavar='MODE', ++ help='select between ath10k and ath11k mode (default: ath10k)', ++ default=10, type=mode_parse) + + args = parser.parse_args() + + if args.verbose: + logging.basicConfig(level=logging.DEBUG) + ++ if args.mode == 10: ++ BOARD_SIGNATURE = ATH10K_BOARD_SIGNATURE ++ elif args.mode == 11: ++ BOARD_SIGNATURE = ATH11K_BOARD_SIGNATURE ++ + if args.create: + return cmd_create(args) + elif args.extract: +-- +2.29.2 + diff --git a/recipes-devtools/qca-swiss-army-knife/qca-swiss-army-knife/0002-ath10k-fwencoder-port-to-python3.patch b/recipes-devtools/qca-swiss-army-knife/qca-swiss-army-knife/0002-ath10k-fwencoder-port-to-python3.patch new file mode 100644 index 0000000..1c3c648 --- /dev/null +++ b/recipes-devtools/qca-swiss-army-knife/qca-swiss-army-knife/0002-ath10k-fwencoder-port-to-python3.patch @@ -0,0 +1,272 @@ +From 3d23932fd812e1ec7a989ca7e594fcf04d42c8a6 Mon Sep 17 00:00:00 2001 +From: Dmitry Baryshkov <dbaryshkov@gmail.com> +Date: Thu, 17 Dec 2020 01:32:47 +0300 +Subject: [PATCH 2/3] ath10k-fwencoder: port to python3 + +Signed-off-by: Dmitry Baryshkov <dbaryshkov@gmail.com> +--- + tools/scripts/ath10k/ath10k-fwencoder | 70 +++++++++++++-------------- + 1 file changed, 35 insertions(+), 35 deletions(-) + +diff --git a/tools/scripts/ath10k/ath10k-fwencoder b/tools/scripts/ath10k/ath10k-fwencoder +index 6934a694e832..bbbe0344f014 100755 +--- a/tools/scripts/ath10k/ath10k-fwencoder ++++ b/tools/scripts/ath10k/ath10k-fwencoder +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/env python3 + # + # Copyright (c) 2012-2015 Qualcomm Atheros, Inc. + # +@@ -30,7 +30,7 @@ import hashlib + + DEFAULT_FW_API_VERSION = 4 + +-ATH10K_SIGNATURE = "QCA-ATH10K" ++ATH10K_SIGNATURE = b"QCA-ATH10K" + MAX_LEN = 2000000 + + ATH10K_FW_IE_FW_VERSION = 0 +@@ -327,7 +327,7 @@ class Ath10kFirmwareContainer(object): + elif is_int(s): + version = s + else: +- print 'Error: Invalid HTT OP version: %s' % s ++ print('Error: Invalid HTT OP version: %s' % s) + return 1 + + self.htt_op_version = version +@@ -337,7 +337,7 @@ class Ath10kFirmwareContainer(object): + + # find value from the dict + try: +- name = [key for key, value in htt_op_version_map.iteritems() ++ name = [key for key, value in htt_op_version_map.items() + if value == version][0] + except IndexError: + name = str(version) +@@ -353,7 +353,7 @@ class Ath10kFirmwareContainer(object): + elif is_int(s): + version = s + else: +- print 'Error: Invalid WMI OP version: %s' % s ++ print('Error: Invalid WMI OP version: %s' % s) + return 1 + + self.wmi_op_version = version +@@ -363,7 +363,7 @@ class Ath10kFirmwareContainer(object): + + # find value from the dict + try: +- name = [key for key, value in wmi_op_version_map.iteritems() ++ name = [key for key, value in wmi_op_version_map.items() + if value == version][0] + except IndexError: + name = str(version) +@@ -376,7 +376,7 @@ class Ath10kFirmwareContainer(object): + enabled = [] + for capa in self.features: + if capa not in feature_map: +- print "Error: '%s' not found from the feature map" % capa ++ print("Error: '%s' not found from the feature map" % capa) + return 1 + + enabled.append(feature_map[capa]) +@@ -434,7 +434,7 @@ class Ath10kFirmwareContainer(object): + self.fw_version = fw_version + # reserve one byte for null + if len(self.fw_version) > ETHTOOL_FWVERS_LEN - 1: +- print 'Firmware version string too long: %d' % (len(self.fw_version)) ++ print('Firmware version string too long: %d' % (len(self.fw_version))) + return 1 + + def get_fw_version(self): +@@ -500,7 +500,7 @@ class Ath10kFirmwareContainer(object): + elif e == ATH10K_FW_IE_FW_CODE_SWAP_IMAGE: + self.fw_code_swap_image = c.elements[e] + else: +- print "Unknown IE: ", e ++ print("Unknown IE: ", e) + + def save(self, filename): + self.container = FirmwareContainer(ATH10K_SIGNATURE) +@@ -585,7 +585,7 @@ def write_file(filename, buf): + def info(options, args): + + if len(args) != 1: +- print 'Filename missing' ++ print('Filename missing') + return 1 + + filename = args[0] +@@ -593,13 +593,13 @@ def info(options, args): + c = Ath10kFirmwareContainer() + c.load(filename) + +- print c.get_summary() ++ print(c.get_summary()) + + + def dump(options, args): + + if len(args) != 1: +- print 'Filename missing' ++ print('Filename missing') + return 1 + + filename = args[0] +@@ -607,34 +607,34 @@ def dump(options, args): + c = Ath10kFirmwareContainer() + c.load(filename) + +- print "ath10k-fwencoder --create \\" ++ print("ath10k-fwencoder --create \\") + + if c.get_fw_version(): +- print "--firmware-version=%s \\" % c.get_fw_version() ++ print("--firmware-version=%s \\" % c.get_fw_version()) + + if c.get_timestamp() and options.show_timestamp: +- print "--timestamp=%u \\" % c.get_timestamp() ++ print("--timestamp=%u \\" % c.get_timestamp()) + + if c.get_features(): +- print "--features=%s \\" % c.get_features() ++ print("--features=%s \\" % c.get_features()) + + if c.get_fw_image(): + name = "athwlan.bin" +- print "--firmware=%s \\" % name ++ print("--firmware=%s \\" % name) + + if c.get_otp_image(): + name = "otp.bin" +- print "--otp=%s \\" % name ++ print("--otp=%s \\" % name) + + if c.get_wmi_op_version(): +- print '--set-wmi-op-version=%s \\' % c.get_wmi_op_version() ++ print('--set-wmi-op-version=%s \\' % c.get_wmi_op_version()) + + if c.get_htt_op_version(): +- print '--set-htt-op-version=%s \\' % (c.get_htt_op_version()) ++ print('--set-htt-op-version=%s \\' % (c.get_htt_op_version())) + + if c.get_fw_code_swap_image(): + name = "athwlan.codeswap.bin" +- print "--firmware-codeswap=%s \\" % name ++ print("--firmware-codeswap=%s \\" % name) + + print + +@@ -642,7 +642,7 @@ def dump(options, args): + def extract(options, args): + + if len(args) != 1: +- print 'Filename missing' ++ print('Filename missing') + return 1 + + filename = args[0] +@@ -653,24 +653,24 @@ def extract(options, args): + if c.get_fw_image(): + name = "athwlan.bin" + write_file(name, c.get_fw_image()) +- print '%s extracted: %d B' % (name, len(c.get_fw_image())) ++ print('%s extracted: %d B' % (name, len(c.get_fw_image()))) + + if c.get_otp_image(): + name = "otp.bin" + write_file(name, c.get_otp_image()) +- print '%s extracted: %d B' % (name, len(c.get_otp_image())) ++ print('%s extracted: %d B' % (name, len(c.get_otp_image()))) + + if c.get_fw_code_swap_image(): + name = "athwlan.codeswap.bin" + write_file(name, c.get_fw_code_swap_image()) +- print '%s extracted: %d B' % (name, len(c.get_fw_code_swap_image())) ++ print('%s extracted: %d B' % (name, len(c.get_fw_code_swap_image()))) + + print + + + def modify(options, args): + if len(args) != 1: +- print 'Filename missing' ++ print('Filename missing') + return 1 + + filename = args[0] +@@ -710,7 +710,7 @@ def modify(options, args): + + file_len = c.save(filename) + +- print '%s modified: %d B' % (filename, file_len) ++ print('%s modified: %d B' % (filename, file_len)) + + + def create(options): +@@ -752,25 +752,25 @@ def create(options): + + file_len = c.save(output) + +- print '%s created: %d B' % (output, file_len) ++ print('%s created: %d B' % (output, file_len)) + + + def cmd_crc32(options, args): + if len(args) != 1: +- print 'Filename missing' ++ print('Filename missing') + return 1 + + filename = args[0] + + f = open(filename, 'r') + buf = f.read() +- print '%08x' % (_crc32(buf)) ++ print('%08x' % (_crc32(buf))) + f.close() + + + def cmd_diff(options, args): + if len(args) != 2: +- print 'Usage: ath10k-fwencoder --diff FILE FILE' ++ print('Usage: ath10k-fwencoder --diff FILE FILE') + return 1 + + filename1 = args[0] +@@ -804,7 +804,7 @@ def cmd_diff(options, args): + logger.error('Failed to run wdiff: %s' % (e)) + return 1 + +- print output ++ print(output) + + os.close(temp1_fd) + os.close(temp2_fd) +@@ -896,10 +896,10 @@ def main(): + try: + return create(options) + except FWEncoderError as e: +- print 'Create failed: %s' % e ++ print('Create failed: %s' % e) + sys.exit(2) + except Exception as e: +- print 'Create failed: %s' % e ++ print('Create failed: %s' % e) + traceback.print_exc() + sys.exit(3) + elif options.dump: +@@ -915,7 +915,7 @@ def main(): + elif options.diff: + return cmd_diff(options, args) + else: +- print 'Action command missing' ++ print('Action command missing') + return 1 + + if __name__ == "__main__": +-- +2.29.2 + diff --git a/recipes-devtools/qca-swiss-army-knife/qca-swiss-army-knife/0003-scripts-port-to-python3.patch b/recipes-devtools/qca-swiss-army-knife/qca-swiss-army-knife/0003-scripts-port-to-python3.patch new file mode 100644 index 0000000..bfdad9f --- /dev/null +++ b/recipes-devtools/qca-swiss-army-knife/qca-swiss-army-knife/0003-scripts-port-to-python3.patch @@ -0,0 +1,34 @@ +From 26ca6eff75f78fec9efff4a69fca7103b97f1ab1 Mon Sep 17 00:00:00 2001 +From: Dmitry Baryshkov <dbaryshkov@gmail.com> +Date: Thu, 17 Dec 2020 01:33:01 +0300 +Subject: [PATCH 3/3] scripts: port to python3 + +Signed-off-by: Dmitry Baryshkov <dbaryshkov@gmail.com> +--- + tools/scripts/ath10k/ath10k-fw-repo | 2 +- + tools/scripts/ath11k/ath11k-fw-repo | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/tools/scripts/ath10k/ath10k-fw-repo b/tools/scripts/ath10k/ath10k-fw-repo +index 00b6d859209a..4cf044c04c5a 100755 +--- a/tools/scripts/ath10k/ath10k-fw-repo ++++ b/tools/scripts/ath10k/ath10k-fw-repo +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/env python3 + # + # Copyright (c) 2016 Qualcomm Atheros, Inc. + # Copyright (c) 2018, The Linux Foundation. All rights reserved. +diff --git a/tools/scripts/ath11k/ath11k-fw-repo b/tools/scripts/ath11k/ath11k-fw-repo +index 1ac6023aaf12..51ca33c5dd7b 100755 +--- a/tools/scripts/ath11k/ath11k-fw-repo ++++ b/tools/scripts/ath11k/ath11k-fw-repo +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/env python3 + # + # Copyright (c) 2016 Qualcomm Atheros, Inc. + # Copyright (c) 2018,2020 The Linux Foundation. All rights reserved. +-- +2.29.2 + diff --git a/recipes-bsp/firmware/firmware-qcom-dragonboard845c/generate_board-2_json.sh b/recipes-devtools/qca-swiss-army-knife/qca-swiss-army-knife/ath10k-generate-board-2_json.sh index 3a1d532..373689f 100644 --- a/recipes-bsp/firmware/firmware-qcom-dragonboard845c/generate_board-2_json.sh +++ b/recipes-devtools/qca-swiss-army-knife/qca-swiss-army-knife/ath10k-generate-board-2_json.sh @@ -1,20 +1,27 @@ +#!/bin/sh + JSON="$2" iter=0 echo "[" > "${JSON}" for file in $1/bdwlan.*; do - [[ $file == *.txt ]] && continue + case `basename "${file}"` in + *.txt) + continue + ;; + bdwlan.bin) + file_ext="ff" + ;; + bdwlan.*) + file_ext="$(basename "${file}" | sed -E 's:^.*\.b?0*([0-9a-f]+)$:\1:')" + ;; + esac iter=$((iter+1)) [ $iter -ne 1 ] && echo " }," >> "${JSON}" echo " {" >> "${JSON}" echo " \"data\": \"$file\"," >> "${JSON}" - if [[ $file == */bdwlan.bin ]]; then - file_ext="ff" - else - file_ext="$(printf '%x\n' "$(basename "${file}" | sed -E 's:^.*\.b?([0-9a-f]*)$:0x\1:')")" - fi echo " \"names\": [\"bus=snoc,qmi-board-id=${file_ext}\"]" >> "${JSON}" done diff --git a/recipes-devtools/qca-swiss-army-knife/qca-swiss-army-knife/ath11k-generate-board-2_json.sh b/recipes-devtools/qca-swiss-army-knife/qca-swiss-army-knife/ath11k-generate-board-2_json.sh new file mode 100644 index 0000000..0e3cc10 --- /dev/null +++ b/recipes-devtools/qca-swiss-army-knife/qca-swiss-army-knife/ath11k-generate-board-2_json.sh @@ -0,0 +1,23 @@ +#!/bin/sh + +JSON="$2" + +iter=0 +echo "[" > "${JSON}" +for file in $1/bdwlan.elf $1/bdwlan.e* ; do + iter=$((iter+1)) + [ $iter -ne 1 ] && echo " }," >> "${JSON}" + + echo " {" >> "${JSON}" + echo " \"data\": \"$file\"," >> "${JSON}" + if [ `basename $file` = "bdwlan.elf" ]; then + file_ext="255" + else + file_ext="$(( $(basename "${file}" | sed -E 's:^.*\.e?([0-9a-f]*)$:0x\1:') ))" + fi + echo " \"names\": [\"bus=pci,qmi-chip-id=0,qmi-board-id=${file_ext}\"]" >> "${JSON}" +done + +echo " }" >> "${JSON}" +echo "]" >> "${JSON}" + diff --git a/recipes-devtools/qca-swiss-army-knife/qca-swiss-army-knife_git.bb b/recipes-devtools/qca-swiss-army-knife/qca-swiss-army-knife_git.bb new file mode 100644 index 0000000..6a31f7a --- /dev/null +++ b/recipes-devtools/qca-swiss-army-knife/qca-swiss-army-knife_git.bb @@ -0,0 +1,32 @@ +SUMMARY = "A set of utilities to help QCA driver development." +HOMEPAGE = "https://github.com/qca/qca-swiss-army-knife" +SECTION = "devel" + +LICENSE = "ISC" +LIC_FILES_CHKSUM = "file://LICENSE;md5=884c3f3a874b2a0cfa283c7db0e5d604" + +SRCREV = "5ede3cc07e9a52f115101c28f833242b772eeaab" +SRC_URI = " \ + git://github.com/qca/${BPN}.git;branch=master;protocol=https \ + file://0001-ath10k-bdencoder-Switch-to-python3.patch \ + file://0002-ath10k-bdencoder-Add-option-to-switch-to-ath11k-mode.patch \ + file://0001-read-powers-port-to-python3.patch \ + file://0002-ath10k-fwencoder-port-to-python3.patch \ + file://0003-scripts-port-to-python3.patch \ + file://ath10k-generate-board-2_json.sh \ + file://ath11k-generate-board-2_json.sh \ +" + +PV = "0.0+${SRCPV}" +S = "${WORKDIR}/git" + +do_install () { + install -d ${D}/${bindir} + install -m 0755 tools/scripts/*/* ${D}/${bindir} + install -m 0755 ${WORKDIR}/ath10k-generate-board-2_json.sh ${D}/${bindir} + install -m 0755 ${WORKDIR}/ath11k-generate-board-2_json.sh ${D}/${bindir} +} + +BBCLASSEXTEND = "native nativesdk" + +RDEPENDS_${PN} += "perl python3-core" diff --git a/recipes-kernel/linux-firmware/linux-firmware_%.bbappend b/recipes-kernel/linux-firmware/linux-firmware_%.bbappend new file mode 100644 index 0000000..3679a64 --- /dev/null +++ b/recipes-kernel/linux-firmware/linux-firmware_%.bbappend @@ -0,0 +1,4 @@ +inherit update-alternatives + +ALTERNATIVE_${PN}-ath11k = "qca6390-board2" +ALTERNATIVE_LINK_NAME[qca6390-board2] = "/lib/firmware/ath11k/QCA6390/hw2.0/board-2.bin" diff --git a/recipes-kernel/linux/linux-linaro-qcomlt_5.11.bb b/recipes-kernel/linux/linux-linaro-qcomlt_5.11.bb new file mode 100644 index 0000000..31ebe58 --- /dev/null +++ b/recipes-kernel/linux/linux-linaro-qcomlt_5.11.bb @@ -0,0 +1,15 @@ +# Copyright (C) 2014-2020 Linaro +# Released under the MIT license (see COPYING.MIT for the terms) + +DESCRIPTION = "Linaro Qualcomm Landing team 5.11 Kernel" +LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46" + +require recipes-kernel/linux/linux-linaro-qcom.inc +require recipes-kernel/linux/linux-qcom-bootimg.inc + +LOCALVERSION ?= "-linaro-lt-qcom" + +SRCBRANCH = "release/rb5/qcomlt-5.11" +SRCREV = "c53a93b858f8166115bbe728a9a2a39bf7d0a91d" + +COMPATIBLE_MACHINE = "(sm8250)" diff --git a/recipes-support/qrtr/qrtr_git.bb b/recipes-support/qrtr/qrtr_git.bb index 9daf6ba..def23be 100644 --- a/recipes-support/qrtr/qrtr_git.bb +++ b/recipes-support/qrtr/qrtr_git.bb @@ -7,10 +7,10 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=15329706fbfcb5fc5edcc1bc7c139da5" inherit systemd -SRCREV = "983b223423f3ec36f231455b6a93bc2a10921794" +SRCREV = "9dc7a88548c27983e06465d3fbba2ba27d4bc050" SRC_URI = "git://github.com/andersson/${BPN}.git;branch=master;protocol=https" -PV = "0.0+${SRCPV}" +PV = "0.3+${SRCPV}" S = "${WORKDIR}/git" diff --git a/recipes-support/rmtfs/rmtfs_git.bb b/recipes-support/rmtfs/rmtfs_git.bb index 08169fc..249e21e 100644 --- a/recipes-support/rmtfs/rmtfs_git.bb +++ b/recipes-support/rmtfs/rmtfs_git.bb @@ -11,7 +11,7 @@ SRCREV = "1cc12d3dc1f251f6d3151970621a06fdd013a1d0" SRC_URI = "git://github.com/andersson/${BPN}.git;branch=master;protocol=https" DEPENDS = "qmic-native qrtr udev" -PV = "0.0+${SRCPV}" +PV = "0.2+${SRCPV}" S = "${WORKDIR}/git" |