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: Mike Leach <mike.leach@linaro.org>
Reviewed-by: Suzuki K Poulose <suzuki.poulose@arm.com>
Signed-off-by: Kim Phillips <kim.phillips@arm.com>
Signed-off-by: Tingwei Zhang <tingwei@codeaurora.org>
Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
Link: https://lore.kernel.org/r/20200928163513.70169-14-mathieu.poirier@linaro.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Kim Phillips 2020-09-28 10:35:01 -06:00 committed by Greg Kroah-Hartman
parent d9ed244ef8
commit ecfbf09b1e
3 changed files with 32 additions and 5 deletions

View File

@ -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
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

View File

@ -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

View File

@ -559,6 +559,21 @@ out:
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[] = {
{ 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 = {
}, },
.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");