Skip to content

Commit

Permalink
soc: ti: k3-ringacc: Allow the driver to be built as module
Browse files Browse the repository at this point in the history
The ring accelerator driver can be built as module since all depending
functions are exported.

Signed-off-by: Peter Ujfalusi <peter.ujfalusi@gmail.com>
Signed-off-by: Nishanth Menon <nm@ti.com>
Tested-by: Nicolas Frayer <nfrayer@baylibre.com>
Reviewed-by: Nicolas Frayer <nfrayer@baylibre.com>
Link: https://lore.kernel.org/r/20221029075356.7296-1-peter.ujfalusi@gmail.com
  • Loading branch information
Peter Ujfalusi authored and Nishanth Menon committed Nov 3, 2022
1 parent b13b2c3 commit c07f216
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 3 deletions.
2 changes: 1 addition & 1 deletion drivers/soc/ti/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
28 changes: 26 additions & 2 deletions drivers/soc/ti/k3-ringacc.c
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand Down Expand Up @@ -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 =
Expand Down Expand Up @@ -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;
}
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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>");

0 comments on commit c07f216

Please sign in to comment.