blob: 9d138ac73388df920c52fcb0510c6344d766669e [file] [log] [blame]
:orphan:
.. _zephyr_3.0:
Zephyr 3.0.0 (Working draft)
############################
We are pleased to announce the release of Zephyr RTOS version 3.0.0.
The following sections provide detailed lists of changes by component.
Security Vulnerability Related
******************************
The following CVEs are addressed by this release:
More detailed information can be found in:
https://docs.zephyrproject.org/latest/security/vulnerabilities.html
* CVE-2021-3835: `Zephyr project bug tracker GHSA-fm6v-8625-99jf
<https://github.com/zephyrproject-rtos/zephyr/security/advisories/GHSA-fm6v-8625-99jf>`_
* CVE-2021-3861: `Zephyr project bug tracker GHSA-hvfp-w4h8-gxvj
<https://github.com/zephyrproject-rtos/zephyr/security/advisories/GHSA-hvfp-w4h8-gxvj>`_
* CVE-2021-3966: Under embargo until 2021-02-12
Known issues
************
You can check all currently known issues by listing them using the GitHub
interface and listing all issues with the `bug label
<https://github.com/zephyrproject-rtos/zephyr/issues?q=is%3Aissue+is%3Aopen+label%3Abug>`_.
API Changes
***********
Changes in this release
=======================
* Following functions in UART Asynchronous API are using microseconds to represent
timeout instead of milliseconds:
* :c:func:`uart_tx`
* :c:func:`uart_rx_enable`
* Replaced custom LwM2M :c:struct:`float32_value` type with a native double type.
* Added function for getting status of USB device remote wakeup feature.
* Added ``ranges`` and ``dma-ranges`` as invalid property to be used with DT_PROP_LEN()
along ``reg`` and ``interrupts``.
* The existing :c:func:`crc16` and :c:func:`crc16_ansi` functions have been
modified. The former has a new signature. The latter now properly calculates the
CRC-16-ANSI checksum. A new function, :c:func:`crc16_reflect`, has been
introduced to calculated reflected CRCs.
* GATT callbacks ``bt_gatt_..._func_t`` would previously be called with argument
``conn = NULL`` in the event of a disconnect. This was not documented as part
of the API. This behavior is changed so the ``conn`` argument is provided as
normal when a disconnect occurs.
Removed APIs in this release
============================
* The following Kconfig options related to radio front-end modules (FEMs) were
removed:
* ``CONFIG_BT_CTLR_GPIO_PA``
* ``CONFIG_BT_CTLR_GPIO_PA_PIN``
* ``CONFIG_BT_CTLR_GPIO_PA_POL_INV``
* ``CONFIG_BT_CTLR_GPIO_PA_OFFSET``
* ``CONFIG_BT_CTLR_GPIO_LNA``
* ``CONFIG_BT_CTLR_GPIO_LNA_PIN``
* ``CONFIG_BT_CTLR_GPIO_LNA_POL_INV``
* ``CONFIG_BT_CTLR_GPIO_LNA_OFFSET``
* ``CONFIG_BT_CTLR_FEM_NRF21540``
* ``CONFIG_BT_CTLR_GPIO_PDN_PIN``
* ``CONFIG_BT_CTLR_GPIO_PDN_POL_INV``
* ``CONFIG_BT_CTLR_GPIO_CSN_PIN``
* ``CONFIG_BT_CTLR_GPIO_CSN_POL_INV``
* ``CONFIG_BT_CTLR_GPIO_PDN_CSN_OFFSET``
This FEM configuration is hardware description, and was therefore moved to
:ref:`devicetree <dt-guide>`. See the :dtcompatible:`nordic,nrf-radio`
devicetree binding's ``fem`` property for information on what to do instead
on the Nordic open source controller.
* Removed Kconfig option ``CONFIG_USB_UART_CONSOLE``.
Option ``CONFIG_USB_UART_CONSOLE`` was only relevant for console driver
when CDC ACM UART is used as backend. Since the behavior of the CDC ACM UART
is changed so that it more closely mimics the real UART controller,
option is no longer necessary.
* Removed Kconfig option ``CONFIG_OPENOCD_SUPPORT`` in favor of
``CONFIG_DEBUG_THREAD_INFO``.
* Removed ``flash_write_protection_set()`` along with the flash write protection
implementation handler.
* Removed ``CAN_BUS_UNKNOWN`` and changed the signature of
:c:func:`can_get_state` to return an error code instead.
* Removed ``DT_CHOSEN_ZEPHYR_CANBUS_LABEL`` in favor of utilizing
:c:macro:`DEVICE_DT_GET`.
Deprecated in this release
==========================
* Removed ``<power/reboot.h>`` and ``<power/power.h>`` deprecated headers.
``<sys/reboot.h>`` and ``<pm/pm.h>`` should be used instead.
* :c:macro:`USBD_CFG_DATA_DEFINE` is deprecated in favor of utilizing
:c:macro:`USBD_DEFINE_CFG_DATA`
* :c:macro:`SYS_DEVICE_DEFINE` is deprecated in favor of utilizing
:c:macro:`SYS_INIT`.
* :c:func:`device_usable_check` is deprecated in favor of utilizing
:c:func:`device_is_ready`.
* Custom CAN return codes (:c:macro:`CAN_TX_OK`, :c:macro:`CAN_TX_ERR`,
:c:macro:`CAN_TX_ARB_LOST`, :c:macro:`CAN_TX_BUS_OFF`,
:c:macro:`CAN_TX_UNKNOWN`, :c:macro:`CAN_TX_EINVAL`,
:c:macro:`CAN_NO_FREE_FILTER`, and :c:macro:`CAN_TIMEOUT`) are deprecated in
favor of utilizing standard errno error codes.
* :c:func:`can_configure` is deprecated in favor of utilizing
:c:func:`can_set_bitrate` and :c:func:`can_set_mode`.
* :c:func:`can_attach_workq` is deprecated in favor of utilizing
:c:func:`can_add_rx_filter_msgq` and :c:func:`k_work_poll_submit`.
* :c:func:`can_attach_isr` is is deprecated and replaced by
:c:func:`can_add_rx_filter`.
* :c:macro:`CAN_DEFINE_MSGQ` is deprecated and replaced by
:c:macro:`CAN_MSGQ_DEFINE`.
* :c:func:`can_attach_msgq` is deprecated and replaced by
:c:func:`can_add_rx_filter_msgq`.
* :c:func:`can_detach` is deprecated and replaced by
:c:func:`can_remove_rx_filter`.
* :c:func:`can_register_state_change_isr` is deprecated and replaced by
:c:func:`can_set_state_change_callback`.
* :c:func:`can_write` is deprecated in favor of utilizing :c:func:`can_send`.
Stable API changes in this release
==================================
New APIs in this release
========================
* Serial
* Added new APIs to support datum wider than 8-bit.
* :kconfig:`CONFIG_UART_WIDE_DATA` is added to enable this new APIs.
* Following functions, mirroring similar functions for 8-bit datum,
are added:
* :c:func:`uart_tx_u16` to send a given number of datum from buffer.
* :c:func:`uart_rx_enable_u16` to start receiving data.
* :c:func:`uart_rx_buf_rsp_u16` to set buffer for receiving data
in response to ``UART_RX_BUF_REQUEST`` event.
* :c:func:`uart_poll_in_u16` to poll for input.
* :c:func:`uart_poll_out_u16` to output datum in polling mode.
* :c:func:`uart_fifo_fill_u16` to fill FIFO with data.
* :c:func:`uart_fifo_read_u16` to read data from FIFO.
* Devicetree
* Added new Devicetree helpers:
* :c:macro:`DT_INST_ENUM_IDX`
* :c:macro:`DT_INST_ENUM_IDX_OR`
* :c:macro:`DT_INST_PARENT`
* CAN
* Added :c:func:`can_get_max_filters` for retrieving the maximum number of RX
filters support by a CAN controller device.
Kernel
******
Architectures
*************
* ARC
* ARM
* AARCH32
* AARCH64
* x86
* Xtensa
* Introduced a mechanism to automatically figure out which scratch registers
are used for internal code, instead of hard-coding. This is to accommodate
the configurability of the architecture where some registers may exist in
one SoC but not on another one.
* Added coredump support for Xtensa.
* Added GDB stub support for Xtensa.
Bluetooth
*********
* Audio
* Host
* The :kconfig:`CONFIG_BT_SETTINGS_CCC_STORE_ON_WRITE` is enabled by default.
Storing CCC right after it's written reduces risk of inconsistency of CCC values between bonded peers.
* Mesh
* Bluetooth LE split software Controller
* HCI Driver
Boards & SoC Support
********************
* Added support for these SoC series:
* GigaDevice GD32VF103, GD32F3X0, GD32F403 and GD32F450.
* NXP i.MXRT595, i.MX8MQ, i.MX8MP
* Removed support for these SoC series:
* Made these changes in other SoC series:
* stm32h7: Added SMPS support
* stm32u5: Enabled TF-M
* Changes for ARC boards:
* Added support for these ARM boards:
* GigaDevice GD32F350R-EVAL
* GigaDevice GD32F403Z-EVAL
* GigaDevice GD32F450I-EVAL
* OLIMEX-STM32-H405
* NXP MIMXRT595-EVK
* NXP MIMX8MQ-EVK
* NXP MIMX8MP-EVK
* ST Nucleo G031K8
* ST Nucleo H7A3ZI Q
* ST STM32G081B Evaluation
* Added support for these ARM64 boards:
* Removed support for these ARM boards:
* Removed support for these X86 boards:
* Added support for these RISC-V boards:
* GigaDevice GD32VF103V-EVAL
* Sipeed Longan Nano and Nano Lite
* Made these changes in other boards:
* sam_e70_xplained: Added support for CAN-FD driver
* mimxrt11xx: Added SOC level power management
* mimxrt11xx: Added support for GPT timer as OS timer
* Added support for these following shields:
Drivers and Sensors
*******************
* ADC
* Added support for stm32u5 series
* stm32: Added shared IRQ support
* Bluetooth
* CAN
* Renamed ``zephyr,can-primary`` chosen property to ``zephyr,canbus``.
* Added :c:macro:`CAN_ERROR_WARNING` CAN controller state.
* Added Atmel SAM Bosch M_CAN CAN-FD driver.
* Added NXP LPCXpresso Bosch M_CAN CAN-FD driver.
* Added ST STM32H7 Bosch M_CAN CAN-FD driver.
* Rework transmission error handling the NXP FlexCAN driver to automatically
retry transmission in case or arbitration lost or missing acknowledge and
to fail early in :c:func:`can_send` if in :c:macro:`CAN_BUS_OFF` state.
* Added support for disabling automatic retransmissions ("one-shot" mode") to
the ST STM32 bxCAN driver.
* Converted the emulated CAN loopback driver to be configured through
devicetree instead of Kconfig.
* Clock Control
* Console
* Counter
* stm32: Added timer based counter driver (stm32f4 only for now).
* DAC
* Added support for GigaDevice GD32 SoCs
* Added support for stm32u5 series
* Disk
* stm32 sdmmc: Converted from polling to IT driven mode and added Hardware
Flow Control option
* Display
* Disk
* DMA
* Added support for suspending and resuming transfers
* Added support for SoCs with DMA between application and embedded
processors, allows for transfer directions to be identified as such.
* mimxrt11xx: Added support for DMA
* EEPROM
* Added support for the EEPROM present in the TMP116 digital temperature
sensor.
* Entropy
* Added support for stm32u5 series
* ESPI
* Ethernet
* Added support for Synopsys DesignWare MAC driver with implementation
on stm32h7 series.
* stm32 (hal based): Added promiscuous mode support
* stm32 (hal based): Added PTP L2 timestamping support
* mimxrt11xx: Added support for 10/100M ENET
* Flash
* stm32g0: Added Dual Bank support
* stm32_qspi: General enhancement (Generation of the reset pulse for SPI-NOR memory,
Usage of 4IO for read / write (4READ/4PP), Support for different QSPI banks,
Support for 4B addressing on spi-nor)
* ite_i8xxx2: The driver has been reworked so the write/erase protection
management has been moved to implementations of the flash_write()
and the flash_erase() calls. The driver was keeping the write protection API
which was designed to be removed since 2.6 release.
* GPIO
* Added driver for GigaDevice GD32 SoCs
* Hardware Info
* I2C
* Added driver for GigaDevice GD32 SoCs
* Added stats functionality to all drivers
* Added I2C driver for Renesas R-Car platform
* Added support for TCA9548A I2C switch
* I2S
* mimxrt10xx: Added support for I2S
* mimxrt11xx: Added support for I2S
* IEEE 802.15.4
* Interrupt Controller
* Added ECLIC driver for GigaDevice RISC-V GD32 SoCs
* Added EXTI driver for GigaDevice GD32 SoCs
* LED
* LoRa
* MEMC
* Added support for stm32f7 series
* Modem
* Pin control
* Introduced a new state-based pin control (``pinctrl``) API inspired by the
Linux design principles. The ``pinctrl`` API will replace the existing
pinmux API, so all platforms using pinmux are encouraged to migrate. A
detailed guide with design principles and implementation guidelines can be
found in :ref:`pinctrl-guide`.
* Platforms already supporting the ``pinctrl`` API:
* GigaDevice GD32
* Nordic (preliminary support)
* Renesas R-Car
* STM32
* PWM
* stm32: DT bindings: `st,prescaler` property was moved from pwm
to parent timer node.
* stm32: Implemented PWM capture API
* Added driver for GigaDevice GD32 SoCs. Only PWM output is supported.
* mimxrt1021: Added support for PWM
* Sensor
* Added Invensense MPU9250 9-axis IMU driver.
* Added ITE IT8XX2 tachometer driver.
* Added STM L5 die temperature driver.
* Added STM I3G4250D gyroscope driver.
* Added TI TMP108 driver.
* Added Winsen MH-Z19B CO2 driver.
* Constified device config access in sbs_gauge and LM75 drivers.
* Dropped DEV_DATA/DEV_CFG usage from various drivers.
* Moved ODR and range properties from Kconfig to devicetree in various STM
drivers.
* Refactored INA230 driver to add support for INA237 variant.
* Refactored various drivers to use I2C/SPI/GPIO DT APIs.
* Enabled level triggered interrupts in LIS2DH driver.
* Fixed TMP112 driver to avoid I2C burst write portability issues.
* Fixed SENSOR_DEG2RAD_DOUBLE macro in LSM6DS0 driver.
* Fixed gain factor in LSM303DLHC magnetometer driver.
* Serial
* stm32: Implemented half-duplex option.
* Added driver for GigaDevice GD32 SoCs. Polling and interrupt driven modes
are supported.
* SPI
* stm32: Implemented Frame format option (TI vs Motorola).
* mimxrt11xx: Added support for Flexspi
* Timer
* stm32 lptim: Added support for stm32h7
* USB
* Added support for stm32u5 series (OTG full speed)
* Watchdog
* Added support for stm32u5 series (Independent and Window)
* mimxrt1170: Added support for watchdog on CM7
* WiFi
Networking
**********
* CoAP:
* DHCPv4:
* DNS:
* HTTP:
* IPv4:
* LwM2M:
* Misc:
* OpenThread:
* Socket:
* TCP:
* TLS:
USB
***
Build and Infrastructure
************************
* Build system
* New CMake extension functions:
* ``dt_alias()``
* ``target_sources_if_dt_node()``
* The following CMake extension functions now handle devicetree aliases:
* ``dt_node_exists()``
* ``dt_node_has_status()``
* ``dt_prop()``
* ``dt_num_regs()``
* ``dt_reg_addr()``
* ``dt_reg_size()``
* Devicetree
* Support for the devicetree compatible ``ti,ina23x`` has been removed.
Instead, use :dtcompatible:`ti,ina230` or :dtcompatible:`ti,ina237`.
* West (extensions)
* Added support for gd32isp runner
Libraries / Subsystems
**********************
* Disk
* Management
* Fixed the mcumgr SMP protocol over serial not adding the length of the CRC16 to packet length.
* Kconfig option OS_MGMT_TASKSTAT is now disabled by default.
* CMSIS subsystem
* Power management
* Power management resources are now manually allocated by devices using
:c:macro:`PM_DEVICE_DEFINE`, :c:macro:`PM_DEVICE_DT_DEFINE` or
:c:macro:`PM_DEVICE_DT_INST_DEFINE`. Device instantiation macros take now
a reference to the allocated resources. The reference can be obtained using
:c:macro:`PM_DEVICE_GET`, :c:macro:`PM_DEVICE_DT_GET` or
:c:macro:`PM_DEVICE_DT_INST_GET`. Thanks to this change, devices not
implementing support for device power management will not use unnecessary
memory.
* Device runtime power management API error handling has been simplified.
* :c:func:`pm_device_runtime_enable` suspends the target device if not already
suspended. This change makes sure device state is always kept in a
consistent state.
* Improved PM states Devicetree macros naming
* Added a new API call :c:func:`pm_state_cpu_get_all` to obtain information
about CPU power states.
* ``pm/device.h`` is no longer included by ``device.h``, since the device API
no longer depends on the PM API.
* Logging
* Shell
* Storage
* Task Watchdog
* Tracing
* Support all syscalls being traced using the python syscall generator to
introduce a tracing hook call.
* Debug
* OS
HALs
****
* STM32
* stm32cube/stm32wb and its lib: Upgraded to version V1.12.1
* stm32cube/stm32mp1: Upgraded to version V1.5.0
* stm32cube/stm32u5: Upgraded to version V1.0.2
* Added `GigaDevice HAL module
<https://github.com/zephyrproject-rtos/hal_gigadevice>`_
MCUboot
*******
* Fixed serial recovery skipping on nrf5340.
* Fixed issue which caused that progressive's erase feature was off although was selected by Kconfig (introduced by #42c985cead).
* Added check of reset address in incoming image validation phase, see ``CONFIG_MCUBOOT_VERIFY_IMG_ADDRESS``.
* Allow image header bigger than 1 KB for encrypted images.
* Support Mbed TLS 3.0.
* stm32: watchdog support.
* many documentation improvements.
* Fixed deadlock on cryptolib selectors in Kconfig.
* Fixed support for single application slot with serial recovery.
* Added various hooks to be able to change how image data is accessed, see ``CONFIG_BOOT_IMAGE_ACCESS_HOOKS``.
* Added custom commands support in serila recovery (PERUSER_MGMT_GROUP): storage erase ``CONFIG_BOOT_MGMT_CUSTOM_STORAGE_ERASE``, custo image status ``CONFIG_BOOT_MGMT_CUSTOM_IMG_LIST``.
* Added support for direct image upload, see ``CONFIG_MCUBOOT_SERIAL_DIRECT_IMAGE_UPLOAD`` in serial recovery.
Trusted Firmware-m
******************
* Updated TF-M to 1.5.0 release, with a handful of additional cherry-picked
commits.
Documentation
*************
* A new theme is used by the Doxygen HTML pages. It is based on
`doxygen-awesome-css <https://github.com/jothepro/doxygen-awesome-css>`_
theme.
Tests and Samples
*****************
* Drivers: clock_control: Added test suite for stm32 (u5, h7).
Issue Related Items
*******************
These GitHub issues were addressed since the previous 2.7.0 tagged
release: