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ă ×_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