1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Copyright(C) 2023  Marvell.
4  * Based on coresight-cfg-afdo.c
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 
13 /* preload configurations and features */
14 
15 /* preload in features for ETMv4 */
16 
17 /* panic_stop feature */
18 static struct cscfg_parameter_desc gen_etrig_params[] = {
19 	{
20 		.name = "address",
21 		.value = (u64)panic,
22 	},
23 };
24 
25 static struct cscfg_regval_desc gen_etrig_regs[] = {
26 	/* resource selector */
27 	{
28 		.type = CS_CFG_REG_TYPE_RESOURCE,
29 		.offset = TRCRSCTLRn(2),
30 		.hw_info = ETM4_CFG_RES_SEL,
31 		.val32 = 0x40001,
32 	},
33 	/* single address comparator */
34 	{
35 		.type = CS_CFG_REG_TYPE_RESOURCE | CS_CFG_REG_TYPE_VAL_64BIT |
36 			CS_CFG_REG_TYPE_VAL_PARAM,
37 		.offset =  TRCACVRn(0),
38 		.val32 = 0x0,
39 	},
40 	{
41 		.type = CS_CFG_REG_TYPE_RESOURCE,
42 		.offset = TRCACATRn(0),
43 		.val64 = 0xf00,
44 	},
45 	/* Driver external output[0] with comparator out */
46 	{
47 		.type = CS_CFG_REG_TYPE_RESOURCE,
48 		.offset = TRCEVENTCTL0R,
49 		.val32 = 0x2,
50 	},
51 	/* end of regs */
52 };
53 
54 struct cscfg_feature_desc gen_etrig_etm4x = {
55 	.name = "gen_etrig",
56 	.description = "Generate external trigger on address match\n"
57 		       "parameter \'address\': address of kernel address\n",
58 	.match_flags = CS_CFG_MATCH_CLASS_SRC_ETM4,
59 	.nr_params = ARRAY_SIZE(gen_etrig_params),
60 	.params_desc = gen_etrig_params,
61 	.nr_regs = ARRAY_SIZE(gen_etrig_regs),
62 	.regs_desc = gen_etrig_regs,
63 };
64 
65 /* create a panic stop configuration */
66 
67 /* the total number of parameters in used features */
68 #define PSTOP_NR_PARAMS	ARRAY_SIZE(gen_etrig_params)
69 
70 static const char *pstop_ref_names[] = {
71 	"gen_etrig",
72 };
73 
74 struct cscfg_config_desc pstop_etm4x = {
75 	.name = "panicstop",
76 	.description = "Stop ETM on kernel panic\n",
77 	.nr_feat_refs = ARRAY_SIZE(pstop_ref_names),
78 	.feat_ref_names = pstop_ref_names,
79 	.nr_total_params = PSTOP_NR_PARAMS,
80 };
81 
82 /* end of ETM4x configurations */
83 #endif	/* IS_ENABLED(CONFIG_CORESIGHT_SOURCE_ETM4X) */
84