162306a36Sopenharmony_ci// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause) 262306a36Sopenharmony_ci/* Copyright 2019, 2023 NXP */ 362306a36Sopenharmony_ci 462306a36Sopenharmony_ci#include <linux/debugfs.h> 562306a36Sopenharmony_ci#include "compat.h" 662306a36Sopenharmony_ci#include "debugfs.h" 762306a36Sopenharmony_ci#include "regs.h" 862306a36Sopenharmony_ci#include "intern.h" 962306a36Sopenharmony_ci 1062306a36Sopenharmony_cistatic int caam_debugfs_u64_get(void *data, u64 *val) 1162306a36Sopenharmony_ci{ 1262306a36Sopenharmony_ci *val = caam64_to_cpu(*(u64 *)data); 1362306a36Sopenharmony_ci return 0; 1462306a36Sopenharmony_ci} 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_cistatic int caam_debugfs_u32_get(void *data, u64 *val) 1762306a36Sopenharmony_ci{ 1862306a36Sopenharmony_ci *val = caam32_to_cpu(*(u32 *)data); 1962306a36Sopenharmony_ci return 0; 2062306a36Sopenharmony_ci} 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_ciDEFINE_DEBUGFS_ATTRIBUTE(caam_fops_u32_ro, caam_debugfs_u32_get, NULL, "%llu\n"); 2362306a36Sopenharmony_ciDEFINE_DEBUGFS_ATTRIBUTE(caam_fops_u64_ro, caam_debugfs_u64_get, NULL, "%llu\n"); 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_ci#ifdef CONFIG_CAAM_QI 2662306a36Sopenharmony_ci/* 2762306a36Sopenharmony_ci * This is a counter for the number of times the congestion group (where all 2862306a36Sopenharmony_ci * the request and response queueus are) reached congestion. Incremented 2962306a36Sopenharmony_ci * each time the congestion callback is called with congested == true. 3062306a36Sopenharmony_ci */ 3162306a36Sopenharmony_cistatic u64 times_congested; 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_civoid caam_debugfs_qi_congested(void) 3462306a36Sopenharmony_ci{ 3562306a36Sopenharmony_ci times_congested++; 3662306a36Sopenharmony_ci} 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_civoid caam_debugfs_qi_init(struct caam_drv_private *ctrlpriv) 3962306a36Sopenharmony_ci{ 4062306a36Sopenharmony_ci debugfs_create_file("qi_congested", 0444, ctrlpriv->ctl, 4162306a36Sopenharmony_ci ×_congested, &caam_fops_u64_ro); 4262306a36Sopenharmony_ci} 4362306a36Sopenharmony_ci#endif 4462306a36Sopenharmony_ci 4562306a36Sopenharmony_civoid caam_debugfs_init(struct caam_drv_private *ctrlpriv, 4662306a36Sopenharmony_ci struct caam_perfmon __force *perfmon, 4762306a36Sopenharmony_ci struct dentry *root) 4862306a36Sopenharmony_ci{ 4962306a36Sopenharmony_ci /* 5062306a36Sopenharmony_ci * FIXME: needs better naming distinction, as some amalgamation of 5162306a36Sopenharmony_ci * "caam" and nprop->full_name. The OF name isn't distinctive, 5262306a36Sopenharmony_ci * but does separate instances 5362306a36Sopenharmony_ci */ 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_ci ctrlpriv->ctl = debugfs_create_dir("ctl", root); 5662306a36Sopenharmony_ci 5762306a36Sopenharmony_ci debugfs_create_file("rq_dequeued", 0444, ctrlpriv->ctl, 5862306a36Sopenharmony_ci &perfmon->req_dequeued, &caam_fops_u64_ro); 5962306a36Sopenharmony_ci debugfs_create_file("ob_rq_encrypted", 0444, ctrlpriv->ctl, 6062306a36Sopenharmony_ci &perfmon->ob_enc_req, &caam_fops_u64_ro); 6162306a36Sopenharmony_ci debugfs_create_file("ib_rq_decrypted", 0444, ctrlpriv->ctl, 6262306a36Sopenharmony_ci &perfmon->ib_dec_req, &caam_fops_u64_ro); 6362306a36Sopenharmony_ci debugfs_create_file("ob_bytes_encrypted", 0444, ctrlpriv->ctl, 6462306a36Sopenharmony_ci &perfmon->ob_enc_bytes, &caam_fops_u64_ro); 6562306a36Sopenharmony_ci debugfs_create_file("ob_bytes_protected", 0444, ctrlpriv->ctl, 6662306a36Sopenharmony_ci &perfmon->ob_prot_bytes, &caam_fops_u64_ro); 6762306a36Sopenharmony_ci debugfs_create_file("ib_bytes_decrypted", 0444, ctrlpriv->ctl, 6862306a36Sopenharmony_ci &perfmon->ib_dec_bytes, &caam_fops_u64_ro); 6962306a36Sopenharmony_ci debugfs_create_file("ib_bytes_validated", 0444, ctrlpriv->ctl, 7062306a36Sopenharmony_ci &perfmon->ib_valid_bytes, &caam_fops_u64_ro); 7162306a36Sopenharmony_ci 7262306a36Sopenharmony_ci /* Controller level - global status values */ 7362306a36Sopenharmony_ci debugfs_create_file("fault_addr", 0444, ctrlpriv->ctl, 7462306a36Sopenharmony_ci &perfmon->faultaddr, &caam_fops_u32_ro); 7562306a36Sopenharmony_ci debugfs_create_file("fault_detail", 0444, ctrlpriv->ctl, 7662306a36Sopenharmony_ci &perfmon->faultdetail, &caam_fops_u32_ro); 7762306a36Sopenharmony_ci debugfs_create_file("fault_status", 0444, ctrlpriv->ctl, 7862306a36Sopenharmony_ci &perfmon->status, &caam_fops_u32_ro); 7962306a36Sopenharmony_ci 8062306a36Sopenharmony_ci if (ctrlpriv->optee_en) 8162306a36Sopenharmony_ci return; 8262306a36Sopenharmony_ci 8362306a36Sopenharmony_ci /* Internal covering keys (useful in non-secure mode only) */ 8462306a36Sopenharmony_ci ctrlpriv->ctl_kek_wrap.data = (__force void *)&ctrlpriv->ctrl->kek[0]; 8562306a36Sopenharmony_ci ctrlpriv->ctl_kek_wrap.size = KEK_KEY_SIZE * sizeof(u32); 8662306a36Sopenharmony_ci debugfs_create_blob("kek", 0444, ctrlpriv->ctl, 8762306a36Sopenharmony_ci &ctrlpriv->ctl_kek_wrap); 8862306a36Sopenharmony_ci 8962306a36Sopenharmony_ci ctrlpriv->ctl_tkek_wrap.data = (__force void *)&ctrlpriv->ctrl->tkek[0]; 9062306a36Sopenharmony_ci ctrlpriv->ctl_tkek_wrap.size = KEK_KEY_SIZE * sizeof(u32); 9162306a36Sopenharmony_ci debugfs_create_blob("tkek", 0444, ctrlpriv->ctl, 9262306a36Sopenharmony_ci &ctrlpriv->ctl_tkek_wrap); 9362306a36Sopenharmony_ci 9462306a36Sopenharmony_ci ctrlpriv->ctl_tdsk_wrap.data = (__force void *)&ctrlpriv->ctrl->tdsk[0]; 9562306a36Sopenharmony_ci ctrlpriv->ctl_tdsk_wrap.size = KEK_KEY_SIZE * sizeof(u32); 9662306a36Sopenharmony_ci debugfs_create_blob("tdsk", 0444, ctrlpriv->ctl, 9762306a36Sopenharmony_ci &ctrlpriv->ctl_tdsk_wrap); 9862306a36Sopenharmony_ci} 99