Commit 529c4451 authored by Kim Phillips's avatar Kim Phillips Committed by Greg Kroah-Hartman
Browse files

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



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

- Kconfig becomes a tristate, to allow =m
- add an etb_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-12-mathieu.poirier@linaro.org


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 22a550a3
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -57,13 +57,16 @@ config CORESIGHT_SINK_TPIU
	  the on-board coresight memory can handle.

config CORESIGHT_SINK_ETBV10
	bool "Coresight ETBv1.0 driver"
	tristate "Coresight ETBv1.0 driver"
	depends on CORESIGHT_LINKS_AND_SINKS
	help
	  This enables support for the Embedded Trace Buffer version 1.0 driver
	  that complies with the generic implementation of the component without
	  special enhancement or added features.

	  To compile this driver as a module, choose M here: the
	  module will be called coresight-etb10.

config CORESIGHT_SOURCE_ETM3X
	tristate "CoreSight Embedded Trace Macrocell 3.x driver"
	depends on !ARM64
+25 −1
Original line number Diff line number Diff line
@@ -801,6 +801,21 @@ err_misc_register:
	return ret;
}

static int __exit etb_remove(struct amba_device *adev)
{
	struct etb_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;
}

#ifdef CONFIG_PM
static int etb_runtime_suspend(struct device *dev)
{
@@ -835,6 +850,8 @@ static const struct amba_id etb_ids[] = {
	{ 0, 0},
};

MODULE_DEVICE_TABLE(amba, etb_ids);

static struct amba_driver etb_driver = {
	.drv = {
		.name	= "coresight-etb10",
@@ -844,6 +861,13 @@ static struct amba_driver etb_driver = {

	},
	.probe		= etb_probe,
	.remove		= etb_remove,
	.id_table	= etb_ids,
};
builtin_amba_driver(etb_driver);

module_amba_driver(etb_driver);

MODULE_AUTHOR("Pratik Patel <pratikp@codeaurora.org>");
MODULE_AUTHOR("Mathieu Poirier <mathieu.poirier@linaro.org>");
MODULE_DESCRIPTION("Arm CoreSight Embedded Trace Buffer driver");
MODULE_LICENSE("GPL v2");