coresight: syscfg: Example CoreSight configuration loadable module
authorMike Leach <mike.leach@linaro.org>
Wed, 24 Nov 2021 20:00:36 +0000 (20:00 +0000)
committerMathieu Poirier <mathieu.poirier@linaro.org>
Fri, 26 Nov 2021 18:34:07 +0000 (11:34 -0700)
An example of creating a loadable module to add CoreSight configurations
into a system.

In the Kernel samples/coresight directory.

Signed-off-by: Mike Leach <mike.leach@linaro.org>
Link: https://lore.kernel.org/r/20211124200038.28662-5-mike.leach@linaro.org
Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
MAINTAINERS
samples/Kconfig
samples/Makefile
samples/coresight/Makefile [new file with mode: 0644]
samples/coresight/coresight-cfg-sample.c [new file with mode: 0644]

index 7a2345ce85213cd03ef4aca3735a26cc1677d018..85242fdd3b8c66a39a6fee5a946094ed1524b434 100644 (file)
@@ -1890,6 +1890,7 @@ F:        Documentation/trace/coresight/*
 F:     drivers/hwtracing/coresight/*
 F:     include/dt-bindings/arm/coresight-cti-dt.h
 F:     include/linux/coresight*
+F:     samples/coresight/*
 F:     tools/perf/arch/arm/util/auxtrace.c
 F:     tools/perf/arch/arm/util/cs-etm.c
 F:     tools/perf/arch/arm/util/cs-etm.h
index bec3528aa2de1369619940999d300b1b9c1849d2..fe8b56d576cea8ac0717cafe117b7d3f666f67fb 100644 (file)
@@ -232,6 +232,15 @@ config SAMPLE_WATCH_QUEUE
          Build example userspace program to use the new mount_notify(),
          sb_notify() syscalls and the KEYCTL_WATCH_KEY keyctl() function.
 
+config SAMPLE_CORESIGHT_SYSCFG
+       tristate "Build example loadable module for CoreSight config"
+       depends on CORESIGHT && m
+       help
+         Build an example loadable module that adds new CoreSight features
+         and configuration using the CoreSight system configuration API.
+         This demonstrates how a user may create their own CoreSight
+         configurations and easily load them into the system at runtime.
+
 endif # SAMPLES
 
 config HAVE_SAMPLE_FTRACE_DIRECT
index b7b98307c2b4051cb84e6bd0c38c3b6dc21fb864..c148ada64bebd6830286425350074df2c0bf8b6f 100644 (file)
@@ -32,3 +32,4 @@ obj-$(CONFIG_SAMPLE_INTEL_MEI)                += mei/
 subdir-$(CONFIG_SAMPLE_WATCHDOG)       += watchdog
 subdir-$(CONFIG_SAMPLE_WATCH_QUEUE)    += watch_queue
 obj-$(CONFIG_DEBUG_KMEMLEAK_TEST)      += kmemleak/
+obj-$(CONFIG_SAMPLE_CORESIGHT_SYSCFG)  += coresight/
diff --git a/samples/coresight/Makefile b/samples/coresight/Makefile
new file mode 100644 (file)
index 0000000..b3fce4a
--- /dev/null
@@ -0,0 +1,4 @@
+# SPDX-License-Identifier: GPL-2.0-only
+
+obj-$(CONFIG_SAMPLE_CORESIGHT_SYSCFG) += coresight-cfg-sample.o
+ccflags-y += -I$(srctree)/drivers/hwtracing/coresight
diff --git a/samples/coresight/coresight-cfg-sample.c b/samples/coresight/coresight-cfg-sample.c
new file mode 100644 (file)
index 0000000..25485c8
--- /dev/null
@@ -0,0 +1,73 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright(C) 2020 Linaro Limited. All rights reserved.
+ * Author: Mike Leach <mike.leach@linaro.org>
+ */
+
+#include "coresight-config.h"
+#include "coresight-syscfg.h"
+
+/* create an alternate autofdo configuration */
+
+/* we will provide 4 sets of preset parameter values */
+#define AFDO2_NR_PRESETS       4
+/* the total number of parameters in used features - strobing has 2 */
+#define AFDO2_NR_PARAM_SUM     2
+
+static const char *afdo2_ref_names[] = {
+       "strobing",
+};
+
+/*
+ * set of presets leaves strobing window constant while varying period to allow
+ * experimentation with mark / space ratios for various workloads
+ */
+static u64 afdo2_presets[AFDO2_NR_PRESETS][AFDO2_NR_PARAM_SUM] = {
+       { 1000, 100 },
+       { 1000, 1000 },
+       { 1000, 5000 },
+       { 1000, 10000 },
+};
+
+struct cscfg_config_desc afdo2 = {
+       .name = "autofdo2",
+       .description = "Setup ETMs with strobing for autofdo\n"
+       "Supplied presets allow experimentation with mark-space ratio for various loads\n",
+       .nr_feat_refs = ARRAY_SIZE(afdo2_ref_names),
+       .feat_ref_names = afdo2_ref_names,
+       .nr_presets = AFDO2_NR_PRESETS,
+       .nr_total_params = AFDO2_NR_PARAM_SUM,
+       .presets = &afdo2_presets[0][0],
+};
+
+static struct cscfg_feature_desc *sample_feats[] = {
+       NULL
+};
+
+static struct cscfg_config_desc *sample_cfgs[] = {
+       &afdo2,
+       NULL
+};
+
+static struct cscfg_load_owner_info mod_owner = {
+       .type = CSCFG_OWNER_MODULE,
+       .owner_handle = THIS_MODULE,
+};
+
+/* module init and exit - just load and unload configs */
+static int __init cscfg_sample_init(void)
+{
+       return cscfg_load_config_sets(sample_cfgs, sample_feats, &mod_owner);
+}
+
+static void __exit cscfg_sample_exit(void)
+{
+       cscfg_unload_config_sets(&mod_owner);
+}
+
+module_init(cscfg_sample_init);
+module_exit(cscfg_sample_exit);
+
+MODULE_LICENSE("GPL v2");
+MODULE_AUTHOR("Mike Leach <mike.leach@linaro.org>");
+MODULE_DESCRIPTION("CoreSight Syscfg Example");