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 | ||
