root/drivers/misc/cxl/debugfs.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. debugfs_io_u64_get
  2. debugfs_io_u64_set
  3. debugfs_create_io_x64
  4. cxl_debugfs_add_adapter_regs_psl9
  5. cxl_debugfs_add_adapter_regs_psl8
  6. cxl_debugfs_adapter_add
  7. cxl_debugfs_adapter_remove
  8. cxl_debugfs_add_afu_regs_psl9
  9. cxl_debugfs_add_afu_regs_psl8
  10. cxl_debugfs_afu_add
  11. cxl_debugfs_afu_remove
  12. cxl_debugfs_init
  13. cxl_debugfs_exit

   1 // SPDX-License-Identifier: GPL-2.0-or-later
   2 /*
   3  * Copyright 2014 IBM Corp.
   4  */
   5 
   6 #include <linux/debugfs.h>
   7 #include <linux/kernel.h>
   8 #include <linux/slab.h>
   9 
  10 #include "cxl.h"
  11 
  12 static struct dentry *cxl_debugfs;
  13 
  14 /* Helpers to export CXL mmaped IO registers via debugfs */
  15 static int debugfs_io_u64_get(void *data, u64 *val)
  16 {
  17         *val = in_be64((u64 __iomem *)data);
  18         return 0;
  19 }
  20 
  21 static int debugfs_io_u64_set(void *data, u64 val)
  22 {
  23         out_be64((u64 __iomem *)data, val);
  24         return 0;
  25 }
  26 DEFINE_DEBUGFS_ATTRIBUTE(fops_io_x64, debugfs_io_u64_get, debugfs_io_u64_set,
  27                          "0x%016llx\n");
  28 
  29 static void debugfs_create_io_x64(const char *name, umode_t mode,
  30                                   struct dentry *parent, u64 __iomem *value)
  31 {
  32         debugfs_create_file_unsafe(name, mode, parent, (void __force *)value,
  33                                    &fops_io_x64);
  34 }
  35 
  36 void cxl_debugfs_add_adapter_regs_psl9(struct cxl *adapter, struct dentry *dir)
  37 {
  38         debugfs_create_io_x64("fir1", S_IRUSR, dir, _cxl_p1_addr(adapter, CXL_PSL9_FIR1));
  39         debugfs_create_io_x64("fir_mask", 0400, dir,
  40                               _cxl_p1_addr(adapter, CXL_PSL9_FIR_MASK));
  41         debugfs_create_io_x64("fir_cntl", S_IRUSR, dir, _cxl_p1_addr(adapter, CXL_PSL9_FIR_CNTL));
  42         debugfs_create_io_x64("trace", S_IRUSR | S_IWUSR, dir, _cxl_p1_addr(adapter, CXL_PSL9_TRACECFG));
  43         debugfs_create_io_x64("debug", 0600, dir,
  44                               _cxl_p1_addr(adapter, CXL_PSL9_DEBUG));
  45         debugfs_create_io_x64("xsl-debug", 0600, dir,
  46                               _cxl_p1_addr(adapter, CXL_XSL9_DBG));
  47 }
  48 
  49 void cxl_debugfs_add_adapter_regs_psl8(struct cxl *adapter, struct dentry *dir)
  50 {
  51         debugfs_create_io_x64("fir1", S_IRUSR, dir, _cxl_p1_addr(adapter, CXL_PSL_FIR1));
  52         debugfs_create_io_x64("fir2", S_IRUSR, dir, _cxl_p1_addr(adapter, CXL_PSL_FIR2));
  53         debugfs_create_io_x64("fir_cntl", S_IRUSR, dir, _cxl_p1_addr(adapter, CXL_PSL_FIR_CNTL));
  54         debugfs_create_io_x64("trace", S_IRUSR | S_IWUSR, dir, _cxl_p1_addr(adapter, CXL_PSL_TRACE));
  55 }
  56 
  57 void cxl_debugfs_adapter_add(struct cxl *adapter)
  58 {
  59         struct dentry *dir;
  60         char buf[32];
  61 
  62         if (!cxl_debugfs)
  63                 return;
  64 
  65         snprintf(buf, 32, "card%i", adapter->adapter_num);
  66         dir = debugfs_create_dir(buf, cxl_debugfs);
  67         adapter->debugfs = dir;
  68 
  69         debugfs_create_io_x64("err_ivte", S_IRUSR, dir, _cxl_p1_addr(adapter, CXL_PSL_ErrIVTE));
  70 
  71         if (adapter->native->sl_ops->debugfs_add_adapter_regs)
  72                 adapter->native->sl_ops->debugfs_add_adapter_regs(adapter, dir);
  73 }
  74 
  75 void cxl_debugfs_adapter_remove(struct cxl *adapter)
  76 {
  77         debugfs_remove_recursive(adapter->debugfs);
  78 }
  79 
  80 void cxl_debugfs_add_afu_regs_psl9(struct cxl_afu *afu, struct dentry *dir)
  81 {
  82         debugfs_create_io_x64("serr", S_IRUSR, dir, _cxl_p1n_addr(afu, CXL_PSL_SERR_An));
  83 }
  84 
  85 void cxl_debugfs_add_afu_regs_psl8(struct cxl_afu *afu, struct dentry *dir)
  86 {
  87         debugfs_create_io_x64("sstp0", S_IRUSR, dir, _cxl_p2n_addr(afu, CXL_SSTP0_An));
  88         debugfs_create_io_x64("sstp1", S_IRUSR, dir, _cxl_p2n_addr(afu, CXL_SSTP1_An));
  89 
  90         debugfs_create_io_x64("fir", S_IRUSR, dir, _cxl_p1n_addr(afu, CXL_PSL_FIR_SLICE_An));
  91         debugfs_create_io_x64("serr", S_IRUSR, dir, _cxl_p1n_addr(afu, CXL_PSL_SERR_An));
  92         debugfs_create_io_x64("afu_debug", S_IRUSR, dir, _cxl_p1n_addr(afu, CXL_AFU_DEBUG_An));
  93         debugfs_create_io_x64("trace", S_IRUSR | S_IWUSR, dir, _cxl_p1n_addr(afu, CXL_PSL_SLICE_TRACE));
  94 }
  95 
  96 void cxl_debugfs_afu_add(struct cxl_afu *afu)
  97 {
  98         struct dentry *dir;
  99         char buf[32];
 100 
 101         if (!afu->adapter->debugfs)
 102                 return;
 103 
 104         snprintf(buf, 32, "psl%i.%i", afu->adapter->adapter_num, afu->slice);
 105         dir = debugfs_create_dir(buf, afu->adapter->debugfs);
 106         afu->debugfs = dir;
 107 
 108         debugfs_create_io_x64("sr",         S_IRUSR, dir, _cxl_p1n_addr(afu, CXL_PSL_SR_An));
 109         debugfs_create_io_x64("dsisr",      S_IRUSR, dir, _cxl_p2n_addr(afu, CXL_PSL_DSISR_An));
 110         debugfs_create_io_x64("dar",        S_IRUSR, dir, _cxl_p2n_addr(afu, CXL_PSL_DAR_An));
 111 
 112         debugfs_create_io_x64("err_status", S_IRUSR, dir, _cxl_p2n_addr(afu, CXL_PSL_ErrStat_An));
 113 
 114         if (afu->adapter->native->sl_ops->debugfs_add_afu_regs)
 115                 afu->adapter->native->sl_ops->debugfs_add_afu_regs(afu, dir);
 116 }
 117 
 118 void cxl_debugfs_afu_remove(struct cxl_afu *afu)
 119 {
 120         debugfs_remove_recursive(afu->debugfs);
 121 }
 122 
 123 void __init cxl_debugfs_init(void)
 124 {
 125         if (!cpu_has_feature(CPU_FTR_HVMODE))
 126                 return;
 127 
 128         cxl_debugfs = debugfs_create_dir("cxl", NULL);
 129 }
 130 
 131 void cxl_debugfs_exit(void)
 132 {
 133         debugfs_remove_recursive(cxl_debugfs);
 134 }

/* [<][>][^][v][top][bottom][index][help] */