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" subnodequoted
+ + 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, Shenweiquoted
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; +}