Zephyr support status on ARC processors
#######################################

Overview
********

This page describes current state of Zephyr for ARC processors and some future
plans. Please note that

 * plans are given without exact deadlines
 * software features require corresponding hardware to be present and
   configured the proper way
 * not all the features can be enabled at the same time

Support status
**************

Legend:
**Y** - yes, supported; **N** - no, not supported; **WIP** - Work In Progress;
**TBD** - to be decided


+---------------------------------------------------------------------+------------+-------------+--------+------------+
|                                                                     | **Processor families**                         |
+---------------------------------------------------------------------+------------+-------------+--------+------------+
|                                                                     | **EM**     | **HS3x/4x** | **EV** | **HS6x**   |
+---------------------------------------------------------------------+------------+-------------+--------+------------+
| Port status                                                         | upstreamed | upstreamed  | WIP    | upstreamed |
+---------------------------------------------------------------------+------------+-------------+--------+------------+
| **Features**                                                                                                         |
+---------------------------------------------------------------------+------------+-------------+--------+------------+
| Closely coupled memories (ICCM, DCCM) [#f1]_                        | Y          | Y           | TBD    | TBD        |
+---------------------------------------------------------------------+------------+-------------+--------+------------+
| Execution with caches - Instruction/Data, L1/L2 caches              | Y          | Y           | Y      | Y          |
+---------------------------------------------------------------------+------------+-------------+--------+------------+
| Hardware-assisted unaligned memory access                           | Y [#f2]_   | Y           | TBD    | Y          |
+---------------------------------------------------------------------+------------+-------------+--------+------------+
| Regular interrupts with multiple priority levels, direct interrupts | Y          | Y           | TBD    | Y          |
+---------------------------------------------------------------------+------------+-------------+--------+------------+
| Fast interrupts, separate register banks for fast interrupts        | Y          | Y           | TBD    | N          |
+---------------------------------------------------------------------+------------+-------------+--------+------------+
| Hardware floating point unit (FPU)                                  | Y          | Y           | N      | TBD        |
+---------------------------------------------------------------------+------------+-------------+--------+------------+
| Symmetric multiprocessing (SMP) support, switch-based               | N/A        | Y           | TBD    | Y          |
+---------------------------------------------------------------------+------------+-------------+--------+------------+
| Hardware-assisted stack checking                                    | Y          | Y           | TBD    | N          |
+---------------------------------------------------------------------+------------+-------------+--------+------------+
| Hardware-assisted atomic operations                                 | N/A        | Y           | TBD    | Y          |
+---------------------------------------------------------------------+------------+-------------+--------+------------+
| DSP ISA                                                             | Y          | N [#f3]_    | TBD    | TBD        |
+---------------------------------------------------------------------+------------+-------------+--------+------------+
| DSP AGU/XY extensions                                               | N [#f3]_   | N [#f3]_    | TBD    | TBD        |
+---------------------------------------------------------------------+------------+-------------+--------+------------+
| Userspace                                                           | Y          | Y           | N      | TBD        |
+---------------------------------------------------------------------+------------+-------------+--------+------------+
| Memory protection unit (MPU)                                        | Y          | Y           | TBD    | N          |
+---------------------------------------------------------------------+------------+-------------+--------+------------+
| Memory management unit (MMU)                                        | N/A        | N           | N/A    | N          |
+---------------------------------------------------------------------+------------+-------------+--------+------------+
| SecureShield                                                        | Y          | N/A         | N/A    | N/A        |
+---------------------------------------------------------------------+------------+-------------+--------+------------+
| **Toolchains**                                                                                                       |
+---------------------------------------------------------------------+------------+-------------+--------+------------+
| GNU (open source GCC-based)                                         | Y          | Y           | N      | Y          |
+---------------------------------------------------------------------+------------+-------------+--------+------------+
| MetaWare (proprietary Clang-based)                                  | Y          | Y           | Y      | WIP [#f4]_ |
+---------------------------------------------------------------------+------------+-------------+--------+------------+
| **Simulators**                                                                                                       |
+---------------------------------------------------------------------+------------+-------------+--------+------------+
| QEMU (open source) [#f5]_                                           | Y          | Y           | N      | Y          |
+---------------------------------------------------------------------+------------+-------------+--------+------------+
| nSIM (proprietary, provided by MetaWare Development Tools)          | Y          | Y           | Y      | Y          |
+---------------------------------------------------------------------+------------+-------------+--------+------------+

Notes
*****

.. [#f1] usage of CCMs is limited on SMP systems
.. [#f2] except the systems with secure features (SecureShield) due to HW
         limitation
.. [#f3] We only support save/restore ACCL/ACCH registers in task's context.
         Rest of DSP/AGU registers save/restore isn't implemented but kernel
         itself does not use these registers. This allows single task per
         core to use DSP/AGU safely.
.. [#f4] MetaWare toolchain supports building for ARCv3 HS6x, however, it's
         not integrated to Zephyr itself
.. [#f5] QEMU doesn't support all the ARC processor's HW features. For the
         detailed info please check the ARC QEMU documentation