Commit ecfbf09b authored by Kim Phillips's avatar Kim Phillips Committed by Greg Kroah-Hartman

coresight: tmc: Allow tmc to be built as a module

Allow to build coresight-tmc as a module, for ease of development.

- Kconfig becomes a tristate, to allow =m
- append -core to source file name to allow module to
  be called coresight-tmc by the Makefile
- add an tmc_remove function, for module unload
- add a MODULE_DEVICE_TABLE for autoloading on boot

Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
Cc: Leo Yan <leo.yan@linaro.org>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Randy Dunlap <rdunlap@infradead.org>
Cc: Suzuki K Poulose <Suzuki.Poulose@arm.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Russell King <linux@armlinux.org.uk>
Tested-by: default avatarMike Leach <mike.leach@linaro.org>
Reviewed-by: default avatarSuzuki K Poulose <suzuki.poulose@arm.com>
Signed-off-by: default avatarKim Phillips <kim.phillips@arm.com>
Signed-off-by: default avatarTingwei Zhang <tingwei@codeaurora.org>
Signed-off-by: default avatarMathieu Poirier <mathieu.poirier@linaro.org>
Link: https://lore.kernel.org/r/20200928163513.70169-14-mathieu.poirier@linaro.orgSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent d9ed244e
...@@ -25,7 +25,8 @@ config CORESIGHT_LINKS_AND_SINKS ...@@ -25,7 +25,8 @@ config CORESIGHT_LINKS_AND_SINKS
entity at run time to form a complete trace path. entity at run time to form a complete trace path.
config CORESIGHT_LINK_AND_SINK_TMC config CORESIGHT_LINK_AND_SINK_TMC
bool "Coresight generic TMC driver" tristate "Coresight generic TMC driver"
depends on CORESIGHT_LINKS_AND_SINKS depends on CORESIGHT_LINKS_AND_SINKS
help help
This enables support for the Trace Memory Controller driver. This enables support for the Trace Memory Controller driver.
...@@ -34,6 +35,9 @@ config CORESIGHT_LINK_AND_SINK_TMC ...@@ -34,6 +35,9 @@ config CORESIGHT_LINK_AND_SINK_TMC
complies with the generic implementation of the component without complies with the generic implementation of the component without
special enhancement or added features. special enhancement or added features.
To compile this driver as a module, choose M here: the
module will be called coresight-tmc.
config CORESIGHT_CATU config CORESIGHT_CATU
bool "Coresight Address Translation Unit (CATU) driver" bool "Coresight Address Translation Unit (CATU) driver"
depends on CORESIGHT_LINK_AND_SINK_TMC depends on CORESIGHT_LINK_AND_SINK_TMC
......
...@@ -4,8 +4,8 @@ ...@@ -4,8 +4,8 @@
# #
obj-$(CONFIG_CORESIGHT) += coresight.o coresight-etm-perf.o \ obj-$(CONFIG_CORESIGHT) += coresight.o coresight-etm-perf.o \
coresight-platform.o coresight-sysfs.o coresight-platform.o coresight-sysfs.o
obj-$(CONFIG_CORESIGHT_LINK_AND_SINK_TMC) += coresight-tmc.o \ obj-$(CONFIG_CORESIGHT_LINK_AND_SINK_TMC) += coresight-tmc.o
coresight-tmc-etf.o \ coresight-tmc-y := coresight-tmc-core.o coresight-tmc-etf.o \
coresight-tmc-etr.o coresight-tmc-etr.o
obj-$(CONFIG_CORESIGHT_SINK_TPIU) += coresight-tpiu.o obj-$(CONFIG_CORESIGHT_SINK_TPIU) += coresight-tpiu.o
obj-$(CONFIG_CORESIGHT_SINK_ETBV10) += coresight-etb10.o obj-$(CONFIG_CORESIGHT_SINK_ETBV10) += coresight-etb10.o
......
...@@ -559,6 +559,21 @@ static void tmc_shutdown(struct amba_device *adev) ...@@ -559,6 +559,21 @@ static void tmc_shutdown(struct amba_device *adev)
spin_unlock_irqrestore(&drvdata->spinlock, flags); spin_unlock_irqrestore(&drvdata->spinlock, flags);
} }
static int __exit tmc_remove(struct amba_device *adev)
{
struct tmc_drvdata *drvdata = dev_get_drvdata(&adev->dev);
/*
* Since misc_open() holds a refcount on the f_ops, which is
* etb fops in this case, device is there until last file
* handler to this device is closed.
*/
misc_deregister(&drvdata->miscdev);
coresight_unregister(drvdata->csdev);
return 0;
}
static const struct amba_id tmc_ids[] = { static const struct amba_id tmc_ids[] = {
CS_AMBA_ID(0x000bb961), CS_AMBA_ID(0x000bb961),
/* Coresight SoC 600 TMC-ETR/ETS */ /* Coresight SoC 600 TMC-ETR/ETS */
...@@ -570,6 +585,8 @@ static const struct amba_id tmc_ids[] = { ...@@ -570,6 +585,8 @@ static const struct amba_id tmc_ids[] = {
{ 0, 0}, { 0, 0},
}; };
MODULE_DEVICE_TABLE(amba, tmc_ids);
static struct amba_driver tmc_driver = { static struct amba_driver tmc_driver = {
.drv = { .drv = {
.name = "coresight-tmc", .name = "coresight-tmc",
...@@ -578,6 +595,12 @@ static struct amba_driver tmc_driver = { ...@@ -578,6 +595,12 @@ static struct amba_driver tmc_driver = {
}, },
.probe = tmc_probe, .probe = tmc_probe,
.shutdown = tmc_shutdown, .shutdown = tmc_shutdown,
.remove = tmc_remove,
.id_table = tmc_ids, .id_table = tmc_ids,
}; };
builtin_amba_driver(tmc_driver);
module_amba_driver(tmc_driver);
MODULE_AUTHOR("Pratik Patel <pratikp@codeaurora.org>");
MODULE_DESCRIPTION("Arm CoreSight Trace Memory Controller driver");
MODULE_LICENSE("GPL v2");
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment