1                Silicon Errata and Software Workarounds
2                =======================================
3
4It is an unfortunate fact of life that hardware is often produced with
5so-called "errata", which can cause it to deviate from the architecture
6under specific circumstances.  For hardware produced by ARM, these
7errata are broadly classified into the following categories:
8
9  Category A: A critical error without a viable workaround.
10  Category B: A significant or critical error with an acceptable
11              workaround.
12  Category C: A minor error that is not expected to occur under normal
13              operation.
14
15For more information, consult one of the "Software Developers Errata
16Notice" documents available on infocenter.arm.com (registration
17required).
18
19As far as Xen is concerned, Category B errata may require some special
20treatment in the hypervisor. For example, avoiding a particular sequence
21of code, or configuring the processor in a particular way. A less common
22situation may require similar actions in order to declassify a Category A
23erratum into a Category C erratum. These are collectively known as
24"software workarounds" and are only required in the minority of cases
25(e.g. those cases that both require a non-secure workaround *and* can
26be triggered by Xen).
27
28For software workarounds that may adversely impact systems unaffected by
29the erratum in question, a Kconfig entry is added under "ARM errata
30workarounds via the alternatives framework". These are enabled by default
31and patched in at runtime when an affected CPU is detected. Note that
32runtime patching is only supported on ARM64. For less-intrusive workarounds,
33a Kconfig option is not available and the code is structured (preferably
34with a comment) in such a way that the erratum will not be hit.
35
36This approach can make it slightly onerous to determine exactly which
37errata are worked around in an arbitrary hypervisor source tree, so this
38file acts as a registry of software workarounds in the Xen hypervisor and
39will be updated when new workarounds are committed and backported to
40stable hypervisors.
41
42| Implementor    | Component       | Erratum ID      | Kconfig                 |
43+----------------+-----------------+-----------------+-------------------------+
44| ARM            | Cortex-A15      | #766422         | N/A                     |
45| ARM            | Cortex-A53      | #827319         | ARM64_ERRATUM_827319    |
46| ARM            | Cortex-A53      | #824069         | ARM64_ERRATUM_824069    |
47| ARM            | Cortex-A53      | #819472         | ARM64_ERRATUM_819472    |
48| ARM            | Cortex-A57      | #852523         | N/A                     |
49| ARM            | Cortex-A57      | #832075         | ARM64_ERRATUM_832075    |
50| ARM            | Cortex-A57      | #834220         | ARM64_ERRATUM_834220    |
51| ARM            | Cortex-A57      | #1319537        | N/A                     |
52| ARM            | Cortex-A72      | #1319367        | N/A                     |
53| ARM            | Cortex-A76      | #1165522        | N/A                     |
54| ARM            | Neoverse-N1     | #1165522        | N/A
55| ARM            | MMU-500         | #842869         | N/A                     |
56