* [PATCH] rpmsg: char: Export alias for RPMSG ID rpmsg-raw from table
@ 2024-07-29 16:45 Andrew Davis
2024-08-08 11:37 ` Hari Nagalla
2024-08-11 21:59 ` Mathieu Poirier
0 siblings, 2 replies; 4+ messages in thread
From: Andrew Davis @ 2024-07-29 16:45 UTC (permalink / raw)
To: Hari Nagalla, Bjorn Andersson, Mathieu Poirier
Cc: linux-remoteproc, linux-kernel, Andrew Davis
Module aliases are used by userspace to identify the correct module to
load for a detected hardware. The currently supported RPMSG device IDs for
this module include "rpmsg-raw", but the module alias is "rpmsg_chrdev".
Use the helper macro MODULE_DEVICE_TABLE(rpmsg) to export the correct
supported IDs. And while here, to keep backwards compatibility we also add
the other ID "rpmsg_chrdev" so that it is also still exported as an alias.
This has the side benefit of adding support for some legacy firmware
which still uses the original "rpmsg_chrdev" ID. This was the ID used for
this driver before it was upstreamed (as reflected by the module alias).
Signed-off-by: Andrew Davis <afd@ti.com>
---
drivers/rpmsg/rpmsg_char.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/rpmsg/rpmsg_char.c b/drivers/rpmsg/rpmsg_char.c
index eec7642d26863..96fcdd2d7093c 100644
--- a/drivers/rpmsg/rpmsg_char.c
+++ b/drivers/rpmsg/rpmsg_char.c
@@ -522,8 +522,10 @@ static void rpmsg_chrdev_remove(struct rpmsg_device *rpdev)
static struct rpmsg_device_id rpmsg_chrdev_id_table[] = {
{ .name = "rpmsg-raw" },
+ { .name = "rpmsg_chrdev" },
{ },
};
+MODULE_DEVICE_TABLE(rpmsg, rpmsg_chrdev_id_table);
static struct rpmsg_driver rpmsg_chrdev_driver = {
.probe = rpmsg_chrdev_probe,
@@ -565,6 +567,5 @@ static void rpmsg_chrdev_exit(void)
}
module_exit(rpmsg_chrdev_exit);
-MODULE_ALIAS("rpmsg:rpmsg_chrdev");
MODULE_DESCRIPTION("RPMSG device interface");
MODULE_LICENSE("GPL v2");
--
2.39.2
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH] rpmsg: char: Export alias for RPMSG ID rpmsg-raw from table
2024-07-29 16:45 [PATCH] rpmsg: char: Export alias for RPMSG ID rpmsg-raw from table Andrew Davis
@ 2024-08-08 11:37 ` Hari Nagalla
2024-08-11 21:59 ` Mathieu Poirier
1 sibling, 0 replies; 4+ messages in thread
From: Hari Nagalla @ 2024-08-08 11:37 UTC (permalink / raw)
To: Andrew Davis, Bjorn Andersson, Mathieu Poirier
Cc: linux-remoteproc, linux-kernel
On 7/29/24 11:45, Andrew Davis wrote:
> Module aliases are used by userspace to identify the correct module to
> load for a detected hardware. The currently supported RPMSG device IDs for
> this module include "rpmsg-raw", but the module alias is "rpmsg_chrdev".
>
> Use the helper macro MODULE_DEVICE_TABLE(rpmsg) to export the correct
> supported IDs. And while here, to keep backwards compatibility we also add
> the other ID "rpmsg_chrdev" so that it is also still exported as an alias.
>
> This has the side benefit of adding support for some legacy firmware
> which still uses the original "rpmsg_chrdev" ID. This was the ID used for
> this driver before it was upstreamed (as reflected by the module alias).
>
> Signed-off-by: Andrew Davis <afd@ti.com>
Acked/Tested-by: Hari Nagalla <hnagalla@ti.com>
> ---
> drivers/rpmsg/rpmsg_char.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/rpmsg/rpmsg_char.c b/drivers/rpmsg/rpmsg_char.c
> index eec7642d26863..96fcdd2d7093c 100644
> --- a/drivers/rpmsg/rpmsg_char.c
> +++ b/drivers/rpmsg/rpmsg_char.c
> @@ -522,8 +522,10 @@ static void rpmsg_chrdev_remove(struct rpmsg_device *rpdev)
>
> static struct rpmsg_device_id rpmsg_chrdev_id_table[] = {
> { .name = "rpmsg-raw" },
> + { .name = "rpmsg_chrdev" },
> { },
> };
> +MODULE_DEVICE_TABLE(rpmsg, rpmsg_chrdev_id_table);
>
> static struct rpmsg_driver rpmsg_chrdev_driver = {
> .probe = rpmsg_chrdev_probe,
> @@ -565,6 +567,5 @@ static void rpmsg_chrdev_exit(void)
> }
> module_exit(rpmsg_chrdev_exit);
>
> -MODULE_ALIAS("rpmsg:rpmsg_chrdev");
> MODULE_DESCRIPTION("RPMSG device interface");
> MODULE_LICENSE("GPL v2");
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] rpmsg: char: Export alias for RPMSG ID rpmsg-raw from table
2024-07-29 16:45 [PATCH] rpmsg: char: Export alias for RPMSG ID rpmsg-raw from table Andrew Davis
2024-08-08 11:37 ` Hari Nagalla
@ 2024-08-11 21:59 ` Mathieu Poirier
2024-12-03 16:33 ` Andrew Davis
1 sibling, 1 reply; 4+ messages in thread
From: Mathieu Poirier @ 2024-08-11 21:59 UTC (permalink / raw)
To: Andrew Davis
Cc: Hari Nagalla, Bjorn Andersson, linux-remoteproc, linux-kernel
Hi Andrew,
On Mon, Jul 29, 2024 at 11:45:27AM -0500, Andrew Davis wrote:
> Module aliases are used by userspace to identify the correct module to
> load for a detected hardware. The currently supported RPMSG device IDs for
> this module include "rpmsg-raw", but the module alias is "rpmsg_chrdev".
>
> Use the helper macro MODULE_DEVICE_TABLE(rpmsg) to export the correct
> supported IDs. And while here, to keep backwards compatibility we also add
> the other ID "rpmsg_chrdev" so that it is also still exported as an alias.
>
> This has the side benefit of adding support for some legacy firmware
> which still uses the original "rpmsg_chrdev" ID. This was the ID used for
> this driver before it was upstreamed (as reflected by the module alias).
>
> Signed-off-by: Andrew Davis <afd@ti.com>
> ---
> drivers/rpmsg/rpmsg_char.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/rpmsg/rpmsg_char.c b/drivers/rpmsg/rpmsg_char.c
> index eec7642d26863..96fcdd2d7093c 100644
> --- a/drivers/rpmsg/rpmsg_char.c
> +++ b/drivers/rpmsg/rpmsg_char.c
> @@ -522,8 +522,10 @@ static void rpmsg_chrdev_remove(struct rpmsg_device *rpdev)
>
> static struct rpmsg_device_id rpmsg_chrdev_id_table[] = {
> { .name = "rpmsg-raw" },
> + { .name = "rpmsg_chrdev" },
> { },
> };
> +MODULE_DEVICE_TABLE(rpmsg, rpmsg_chrdev_id_table);
So you want to be able to do both "modprobe rpmsg-raw" and "modprobe
rpmsg_chrdev" ?
I'm not sure to get the aim of your patch and will need a little more details.
Thanks,
Mathieu
>
> static struct rpmsg_driver rpmsg_chrdev_driver = {
> .probe = rpmsg_chrdev_probe,
> @@ -565,6 +567,5 @@ static void rpmsg_chrdev_exit(void)
> }
> module_exit(rpmsg_chrdev_exit);
>
> -MODULE_ALIAS("rpmsg:rpmsg_chrdev");
> MODULE_DESCRIPTION("RPMSG device interface");
> MODULE_LICENSE("GPL v2");
> --
> 2.39.2
>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] rpmsg: char: Export alias for RPMSG ID rpmsg-raw from table
2024-08-11 21:59 ` Mathieu Poirier
@ 2024-12-03 16:33 ` Andrew Davis
0 siblings, 0 replies; 4+ messages in thread
From: Andrew Davis @ 2024-12-03 16:33 UTC (permalink / raw)
To: Mathieu Poirier
Cc: Hari Nagalla, Bjorn Andersson, linux-remoteproc, linux-kernel
On 8/11/24 4:59 PM, Mathieu Poirier wrote:
> Hi Andrew,
>
> On Mon, Jul 29, 2024 at 11:45:27AM -0500, Andrew Davis wrote:
>> Module aliases are used by userspace to identify the correct module to
>> load for a detected hardware. The currently supported RPMSG device IDs for
>> this module include "rpmsg-raw", but the module alias is "rpmsg_chrdev".
>>
>> Use the helper macro MODULE_DEVICE_TABLE(rpmsg) to export the correct
>> supported IDs. And while here, to keep backwards compatibility we also add
>> the other ID "rpmsg_chrdev" so that it is also still exported as an alias.
>>
>> This has the side benefit of adding support for some legacy firmware
>> which still uses the original "rpmsg_chrdev" ID. This was the ID used for
>> this driver before it was upstreamed (as reflected by the module alias).
>>
>> Signed-off-by: Andrew Davis <afd@ti.com>
>> ---
>> drivers/rpmsg/rpmsg_char.c | 3 ++-
>> 1 file changed, 2 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/rpmsg/rpmsg_char.c b/drivers/rpmsg/rpmsg_char.c
>> index eec7642d26863..96fcdd2d7093c 100644
>> --- a/drivers/rpmsg/rpmsg_char.c
>> +++ b/drivers/rpmsg/rpmsg_char.c
>> @@ -522,8 +522,10 @@ static void rpmsg_chrdev_remove(struct rpmsg_device *rpdev)
>>
>> static struct rpmsg_device_id rpmsg_chrdev_id_table[] = {
>> { .name = "rpmsg-raw" },
>> + { .name = "rpmsg_chrdev" },
>> { },
>> };
>> +MODULE_DEVICE_TABLE(rpmsg, rpmsg_chrdev_id_table);
>
> So you want to be able to do both "modprobe rpmsg-raw" and "modprobe
> rpmsg_chrdev" ?
>
> I'm not sure to get the aim of your patch and will need a little more details.
>
So there are two parts to driver-device binding, loading the driver into the
kernel, and matching the device to the driver. When a firmware (or any device)
is detected the kernel starts by emitting a signal to userspace so it can load
the kernel module for a driver if available. Then the kernel looks through
its device tables, if a match is found it probe()s that driver.
In this case, for the first part, this driver has the "ALIAS" set as
"rpmsg:rpmsg_chrdev", and so only firmware which sends an rpmsg name
equal to "rpmsg_chrdev" will match and cause this module to be loaded
if it is not already loaded (or built-in).
But this driver's "device_id" table only matches with "rpmsg-raw".
So only firmware with that specific rpmsg name will actually probe().
This means for a given firmware, either automatic module loading will
not work, or driver binding will not work. I want both to work for
both rpmsg names.
We put both names in the device_id table, then use MODULE_DEVICE_TABLE()
on that table. What MODULE_DEVICE_TABLE() does is it creates a matching
module ALIAS for all items in the table. This way any matching ID will
also load the module. And we can then drop the explicit MODULE_ALIAS at the
bottom as it will be created for us for both names. This keeps the ID table
and the module ALIASes consistent.
This patch is still valid and applies on v6.13-rc1, but if you would
like me to re-send it to help your patch tracking just let me know.
Thanks,
Andrew
> Thanks,
> Mathieu
>
>>
>> static struct rpmsg_driver rpmsg_chrdev_driver = {
>> .probe = rpmsg_chrdev_probe,
>> @@ -565,6 +567,5 @@ static void rpmsg_chrdev_exit(void)
>> }
>> module_exit(rpmsg_chrdev_exit);
>>
>> -MODULE_ALIAS("rpmsg:rpmsg_chrdev");
>> MODULE_DESCRIPTION("RPMSG device interface");
>> MODULE_LICENSE("GPL v2");
>> --
>> 2.39.2
>>
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2024-12-03 16:33 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-07-29 16:45 [PATCH] rpmsg: char: Export alias for RPMSG ID rpmsg-raw from table Andrew Davis
2024-08-08 11:37 ` Hari Nagalla
2024-08-11 21:59 ` Mathieu Poirier
2024-12-03 16:33 ` Andrew Davis
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox