155 lines · c
1// SPDX-License-Identifier: GPL-2.02/*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 9119/* 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 allow128 * experimentation with mark / space ratios for various workloads129 */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) */155