On Wed, Jun 03, 2026 at 11:09:31AM +0530, Ekansh Gupta wrote: > On 20-05-2026 19:53, Dmitry Baryshkov wrote: > > On Tue, May 19, 2026 at 11:45:56AM +0530, Ekansh Gupta via B4 Relay wrote: > >> From: Ekansh Gupta <[email protected]> > >> > >> Introduce the CB (compute context bank) device management layer for the > >> QDA driver. Each DSP domain node in the device tree may contain child > >> nodes with compatible "qcom,fastrpc-compute-cb", each representing one > >> IOMMU context bank. The driver enumerates those child nodes during > >> RPMsg probe and creates a corresponding device on the qda-compute-cb > >> bus for each one. > >> > >> The CB devices are created via create_qda_cb_device(), which registers > >> them on the qda-compute-cb bus so that the IOMMU subsystem assigns each > >> device its own IOMMU domain, enabling per-session address space > >> isolation for DSP buffer mapping. > >> > >> The new qda_cb.c file provides two functions: > >> > >> qda_create_cb_device() > >> Reads the "reg" property from the DT child node to obtain the > >> stream ID, constructs a unique device name of the form > >> "qda-cb-<dsp>-<sid>", and registers the device on the compute bus. > >> A qda_cb_dev entry is allocated and appended to qdev->cb_devs so > >> that the list can be walked during teardown. > >> > >> qda_destroy_cb_device() > >> Removes the device from its IOMMU group before calling > >> device_unregister(), ensuring the IOMMU domain is released cleanly. > >> > >> CB devices are populated before the DRM device is registered and > >> destroyed before it is unplugged, so no DRM operation can race with > >> CB teardown. On probe failure after population, qda_cb_unpopulate() > >> is called to clean up any CBs that were successfully created before > >> the error. > >> > >> Assisted-by: Claude:claude-4-6-sonnet > >> Signed-off-by: Ekansh Gupta <[email protected]> > >> --- > >> drivers/accel/qda/Makefile | 1 + > >> drivers/accel/qda/qda_cb.c | 99 > >> +++++++++++++++++++++++++++++++++++++++++++ > >> drivers/accel/qda/qda_cb.h | 32 ++++++++++++++ > >> drivers/accel/qda/qda_drv.c | 1 + > >> drivers/accel/qda/qda_drv.h | 3 ++ > >> drivers/accel/qda/qda_rpmsg.c | 12 +++++- > >> 6 files changed, 147 insertions(+), 1 deletion(-) > >> @@ -59,9 +61,17 @@ static int qda_rpmsg_probe(struct rpmsg_device *rpdev) > >> } > >> qdev->dsp_name = label; > >> > >> + ret = qda_cb_populate(qdev, rpdev->dev.of_node); > >> + if (ret) { > >> + dev_err(qdev->dev, "Failed to populate child devices: %d\n", > >> ret); > >> + return ret; > >> + } > >> + > >> ret = qda_register_device(qdev); > >> - if (ret) > >> + if (ret) { > >> + qda_cb_unpopulate(qdev); > >> return ret; > > > > Unwinding registration? > did I miss something here? The intention to free up the CB devices in > case the device registration fails.>
Don't you need to unwind anything else? > >> + } > >> > >> drm_info(&qdev->drm_dev, "QDA RPMsg probe complete for %s\n", > >> qdev->dsp_name); > >> return 0; > >> > >> -- > >> 2.34.1 > >> > >> > > > -- With best wishes Dmitry
