get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/2223191/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 2223191,
    "url": "http://patchwork.ozlabs.org/api/patches/2223191/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/linux-tegra/patch/20260414-computebus-v1-3-4d904d40926a@oss.qualcomm.com/",
    "project": {
        "id": 21,
        "url": "http://patchwork.ozlabs.org/api/projects/21/?format=api",
        "name": "Linux Tegra Development",
        "link_name": "linux-tegra",
        "list_id": "linux-tegra.vger.kernel.org",
        "list_email": "linux-tegra@vger.kernel.org",
        "web_url": null,
        "scm_url": null,
        "webscm_url": null,
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<20260414-computebus-v1-3-4d904d40926a@oss.qualcomm.com>",
    "list_archive_url": null,
    "date": "2026-04-14T16:31:17",
    "name": "[3/3] misc: fastrpc: Use context device bus for compute banks",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "2bc53ea3db076bca990ce6be515a717986895ca7",
    "submitter": {
        "id": 93147,
        "url": "http://patchwork.ozlabs.org/api/people/93147/?format=api",
        "name": "Ekansh Gupta via B4 Relay",
        "email": "devnull+ekansh.gupta.oss.qualcomm.com@kernel.org"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/linux-tegra/patch/20260414-computebus-v1-3-4d904d40926a@oss.qualcomm.com/mbox/",
    "series": [
        {
            "id": 499873,
            "url": "http://patchwork.ozlabs.org/api/series/499873/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/linux-tegra/list/?series=499873",
            "date": "2026-04-14T16:31:17",
            "name": "Introduce generic context device bus for IOMMU context isolation",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/499873/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2223191/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2223191/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "\n <linux-tegra+bounces-13761-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=kernel.org header.i=@kernel.org header.a=rsa-sha256\n header.s=k20201202 header.b=PphvYmGu;\n\tdkim-atps=neutral",
            "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=2600:3c0a:e001:db::12fc:5321; helo=sea.lore.kernel.org;\n envelope-from=linux-tegra+bounces-13761-incoming=patchwork.ozlabs.org@vger.kernel.org;\n receiver=patchwork.ozlabs.org)",
            "smtp.subspace.kernel.org;\n\tdkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org\n header.b=\"PphvYmGu\"",
            "smtp.subspace.kernel.org;\n arc=none smtp.client-ip=10.30.226.201"
        ],
        "Received": [
            "from sea.lore.kernel.org (sea.lore.kernel.org\n [IPv6:2600:3c0a:e001:db::12fc:5321])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fw90n2wZ4z1y2d\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 15 Apr 2026 02:37:13 +1000 (AEST)",
            "from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby sea.lore.kernel.org (Postfix) with ESMTP id 8A9A4300A8DC\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 14 Apr 2026 16:31:22 +0000 (UTC)",
            "from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id D8EE33EBF1A;\n\tTue, 14 Apr 2026 16:31:21 +0000 (UTC)",
            "from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org\n [10.30.226.201])\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 DB90326ED37;\n\tTue, 14 Apr 2026 16:31:20 +0000 (UTC)",
            "by smtp.kernel.org (Postfix) with ESMTPS id 8EBA7C2BCB8;\n\tTue, 14 Apr 2026 16:31:20 +0000 (UTC)",
            "from aws-us-west-2-korg-lkml-1.web.codeaurora.org\n (localhost.localdomain [127.0.0.1])\n\tby smtp.lore.kernel.org (Postfix) with ESMTP id 838EAF9D0DA;\n\tTue, 14 Apr 2026 16:31:20 +0000 (UTC)"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1776184281; cv=none;\n b=NvwFKM3vEcheJN0pLlRkxWHB+b6NwVoN5e7GF9Z214tyFVp61/IOFYdm9S/6Rz0YrMgkju/X3pVEBgcLMlm4oEIxKnpz1drdyqbiugSBNB0UXHm6sX1v4nXI4flBgbv667t02jb19Otsr/k4CewBXck/HwN/SvwX6j5u2YzNms8=",
        "ARC-Message-Signature": "i=1; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1776184281; c=relaxed/simple;\n\tbh=pUbOjyVZ1noVB3Ygi4q/A3KNcIJK+FNptLPioAtmGQE=;\n\th=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References:\n\t In-Reply-To:To:Cc;\n b=eUIpP1F4Wxa7XLx5RH6Qmo4EEzCZDslmNYS4mcf1hxD+ERu2GUvROWq/KbraEcPGk1/ct8VFRhErO3GLud0d25Z7bpn7f6fAMVT+UhKYsymXKAW1rP0KKvTnq55hD7wRvg2p7XImYa67pyLtDszPOqvlM7Cng+u4dD5M9DY0UNM=",
        "ARC-Authentication-Results": "i=1; smtp.subspace.kernel.org;\n dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org\n header.b=PphvYmGu; arc=none smtp.client-ip=10.30.226.201",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;\n\ts=k20201202; t=1776184280;\n\tbh=pUbOjyVZ1noVB3Ygi4q/A3KNcIJK+FNptLPioAtmGQE=;\n\th=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From;\n\tb=PphvYmGuin9F38OzPvCp7msgfJ7HYUPFZRjDRWS8Uppz3+G/fubAY4Dyh2YAH4t37\n\t kpgWQGZ94PzjzCrtxy1K/MvYC9gD4ME4ix/3p/u8Pitk09Yq2m3lNiChd8mUHTCgdX\n\t mA2J4SStdx2lF+qBTxCY6sOAUuIKf4HyuQcicT9gGVmjWEbZOVgOEWX7Va0Hp+D/Yk\n\t aC8wtrgDO2yxly7VwyfzhrCSYoyKs8dnlSZ+LwpS/AeSuI8nYhEtgHa8WaBVPiS4w+\n\t Wv0VzbYU6t8Xq+HzTO7kqJzmFeXFuJnxANC5kfauZK1/x+21jt1X8WBNlveiT8E5wG\n\t xS0XG/h1qgbvA==",
        "From": "Ekansh Gupta via B4 Relay\n <devnull+ekansh.gupta.oss.qualcomm.com@kernel.org>",
        "Date": "Tue, 14 Apr 2026 22:01:17 +0530",
        "Subject": "[PATCH 3/3] misc: fastrpc: Use context device bus for compute\n banks",
        "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=\"utf-8\"",
        "Content-Transfer-Encoding": "7bit",
        "Message-Id": "<20260414-computebus-v1-3-4d904d40926a@oss.qualcomm.com>",
        "References": "<20260414-computebus-v1-0-4d904d40926a@oss.qualcomm.com>",
        "In-Reply-To": "<20260414-computebus-v1-0-4d904d40926a@oss.qualcomm.com>",
        "To": "Greg Kroah-Hartman <gregkh@linuxfoundation.org>,\n \"Rafael J. Wysocki\" <rafael@kernel.org>, Danilo Krummrich <dakr@kernel.org>,\n Thierry Reding <thierry.reding@kernel.org>,\n Mikko Perttunen <mperttunen@nvidia.com>, David Airlie <airlied@gmail.com>,\n Simona Vetter <simona@ffwll.ch>, Joerg Roedel <joro@8bytes.org>,\n Will Deacon <will@kernel.org>, Robin Murphy <robin.murphy@arm.com>,\n Arnd Bergmann <arnd@arndb.de>, Srinivas Kandagatla <srini@kernel.org>,\n Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>,\n Bharath Kumar <quic_bkumar@quicinc.com>,\n Chenna Kesava Raju <quic_chennak@quicinc.com>",
        "Cc": "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,\n Ekansh Gupta <ekansh.gupta@oss.qualcomm.com>",
        "X-Mailer": "b4 0.14.3",
        "X-Developer-Signature": "v=1; a=ed25519-sha256; t=1776184278; l=9736;\n i=ekansh.gupta@oss.qualcomm.com; s=20260223; h=from:subject:message-id;\n bh=o6iny1LWE3z7mcZmAk9jzq3tTNYPqB65PUC0PwHJvS8=;\n b=A0Yhanj3vlPKRDGFbJ31fb+GP3yvJ3vVGI/TW8GczKwhQXoHfKEAqo8oQ+ryO8I/vlHnPX3da\n vt4BrUk/2XYBeE3DODY4IDLuujnk3xKRlrjczVYtz6ZuLPXhdc6lNOU",
        "X-Developer-Key": "i=ekansh.gupta@oss.qualcomm.com; a=ed25519;\n pk=n0SepARizye+pYjhjg1RA5J+Nq4+IJbyRcBybU+/ERQ=",
        "X-Endpoint-Received": "by B4 Relay for ekansh.gupta@oss.qualcomm.com/20260223\n with auth_id=647",
        "X-Original-From": "Ekansh Gupta <ekansh.gupta@oss.qualcomm.com>",
        "Reply-To": "ekansh.gupta@oss.qualcomm.com"
    },
    "content": "From: Ekansh Gupta <ekansh.gupta@oss.qualcomm.com>\n\nReplace the platform driver approach for compute bank (CB) devices\nwith the generic context_device_bus_type. Compute bank devices are\nsynthetic IOMMU context banks, not real platform devices, so using\nthe context device bus provides a more accurate representation in\nthe device model.\n\nCurrently, fastrpc used of_platform_populate() to create platform\ndevices for each \"qcom,fastrpc-compute-cb\" DT node, with a platform\ndriver (fastrpc_cb_driver) to handle probe/remove. This approach\nhad a race condition: device nodes were created before channel\nresources (like spin_lock) were initialized, and probe was async,\nso applications could open the device before sessions were available.\n\nThis patch addresses the race by manually creating and configuring\nCB devices synchronously during fastrpc_rpmsg_probe(), after all\nchannel resources are initialized. The approach follows the pattern\nused in host1x_memory_context_list_init().\n\nSigned-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(-)",
    "diff": "diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig\nindex 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\ndiff --git a/drivers/misc/fastrpc.c b/drivers/misc/fastrpc.c\nindex 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 \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",
    "prefixes": [
        "3/3"
    ]
}