mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00
84 lines
2 KiB
C
84 lines
2 KiB
C
![]() |
// 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) */
|