aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--conf/machine/dragonboard-410c-32.conf2
-rw-r--r--conf/machine/dragonboard-410c.conf5
-rw-r--r--conf/machine/dragonboard-820c.conf7
-rw-r--r--conf/machine/dragonboard-845c.conf9
-rw-r--r--conf/machine/include/qcom-common.inc5
-rw-r--r--conf/machine/qcom-armv8a.conf21
-rw-r--r--conf/machine/qrb5165-rb5.conf10
-rw-r--r--conf/machine/sa8155p-adp.conf6
-rw-r--r--dynamic-layers/openembedded-layer/recipes-navigation/gpsd/gpsd/0001-Introduce-Qualcomm-PDS-service-support.patch460
-rw-r--r--recipes-bsp/firmware/firmware-qcom-dragonboard410c.inc38
-rw-r--r--recipes-bsp/firmware/firmware-qcom-dragonboard820c_01700.1.bb23
-rw-r--r--recipes-bsp/firmware/firmware-qcom-dragonboard845c_20190529180356-v4.bb28
-rw-r--r--recipes-bsp/firmware/firmware-qcom-nexus7-2013.bb18
-rw-r--r--recipes-bsp/firmware/firmware-qcom-rb5_20210331-v4.bb15
-rw-r--r--recipes-bsp/firmware/firmware-qcom.inc42
-rw-r--r--recipes-bsp/firmware/firmware-wcn6855_git.bb41
-rw-r--r--recipes-bsp/packagegroups/packagegroup-firmware-dragonboard410c.bb9
-rw-r--r--recipes-bsp/packagegroups/packagegroup-firmware-dragonboard820c.bb11
-rw-r--r--recipes-bsp/packagegroups/packagegroup-firmware-dragonboard845c.bb13
-rw-r--r--recipes-bsp/packagegroups/packagegroup-firmware-rb5.bb14
-rw-r--r--recipes-devtools/debugcc/debugcc_git.bb26
-rw-r--r--recipes-devtools/skales/skales_git.bb2
-rw-r--r--recipes-graphics/mesa/files/0002-meson.build-make-TLS-ELF-optional.patch24
-rw-r--r--recipes-graphics/mesa/mesa_git.bb2
-rw-r--r--recipes-kernel/linux/linux-linaro-qcomlt-dev.bb2
-rw-r--r--recipes-kernel/linux/linux-linaro-qcomlt-dev/0001-Revert-kbuild-Enable-DT-schema-checks-for-.dtb-targe.patch48
-rw-r--r--recipes-kernel/linux/linux-linaro-qcomlt_5.14.bb9
-rw-r--r--recipes-kernel/linux/linux-linaro-qcomlt_5.15.bb10
-rw-r--r--recipes-test/bootrr/bootrr/bootrr-auto-switch-to-using-sh.patch22
-rw-r--r--recipes-test/bootrr/bootrr_git.bb16
-rw-r--r--recipes-test/diag/diag_git.bb2
-rw-r--r--recipes-test/images/initramfs-firmware-image.bb21
-rw-r--r--recipes-test/images/initramfs-test-full-image.bb38
-rw-r--r--recipes-test/images/initramfs-test-image.bb7
-rw-r--r--recipes-test/images/initramfs-tiny-image.bb13
35 files changed, 704 insertions, 315 deletions
diff --git a/conf/machine/dragonboard-410c-32.conf b/conf/machine/dragonboard-410c-32.conf
index 930b12a..bf7b1b0 100644
--- a/conf/machine/dragonboard-410c-32.conf
+++ b/conf/machine/dragonboard-410c-32.conf
@@ -16,5 +16,5 @@ RDEPENDS:kernel-base = ""
MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS += " \
${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'mesa-driver-msm', '', d)} \
${@bb.utils.contains('DISTRO_FEATURES', 'bluez5', 'bluez5-noinst-tools', '', d)} \
- firmware-qcom-dragonboard410c \
+ packagegroup-firmware-dragonboard410c \
"
diff --git a/conf/machine/dragonboard-410c.conf b/conf/machine/dragonboard-410c.conf
index 7629a8d..50de1e6 100644
--- a/conf/machine/dragonboard-410c.conf
+++ b/conf/machine/dragonboard-410c.conf
@@ -14,10 +14,9 @@ SERIAL_CONSOLE ?= "115200 ttyMSM0"
MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS += " \
kernel-modules \
- ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'linux-firmware-qcom-adreno-a3xx mesa-driver-msm', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'mesa-driver-msm', '', d)} \
${@bb.utils.contains('DISTRO_FEATURES', 'bluez5', 'bluez5-noinst-tools', '', d)} \
- firmware-qcom-dragonboard410c \
- linux-firmware-qcom-venus-1.8 \
+ packagegroup-firmware-dragonboard410c \
"
QCOM_BOOTIMG_ROOTFS ?= "/dev/mmcblk0p14"
diff --git a/conf/machine/dragonboard-820c.conf b/conf/machine/dragonboard-820c.conf
index 6d4a2c4..1702cc3 100644
--- a/conf/machine/dragonboard-820c.conf
+++ b/conf/machine/dragonboard-820c.conf
@@ -12,12 +12,9 @@ KERNEL_DEVICETREE ?= "qcom/apq8096-db820c.dtb"
SERIAL_CONSOLE ?= "115200 ttyMSM0"
MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS += " \
- firmware-qcom-dragonboard820c \
kernel-modules \
- ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'linux-firmware-qcom-adreno-a530 mesa-driver-msm', '', d)} \
- ${@bb.utils.contains('DISTRO_FEATURES', 'wifi', 'linux-firmware-ath10k', '', d)} \
- ${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', 'linux-firmware-qca', '', d)} \
- linux-firmware-qcom-venus-4.2 \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'mesa-driver-msm', '', d)} \
+ packagegroup-firmware-dragonboard820c \
"
QCOM_BOOTIMG_ROOTFS ?= "/dev/sda1"
diff --git a/conf/machine/dragonboard-845c.conf b/conf/machine/dragonboard-845c.conf
index b6b6da4..d78ce43 100644
--- a/conf/machine/dragonboard-845c.conf
+++ b/conf/machine/dragonboard-845c.conf
@@ -13,14 +13,9 @@ KERNEL_CMDLINE_EXTRA ?= "clk_ignore_unused pd_ignore_unused"
SERIAL_CONSOLE ?= "115200 ttyMSM0"
MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS += " \
- firmware-qcom-dragonboard845c \
kernel-modules \
- ${@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 \
- ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'linux-firmware-qcom-adreno-a630 mesa-driver-msm', '', d)} \
- linux-firmware-qcom-venus-5.2 \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'mesa-driver-msm', '', d)} \
+ packagegroup-firmware-dragonboard845c \
"
# /dev/sda1 is 'rootfs' partition after installing the latest bootloader package from linaro
diff --git a/conf/machine/include/qcom-common.inc b/conf/machine/include/qcom-common.inc
index 4243f6a..67a0e4a 100644
--- a/conf/machine/include/qcom-common.inc
+++ b/conf/machine/include/qcom-common.inc
@@ -34,3 +34,8 @@ QCOM_BOOTIMG_PAGE_SIZE ?= "4096"
# Default serial console for QCOM devices
SERIAL_CONSOLES ?= "115200;ttyMSM0"
+
+# Increase INITRAMFS_MAXSIZE to 384 MiB to cover initramfs-kerneltest-full
+# image. All our boards (except db410c) have 2GiB and db410c has 1GiB of RAM,
+# so this image would fit.
+INITRAMFS_MAXSIZE = "393216"
diff --git a/conf/machine/qcom-armv8a.conf b/conf/machine/qcom-armv8a.conf
index a7545ee..869916b 100644
--- a/conf/machine/qcom-armv8a.conf
+++ b/conf/machine/qcom-armv8a.conf
@@ -32,19 +32,10 @@ MACHINE_EXTRA_RRECOMMENDS += " \
# Modules and firmware for all supported machines
MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS += " \
kernel-modules \
- firmware-qcom-dragonboard410c \
- firmware-qcom-dragonboard820c \
- firmware-qcom-dragonboard845c \
- firmware-qcom-rb5 \
- ${@bb.utils.contains('DISTRO_FEATURES', 'wifi', 'linux-firmware-ath10k linux-firmware-ath11k linux-firmware-qcom-sdm845-modem wireless-regdb-static', '', 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-sm8250-audio \
- linux-firmware-qcom-sm8250-compute \
- ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'linux-firmware-qcom-adreno-a3xx linux-firmware-qcom-adreno-a530 linux-firmware-qcom-adreno-a630 linux-firmware-qcom-adreno-a650', '', d)} \
- linux-firmware-qcom-venus-1.8 \
- linux-firmware-qcom-venus-4.2 \
- linux-firmware-qcom-venus-5.2 \
- linux-firmware-qcom-vpu-1.0 \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'mesa-driver-msm', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'wifi', 'wireless-regdb-static', '', d)} \
+ packagegroup-firmware-dragonboard410c \
+ packagegroup-firmware-dragonboard820c \
+ packagegroup-firmware-dragonboard845c \
+ packagegroup-firmware-rb5 \
"
diff --git a/conf/machine/qrb5165-rb5.conf b/conf/machine/qrb5165-rb5.conf
index 5c3a5f6..a80296f 100644
--- a/conf/machine/qrb5165-rb5.conf
+++ b/conf/machine/qrb5165-rb5.conf
@@ -14,13 +14,9 @@ SERIAL_CONSOLE ?= "115200 ttyMSM0"
MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS += " \
kernel-modules \
- firmware-qcom-rb5 linux-firmware-lt9611uxc \
- ${@bb.utils.contains('DISTRO_FEATURES', 'wifi', 'linux-firmware-ath11k wireless-regdb-static', '', d)} \
- ${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', 'linux-firmware-qca', '', d)} \
- linux-firmware-qcom-sm8250-audio \
- linux-firmware-qcom-sm8250-compute \
- ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'linux-firmware-qcom-adreno-a650 mesa-driver-msm', '', d)} \
- linux-firmware-qcom-vpu-1.0 \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'mesa-driver-msm', '', d)} \
+ packagegroup-firmware-rb5 \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'wifi', 'wireless-regdb-static', '', d)} \
"
# /dev/sda1 is 'rootfs' partition after installing the latest bootloader package from linaro
diff --git a/conf/machine/sa8155p-adp.conf b/conf/machine/sa8155p-adp.conf
index d1f9288..8ed7e06 100644
--- a/conf/machine/sa8155p-adp.conf
+++ b/conf/machine/sa8155p-adp.conf
@@ -18,8 +18,10 @@ MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS += " \
kernel-modules \
"
-# /dev/sda6 is 'userdata' partition for adp board, so wipe it and use for our build
-QCOM_BOOTIMG_ROOTFS ?= "/dev/sda6"
+# /dev/sda6 is 'system' partition for adp board, but its very small, so we
+# use 'userdata' partition here.
+# /dev/sda9 is 'userdata' partition for adp board, so wipe it and use for our build
+QCOM_BOOTIMG_ROOTFS ?= "/dev/sda9"
# UFS partitions setup with 4096 logical sector size
EXTRA_IMAGECMD:ext4 += " -b 4096 "
diff --git a/dynamic-layers/openembedded-layer/recipes-navigation/gpsd/gpsd/0001-Introduce-Qualcomm-PDS-service-support.patch b/dynamic-layers/openembedded-layer/recipes-navigation/gpsd/gpsd/0001-Introduce-Qualcomm-PDS-service-support.patch
index b502fae..6df450b 100644
--- a/dynamic-layers/openembedded-layer/recipes-navigation/gpsd/gpsd/0001-Introduce-Qualcomm-PDS-service-support.patch
+++ b/dynamic-layers/openembedded-layer/recipes-navigation/gpsd/gpsd/0001-Introduce-Qualcomm-PDS-service-support.patch
@@ -1,4 +1,4 @@
-From 3f46e63ff08afba0ad532d4cac1957499769dc69 Mon Sep 17 00:00:00 2001
+From 0f0a1495b3b2ae9da09ea1a05510492bae05a928 Mon Sep 17 00:00:00 2001
From: Bjorn Andersson <bjorn.andersson@linaro.org>
Date: Wed, 4 Apr 2018 04:29:09 +0000
Subject: [PATCH] Introduce Qualcomm PDS service support
@@ -33,33 +33,35 @@ string "any".
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Signed-off-by: Aníbal Limón <anibal.limon@linaro.org>
---
- SConscript | 10 ++
- driver_pds.c | 325 +++++++++++++++++++++++++++++++++++++++++++++++++
- driver_pds.h | 20 +++
- drivers.c | 5 +
- gpsd.h | 2 +
- libgpsd_core.c | 15 ++-
- 6 files changed, 376 insertions(+), 1 deletion(-)
- create mode 100644 driver_pds.c
- create mode 100644 driver_pds.h
+ SConscript | 11 ++
+ drivers/driver_pds.c | 406 +++++++++++++++++++++++++++++++++++++++++++
+ drivers/drivers.c | 5 +
+ gpsd/libgpsd_core.c | 16 +-
+ include/driver_pds.h | 20 +++
+ include/gpsd.h | 9 +
+ man/gpsd.adoc | 8 +
+ 7 files changed, 474 insertions(+), 1 deletion(-)
+ create mode 100644 drivers/driver_pds.c
+ create mode 100644 include/driver_pds.h
-diff --git a/SConscript b/SConstruct
-index 33e0ff326..d4ae81979 100644
+diff --git a/SConscript b/SConscript
+index e3fed4c27..cae23de9c 100644
--- a/SConscript
+++ b/SConscript
-@@ -192,6 +192,7 @@ boolopts = (
+@@ -315,6 +315,8 @@ boolopts = (
("tripmate", True, "DeLorme TripMate support"),
("tsip", True, "Trimble TSIP support"),
("ublox", True, "u-blox Protocol support"),
-+ ("pds", True, "Qualcomm PDS support"),
++ ("pds", sys.platform.startswith('linux'),
++ "Qualcomm PDS support"),
# Non-GPS protocols
("aivdm", True, "AIVDM support"),
("gpsclock", True, "GPSClock support"),
-@@ -977,6 +978,14 @@ else:
+@@ -1156,6 +1158,14 @@ if not cleaning and not helping:
announce("You do not have kernel CANbus available.")
config.env["nmea2000"] = False
-+ if config.CheckHeader(["bits/sockaddr.h", "linux/qrtr.h"]):
++ if config.CheckHeader(["linux/qrtr.h"]):
+ confdefs.append("#define HAVE_LINUX_QRTR_H 1\n")
+ announce("You have kernel QRTR available.")
+ else:
@@ -70,7 +72,7 @@ index 33e0ff326..d4ae81979 100644
# check for C11 or better, and __STDC__NO_ATOMICS__ is not defined
# before looking for stdatomic.h
if ((config.CheckC11() and
-@@ -1655,6 +1664,7 @@ libgpsd_sources = [
+@@ -1684,6 +1694,7 @@ libgpsd_sources = [
"drivers/driver_nmea0183.c",
"drivers/driver_nmea2000.c",
"drivers/driver_oncore.c",
@@ -80,10 +82,19 @@ index 33e0ff326..d4ae81979 100644
"drivers/drivers.c",
diff --git a/drivers/driver_pds.c b/drivers/driver_pds.c
new file mode 100644
-index 000000000..734b40f83
+index 000000000..2ac77ec17
--- /dev/null
+++ b/drivers/driver_pds.c
-@@ -0,0 +1,327 @@
+@@ -0,0 +1,406 @@
++/*
++ * Qualcomm PDS Interface driver.
++ *
++ * Tested in Dragonboard410c (APQ8016) PDS service.
++ *
++ * This file is Copyright 2020 by Linaro Limited
++ * SPDX-License-Identifier: BSD-2-clause
++ */
++
+#include "../include/gpsd_config.h" /* must be before all includes */
+
+#include <sys/socket.h>
@@ -92,15 +103,16 @@ index 000000000..734b40f83
+#include <stdlib.h>
+#include <unistd.h>
+#include "../include/gpsd.h"
-+#include "../include/libgps.h"
+
+#if defined(PDS_ENABLE)
+#include "../include/driver_pds.h"
+
+#include <linux/qrtr.h>
+
++#define QMI_PDS_MAX 16
+#define QMI_PDS_SERVICE_ID 0x10
+#define QMI_PDS_VERSION 0x2
++#define QMI_PDS_PATH_STARTS 6
+
+struct qmi_header {
+ uint8_t type;
@@ -115,6 +127,8 @@ index 000000000..734b40f83
+ uint8_t value[];
+} __attribute__((__packed__));
+
++static struct gps_device_t *pds_devices[QMI_PDS_MAX];
++
+#define QMI_REQUEST 0
+#define QMI_INDICATION 4
+
@@ -129,7 +143,84 @@ index 000000000..734b40f83
+#define QMI_LOC_EVENT_NMEA 0x26
+#define QMI_TLV_NMEA 1
+
-+static ssize_t qmi_pds_get(struct gps_device_t *session)
++static ssize_t qmi_pds_connect(struct gps_device_t *session)
++{
++ struct sockaddr_qrtr sq;
++ socklen_t sl = sizeof(sq);
++ struct qrtr_ctrl_pkt pkt;
++ char *hostname;
++ char *endptr;
++ int ret;
++
++ session->lexer.outbuflen = 0;
++
++ hostname = session->gpsdata.dev.path + QMI_PDS_PATH_STARTS;
++ if (!strcmp(hostname, "any")) {
++ session->driver.pds.hostid = -1;
++ } else {
++ session->driver.pds.hostid = (int)strtol(hostname, &endptr, 10);
++ if (endptr == hostname) {
++ GPSD_LOG(LOG_ERROR, &session->context->errout,
++ "QRTR open: Invalid node id.\n");
++ return -1;
++ }
++ }
++
++ ret = recvfrom(session->gpsdata.gps_fd, &pkt, sizeof(pkt), 0,
++ (struct sockaddr *)&sq, &sl);
++ if (ret < 0) {
++ GPSD_LOG(LOG_ERROR, &session->context->errout,
++ "QRTR connect: Unable to receive lookup request.\n");
++ return -1;
++ }
++
++ if (sl != sizeof(sq) || sq.sq_port != QRTR_PORT_CTRL) {
++ GPSD_LOG(LOG_INFO, &session->context->errout,
++ "QRTR connect: Received message is not ctrl message, ignoring.\n");
++ return 1;
++ }
++
++ if (pkt.cmd != QRTR_TYPE_NEW_SERVER)
++ return 1;
++
++ /* All fields zero indicates end of lookup response */
++ if (!pkt.server.service && !pkt.server.instance &&
++ !pkt.server.node && !pkt.server.port) {
++ GPSD_LOG(LOG_ERROR, &session->context->errout,
++ "QRTR connect: End of lookup, No PDS service found for %s.\n",
++ session->gpsdata.dev.path);
++ return -1;
++ }
++
++ /* Filter results based on specified node */
++ if (session->driver.pds.hostid != -1 &&
++ session->driver.pds.hostid != (int)pkt.server.node)
++ return 1;
++
++ session->driver.pds.pds_node = pkt.server.node;
++ session->driver.pds.pds_port = pkt.server.port;
++
++ GPSD_LOG(LOG_INF, &session->context->errout,
++ "QRTR open: Found PDS at %d %d.\n",
++ session->driver.pds.pds_node,
++ session->driver.pds.pds_port);
++
++ sq.sq_family = AF_QIPCRTR;
++ sq.sq_node = session->driver.pds.pds_node;
++ sq.sq_port = session->driver.pds.pds_port;
++ ret = connect(session->gpsdata.gps_fd, (struct sockaddr *)&sq, sizeof(sq));
++ if (ret < 0) {
++ GPSD_LOG(LOG_ERROR, &session->context->errout,
++ "QRTR connect: Failed to connect socket to PDS Service.\n");
++ return -1;
++ }
++
++ session->driver.pds.ready = 1;
++ session->device_type->event_hook(session, event_reactivate);
++ return 1;
++}
++
++static ssize_t qmi_pds_get_packet(struct gps_device_t *session)
+{
+ struct sockaddr_qrtr sq;
+ socklen_t sl = sizeof(sq);
@@ -153,8 +244,6 @@ index 000000000..734b40f83
+
+ /* TODO: Validate sq to be our peer */
+
-+ session->lexer.type = QMI_PDS_PACKET;
-+
+ hdr = buf;
+ if (hdr->type != QMI_INDICATION ||
+ hdr->msg != QMI_LOC_EVENT_NMEA) {
@@ -171,6 +260,7 @@ index 000000000..734b40f83
+
+ if (tlv->key == QMI_TLV_NMEA) {
+ memcpy(session->lexer.outbuffer, tlv->value, tlv->len);
++ session->lexer.type = NMEA_PACKET;
+ session->lexer.outbuffer[tlv->len] = 0;
+ session->lexer.outbuflen = tlv->len;
+ break;
@@ -182,9 +272,12 @@ index 000000000..734b40f83
+ return ret;
+}
+
-+static gps_mask_t qmi_pds_parse_input(struct gps_device_t *session)
++static ssize_t qmi_pds_get(struct gps_device_t *session)
+{
-+ return nmea_parse((char *)session->lexer.outbuffer, session);
++ if (!session->driver.pds.ready)
++ return qmi_pds_connect(session);
++ else
++ return qmi_pds_get_packet(session);
+}
+
+static void qmi_pds_event_hook(struct gps_device_t *session, event_t event)
@@ -199,6 +292,9 @@ index 000000000..734b40f83
+
+ switch (event) {
+ case event_deactivate:
++ if (!session->driver.pds.ready)
++ return;
++
+ ptr = buf;
+ hdr = (struct qmi_header *)ptr;
+ hdr->type = QMI_REQUEST;
@@ -221,6 +317,9 @@ index 000000000..734b40f83
+ }
+ break;
+ case event_reactivate:
++ if (!session->driver.pds.ready)
++ return;
++
+ ptr = buf;
+ hdr = (struct qmi_header *)ptr;
+ hdr->type = QMI_REQUEST;
@@ -268,40 +367,67 @@ index 000000000..734b40f83
+ }
+}
+
++static ssize_t qmi_control_send(struct gps_device_t *session,
++ char *buf, size_t buflen)
++{
++ /* do not write if -b (readonly) option set */
++ if (session->context->readonly)
++ return true;
++
++ session->msgbuflen = buflen;
++ (void)memcpy(session->msgbuf, buf, buflen);
++ return gpsd_write(session, session->msgbuf, session->msgbuflen);
++}
++
+int qmi_pds_open(struct gps_device_t *session)
+{
+ struct sockaddr_qrtr sq_ctrl;
-+ struct qrtr_ctrl_pkt pkt;
-+ struct sockaddr_qrtr sq;
-+ unsigned int pds_node = 0;
-+ unsigned int pds_port = 0;
+ socklen_t sl = sizeof(sq_ctrl);
-+ char *hostname;
-+ char *endptr;
-+ int hostid;
++ struct qrtr_ctrl_pkt pkt;
+ int flags;
+ int sock;
+ int ret;
++ int i;
+
-+ hostname = session->gpsdata.dev.path + 6;
-+ if (!strcmp(hostname, "any")) {
-+ hostid = -1;
-+ } else {
-+ hostid = (int)strtol(hostname, &endptr, 10);
-+ if (endptr == hostname) {
++ if (session->gpsdata.dev.path == NULL ||
++ strlen(session->gpsdata.dev.path) < QMI_PDS_PATH_STARTS) {
++ GPSD_LOG(LOG_ERROR, &session->context->errout,
++ "QRTR open: Invalid PDS path.\n");
++ return -1;
++ }
++
++ for (i = 0; i < QMI_PDS_MAX; i++) {
++ if (pds_devices[i] == NULL)
++ continue;
++
++ if (strcmp(pds_devices[i]->gpsdata.dev.path,
++ session->gpsdata.dev.path) == 0) {
+ GPSD_LOG(LOG_ERROR, &session->context->errout,
-+ "QRTR open: Invalid node id.\n");
++ "QRTR open: Invalid PDS path already specified.\n");
+ return -1;
+ }
+ }
+
++ for (i = 0; i < QMI_PDS_MAX; i++) {
++ if (pds_devices[i] == NULL)
++ break;
++ }
++ if (i == QMI_PDS_MAX) {
++ GPSD_LOG(LOG_ERROR, &session->context->errout,
++ "QRTR open: Limit of PDS devices reached.\n");
++ return -1;
++ }
++ pds_devices[i] = session;
+
+ sock = socket(AF_QIPCRTR, SOCK_DGRAM, 0);
-+ if (sock < 0) {
++ if (BAD_SOCKET(sock)) {
+ GPSD_LOG(LOG_ERROR, &session->context->errout,
+ "QRTR open: Unable to get QRTR socket.\n");
+ return -1;
+ }
++ flags = fcntl(sock, F_GETFL, 0);
++ flags |= O_NONBLOCK;
++ fcntl(sock, F_SETFL, flags);
+
+ ret = getsockname(sock, (struct sockaddr *)&sq_ctrl, &sl);
+ if (ret < 0 || sq_ctrl.sq_family != AF_QIPCRTR || sl != sizeof(sq_ctrl)) {
@@ -325,123 +451,52 @@ index 000000000..734b40f83
+ return -1;
+ }
+
-+ for (;;) {
-+ sl = sizeof(sq);
-+
-+ ret = recvfrom(sock, &pkt, sizeof(pkt), 0, (struct sockaddr *)&sq, &sl);
-+ if (ret < 0) {
-+ GPSD_LOG(LOG_ERROR, &session->context->errout,
-+ "QRTR open: Unable to receive lookup request.\n");
-+ close(sock);
-+ return -1;
-+ }
-+
-+ if (sl != sizeof(sq) || sq.sq_node != sq_ctrl.sq_node ||
-+ sq.sq_port != sq_ctrl.sq_port) {
-+ GPSD_LOG(LOG_ERROR, &session->context->errout,
-+ "QRTR open: Received message is not ctrl message, ignoring.\n");
-+ continue;
-+ }
-+
-+ if (pkt.cmd != QRTR_TYPE_NEW_SERVER)
-+ continue;
-+
-+ /* All fields zero indicates end of lookup response */
-+ if (!pkt.server.service && !pkt.server.instance &&
-+ !pkt.server.node && !pkt.server.port)
-+ break;
-+
-+ /* Filter results based on specified node */
-+ if (hostid != -1 && hostid != (int)pkt.server.node)
-+ continue;
-+
-+ pds_node = pkt.server.node;
-+ pds_port = pkt.server.port;
-+ }
-+
-+ if (!pds_node && !pds_port) {
-+ GPSD_LOG(LOG_ERROR, &session->context->errout,
-+ "QRTR open: No PDS service found.\n");
-+ close(sock);
-+ return -1;
-+ }
-+
-+ flags = fcntl(sock, F_GETFL, 0);
-+ flags |= O_NONBLOCK;
-+ fcntl(sock, F_SETFL, flags);
-+
-+ GPSD_LOG(LOG_INF, &session->context->errout,
-+ "QRTR open: Found PDS at %d %d.\n", pds_node, pds_port);
-+
-+ sq.sq_family = AF_QIPCRTR;
-+ sq.sq_node = pds_node;
-+ sq.sq_port = pds_port;
-+ ret = connect(sock, (struct sockaddr *)&sq, sizeof(sq));
-+ if (ret < 0) {
-+ GPSD_LOG(LOG_ERROR, &session->context->errout,
-+ "QRTR open: Failed to connect socket.\n");
-+ close(sock);
-+ return -1;
-+ }
-+
+ gpsd_switch_driver(session, "Qualcomm PDS");
+ session->gpsdata.gps_fd = sock;
+ session->sourcetype = SOURCE_QRTR;
-+ session->servicetype = service_sensor;
++ session->servicetype = SERVICE_SENSOR;
+
+ return session->gpsdata.gps_fd;
+}
+
+void qmi_pds_close(struct gps_device_t *session)
+{
++ int i;
++
+ if (!BAD_SOCKET(session->gpsdata.gps_fd)) {
+ close(session->gpsdata.gps_fd);
+ INVALIDATE_SOCKET(session->gpsdata.gps_fd);
+ }
++
++ for (i = 0; i < QMI_PDS_MAX; i++) {
++ if (pds_devices[i] == NULL)
++ continue;
++
++ if (strcmp(pds_devices[i]->gpsdata.dev.path,
++ session->gpsdata.dev.path) == 0) {
++ pds_devices[i] = NULL;
++ break;
++ }
++ }
+}
+
+const struct gps_type_t driver_pds = {
+ .type_name = "Qualcomm PDS", /* full name of type */
-+ .packet_type = QMI_PDS_PACKET, /* associated lexer packet type */
++ .packet_type = NMEA_PACKET, /* associated lexer packet type */
+ .flags = DRIVER_STICKY, /* remember this */
+ .channels = 12, /* not an actual GPS at all */
+ .get_packet = qmi_pds_get, /* how to get a packet */
-+ .parse_packet = qmi_pds_parse_input, /* how to interpret a packet */
++ .parse_packet = generic_parse_input, /* how to interpret a packet */
+ .event_hook = qmi_pds_event_hook,
++ .control_send = qmi_control_send,
+};
+
+#endif /* of defined(PDS_ENABLE) */
-diff --git a/include/driver_pds.h b/include/driver_pds.h
-new file mode 100644
-index 000000000..3b373743d
---- /dev/null
-+++ b/include/driver_pds.h
-@@ -0,0 +1,20 @@
-+/*
-+ * PDS on QRTR.
-+ *
-+ * The entry points for driver_pds
-+ *
-+ * This file is Copyright (c) 2018 by the GPSD project
-+ * SPDX-License-Identifier: BSD-2-clause
-+ */
-+
-+#ifndef _DRIVER_PDS_H_
-+#define _DRIVER_PDS_H_
-+
-+#if defined(PDS_ENABLE)
-+
-+int qmi_pds_open(struct gps_device_t *session);
-+
-+void qmi_pds_close(struct gps_device_t *session);
-+
-+#endif /* of defined(PDS_ENABLE) */
-+#endif /* of ifndef _DRIVER_PDS_H_ */
diff --git a/drivers/drivers.c b/drivers/drivers.c
-index 39e3d0a4c..7d788e1ab 100644
+index 5c7c67b30..47a292423 100644
--- a/drivers/drivers.c
+++ b/drivers/drivers.c
-@@ -1747,6 +1747,7 @@ extern const struct gps_type_t driver_greis;
+@@ -1694,6 +1694,7 @@ extern const struct gps_type_t driver_greis;
extern const struct gps_type_t driver_italk;
extern const struct gps_type_t driver_navcom;
extern const struct gps_type_t driver_nmea2000;
@@ -449,7 +504,7 @@ index 39e3d0a4c..7d788e1ab 100644
extern const struct gps_type_t driver_oncore;
extern const struct gps_type_t driver_sirf;
extern const struct gps_type_t driver_skytraq;
-@@ -1844,6 +1845,10 @@ static const struct gps_type_t *gpsd_driver_array[] = {
+@@ -1787,6 +1788,10 @@ static const struct gps_type_t *gpsd_driver_array[] = {
&driver_nmea2000,
#endif /* NMEA2000_ENABLE */
@@ -460,85 +515,126 @@ index 39e3d0a4c..7d788e1ab 100644
#ifdef RTCM104V2_ENABLE
&driver_rtcm104v2,
#endif /* RTCM104V2_ENABLE */
-diff --git a/include/gpsd.h b/include/gpsd.h
-index 57e4b0553..e9f61cc71 100644
---- a/include/gpsd.h
-+++ b/include/gpsd.h
-@@ -220,12 +220,13 @@ struct gps_lexer_t {
- #define GEOSTAR_PACKET 14
- #define NMEA2000_PACKET 15
- #define GREIS_PACKET 16
--#define MAX_GPSPACKET_TYPE 16 /* increment this as necessary */
--#define RTCM2_PACKET 17
--#define RTCM3_PACKET 18
--#define JSON_PACKET 19
--#define PACKET_TYPES 20 /* increment this as necessary */
--#define SKY_PACKET 21
-+#define QMI_PDS_PACKET 17
-+#define MAX_GPSPACKET_TYPE 17 /* increment this as necessary */
-+#define RTCM2_PACKET 18
-+#define RTCM3_PACKET 19
-+#define JSON_PACKET 20
-+#define PACKET_TYPES 21 /* increment this as necessary */
-+#define SKY_PACKET 22
- #define TEXTUAL_PACKET_TYPE(n) ((((n)>=NMEA_PACKET) && ((n)<=MAX_TEXTUAL_TYPE)) || (n)==JSON_PACKET)
- #define GPS_PACKET_TYPE(n) (((n)>=NMEA_PACKET) && ((n)<=MAX_GPSPACKET_TYPE))
- #define LOSSLESS_PACKET_TYPE(n) (((n)>=RTCM2_PACKET) && ((n)<=RTCM3_PACKET))
-@@ -462,6 +463,7 @@ typedef enum {SOURCE_UNKNOWN,
- SOURCE_USB, // potential GPS source, discoverable
- SOURCE_BLUETOOTH, // potential GPS source, discoverable
- SOURCE_CAN, // potential GPS source, fixed CAN format
-+ SOURCE_QRTR, // potential GPS source, discoverable
- SOURCE_PTY, // PTY: we don't require exclusive access
- SOURCE_TCP, // TCP/IP stream: case detected but not used
- SOURCE_UDP, // UDP stream: case detected but not used
diff --git a/gpsd/libgpsd_core.c b/gpsd/libgpsd_core.c
-index 52bf8e5ae..a8a2ec0d3 100644
+index 60a7c2e2f..ceebb1a2a 100644
--- a/gpsd/libgpsd_core.c
+++ b/gpsd/libgpsd_core.c
@@ -39,6 +39,9 @@
#if defined(NMEA2000_ENABLE)
- #include "../include/driver_nmea2000.h"
+ #include "../include/driver_nmea2000.h"
#endif /* defined(NMEA2000_ENABLE) */
+#if defined(PDS_ENABLE)
+#include "../include/driver_pds.h"
+#endif /* defined(PDS_ENABLE) */
- /* pass low-level data to devices straight through */
+ // pass low-level data to devices straight through
ssize_t gpsd_write(struct gps_device_t *session,
-@@ -351,6 +354,11 @@ void gpsd_deactivate(struct gps_device_t *session)
- (void)nmea2000_close(session);
+@@ -358,6 +361,11 @@ void gpsd_deactivate(struct gps_device_t *session)
} else
- #endif /* of defined(NMEA2000_ENABLE) */
+ #endif // of defined(NMEA2000_ENABLE)
+ {
+#if defined(PDS_ENABLE)
-+ if (session->sourcetype == SOURCE_QRTR)
++ if (SOURCE_QRTR == session->sourcetype)
+ (void)qmi_pds_close(session);
+ else
+#endif /* of defined(PDS_ENABLE) */
(void)gpsd_close(session);
- if (session->mode == O_OPTIMIZE)
- gpsd_run_device_hook(&session->context->errout,
-@@ -553,6 +561,11 @@ int gpsd_open(struct gps_device_t *session)
- return nmea2000_open(session);
}
- #endif /* defined(NMEA2000_ENABLE) */
+ if (O_OPTIMIZE == session->mode) {
+@@ -629,6 +637,11 @@ int gpsd_open(struct gps_device_t *session)
+ #endif // defined(NMEA2000_ENABLE)
+ /* fall through to plain serial open.
+ * could be a naked /dev/ppsX */
+#if defined(PDS_ENABLE)
+ if (str_starts_with(session->gpsdata.dev.path, "pds://")) {
+ return qmi_pds_open(session);
+ }
+#endif /* defined(PDS_ENABLE) */
- /* fall through to plain serial open */
- /* could be a naked /dev/ppsX */
return gpsd_serial_open(session);
-@@ -581,7 +594,7 @@ int gpsd_activate(struct gps_device_t *session, const int mode)
+ }
+
+@@ -656,7 +669,8 @@ int gpsd_activate(struct gps_device_t *session, const int mode)
#ifdef NON_NMEA0183_ENABLE
- /* if it's a sensor, it must be probed */
- if ((session->servicetype == service_sensor) &&
+ // if it's a sensor, it must be probed
+ if ((SERVICE_SENSOR == session->servicetype) &&
- (SOURCE_CAN != session->sourcetype)) {
-+ (SOURCE_CAN != session->sourcetype && SOURCE_QRTR != session->sourcetype)) {
++ (SOURCE_CAN != session->sourcetype) &&
++ (SOURCE_QRTR != session->sourcetype)) {
const struct gps_type_t **dp;
for (dp = gpsd_drivers; *dp; dp++) {
+diff --git a/include/driver_pds.h b/include/driver_pds.h
+new file mode 100644
+index 000000000..3b373743d
+--- /dev/null
++++ b/include/driver_pds.h
+@@ -0,0 +1,20 @@
++/*
++ * PDS on QRTR.
++ *
++ * The entry points for driver_pds
++ *
++ * This file is Copyright (c) 2018 by the GPSD project
++ * SPDX-License-Identifier: BSD-2-clause
++ */
++
++#ifndef _DRIVER_PDS_H_
++#define _DRIVER_PDS_H_
++
++#if defined(PDS_ENABLE)
++
++int qmi_pds_open(struct gps_device_t *session);
++
++void qmi_pds_close(struct gps_device_t *session);
++
++#endif /* of defined(PDS_ENABLE) */
++#endif /* of ifndef _DRIVER_PDS_H_ */
+diff --git a/include/gpsd.h b/include/gpsd.h
+index 110c5601f..b55f1913c 100644
+--- a/include/gpsd.h
++++ b/include/gpsd.h
+@@ -464,6 +464,7 @@ typedef enum {SOURCE_UNKNOWN,
+ SOURCE_USB, // potential GPS source, discoverable
+ SOURCE_BLUETOOTH, // potential GPS source, discoverable
+ SOURCE_CAN, // potential GPS source, fixed CAN format
++ SOURCE_QRTR, // potential GPS source, discoverable
+ SOURCE_PTY, // PTY: we don't require exclusive access
+ SOURCE_TCP, // TCP/IP stream: case detected but not used
+ SOURCE_UDP, // UDP stream: case detected but not used
+@@ -800,6 +801,14 @@ struct gps_device_t {
+ char ais_channel;
+ } aivdm;
+ #endif /* AIVDM_ENABLE */
++#ifdef PDS_ENABLE
++ struct {
++ int ready;
++ int hostid;
++ unsigned int pds_node;
++ unsigned int pds_port;
++ } pds;
++#endif /* PDS_ENABLE */
+ } driver;
+
+ /*
+diff --git a/man/gpsd.adoc b/man/gpsd.adoc
+index 348c6b2b0..61013a8c3 100644
+--- a/man/gpsd.adoc
++++ b/man/gpsd.adoc
+@@ -242,6 +242,14 @@ NMEA2000 CAN data::
+ there is more than one unit on the CAN bus that provides GPS data,
+ *gpsd* chooses the unit from which a GPS message is first seen. Example:
+ *nmea2000://can0*.
++PDS service data::
++ URI with the prefix "pds://", followed by "any" or host id
++ a numerical identifier of the PDS node. Only Linux socket PDS interfaces
++ are supported. The daemon will open a AF_QIPCRTR socket sending/listening for
++ UDP datagrams arriving in form of the QRTR encoded messages for setup and after
++ QMI encoded messages containing GPS NMEA data.
++ If "any" is send the PDS driver chooses the first PDS service
++ found. Example: *pds://any* or *pds://0*.
+
+ (The "ais:://" source type supported in some older versions of the
+ daemon has been retired in favor of the more general "tcp://".)
--
-2.27.0.rc0
+2.33.0
diff --git a/recipes-bsp/firmware/firmware-qcom-dragonboard410c.inc b/recipes-bsp/firmware/firmware-qcom-dragonboard410c.inc
index 1e4b454..950ea0a 100644
--- a/recipes-bsp/firmware/firmware-qcom-dragonboard410c.inc
+++ b/recipes-bsp/firmware/firmware-qcom-dragonboard410c.inc
@@ -5,30 +5,50 @@ 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}${FW_QCOM_PATH}
+
+ install -m 0644 ./proprietary-linux/wlan/prima/WCNSS_qcom_wlan_nv.bin \
+ ${D}${FW_QCOM_PATH}/WCNSS_qcom_wlan_nv_sbc.bin
- 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
+ ::image/modem.* ::image/mba.mbn ::image/wcnss.* ${D}${FW_QCOM_PATH}
- pil-squasher ${D}${nonarch_base_libdir}/firmware/qcom/msm8916/modem.mbn \
- ${D}${nonarch_base_libdir}/firmware/qcom/msm8916/modem.mdt
+ pil-squasher ${D}${FW_QCOM_PATH}/modem.mbn \
+ ${D}${FW_QCOM_PATH}/modem.mdt
- pil-squasher ${D}${nonarch_base_libdir}/firmware/qcom/msm8916/wcnss.mbn \
- ${D}${nonarch_base_libdir}/firmware/qcom/msm8916/wcnss.mdt
+ pil-squasher ${D}${FW_QCOM_PATH}/wcnss.mbn \
+ ${D}${FW_QCOM_PATH}/wcnss.mdt
install -d ${D}${sysconfdir}/
install -m 0644 LICENSE ${D}${sysconfdir}/QCOM-LINUX-BOARD-SUPPORT-LICENSE-${PN}
+
+ # compat for Linux kernel <= 5.15
+ install -d ${D}${nonarch_base_libdir}/firmware/wlan/prima
+ install -m 0644 ./proprietary-linux/wlan/prima/WCNSS_qcom_wlan_nv.bin \
+ ${D}${nonarch_base_libdir}/firmware/wlan/prima/
+
+ install -d ${D}${FW_QCOM_BASE_PATH}/msm8916
+ for file in ${D}${FW_QCOM_PATH}/*.mbn ${D}${FW_QCOM_PATH}/*.mdt ${D}${FW_QCOM_PATH}/*.b*
+ do
+ ln -s ../apq8016/$(basename $file) ${D}${FW_QCOM_BASE_PATH}/msm8916/
+ done
}
FILES:${PN} += "/boot/modem_fsg"
+
+SPLIT_FIRMWARE_PACKAGES = " \
+ linux-firmware-qcom-${FW_QCOM_NAME}-modem \
+ linux-firmware-qcom-${FW_QCOM_NAME}-modem-split \
+ linux-firmware-qcom-${FW_QCOM_NAME}-wifi \
+ linux-firmware-qcom-${FW_QCOM_NAME}-wifi-split \
+"
diff --git a/recipes-bsp/firmware/firmware-qcom-dragonboard820c_01700.1.bb b/recipes-bsp/firmware/firmware-qcom-dragonboard820c_01700.1.bb
index f3ca958..7b9bf61 100644
--- a/recipes-bsp/firmware/firmware-qcom-dragonboard820c_01700.1.bb
+++ b/recipes-bsp/firmware/firmware-qcom-dragonboard820c_01700.1.bb
@@ -7,6 +7,8 @@ SRC_URI = "https://releases.linaro.org/96boards/dragonboard820c/qualcomm/firmwar
SRC_URI[md5sum] = "587138c5e677342db9a88d5c8747ec6c"
SRC_URI[sha256sum] = "6ee9c461b2b5dd2d3bd705bb5ea3f44b319ecb909b2772f305ce12439e089cd9"
+FW_QCOM_NAME = "apq8096"
+
require recipes-bsp/firmware/firmware-qcom.inc
DEPENDS += "pil-squasher-native qca-swiss-army-knife-native"
@@ -22,18 +24,25 @@ do_compile() {
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 ./proprietary-linux/adsp*.* ${D}${FW_QCOM_PATH}/
+ pil-squasher ${D}${FW_QCOM_PATH}/adsp.mbn ./proprietary-linux/adsp.mdt
- install -m 0444 ./bootloaders-linux/adspso.bin ${D}${nonarch_base_libdir}/firmware/qcom/msm8996/
+ install -m 0444 ./bootloaders-linux/adspso.bin ${D}${FW_QCOM_PATH}/
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 -d ${D}${sysconfdir}/
install -m 0644 LICENSE ${D}${sysconfdir}/QCOM-LINUX-BOARD-SUPPORT-LICENSE-${PN}
+
+ # compat for Linux kernel <= 5.15
+ install -d ${D}${FW_QCOM_BASE_PATH}/msm8996
+ for file in ${D}${FW_QCOM_PATH}/*.mbn ${D}${FW_QCOM_PATH}/*.mdt ${D}${FW_QCOM_PATH}/*.b*
+ do
+ ln -s ../apq8096/$(basename $file) ${D}${FW_QCOM_BASE_PATH}/msm8996/
+ done
}
inherit update-alternatives
@@ -41,3 +50,9 @@ 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 \
+ linux-firmware-qcom-${FW_QCOM_NAME}-audio \
+ linux-firmware-qcom-${FW_QCOM_NAME}-audio-split \
+"
diff --git a/recipes-bsp/firmware/firmware-qcom-dragonboard845c_20190529180356-v4.bb b/recipes-bsp/firmware/firmware-qcom-dragonboard845c_20190529180356-v4.bb
index e23f465..54135ed 100644
--- a/recipes-bsp/firmware/firmware-qcom-dragonboard845c_20190529180356-v4.bb
+++ b/recipes-bsp/firmware/firmware-qcom-dragonboard845c_20190529180356-v4.bb
@@ -7,9 +7,11 @@ SRC_URI = "https://releases.linaro.org/96boards/dragonboard845c/qualcomm/firmwar
SRC_URI[md5sum] = "ad69855a1275547b16d94a1b5405ac62"
SRC_URI[sha256sum] = "4289d2f2a7124b104d0274879e702aae9b1e50c42eec3747f8584c6744ef65e3"
+FW_QCOM_NAME = "sdm845"
+
require recipes-bsp/firmware/firmware-qcom.inc
-DEPENDS += "qca-swiss-army-knife-native"
+DEPENDS += "qca-swiss-army-knife-native pil-squasher-native"
inherit python3native
do_compile() {
@@ -20,14 +22,19 @@ do_compile() {
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 -m 0444 ./20-adsp_split/firmware/adsp*.* ${D}${FW_QCOM_PATH}
+ install -m 0444 ./21-cdsp_split/firmware/cdsp*.* ${D}${FW_QCOM_PATH}
+
+ install -m 0444 ./39-jsn/slpi*.jsn ${D}${FW_QCOM_PATH}
+
+ pil-squasher ${D}${FW_QCOM_PATH}/slpi.mbn \
+ ./30-slpi_split/slpi.mdt
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/
@@ -35,3 +42,14 @@ do_install() {
install -d ${D}${sysconfdir}/
install -m 0644 LICENSE.qcom.txt ${D}${sysconfdir}/QCOM-LINUX-BOARD-SUPPORT-LICENSE-${PN}
}
+
+SPLIT_FIRMWARE_PACKAGES = " \
+ ${PN}-dspso \
+ linux-firmware-qcom-adreno-a630-split \
+ linux-firmware-qcom-${FW_QCOM_NAME}-audio-split \
+ linux-firmware-qcom-${FW_QCOM_NAME}-compute-split \
+ linux-firmware-qcom-${FW_QCOM_NAME}-modem-split \
+ linux-firmware-qcom-${FW_QCOM_NAME}-sensors \
+"
+
+FILES:linux-firmware-qcom-adreno-a630-split = "${FW_QCOM_BASE_PATH}/a630_zap.*"
diff --git a/recipes-bsp/firmware/firmware-qcom-nexus7-2013.bb b/recipes-bsp/firmware/firmware-qcom-nexus7-2013.bb
index a17c5ac..3d5f5df 100644
--- a/recipes-bsp/firmware/firmware-qcom-nexus7-2013.bb
+++ b/recipes-bsp/firmware/firmware-qcom-nexus7-2013.bb
@@ -9,6 +9,8 @@ SRC_URI[google.md5sum] = "5c21950c751544cc92b5fe95c6f3be37"
SRC_URI[google.sha256sum] = "1ccc740a461be8ea84369b1c13fc89cb3f26f8bc1400fedec8b3dd1f630a7994"
SRCREV_aosp = "9d9fee956a9c4c7be4f69f7a472d3fc0e759c2dd"
+FW_QCOM_NAME = "flo"
+
require recipes-bsp/firmware/firmware-qcom.inc
DEPENDS += "pil-squasher-native"
@@ -27,14 +29,14 @@ do_compile() {
}
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 -d ${D}${FW_QCOM_PATH}
+ install -m 0644 ${B}/*.mbn ${D}${FW_QCOM_PATH}
+ install -m 0644 vendor/qcom/flo/proprietary/vidcfw.elf ${D}${FW_QCOM_PATH}
+ install -m 0644 vendor/qcom/flo/proprietary/vidc_1080p.fw ${D}${FW_QCOM_PATH}
- install -m 0644 license.txt ${D}${nonarch_base_libdir}/firmware/qcom/flo
+ install -m 0644 license.txt ${D}${FW_QCOM_PATH}
- 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
+ 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/firmware-qcom-rb5_20210331-v4.bb b/recipes-bsp/firmware/firmware-qcom-rb5_20210331-v4.bb
index 44dc7e7..6820c92 100644
--- a/recipes-bsp/firmware/firmware-qcom-rb5_20210331-v4.bb
+++ b/recipes-bsp/firmware/firmware-qcom-rb5_20210331-v4.bb
@@ -16,6 +16,8 @@ PE = "1"
DEPENDS += "qca-swiss-army-knife-native"
+FW_QCOM_NAME = "sm8250"
+
require recipes-bsp/firmware/firmware-qcom.inc
do_compile() {
@@ -25,12 +27,12 @@ do_compile() {
}
do_install() {
- install -d ${D}${nonarch_base_libdir}/firmware/qcom/sm8250
+ install -d ${D}${FW_QCOM_PATH}
- install -m 0444 ./08-dspso/dspso.bin ${D}${nonarch_base_libdir}/firmware/qcom/sm8250
+ install -m 0444 ./08-dspso/dspso.bin ${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 -m 0444 ./30-slpi_split/slpi.mbn ${D}${FW_QCOM_PATH}/
+ install -m 0444 ./39-jsn/slpi*.jsn ${D}${FW_QCOM_PATH}/
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
@@ -44,3 +46,8 @@ 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 \
+ linux-firmware-qcom-${FW_QCOM_NAME}-sensors \
+"
diff --git a/recipes-bsp/firmware/firmware-qcom.inc b/recipes-bsp/firmware/firmware-qcom.inc
index c458878..22cb02c 100644
--- a/recipes-bsp/firmware/firmware-qcom.inc
+++ b/recipes-bsp/firmware/firmware-qcom.inc
@@ -4,6 +4,48 @@ 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}-audio = "${FW_QCOM_PATH}/adsp.mbn ${FW_QCOM_PATH}/adsp*.jsn"
+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"
+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}-modem = "${FW_QCOM_PATH}/mba.mbn ${FW_QCOM_PATH}/modem.mbn ${FW_QCOM_PATH}/modem*.jsn"
+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}-sensors = "${FW_QCOM_PATH}/slpi.mbn ${FW_QCOM_PATH}/slpi*.jsn"
+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}-wifi = "${FW_QCOM_PATH}/wcnss.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..fff4ef2
--- /dev/null
+++ b/recipes-bsp/firmware/firmware-wcn6855_git.bb
@@ -0,0 +1,41 @@
+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"
+SUBDIR = "ath11k/WCN6855/hw2.0"
+
+do_install() {
+ install -d ${D}${FWDIR}/${SUBDIR}
+
+ install -m 0644 ${SUBDIR}/* ${D}${FWDIR}/${SUBDIR}
+}
+
+PACKAGE_BEFORE_PN = "${PN}-board"
+
+RDEPENDS:${PN}-board += "${PN}"
+RDEPENDS:${PN} += "linux-firmware-ath10k-license"
+
+FILES:${PN} = "${FWDIR}"
+FILES:${PN}-board = "${FWDIR}/${SUBDIR}/board*.bin ${FWDIR}/${SUBDIR}/regdb*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/packagegroups/packagegroup-firmware-dragonboard410c.bb b/recipes-bsp/packagegroups/packagegroup-firmware-dragonboard410c.bb
new file mode 100644
index 0000000..a142c4f
--- /dev/null
+++ b/recipes-bsp/packagegroups/packagegroup-firmware-dragonboard410c.bb
@@ -0,0 +1,9 @@
+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)} \
+ 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..429e7d8
--- /dev/null
+++ b/recipes-bsp/packagegroups/packagegroup-firmware-dragonboard820c.bb
@@ -0,0 +1,11 @@
+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', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'wifi', 'linux-firmware-ath10k', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', 'linux-firmware-qca', '', d)} \
+ 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..020142e
--- /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', '', 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-rb5.bb b/recipes-bsp/packagegroups/packagegroup-firmware-rb5.bb
new file mode 100644
index 0000000..d7890dd
--- /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-a630', '', 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-devtools/debugcc/debugcc_git.bb b/recipes-devtools/debugcc/debugcc_git.bb
new file mode 100644
index 0000000..55e3e9d
--- /dev/null
+++ b/recipes-devtools/debugcc/debugcc_git.bb
@@ -0,0 +1,26 @@
+SUMMARY = "A tool to debug Qualcomm clock controllers."
+HOMEPAGE = "https://github.com/andersson/debugcc/"
+SECTION = "devel"
+
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://debugcc.c;beginline=5;endline=29;md5=5598b6b886a3af944e4d19bb7d947095"
+
+SRC_URI = "\
+ git://github.com/andersson/debugcc.git;branch=master;protocol=https \
+"
+
+SRCREV = "9e99460893852fab26ab09ef25ed299f53fb1390"
+
+PV = "0.0+git${SRCPV}"
+
+S = "${WORKDIR}/git"
+
+EXTRA_OEMAKE = "CC='${CC}' CPPFLAGS='${CPPFLAGS}' CFLAGS='${CFLAGS}' LDFLAGS='${LDFLAGS}'"
+
+do_install() {
+ install -d ${D}${bindir}
+ install -m 0755 ${B}/debugcc ${D}${bindir}
+ for f in ${B}/*-debugcc ; do
+ ln -r -s -T ${D}${bindir}/debugcc ${D}${bindir}/`basename $f`
+ done
+}
diff --git a/recipes-devtools/skales/skales_git.bb b/recipes-devtools/skales/skales_git.bb
index 782d20c..2b04657 100644
--- a/recipes-devtools/skales/skales_git.bb
+++ b/recipes-devtools/skales/skales_git.bb
@@ -9,7 +9,7 @@ LIC_FILES_CHKSUM = "file://mkbootimg;beginline=3;endline=29;md5=114b84083e657f38
SRCREV = "6eac9e943de53c4aaaede3697e9226a47686fe25"
PV = "1.5.0+git${SRCPV}"
-SRC_URI = "git://source.codeaurora.org/quic/kernel/skales;protocol=http \
+SRC_URI = "git://source.codeaurora.org/quic/kernel/skales;protocol=http;branch=master \
file://0002-mkbootimg-use-python3.patch \
"
diff --git a/recipes-graphics/mesa/files/0002-meson.build-make-TLS-ELF-optional.patch b/recipes-graphics/mesa/files/0002-meson.build-make-TLS-ELF-optional.patch
index 3d87c97..043217c 100644
--- a/recipes-graphics/mesa/files/0002-meson.build-make-TLS-ELF-optional.patch
+++ b/recipes-graphics/mesa/files/0002-meson.build-make-TLS-ELF-optional.patch
@@ -1,4 +1,4 @@
-From a9253ee295c4684e20aee6022bc9f26c5fc68856 Mon Sep 17 00:00:00 2001
+From 8f767113d5b8a2ee89cd069d54243f8b0ac9a218 Mon Sep 17 00:00:00 2001
From: Alistair Francis <alistair@alistair23.me>
Date: Wed, 2 Sep 2020 15:28:50 -0500
Subject: [PATCH] meson.build: make TLS ELF optional
@@ -8,32 +8,29 @@ TLS GLX optional again" patch updated to the latest mesa.
Upstream-Status: Inappropriate [configuration]
Signed-off-by: Alistair Francis <alistair@alistair23.me>
-
---
- meson.build | 4 +---
+ meson.build | 2 +-
meson_options.txt | 6 ++++++
- 2 files changed, 7 insertions(+), 3 deletions(-)
+ 2 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/meson.build b/meson.build
-index 5931260dd3d..23a3cd66156 100644
+index 9b4e5e28864..15eacbe6918 100644
--- a/meson.build
+++ b/meson.build
-@@ -453,9 +453,7 @@ endif
+@@ -509,7 +509,7 @@ foreach platform : _platforms
+ endforeach
- # Android uses emutls for versions <= P/28. For USE_ELF_TLS we need ELF TLS.
use_elf_tls = false
--if (not ['freebsd', 'openbsd', 'haiku'].contains(host_machine.system()) and
-- (not with_platform_android or get_option('platform-sdk-version') >= 29) and
-- (not with_platform_windows or not with_shared_glapi))
+-if not with_platform_windows or not with_shared_glapi
+if (not with_platform_android or get_option('platform-sdk-version') >= 29) and get_option('elf-tls')
pre_args += '-DUSE_ELF_TLS'
use_elf_tls = true
diff --git a/meson_options.txt b/meson_options.txt
-index 54e15e9f850..118eba3914d 100644
+index fd0d99f2f9a..f994c22ac61 100644
--- a/meson_options.txt
+++ b/meson_options.txt
-@@ -439,6 +439,12 @@ option(
+@@ -455,6 +455,12 @@ option(
value : true,
description : 'Enable direct rendering in GLX and EGL for DRI',
)
@@ -46,3 +43,6 @@ index 54e15e9f850..118eba3914d 100644
option(
'prefer-iris',
type : 'boolean',
+--
+2.34.0
+
diff --git a/recipes-graphics/mesa/mesa_git.bb b/recipes-graphics/mesa/mesa_git.bb
index f805d3a..f7e8288 100644
--- a/recipes-graphics/mesa/mesa_git.bb
+++ b/recipes-graphics/mesa/mesa_git.bb
@@ -27,7 +27,7 @@ FILES:${PN}-ci = "${bindir}/deqp-runner.sh ${datadir}/mesa/deqp-*"
do_install:append () {
install -d ${D}/${datadir}/mesa
- install -m 0644 ${S}/.gitlab-ci/deqp-all-skips.txt ${D}/${datadir}/mesa/
+ install -m 0644 ${S}/.gitlab-ci/all-skips.txt ${D}/${datadir}/mesa/
for f in ${S}/src/freedreno/ci/deqp-freedreno-*; do
install -m 0644 $f ${D}/${datadir}/mesa/
done
diff --git a/recipes-kernel/linux/linux-linaro-qcomlt-dev.bb b/recipes-kernel/linux/linux-linaro-qcomlt-dev.bb
index 9aae535..e25e8b0 100644
--- a/recipes-kernel/linux/linux-linaro-qcomlt-dev.bb
+++ b/recipes-kernel/linux/linux-linaro-qcomlt-dev.bb
@@ -16,5 +16,7 @@ SRCBRANCH = "integration-linux-qcomlt"
# anonymous python routine and resolved when the variables are finalized.
SRCREV ?= '${@oe.utils.conditional("PREFERRED_PROVIDER_virtual/kernel", "linux-linaro-qcomlt-dev", "${AUTOREV}", "29594404d7fe73cd80eaa4ee8c43dcc53970c60e", d)}'
+SRC_URI += "file://0001-Revert-kbuild-Enable-DT-schema-checks-for-.dtb-targe.patch"
+
LINUX_VERSION = "5.11+"
PV = "${LINUX_VERSION}+git${SRCPV}"
diff --git a/recipes-kernel/linux/linux-linaro-qcomlt-dev/0001-Revert-kbuild-Enable-DT-schema-checks-for-.dtb-targe.patch b/recipes-kernel/linux/linux-linaro-qcomlt-dev/0001-Revert-kbuild-Enable-DT-schema-checks-for-.dtb-targe.patch
new file mode 100644
index 0000000..f9af132
--- /dev/null
+++ b/recipes-kernel/linux/linux-linaro-qcomlt-dev/0001-Revert-kbuild-Enable-DT-schema-checks-for-.dtb-targe.patch
@@ -0,0 +1,48 @@
+From 8f391e49c75b8328f2562b3f5323530e0707b46b Mon Sep 17 00:00:00 2001
+From: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
+Date: Wed, 24 Nov 2021 11:15:55 +0300
+Subject: [PATCH] Revert "kbuild: Enable DT schema checks for %.dtb targets"
+
+This reverts commit 53182e81f47d4ea0c727c49ad23cb782173ab849.
+
+There is no need to check dtb schema while building OE kernel images.
+Not to mention that supporting dtschema properly requires significant
+changes to the OE-core layer (which are still pending). With all that in
+mind revert the commit making dtschema validation mandatory when
+building individual dtb files.
+
+Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
+---
+ Makefile | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index daf95a574b08..fdd75ef39d88 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1374,17 +1374,17 @@ endif
+
+ ifneq ($(dtstree),)
+
+-%.dtb: dt_binding_check include/config/kernel.release scripts_dtc
+- $(Q)$(MAKE) $(build)=$(dtstree) $(dtstree)/$@ $(dtstree)/$*.dt.yaml
++%.dtb: include/config/kernel.release scripts_dtc
++ $(Q)$(MAKE) $(build)=$(dtstree) $(dtstree)/$@
+
+-%.dtbo: dt_binding_check include/config/kernel.release scripts_dtc
+- $(Q)$(MAKE) $(build)=$(dtstree) $(dtstree)/$@ $(dtstree)/$*.dt.yaml
++%.dtbo: include/config/kernel.release scripts_dtc
++ $(Q)$(MAKE) $(build)=$(dtstree) $(dtstree)/$@
+
+ PHONY += dtbs dtbs_install dtbs_check
+ dtbs: include/config/kernel.release scripts_dtc
+ $(Q)$(MAKE) $(build)=$(dtstree)
+
+-ifneq ($(filter dtbs_check %.dtb %.dtbo, $(MAKECMDGOALS)),)
++ifneq ($(filter dtbs_check, $(MAKECMDGOALS)),)
+ export CHECK_DTBS=y
+ dtbs: dt_binding_check
+ endif
+--
+2.30.2
+
diff --git a/recipes-kernel/linux/linux-linaro-qcomlt_5.14.bb b/recipes-kernel/linux/linux-linaro-qcomlt_5.14.bb
deleted file mode 100644
index 0fc0f19..0000000
--- a/recipes-kernel/linux/linux-linaro-qcomlt_5.14.bb
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (C) 2014-2020 Linaro
-# Released under the MIT license (see COPYING.MIT for the terms)
-
-require recipes-kernel/linux/linux-linaro-qcom.inc
-
-SRCBRANCH = "release/sa8155p-adp/qcomlt-5.14"
-SRCREV = "4091a5657797a2e936231eb791ad6053cbaaff16"
-
-COMPATIBLE_MACHINE = "(sa8155p)"
diff --git a/recipes-kernel/linux/linux-linaro-qcomlt_5.15.bb b/recipes-kernel/linux/linux-linaro-qcomlt_5.15.bb
new file mode 100644
index 0000000..e953e63
--- /dev/null
+++ b/recipes-kernel/linux/linux-linaro-qcomlt_5.15.bb
@@ -0,0 +1,10 @@
+# Copyright (C) 2021 Linaro
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+require recipes-kernel/linux/linux-linaro-qcom.inc
+
+# SRCBRANCH set to "release/qcomlt-5.15" in linux-linaro-qcom.inc
+SRCREV = "43aa1d1f5fcf5d68f07821b0b3a9314f7c7af649"
+
+SRCBRANCH:sa8155p = "release/sa8155p-adp/qcomlt-5.15"
+SRCREV:sa8155p = "3290018e72cdf6a1b90e672710ad2a6dda9fffd6"
diff --git a/recipes-test/bootrr/bootrr/bootrr-auto-switch-to-using-sh.patch b/recipes-test/bootrr/bootrr/bootrr-auto-switch-to-using-sh.patch
new file mode 100644
index 0000000..cca2543
--- /dev/null
+++ b/recipes-test/bootrr/bootrr/bootrr-auto-switch-to-using-sh.patch
@@ -0,0 +1,22 @@
+From ef8073c29988c1cf46221e3062811f19e051b62d Mon Sep 17 00:00:00 2001
+From: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
+Date: Sat, 2 Oct 2021 16:36:47 +0300
+Subject: [PATCH] bootrr-auto: switch to using sh
+
+There is nothing bash-specific in bootrr-auto, we can safely use /bin/sh
+instead. Verified with dash and with busybox sh.
+
+Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
+---
+ helpers/bootrr-auto | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/helpers/bootrr-auto b/helpers/bootrr-auto
+index 672c590..607be0a 100755
+--- a/helpers/bootrr-auto
++++ b/helpers/bootrr-auto
+@@ -1,4 +1,4 @@
+-#!/bin/bash
++#!/bin/sh
+
+ $(pwd)/helpers/bootrr-generic-tests
diff --git a/recipes-test/bootrr/bootrr_git.bb b/recipes-test/bootrr/bootrr_git.bb
new file mode 100644
index 0000000..0d40d22
--- /dev/null
+++ b/recipes-test/bootrr/bootrr_git.bb
@@ -0,0 +1,16 @@
+SUMMARY = "simple low-level testing tool for qcom boards"
+
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=987293312a134ab40eec5f3d446cfaff"
+
+SRCREV = "d2329902b701e0efa345628471d0d275d5a5835a"
+SRC_URI = "\
+ git://github.com/andersson/bootrr.git;branch=master;protocol=https \
+ file://bootrr-auto-switch-to-using-sh.patch \
+"
+
+S = "${WORKDIR}/git"
+
+do_install() {
+ oe_runmake install 'DESTDIR=${D}'
+}
diff --git a/recipes-test/diag/diag_git.bb b/recipes-test/diag/diag_git.bb
index a42c126..6eb16b2 100644
--- a/recipes-test/diag/diag_git.bb
+++ b/recipes-test/diag/diag_git.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://github.com/andersson/diag"
LICENSE = "BSD-3-Clause"
LIC_FILES_CHKSUM = "file://LICENSE;md5=f6832ae4af693c6f31ffd931e25ef580"
-SRC_URI = "git://github.com/andersson/diag.git;protocol=https \
+SRC_URI = "git://github.com/andersson/diag.git;branch=master;protocol=https \
file://0001-Disable-use-of-__NR_io_getevents-when-not-defined.patch \
"
diff --git a/recipes-test/images/initramfs-firmware-image.bb b/recipes-test/images/initramfs-firmware-image.bb
new file mode 100644
index 0000000..6fcb2ff
--- /dev/null
+++ b/recipes-test/images/initramfs-firmware-image.bb
@@ -0,0 +1,21 @@
+DESCRIPTION = "Tiny ramdisk image with firmware files"
+
+PACKAGE_INSTALL = " \
+ packagegroup-firmware-dragonboard410c \
+ packagegroup-firmware-dragonboard820c \
+ packagegroup-firmware-dragonboard845c \
+ packagegroup-firmware-rb5 \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'wifi', 'wireless-regdb-static', '', d)} \
+"
+
+IMAGE_LINGUAS = ""
+LICENSE = "MIT"
+
+IMAGE_FSTYPES = "${INITRAMFS_FSTYPES}"
+inherit core-image
+
+IMAGE_ROOTFS_SIZE = "8192"
+IMAGE_ROOTFS_EXTRA_SPACE = "0"
+
+# Inhibit installing /init
+IMAGE_BUILDING_DEBUGFS = "true"
diff --git a/recipes-test/images/initramfs-test-full-image.bb b/recipes-test/images/initramfs-test-full-image.bb
index 4081688..91b8f03 100644
--- a/recipes-test/images/initramfs-test-full-image.bb
+++ b/recipes-test/images/initramfs-test-full-image.bb
@@ -1,52 +1,31 @@
-require recipes-test/images/initramfs-tiny-image.bb
+require recipes-test/images/initramfs-test-image.bb
DESCRIPTION = "Relatively larger ramdisk image for running tests (bootrr, etc)"
PACKAGE_INSTALL += " \
- bluez5 \
+ bootrr \
coreutils \
- dhcpcd \
- diag \
- e2fsprogs \
- e2fsprogs-e2fsck \
- e2fsprogs-mke2fs \
- e2fsprogs-resize2fs \
- e2fsprogs-tune2fs \
- ethtool \
- gptfdisk \
- iw \
hdparm \
kexec \
- lava-test-shell \
- libdrm-tests \
lsof \
ncurses \
ncurses-terminfo \
ncurses-terminfo-base \
- pciutils \
- pd-mapper \
- qrtr \
- rmtfs \
stress-ng \
- tqftpserv \
- usbutils \
util-linux \
util-linux-chrt \
util-linux-lsblk \
- wpa-supplicant \
"
-PACKAGE_INSTALL:append:libc-glibc += " \
+PACKAGE_INSTALL:append:libc-glibc = " \
rt-tests \
"
# We'd like to include extra packages provided by layers which we do not depend
# on. This can be handled by .bbappends, but then image recipes including this
# one would not get all these tools. So simulate dynamic bbappend here.
-PACKAGE_INSTALL_openembedded_layer += " \
+PACKAGE_INSTALL_openembedded-layer += " \
crash \
- cryptsetup \
- devmem2 \
dhrystone \
iozone3 \
libgpiod \
@@ -59,12 +38,3 @@ PACKAGE_INSTALL_openembedded_layer += " \
tiobench \
whetstone \
"
-
-PACKAGE_INSTALL_networking_layer += " \
- iperf2 \
- iperf3 \
- tcpdump \
-"
-
-PACKAGE_INSTALL += "${@bb.utils.contains("BBFILE_COLLECTIONS", "openembedded-layer", "${PACKAGE_INSTALL_openembedded_layer}", "", d)}"
-PACKAGE_INSTALL += "${@bb.utils.contains("BBFILE_COLLECTIONS", "networking-layer", "${PACKAGE_INSTALL_networking_layer}", "", d)}"
diff --git a/recipes-test/images/initramfs-test-image.bb b/recipes-test/images/initramfs-test-image.bb
index 746c8df..cabe605 100644
--- a/recipes-test/images/initramfs-test-image.bb
+++ b/recipes-test/images/initramfs-test-image.bb
@@ -28,16 +28,13 @@ PACKAGE_INSTALL += " \
# We'd like to include extra packages provided by layers which we do not depend
# on. This can be handled by .bbappends, but then image recipes including this
# one would not get all these tools. So simulate dynamic bbappend here.
-PACKAGE_INSTALL_openembedded_layer += " \
+PACKAGE_INSTALL_openembedded-layer += " \
cryptsetup \
devmem2 \
"
-PACKAGE_INSTALL_networking_layer += " \
+PACKAGE_INSTALL_networking-layer += " \
iperf2 \
iperf3 \
tcpdump \
"
-
-PACKAGE_INSTALL += "${@bb.utils.contains("BBFILE_COLLECTIONS", "openembedded-layer", "${PACKAGE_INSTALL_openembedded_layer}", "", d)}"
-PACKAGE_INSTALL += "${@bb.utils.contains("BBFILE_COLLECTIONS", "networking-layer", "${PACKAGE_INSTALL_networking_layer}", "", d)}"
diff --git a/recipes-test/images/initramfs-tiny-image.bb b/recipes-test/images/initramfs-tiny-image.bb
index c70ccee..2f72dc4 100644
--- a/recipes-test/images/initramfs-tiny-image.bb
+++ b/recipes-test/images/initramfs-tiny-image.bb
@@ -33,3 +33,16 @@ local_autologin () {
sed -i -e 's/^\(ExecStart *=.*getty \)/\1--autologin root /' ${LOCAL_GETTY}
}
ROOTFS_POSTPROCESS_COMMAND += "${@oe.utils.conditional('VIRTUAL-RUNTIME_init_manager', 'systemd', 'local_autologin;', '', d)}"
+
+# We'd like to include extra packages provided by layers which we do not depend
+# on. This can be handled by .bbappends, but then image recipes including this
+# one would not get all these tools. So simulate dynamic bbappend here.
+#
+# To use it define PACKAGE_INSTALL_foo-layer variable containing the list of
+# packages to be installed if (and only if) layer foo-layer is enabled.
+python() {
+ for layer in d.getVar("BBFILE_COLLECTIONS", True).split():
+ extra = d.getVar("PACKAGE_INSTALL_%s" % layer)
+ if extra:
+ d.appendVar("PACKAGE_INSTALL", " " + extra)
+}