[v2] soc: ti: k3-ringacc: Allow the driver to be built as module

Message ID 20221029075356.7296-1-peter.ujfalusi@gmail.com
State New
Headers
Series [v2] soc: ti: k3-ringacc: Allow the driver to be built as module |

Commit Message

Péter Ujfalusi Oct. 29, 2022, 7:53 a.m. UTC
  The ring accelerator driver can be built as module since all depending
functions are exported.

Signed-off-by: Peter Ujfalusi <peter.ujfalusi@gmail.com>
---
Hi,

Changes since v1:
- Fix MODULE_LICENSE line to GPL
- Use goto label in k3_ringacc_request_ring() for try_module_get error
- keep suppress_bind_attrs = true

Nicolas, I have not added your reviewed and tested by tag due to these changes.
I would appreciate if you would spare some time to re-check the patch.

Regards,
Peter

 drivers/soc/ti/Kconfig      |  2 +-
 drivers/soc/ti/k3-ringacc.c | 28 ++++++++++++++++++++++++++--
 2 files changed, 27 insertions(+), 3 deletions(-)
  

Comments

Nicolas Frayer Oct. 31, 2022, 10:20 a.m. UTC | #1
Le sam. 29 oct. 2022 à 09:44, Peter Ujfalusi
<peter.ujfalusi@gmail.com> a écrit :
>
> The ring accelerator driver can be built as module since all depending
> functions are exported.
>
> Signed-off-by: Peter Ujfalusi <peter.ujfalusi@gmail.com>
> ---
> Hi,
>
> Changes since v1:
> - Fix MODULE_LICENSE line to GPL
> - Use goto label in k3_ringacc_request_ring() for try_module_get error
> - keep suppress_bind_attrs = true
>
> Nicolas, I have not added your reviewed and tested by tag due to these changes.
> I would appreciate if you would spare some time to re-check the patch.
>

Hi Peter,

I've re-checked/re-tested the patch.

Reviewed-by: Nicolas Frayer <nfrayer@baylibre.com>
Tested-by: Nicolas Frayer <nfrayer@baylibre.com>

