Skip to content

Commit f582375

Browse files
committed
coresight: syscfg: Example CoreSight configuration loadable module
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2055405 commit ede5bab Author: Mike Leach <mike.leach@linaro.org> Date: Wed Nov 24 20:00:36 2021 +0000 coresight: syscfg: Example CoreSight configuration loadable module 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> Signed-off-by: Jeremy Linton <jlinton@redhat.com>
1 parent 9321666 commit f582375

File tree

5 files changed

+88
-0
lines changed

5 files changed

+88
-0
lines changed

MAINTAINERS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1890,6 +1890,7 @@ F: Documentation/trace/coresight/*
18901890
F: drivers/hwtracing/coresight/*
18911891
F: include/dt-bindings/arm/coresight-cti-dt.h
18921892
F: include/linux/coresight*
1893+
F: samples/coresight/*
18931894
F: tools/perf/arch/arm/util/auxtrace.c
18941895
F: tools/perf/arch/arm/util/cs-etm.c
18951896
F: tools/perf/arch/arm/util/cs-etm.h

samples/Kconfig

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,4 +230,13 @@ config SAMPLE_WATCH_QUEUE
230230
Build example userspace program to use the new mount_notify(),
231231
sb_notify() syscalls and the KEYCTL_WATCH_KEY keyctl() function.
232232

233+
config SAMPLE_CORESIGHT_SYSCFG
234+
tristate "Build example loadable module for CoreSight config"
235+
depends on CORESIGHT && m
236+
help
237+
Build an example loadable module that adds new CoreSight features
238+
and configuration using the CoreSight system configuration API.
239+
This demonstrates how a user may create their own CoreSight
240+
configurations and easily load them into the system at runtime.
241+
233242
endif # SAMPLES

samples/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,5 @@ obj-$(CONFIG_SAMPLE_INTEL_MEI) += mei/
3030
subdir-$(CONFIG_SAMPLE_WATCHDOG) += watchdog
3131
subdir-$(CONFIG_SAMPLE_WATCH_QUEUE) += watch_queue
3232
obj-$(CONFIG_DEBUG_KMEMLEAK_TEST) += kmemleak/
33+
obj-$(CONFIG_SAMPLE_CORESIGHT_SYSCFG) += coresight/
3334
obj-$(CONFIG_SAMPLE_FPROBE) += fprobe/

samples/coresight/Makefile

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
# SPDX-License-Identifier: GPL-2.0-only
2+
3+
obj-$(CONFIG_SAMPLE_CORESIGHT_SYSCFG) += coresight-cfg-sample.o
4+
ccflags-y += -I$(srctree)/drivers/hwtracing/coresight
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
// SPDX-License-Identifier: GPL-2.0
2+
/*
3+
* Copyright(C) 2020 Linaro Limited. All rights reserved.
4+
* Author: Mike Leach <mike.leach@linaro.org>
5+
*/
6+
7+
#include "coresight-config.h"
8+
#include "coresight-syscfg.h"
9+
10+
/* create an alternate autofdo configuration */
11+
12+
/* we will provide 4 sets of preset parameter values */
13+
#define AFDO2_NR_PRESETS 4
14+
/* the total number of parameters in used features - strobing has 2 */
15+
#define AFDO2_NR_PARAM_SUM 2
16+
17+
static const char *afdo2_ref_names[] = {
18+
"strobing",
19+
};
20+
21+
/*
22+
* set of presets leaves strobing window constant while varying period to allow
23+
* experimentation with mark / space ratios for various workloads
24+
*/
25+
static u64 afdo2_presets[AFDO2_NR_PRESETS][AFDO2_NR_PARAM_SUM] = {
26+
{ 1000, 100 },
27+
{ 1000, 1000 },
28+
{ 1000, 5000 },
29+
{ 1000, 10000 },
30+
};
31+
32+
struct cscfg_config_desc afdo2 = {
33+
.name = "autofdo2",
34+
.description = "Setup ETMs with strobing for autofdo\n"
35+
"Supplied presets allow experimentation with mark-space ratio for various loads\n",
36+
.nr_feat_refs = ARRAY_SIZE(afdo2_ref_names),
37+
.feat_ref_names = afdo2_ref_names,
38+
.nr_presets = AFDO2_NR_PRESETS,
39+
.nr_total_params = AFDO2_NR_PARAM_SUM,
40+
.presets = &afdo2_presets[0][0],
41+
};
42+
43+
static struct cscfg_feature_desc *sample_feats[] = {
44+
NULL
45+
};
46+
47+
static struct cscfg_config_desc *sample_cfgs[] = {
48+
&afdo2,
49+
NULL
50+
};
51+
52+
static struct cscfg_load_owner_info mod_owner = {
53+
.type = CSCFG_OWNER_MODULE,
54+
.owner_handle = THIS_MODULE,
55+
};
56+
57+
/* module init and exit - just load and unload configs */
58+
static int __init cscfg_sample_init(void)
59+
{
60+
return cscfg_load_config_sets(sample_cfgs, sample_feats, &mod_owner);
61+
}
62+
63+
static void __exit cscfg_sample_exit(void)
64+
{
65+
cscfg_unload_config_sets(&mod_owner);
66+
}
67+
68+
module_init(cscfg_sample_init);
69+
module_exit(cscfg_sample_exit);
70+
71+
MODULE_LICENSE("GPL v2");
72+
MODULE_AUTHOR("Mike Leach <mike.leach@linaro.org>");
73+
MODULE_DESCRIPTION("CoreSight Syscfg Example");

0 commit comments

Comments
 (0)