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
10static int caam_debugfs_u64_get(void *data, u64 *val)
11{
12 *val = caam64_to_cpu(val: *(u64 *)data);
13 return 0;
14}
15
16static int caam_debugfs_u32_get(void *data, u64 *val)
17{
18 *val = caam32_to_cpu(val: *(u32 *)data);
19 return 0;
20}
21
22DEFINE_DEBUGFS_ATTRIBUTE(caam_fops_u32_ro, caam_debugfs_u32_get, NULL, "%llu\n");
23DEFINE_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 */
31static u64 times_congested;
32
33void caam_debugfs_qi_congested(void)
34{
35 times_congested++;
36}
37
38void caam_debugfs_qi_init(struct caam_drv_private *ctrlpriv)
39{
40 debugfs_create_file("qi_congested", 0444, ctrlpriv->ctl,
41 &times_congested, &caam_fops_u64_ro);
42}
43#endif
44
45void 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

source code of linux/drivers/crypto/caam/debugfs.c