diff options
author | Tony Luck <tony.luck@intel.com> | 2012-01-17 15:10:16 -0500 |
---|---|---|
committer | Len Brown <len.brown@intel.com> | 2012-01-18 01:14:17 -0500 |
commit | c130bd6f82e5dda28b1a19741c4c2fe269713199 (patch) | |
tree | 7561dc50d4c256ca9eb19cd55569bc7867289af7 /Documentation/acpi | |
parent | 805a6af8dba5dfdd35ec35dc52ec0122400b2610 (diff) |
acpi/apei/einj: Add extensions to EINJ from rev 5.0 of acpi spec
ACPI 5.0 provides extensions to the EINJ mechanism to specify the
target for the error injection - by APICID for cpu related errors,
by address for memory related errors, and by segment/bus/device/function
for PCIe related errors. Also extensions for vendor specific error
injections.
Tested-by: Chen Gong <gong.chen@linux.intel.com>
Signed-off-by: Tony Luck <tony.luck@intel.com>
Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'Documentation/acpi')
-rw-r--r-- | Documentation/acpi/apei/einj.txt | 55 |
1 files changed, 44 insertions, 11 deletions
diff --git a/Documentation/acpi/apei/einj.txt b/Documentation/acpi/apei/einj.txt index 5cc699ba5453..e7cc36397217 100644 --- a/Documentation/acpi/apei/einj.txt +++ b/Documentation/acpi/apei/einj.txt | |||
@@ -47,20 +47,53 @@ directory apei/einj. The following files are provided. | |||
47 | 47 | ||
48 | - param1 | 48 | - param1 |
49 | This file is used to set the first error parameter value. Effect of | 49 | This file is used to set the first error parameter value. Effect of |
50 | parameter depends on error_type specified. For memory error, this is | 50 | parameter depends on error_type specified. |
51 | physical memory address. Only available if param_extension module | ||
52 | parameter is specified. | ||
53 | 51 | ||
54 | - param2 | 52 | - param2 |
55 | This file is used to set the second error parameter value. Effect of | 53 | This file is used to set the second error parameter value. Effect of |
56 | parameter depends on error_type specified. For memory error, this is | 54 | parameter depends on error_type specified. |
57 | physical memory address mask. Only available if param_extension | 55 | |
58 | module parameter is specified. | 56 | BIOS versions based in the ACPI 4.0 specification have limited options |
57 | to control where the errors are injected. Your BIOS may support an | ||
58 | extension (enabled with the param_extension=1 module parameter, or | ||
59 | boot command line einj.param_extension=1). This allows the address | ||
60 | and mask for memory injections to be specified by the param1 and | ||
61 | param2 files in apei/einj. | ||
62 | |||
63 | BIOS versions using the ACPI 5.0 specification have more control over | ||
64 | the target of the injection. For processor related errors (type 0x1, | ||
65 | 0x2 and 0x4) the APICID of the target should be provided using the | ||
66 | param1 file in apei/einj. For memory errors (type 0x8, 0x10 and 0x20) | ||
67 | the address is set using param1 with a mask in param2 (0x0 is equivalent | ||
68 | to all ones). For PCI express errors (type 0x40, 0x80 and 0x100) the | ||
69 | segment, bus, device and function are specified using param1: | ||
70 | |||
71 | 31 24 23 16 15 11 10 8 7 0 | ||
72 | +-------------------------------------------------+ | ||
73 | | segment | bus | device | function | reserved | | ||
74 | +-------------------------------------------------+ | ||
75 | |||
76 | An ACPI 5.0 BIOS may also allow vendor specific errors to be injected. | ||
77 | In this case a file named vendor will contain identifying information | ||
78 | from the BIOS that hopefully will allow an application wishing to use | ||
79 | the vendor specific extension to tell that they are running on a BIOS | ||
80 | that supports it. All vendor extensions have the 0x80000000 bit set in | ||
81 | error_type. A file vendor_flags controls the interpretation of param1 | ||
82 | and param2 (1 = PROCESSOR, 2 = MEMORY, 4 = PCI). See your BIOS vendor | ||
83 | documentation for details (and expect changes to this API if vendors | ||
84 | creativity in using this feature expands beyond our expectations). | ||
85 | |||
86 | Example: | ||
87 | # cd /sys/kernel/debug/apei/einj | ||
88 | # cat available_error_type # See which errors can be injected | ||
89 | 0x00000002 Processor Uncorrectable non-fatal | ||
90 | 0x00000008 Memory Correctable | ||
91 | 0x00000010 Memory Uncorrectable non-fatal | ||
92 | # echo 0x12345000 > param1 # Set memory address for injection | ||
93 | # echo 0xfffffffffffff000 > param2 # Mask - anywhere in this page | ||
94 | # echo 0x8 > error_type # Choose correctable memory error | ||
95 | # echo 1 > error_inject # Inject now | ||
59 | 96 | ||
60 | Injecting parameter support is a BIOS version specific extension, that | ||
61 | is, it only works on some BIOS version. If you want to use it, please | ||
62 | make sure your BIOS version has the proper support and specify | ||
63 | "param_extension=y" in module parameter. | ||
64 | 97 | ||
65 | For more information about EINJ, please refer to ACPI specification | 98 | For more information about EINJ, please refer to ACPI specification |
66 | version 4.0, section 17.5. | 99 | version 4.0, section 17.5 and ACPI 5.0, section 18.6. |