x86/platform/intel/iosf: Add debugfs config option for IOSF
authorDavid E. Box <david.e.box@linux.intel.com>
Thu, 18 Sep 2014 05:13:51 +0000 (22:13 -0700)
committerIngo Molnar <mingo@kernel.org>
Fri, 19 Sep 2014 11:08:43 +0000 (13:08 +0200)
Makes the IOSF sideband available through debugfs. Allows
developers to experiment with using the sideband to provide
debug and analytical tools for units on the SoC.

Signed-off-by: David E. Box <david.e.box@linux.intel.com>
Link: http://lkml.kernel.org/r/1411017231-20807-4-git-send-email-david.e.box@linux.intel.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
arch/x86/Kconfig
arch/x86/kernel/iosf_mbi.c

index d6334f4..6354964 100644 (file)
@@ -496,6 +496,19 @@ config IOSF_MBI
 
          You should say Y if you are running a kernel on one of these SoC's.
 
+config IOSF_MBI_DEBUG
+       bool "Enable IOSF sideband access through debugfs"
+       depends on IOSF_MBI && DEBUG_FS
+       ---help---
+         Select this option to expose the IOSF sideband access registers (MCR,
+         MDR, MCRX) through debugfs to write and read register information from
+         different units on the SoC. This is most useful for obtaining device
+         state information for debug and analysis. As this is a general access
+         mechanism, users of this option would have specific knowledge of the
+         device they want to access.
+
+         If you don't require the option or are in doubt, say N.
+
 config X86_RDC321X
        bool "RDC R-321x SoC"
        depends on X86_32
index e01f741..82f8d02 100644 (file)
@@ -190,7 +190,7 @@ bool iosf_mbi_available(void)
 }
 EXPORT_SYMBOL(iosf_mbi_available);
 
-/********************** debugfs begin ****************************/
+#ifdef CONFIG_IOSF_MBI_DEBUG
 static u32     dbg_mdr;
 static u32     dbg_mcr;
 static u32     dbg_mcrx;
@@ -229,6 +229,7 @@ static int mcr_set(void *data, u64 val)
 DEFINE_SIMPLE_ATTRIBUTE(iosf_mcr_fops, mcr_get, mcr_set , "%llx\n");
 
 static struct dentry *iosf_dbg;
+
 static void iosf_sideband_debug_init(void)
 {
        struct dentry *d;
@@ -257,7 +258,20 @@ static void iosf_sideband_debug_init(void)
 cleanup:
        debugfs_remove_recursive(d);
 }
-/********************** debugfs end ****************************/
+
+static void iosf_debugfs_init(void)
+{
+       iosf_sideband_debug_init();
+}
+
+static void iosf_debugfs_remove(void)
+{
+       debugfs_remove_recursive(iosf_dbg);
+}
+#else
+static inline void iosf_debugfs_init(void) { }
+static inline void iosf_debugfs_remove(void) { }
+#endif /* CONFIG_IOSF_MBI_DEBUG */
 
 static int iosf_mbi_probe(struct pci_dev *pdev,
                          const struct pci_device_id *unused)
@@ -290,13 +304,14 @@ static struct pci_driver iosf_mbi_pci_driver = {
 
 static int __init iosf_mbi_init(void)
 {
-       iosf_sideband_debug_init();
+       iosf_debugfs_init();
+
        return pci_register_driver(&iosf_mbi_pci_driver);
 }
 
 static void __exit iosf_mbi_exit(void)
 {
-       debugfs_remove_recursive(iosf_dbg);
+       iosf_debugfs_remove();
 
        pci_unregister_driver(&iosf_mbi_pci_driver);
        if (mbi_pdev) {