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 <[email protected]> > >> --- > >> 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. -- With best wishes Dmitry
