Copyright (c) 2019-2020, Arm Limited and Contributors. All rights reserved.
-
Support for the following platforms has been added:
- Total Compute (tc0) platform
- Renesas R-Car
- RD-Daniel Config-XLR
-
Support for interactive debugger and CLI has been added.
-
New modules:
- Voltage Domain driver and related SCMIv3 protocol driver
- gtimer: Add framework time driver implementation
- module: statistics: add basic functionality
- fip: Introduce 'fip' parser module
-
SCMI Enhancements:
- SCMI: Resource Permissions Module
- SCMIv2: Implement SCMIv2 fast channels performance protocol API
- SCMIv2: Implement notifications for SCMIv2
- scmi_perf: Add support for performance statistics
- SCMI: Clock Protocol policy handler
- SCMI: Performance Protocol policy handler
- SCMI: Power Domain Protocol policy handler
- SCMI: System Power Protocol policy handler
- SCMI: Reset Domain Protocol policy handler
- SCMI: Base Protocol Permissions
- SCMI: Clock Protocol Permissions
- SCMI: System Power Protocol Permissions
- SCMI: Power Domain Protocol Permissions
- SCMI: Performance Protocol Permissions
- SCMI: Sensor Protocol Permissions
- SCMI: Reset Domain Protocol Permissions
- SCMI: Device permissions
-
Framework:
- fwk: Use standard library memory allocator
- fwk: Integrate logging functionality into the framework
- fwk/thread: Single-threaded mode for blocking events
- fwk: Introduce input/output component
-
Documentation:
- doc: SCP Firmware Threat Model
- doc: Add clang-format configuration
- doc: Recreate Doxyfile with Doxywizard
-
Framework:
- fwk: Remove dependency on RTX threads
- fwk: Add support for static element tables
- fwk: Rework assertion logic
- fwk: Initialize module context structures early
-
Modules:
- bootloader: Add support for SDS-less boot
- DVFS: Allow inexact performance levels
- DVFS/SCMI-perf: Abstract performance levels
- scmi_system_power: Add graceful system power support
- bootloader: Unify bootloader messages
- module/scmi: Add SCMI notifications handling APIs
This release implements full SCMI v2 support but we do not guarantee complete compliance with the SCMI v2.0 specification at the moment.
-
Support for the following platforms has been added :-
- Juno Arm Development Platform
- Neoverse N1 Software Development Platform
- SGM-776
- RD-N1-Edge
- RD-N1-Edge Dual-Chip
- RD-Daniel Config-M
-
New modules:
- DMC500
- XRP7724
- CDCEL937
- I2C
- dw_apb_i2c (Synopsis DesignWare I2C controller)
- mock_sensor
- Debug Module
- System Info
-
Build System: static analysis: Add suppression list for Cppcheck Static Code Analysis tools: Add script to check usage of banned functions build: enhance entry guards in internal header files
-
Documentation: DVFS: Document DVFS architecture doc: Fix link location for Cppcheck suppression list doc: Correct Cppcheck invocation description doc: Add notification information to the documentation doc: Clarify contributors' and Maintainers' responsibilities doc: Update list of maintainers for SCP-firmware doc: Add documentation for deferred responses doc: Add glossary to Doxygen configuration input
-
Framework: fwk/notification: Allow use of provided source_id for notify thread: Get head of delayed response list module: Add FWK_ID_NONE source_id for notifications fwk: Delete fwk_module_check_call implementation fwk: Extend delayed response support fwk: Split delayed response from fwk_multi_thread fwk_interrupt: add missing declaration of exported functions fwk_thread: Clarify support for delayed responses fwk: Rename fwk_errno.h to fwk_status.h fwk_errno: Add FWK_PENDING return value fwk_module: Extend fwk_module_get_data for sub-elements framework: allow product to define notification count
-
Modules: DVFS: Add support for pending requests clock: Add full support for asynchronous drivers scmi_clock: Add support for pending requests scmi_sensor: Add support for pending responses sensor: Add support for asynchronous drivers arch/armv7-m: Split exception table from handlers arm7-m: Add support for custom default exception handler
-
Modules:
- CMN600 support
- DMC620 support
- apcontext: New module to zero the AP context area
-
Platforms:
- Support for the SGI-575 platform
- Support for the Neoverse N1 reference design
Note: Juno, Neoverse N1 SDP, Neoverse E1 reference design and SynQuacer products are NOT part of this release.
-
Build System:
- Name firmware bin and elf file by the name of the firmware
-
Documentation:
- Emphasized that the order of the modules in the BS_FIRMWARE_MODULES list in the firmware definition makefiles is the order in which the modules are initialized, bound and started during the pre-runtime phase.
- Expand Doxygen use of param [out]
- Improve coding style and rules
-
Framework:
- Improve error codes and their documentation
- Add fwk_module_get_sub_element_count API
- Improve unit testing of fwk_module.c
- Replace base alignment reference type with
max_align_t
-
Modules:
- sds: Make initialization deferring optional
- sds: Send notification once SDS is initialized
- scmi: Subscribe to SMT ready notifications and send notification when service is initialized
- smt: Add logging on mailbox ownership error
- smt: Send notification when each SMT mailbox is initialized
- sid: Move to an always available interface
- system_power: Introduce platform interrupts and enable a configurable number of system PPUs
- cmn600: Add the ccix programming for cmn600
-
Build System:
- Disable generation of unaligned accesses
-
Framework:
- list: Always zero list nodes when removed from a list
- Zero event list node when duplicating an event
-
Modules:
- cmn600: Fix inappropriately-initialised global state
- cmn600: Stop checking type of external nodes
- ppu_v0: Ensure bound_id is set when bound by system_power
- system_power: Fix extented PPU support
-
Module-based architecture with an event-driven execution model:
- Firmware code is organized into modules, where a module fulfills a well- defined role (driver HAL, driver, protocol or service).
- A framework drives the initialization, orchestration of, and interactions between modules.
-
Processor-agnostic module code enables firmware portability across systems:
- Processor-dependent features (e.g. interrupt handling) are abstracted from the modules by the framework.
- The framework relies on an interface whose implementation is processor- dependent to provide these features.
-
Module configurability easing the re-use of modules on different platforms:
- Strict split between the hardware and software feature configuration data and module code.
-
A native framework test suite provides rapid development and validation of the core framework implementation.
-
Support for Armv7-M control processor architecture based on CMSIS v5 and Keil RTX 5.
-
Provides system initialization support to enable boot of the application cores.
-
Provides the following runtime services:
- Power domain management
- System power management
- Performance domain management (Dynamic voltage and frequency scaling)
- Clock management
- Sensor management
-
Provides a reference implementation of the System Control and Management Interface v1.0 (SCMI, platform-side). The SCMI specification can be found here.
-
Provides a build system supporting:
- The GNU Arm Embedded and Arm Compiler 6 toolchains
- Platforms with multiple firmware images
-
In-source Doxygen documentation
-
Support for the SGM-775 platform
- The Juno platform is extremely limited with regards to available memory. As a result the debug experience is poor, and the ability to add new features severely restricted.
- arm-compiler-6 does not support LTO with our build system. No runs can be done when the SCP-firmware is built with arm-compiler-6 due to space limitations.