18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause) 28c2ecf20Sopenharmony_ci/* Copyright 2019 NXP */ 38c2ecf20Sopenharmony_ci 48c2ecf20Sopenharmony_ci#include <linux/debugfs.h> 58c2ecf20Sopenharmony_ci#include "compat.h" 68c2ecf20Sopenharmony_ci#include "debugfs.h" 78c2ecf20Sopenharmony_ci#include "regs.h" 88c2ecf20Sopenharmony_ci#include "intern.h" 98c2ecf20Sopenharmony_ci 108c2ecf20Sopenharmony_cistatic int caam_debugfs_u64_get(void *data, u64 *val) 118c2ecf20Sopenharmony_ci{ 128c2ecf20Sopenharmony_ci *val = caam64_to_cpu(*(u64 *)data); 138c2ecf20Sopenharmony_ci return 0; 148c2ecf20Sopenharmony_ci} 158c2ecf20Sopenharmony_ci 168c2ecf20Sopenharmony_cistatic int caam_debugfs_u32_get(void *data, u64 *val) 178c2ecf20Sopenharmony_ci{ 188c2ecf20Sopenharmony_ci *val = caam32_to_cpu(*(u32 *)data); 198c2ecf20Sopenharmony_ci return 0; 208c2ecf20Sopenharmony_ci} 218c2ecf20Sopenharmony_ci 228c2ecf20Sopenharmony_ciDEFINE_SIMPLE_ATTRIBUTE(caam_fops_u32_ro, caam_debugfs_u32_get, NULL, "%llu\n"); 238c2ecf20Sopenharmony_ciDEFINE_SIMPLE_ATTRIBUTE(caam_fops_u64_ro, caam_debugfs_u64_get, NULL, "%llu\n"); 248c2ecf20Sopenharmony_ci 258c2ecf20Sopenharmony_ci#ifdef CONFIG_CAAM_QI 268c2ecf20Sopenharmony_ci/* 278c2ecf20Sopenharmony_ci * This is a counter for the number of times the congestion group (where all 288c2ecf20Sopenharmony_ci * the request and response queueus are) reached congestion. Incremented 298c2ecf20Sopenharmony_ci * each time the congestion callback is called with congested == true. 308c2ecf20Sopenharmony_ci */ 318c2ecf20Sopenharmony_cistatic u64 times_congested; 328c2ecf20Sopenharmony_ci 338c2ecf20Sopenharmony_civoid caam_debugfs_qi_congested(void) 348c2ecf20Sopenharmony_ci{ 358c2ecf20Sopenharmony_ci times_congested++; 368c2ecf20Sopenharmony_ci} 378c2ecf20Sopenharmony_ci 388c2ecf20Sopenharmony_civoid caam_debugfs_qi_init(struct caam_drv_private *ctrlpriv) 398c2ecf20Sopenharmony_ci{ 408c2ecf20Sopenharmony_ci debugfs_create_file("qi_congested", 0444, ctrlpriv->ctl, 418c2ecf20Sopenharmony_ci ×_congested, &caam_fops_u64_ro); 428c2ecf20Sopenharmony_ci} 438c2ecf20Sopenharmony_ci#endif 448c2ecf20Sopenharmony_ci 458c2ecf20Sopenharmony_civoid caam_debugfs_init(struct caam_drv_private *ctrlpriv, struct dentry *root) 468c2ecf20Sopenharmony_ci{ 478c2ecf20Sopenharmony_ci struct caam_perfmon *perfmon; 488c2ecf20Sopenharmony_ci 498c2ecf20Sopenharmony_ci /* 508c2ecf20Sopenharmony_ci * FIXME: needs better naming distinction, as some amalgamation of 518c2ecf20Sopenharmony_ci * "caam" and nprop->full_name. The OF name isn't distinctive, 528c2ecf20Sopenharmony_ci * but does separate instances 538c2ecf20Sopenharmony_ci */ 548c2ecf20Sopenharmony_ci perfmon = (struct caam_perfmon __force *)&ctrlpriv->ctrl->perfmon; 558c2ecf20Sopenharmony_ci 568c2ecf20Sopenharmony_ci ctrlpriv->ctl = debugfs_create_dir("ctl", root); 578c2ecf20Sopenharmony_ci 588c2ecf20Sopenharmony_ci debugfs_create_file("rq_dequeued", 0444, ctrlpriv->ctl, 598c2ecf20Sopenharmony_ci &perfmon->req_dequeued, &caam_fops_u64_ro); 608c2ecf20Sopenharmony_ci debugfs_create_file("ob_rq_encrypted", 0444, ctrlpriv->ctl, 618c2ecf20Sopenharmony_ci &perfmon->ob_enc_req, &caam_fops_u64_ro); 628c2ecf20Sopenharmony_ci debugfs_create_file("ib_rq_decrypted", 0444, ctrlpriv->ctl, 638c2ecf20Sopenharmony_ci &perfmon->ib_dec_req, &caam_fops_u64_ro); 648c2ecf20Sopenharmony_ci debugfs_create_file("ob_bytes_encrypted", 0444, ctrlpriv->ctl, 658c2ecf20Sopenharmony_ci &perfmon->ob_enc_bytes, &caam_fops_u64_ro); 668c2ecf20Sopenharmony_ci debugfs_create_file("ob_bytes_protected", 0444, ctrlpriv->ctl, 678c2ecf20Sopenharmony_ci &perfmon->ob_prot_bytes, &caam_fops_u64_ro); 688c2ecf20Sopenharmony_ci debugfs_create_file("ib_bytes_decrypted", 0444, ctrlpriv->ctl, 698c2ecf20Sopenharmony_ci &perfmon->ib_dec_bytes, &caam_fops_u64_ro); 708c2ecf20Sopenharmony_ci debugfs_create_file("ib_bytes_validated", 0444, ctrlpriv->ctl, 718c2ecf20Sopenharmony_ci &perfmon->ib_valid_bytes, &caam_fops_u64_ro); 728c2ecf20Sopenharmony_ci 738c2ecf20Sopenharmony_ci /* Controller level - global status values */ 748c2ecf20Sopenharmony_ci debugfs_create_file("fault_addr", 0444, ctrlpriv->ctl, 758c2ecf20Sopenharmony_ci &perfmon->faultaddr, &caam_fops_u32_ro); 768c2ecf20Sopenharmony_ci debugfs_create_file("fault_detail", 0444, ctrlpriv->ctl, 778c2ecf20Sopenharmony_ci &perfmon->faultdetail, &caam_fops_u32_ro); 788c2ecf20Sopenharmony_ci debugfs_create_file("fault_status", 0444, ctrlpriv->ctl, 798c2ecf20Sopenharmony_ci &perfmon->status, &caam_fops_u32_ro); 808c2ecf20Sopenharmony_ci 818c2ecf20Sopenharmony_ci /* Internal covering keys (useful in non-secure mode only) */ 828c2ecf20Sopenharmony_ci ctrlpriv->ctl_kek_wrap.data = (__force void *)&ctrlpriv->ctrl->kek[0]; 838c2ecf20Sopenharmony_ci ctrlpriv->ctl_kek_wrap.size = KEK_KEY_SIZE * sizeof(u32); 848c2ecf20Sopenharmony_ci debugfs_create_blob("kek", 0444, ctrlpriv->ctl, 858c2ecf20Sopenharmony_ci &ctrlpriv->ctl_kek_wrap); 868c2ecf20Sopenharmony_ci 878c2ecf20Sopenharmony_ci ctrlpriv->ctl_tkek_wrap.data = (__force void *)&ctrlpriv->ctrl->tkek[0]; 888c2ecf20Sopenharmony_ci ctrlpriv->ctl_tkek_wrap.size = KEK_KEY_SIZE * sizeof(u32); 898c2ecf20Sopenharmony_ci debugfs_create_blob("tkek", 0444, ctrlpriv->ctl, 908c2ecf20Sopenharmony_ci &ctrlpriv->ctl_tkek_wrap); 918c2ecf20Sopenharmony_ci 928c2ecf20Sopenharmony_ci ctrlpriv->ctl_tdsk_wrap.data = (__force void *)&ctrlpriv->ctrl->tdsk[0]; 938c2ecf20Sopenharmony_ci ctrlpriv->ctl_tdsk_wrap.size = KEK_KEY_SIZE * sizeof(u32); 948c2ecf20Sopenharmony_ci debugfs_create_blob("tdsk", 0444, ctrlpriv->ctl, 958c2ecf20Sopenharmony_ci &ctrlpriv->ctl_tdsk_wrap); 968c2ecf20Sopenharmony_ci} 97