summaryrefslogtreecommitdiff
path: root/docs/cpu-specific-build-macros.rst
diff options
context:
space:
mode:
authorPaul Beesley <paul.beesley@arm.com>2019-02-11 17:54:45 +0000
committerPaul Beesley <paul.beesley@arm.com>2019-05-21 15:05:56 +0100
commit40d553cfde38d4f68449c62967cd1ce0d6478750 (patch)
tree1fafd4701066cdf0e5fb15aee2d842279a67b611 /docs/cpu-specific-build-macros.rst
parent12b67439e93a78a4b756e987e1bd1b6e22cc4bf8 (diff)
doc: Move documents into subdirectories
This change creates the following directories under docs/ in order to provide a grouping for the content: - components - design - getting_started - perf - process In each of these directories an index.rst file is created and this serves as an index / landing page for each of the groups when the pages are compiled. Proper layout of the top-level table of contents relies on this directory/index structure. Without this patch it is possible to build the documents correctly with Sphinx but the output looks messy because there is no overall hierarchy. Change-Id: I3c9f4443ec98571a56a6edf775f2c8d74d7f429f Signed-off-by: Paul Beesley <paul.beesley@arm.com>
Diffstat (limited to 'docs/cpu-specific-build-macros.rst')
-rw-r--r--docs/cpu-specific-build-macros.rst299
1 files changed, 0 insertions, 299 deletions
diff --git a/docs/cpu-specific-build-macros.rst b/docs/cpu-specific-build-macros.rst
deleted file mode 100644
index 493e07e9..00000000
--- a/docs/cpu-specific-build-macros.rst
+++ /dev/null
@@ -1,299 +0,0 @@
-Arm CPU Specific Build Macros
-=============================
-
-
-.. section-numbering::
- :suffix: .
-
-.. contents::
-
-This document describes the various build options present in the CPU specific
-operations framework to enable errata workarounds and to enable optimizations
-for a specific CPU on a platform.
-
-Security Vulnerability Workarounds
-----------------------------------
-
-TF-A exports a series of build flags which control which security
-vulnerability workarounds should be applied at runtime.
-
-- ``WORKAROUND_CVE_2017_5715``: Enables the security workaround for
- `CVE-2017-5715`_. This flag can be set to 0 by the platform if none
- of the PEs in the system need the workaround. Setting this flag to 0 provides
- no performance benefit for non-affected platforms, it just helps to comply
- with the recommendation in the spec regarding workaround discovery.
- Defaults to 1.
-
-- ``WORKAROUND_CVE_2018_3639``: Enables the security workaround for
- `CVE-2018-3639`_. Defaults to 1. The TF-A project recommends to keep
- the default value of 1 even on platforms that are unaffected by
- CVE-2018-3639, in order to comply with the recommendation in the spec
- regarding workaround discovery.
-
-- ``DYNAMIC_WORKAROUND_CVE_2018_3639``: Enables dynamic mitigation for
- `CVE-2018-3639`_. This build option should be set to 1 if the target
- platform contains at least 1 CPU that requires dynamic mitigation.
- Defaults to 0.
-
-CPU Errata Workarounds
-----------------------
-
-TF-A exports a series of build flags which control the errata workarounds that
-are applied to each CPU by the reset handler. The errata details can be found
-in the CPU specific errata documents published by Arm:
-
-- `Cortex-A53 MPCore Software Developers Errata Notice`_
-- `Cortex-A57 MPCore Software Developers Errata Notice`_
-- `Cortex-A72 MPCore Software Developers Errata Notice`_
-
-The errata workarounds are implemented for a particular revision or a set of
-processor revisions. This is checked by the reset handler at runtime. Each
-errata workaround is identified by its ``ID`` as specified in the processor's
-errata notice document. The format of the define used to enable/disable the
-errata workaround is ``ERRATA_<Processor name>_<ID>``, where the ``Processor name``
-is for example ``A57`` for the ``Cortex_A57`` CPU.
-
-Refer to the section *CPU errata status reporting* in
-`Firmware Design guide`_ for information on how to write errata workaround
-functions.
-
-All workarounds are disabled by default. The platform is responsible for
-enabling these workarounds according to its requirement by defining the
-errata workaround build flags in the platform specific makefile. In case
-these workarounds are enabled for the wrong CPU revision then the errata
-workaround is not applied. In the DEBUG build, this is indicated by
-printing a warning to the crash console.
-
-In the current implementation, a platform which has more than 1 variant
-with different revisions of a processor has no runtime mechanism available
-for it to specify which errata workarounds should be enabled or not.
-
-The value of the build flags is 0 by default, that is, disabled. A value of 1
-will enable it.
-
-For Cortex-A9, the following errata build flags are defined :
-
-- ``ERRATA_A9_794073``: This applies errata 794073 workaround to Cortex-A9
- CPU. This needs to be enabled for all revisions of the CPU.
-
-For Cortex-A15, the following errata build flags are defined :
-
-- ``ERRATA_A15_816470``: This applies errata 816470 workaround to Cortex-A15
- CPU. This needs to be enabled only for revision >= r3p0 of the CPU.
-
-- ``ERRATA_A15_827671``: This applies errata 827671 workaround to Cortex-A15
- CPU. This needs to be enabled only for revision >= r3p0 of the CPU.
-
-For Cortex-A17, the following errata build flags are defined :
-
-- ``ERRATA_A17_852421``: This applies errata 852421 workaround to Cortex-A17
- CPU. This needs to be enabled only for revision <= r1p2 of the CPU.
-
-- ``ERRATA_A17_852423``: This applies errata 852423 workaround to Cortex-A17
- CPU. This needs to be enabled only for revision <= r1p2 of the CPU.
-
-For Cortex-A35, the following errata build flags are defined :
-
-- ``ERRATA_A35_855472``: This applies errata 855472 workaround to Cortex-A35
- CPUs. This needs to be enabled only for revision r0p0 of Cortex-A35.
-
-For Cortex-A53, the following errata build flags are defined :
-
-- ``ERRATA_A53_819472``: This applies errata 819472 workaround to all
- CPUs. This needs to be enabled only for revision <= r0p1 of Cortex-A53.
-
-- ``ERRATA_A53_824069``: This applies errata 824069 workaround to all
- CPUs. This needs to be enabled only for revision <= r0p2 of Cortex-A53.
-
-- ``ERRATA_A53_826319``: This applies errata 826319 workaround to Cortex-A53
- CPU. This needs to be enabled only for revision <= r0p2 of the CPU.
-
-- ``ERRATA_A53_827319``: This applies errata 827319 workaround to all
- CPUs. This needs to be enabled only for revision <= r0p2 of Cortex-A53.
-
-- ``ERRATA_A53_835769``: This applies erratum 835769 workaround at compile and
- link time to Cortex-A53 CPU. This needs to be enabled for some variants of
- revision <= r0p4. This workaround can lead the linker to create ``*.stub``
- sections.
-
-- ``ERRATA_A53_836870``: This applies errata 836870 workaround to Cortex-A53
- CPU. This needs to be enabled only for revision <= r0p3 of the CPU. From
- r0p4 and onwards, this errata is enabled by default in hardware.
-
-- ``ERRATA_A53_843419``: This applies erratum 843419 workaround at link time
- to Cortex-A53 CPU. This needs to be enabled for some variants of revision
- <= r0p4. This workaround can lead the linker to emit ``*.stub`` sections
- which are 4kB aligned.
-
-- ``ERRATA_A53_855873``: This applies errata 855873 workaround to Cortex-A53
- CPUs. Though the erratum is present in every revision of the CPU,
- this workaround is only applied to CPUs from r0p3 onwards, which feature
- a chicken bit in CPUACTLR_EL1 to enable a hardware workaround.
- Earlier revisions of the CPU have other errata which require the same
- workaround in software, so they should be covered anyway.
-
-For Cortex-A55, the following errata build flags are defined :
-
-- ``ERRATA_A55_768277``: This applies errata 768277 workaround to Cortex-A55
- CPU. This needs to be enabled only for revision r0p0 of the CPU.
-
-- ``ERRATA_A55_778703``: This applies errata 778703 workaround to Cortex-A55
- CPU. This needs to be enabled only for revision r0p0 of the CPU.
-
-- ``ERRATA_A55_798797``: This applies errata 798797 workaround to Cortex-A55
- CPU. This needs to be enabled only for revision r0p0 of the CPU.
-
-- ``ERRATA_A55_846532``: This applies errata 846532 workaround to Cortex-A55
- CPU. This needs to be enabled only for revision <= r0p1 of the CPU.
-
-- ``ERRATA_A55_903758``: This applies errata 903758 workaround to Cortex-A55
- CPU. This needs to be enabled only for revision <= r0p1 of the CPU.
-
-For Cortex-A57, the following errata build flags are defined :
-
-- ``ERRATA_A57_806969``: This applies errata 806969 workaround to Cortex-A57
- CPU. This needs to be enabled only for revision r0p0 of the CPU.
-
-- ``ERRATA_A57_813419``: This applies errata 813419 workaround to Cortex-A57
- CPU. This needs to be enabled only for revision r0p0 of the CPU.
-
-- ``ERRATA_A57_813420``: This applies errata 813420 workaround to Cortex-A57
- CPU. This needs to be enabled only for revision r0p0 of the CPU.
-
-- ``ERRATA_A57_814670``: This applies errata 814670 workaround to Cortex-A57
- CPU. This needs to be enabled only for revision r0p0 of the CPU.
-
-- ``ERRATA_A57_817169``: This applies errata 817169 workaround to Cortex-A57
- CPU. This needs to be enabled only for revision <= r0p1 of the CPU.
-
-- ``ERRATA_A57_826974``: This applies errata 826974 workaround to Cortex-A57
- CPU. This needs to be enabled only for revision <= r1p1 of the CPU.
-
-- ``ERRATA_A57_826977``: This applies errata 826977 workaround to Cortex-A57
- CPU. This needs to be enabled only for revision <= r1p1 of the CPU.
-
-- ``ERRATA_A57_828024``: This applies errata 828024 workaround to Cortex-A57
- CPU. This needs to be enabled only for revision <= r1p1 of the CPU.
-
-- ``ERRATA_A57_829520``: This applies errata 829520 workaround to Cortex-A57
- CPU. This needs to be enabled only for revision <= r1p2 of the CPU.
-
-- ``ERRATA_A57_833471``: This applies errata 833471 workaround to Cortex-A57
- CPU. This needs to be enabled only for revision <= r1p2 of the CPU.
-
-- ``ERRATA_A57_859972``: This applies errata 859972 workaround to Cortex-A57
- CPU. This needs to be enabled only for revision <= r1p3 of the CPU.
-
-
-For Cortex-A72, the following errata build flags are defined :
-
-- ``ERRATA_A72_859971``: This applies errata 859971 workaround to Cortex-A72
- CPU. This needs to be enabled only for revision <= r0p3 of the CPU.
-
-For Cortex-A73, the following errata build flags are defined :
-
-- ``ERRATA_A73_852427``: This applies errata 852427 workaround to Cortex-A73
- CPU. This needs to be enabled only for revision r0p0 of the CPU.
-
-- ``ERRATA_A73_855423``: This applies errata 855423 workaround to Cortex-A73
- CPU. This needs to be enabled only for revision <= r0p1 of the CPU.
-
-For Cortex-A75, the following errata build flags are defined :
-
-- ``ERRATA_A75_764081``: This applies errata 764081 workaround to Cortex-A75
- CPU. This needs to be enabled only for revision r0p0 of the CPU.
-
-- ``ERRATA_A75_790748``: This applies errata 790748 workaround to Cortex-A75
- CPU. This needs to be enabled only for revision r0p0 of the CPU.
-
-For Cortex-A76, the following errata build flags are defined :
-
-- ``ERRATA_A76_1073348``: This applies errata 1073348 workaround to Cortex-A76
- CPU. This needs to be enabled only for revision <= r1p0 of the CPU.
-
-- ``ERRATA_A76_1130799``: This applies errata 1130799 workaround to Cortex-A76
- CPU. This needs to be enabled only for revision <= r2p0 of the CPU.
-
-- ``ERRATA_A76_1220197``: This applies errata 1220197 workaround to Cortex-A76
- CPU. This needs to be enabled only for revision <= r2p0 of the CPU.
-
-- ``ERRATA_A76_1257314``: This applies errata 1257314 workaround to Cortex-A76
- CPU. This needs to be enabled only for revision <= r3p0 of the CPU.
-
-- ``ERRATA_A76_1262606``: This applies errata 1262606 workaround to Cortex-A76
- CPU. This needs to be enabled only for revision <= r3p0 of the CPU.
-
-- ``ERRATA_A76_1262888``: This applies errata 1262888 workaround to Cortex-A76
- CPU. This needs to be enabled only for revision <= r3p0 of the CPU.
-
-- ``ERRATA_A76_1275112``: This applies errata 1275112 workaround to Cortex-A76
- CPU. This needs to be enabled only for revision <= r3p0 of the CPU.
-
-DSU Errata Workarounds
-----------------------
-
-Similar to CPU errata, TF-A also implements workarounds for DSU (DynamIQ
-Shared Unit) errata. The DSU errata details can be found in the respective Arm
-documentation:
-
-- `Arm DSU Software Developers Errata Notice`_.
-
-Each erratum is identified by an ``ID``, as defined in the DSU errata notice
-document. Thus, the build flags which enable/disable the errata workarounds
-have the format ``ERRATA_DSU_<ID>``. The implementation and application logic
-of DSU errata workarounds are similar to `CPU errata workarounds`_.
-
-For DSU errata, the following build flags are defined:
-
-- ``ERRATA_DSU_798953``: This applies errata 798953 workaround for the
- affected DSU configurations. This errata applies only for those DSUs that
- revision is r0p0 (on r0p1 it is fixed). However, please note that this
- workaround results in increased DSU power consumption on idle.
-
-- ``ERRATA_DSU_936184``: This applies errata 936184 workaround for the
- affected DSU configurations. This errata applies only for those DSUs that
- contain the ACP interface **and** the DSU revision is older than r2p0 (on
- r2p0 it is fixed). However, please note that this workaround results in
- increased DSU power consumption on idle.
-
-CPU Specific optimizations
---------------------------
-
-This section describes some of the optimizations allowed by the CPU micro
-architecture that can be enabled by the platform as desired.
-
-- ``SKIP_A57_L1_FLUSH_PWR_DWN``: This flag enables an optimization in the
- Cortex-A57 cluster power down sequence by not flushing the Level 1 data
- cache. The L1 data cache and the L2 unified cache are inclusive. A flush
- of the L2 by set/way flushes any dirty lines from the L1 as well. This
- is a known safe deviation from the Cortex-A57 TRM defined power down
- sequence. Each Cortex-A57 based platform must make its own decision on
- whether to use the optimization.
-
-- ``A53_DISABLE_NON_TEMPORAL_HINT``: This flag disables the cache non-temporal
- hint. The LDNP/STNP instructions as implemented on Cortex-A53 do not behave
- in a way most programmers expect, and will most probably result in a
- significant speed degradation to any code that employs them. The Armv8-A
- architecture (see Arm DDI 0487A.h, section D3.4.3) allows cores to ignore
- the non-temporal hint and treat LDNP/STNP as LDP/STP instead. Enabling this
- flag enforces this behaviour. This needs to be enabled only for revisions
- <= r0p3 of the CPU and is enabled by default.
-
-- ``A57_DISABLE_NON_TEMPORAL_HINT``: This flag has the same behaviour as
- ``A53_DISABLE_NON_TEMPORAL_HINT`` but for Cortex-A57. This needs to be
- enabled only for revisions <= r1p2 of the CPU and is enabled by default,
- as recommended in section "4.7 Non-Temporal Loads/Stores" of the
- `Cortex-A57 Software Optimization Guide`_.
-
---------------
-
-*Copyright (c) 2014-2019, Arm Limited and Contributors. All rights reserved.*
-
-.. _CVE-2017-5715: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-5715
-.. _CVE-2018-3639: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-3639
-.. _Cortex-A53 MPCore Software Developers Errata Notice: http://infocenter.arm.com/help/topic/com.arm.doc.epm048406/index.html
-.. _Cortex-A57 MPCore Software Developers Errata Notice: http://infocenter.arm.com/help/topic/com.arm.doc.epm049219/index.html
-.. _Cortex-A72 MPCore Software Developers Errata Notice: http://infocenter.arm.com/help/topic/com.arm.doc.epm012079/index.html
-.. _Firmware Design guide: firmware-design.rst
-.. _Cortex-A57 Software Optimization Guide: http://infocenter.arm.com/help/topic/com.arm.doc.uan0015b/Cortex_A57_Software_Optimization_Guide_external.pdf
-.. _Arm DSU Software Developers Errata Notice: http://infocenter.arm.com/help/topic/com.arm.doc.epm138168/index.html