Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0
0002 /*
0003  * Copyright(C) 2020 Linaro Limited. All rights reserved.
0004  * Author: Mike Leach <mike.leach@linaro.org>
0005  */
0006 
0007 #include "coresight-config.h"
0008 
0009 /* ETMv4 includes and features */
0010 #if IS_ENABLED(CONFIG_CORESIGHT_SOURCE_ETM4X)
0011 #include "coresight-etm4x-cfg.h"
0012 
0013 /* preload configurations and features */
0014 
0015 /* preload in features for ETMv4 */
0016 
0017 /* strobe feature */
0018 static struct cscfg_parameter_desc strobe_params[] = {
0019     {
0020         .name = "window",
0021         .value = 5000,
0022     },
0023     {
0024         .name = "period",
0025         .value = 10000,
0026     },
0027 };
0028 
0029 static struct cscfg_regval_desc strobe_regs[] = {
0030     /* resource selectors */
0031     {
0032         .type = CS_CFG_REG_TYPE_RESOURCE,
0033         .offset = TRCRSCTLRn(2),
0034         .hw_info = ETM4_CFG_RES_SEL,
0035         .val32 = 0x20001,
0036     },
0037     {
0038         .type = CS_CFG_REG_TYPE_RESOURCE,
0039         .offset = TRCRSCTLRn(3),
0040         .hw_info = ETM4_CFG_RES_SEQ,
0041         .val32 = 0x20002,
0042     },
0043     /* strobe window counter 0 - reload from param 0 */
0044     {
0045         .type = CS_CFG_REG_TYPE_RESOURCE | CS_CFG_REG_TYPE_VAL_SAVE,
0046         .offset = TRCCNTVRn(0),
0047         .hw_info = ETM4_CFG_RES_CTR,
0048     },
0049     {
0050         .type = CS_CFG_REG_TYPE_RESOURCE | CS_CFG_REG_TYPE_VAL_PARAM,
0051         .offset = TRCCNTRLDVRn(0),
0052         .hw_info = ETM4_CFG_RES_CTR,
0053         .val32 = 0,
0054     },
0055     {
0056         .type = CS_CFG_REG_TYPE_RESOURCE,
0057         .offset = TRCCNTCTLRn(0),
0058         .hw_info = ETM4_CFG_RES_CTR,
0059         .val32 = 0x10001,
0060     },
0061     /* strobe period counter 1 - reload from param 1 */
0062     {
0063         .type = CS_CFG_REG_TYPE_RESOURCE | CS_CFG_REG_TYPE_VAL_SAVE,
0064         .offset = TRCCNTVRn(1),
0065         .hw_info = ETM4_CFG_RES_CTR,
0066     },
0067     {
0068         .type = CS_CFG_REG_TYPE_RESOURCE | CS_CFG_REG_TYPE_VAL_PARAM,
0069         .offset = TRCCNTRLDVRn(1),
0070         .hw_info = ETM4_CFG_RES_CTR,
0071         .val32 = 1,
0072     },
0073     {
0074         .type = CS_CFG_REG_TYPE_RESOURCE,
0075         .offset = TRCCNTCTLRn(1),
0076         .hw_info = ETM4_CFG_RES_CTR,
0077         .val32 = 0x8102,
0078     },
0079     /* sequencer */
0080     {
0081         .type = CS_CFG_REG_TYPE_RESOURCE,
0082         .offset = TRCSEQEVRn(0),
0083         .hw_info = ETM4_CFG_RES_SEQ,
0084         .val32 = 0x0081,
0085     },
0086     {
0087         .type = CS_CFG_REG_TYPE_RESOURCE,
0088         .offset = TRCSEQEVRn(1),
0089         .hw_info = ETM4_CFG_RES_SEQ,
0090         .val32 = 0x0000,
0091     },
0092     /* view-inst */
0093     {
0094         .type = CS_CFG_REG_TYPE_STD | CS_CFG_REG_TYPE_VAL_MASK,
0095         .offset = TRCVICTLR,
0096         .val32 = 0x0003,
0097         .mask32 = 0x0003,
0098     },
0099     /* end of regs */
0100 };
0101 
0102 struct cscfg_feature_desc strobe_etm4x = {
0103     .name = "strobing",
0104     .description = "Generate periodic trace capture windows.\n"
0105                "parameter \'window\': a number of CPU cycles (W)\n"
0106                "parameter \'period\': trace enabled for W cycles every period x W cycles\n",
0107     .match_flags = CS_CFG_MATCH_CLASS_SRC_ETM4,
0108     .nr_params = ARRAY_SIZE(strobe_params),
0109     .params_desc = strobe_params,
0110     .nr_regs = ARRAY_SIZE(strobe_regs),
0111     .regs_desc = strobe_regs,
0112 };
0113 
0114 /* create an autofdo configuration */
0115 
0116 /* we will provide 9 sets of preset parameter values */
0117 #define AFDO_NR_PRESETS 9
0118 /* the total number of parameters in used features */
0119 #define AFDO_NR_PARAMS  ARRAY_SIZE(strobe_params)
0120 
0121 static const char *afdo_ref_names[] = {
0122     "strobing",
0123 };
0124 
0125 /*
0126  * set of presets leaves strobing window constant while varying period to allow
0127  * experimentation with mark / space ratios for various workloads
0128  */
0129 static u64 afdo_presets[AFDO_NR_PRESETS][AFDO_NR_PARAMS] = {
0130     { 5000, 2 },
0131     { 5000, 4 },
0132     { 5000, 8 },
0133     { 5000, 16 },
0134     { 5000, 64 },
0135     { 5000, 128 },
0136     { 5000, 512 },
0137     { 5000, 1024 },
0138     { 5000, 4096 },
0139 };
0140 
0141 struct cscfg_config_desc afdo_etm4x = {
0142     .name = "autofdo",
0143     .description = "Setup ETMs with strobing for autofdo\n"
0144     "Supplied presets allow experimentation with mark-space ratio for various loads\n",
0145     .nr_feat_refs = ARRAY_SIZE(afdo_ref_names),
0146     .feat_ref_names = afdo_ref_names,
0147     .nr_presets = AFDO_NR_PRESETS,
0148     .nr_total_params = AFDO_NR_PARAMS,
0149     .presets = &afdo_presets[0][0],
0150 };
0151 
0152 /* end of ETM4x configurations */
0153 #endif  /* IS_ENABLED(CONFIG_CORESIGHT_SOURCE_ETM4X) */