This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Updated Morello Frequently Asked Questions (FAQ)

What is the Morello Platform Model?


The Morello Platform Model is an open access Fixed Virtual Platform (FVP) development platform, aligned with the development board, and is available to download from Arm's Ecosystem FVP Developer page.


FVPs use Arm technology to create a virtual model of the system hardware that can be run as an executable in a development environment. They use binary translation technology to deliver functional simulations of Arm-based systems, including processor, memory, and peripherals. They implement a programmer's view suitable for software development and enable execution of full software stacks, providing a widely available platform ahead of silicon.


See here to get started using the Morello Platform Model.


What examples are available?


Arm Development Studio Morello Edition ships with an example project that can be run on the Morello Platform Model.


See here to get started using Arm Development Studio Morello Edition.


How can I compile code for Morello?


Morello is supported by the following open source LLVM-based toolchains based on the CHERI Clang/LLVM toolchain from the University of Cambridge. Please note that these are experimental toolchains and as such some features may not yet be available or fully functional.


  • Android CHERI LLVM/Clang toolchain, which includes a C/C++ compiler (clang), linker (lld), debugger (lldb), various utilities (such as assembler & disassembler), and run-time libraries.
  • Bare-metal toolchain for architecture exploration projects, which includes a C/C++ compiler (clang), linker (lld), a standard C library (newlib), a standard C++ library (libc++, libc++abi) and various utilities (such as assembler & disassembler).
  • AArch64 Linux CHERI LLVM/Clang toolchain, which is an experimental AArch64 hosted variant primarily intended to be used together with Arm's Morello Instruction Emulator. It includes a C/C++ compiler (clang), linker (lld), various utilities and run-time libraries, but does not include a C library.


The following compiler flags should be used to enable Morello code generation:


-march=morello -mabi=purecap


For more information, see the LLVM compiler with Morello support user guide here.


Where can I download the firmware and software stack for the Morello Platform Model?

Morello Linux and Morello SDK are available from Arm and CheriBSD is available from the University of Cambridge.

Follow the links to get started downloading, building, and running these reference open source software stacks on the Morello Platform Model.


What can I do with the Morello reference software stack?


Please be aware that Morello is still in the early stages of development, and as such there are limitations on the kind of applications that can be developed.


For full details of the current limitations, please refer to the README files in the Morello reference software stack git repository.


Where can I get support?


You are welcome to ask questions and start discussions here on our Morello Community Forums.


How does the CHERI security architecture relate to Arm's existing TrustZone solutions?


Morello is not directly related to TrustZone; capabilities can be applied to Secure world or Normal world software stacks. For more information please see CUCLs intro to CHERI.


Do I need to pay for, or request access to, the Morello Platform Model?


No, the Morello Platform Model is free of charge and available to download from Arm's Ecosystem FVP Developer page.


How and when can I get a Morello development board?


Morello development boards are only be available to a select list of industry partners and universities, as decided by the UK Research and Innovation (UKRI). They are not available for general sale but can be requested directly from DSBD here.


Which Arm architectural states support Morello?


Morello extends the Armv8.2-A Architecture, and is only available in AArch64 state (no support for AArch32). Further, Morello mandates only little-endian data accesses.


Which Arm ISA does Morello use?


Morello extends the A64 ISA, adding instructions to manipulate and use capabilities to a limited extent. Morello also introduces a variant of the A64 ISA, C64, providing a richer set of instructions to manipulate and use capabilities.


Server mode and Client mode


The Morello Dynamic Memory Controller can operate in two configurations: Client and server mode with Server mode being the default option. Memory tags are always enabled in both modes.

In server mode, Capability tag bits are carried in the DRAM Error Correction Code field with the ECC bits. The ECC is Calculated and consumed within the DMC-Bing differently than Client Mode.

In Client Mode, a tag cache is added between the DMC-Bing System interface and the rest of the DMC.

You can find more information in the Morello Technical Reference manual


How To Switch between client and Server Mode.


Server mode is the default DMC configuration so no changes are needed to use server mode.

To configure DMC-Bing client mode based on SCC configuration, the following registers need to be programmed with these values:

Register Offset Value
Memory_access_ctl 0xd0c 0x0001_0f0f
Carve_out_base_address_31_0 0xd10 0xff00_0000
Carve_out_base_address_64_32 0xd14 0x0000_0000
Memory_address_max_31_00 0x078 0xfdff_0100
Memory_address_max_47_32 0x07c 0x0000_0000
  • Write out the memory carve out region in the system DRAM from 0 to 1/128th of the total memory
  • Program the Feature_config.si_ckj_gate_disable register so bit 8 = 1, ths disables the siclk gate
  • Also set the capability_ctl register Bit0 to 1 – this will enable client mode.
  • The system will need to be restarted before these changes can take effect.