xref: /linux-6.15/drivers/crypto/caam/debugfs.c (revision 6c2ab5bc)
1abd98754SHoria Geantă // SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
2abd98754SHoria Geantă /* Copyright 2019 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ă 
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ă 
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ă 
22*6c2ab5bcSJiapeng Chong DEFINE_DEBUGFS_ATTRIBUTE(caam_fops_u32_ro, caam_debugfs_u32_get, NULL, "%llu\n");
23*6c2ab5bcSJiapeng 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ă 
33abd98754SHoria Geantă void caam_debugfs_qi_congested(void)
34abd98754SHoria Geantă {
35abd98754SHoria Geantă 	times_congested++;
36abd98754SHoria Geantă }
37abd98754SHoria Geantă 
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ă 
45abd98754SHoria Geantă void caam_debugfs_init(struct caam_drv_private *ctrlpriv, struct dentry *root)
46abd98754SHoria Geantă {
47abd98754SHoria Geantă 	struct caam_perfmon *perfmon;
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ă 	perfmon = (struct caam_perfmon __force *)&ctrlpriv->ctrl->perfmon;
55abd98754SHoria Geantă 
56abd98754SHoria Geantă 	ctrlpriv->ctl = debugfs_create_dir("ctl", root);
57abd98754SHoria Geantă 
58abd98754SHoria Geantă 	debugfs_create_file("rq_dequeued", 0444, ctrlpriv->ctl,
59abd98754SHoria Geantă 			    &perfmon->req_dequeued, &caam_fops_u64_ro);
60abd98754SHoria Geantă 	debugfs_create_file("ob_rq_encrypted", 0444, ctrlpriv->ctl,
61abd98754SHoria Geantă 			    &perfmon->ob_enc_req, &caam_fops_u64_ro);
62abd98754SHoria Geantă 	debugfs_create_file("ib_rq_decrypted", 0444, ctrlpriv->ctl,
63abd98754SHoria Geantă 			    &perfmon->ib_dec_req, &caam_fops_u64_ro);
64abd98754SHoria Geantă 	debugfs_create_file("ob_bytes_encrypted", 0444, ctrlpriv->ctl,
65abd98754SHoria Geantă 			    &perfmon->ob_enc_bytes, &caam_fops_u64_ro);
66abd98754SHoria Geantă 	debugfs_create_file("ob_bytes_protected", 0444, ctrlpriv->ctl,
67abd98754SHoria Geantă 			    &perfmon->ob_prot_bytes, &caam_fops_u64_ro);
68abd98754SHoria Geantă 	debugfs_create_file("ib_bytes_decrypted", 0444, ctrlpriv->ctl,
69abd98754SHoria Geantă 			    &perfmon->ib_dec_bytes, &caam_fops_u64_ro);
70abd98754SHoria Geantă 	debugfs_create_file("ib_bytes_validated", 0444, ctrlpriv->ctl,
71abd98754SHoria Geantă 			    &perfmon->ib_valid_bytes, &caam_fops_u64_ro);
72abd98754SHoria Geantă 
73abd98754SHoria Geantă 	/* Controller level - global status values */
74abd98754SHoria Geantă 	debugfs_create_file("fault_addr", 0444, ctrlpriv->ctl,
75abd98754SHoria Geantă 			    &perfmon->faultaddr, &caam_fops_u32_ro);
76abd98754SHoria Geantă 	debugfs_create_file("fault_detail", 0444, ctrlpriv->ctl,
77abd98754SHoria Geantă 			    &perfmon->faultdetail, &caam_fops_u32_ro);
78abd98754SHoria Geantă 	debugfs_create_file("fault_status", 0444, ctrlpriv->ctl,
79abd98754SHoria Geantă 			    &perfmon->status, &caam_fops_u32_ro);
80abd98754SHoria Geantă 
81abd98754SHoria Geantă 	/* Internal covering keys (useful in non-secure mode only) */
82abd98754SHoria Geantă 	ctrlpriv->ctl_kek_wrap.data = (__force void *)&ctrlpriv->ctrl->kek[0];
83abd98754SHoria Geantă 	ctrlpriv->ctl_kek_wrap.size = KEK_KEY_SIZE * sizeof(u32);
84abd98754SHoria Geantă 	debugfs_create_blob("kek", 0444, ctrlpriv->ctl,
85abd98754SHoria Geantă 			    &ctrlpriv->ctl_kek_wrap);
86abd98754SHoria Geantă 
87abd98754SHoria Geantă 	ctrlpriv->ctl_tkek_wrap.data = (__force void *)&ctrlpriv->ctrl->tkek[0];
88abd98754SHoria Geantă 	ctrlpriv->ctl_tkek_wrap.size = KEK_KEY_SIZE * sizeof(u32);
89abd98754SHoria Geantă 	debugfs_create_blob("tkek", 0444, ctrlpriv->ctl,
90abd98754SHoria Geantă 			    &ctrlpriv->ctl_tkek_wrap);
91abd98754SHoria Geantă 
92abd98754SHoria Geantă 	ctrlpriv->ctl_tdsk_wrap.data = (__force void *)&ctrlpriv->ctrl->tdsk[0];
93abd98754SHoria Geantă 	ctrlpriv->ctl_tdsk_wrap.size = KEK_KEY_SIZE * sizeof(u32);
94abd98754SHoria Geantă 	debugfs_create_blob("tdsk", 0444, ctrlpriv->ctl,
95abd98754SHoria Geantă 			    &ctrlpriv->ctl_tdsk_wrap);
96abd98754SHoria Geantă }
97