> Regards,
> Peter
>
>  drivers/soc/ti/Kconfig      |  2 +-
>  drivers/soc/ti/k3-ringacc.c | 28 ++++++++++++++++++++++++++--
>  2 files changed, 27 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/soc/ti/Kconfig b/drivers/soc/ti/Kconfig
> index 7e2fb1c16af1..e009d9589af4 100644
> --- a/drivers/soc/ti/Kconfig
> +++ b/drivers/soc/ti/Kconfig
> @@ -63,7 +63,7 @@ config TI_SCI_PM_DOMAINS
>           rootfs may be available.
>
>  config TI_K3_RINGACC
> -       bool "K3 Ring accelerator Sub System"
> +       tristate "K3 Ring accelerator Sub System"
>         depends on ARCH_K3 || COMPILE_TEST
>         depends on TI_SCI_INTA_IRQCHIP
>         help
> diff --git a/drivers/soc/ti/k3-ringacc.c b/drivers/soc/ti/k3-ringacc.c
> index f7bf18b8229a..e01e4d815230 100644
> --- a/drivers/soc/ti/k3-ringacc.c
> +++ b/drivers/soc/ti/k3-ringacc.c
> @@ -7,7 +7,7 @@
>
>  #include <linux/dma-mapping.h>
>  #include <linux/io.h>
> -#include <linux/init.h>
> +#include <linux/module.h>
>  #include <linux/of.h>
>  #include <linux/of_device.h>
>  #include <linux/platform_device.h>
> @@ -336,6 +336,9 @@ struct k3_ring *k3_ringacc_request_ring(struct k3_ringacc *ringacc,
>
>         mutex_lock(&ringacc->req_lock);
>
> +       if (!try_module_get(ringacc->dev->driver->owner))
> +               goto err_module_get;
> +
>         if (id == K3_RINGACC_RING_ID_ANY) {
>                 /* Request for any general purpose ring */
>                 struct ti_sci_resource_desc *gp_rings =
> @@ -380,6 +383,9 @@ struct k3_ring *k3_ringacc_request_ring(struct k3_ringacc *ringacc,
>         return &ringacc->rings[id];
>
>  error:
> +       module_put(ringacc->dev->driver->owner);
> +
> +err_module_get:
>         mutex_unlock(&ringacc->req_lock);
>         return NULL;
>  }
> @@ -616,6 +622,8 @@ int k3_ringacc_ring_free(struct k3_ring *ring)
>  no_init:
>         clear_bit(ring->ring_id, ringacc->rings_inuse);
>
> +       module_put(ringacc->dev->driver->owner);
> +
>  out:
>         mutex_unlock(&ringacc->req_lock);
>         return 0;
> @@ -1450,6 +1458,7 @@ static const struct of_device_id k3_ringacc_of_match[] = {
>         { .compatible = "ti,am654-navss-ringacc", .data = &k3_ringacc_data, },
>         {},
>  };
> +MODULE_DEVICE_TABLE(of, k3_ringacc_of_match);
>
>  struct k3_ringacc *k3_ringacc_dmarings_init(struct platform_device *pdev,
>                                             struct k3_ringacc_init_data *data)
> @@ -1544,12 +1553,27 @@ static int k3_ringacc_probe(struct platform_device *pdev)
>         return 0;
>  }
>
> +static int k3_ringacc_remove(struct platform_device *pdev)
> +{
> +       struct k3_ringacc *ringacc = dev_get_drvdata(&pdev->dev);
> +
> +       mutex_lock(&k3_ringacc_list_lock);
> +       list_del(&ringacc->list);
> +       mutex_unlock(&k3_ringacc_list_lock);
> +       return 0;
> +}
> +
>  static struct platform_driver k3_ringacc_driver = {
>         .probe          = k3_ringacc_probe,
> +       .remove         = k3_ringacc_remove,
>         .driver         = {
>                 .name   = "k3-ringacc",
>                 .of_match_table = k3_ringacc_of_match,
>                 .suppress_bind_attrs = true,
>         },
>  };
> -builtin_platform_driver(k3_ringacc_driver);
> +module_platform_driver(k3_ringacc_driver);
> +
> +MODULE_LICENSE("GPL");
> +MODULE_DESCRIPTION("TI Ringacc driver for K3 SOCs");
> +MODULE_AUTHOR("Grygorii Strashko <grygorii.strashko@ti.com>");
> --
> 2.38.1
>
  
Nishanth Menon Nov. 3, 2022, 7:23 a.m. UTC | #2
Hi Peter Ujfalusi,

On Sat, 29 Oct 2022 10:53:56 +0300, Peter Ujfalusi wrote:
> The ring accelerator driver can be built as module since all depending
> functions are exported.
> 
> 

I have applied the following to branch ti-drivers-soc-next on [1].
Thank you!

[1/1] soc: ti: k3-ringacc: Allow the driver to be built as module
      commit: c07f216a8b72bac0c6e921793ad656a3b77f3545

All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent up the chain during
the next merge window (or sooner if it is a relevant bug fix), however if
problems are discovered then the patch may be dropped or reverted.

You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying
to this mail.

[1] git://git.kernel.org/pub/scm/linux/kernel/git/ti/linux.git
  

Patch

diff --git a/drivers/soc/ti/Kconfig b/drivers/soc/ti/Kconfig
index 7e2fb1c16af1..e009d9589af4 100644
--- a/drivers/soc/ti/Kconfig
+++ b/drivers/soc/ti/Kconfig
@@ -63,7 +63,7 @@  config TI_SCI_PM_DOMAINS
 	  rootfs may be available.
 
 config TI_K3_RINGACC
-	bool "K3 Ring accelerator Sub System"
+	tristate "K3 Ring accelerator Sub System"
 	depends on ARCH_K3 || COMPILE_TEST
 	depends on TI_SCI_INTA_IRQCHIP
 	help
diff --git a/drivers/soc/ti/k3-ringacc.c b/drivers/soc/ti/k3-ringacc.c
index f7bf18b8229a..e01e4d815230 100644
--- a/drivers/soc/ti/k3-ringacc.c
+++ b/drivers/soc/ti/k3-ringacc.c
@@ -7,7 +7,7 @@ 
 
 #include <linux/dma-mapping.h>
 #include <linux/io.h>
-#include <linux/init.h>
+#include <linux/module.h>
 #include <linux/of.h>
 #include <linux/of_device.h>
 #include <linux/platform_device.h>
@@ -336,6 +336,9 @@  struct k3_ring *k3_ringacc_request_ring(struct k3_ringacc *ringacc,
 
 	mutex_lock(&ringacc->req_lock);
 
+	if (!try_module_get(ringacc->dev->driver->owner))
+		goto err_module_get;
+
 	if (id == K3_RINGACC_RING_ID_ANY) {
 		/* Request for any general purpose ring */
 		struct ti_sci_resource_desc *gp_rings =
@@ -380,6 +383,9 @@  struct k3_ring *k3_ringacc_request_ring(struct k3_ringacc *ringacc,
 	return &ringacc->rings[id];
 
 error:
+	module_put(ringacc->dev->driver->owner);
+
+err_module_get:
 	mutex_unlock(&ringacc->req_lock);
 	return NULL;
 }
@@ -616,6 +622,8 @@  int k3_ringacc_ring_free(struct k3_ring *ring)
 no_init:
 	clear_bit(ring->ring_id, ringacc->rings_inuse);
 
+	module_put(ringacc->dev->driver->owner);
+
 out:
 	mutex_unlock(&ringacc->req_lock);
 	return 0;
@@ -1450,6 +1458,7 @@  static const struct of_device_id k3_ringacc_of_match[] = {
 	{ .compatible = "ti,am654-navss-ringacc", .data = &k3_ringacc_data, },
 	{},
 };
+MODULE_DEVICE_TABLE(of, k3_ringacc_of_match);
 
 struct k3_ringacc *k3_ringacc_dmarings_init(struct platform_device *pdev,
 					    struct k3_ringacc_init_data *data)
@@ -1544,12 +1553,27 @@  static int k3_ringacc_probe(struct platform_device *pdev)
 	return 0;
 }
 
+static int k3_ringacc_remove(struct platform_device *pdev)
+{
+	struct k3_ringacc *ringacc = dev_get_drvdata(&pdev->dev);
+
+	mutex_lock(&k3_ringacc_list_lock);
+	list_del(&ringacc->list);
+	mutex_unlock(&k3_ringacc_list_lock);
+	return 0;
+}
+
 static struct platform_driver k3_ringacc_driver = {
 	.probe		= k3_ringacc_probe,
+	.remove		= k3_ringacc_remove,
 	.driver		= {
 		.name	= "k3-ringacc",
 		.of_match_table = k3_ringacc_of_match,
 		.suppress_bind_attrs = true,
 	},
 };
-builtin_platform_driver(k3_ringacc_driver);
+module_platform_driver(k3_ringacc_driver);
+
+MODULE_LICENSE("GPL");
+MODULE_DESCRIPTION("TI Ringacc driver for K3 SOCs");
+MODULE_AUTHOR("Grygorii Strashko <grygorii.strashko@ti.com>");