coresight: Remove the 'enable' field.
[linux-2.6-microblaze.git] / drivers / hwtracing / coresight / coresight-cfg-afdo.c
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
9 /* ETMv4 includes and features */
10 #if IS_ENABLED(CONFIG_CORESIGHT_SOURCE_ETM4X)
11 #include "coresight-etm4x-cfg.h"
12 #include "coresight-cfg-preload.h"
13
14 /* preload configurations and features */
15
16 /* preload in features for ETMv4 */
17
18 /* strobe feature */
19 static struct cscfg_parameter_desc strobe_params[] = {
20         {
21                 .name = "window",
22                 .value = 5000,
23         },
24         {
25                 .name = "period",
26                 .value = 10000,
27         },
28 };
29
30 static struct cscfg_regval_desc strobe_regs[] = {
31         /* resource selectors */
32         {
33                 .type = CS_CFG_REG_TYPE_RESOURCE,
34                 .offset = TRCRSCTLRn(2),
35                 .hw_info = ETM4_CFG_RES_SEL,
36                 .val32 = 0x20001,
37         },
38         {
39                 .type = CS_CFG_REG_TYPE_RESOURCE,
40                 .offset = TRCRSCTLRn(3),
41                 .hw_info = ETM4_CFG_RES_SEQ,
42                 .val32 = 0x20002,
43         },
44         /* strobe window counter 0 - reload from param 0 */
45         {
46                 .type = CS_CFG_REG_TYPE_RESOURCE | CS_CFG_REG_TYPE_VAL_SAVE,
47                 .offset = TRCCNTVRn(0),
48                 .hw_info = ETM4_CFG_RES_CTR,
49         },
50         {
51                 .type = CS_CFG_REG_TYPE_RESOURCE | CS_CFG_REG_TYPE_VAL_PARAM,
52                 .offset = TRCCNTRLDVRn(0),
53                 .hw_info = ETM4_CFG_RES_CTR,
54                 .val32 = 0,
55         },
56         {
57                 .type = CS_CFG_REG_TYPE_RESOURCE,
58                 .offset = TRCCNTCTLRn(0),
59                 .hw_info = ETM4_CFG_RES_CTR,
60                 .val32 = 0x10001,
61         },
62         /* strobe period counter 1 - reload from param 1 */
63         {
64                 .type = CS_CFG_REG_TYPE_RESOURCE | CS_CFG_REG_TYPE_VAL_SAVE,
65                 .offset = TRCCNTVRn(1),
66                 .hw_info = ETM4_CFG_RES_CTR,
67         },
68         {
69                 .type = CS_CFG_REG_TYPE_RESOURCE | CS_CFG_REG_TYPE_VAL_PARAM,
70                 .offset = TRCCNTRLDVRn(1),
71                 .hw_info = ETM4_CFG_RES_CTR,
72                 .val32 = 1,
73         },
74         {
75                 .type = CS_CFG_REG_TYPE_RESOURCE,
76                 .offset = TRCCNTCTLRn(1),
77                 .hw_info = ETM4_CFG_RES_CTR,
78                 .val32 = 0x8102,
79         },
80         /* sequencer */
81         {
82                 .type = CS_CFG_REG_TYPE_RESOURCE,
83                 .offset = TRCSEQEVRn(0),
84                 .hw_info = ETM4_CFG_RES_SEQ,
85                 .val32 = 0x0081,
86         },
87         {
88                 .type = CS_CFG_REG_TYPE_RESOURCE,
89                 .offset = TRCSEQEVRn(1),
90                 .hw_info = ETM4_CFG_RES_SEQ,
91                 .val32 = 0x0000,
92         },
93         /* view-inst */
94         {
95                 .type = CS_CFG_REG_TYPE_STD | CS_CFG_REG_TYPE_VAL_MASK,
96                 .offset = TRCVICTLR,
97                 .val32 = 0x0003,
98                 .mask32 = 0x0003,
99         },
100         /* end of regs */
101 };
102
103 struct cscfg_feature_desc strobe_etm4x = {
104         .name = "strobing",
105         .description = "Generate periodic trace capture windows.\n"
106                        "parameter \'window\': a number of CPU cycles (W)\n"
107                        "parameter \'period\': trace enabled for W cycles every period x W cycles\n",
108         .match_flags = CS_CFG_MATCH_CLASS_SRC_ETM4,
109         .nr_params = ARRAY_SIZE(strobe_params),
110         .params_desc = strobe_params,
111         .nr_regs = ARRAY_SIZE(strobe_regs),
112         .regs_desc = strobe_regs,
113 };
114
115 /* create an autofdo configuration */
116
117 /* we will provide 9 sets of preset parameter values */
118 #define AFDO_NR_PRESETS 9
119 /* the total number of parameters in used features */
120 #define AFDO_NR_PARAMS  ARRAY_SIZE(strobe_params)
121
122 static const char *afdo_ref_names[] = {
123         "strobing",
124 };
125
126 /*
127  * set of presets leaves strobing window constant while varying period to allow
128  * experimentation with mark / space ratios for various workloads
129  */
130 static u64 afdo_presets[AFDO_NR_PRESETS][AFDO_NR_PARAMS] = {
131         { 5000, 2 },
132         { 5000, 4 },
133         { 5000, 8 },
134         { 5000, 16 },
135         { 5000, 64 },
136         { 5000, 128 },
137         { 5000, 512 },
138         { 5000, 1024 },
139         { 5000, 4096 },
140 };
141
142 struct cscfg_config_desc afdo_etm4x = {
143         .name = "autofdo",
144         .description = "Setup ETMs with strobing for autofdo\n"
145         "Supplied presets allow experimentation with mark-space ratio for various loads\n",
146         .nr_feat_refs = ARRAY_SIZE(afdo_ref_names),
147         .feat_ref_names = afdo_ref_names,
148         .nr_presets = AFDO_NR_PRESETS,
149         .nr_total_params = AFDO_NR_PARAMS,
150         .presets = &afdo_presets[0][0],
151 };
152
153 /* end of ETM4x configurations */
154 #endif  /* IS_ENABLED(CONFIG_CORESIGHT_SOURCE_ETM4X) */