blob: a52a62e7602844f3dfdc366c338329830a6ac8dc [file] [log] [blame] [view] [edit]
# Hardware requirements and recommendations
This page is a summary of Fuchsia's current hardware requirements and
recommendations. The goal is to provide an easy to understand explanation of
[RFC-0111: Initial hardware platform specifications][RFC]
for hardware vendors who only need to know what hardware features
Fuchsia requires or recommends.
Note: The source of truth for Fuchsia hardware requirements information is
[RFC-0111: Initial Fuchsia hardware platform specifications][RFC]. If there
is a disagreement between the information on this page and the information in
the RFC, the RFC's information should be considered the truth.
## Required features {#requirements}
All required features must be supported. If a required feature is not supported,
Fuchsia will not build or run correctly.
<table>
<tr>
<th>Feature</th>
<th>Area</th>
<th>Details</th>
<th>Examples</th>
</tr>
<tr>
<td>
<a href="/docs/contribute/governance/rfcs/0111_fuchsia_hardware_specifications.md#required_for_x86-64_the_x86-64-v2_instruction_set_architecture">
Instruction set architecture (ISA)
</a>
</td>
<td>
<a href="#architecture">Architecture</a>
</td>
<td>
<ul>
<li>
x86-64 architectures must support x86-64-v2 ISA.
</li>
<li>
Arm architectures must support Armv8.0-A at minimum.
</li>
</td>
<td>
<ul>
<li>Intel Westmere and newer CPUs.</li>
<li>AMD Bulldozer and newer CPUs.</li>
<li>
Arm A35, A53, A55, A57, A65, A72, A73,
A75, A76, A77, A78, and X1.
</li>
</ul>
</td>
</tr>
<tr>
<td>
<a href="/docs/contribute/governance/rfcs/0111_fuchsia_hardware_specifications.md#required_architecture_must_be_supported_by_qemu">
QEMU support
</a>
</td>
<td>
<a href="#architecture">Architecture</a>
</td>
<td></td>
<td></td>
</tr>
<tr>
<td>
<a href="/docs/contribute/governance/rfcs/0111_fuchsia_hardware_specifications.md#required_little-endian_mode">
Little endian byte-ordering mode
</a>
</td>
<td>
<a href="#architecture">Architecture</a>
</td>
<td></td>
<td>
<ul>
<li>All x86 CPUs.</li>
<li>Arm processors support little endian.</li>
</ul>
</td>
</tr>
<tr>
<td>
<a href="/docs/contribute/governance/rfcs/0111_fuchsia_hardware_specifications.md#required_llvm_toolchain_support">
LLVM toolchain support
</a>
</td>
<td>
<a href="#architecture">Architecture</a>
</td>
<td>
<ul>
<li>
The architecture must be in the <a href="https://llvm.org/docs/SupportPolicy.html#core-tier">LLVM core tier</a>.
</li>
<li>
Clang toolchain support must be kept up-to-date.
</li>
</ul>
</td>
<td></td>
</tr>
<tr>
<td>
<a href="/docs/contribute/governance/rfcs/0111_fuchsia_hardware_specifications.md#required_tier_2_rust_language_support">
Tier 2 Rust language support
</a>
</td>
<td>
<a href="#architecture">Architecture</a>
</td>
<td>
<ul>
<li>
The architecture must have <a href="https://doc.rust-lang.org/nightly/rustc/platform-support.html#tier-2">Rust Tier 2</a>
support.
</li>
</ul>
</td>
<td></td>
</tr>
<tr>
<td>
<a href="/docs/contribute/governance/rfcs/0111_fuchsia_hardware_specifications.md#required_dart_language_support">
Dart language support
</a>
</td>
<td>
<a href="#architecture">Architecture</a>
</td>
<td>
<ul>
<li>
The architecture must support the <a href="https://dart.dev/overview#platform">Dart platform</a>.
</li>
</ul>
</td>
<td></td>
</tr>
<tr>
<td>
<a href="/docs/contribute/governance/rfcs/0111_fuchsia_hardware_specifications.md#required_go_language_support">
Go language support
</a>
</td>
<td>
<a href="#architecture">Architecture</a>
</td>
<td>
<ul>
<li>
The architecture must have Go language support.
See <a href="https://go.dev/blog/ports">Go on ARM and beyond</a>.
</li>
</ul>
</td>
<td></td>
</tr>
<tr>
<td>
<a href="/docs/contribute/governance/rfcs/0111_fuchsia_hardware_specifications.md#required_full_featured_memory_management_unit_mmu">
Full-featured modern memory management unit (MMU)
</a>
</td>
<td>
<a href="#platform">Platform</a>
</td>
<td>
<ul>
<li>
The MMU must support creating an arbitrary number of address spaces.
</li>
<li>
The MMU must map physical memory in reasonably sized pages to any of those spaces.
</li>
<li>
The MMU must enforce protection between separate address spaces through hardware
access control mechanisms.
</li>
</td>
<td>
<ul>
<li>Armv8.0-A and later.</li>
<li>All x86 CPUs after 2010.</li>
</ul>
</td>
</tr>
<tr>
<td>
<a href="/docs/contribute/governance/rfcs/0111_fuchsia_hardware_specifications.md#required_64-bit_cpu_and_platform">
64-bit platform
</a>
</td>
<td>
<a href="#platform">Platform</a>
</td>
<td>
<ul>
<li>
The platform must support 64-bit address space operating mode.
</li>
<li>
The <a href="#esb">early stage bootloader</a> doesn't need to run in
64-bit mode.
</li>
</ul>
</td>
<td>
<ul>
<li>All x86-64 platforms.
<li>All Armv8-A and later processors (except A32).</li>
</ul>
</td>
</tr>
<tr>
<td>
<a href="/docs/contribute/governance/rfcs/0111_fuchsia_hardware_specifications.md#required_clock_and_timers">
Clocks and timers
</a>
</td>
<td>
<a href="#system">System</a>
</td>
<td>
<ul>
<li>Clocks and timers must not arbitrarily change frequency.</li>
<li>Clocks and timers must be at least 56-bits wide.</li>
<li>Clocks and timers must have a rollover time greater than 40 years.</li>
<li>
Clocks and timers must have an explicitly knowable nominal
frequency that doesn't require runtime calibration.
</li>
</td>
<td></td>
</tr>
<tr>
<td>
<a href="/docs/contribute/governance/rfcs/0111_fuchsia_hardware_specifications.md#required_bootloader_openness">
Bootloader openness
</a>
</td>
<td>
<a href="#system">System</a>
</td>
<td>
<ul>
<li>
Fuchsia must be able to change and build the <a href="#fsb">final-stage bootloader</a>.
</li>
<li>
Fuchsia must be able to distribute the source and binary of any changes it makes to the
<a href="#fsb">final-stage bootloader</a>.
</li>
</ul>
</td>
<td>
<ul>
<li><a href="https://coreboot.org/">coreboot</a>.</li>
<li><a href="https://www.denx.de/wiki/U-Boot">U-Boot</a>.</li>
</ul>
</td>
</tr>
<tr>
<td>
<a href="/docs/contribute/governance/rfcs/0111_fuchsia_hardware_specifications.md#required_serial_console_access">
Serial console access
</a>
</td>
<td>
<a href="#system">System</a>
</td>
<td>
<ul>
<li>
The system must support interrupt-driven TX and RX during development.
</li>
<li>
Serial console access is not required for production systems intended
for end users.
</li>
<li>
(Recommended) Direct memory access (DMA).
</li>
</ul>
</td>
<td></td>
</tr>
</table>
## Recommended features {#recommendations}
Recommended features are not required to build or run Fuchsia correctly but are
highly desirable because they improve Fuchsia's base functionality.
<table>
<tr>
<th>Feature</th>
<th>Area</th>
<th>Details</th>
<th>Examples</th>
</tr>
<tr>
<td>
<a href="/docs/contribute/governance/rfcs/0111_fuchsia_hardware_specifications.md#recommended_virtualization_support">
Virtualization support
</a>
</td>
<td><a href="#architecture">Architecture</a></td>
<td>
<ul>
<li>
Intel x86 CPUs: VMX, EPT, RDTSCP, x2APIC, VPID, unrestricted guests,
TPR virtualization, MSR bitmaps, exception bitmaps, INVPCID
(recommended), PAUSE-loop exiting (recommended).
</li>
<li>
Arm CPUs: Armv8.0, EL2 access, host physical timer / guest virtual
timer split, GICv2 or GICv3, GIC virtualization.
</li>
</ul>
</td>
<td>
<ul>
<li>Armv8-A AArch64.</li>
<li>Intel VT-x.</li>
<li>AMD VT.</li>
</ul>
</td>
</tr>
<tr>
<td>
<a href="/docs/contribute/governance/rfcs/0111_fuchsia_hardware_specifications.md#recommended_clock_and_timers">
Clocks and timers
</a>
</td>
<td><a href="#architecture">Architecture</a></td>
<td>
<ul>
<li>
Timers should deliver interrupts to cores when timer values exceed a given
absolute threshold.
</li>
<li>
Clocks and timers should be implemented as part of the architecture itself, not as a peripheral.
</li>
</ul>
</td>
<td></td>
</tr>
<tr>
<td>
<a href="/docs/contribute/governance/rfcs/0111_fuchsia_hardware_specifications.md#recommended_io_memory_management_unit_iommu">
I/O memory management unit (IOMMU)
</a>
</td>
<td><a href="#platform">Platform</a></td>
<td>
<ul>
<li>
The IOMMU should be able to <a href="https://www.techtarget.com/searchnetworking/definition/NAK">NAK</a>
read and write transactions initiated from
uniquely identifiable hardware units.
</li>
<li>
The IOMMU should do address translation for hardware DMA operations.
</li>
<li>
IOMMU page-fault situations should be detectable and debuggable.
</li>
</td>
<td>
<ul>
<li>System Memory Management Unit (SMMU) in Arm IOMMU spec.</li>
<li>Intel x86 IOMMU spec.</li>
<li>Intel VT-d.</li>
<li>AMD-Vi.</li>
</ul>
</td>
</tr>
<tr>
<td>
<a href="/docs/contribute/governance/rfcs/0111_fuchsia_hardware_specifications.md#recommended_hardware_cryptographic_acceleration_support">
Hardware cryptographic acceleration support
</a>
</td>
<td><a href="#platform">Platform</a></td>
<td>
<ul>
<li>
The platform should provide hardware acceleration for AES and SHA.
</li>
</l>
</td>
<td>
<ul>
<li>
AES for Armv8.0-A (Cortex A34) or later: AESE, AESD, AESMC, AESIMC,
PMULL, PMULL2.
</li>
<li>
SHA2 for Armv8.0-A (Cortex A34) or later: SHA256H, SHA256H2, SHA256UO,
SHA256U1.
</li>
</ul>
</td>
</tr>
<tr>
<td>
<a href="/docs/contribute/governance/rfcs/0111_fuchsia_hardware_specifications.md#recommended_hardware_assisted_tracing">
Hardware-assisted tracing
</a>
</td>
<td><a href="#platform">Platform</a></td>
<td>
<ul>
<li>
The platform should support <a href="https://menloparktech.com/hardware-tracing.html">hardware-assisted tracing</a>
of <a href="https://en.wikipedia.org/wiki/Control_flow">control flow</a>.
</li>
</ul>
</td>
<td>
<ul>
<li>Arm CoreSight ETM.</li>
<li>Intel Last Branch Records (LBR).</li>
</ul>
</td>
</tr>
<tr>
<td>
<a href="/docs/contribute/governance/rfcs/0111_fuchsia_hardware_specifications.md#recommended_gcc_toolchain_support">
GCC toolchain support
</a>
</td>
<td><a href="#system">System</a></td>
<td>
<ul>
<li>
The system should be fully supported by the GCC toolchain.
</li>
</ul>
</td>
<td></td>
</tr>
<tr>
<td>
<a href="/docs/contribute/governance/rfcs/0111_fuchsia_hardware_specifications.md#tier-1-rust-language-support">
Tier 1 Rust language support
</a>
</td>
<td><a href="#system">System</a></td>
<td>
<ul>
<li>
The system should have <a href="https://doc.rust-lang.org/nightly/rustc/platform-support.html#tier-1">Rust Tier 1</a> support.
</li>
</ul>
</td>
<td></td>
</tr>
<tr>
<td>
<a href="/docs/contribute/governance/rfcs/0111_fuchsia_hardware_specifications.md#recommended-documentation-and-support">
Documentation and support
</a>
</td>
<td><a href="#system">System</a></td>
<td>
<ul>
<li>
The system should have publicly available documentation about register maps,
theory of operation, and boot-time hardware state.
</li>
<li>
Board documentation can't be a fork of the documentation source code for Linux
or Android Open Source Project or any other project that has a license incompatible
with Fuchsia.
</li>
<li>
The system vendor must provide support channels where Fuchsia contributors can get their
questions answered.
</li>
</ul>
</td>
<td></td>
</tr>
<tr>
<td>
<a href="/docs/contribute/governance/rfcs/0111_fuchsia_hardware_specifications.md#recommended_bootloader_support_for_fastboot">
Fastboot support
</a>
</td>
<td><a href="#system">System</a></td>
<td>
<ul>
<li>
The bootloader should support fastboot over non-proprietary transports. See
<a href="/docs/contribute/governance/rfcs/0111_fuchsia_hardware_specifications.md#required_fastboot_commands">Required fastboot commands</a>
for the full list of fastboot protocol commands that should be supported.
</li>
</ul>
</td>
<td></td>
</tr>
</table>
## Appendix: Terminology {#terminology}
These terminology definitions are based on [Document Definitions][terms].
### Architecture {#architecture}
A processor architecture like x86 or Arm.
### Early stage bootloader {#esb}
All stages of the bootloader before the [final-stage bootloader](#fsb).
### Final-stage bootloader {#fsb}
The software component that loads Fuchsia's kernel.
### Platform {#platform}
The system-on-a-chip (SoC) or the combination of the CPU and
chipset.
### System {#system}
A complete computer hardware system with a CPU, memory, peripherals
and so on. Also called a *board*.
[RFC]: /docs/contribute/governance/rfcs/0111_fuchsia_hardware_specifications.md
[terms]: /docs/contribute/governance/rfcs/0111_fuchsia_hardware_specifications.md#document-definitions