[{"id":3677347,"web_url":"http://patchwork.ozlabs.org/comment/3677347/","msgid":"<7cij7qnjnv5ntsfmjdyozywiiwnpcpzop6mr5comt6djlh2opx@qgxp77geszoe>","list_archive_url":null,"date":"2026-04-14T17:59:42","subject":"Re: [PATCH 3/3] misc: fastrpc: Use context device bus for compute\n banks","submitter":{"id":90483,"url":"http://patchwork.ozlabs.org/api/people/90483/","name":"Dmitry Baryshkov","email":"dmitry.baryshkov@oss.qualcomm.com"},"content":"On Tue, Apr 14, 2026 at 10:01:17PM +0530, Ekansh Gupta via B4 Relay wrote:\n> From: Ekansh Gupta <ekansh.gupta@oss.qualcomm.com>\n> \n> Replace the platform driver approach for compute bank (CB) devices\n> with the generic context_device_bus_type. Compute bank devices are\n> synthetic IOMMU context banks, not real platform devices, so using\n> the context device bus provides a more accurate representation in\n> the device model.\n> \n> Currently, fastrpc used of_platform_populate() to create platform\n> devices for each \"qcom,fastrpc-compute-cb\" DT node, with a platform\n> driver (fastrpc_cb_driver) to handle probe/remove. This approach\n> had a race condition: device nodes were created before channel\n> resources (like spin_lock) were initialized, and probe was async,\n> so applications could open the device before sessions were available.\n> \n> This patch addresses the race by manually creating and configuring\n> CB devices synchronously during fastrpc_rpmsg_probe(), after all\n> channel resources are initialized. The approach follows the pattern\n> used in host1x_memory_context_list_init().\n> \n> Signed-off-by: Ekansh Gupta <ekansh.gupta@oss.qualcomm.com>\n> ---\n>  drivers/misc/Kconfig   |   1 +\n>  drivers/misc/fastrpc.c | 180 ++++++++++++++++++++++++++++++++++---------------\n>  2 files changed, 125 insertions(+), 56 deletions(-)\n> \n> diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig\n> index 00683bf06258..b501462a4548 100644\n> --- a/drivers/misc/Kconfig\n> +++ b/drivers/misc/Kconfig\n> @@ -304,6 +304,7 @@ config QCOM_FASTRPC\n>  \tdepends on RPMSG\n>  \tselect DMA_SHARED_BUFFER\n>  \tselect QCOM_SCM\n> +\tselect CONTEXT_DEVICE_BUS\n>  \thelp\n>  \t  Provides a communication mechanism that allows for clients to\n>  \t  make remote method invocations across processor boundary to\n> diff --git a/drivers/misc/fastrpc.c b/drivers/misc/fastrpc.c\n> index 1080f9acf70a..f66fd3eea5fa 100644\n> --- a/drivers/misc/fastrpc.c\n> +++ b/drivers/misc/fastrpc.c\n> @@ -13,9 +13,9 @@\n>  #include <linux/module.h>\n>  #include <linux/of_address.h>\n>  #include <linux/of.h>\n> -#include <linux/platform_device.h>\n> +#include <linux/of_device.h>\n>  #include <linux/sort.h>\n> -#include <linux/of_platform.h>\n> +#include <linux/context_bus.h>\n>  #include <linux/rpmsg.h>\n>  #include <linux/scatterlist.h>\n>  #include <linux/slab.h>\n> @@ -250,6 +250,18 @@ struct fastrpc_invoke_ctx {\n>  \tstruct fastrpc_channel_ctx *cctx;\n>  };\n>  \n> +/**\n> + * struct fastrpc_cb_device - Compute bank device wrapper\n> + * @dev: Device structure\n> + * @sess: Back-pointer to the session context\n> + */\n> +struct fastrpc_cb_device {\n> +\tstruct device dev;\n> +\tstruct fastrpc_session_ctx *sess;\n> +};\n> +\n> +#define to_fastrpc_cb_device(d) container_of(d, struct fastrpc_cb_device, dev)\n> +\n>  struct fastrpc_session_ctx {\n>  \tstruct device *dev;\n>  \tint sid;\n> @@ -2190,92 +2202,156 @@ static const struct file_operations fastrpc_fops = {\n>  \t.compat_ioctl = fastrpc_device_ioctl,\n>  };\n>  \n> -static int fastrpc_cb_probe(struct platform_device *pdev)\n> +static void fastrpc_cb_dev_release(struct device *dev)\n> +{\n> +\tstruct fastrpc_cb_device *cb_dev = to_fastrpc_cb_device(dev);\n> +\n> +\tof_node_put(dev->of_node);\n> +\tkfree(cb_dev);\n> +}\n> +\n> +static int fastrpc_create_cb_device(struct fastrpc_channel_ctx *cctx,\n> +\t\t\t\t    struct device *parent,\n> +\t\t\t\t    struct device_node *cb_node)\n>  {\n> -\tstruct fastrpc_channel_ctx *cctx;\n>  \tstruct fastrpc_session_ctx *sess;\n> -\tstruct device *dev = &pdev->dev;\n> -\tint i, sessions = 0;\n> +\tstruct fastrpc_cb_device *cb_dev;\n>  \tunsigned long flags;\n> -\tint rc;\n> -\tu32 dma_bits;\n> -\n> -\tcctx = dev_get_drvdata(dev->parent);\n> -\tif (!cctx)\n> -\t\treturn -EINVAL;\n> +\tint i, sessions = 0, rc;\n> +\tu32 dma_bits, sid = 0;\n>  \n> -\tof_property_read_u32(dev->of_node, \"qcom,nsessions\", &sessions);\n> +\t/* Read SID early so it can be used in the device name */\n> +\tof_property_read_u32(cb_node, \"reg\", &sid);\n> +\tof_property_read_u32(cb_node, \"qcom,nsessions\", &sessions);\n>  \n>  \tspin_lock_irqsave(&cctx->lock, flags);\n>  \tif (cctx->sesscount >= FASTRPC_MAX_SESSIONS) {\n> -\t\tdev_err(&pdev->dev, \"too many sessions\\n\");\n> +\t\tdev_err(parent, \"too many sessions\\n\");\n>  \t\tspin_unlock_irqrestore(&cctx->lock, flags);\n>  \t\treturn -ENOSPC;\n>  \t}\n>  \tdma_bits = cctx->soc_data->dma_addr_bits_default;\n> +\tif (cctx->domain_id == CDSP_DOMAIN_ID)\n> +\t\tdma_bits = cctx->soc_data->dma_addr_bits_cdsp;\n> +\n>  \tsess = &cctx->session[cctx->sesscount++];\n>  \tsess->used = false;\n>  \tsess->valid = true;\n> -\tsess->dev = dev;\n> -\tdev_set_drvdata(dev, sess);\n> +\tsess->sid = sid;\n> +\tspin_unlock_irqrestore(&cctx->lock, flags);\n>  \n> -\tif (cctx->domain_id == CDSP_DOMAIN_ID)\n> -\t\tdma_bits = cctx->soc_data->dma_addr_bits_cdsp;\n> +\tcb_dev = kzalloc_obj(*cb_dev);\n> +\tif (!cb_dev)\n> +\t\treturn -ENOMEM;\n>  \n> -\tif (of_property_read_u32(dev->of_node, \"reg\", &sess->sid))\n> -\t\tdev_info(dev, \"FastRPC Session ID not specified in DT\\n\");\n> +\tcb_dev->sess = sess;\n>  \n> -\tif (sessions > 0) {\n> -\t\tstruct fastrpc_session_ctx *dup_sess;\n> +\tdevice_initialize(&cb_dev->dev);\n> +\tcb_dev->dev.parent = parent;\n> +\tcb_dev->dev.bus = &context_device_bus_type;\n> +\tcb_dev->dev.release = fastrpc_cb_dev_release;\n> +\tcb_dev->dev.of_node = of_node_get(cb_node);\n> +\tcb_dev->dev.dma_mask = &cb_dev->dev.coherent_dma_mask;\n> +\tcb_dev->dev.coherent_dma_mask = DMA_BIT_MASK(32);\n> +\tdev_set_name(&cb_dev->dev, \"%s:compute-cb@%u\", dev_name(parent), sid);\n\nPlease extract this code to a helper function inside the context bus and\nuse it for both host1x and fastrpc.\n\n>  \n> +\trc = device_add(&cb_dev->dev);\n> +\tif (rc) {\n> +\t\tdev_err(parent, \"failed to add CB device: %d\\n\", rc);\n> +\t\tgoto err_put;\n> +\t}\n> +\n> +\trc = of_dma_configure(&cb_dev->dev, cb_node, true);\n> +\tif (rc) {\n> +\t\tdev_err(parent, \"of_dma_configure failed for CB device: %d\\n\", rc);\n> +\t\tgoto err_del;\n> +\t}\n> +\n> +\trc = dma_set_mask(&cb_dev->dev, DMA_BIT_MASK(dma_bits));\n> +\tif (rc) {\n> +\t\tdev_err(parent, \"%u-bit DMA enable failed\\n\", dma_bits);\n> +\t\tgoto err_del;\n> +\t}\n> +\n> +\tsess->dev = &cb_dev->dev;\n> +\n> +\tif (sessions > 0) {\n> +\t\tspin_lock_irqsave(&cctx->lock, flags);\n>  \t\tfor (i = 1; i < sessions; i++) {\n> +\t\t\tstruct fastrpc_session_ctx *dup_sess;\n> +\n>  \t\t\tif (cctx->sesscount >= FASTRPC_MAX_SESSIONS)\n>  \t\t\t\tbreak;\n>  \t\t\tdup_sess = &cctx->session[cctx->sesscount++];\n>  \t\t\tmemcpy(dup_sess, sess, sizeof(*dup_sess));\n>  \t\t}\n> -\t}\n> -\tspin_unlock_irqrestore(&cctx->lock, flags);\n> -\trc = dma_set_mask(dev, DMA_BIT_MASK(dma_bits));\n> -\tif (rc) {\n> -\t\tdev_err(dev, \"%u-bit DMA enable failed\\n\", dma_bits);\n> -\t\treturn rc;\n> +\t\tspin_unlock_irqrestore(&cctx->lock, flags);\n>  \t}\n>  \n>  \treturn 0;\n> +\n> +err_del:\n> +\tdevice_del(&cb_dev->dev);\n> +err_put:\n> +\tof_node_put(cb_dev->dev.of_node);\n> +\tput_device(&cb_dev->dev);\n> +\treturn rc;\n>  }\n>  \n> -static void fastrpc_cb_remove(struct platform_device *pdev)\n> +static void fastrpc_depopulate_cb_devices(struct fastrpc_channel_ctx *cctx)\n>  {\n> -\tstruct fastrpc_channel_ctx *cctx = dev_get_drvdata(pdev->dev.parent);\n> -\tstruct fastrpc_session_ctx *sess = dev_get_drvdata(&pdev->dev);\n>  \tunsigned long flags;\n> -\tint i;\n> +\tint i, j;\n>  \n>  \tspin_lock_irqsave(&cctx->lock, flags);\n>  \tfor (i = 0; i < FASTRPC_MAX_SESSIONS; i++) {\n> -\t\tif (cctx->session[i].sid == sess->sid) {\n> +\t\tif (cctx->session[i].valid) {\n>  \t\t\tcctx->session[i].valid = false;\n>  \t\t\tcctx->sesscount--;\n>  \t\t}\n>  \t}\n>  \tspin_unlock_irqrestore(&cctx->lock, flags);\n> +\n> +\tfor (i = 0; i < FASTRPC_MAX_SESSIONS; i++) {\n> +\t\tstruct device *dev = cctx->session[i].dev;\n> +\n> +\t\tif (!dev)\n> +\t\t\tcontinue;\n> +\n> +\t\t/* Unregister the device once */\n> +\t\tdevice_unregister(dev);\n> +\n> +\t\t/* Clear this dev pointer from all sessions that share it */\n> +\t\tfor (j = i; j < FASTRPC_MAX_SESSIONS; j++) {\n> +\t\t\tif (cctx->session[j].dev == dev)\n> +\t\t\t\tcctx->session[j].dev = NULL;\n> +\t\t}\n> +\t}\n>  }\n>  \n> -static const struct of_device_id fastrpc_match_table[] = {\n> -\t{ .compatible = \"qcom,fastrpc-compute-cb\", },\n> -\t{}\n> -};\n> +static int fastrpc_populate_cb_devices(struct fastrpc_channel_ctx *cctx,\n> +\t\t\t\t\tstruct device *parent,\n> +\t\t\t\t\tstruct device_node *parent_node)\n> +{\n> +\tstruct device_node *child;\n> +\tint ret = 0;\n>  \n> -static struct platform_driver fastrpc_cb_driver = {\n> -\t.probe = fastrpc_cb_probe,\n> -\t.remove = fastrpc_cb_remove,\n> -\t.driver = {\n> -\t\t.name = \"qcom,fastrpc-cb\",\n> -\t\t.of_match_table = fastrpc_match_table,\n> -\t\t.suppress_bind_attrs = true,\n> -\t},\n> -};\n> +\tfor_each_child_of_node(parent_node, child) {\n> +\t\tif (!of_device_is_compatible(child, \"qcom,fastrpc-compute-cb\"))\n> +\t\t\tcontinue;\n> +\n> +\t\tret = fastrpc_create_cb_device(cctx, parent, child);\n> +\t\tif (ret) {\n> +\t\t\tdev_err(parent, \"failed to create CB device for %s: %d\\n\",\n> +\t\t\t\tchild->name, ret);\n> +\t\t\tof_node_put(child);\n> +\t\t\tfastrpc_depopulate_cb_devices(cctx);\n> +\t\t\treturn ret;\n> +\t\t}\n> +\t}\n> +\n> +\treturn 0;\n> +}\n>  \n>  static int fastrpc_device_register(struct device *dev, struct fastrpc_channel_ctx *cctx,\n>  \t\t\t\t   bool is_secured, const char *domain)\n> @@ -2441,7 +2517,7 @@ static int fastrpc_rpmsg_probe(struct rpmsg_device *rpdev)\n>  \tdata->domain_id = domain_id;\n>  \tdata->rpdev = rpdev;\n>  \n> -\terr = of_platform_populate(rdev->of_node, NULL, NULL, rdev);\n> +\terr = fastrpc_populate_cb_devices(data, rdev, rdev->of_node);\n>  \tif (err)\n>  \t\tgoto err_deregister_fdev;\n>  \n> @@ -2496,7 +2572,7 @@ static void fastrpc_rpmsg_remove(struct rpmsg_device *rpdev)\n>  \tif (cctx->remote_heap)\n>  \t\tfastrpc_buf_free(cctx->remote_heap);\n>  \n> -\tof_platform_depopulate(&rpdev->dev);\n> +\tfastrpc_depopulate_cb_devices(cctx);\n>  \n>  \tfastrpc_channel_ctx_put(cctx);\n>  }\n> @@ -2558,16 +2634,9 @@ static int fastrpc_init(void)\n>  {\n>  \tint ret;\n>  \n> -\tret = platform_driver_register(&fastrpc_cb_driver);\n> -\tif (ret < 0) {\n> -\t\tpr_err(\"fastrpc: failed to register cb driver\\n\");\n> -\t\treturn ret;\n> -\t}\n> -\n>  \tret = register_rpmsg_driver(&fastrpc_driver);\n>  \tif (ret < 0) {\n>  \t\tpr_err(\"fastrpc: failed to register rpmsg driver\\n\");\n> -\t\tplatform_driver_unregister(&fastrpc_cb_driver);\n>  \t\treturn ret;\n>  \t}\n>  \n> @@ -2577,7 +2646,6 @@ module_init(fastrpc_init);\n>  \n>  static void fastrpc_exit(void)\n>  {\n> -\tplatform_driver_unregister(&fastrpc_cb_driver);\n>  \tunregister_rpmsg_driver(&fastrpc_driver);\n>  }\n>  module_exit(fastrpc_exit);\n> \n> -- \n> 2.34.1\n> \n>","headers":{"Return-Path":"\n <linux-tegra+bounces-13765-incoming=patchwork.ozlabs.org@vger.kernel.org>","X-Original-To":["incoming@patchwork.ozlabs.org","linux-tegra@vger.kernel.org"],"Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=qualcomm.com header.i=@qualcomm.com header.a=rsa-sha256\n header.s=qcppdkim1 header.b=PRDd7HXU;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com\n header.a=rsa-sha256 header.s=google header.b=QwJznHGd;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=104.64.211.4; helo=sin.lore.kernel.org;\n envelope-from=linux-tegra+bounces-13765-incoming=patchwork.ozlabs.org@vger.kernel.org;\n receiver=patchwork.ozlabs.org)","smtp.subspace.kernel.org;\n\tdkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com\n header.b=\"PRDd7HXU\";\n\tdkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com\n header.b=\"QwJznHGd\"","smtp.subspace.kernel.org;\n arc=none smtp.client-ip=205.220.168.131","smtp.subspace.kernel.org;\n dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com","smtp.subspace.kernel.org;\n spf=pass smtp.mailfrom=oss.qualcomm.com"],"Received":["from sin.lore.kernel.org (sin.lore.kernel.org [104.64.211.4])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fwBrG6NF2z1xtJ\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 15 Apr 2026 03:59:58 +1000 (AEST)","from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby sin.lore.kernel.org (Postfix) with ESMTP id 4935E301C306\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 14 Apr 2026 17:59:50 +0000 (UTC)","from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id 6FC70318ED6;\n\tTue, 14 Apr 2026 17:59:49 +0000 (UTC)","from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com\n [205.220.168.131])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby smtp.subspace.kernel.org (Postfix) with ESMTPS id ADC49318B85\n\tfor <linux-tegra@vger.kernel.org>; Tue, 14 Apr 2026 17:59:47 +0000 (UTC)","from pps.filterd (m0279863.ppops.net [127.0.0.1])\n\tby mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id\n 63EG3MbO966057\n\tfor <linux-tegra@vger.kernel.org>; Tue, 14 Apr 2026 17:59:47 GMT","from mail-qt1-f197.google.com (mail-qt1-f197.google.com\n [209.85.160.197])\n\tby mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4dhrs1rfyk-1\n\t(version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT)\n\tfor <linux-tegra@vger.kernel.org>; Tue, 14 Apr 2026 17:59:46 +0000 (GMT)","by mail-qt1-f197.google.com with SMTP id\n d75a77b69052e-50b4987c698so157693981cf.0\n        for <linux-tegra@vger.kernel.org>;\n Tue, 14 Apr 2026 10:59:46 -0700 (PDT)","from umbar.lan\n (2001-14ba-a073-af00-264b-feff-fe8b-be8a.rev.dnainternet.fi.\n [2001:14ba:a073:af00:264b:feff:fe8b:be8a])\n        by smtp.gmail.com with ESMTPSA id\n 38308e7fff4ca-38e4957eb57sm32395581fa.36.2026.04.14.10.59.43\n        (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n        Tue, 14 Apr 2026 10:59:43 -0700 (PDT)"],"ARC-Seal":"i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1776189589; cv=none;\n b=XBFrCHHFa2uZP62S4UYvduiQ/0L1NX/RhdkRYzwdnmmCVAGDuAeny03Zi4B4fkYmGQCozdkI6VPKGk7t81prJHpAlt+MZPYOqZccD0I6eMcfXxdcrVq7SzrhD2w6skm8quWuOqEAdr0jtu7CDW4T3pHYne408a72+CP1OQNseAE=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1776189589; c=relaxed/simple;\n\tbh=F9IImTWbAE/07UVOrHFqvyTG3I6+wFwxQODwtqPFCCs=;\n\th=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:\n\t Content-Type:Content-Disposition:In-Reply-To;\n b=PD6KpLSpQel9RvdxDpTwvHlI/FCPuez4wItixHr4SgZpRksMiuq0dhEl8EsQ1NxvAGS/MrMNHdky/0B940VAFlpz7HaUbnS+GzMwdMvpMtP+irA5v6k3cOtamNi20r4zq6tKMBFueobDmTGnFj/eplUV+h/X3o8rFbYDo1FzSNc=","ARC-Authentication-Results":"i=1; smtp.subspace.kernel.org;\n dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com;\n spf=pass smtp.mailfrom=oss.qualcomm.com;\n dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com\n header.b=PRDd7HXU;\n dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com\n header.b=QwJznHGd; arc=none smtp.client-ip=205.220.168.131","DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h=\n\tcc:content-type:date:from:in-reply-to:message-id:mime-version\n\t:references:subject:to; s=qcppdkim1; bh=QmmQoU/diSWqj6mLutzvYKAy\n\tDS7PmKhjSkMdbEs6GLI=; b=PRDd7HXUGHWe6M9MJifW8KWES6T96D4dHkR1kHFJ\n\tLVo5XrJbdL+wbRWSyidLGgE/VD3bngFLr8VwBB0L24//GcHRapu/FwogEHmSCYsr\n\t9jthYlyVqwkhYI8arsrp9kXaRSD2VkPaHAtHtJ/Ry31xXqjWKKu+Woxn0ik1dcCy\n\t/v5lhFbn556bT8xg9fqZJM9ioSuFlu0MmF5XLqHlNLBhtNVPA2+aqXgKBHTM8zqC\n\t2porMtZmSWORK1WmqkcrW/Jn7a/XQqbaTpWRF0YqFlk6EQ+umy0OpgC7c6pWcNDR\n\tg0MiUOcU2KAiQHzLllQLyiFvLPJfM/yMKGrtia808VCIqQ==","v=1; a=rsa-sha256; c=relaxed/relaxed;\n        d=oss.qualcomm.com; s=google; t=1776189586; x=1776794386;\n darn=vger.kernel.org;\n        h=in-reply-to:content-disposition:mime-version:references:message-id\n         :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to;\n        bh=QmmQoU/diSWqj6mLutzvYKAyDS7PmKhjSkMdbEs6GLI=;\n        b=QwJznHGdttwZHPQpjnH1TqO3T9IebsR4SSjYcbEwKXOIxvuSChsplTpbscQ3AHmP8s\n         ux9LTzbUu7Qe8GPojdGcu4GP/X8NQc1ca3h1tZJYYnt0kdhbTpDsefLnvsUihnn7sNKa\n         uDugG3jSui46yMdA/TcF8V3mHAMCQu4mS5Q5C5xknRtDJp3XSB/3jRGWQecz5OiLEZF5\n         e4ValtY9YnO90mvWkFECNdyje5DHRVGa7xvCdV+0WNwHudcrKXyo2RmspO79UT4m1YyI\n         PVIXXm764kM0VILCGo91M2QyO1P8tQfSDgeEH9ShWLPaBeFLvpkiEqRREUorZFIySIpV\n         clsw=="],"X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n        d=1e100.net; s=20251104; t=1776189586; x=1776794386;\n        h=in-reply-to:content-disposition:mime-version:references:message-id\n         :subject:cc:to:from:date:x-gm-gg:x-gm-message-state:from:to:cc\n         :subject:date:message-id:reply-to;\n        bh=QmmQoU/diSWqj6mLutzvYKAyDS7PmKhjSkMdbEs6GLI=;\n        b=YsoVzDQWZ+brJ147dYLXPFyzlxF+PUlumx2WYcA8OHQNVX790K++SobvqwFtja3CXA\n         9AFnyDQ5MqOlxTUJlqSiUAyxaPMD0NXXUKCDwQef64QjUCC01Ohk3f91OFyE1RFf77dR\n         ygzxzGsMih3GW2ciUguH/tjDtpUmbSaX8jTQpwLV2r6xz2X5SrhGtxTwr2xhvxGTpZ23\n         AAcMD7rOsjgxskr6MXV4Wo+RqlqXJ0fKNtiPl0lvITjagpyI5xYNZCkbgnCNdQMG9zzp\n         VylDxKKQD/tzUUz5HKIhaMn80dL3B9ITdbIsYqoKQ8Lljp6w9xTzVtFc0oKYCgbLr3we\n         Xp6g==","X-Forwarded-Encrypted":"i=1;\n AFNElJ/Jy6eOPjZs4R6ZSkweGe4NT6h1JuuM4WnFUpRJjb01vERpNhD1REHatzVBzTiLVYRWbykfHanmJ1GrkA==@vger.kernel.org","X-Gm-Message-State":"AOJu0YzkppCBYMAqlSDEWH05YfEu6CKWR6rCTkxjY62uUNSFLnbVheq+\n\tVi+M82YyJEWOm8UbCRWDt96mU9bVFohpaPE/SAKvEPJyLCvE1EvUD42t7wfPpscVbgtUOGtPTG3\n\tFcKSHdEvoS5gyovOzQonPq8UdYE6CQKHr+26XBLb2s5mqrlQ+SCGUGuJhJV6vajOAQQ==","X-Gm-Gg":"AeBDievkufNmtuTn1qrbnxb4K5buFwP4OGvyw7pWJI1BNkF3saVZV4aNxX6AqzQqUr1\n\ttRsLeW1sjKTRSZQefSBHTqewt/Uo+fCa4QwZq2WRP0VfdohfZcy+lCa4GT8CTQzqt8rii1WoRkW\n\tST7RltAcSFn5C2iQU2YjD8dcyDbF5NM+s0sJYaFaZyXUnAU+brzDW+SFFdfXgsmfmGC64Wtx/pd\n\tQ/SLYWL2M/flH0AqLJ5Md0xl67HRfnMbdKBgNlUIUg0PVcXDg+LCQraxw5VIZMtbUiM9n/bo/9W\n\tzPILSbiCsyrdLAX7CX8rNmWf4LEsPNmi9HRIfojIaCbBdFH5m8PaAJ1PNGnxrm5VBinklCLx803\n\t9aWa5wVz3eqoBtGeCp2jPLuxNGhD3UVQxBvrK74aSu6dHdjtBpRnlFnZ7qBF73MhMLXX00Ysi1X\n\ttGnZlIGrYt72oT3PCAVrEGa6CT5KTmB/2CEk1Db8iXoQeOkw==","X-Received":["by 2002:ac8:7f44:0:b0:4f7:a06d:c4df with SMTP id\n d75a77b69052e-50dc1b2f8a8mr313166261cf.33.1776189585755;\n        Tue, 14 Apr 2026 10:59:45 -0700 (PDT)","by 2002:ac8:7f44:0:b0:4f7:a06d:c4df with SMTP id\n d75a77b69052e-50dc1b2f8a8mr313165771cf.33.1776189585059;\n        Tue, 14 Apr 2026 10:59:45 -0700 (PDT)"],"Date":"Tue, 14 Apr 2026 20:59:42 +0300","From":"Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>","To":"ekansh.gupta@oss.qualcomm.com","Cc":"Greg Kroah-Hartman <gregkh@linuxfoundation.org>,\n        \"Rafael J. Wysocki\" <rafael@kernel.org>,\n        Danilo Krummrich <dakr@kernel.org>,\n        Thierry Reding <thierry.reding@kernel.org>,\n        Mikko Perttunen <mperttunen@nvidia.com>,\n        David Airlie <airlied@gmail.com>, Simona Vetter <simona@ffwll.ch>,\n        Joerg Roedel <joro@8bytes.org>, Will Deacon <will@kernel.org>,\n        Robin Murphy <robin.murphy@arm.com>, Arnd Bergmann <arnd@arndb.de>,\n        Srinivas Kandagatla <srini@kernel.org>,\n        Bharath Kumar <quic_bkumar@quicinc.com>,\n        Chenna Kesava Raju <quic_chennak@quicinc.com>,\n        linux-kernel@vger.kernel.org, driver-core@lists.linux.dev,\n        dri-devel@lists.freedesktop.org, linux-tegra@vger.kernel.org,\n        iommu@lists.linux.dev, linux-arm-msm@vger.kernel.org","Subject":"Re: [PATCH 3/3] misc: fastrpc: Use context device bus for compute\n banks","Message-ID":"<7cij7qnjnv5ntsfmjdyozywiiwnpcpzop6mr5comt6djlh2opx@qgxp77geszoe>","References":"<20260414-computebus-v1-0-4d904d40926a@oss.qualcomm.com>\n <20260414-computebus-v1-3-4d904d40926a@oss.qualcomm.com>","Precedence":"bulk","X-Mailing-List":"linux-tegra@vger.kernel.org","List-Id":"<linux-tegra.vger.kernel.org>","List-Subscribe":"<mailto:linux-tegra+subscribe@vger.kernel.org>","List-Unsubscribe":"<mailto:linux-tegra+unsubscribe@vger.kernel.org>","MIME-Version":"1.0","Content-Type":"text/plain; charset=us-ascii","Content-Disposition":"inline","In-Reply-To":"<20260414-computebus-v1-3-4d904d40926a@oss.qualcomm.com>","X-Proofpoint-Spam-Details-Enc":"AW1haW4tMjYwNDE0MDE2NyBTYWx0ZWRfX+akWTdDQq6CN\n AMFGtw3XUeZIxiVZ07Ety2sls0l9gTEDY5NllETplw5kEjZq7/tj6ZCtzpwA1FgYLr94knzNO+V\n y0xlFFCFAIH4/15LflstWXswGgAVPcWdOKD5Uzy6ZoTZO7IzpKloYTtgCCmPxualRBOxSYhqT7d\n U6no3x9A1RbhYIc7zgBlQ+jjgH64IafBIkHIfzx0f3EFNCv9qkuz2uTRqgcu+x2o7XSDVaQrSo9\n cEqG4tSWLVYt0IBN7WXbD2r2VQbnqFXIBPlvd+BlrGav0fS6aoUw7uKycye2QBlDaKSXFmy7WzY\n lQPQJy1gBslDhMGggL2RHSH5GNXnfOzYw8yTSgLUXrHmktlPQtELsj7vAojaT3fb8dR1hKJYPp6\n 6PVdKIE5KHAEcvdAP9mhZKFmgVGDTRDXhdv9qQrfU7kIZ3123nZBflwP6itR+JiWC8sCbDygSia\n jKxF9XKdnUb+3SoGhTg==","X-Authority-Analysis":"v=2.4 cv=T5m8ifKQ c=1 sm=1 tr=0 ts=69de8092 cx=c_pps\n a=EVbN6Ke/fEF3bsl7X48z0g==:117 a=xqWC_Br6kY4A:10 a=kj9zAlcOel0A:10\n a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22\n a=u7WPNUs3qKkmUXheDGA7:22 a=yOCtJkima9RkubShWh1s:22 a=EUspDBNiAAAA:8\n a=eP6CfP3hHy5NNNlF4cwA:9 a=CjuIK1q_8ugA:10 a=a_PwQJl-kcHnX1M80qC6:22","X-Proofpoint-GUID":"5Ywiho_9Lbh8i2ZdOi5Td85ZdCPeqt0J","X-Proofpoint-ORIG-GUID":"5Ywiho_9Lbh8i2ZdOi5Td85ZdCPeqt0J","X-Proofpoint-Virus-Version":"vendor=baseguard\n engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49\n definitions=2026-04-14_03,2026-04-13_04,2025-10-01_01","X-Proofpoint-Spam-Details":"rule=outbound_notspam policy=outbound score=0\n clxscore=1015 suspectscore=0 spamscore=0 priorityscore=1501 malwarescore=0\n impostorscore=0 phishscore=0 lowpriorityscore=0 bulkscore=0 adultscore=0\n classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0\n reason=mlx scancount=1 engine=8.22.0-2604070000 definitions=main-2604140167"}}]