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