[2/2] clk: sifive: Allow building the driver as a module

Message ID 20230717210356.2794736-2-samuel.holland@sifive.com
State New
Headers
Series [1/2] of/irq: Export of_irq_count() |

Commit Message

Samuel Holland July 17, 2023, 9:03 p.m. UTC
  This can reduce the kernel image size in multiplatform configurations.

Signed-off-by: Samuel Holland <samuel.holland@sifive.com>
---

 drivers/clk/sifive/Kconfig       | 2 +-
 drivers/clk/sifive/sifive-prci.c | 8 +++-----
 2 files changed, 4 insertions(+), 6 deletions(-)
  

Comments

Emil Renner Berthing July 19, 2023, 2:18 p.m. UTC | #1
On Wed, 19 Jul 2023 at 10:07, Samuel Holland <samuel.holland@sifive.com> wrote:
>
> This can reduce the kernel image size in multiplatform configurations.

I don't mind this, but booting without this driver also means there is
no uart for debug output or any other peripheral until the kernel gets
to the initrd to load the driver. Does the earlycon console work all
the way until we reach the initrd? Otherwise I can't imagine many
scenarios where configuring this as a module is desirable.

> Signed-off-by: Samuel Holland <samuel.holland@sifive.com>
> ---
>
>  drivers/clk/sifive/Kconfig       | 2 +-
>  drivers/clk/sifive/sifive-prci.c | 8 +++-----
>  2 files changed, 4 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/clk/sifive/Kconfig b/drivers/clk/sifive/Kconfig
> index 2322f634a910..49597d95602e 100644
> --- a/drivers/clk/sifive/Kconfig
> +++ b/drivers/clk/sifive/Kconfig
> @@ -10,7 +10,7 @@ menuconfig CLK_SIFIVE
>  if CLK_SIFIVE
>
>  config CLK_SIFIVE_PRCI
> -       bool "PRCI driver for SiFive SoCs"
> +       tristate "PRCI driver for SiFive SoCs"
>         default ARCH_SIFIVE
>         select RESET_CONTROLLER
>         select RESET_SIMPLE
> diff --git a/drivers/clk/sifive/sifive-prci.c b/drivers/clk/sifive/sifive-prci.c
> index e317f3454e93..8c67d1a7c8df 100644
> --- a/drivers/clk/sifive/sifive-prci.c
> +++ b/drivers/clk/sifive/sifive-prci.c
> @@ -7,6 +7,7 @@
>  #include <linux/clkdev.h>
>  #include <linux/delay.h>
>  #include <linux/io.h>
> +#include <linux/module.h>
>  #include <linux/of_device.h>
>  #include "sifive-prci.h"
>  #include "fu540-prci.h"
> @@ -618,9 +619,6 @@ static struct platform_driver sifive_prci_driver = {
>         },
>         .probe = sifive_prci_probe,
>  };
> +module_platform_driver(sifive_prci_driver);
>
> -static int __init sifive_prci_init(void)
> -{
> -       return platform_driver_register(&sifive_prci_driver);
> -}
> -core_initcall(sifive_prci_init);

Maybe also add the MODULE_AUTHOR() and MODULE_DESCRIPTION() macros
while you're at it.

> +MODULE_LICENSE("GPL");
> --
> 2.40.1
>
>
> _______________________________________________
> linux-riscv mailing list
> linux-riscv@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-riscv
  
Samuel Holland July 25, 2023, 12:19 a.m. UTC | #2
On 2023-07-19 9:18 AM, Emil Renner Berthing wrote:
> On Wed, 19 Jul 2023 at 10:07, Samuel Holland <samuel.holland@sifive.com> wrote:
>>
>> This can reduce the kernel image size in multiplatform configurations.
> 
> I don't mind this, but booting without this driver also means there is
> no uart for debug output or any other peripheral until the kernel gets
> to the initrd to load the driver. Does the earlycon console work all
> the way until we reach the initrd? Otherwise I can't imagine many
> scenarios where configuring this as a module is desirable.

Thanks for the review.

Yes, an "earlycon" command-line argument still works after this change, since
the stdout-path UART already has its clock set up by a previous boot stage.

