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