diff options
author | Gavin Shan <shangw@linux.vnet.ibm.com> | 2013-06-20 06:13:26 -0400 |
---|---|---|
committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2013-06-21 02:01:52 -0400 |
commit | 8998897b8f966c9036307b5130494d4bf1e6cb18 (patch) | |
tree | 3347a4b4e98fc85513f55c0829f943800becc7de | |
parent | 37c367f2792f899528b5bf201a4bd6131f8b75b6 (diff) |
powerpc/eeh: Debugfs for error injection
The patch creates debugfs entries (powerpc/PCIxxxx/err_injct) for
injecting EEH errors for testing purpose.
Signed-off-by: Gavin Shan <shangw@linux.vnet.ibm.com>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
-rw-r--r-- | arch/powerpc/platforms/powernv/eeh-ioda.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/arch/powerpc/platforms/powernv/eeh-ioda.c b/arch/powerpc/platforms/powernv/eeh-ioda.c index 2b7689ed5d18..84f3036511cb 100644 --- a/arch/powerpc/platforms/powernv/eeh-ioda.c +++ b/arch/powerpc/platforms/powernv/eeh-ioda.c | |||
@@ -12,6 +12,7 @@ | |||
12 | */ | 12 | */ |
13 | 13 | ||
14 | #include <linux/bootmem.h> | 14 | #include <linux/bootmem.h> |
15 | #include <linux/debugfs.h> | ||
15 | #include <linux/delay.h> | 16 | #include <linux/delay.h> |
16 | #include <linux/init.h> | 17 | #include <linux/init.h> |
17 | #include <linux/io.h> | 18 | #include <linux/io.h> |
@@ -64,6 +65,29 @@ static struct notifier_block ioda_eeh_nb = { | |||
64 | .priority = 0 | 65 | .priority = 0 |
65 | }; | 66 | }; |
66 | 67 | ||
68 | #ifdef CONFIG_DEBUG_FS | ||
69 | static int ioda_eeh_dbgfs_set(void *data, u64 val) | ||
70 | { | ||
71 | struct pci_controller *hose = data; | ||
72 | struct pnv_phb *phb = hose->private_data; | ||
73 | |||
74 | out_be64(phb->regs + 0xD10, val); | ||
75 | return 0; | ||
76 | } | ||
77 | |||
78 | static int ioda_eeh_dbgfs_get(void *data, u64 *val) | ||
79 | { | ||
80 | struct pci_controller *hose = data; | ||
81 | struct pnv_phb *phb = hose->private_data; | ||
82 | |||
83 | *val = in_be64(phb->regs + 0xD10); | ||
84 | return 0; | ||
85 | } | ||
86 | |||
87 | DEFINE_SIMPLE_ATTRIBUTE(ioda_eeh_dbgfs_ops, ioda_eeh_dbgfs_get, | ||
88 | ioda_eeh_dbgfs_set, "0x%llx\n"); | ||
89 | #endif /* CONFIG_DEBUG_FS */ | ||
90 | |||
67 | /** | 91 | /** |
68 | * ioda_eeh_post_init - Chip dependent post initialization | 92 | * ioda_eeh_post_init - Chip dependent post initialization |
69 | * @hose: PCI controller | 93 | * @hose: PCI controller |
@@ -101,6 +125,13 @@ static int ioda_eeh_post_init(struct pci_controller *hose) | |||
101 | } | 125 | } |
102 | } | 126 | } |
103 | 127 | ||
128 | #ifdef CONFIG_DEBUG_FS | ||
129 | if (phb->dbgfs) | ||
130 | debugfs_create_file("err_injct", 0600, | ||
131 | phb->dbgfs, hose, | ||
132 | &ioda_eeh_dbgfs_ops); | ||
133 | #endif | ||
134 | |||
104 | phb->eeh_enabled = 1; | 135 | phb->eeh_enabled = 1; |
105 | } | 136 | } |
106 | 137 | ||