Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.5.6.
  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 */
 19static struct cscfg_parameter_desc strobe_params[] = {
 20	{
 21		.name = "window",
 22		.value = 5000,
 23	},
 24	{
 25		.name = "period",
 26		.value = 10000,
 27	},
 28};
 29
 30static 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
103struct 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
122static 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 */
130static 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
142struct 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) */