| // SPDX-License-Identifier: GPL-2.0 |
| /* |
| * Copyright(C) 2023 Marvell. |
| * Based on coresight-cfg-afdo.c |
| */ |
| |
| #include "coresight-config.h" |
| |
| /* ETMv4 includes and features */ |
| #if IS_ENABLED(CONFIG_CORESIGHT_SOURCE_ETM4X) |
| #include "coresight-etm4x-cfg.h" |
| |
| /* preload configurations and features */ |
| |
| /* preload in features for ETMv4 */ |
| |
| /* panic_stop feature */ |
| static struct cscfg_parameter_desc gen_etrig_params[] = { |
| { |
| .name = "address", |
| .value = (u64)panic, |
| }, |
| }; |
| |
| static struct cscfg_regval_desc gen_etrig_regs[] = { |
| /* resource selector */ |
| { |
| .type = CS_CFG_REG_TYPE_RESOURCE, |
| .offset = TRCRSCTLRn(2), |
| .hw_info = ETM4_CFG_RES_SEL, |
| .val32 = 0x40001, |
| }, |
| /* single address comparator */ |
| { |
| .type = CS_CFG_REG_TYPE_RESOURCE | CS_CFG_REG_TYPE_VAL_64BIT | |
| CS_CFG_REG_TYPE_VAL_PARAM, |
| .offset = TRCACVRn(0), |
| .val32 = 0x0, |
| }, |
| { |
| .type = CS_CFG_REG_TYPE_RESOURCE, |
| .offset = TRCACATRn(0), |
| .val64 = 0xf00, |
| }, |
| /* Driver external output[0] with comparator out */ |
| { |
| .type = CS_CFG_REG_TYPE_RESOURCE, |
| .offset = TRCEVENTCTL0R, |
| .val32 = 0x2, |
| }, |
| /* end of regs */ |
| }; |
| |
| struct cscfg_feature_desc gen_etrig_etm4x = { |
| .name = "gen_etrig", |
| .description = "Generate external trigger on address match\n" |
| "parameter \'address\': address of kernel address\n", |
| .match_flags = CS_CFG_MATCH_CLASS_SRC_ETM4, |
| .nr_params = ARRAY_SIZE(gen_etrig_params), |
| .params_desc = gen_etrig_params, |
| .nr_regs = ARRAY_SIZE(gen_etrig_regs), |
| .regs_desc = gen_etrig_regs, |
| }; |
| |
| /* create a panic stop configuration */ |
| |
| /* the total number of parameters in used features */ |
| #define PSTOP_NR_PARAMS ARRAY_SIZE(gen_etrig_params) |
| |
| static const char *pstop_ref_names[] = { |
| "gen_etrig", |
| }; |
| |
| struct cscfg_config_desc pstop_etm4x = { |
| .name = "panicstop", |
| .description = "Stop ETM on kernel panic\n", |
| .nr_feat_refs = ARRAY_SIZE(pstop_ref_names), |
| .feat_ref_names = pstop_ref_names, |
| .nr_total_params = PSTOP_NR_PARAMS, |
| }; |
| |
| /* end of ETM4x configurations */ |
| #endif /* IS_ENABLED(CONFIG_CORESIGHT_SOURCE_ETM4X) */ |