xref: /openbmc/linux/drivers/crypto/caam/debugfs.c (revision 0489929f)
1abd98754SHoria Geantă // SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
2ae1dd17dSHoria GeantA /* Copyright 2019, 2023 NXP */
3abd98754SHoria Geantă 
4abd98754SHoria Geantă #include <linux/debugfs.h>
5abd98754SHoria Geantă #include "compat.h"
6abd98754SHoria Geantă #include "debugfs.h"
7abd98754SHoria Geantă #include "regs.h"
8abd98754SHoria Geantă #include "intern.h"
9abd98754SHoria Geantă 
caam_debugfs_u64_get(void * data,u64 * val)10abd98754SHoria Geantă static int caam_debugfs_u64_get(void *data, u64 *val)
11abd98754SHoria Geantă {
12abd98754SHoria Geantă 	*val = caam64_to_cpu(*(u64 *)data);
13abd98754SHoria Geantă 	return 0;
14abd98754SHoria Geantă }
15abd98754SHoria Geantă 
caam_debugfs_u32_get(void * data,u64 * val)16abd98754SHoria Geantă static int caam_debugfs_u32_get(void *data, u64 *val)
17abd98754SHoria Geantă {
18abd98754SHoria Geantă 	*val = caam32_to_cpu(*(u32 *)data);
19abd98754SHoria Geantă 	return 0;
20abd98754SHoria Geantă }
21abd98754SHoria Geantă 
226c2ab5bcSJiapeng Chong DEFINE_DEBUGFS_ATTRIBUTE(caam_fops_u32_ro, caam_debugfs_u32_get, NULL, "%llu\n");
236c2ab5bcSJiapeng Chong DEFINE_DEBUGFS_ATTRIBUTE(caam_fops_u64_ro, caam_debugfs_u64_get, NULL, "%llu\n");
24abd98754SHoria Geantă 
25abd98754SHoria Geantă #ifdef CONFIG_CAAM_QI
26abd98754SHoria Geantă /*
27abd98754SHoria Geantă  * This is a counter for the number of times the congestion group (where all
28abd98754SHoria Geantă  * the request and response queueus are) reached congestion. Incremented
29abd98754SHoria Geantă  * each time the congestion callback is called with congested == true.
30abd98754SHoria Geantă  */
31abd98754SHoria Geantă static u64 times_congested;
32abd98754SHoria Geantă 
caam_debugfs_qi_congested(void)33abd98754SHoria Geantă void caam_debugfs_qi_congested(void)
34abd98754SHoria Geantă {
35abd98754SHoria Geantă 	times_congested++;
36abd98754SHoria Geantă }
37abd98754SHoria Geantă 
caam_debugfs_qi_init(struct caam_drv_private * ctrlpriv)38abd98754SHoria Geantă void caam_debugfs_qi_init(struct caam_drv_private *ctrlpriv)
39abd98754SHoria Geantă {
40abd98754SHoria Geantă 	debugfs_create_file("qi_congested", 0444, ctrlpriv->ctl,
41abd98754SHoria Geantă 			    &times_congested, &caam_fops_u64_ro);
42abd98754SHoria Geantă }
43abd98754SHoria Geantă #endif
44abd98754SHoria Geantă 
caam_debugfs_init(struct caam_drv_private * ctrlpriv,struct caam_perfmon __force * perfmon,struct dentry * root)45ae1dd17dSHoria GeantA void caam_debugfs_init(struct caam_drv_private *ctrlpriv,
46ae1dd17dSHoria GeantA 		       struct caam_perfmon __force *perfmon,
47ae1dd17dSHoria GeantA 		       struct dentry *root)
48abd98754SHoria Geantă {
49abd98754SHoria Geantă 	/*
50abd98754SHoria Geantă 	 * FIXME: needs better naming distinction, as some amalgamation of
51abd98754SHoria Geantă 	 * "caam" and nprop->full_name. The OF name isn't distinctive,
52abd98754SHoria Geantă 	 * but does separate instances
53abd98754SHoria Geantă 	 */
54abd98754SHoria Geantă 
55abd98754SHoria Geantă 	ctrlpriv->ctl = debugfs_create_dir("ctl", root);
56abd98754SHoria Geantă 
57abd98754SHoria Geantă 	debugfs_create_file("rq_dequeued", 0444, ctrlpriv->ctl,
58abd98754SHoria Geantă 			    &perfmon->req_dequeued, &caam_fops_u64_ro);
59abd98754SHoria Geantă 	debugfs_create_file("ob_rq_encrypted", 0444, ctrlpriv->ctl,
60abd98754SHoria Geantă 			    &perfmon->ob_enc_req, &caam_fops_u64_ro);
61abd98754SHoria Geantă 	debugfs_create_file("ib_rq_decrypted", 0444, ctrlpriv->ctl,
62abd98754SHoria Geantă 			    &perfmon->ib_dec_req, &caam_fops_u64_ro);
63abd98754SHoria Geantă 	debugfs_create_file("ob_bytes_encrypted", 0444, ctrlpriv->ctl,
64abd98754SHoria Geantă 			    &perfmon->ob_enc_bytes, &caam_fops_u64_ro);
65abd98754SHoria Geantă 	debugfs_create_file("ob_bytes_protected", 0444, ctrlpriv->ctl,
66abd98754SHoria Geantă 			    &perfmon->ob_prot_bytes, &caam_fops_u64_ro);
67abd98754SHoria Geantă 	debugfs_create_file("ib_bytes_decrypted", 0444, ctrlpriv->ctl,
68abd98754SHoria Geantă 			    &perfmon->ib_dec_bytes, &caam_fops_u64_ro);
69abd98754SHoria Geantă 	debugfs_create_file("ib_bytes_validated", 0444, ctrlpriv->ctl,
70abd98754SHoria Geantă 			    &perfmon->ib_valid_bytes, &caam_fops_u64_ro);
71abd98754SHoria Geantă 
72abd98754SHoria Geantă 	/* Controller level - global status values */
73abd98754SHoria Geantă 	debugfs_create_file("fault_addr", 0444, ctrlpriv->ctl,
74abd98754SHoria Geantă 			    &perfmon->faultaddr, &caam_fops_u32_ro);
75abd98754SHoria Geantă 	debugfs_create_file("fault_detail", 0444, ctrlpriv->ctl,
76abd98754SHoria Geantă 			    &perfmon->faultdetail, &caam_fops_u32_ro);
77abd98754SHoria Geantă 	debugfs_create_file("fault_status", 0444, ctrlpriv->ctl,
78abd98754SHoria Geantă 			    &perfmon->status, &caam_fops_u32_ro);
79abd98754SHoria Geantă 
80*0489929fSHoria GeantA 	if (ctrlpriv->optee_en)
81*0489929fSHoria GeantA 		return;
82*0489929fSHoria GeantA 
83abd98754SHoria Geantă 	/* Internal covering keys (useful in non-secure mode only) */
84abd98754SHoria Geantă 	ctrlpriv->ctl_kek_wrap.data = (__force void *)&ctrlpriv->ctrl->kek[0];
85abd98754SHoria Geantă 	ctrlpriv->ctl_kek_wrap.size = KEK_KEY_SIZE * sizeof(u32);
86abd98754SHoria Geantă 	debugfs_create_blob("kek", 0444, ctrlpriv->ctl,
87abd98754SHoria Geantă 			    &ctrlpriv->ctl_kek_wrap);
88abd98754SHoria Geantă 
89abd98754SHoria Geantă 	ctrlpriv->ctl_tkek_wrap.data = (__force void *)&ctrlpriv->ctrl->tkek[0];
90abd98754SHoria Geantă 	ctrlpriv->ctl_tkek_wrap.size = KEK_KEY_SIZE * sizeof(u32);
91abd98754SHoria Geantă 	debugfs_create_blob("tkek", 0444, ctrlpriv->ctl,
92abd98754SHoria Geantă 			    &ctrlpriv->ctl_tkek_wrap);
93abd98754SHoria Geantă 
94abd98754SHoria Geantă 	ctrlpriv->ctl_tdsk_wrap.data = (__force void *)&ctrlpriv->ctrl->tdsk[0];
95abd98754SHoria Geantă 	ctrlpriv->ctl_tdsk_wrap.size = KEK_KEY_SIZE * sizeof(u32);
96abd98754SHoria Geantă 	debugfs_create_blob("tdsk", 0444, ctrlpriv->ctl,
97abd98754SHoria Geantă 			    &ctrlpriv->ctl_tdsk_wrap);
98abd98754SHoria Geantă }
99