.. _hardware_arch_arc_support_status:

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** | **VPX**           | **HS5x**   | **HS6x**   |
+---------------------------------------------------------------------+------------+-------------+-------------------+------------+------------+
| Port status                                                         | upstreamed | upstreamed  | upstreamed [#f6]_ | upstreamed | upstreamed |
+---------------------------------------------------------------------+------------+-------------+-------------------+------------+------------+
| **Features**                                                                                                                                 |
+---------------------------------------------------------------------+------------+-------------+-------------------+------------+------------+
| Closely coupled memories (ICCM, DCCM) [#f1]_                        | Y          | Y           | Y                 | TBD        | TBD        |
+---------------------------------------------------------------------+------------+-------------+-------------------+------------+------------+
| Execution with caches - Instruction/Data, L1/L2 caches              | Y          | Y           | Y                 | Y          | Y          |
+---------------------------------------------------------------------+------------+-------------+-------------------+------------+------------+
| Hardware-assisted unaligned memory access                           | Y [#f2]_   | Y           | Y                 | Y          | Y          |
+---------------------------------------------------------------------+------------+-------------+-------------------+------------+------------+
| Regular interrupts with multiple priority levels, direct interrupts | Y          | Y           | Y                 | Y          | Y          |
+---------------------------------------------------------------------+------------+-------------+-------------------+------------+------------+
| Fast interrupts, separate register banks for fast interrupts        | Y          | Y           | TBD               | N          | N          |
+---------------------------------------------------------------------+------------+-------------+-------------------+------------+------------+
| Hardware floating point unit (FPU)                                  | Y          | Y           | TBD [#f6]_        | TBD        | TBD        |
+---------------------------------------------------------------------+------------+-------------+-------------------+------------+------------+
| Symmetric multiprocessing (SMP) support, switch-based               | N/A        | Y           | TBD               | Y          | Y          |
+---------------------------------------------------------------------+------------+-------------+-------------------+------------+------------+
| Hardware-assisted stack checking                                    | Y          | Y           | Y                 | N          | N          |
+---------------------------------------------------------------------+------------+-------------+-------------------+------------+------------+
| Hardware-assisted atomic operations                                 | N/A        | Y           | Y                 | Y          | Y          |
+---------------------------------------------------------------------+------------+-------------+-------------------+------------+------------+
| DSP ISA                                                             | Y          | N [#f3]_    | TBD [#f6]_        | TBD        | TBD        |
+---------------------------------------------------------------------+------------+-------------+-------------------+------------+------------+
| DSP AGU/XY extensions                                               | Y          | N [#f3]_    | N/A               | TBD        | TBD        |
+---------------------------------------------------------------------+------------+-------------+-------------------+------------+------------+
| Userspace                                                           | Y          | Y           | N                 | TBD        | TBD        |
+---------------------------------------------------------------------+------------+-------------+-------------------+------------+------------+
| Memory protection unit (MPU)                                        | Y          | Y           | TBD               | N          | N          |
+---------------------------------------------------------------------+------------+-------------+-------------------+------------+------------+
| Memory management unit (MMU)                                        | N/A        | N           | TBD               | N          | N          |
+---------------------------------------------------------------------+------------+-------------+-------------------+------------+------------+
| SecureShield                                                        | Y          | N/A         | N/A               | N/A        | N/A        |
+---------------------------------------------------------------------+------------+-------------+-------------------+------------+------------+
| Single-thread kernel support [#f5]_                                 | Y          | Y           | Y                 | Y          | Y          |
+---------------------------------------------------------------------+------------+-------------+-------------------+------------+------------+
| **Toolchains**                                                                                                                               |
+---------------------------------------------------------------------+------------+-------------+-------------------+------------+------------+
| GNU (open source GCC-based)                                         | Y          | Y           | N                 | Y          | Y          |
+---------------------------------------------------------------------+------------+-------------+-------------------+------------+------------+
| MetaWare (proprietary Clang-based)                                  | Y          | Y           | Y                 | Y          | Y          |
+---------------------------------------------------------------------+------------+-------------+-------------------+------------+------------+
| **Simulators**                                                                                                                               |
+---------------------------------------------------------------------+------------+-------------+-------------------+------------+------------+
| QEMU (open source) [#f4]_                                           | Y          | Y           | N                 | Y          | Y          |
+---------------------------------------------------------------------+------------+-------------+-------------------+------------+------------+
| nSIM (proprietary, provided by MetaWare Development Tools)          | Y          | 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] QEMU doesn't support all the ARC processor's HW features. For the
         detailed info please check the ARC QEMU documentation
.. [#f5] Single-thread kernel is support only for single core targets
.. [#f6] currently only ARC VPX scalar port is supported. The support of VPX vector pipeline, VCCM,
         STU is not included in this port, and require additional development and / or other runtime
         integration.
