1 // SPDX-License-Identifier: GPL-2.0
3 * Copyright(C) 2020 Linaro Limited. All rights reserved.
7 #include "coresight-config.h"
9 /* ETMv4 includes and features */
10 #if IS_ENABLED(CONFIG_CORESIGHT_SOURCE_ETM4X)
11 #include "coresight-etm4x-cfg.h"
13 /* preload configurations and features */
15 /* preload in features for ETMv4 */
18 static struct cscfg_parameter_desc strobe_params[] = {
29 static struct cscfg_regval_desc strobe_regs[] = {
30 /* resource selectors */
32 .type = CS_CFG_REG_TYPE_RESOURCE,
33 .offset = TRCRSCTLRn(2),
34 .hw_info = ETM4_CFG_RES_SEL,
38 .type = CS_CFG_REG_TYPE_RESOURCE,
39 .offset = TRCRSCTLRn(3),
40 .hw_info = ETM4_CFG_RES_SEQ,
43 /* strobe window counter 0 - reload from param 0 */
45 .type = CS_CFG_REG_TYPE_RESOURCE | CS_CFG_REG_TYPE_VAL_SAVE,
46 .offset = TRCCNTVRn(0),
47 .hw_info = ETM4_CFG_RES_CTR,
50 .type = CS_CFG_REG_TYPE_RESOURCE | CS_CFG_REG_TYPE_VAL_PARAM,
51 .offset = TRCCNTRLDVRn(0),
52 .hw_info = ETM4_CFG_RES_CTR,
56 .type = CS_CFG_REG_TYPE_RESOURCE,
57 .offset = TRCCNTCTLRn(0),
58 .hw_info = ETM4_CFG_RES_CTR,
61 /* strobe period counter 1 - reload from param 1 */
63 .type = CS_CFG_REG_TYPE_RESOURCE | CS_CFG_REG_TYPE_VAL_SAVE,
64 .offset = TRCCNTVRn(1),
65 .hw_info = ETM4_CFG_RES_CTR,
68 .type = CS_CFG_REG_TYPE_RESOURCE | CS_CFG_REG_TYPE_VAL_PARAM,
69 .offset = TRCCNTRLDVRn(1),
70 .hw_info = ETM4_CFG_RES_CTR,
74 .type = CS_CFG_REG_TYPE_RESOURCE,
75 .offset = TRCCNTCTLRn(1),
76 .hw_info = ETM4_CFG_RES_CTR,
81 .type = CS_CFG_REG_TYPE_RESOURCE,
82 .offset = TRCSEQEVRn(0),
83 .hw_info = ETM4_CFG_RES_SEQ,
87 .type = CS_CFG_REG_TYPE_RESOURCE,
88 .offset = TRCSEQEVRn(1),
89 .hw_info = ETM4_CFG_RES_SEQ,
94 .type = CS_CFG_REG_TYPE_STD | CS_CFG_REG_TYPE_VAL_MASK,
102 struct cscfg_feature_desc strobe_etm4x = {
104 .description = "Generate periodic trace capture windows.\n"
105 "parameter \'window\': a number of CPU cycles (W)\n"
106 "parameter \'period\': trace enabled for W cycles every period x W cycles\n",
107 .match_flags = CS_CFG_MATCH_CLASS_SRC_ETM4,
108 .nr_params = ARRAY_SIZE(strobe_params),
109 .params_desc = strobe_params,
110 .nr_regs = ARRAY_SIZE(strobe_regs),
111 .regs_desc = strobe_regs,
114 /* create an autofdo configuration */
116 /* we will provide 9 sets of preset parameter values */
117 #define AFDO_NR_PRESETS 9
118 /* the total number of parameters in used features */
119 #define AFDO_NR_PARAMS ARRAY_SIZE(strobe_params)
121 static const char *afdo_ref_names[] = {
126 * set of presets leaves strobing window constant while varying period to allow
127 * experimentation with mark / space ratios for various workloads
129 static u64 afdo_presets[AFDO_NR_PRESETS][AFDO_NR_PARAMS] = {
141 struct cscfg_config_desc afdo_etm4x = {
143 .description = "Setup ETMs with strobing for autofdo\n"
144 "Supplied presets allow experimentation with mark-space ratio for various loads\n",
145 .nr_feat_refs = ARRAY_SIZE(afdo_ref_names),
146 .feat_ref_names = afdo_ref_names,
147 .nr_presets = AFDO_NR_PRESETS,
148 .nr_total_params = AFDO_NR_PARAMS,
149 .presets = &afdo_presets[0][0],
152 /* end of ETM4x configurations */
153 #endif /* IS_ENABLED(CONFIG_CORESIGHT_SOURCE_ETM4X) */