Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 321249bb authored by Dmitry Shmidt's avatar Dmitry Shmidt
Browse files

Merge remote-tracking branch 'common/android-4.4' into android-4.4.y-merge

Change-Id: I049d2e9d238a92d56100e8e317be6688497eb501
parents a517d900 b7c491d2
Loading
Loading
Loading
Loading
+58 −0
Original line number Diff line number Diff line
                Silicon Errata and Software Workarounds
                =======================================

Author: Will Deacon <will.deacon@arm.com>
Date  : 27 November 2015

It is an unfortunate fact of life that hardware is often produced with
so-called "errata", which can cause it to deviate from the architecture
under specific circumstances.  For hardware produced by ARM, these
errata are broadly classified into the following categories:

  Category A: A critical error without a viable workaround.
  Category B: A significant or critical error with an acceptable
              workaround.
  Category C: A minor error that is not expected to occur under normal
              operation.

For more information, consult one of the "Software Developers Errata
Notice" documents available on infocenter.arm.com (registration
required).

As far as Linux is concerned, Category B errata may require some special
treatment in the operating system. For example, avoiding a particular
sequence of code, or configuring the processor in a particular way. A
less common situation may require similar actions in order to declassify
a Category A erratum into a Category C erratum. These are collectively
known as "software workarounds" and are only required in the minority of
cases (e.g. those cases that both require a non-secure workaround *and*
can be triggered by Linux).

For software workarounds that may adversely impact systems unaffected by
the erratum in question, a Kconfig entry is added under "Kernel
Features" -> "ARM errata workarounds via the alternatives framework".
These are enabled by default and patched in at runtime when an affected
CPU is detected. For less-intrusive workarounds, a Kconfig option is not
available and the code is structured (preferably with a comment) in such
a way that the erratum will not be hit.

This approach can make it slightly onerous to determine exactly which
errata are worked around in an arbitrary kernel source tree, so this
file acts as a registry of software workarounds in the Linux Kernel and
will be updated when new workarounds are committed and backported to
stable kernels.

| Implementor    | Component       | Erratum ID      | Kconfig                 |
+----------------+-----------------+-----------------+-------------------------+
| ARM            | Cortex-A53      | #826319         | ARM64_ERRATUM_826319    |
| ARM            | Cortex-A53      | #827319         | ARM64_ERRATUM_827319    |
| ARM            | Cortex-A53      | #824069         | ARM64_ERRATUM_824069    |
| ARM            | Cortex-A53      | #819472         | ARM64_ERRATUM_819472    |
| ARM            | Cortex-A53      | #845719         | ARM64_ERRATUM_845719    |
| ARM            | Cortex-A53      | #843419         | ARM64_ERRATUM_843419    |
| ARM            | Cortex-A57      | #832075         | ARM64_ERRATUM_832075    |
| ARM            | Cortex-A57      | #852523         | N/A                     |
| ARM            | Cortex-A57      | #834220         | ARM64_ERRATUM_834220    |
|                |                 |                 |                         |
| Cavium         | ThunderX ITS    | #22375, #24313  | CAVIUM_ERRATUM_22375    |
| Cavium         | ThunderX GICv3  | #23154          | CAVIUM_ERRATUM_23154    |
+1 −1
Original line number Diff line number Diff line
@@ -9,7 +9,7 @@
    |       alpha: |  ..  |
    |         arc: | TODO |
    |         arm: |  ok  |
    |       arm64: |  ..  |
    |       arm64: |  ok  |
    |       avr32: | TODO |
    |    blackfin: | TODO |
    |         c6x: | TODO |
+1 −0
Original line number Diff line number Diff line
@@ -250,6 +250,7 @@ PMD_BIT_FUNC(mkold, &= ~PMD_SECT_AF);
PMD_BIT_FUNC(mksplitting, |= L_PMD_SECT_SPLITTING);
PMD_BIT_FUNC(mkwrite,   &= ~L_PMD_SECT_RDONLY);
PMD_BIT_FUNC(mkdirty,   |= L_PMD_SECT_DIRTY);
PMD_BIT_FUNC(mkclean,   &= ~L_PMD_SECT_DIRTY);
PMD_BIT_FUNC(mkyoung,   |= PMD_SECT_AF);

#define pmd_mkhuge(pmd)		(__pmd(pmd_val(pmd) & ~PMD_TABLE_BIT))
+1 −3
Original line number Diff line number Diff line
@@ -73,6 +73,7 @@ config ARM64
	select HAVE_FUNCTION_GRAPH_TRACER
	select HAVE_GENERIC_DMA_COHERENT
	select HAVE_HW_BREAKPOINT if PERF_EVENTS
	select HAVE_IRQ_TIME_ACCOUNTING
	select HAVE_MEMBLOCK
	select HAVE_PATA_PLATFORM
	select HAVE_PERF_EVENTS
@@ -583,9 +584,6 @@ config HW_PERF_EVENTS
config SYS_SUPPORTS_HUGETLBFS
	def_bool y

config ARCH_WANT_GENERAL_HUGETLB
	def_bool y

config ARCH_WANT_HUGE_PMD_SHARE
	def_bool y if ARM64_4K_PAGES || (ARM64_16K_PAGES && !ARM64_VA_BITS_36)

+1 −0
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ endif

KBUILD_CFLAGS	+= -mgeneral-regs-only $(lseinstr)
KBUILD_CFLAGS	+= -fno-pic
KBUILD_CFLAGS	+= -fno-asynchronous-unwind-tables
KBUILD_CFLAGS	+= $(call cc-option, -mpc-relative-literal-loads)
KBUILD_AFLAGS	+= $(lseinstr)

Loading