On Thu, Feb 26, 2026 at 02:08:57PM +0530, Ekansh Gupta wrote:
On 2/24/2026 4:19 AM, Dmitry Baryshkov wrote:
On Tue, Feb 24, 2026 at 12:38:59AM +0530, Ekansh Gupta wrote:
Add support for creating compute context-bank (CB) devices under the QDA compute bus based on child nodes of the FastRPC RPMsg device tree node. Each DT child with compatible "qcom,fastrpc-compute-cb" is turned into a QDA-owned struct device on qda_cb_bus_type.
A new qda_cb_dev structure and cb_devs list in qda_dev track these CB devices. qda_populate_child_devices() walks the DT children during QDA RPMsg probe, creates CB devices, configures their DMA and IOMMU settings using of_dma_configure(), and associates a SID from the "reg" property when present.
On RPMsg remove, qda_unpopulate_child_devices() tears down all CB devices, removing them from their IOMMU groups if present and unregistering the devices. This prepares the ground for using CB devices as IOMMU endpoints for DSP compute workloads in later patches.
Are we loosing the nsessions support?
Yes, it's not part of this series. I'll try bringing that as well.
Signed-off-by: Ekansh Gupta ekansh.gupta@oss.qualcomm.com
drivers/accel/qda/Makefile | 1 + drivers/accel/qda/qda_cb.c | 150 ++++++++++++++++++++++++++++++++++++++++++ drivers/accel/qda/qda_cb.h | 26 ++++++++ drivers/accel/qda/qda_drv.h | 3 + drivers/accel/qda/qda_rpmsg.c | 40 +++++++++++ 5 files changed, 220 insertions(+)
diff --git a/drivers/accel/qda/Makefile b/drivers/accel/qda/Makefile index 242684ef1af7..4aded20b6bc2 100644 --- a/drivers/accel/qda/Makefile +++ b/drivers/accel/qda/Makefile @@ -8,5 +8,6 @@ obj-$(CONFIG_DRM_ACCEL_QDA) := qda.o qda-y := \ qda_drv.o \ qda_rpmsg.o \
- qda_cb.o \
obj-$(CONFIG_DRM_ACCEL_QDA_COMPUTE_BUS) += qda_compute_bus.o diff --git a/drivers/accel/qda/qda_cb.c b/drivers/accel/qda/qda_cb.c new file mode 100644 index 000000000000..77a2d8cae076 --- /dev/null +++ b/drivers/accel/qda/qda_cb.c @@ -0,0 +1,150 @@ +// SPDX-License-Identifier: GPL-2.0-only +// Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. +#include <linux/dma-mapping.h> +#include <linux/device.h> +#include <linux/of.h> +#include <linux/of_device.h> +#include <linux/iommu.h> +#include <linux/slab.h> +#include "qda_drv.h" +#include "qda_cb.h"
+static void qda_cb_dev_release(struct device *dev) +{
- kfree(dev);
Do you need to put the reference on the OF node?
Reference put is happening as part of qda_destroy_cb_device.
This way: you have a (small) window where of_node is already put (and might be gone), but the pointer is not NULL. The of_node should be put only when device is no longer accessible from the rest of the system, in release function.