source: rtems-docs/cpu-supplement/arm.rst

Last change on this file was df8261a, checked in by Kinsey Moore <kinsey.moore@…>, on 03/04/22 at 19:47:40

cpu-supplement: Add note about device memory

Add information about restricted use of device memory for ARM and
AArch64.

  • Property mode set to 100644
File size: 6.8 KB
RevLine 
[e52906b]1.. SPDX-License-Identifier: CC-BY-SA-4.0
[489740f]2
[4886d60]3.. Copyright (C) 1988, 2009 On-Line Applications Research Corporation (OAR)
[f233256]4
[d755cbd]5ARM Specific Information
[6916004]6************************
[d755cbd]7
[f233256]8This chapter discusses the *ARM architecture*
9(http://en.wikipedia.org/wiki/ARM_architecture) dependencies in this port of
10RTEMS.  The ARMv4T (and compatible), ARMv7-A, ARMv7-R and ARMv7-M architecture
11versions are supported by RTEMS.  Processors with a MMU use a static
12configuration which is set up during system start.  SMP is supported.
[d755cbd]13
14**Architecture Documents**
15
[f233256]16For information on the ARM architecture refer to the *ARM Infocenter*
17(http://infocenter.arm.com/).
[d755cbd]18
19CPU Model Dependent Features
20============================
21
[f233256]22This section presents the set of features which vary across ARM implementations
23and are of importance to RTEMS.  The set of CPU model feature macros are
24defined in the file :file:`cpukit/score/cpu/arm/rtems/score/arm.h` based upon
25the particular CPU model flags specified on the compilation command line.
[d755cbd]26
27CPU Model Name
28--------------
29
[f233256]30The macro ``CPU_MODEL_NAME`` is a string which designates the architectural
31level of this CPU model.  See in :file:`cpukit/score/cpu/arm/rtems/score/arm.h`
32for the values.
[d755cbd]33
34Count Leading Zeroes Instruction
35--------------------------------
36
[d75b31f]37The ARMv5 and later instruction sets have the count leading zeroes ``clz``
38instruction which could be used to speed up the find first bit operation. The
39use of this instruction should significantly speed up the scheduling associated
40with a thread blocking.  This is currently not used.
[d755cbd]41
42Floating Point Unit
43-------------------
44
[c1d296a]45The following floating point units are supported:
46
47- VFPv2 (for example available on ARM926EJ-S processors)
[d755cbd]48
49- VFPv3-D32/NEON (for example available on Cortex-A processors)
50
51- VFPv3-D16 (for example available on Cortex-R processors)
52
53- FPv4-SP-D16 (for example available on Cortex-M processors)
54
[c1d296a]55- FPv5-D16 (for example available on Cortex-M7 processors)
56
[d755cbd]57Multilibs
58=========
59
60The following multilibs are available:
61
[f233256]62#. ``.``: ARMv4T, ARM instruction set
[d755cbd]63
[c1d296a]64#. ``vfp/hard``: ARMv4T, ARM instruction set with hard-float ABI and VFPv2 support
65
[f233256]66#. ``thumb``: ARMv4T, Thumb-1 instruction set
[d755cbd]67
[f233256]68#. ``thumb/armv6-m``: ARMv6M, subset of Thumb-2 instruction set
[d755cbd]69
[f233256]70#. ``thumb/armv7-a``: ARMv7-A, Thumb-2 instruction set
[d755cbd]71
[f233256]72#. ``thumb/armv7-a/neon/hard``: ARMv7-A, Thumb-2 instruction set with
73   hard-float ABI Neon and VFP-D32 support
[d755cbd]74
[f233256]75#. ``thumb/armv7-r``: ARMv7-R, Thumb-2 instruction set
[d755cbd]76
[f233256]77#. ``thumb/armv7-r/vfpv3-d16/hard``: ARMv7-R, Thumb-2 instruction set with
78   hard-float ABI VFP-D16 support
[d755cbd]79
[7f51440]80#. ``thumb/cortex-m3``: Cortex-M3, Thumb-2 instruction set with hardware
81   integer division (SDIV/UDIV) and a fix for Cortex-M3 Errata 602117.
[d755cbd]82
[7f51440]83#. ``thumb/cortex-m4``: Cortex-M4, Thumb-2 instruction set with hardware
84   integer division (SDIV/UDIV) and DSP instructions
85
86#. ``thumb/cortex-m4/fpv4-sp-d16``: Cortex-M4, Thumb-2 instruction set with
87   hardware integer division (SDIV/UDIV), DSP instructions and hard-float ABI
88   FPv4-SP support
[d755cbd]89
[c1d296a]90#. ``thumb/cortex-m7/fpv5-d16``: Cortex-M7, Thumb-2 instruction set with
91   hard-float ABI and FPv5-D16 support
92
[f233256]93#. ``eb/thumb/armv7-r``: ARMv7-R, Big-endian Thumb-2 instruction set
[d755cbd]94
[f233256]95#. ``eb/thumb/armv7-r/vfpv3-d16/hard``: ARMv7-R, Big-endian Thumb-2 instruction
96   set with hard-float ABI VFP-D16 support
[d755cbd]97
[7f51440]98Multilib 1., 2. and 3. support the legacy ARM7TDMI and ARM926EJ-S processors.
[d755cbd]99
[c1d296a]100Multilib 4. supports the Cortex-M0 and Cortex-M1 cores.
[d755cbd]101
[c1d296a]102Multilib 5. and 6. support the Cortex-A processors.
[d755cbd]103
[7f51440]104Multilib 7., 8., 13. and 14. support the Cortex-R processors.  Here also
[d755cbd]105big-endian variants are available.
106
[f233256]107Use for example the following GCC options:
108
109.. code-block:: shell
[d755cbd]110
111    -mthumb -march=armv7-a -mfpu=neon -mfloat-abi=hard -mtune=cortex-a9
112
113to build an application or BSP for the ARMv7-A architecture and tune the code
114for a Cortex-A9 processor.  It is important to select the options used for the
[f233256]115multilibs. For example:
116
117.. code-block:: shell
[d755cbd]118
119    -mthumb -mcpu=cortex-a9
120
121alone will not select the ARMv7-A multilib.
122
123Calling Conventions
124===================
125
[f233256]126Please refer to the *Procedure Call Standard for the ARM Architecture*
127(http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042c/IHI0042C_aapcs.pdf).
[d755cbd]128
129Memory Model
130============
131
132A flat 32-bit memory model is supported.  The board support package must take
[d75b31f]133care of initializing the MMU if necessary.
[df8261a]134
135Note that architecture variants which support unaligned accesses must not use
136memcpy() or memset() on device memory as those functions are hand-optimized and
137will take advantage of unaligned accesses where available. *As per ARM*
138(https://developer.arm.com/documentation/ddi0406/c/Application-Level-Architecture/Application-Level-Memory-Model/Alignment-support/Unaligned-data-access-restrictions-in-ARMv7-and-ARMv6),
139unaligned accesses are not permitted for device memory.
[d755cbd]140
141Interrupt Processing
142====================
143
144The ARMv4T (and compatible) architecture has seven exception types:
145
146- Reset
147
148- Undefined
149
150- Software Interrupt (SWI)
151
152- Prefetch Abort
153
154- Data Abort
155
156- Interrupt (IRQ)
157
158- Fast Interrupt (FIQ)
159
160Of these types only the IRQ has explicit operating system support.  It is
161intentional that the FIQ is not supported by the operating system.  Without
162operating system support for the FIQ it is not necessary to disable them during
163critical sections of the system.
164
165The ARMv7-M architecture has a completely different exception model.  Here
[f233256]166interrupts are disabled with a write of 0x80 to the ``basepri_max`` register.
167This means that all exceptions and interrupts with a priority value of greater
168than or equal to 0x80 are disabled.  Thus exceptions and interrupts with a
169priority value of less than 0x80 are non-maskable with respect to the operating
170system and therefore must not use operating system services.  Several support
171libraries of chip vendors implicitly shift the priority value somehow before
172the value is written to the NVIC IPR register.  This can easily lead to
[d755cbd]173confusion.
174
175Interrupt Levels
176----------------
177
178There are exactly two interrupt levels on ARM with respect to RTEMS.  Level
179zero corresponds to interrupts enabled.  Level one corresponds to interrupts
180disabled.
181
182Interrupt Stack
183---------------
184
185The board support package must initialize the interrupt stack. The memory for
186the stacks is usually reserved in the linker script.
187
188Default Fatal Error Processing
189==============================
190
[f233256]191The default fatal error handler for this architecture performs the following
192actions:
[d755cbd]193
194- disables operating system supported interrupts (IRQ),
195
196- places the error code in ``r0``, and
197
198- executes an infinite loop to simulate a halt processor instruction.
199
200Symmetric Multiprocessing
201=========================
202
[d75b31f]203SMP is supported on ARMv7-A.  Available platforms are:
[87e1929]204
[d75b31f]205- Altera Cyclone V
[87e1929]206
[d75b31f]207- NXP i.MX 7
[87e1929]208
[d75b31f]209- Xilinx Zynq
[d755cbd]210
211Thread-Local Storage
212====================
213
214Thread-local storage is supported.
Note: See TracBrowser for help on using the repository browser.