>> Signed-off-by: Samuel Holland <samuel.holland@sifive.com>
>> ---
>>
>>  drivers/clk/sifive/Kconfig       | 2 +-
>>  drivers/clk/sifive/sifive-prci.c | 8 +++-----
>>  2 files changed, 4 insertions(+), 6 deletions(-)
>>
>> diff --git a/drivers/clk/sifive/Kconfig b/drivers/clk/sifive/Kconfig
>> index 2322f634a910..49597d95602e 100644
>> --- a/drivers/clk/sifive/Kconfig
>> +++ b/drivers/clk/sifive/Kconfig
>> @@ -10,7 +10,7 @@ menuconfig CLK_SIFIVE
>>  if CLK_SIFIVE
>>
>>  config CLK_SIFIVE_PRCI
>> -       bool "PRCI driver for SiFive SoCs"
>> +       tristate "PRCI driver for SiFive SoCs"
>>         default ARCH_SIFIVE
>>         select RESET_CONTROLLER
>>         select RESET_SIMPLE
>> diff --git a/drivers/clk/sifive/sifive-prci.c b/drivers/clk/sifive/sifive-prci.c
>> index e317f3454e93..8c67d1a7c8df 100644
>> --- a/drivers/clk/sifive/sifive-prci.c
>> +++ b/drivers/clk/sifive/sifive-prci.c
>> @@ -7,6 +7,7 @@
>>  #include <linux/clkdev.h>
>>  #include <linux/delay.h>
>>  #include <linux/io.h>
>> +#include <linux/module.h>
>>  #include <linux/of_device.h>
>>  #include "sifive-prci.h"
>>  #include "fu540-prci.h"
>> @@ -618,9 +619,6 @@ static struct platform_driver sifive_prci_driver = {
>>         },
>>         .probe = sifive_prci_probe,
>>  };
>> +module_platform_driver(sifive_prci_driver);
>>
>> -static int __init sifive_prci_init(void)
>> -{
>> -       return platform_driver_register(&sifive_prci_driver);
>> -}
>> -core_initcall(sifive_prci_init);
> 
> Maybe also add the MODULE_AUTHOR() and MODULE_DESCRIPTION() macros
> while you're at it.

Will do.

>> +MODULE_LICENSE("GPL");
>> --
>> 2.40.1
>>
>>
>> _______________________________________________
>> linux-riscv mailing list
>> linux-riscv@lists.infradead.org
>> http://lists.infradead.org/mailman/listinfo/linux-riscv
  

Patch

diff --git a/drivers/clk/sifive/Kconfig b/drivers/clk/sifive/Kconfig
index 2322f634a910..49597d95602e 100644
--- a/drivers/clk/sifive/Kconfig
+++ b/drivers/clk/sifive/Kconfig
@@ -10,7 +10,7 @@  menuconfig CLK_SIFIVE
 if CLK_SIFIVE
 
 config CLK_SIFIVE_PRCI
-	bool "PRCI driver for SiFive SoCs"
+	tristate "PRCI driver for SiFive SoCs"
 	default ARCH_SIFIVE
 	select RESET_CONTROLLER
 	select RESET_SIMPLE
diff --git a/drivers/clk/sifive/sifive-prci.c b/drivers/clk/sifive/sifive-prci.c
index e317f3454e93..8c67d1a7c8df 100644
--- a/drivers/clk/sifive/sifive-prci.c
+++ b/drivers/clk/sifive/sifive-prci.c
@@ -7,6 +7,7 @@ 
 #include <linux/clkdev.h>
 #include <linux/delay.h>
 #include <linux/io.h>
+#include <linux/module.h>
 #include <linux/of_device.h>
 #include "sifive-prci.h"
 #include "fu540-prci.h"
@@ -618,9 +619,6 @@  static struct platform_driver sifive_prci_driver = {
 	},
 	.probe = sifive_prci_probe,
 };
+module_platform_driver(sifive_prci_driver);
 
-static int __init sifive_prci_init(void)
-{
-	return platform_driver_register(&sifive_prci_driver);
-}
-core_initcall(sifive_prci_init);
+MODULE_LICENSE("GPL");