Thread (51 messages) 51 messages, 11 authors, 2025-12-03

Re: [PATCH v5 2/5] remoteproc: imx_rproc: Populate devices under "rpmsg" subnode

From: Mathieu Poirier <mathieu.poirier@linaro.org>
Date: 2025-11-27 16:23:14
Also in: imx, linux-devicetree, linux-doc, linux-remoteproc, lkml

On Wed, Nov 26, 2025 at 09:46:38PM +0000, Shenwei Wang wrote:
quoted
-----Original Message-----
From: Mathieu Poirier <mathieu.poirier@linaro.org>
Sent: Wednesday, November 26, 2025 12:54 PM
To: Shenwei Wang <shenwei.wang@nxp.com>
Cc: Bjorn Andersson <andersson@kernel.org>; Rob Herring <robh@kernel.org>;
Krzysztof Kozlowski [off-list ref]; Conor Dooley
[off-list ref]; Shawn Guo [off-list ref]; Sascha Hauer
[off-list ref]; Jonathan Corbet [off-list ref]; Linus Walleij
[off-list ref]; Bartosz Golaszewski [off-list ref]; Pengutronix
Kernel Team [off-list ref]; Fabio Estevam [off-list ref];
Peng Fan [off-list ref]; linux-remoteproc@vger.kernel.org;
devicetree@vger.kernel.org; imx@lists.linux.dev; linux-arm-
kernel@lists.infradead.org; linux-kernel@vger.kernel.org; linux-
doc@vger.kernel.org; dl-linux-imx [off-list ref]
Subject: [EXT] Re: [PATCH v5 2/5] remoteproc: imx_rproc: Populate devices
under "rpmsg" subnode
quoted
+
+     drvdata = dev_get_drvdata(&rpdev->dev);
+     if (drvdata && drvdata->rx_callback)
+             return drvdata->rx_callback(rpdev, data, len, priv,
+ src);
+
+     return 0;
+}
+
+static void imx_rpmsg_endpoint_remove(struct rpmsg_device *rpdev) {
+     of_platform_depopulate(&rpdev->dev);
+}
+
+static int imx_rpmsg_endpoint_probe(struct rpmsg_device *rpdev) {
Where does the rpmsg_device come from?  Usually there is a call to
rpmsg_register_device() and I don't see it anywhere in this patchset.  I also don't
see a link to the remote processor.  I can't continue with this set for as long as I
don't have this information.
It is in the function below named imx_of_rpmsg_register_rpdriver.
The function below calls register_rpmsg_driver(), not rpmsg_register_device().
I still don't know where @rpdev comes from.
Thanks,
Shenwei
quoted
quoted
+
+static int imx_of_rpmsg_register_rpdriver(struct device_node *channel,
+                                       struct device *dev, int idx) {
+     struct imx_rpmsg_driver_data *driver_data;
+     struct imx_rpmsg_driver *rp_driver;
+     struct rpmsg_device_id *rpdev_id;
+
+     rpdev_id = devm_kzalloc(dev, sizeof(*rpdev_id) * 2, GFP_KERNEL);
+     if (!rpdev_id)
+             return -ENOMEM;
+
+     strscpy(rpdev_id[0].name, channel_device_map[idx][0],
+ RPMSG_NAME_SIZE);
+
+     rp_driver = devm_kzalloc(dev, sizeof(*rp_driver), GFP_KERNEL);
+     if (!rp_driver)
+             return -ENOMEM;
+
+     driver_data = devm_kzalloc(dev, sizeof(*driver_data), GFP_KERNEL);
+     if (!driver_data)
+             return -ENOMEM;
+
+     driver_data->rproc_name = dev->of_node->name;
+     driver_data->channel_node = channel;
+     driver_data->map_idx = idx;
+
+     rp_driver->rpdrv.drv.name = channel_device_map[idx][0];
+     rp_driver->rpdrv.id_table = rpdev_id;
+     rp_driver->rpdrv.probe = imx_rpmsg_endpoint_probe;
+     rp_driver->rpdrv.remove = imx_rpmsg_endpoint_remove;
+     rp_driver->rpdrv.callback = imx_rpmsg_endpoint_cb;
+     rp_driver->driver_data = driver_data;
+
+     register_rpmsg_driver(&rp_driver->rpdrv);
+
+     return 0;
+}
  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help