Message ID | 20250317-plat2faux_dev-v1-4-5fe67c085ad5@arm.com |
---|---|
State | New |
Headers | show |
Series | drivers: Transition to the faux device interface | expand |
On Mon, Mar 17, 2025 at 10:13:16AM +0000, Sudeep Holla wrote: > The EFI RTC driver does not require the creation of a platform device. > Originally, this approach was chosen for simplicity when the driver was > first implemented. > > With the introduction of the lightweight faux device interface, we now > have a more appropriate alternative. Migrate the driver to utilize the > faux bus, given that the platform device it previously created was not > a real one anyway. This will simplify the code, reducing its footprint > while maintaining functionality. > > Cc: Ard Biesheuvel <ardb@kernel.org> > Cc: Alexandre Belloni <alexandre.belloni@bootlin.com> > Cc: linux-rtc@vger.kernel.org > Cc: linux-efi@vger.kernel.org > Signed-off-by: Sudeep Holla <sudeep.holla@arm.com> > --- > drivers/firmware/efi/efi.c | 3 --- > drivers/rtc/rtc-efi.c | 31 ++++++++++++++++++++++--------- > 2 files changed, 22 insertions(+), 12 deletions(-) > > diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c > index eec173cb1f398d3b4f28b42c917e50e1728dc277..18deb2d212ce6944927f5e3a9a40bb6754e7ffa9 100644 > --- a/drivers/firmware/efi/efi.c > +++ b/drivers/firmware/efi/efi.c > @@ -427,9 +427,6 @@ static int __init efisubsys_init(void) > } > } > > - if (efi_rt_services_supported(EFI_RT_SUPPORTED_TIME_SERVICES)) > - platform_device_register_simple("rtc-efi", 0, NULL, 0); > - > /* We register the efi directory at /sys/firmware/efi */ > efi_kobj = kobject_create_and_add("efi", firmware_kobj); > if (!efi_kobj) { > diff --git a/drivers/rtc/rtc-efi.c b/drivers/rtc/rtc-efi.c > index fa8bf82df9488e7d1c23c058b4a3032dde74bc6e..3d21a470e8ff9777c5eeb991f3aa9170f6351930 100644 > --- a/drivers/rtc/rtc-efi.c > +++ b/drivers/rtc/rtc-efi.c > @@ -14,7 +14,7 @@ > #include <linux/module.h> > #include <linux/stringify.h> > #include <linux/time.h> > -#include <linux/platform_device.h> > +#include <linux/device/faux.h> > #include <linux/rtc.h> > #include <linux/efi.h> > > @@ -254,7 +254,7 @@ static const struct rtc_class_ops efi_rtc_ops = { > .proc = efi_procfs, > }; > > -static int __init efi_rtc_probe(struct platform_device *dev) > +static int __init efi_rtc_probe(struct faux_device *dev) > { > struct rtc_device *rtc; > efi_time_t eft; > @@ -268,7 +268,7 @@ static int __init efi_rtc_probe(struct platform_device *dev) > if (IS_ERR(rtc)) > return PTR_ERR(rtc); > > - platform_set_drvdata(dev, rtc); > + faux_device_set_drvdata(dev, rtc); > > rtc->ops = &efi_rtc_ops; > clear_bit(RTC_FEATURE_UPDATE_INTERRUPT, rtc->features); > @@ -282,15 +282,28 @@ static int __init efi_rtc_probe(struct platform_device *dev) > return devm_rtc_register_device(rtc); > } > > -static struct platform_driver efi_rtc_driver = { > - .driver = { > - .name = "rtc-efi", > - }, > +static struct faux_device_ops efi_rtc_fdev_ops = { > + .probe = efi_rtc_probe, > }; > > -module_platform_driver_probe(efi_rtc_driver, efi_rtc_probe); > +static int __init rtc_efi_init(void) > +{ > + struct faux_device *fdev; > + > + if (!efi_rt_services_supported(EFI_RT_SUPPORTED_TIME_SERVICES)) > + return 0; > + > + fdev = faux_device_create("rtc-efi", NULL, &efi_rtc_fdev_ops); > + if (!fdev) { > + pr_err("rtc-efi: could not create the device\n"); > + return -ENODEV; > + } > + > + return 0; > +} > +device_initcall(rtc_efi_init); > > MODULE_AUTHOR("dann frazier <dannf@dannf.org>"); > MODULE_LICENSE("GPL"); > MODULE_DESCRIPTION("EFI RTC driver"); > -MODULE_ALIAS("platform:rtc-efi"); > +MODULE_ALIAS("faux:rtc-efi"); No alias please.
On Mon, Mar 17, 2025 at 02:07:00PM +0100, Greg Kroah-Hartman wrote: > On Mon, Mar 17, 2025 at 10:13:16AM +0000, Sudeep Holla wrote: > > The EFI RTC driver does not require the creation of a platform device. > > Originally, this approach was chosen for simplicity when the driver was > > first implemented. > > > > With the introduction of the lightweight faux device interface, we now > > have a more appropriate alternative. Migrate the driver to utilize the > > faux bus, given that the platform device it previously created was not > > a real one anyway. This will simplify the code, reducing its footprint > > while maintaining functionality. > > > > Cc: Ard Biesheuvel <ardb@kernel.org> > > Cc: Alexandre Belloni <alexandre.belloni@bootlin.com> > > Cc: linux-rtc@vger.kernel.org > > Cc: linux-efi@vger.kernel.org > > Signed-off-by: Sudeep Holla <sudeep.holla@arm.com> > > --- > > drivers/firmware/efi/efi.c | 3 --- > > drivers/rtc/rtc-efi.c | 31 ++++++++++++++++++++++--------- > > 2 files changed, 22 insertions(+), 12 deletions(-) > > [...] > > -MODULE_ALIAS("platform:rtc-efi"); > > +MODULE_ALIAS("faux:rtc-efi"); > > No alias please. Thanks for the review, will drop all the alias.
diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c index eec173cb1f398d3b4f28b42c917e50e1728dc277..18deb2d212ce6944927f5e3a9a40bb6754e7ffa9 100644 --- a/drivers/firmware/efi/efi.c +++ b/drivers/firmware/efi/efi.c @@ -427,9 +427,6 @@ static int __init efisubsys_init(void) } } - if (efi_rt_services_supported(EFI_RT_SUPPORTED_TIME_SERVICES)) - platform_device_register_simple("rtc-efi", 0, NULL, 0); - /* We register the efi directory at /sys/firmware/efi */ efi_kobj = kobject_create_and_add("efi", firmware_kobj); if (!efi_kobj) { diff --git a/drivers/rtc/rtc-efi.c b/drivers/rtc/rtc-efi.c index fa8bf82df9488e7d1c23c058b4a3032dde74bc6e..3d21a470e8ff9777c5eeb991f3aa9170f6351930 100644 --- a/drivers/rtc/rtc-efi.c +++ b/drivers/rtc/rtc-efi.c @@ -14,7 +14,7 @@ #include <linux/module.h> #include <linux/stringify.h> #include <linux/time.h> -#include <linux/platform_device.h> +#include <linux/device/faux.h> #include <linux/rtc.h> #include <linux/efi.h> @@ -254,7 +254,7 @@ static const struct rtc_class_ops efi_rtc_ops = { .proc = efi_procfs, }; -static int __init efi_rtc_probe(struct platform_device *dev) +static int __init efi_rtc_probe(struct faux_device *dev) { struct rtc_device *rtc; efi_time_t eft; @@ -268,7 +268,7 @@ static int __init efi_rtc_probe(struct platform_device *dev) if (IS_ERR(rtc)) return PTR_ERR(rtc); - platform_set_drvdata(dev, rtc); + faux_device_set_drvdata(dev, rtc); rtc->ops = &efi_rtc_ops; clear_bit(RTC_FEATURE_UPDATE_INTERRUPT, rtc->features); @@ -282,15 +282,28 @@ static int __init efi_rtc_probe(struct platform_device *dev) return devm_rtc_register_device(rtc); } -static struct platform_driver efi_rtc_driver = { - .driver = { - .name = "rtc-efi", - }, +static struct faux_device_ops efi_rtc_fdev_ops = { + .probe = efi_rtc_probe, }; -module_platform_driver_probe(efi_rtc_driver, efi_rtc_probe); +static int __init rtc_efi_init(void) +{ + struct faux_device *fdev; + + if (!efi_rt_services_supported(EFI_RT_SUPPORTED_TIME_SERVICES)) + return 0; + + fdev = faux_device_create("rtc-efi", NULL, &efi_rtc_fdev_ops); + if (!fdev) { + pr_err("rtc-efi: could not create the device\n"); + return -ENODEV; + } + + return 0; +} +device_initcall(rtc_efi_init); MODULE_AUTHOR("dann frazier <dannf@dannf.org>"); MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("EFI RTC driver"); -MODULE_ALIAS("platform:rtc-efi"); +MODULE_ALIAS("faux:rtc-efi");
The EFI RTC driver does not require the creation of a platform device. Originally, this approach was chosen for simplicity when the driver was first implemented. With the introduction of the lightweight faux device interface, we now have a more appropriate alternative. Migrate the driver to utilize the faux bus, given that the platform device it previously created was not a real one anyway. This will simplify the code, reducing its footprint while maintaining functionality. Cc: Ard Biesheuvel <ardb@kernel.org> Cc: Alexandre Belloni <alexandre.belloni@bootlin.com> Cc: linux-rtc@vger.kernel.org Cc: linux-efi@vger.kernel.org Signed-off-by: Sudeep Holla <sudeep.holla@arm.com> --- drivers/firmware/efi/efi.c | 3 --- drivers/rtc/rtc-efi.c | 31 ++++++++++++++++++++++--------- 2 files changed, 22 insertions(+), 12 deletions(-)