Skip to content

Latest commit

 

History

History
2042 lines (1506 loc) · 89.8 KB

release-notes-3.7.rst

File metadata and controls

2042 lines (1506 loc) · 89.8 KB
orphan:

Zephyr 3.7.0

We are pleased to announce the release of Zephyr version 3.7.0.

This release is the last non-maintenance 3.x release and, as such, will be the next :ref:`Long Term Support (LTS) release <release_process_lts>`.

Major enhancements with this release include:

An overview of the changes required or recommended when migrating your application from Zephyr v3.6.0 to Zephyr v3.7.0 can be found in the separate :ref:`migration guide<migration_3.7>`.

While you may refer to release notes from previous 3.x releases for a full change log, other major enhancements and changes since previous LTS release, Zephyr 2.7.0, include:

  • Added support for Picolibc as the new default C library.
  • Added support for the following types of hardware peripherals:
    • 1-Wire
    • Battery Charger
    • Cellular Modem
    • Fuel Gauge
    • GNSS
    • Hardware Spinlock
    • I3C
    • RTC (Real Time Clock)
    • SMBus
  • Added support for snippets. Snippets are common configuration settings that can be used across platforms.
  • Added support for Linkable Loadable Extensions (LLEXT).
  • Summary of breaking changes (refer to release notes and migration guides from previous release notes for more details):
    • All Zephyr public headers have been moved to :file:`include/zephyr`, meaning they need to be prefixed with <zephyr/...> when included.
    • Pinmux API has been removed. Pin control needs to be used as its replacement, refer to :ref:`pinctrl-guide` for more details.
    • The following deprecated or experimental features have been removed:
      • 6LoCAN
      • civetweb module. See Zephyr 3.7's new :ref:`http_server_interface` as a replacement.
      • tinycbor module. You may use zcbor as a replacement.

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-2024-3077 Zephyr project bug tracker GHSA-gmfv-4vfh-2mh8
  • CVE-2024-3332 Zephyr project bug tracker GHSA-jmr9-xw2v-5vf4
  • CVE-2024-4785: Under embargo until 2024-08-07
  • CVE-2024-5754: Under embargo until 2024-09-04
  • CVE-2024-5931: Under embargo until 2024-09-10
  • CVE-2024-6135: Under embargo until 2024-09-11
  • CVE-2024-6137: Under embargo until 2024-09-11
  • CVE-2024-6258: Under embargo until 2024-09-05
  • CVE-2024-6259: Under embargo until 2024-09-12
  • CVE-2024-6442: Under embargo until 2024-09-22
  • CVE-2024-6443: Under embargo until 2024-09-22
  • CVE-2024-6444: Under embargo until 2024-09-22

API Changes

Removed APIs in this release

  • The Bluetooth subsystem specific debug symbols are removed. They have been replaced with the Zephyr logging ones.
  • Removed deprecated pcie_probe and pcie_bdf_lookup functions from the PCIe APIs.
  • Removed deprecated CONFIG_EMUL_EEPROM_AT2X Kconfig option.
  • Removed pm_device_state_lock, pm_device_state_is_locked and pm_device_state_unlock functions from the Device PM APIs.
  • Removed deprecated MCUmgr transport API functions: zephyr_smp_rx_req, zephyr_smp_alloc_rsp and zephyr_smp_free_buf.

Deprecated in this release

  • SPI

Architectures

  • ARC
    • Added ARC MWDT toolchain support for ARC-V targets
    • Added HW memory barrier API support for multicore targets
    • Enabled TLS by default if C++ is used in case of ARC MWDT toolchain
    • Fixed the issue when mbedtls failed to build with ARC MWDT toolchain & minimal LibC due to incorrect define which mark support of bounds-checking interfaces C library extension
    • Fixed device deferred initialization in case of ARC MWDT toolchain
  • ARM
    • Added initial support for Cortex-M85 Core
  • ARM64
  • RISC-V
    • The fatal error message triggered from a fault now contains the callee-saved-registers states.
    • Implemented stack unwinding
  • Xtensa
    • Added support to save/restore HiFi AudioEngine registers.
    • Added support to utilize MPU.
    • Added support to automatically generate interrupt handlers.
    • Added support to generate vector table at build time to be included in the linker script.
    • Added kconfig :kconfig:option:`CONFIG_XTENSA_BREAK_ON_UNRECOVERABLE_EXCEPTIONS` to guard using break instruction for unrecoverable exceptions. Enabling the break instruction via this kconfig may result in an infinite interrupt storm which may hinder debugging efforts.
    • Fixed an issue where passing the 7th argument via syscall was handled incorrectly.
    • Fixed an issue where :c:func:`arch_user_string_nlen` accessing unmapped memory resulted in an unrecoverable exception.

Kernel

Bluetooth

  • Audio
    • Removed err from :c:struct:`bt_bap_broadcast_assistant_cb.recv_state_removed` as it was redundant.
    • The broadcast_audio_assistant sample has been renamed to bap_broadcast_assistant. The broadcast_audio_sink sample has been renamed to bap_broadcast_sink. The broadcast_audio_source sample has been renamed to bap_broadcast_source. The unicast_audio_client sample has been renamed to bap_unicast_client. The unicast_audio_server sample has been renamed to bap_unicast_server. The public_broadcast_sink sample has been renamed to pbp_public_broadcast_sink. The public_broadcast_source sample has been renamed to pbp_public_broadcast_source.
    • The CAP Commander and CAP Initiator now no longer require CAS to be discovered for BT_CAP_SET_TYPE_AD_HOC sets. This allows applications to use these APIs on e.g. BAP Unicast Servers that do not implement the CAP Acceptor role.
  • Host
    • Added Nordic UART Service (NUS), enabled by the :kconfig:option:`CONFIG_BT_ZEPHYR_NUS`. This Service exposes the ability to declare multiple instances of the GATT service, allowing multiple serial endpoints to be used for different purposes.
    • Implemented Hands-free Audio Gateway (AG), enabled by the :kconfig:option:`CONFIG_BT_HFP_AG`. It works as a device that is the gateway of the audio. The typical device acting as Audio Gateway is a cellular phone. It controls the device (Hands-free Unit), that is the remote audio input and output mechanism.
    • Implemented Advanced Audio Distribution Profile (A2DP) and Audio/Video Distribution Transport Protocol (AVDTP), A2DP is enabled by :kconfig:option:`CONFIG_BT_A2DP`, AVDTP is enabled by :kconfig:option:`CONFIG_BT_AVDTP`. They implement the protocols and procedures that realize distribution of audio content of high quality in mono, stereo, or multi-channel modes. A typical use case is the streaming of music content from a stereo music player to headphones or speakers. The audio data is compressed in a proper format for efficient use of the limited bandwidth.
    • Reworked the transmission path for data and commands. The "BT TX" thread has been removed, along with the buffer pools for HCI fragments and L2CAP segments. All communication with the Controller is now exclusively done in the system workqueue context.
    • :kconfig:option:`CONFIG_BT_PER_ADV_SYNC_TRANSFER_RECEIVER` and :kconfig:option:`CONFIG_BT_PER_ADV_SYNC_TRANSFER_SENDER` now depend on :kconfig:option:`CONFIG_BT_CONN` as they do not work without connections.
    • Improve :c:func:`bt_foreach_bond` to support Bluetooth Classic key traversal.
  • HCI Drivers
    • Completely redesigned HCI driver interface. See the Bluetooth HCI section in :ref:`migration_3.7` for more information.
    • Added support for Ambiq Apollo3 Blue series.
    • Added support for NXP RW61x.
    • Added support for Infineon CYW208XX.
    • Added support for Renesas SmartBond DA1469x.
    • Removed unmaintained B91 driver.
    • Added support for NXP IW612 on boards mimxrt1170_evkb and mimxrt1040_evk. It can be enabled by :kconfig:option:`CONFIG_BT_NXP_NW612`.

Boards & SoC Support

Build system and Infrastructure

  • CI-enabled blackbox tests were added to verify the correctness of most Twister flags.
  • A socs folder for applications has been introduced that allows for Kconfig fragments and devicetree overlays that should apply to any board target using a particular SoC and board qualifier (:github:`70418`). Support has also been added to sysbuild (:github:`71320`).
  • :ref:`Board/SoC flashing configuration<flashing-soc-board-config>` settings have been added (:github:`69748`).
  • Deprecated the global CSTD cmake property in favor of the :kconfig:option:`CONFIG_STD_C` choice to select the C Standard version. Additionally, subsystems can select a minimum required C Standard version, with, for example, :kconfig:option:`CONFIG_REQUIRES_STD_C11`.
  • Fixed issue with passing UTF-8 configs to applications using sysbuild (:github:`74152`).
  • Fixed issue whereby domain file in sysbuild projects would be loaded and used with outdated information if sysbuild configuration was changed, and west flash was ran directly after (:github:`73864`).
  • Fixed issue with Zephyr modules not being listed in sysbuild if they did not have a Kconfig file set (:github:`72070`).
  • Added sysbuild SB_CONFIG_COMPILER_WARNINGS_AS_ERRORS Kconfig option to turn on "warning as error" toolchain flags for all images, if set (:github:`70217`).
  • Fixed issue whereby files used in a project (e.g. devicetree overlays or Kconfig fragments) were not correctly watched and CMake would not reconfigure if they were changed (:github:`74655`).
  • Added flash support for Intel Hex files for the LinkServer runner.
  • Added sysbuild sysbuild/CMakeLists.txt entry point and added support for APPLICATION_CONFIG_DIR which allows for adjusting how sysbuild functions (:github:`72923`).
  • Fixed issue with armfvp find path if it contained a colon-separated list (:github:`74868`).
  • Fixed issue with version.cmake field sizes not being enforced (:github:`74357`).
  • Fixed issue with sysbuild not clearing EXTRA_CONF_FILE before processing images which prevented this option being passed on to the image (:github:`74082`).
  • Added sysbuild root support which works similarly to the existing root module, adjusting paths relative to APP_DIR (:github:`73390`).
  • Added warning/error message for blobs that are missing (:github:`73051`).
  • Fixed issue with correct python executable detection on some systems (:github:`72232`).
  • Added support for enabling LTO for whole application (:github:`69519`).
  • Fixed FILE_SUFFIX issues relating to double application of suffixes, non-application in sysbuild and variable name clashes in CMake functions (:github:`70124`, :github:`71280`).
  • Added support for new aggressive size optimisation flag (for GCC and Clang) using :kconfig:option:`CONFIG_SIZE_OPTIMIZATIONS_AGGRESSIVE` (:github:`70511`).
  • Fixed issue with printing out BUILD_VERSION if it was empty (:github:`70970`).
  • Fixed sysbuild issue of sysbuild_cache_set() cmake function wrongly detecting partial matches for de-duplication (:github:`71381`).
  • Fixed issue with detecting wrong VERSION file (:github:`71385`).
  • Added support for disabling output disassembly having the source code in using :kconfig:option:`CONFIG_OUTPUT_DISASSEMBLY_WITH_SOURCE` (:github:`71535`).
  • Twister now supports --flash-before parameter that allows flashing DUT before opening serial port (:github:`47037`).

Drivers and Sensors

  • ADC
    • Added ADC_DT_SPEC_*BY_NAME() macros to get ADC IO-channel information from DT by name.
    • Added support for voltage biasing:
      • Added a :kconfig:option:`CONFIG_ADC_CONFIGURABLE_VBIAS_PIN` selected by drivers that support voltage biasing.
      • Added a zephyr,vbias-pins property to the adc-controller base binding to describe voltage bias pins.
      • Implemented for the TI ADC114s08 ADC driver.
    • Sample changes
      • Renamed existing ADC sample to adc_dt.
      • Added a new sample called adc_sequence that shows more of the runtime :c:struct:`adc_sequence` features.
    • New ADC Drivers
      • Added driver for the ENE KB1200.
      • Added driver for the NXP GAU ADC.
    • ADI AD559x changes
      • Added support for ADI's ad5593.
      • Added I2C bus support for ADI ad559x.
      • Added configuration of internal reference voltage value to ad559x to support calls of :c:func:`adc_raw_to_millivolts()`.
      • Fixed issue with driver initialization causing improper operation in the ad559x driver regarding the availability of :kconfig:option:`CONFIG_THREAD_NAME`.
      • Improved the ADC read efficiency and validation in ad559x driver.
    • ESP32 changes
      • Updated ESP32 ADC driver to work with version 5.1 of hal_espressif.
      • Added support for DMA mode operation for ESP32S3 and ESP32C3.
    • nRF changes
      • Added support for nRF54L15 and nRF54H20 in the nrfx_saadc driver.
      • Improved the nRF SAADC driver by disabling burst mode on unused channels, avoiding freezes.
      • Fixed issue which allowed negative ADC readings in single-ended mode using the adc_nrfx_saadc.c device driver. Note that this fix prevents the nRF54H and nRF54L series from performing 8-bit resolution single-ended readings due to hardware limitations.
    • NXP LPADC changes
      • Enabled acquisition time feature in the NXP LPADC driver.
      • Added support for regulator output as reference to NXP LPADC.
      • Changed phandle type DT property nxp,reference-supply to phandle-array type DT property nxp,references in nxp,lpc-lpadc binding. The NXP LPADC driver now supports passing the reference voltage value by using nxp,references.
    • Smartbond changes
    • STM32 changes
      • Fixed various issues with DMA support in the STM32 ADC driver.
      • Added support for STM32H7R/S series.
    • Other driver changes
      • Added support for Nuvoton m2l31x in the numaker ADC driver.
      • Fixed issue with configuration register access in the ads1119 driver.
      • Fixed uninitialized value in kb1200 driver found in static analysis.
      • Fixed issue with :c:func:`adc_raw_to_millivolts` returning half the actual voltage with the tla2021 driver by correcting the reference voltage value.
    • Added support for Nuvoton Numaker M2L31X series.
  • Battery
    • Added re-charge-voltage-microvolt property to the battery binding. This allows to set limit to automatically start charging again.
  • Battery backed up RAM
    • Added support for STM32G0 and STM32H5 series.
  • CAN
  • Charger
    • Added chgin-to-sys-current-limit-microamp property to maxim,max20335-charger.
    • Added system-voltage-min-threshold-microvolt property to maxim,max20335-charger.
    • Added re-charge-threshold-microvolt property to maxim,max20335-charger.
    • Added thermistor-monitoring-mode property to maxim,max20335-charger.
  • Clock control
  • Counter
    • Added support for Ambiq Apollo3 series.
    • Added support for STM32H7R/S series.
    • Added driver for LPTMR to NXP MCXN947
    • Added the resolution property in nxp,lptmr binding to represent the maximum width in bits the LPTMR peripheral uses for its counter.
  • DAC
  • Disk
  • Display
  • DMA
    • Error callback configuration renamed to better signal enable/disable status
    • Add support to NXP MCXN947
  • DMIC
    • Added support for NXP rd_rw612_bga
  • Entropy
    • Added support for STM32H7R/S series.
  • EEPROM
  • eSPI
    • Renamed eSPI virtual wire direction macros, enum values and Kconfig to match the new terminology in eSPI 1.5 specification.
  • Ethernet
    • Introduced :kconfig:option:`CONFIG_ETH_DRIVER_RAW_MODE`. This option allows building ethernet drivers without the zephyr L2 ethernet layer.
    • Removed the ethernet-fixed-link DT binding.
    • Removed VLAN handling from ethernet drivers since it is now handled by the generic ethernet L2 code.
    • Implemented/reworked HW MAC Address filtering in the eth_mcux, eth_nxp_enet, and eth_nxp_s32_gmac, eth_stm32, and eth_nxp_s32_netc drivers.
    • New Drivers
      • Added new eth_nxp_enet_qos driver for the ethernet controller present on NXP MCXN SOCs.
      • Added support for adin1100 phy.
      • Added support for the Realtek RTL8211F phy.
    • NXP ENET driver changes
      • eth_nxp_enet driver is no longer experimental.
      • Deprecated eth_mcux driver.
      • All boards and SOCs with :dtcompatible:`nxp,kinetis-ethernet` compatible nodes reworked to use the new :dtcompatible:`nxp,enet` binding.
      • Added support for network device power management with nxp_enet driver on Kinetis platforms.
      • Converted eth_nxp_enet driver to use a dedicated workqueue for RX managed by the kernel rather than a manual infinite loop.
      • Disabled hardware checksum acceleration when IPV6 is enabled with eth_nxp_enet, since the hardware does not support accelerating ICMPv6 checksums.
      • Added support for :dtcompatible:`nxp,enet1g`.
      • Added support to use a fused MAC address for nxp_enet MAC on some platforms.
      • Fixed issue with LAA bit not being set and a confusing description of the nxp,unique-mac property used with the nxp_enet driver.
      • Fixed cache maintain being enabled when using a noncache DMA buffer in nxp_enet driver.
      • Added MMIO mappings to nxp_enet driver.
      • Clarified DSA supported with eth_nxp_enet.
    • NXP S32 ethernet changes
    • Adin2111 driver changes
      • Corrected the bitfield position of IAMSK1 TX_READY_MASK in adin2111 driver.
      • Changed adin2111 driver to always append crc32 to the end of the frame.
      • Adjusted eth_adin2111 driver to have the appropriate multicaster filter mask.
      • Fixed the "generic SPI without crc8" mode of adin2111 driver.
      • Added Open Alliance SPI protocol support to the adin2111 driver.
      • Added custom driver extension APIs for adin2111 driver.
      • Enabled support for promiscuous mode in the adin2111 driver.
      • Moved OA buffers out of device data of the adin2111 driver to save ~32KB of space when using the generic SPI protocol.
      • Fixed a build warning in eth_adin2111 driver on 64-bit platforms.
      • Various small changes to adin2111 driver.
    • STM32 ethernet driver changes
      • Added support for PTP on compatible STM32 series (STM32F7, STM32H5 and STM32H7).
      • Changed eth_stm32 to use phy APIs to access the phy to avoid collisions when multitasking.
      • Removed legacy STM32Cube HAL API support for STM32 F4, F7, and H7 series.
      • Added support for RX/TX timestamping to eth_stm32_hal driver.
    • ESP32 ethernet driver changes
      • Added support to esp32 ethernet driver to set the MAC address during runtime.
      • Updated esp32 ethernet driver to work with version 5.1 of hal_espressif.
      • Fixed build of esp32 ethernet driver when :kconfig:option:`CONFIG_NET_STATISTICS` is enabled.
      • Fixed ESP32 ethernet driver not clocking external PHY correctly over GPIO.
    • Other ethernet driver changes
      • Added link status detection to the w5500 ethernet driver, configurable via Kconfig.
      • Added ability to set MAC address at runtime with eth_liteeth driver.
      • Fixed issue in the eth_stellaris driver where it was previously not taken into account that the number of interrupts received by the driver may be less than the number of data packets received by the ethernet controller.
      • Added a devicetree property for the enc28j60 to set the RX filter.
      • Fixed ESTAT TXABRT bit not being cleared on error in the enc28j60 driver.
      • Added conditions to enable ptp_clock driver implementation for the native_posix ethernet driver when PTP subsystem is enabled.
      • Fixed DSA driver for KSZ8xxx to correctly initialize LAN devices.
      • Fixed the wrong register address being used for tail tag enable in ksz8863.
    • Phy driver changes
      • Fixed various control issues with the KSZ8081 phy driver regarding resets, autonegotiation, link detection, and missing/spamming logging messages.
      • Changed property names of the reset and interrupt gpios in the KSZ8081 DT binding.
      • Fixed bus fault in phy_mii driver when using fixed-link mode.
  • Flash
    • Added support for Ambiq Apollo3 series.
    • Added support for multiple instances of the SPI NOR driver (spi_nor.c).
    • Added preliminary support for non-erase devices with introduction of device capabilities to :c:struct:`flash_parameters` and the utility function :c:func:`flash_params_get_erase_cap` that allows to obtain the erase type provided by a device; added :c:macro:`FLASH_ERASE_C_EXPLICIT`, which is currently the only supported erase type and is set by all flash devices.
    • Added the :c:func:`flash_flatten` function that can be used on devices, with or without erase requirement, when erase has been used not for preparing a device for a random data write, but rather to remove/scramble data from that device.
    • Added the :c:func:`flash_fill` utility function which allows to write a single value across a provided range in a selected device.
    • Added support for RRAM on nrf54l15 devices.
    • Added support of non busy wait polling in STM32 OSPI driver.
    • Added support for STM32 XSPI external NOR flash driver (:dtcompatible:`st,stm32-xspi-nor`).
    • Added support for XIP on external NOR flash in STM32 OSPI, QSPI and XSPI driver.
    • STM32 OSPI driver: clk, dqs, ncs ports can now be configured by device tree configurable (see :dtcompatible:`st,stm32-ospi`).
    • Added FlexSPI support to NXP MCXN947
    • Added support for Nuvoton Numaker M2L31X series.
  • Fuel Gauge
    • max17048: Corrected voltage units from mV to uV.
  • GNSS
  • GPIO
    • Added support for Ambiq Apollo3 series.
    • Added Broadcom Set-top box(brcmstb) SoC GPIO driver.
    • Added :c:macro:`STM32_GPIO_WKUP` flag which allows to configure specific pins as wakeup source from Power Off state on STM32 L4, U5, WB, & WL SoC series.
    • Added driver for Analog Devices MAX32 SoC series.
    • Added support for Nuvoton Numaker M2L31X series.
    • Added interrupt support to the Renesas RZ/T2M GPIO driver (:dtcompatible:`renesas,rzt2m-gpio`).
  • Hardware info
    • Added device EUI64 ID support and implementation for STM32WB, STM32WBA and STM32WL series.
  • I2C
  • I2S
    • Added support for STM32H5 series.
    • Extended the MCUX Flexcomm driver to support additional channels and formats.
    • Added support for Nordic nRF54L Series.
    • Fixed divider calculations in the nRF I2S driver.
  • I3C
    • Added shell support for querying bus and CCC commands.
    • Added driver to support the I3C controller on NPCX.
    • Improvements and bug fixes on :dtcompatible:`nxp,mcux-i3c`, including handling the bus being busy more gracefully instead of simply returning errors.
  • Input
  • LED
    • Added device completion to LED shell commands and made the get_info command display colors as strings.
    • Added driver for Lumissil Microsystems (a division of ISSI) IS31FL3194 controller (:dtcompatible:`issi,is31fl3194`).
  • LED Strip
    • The chain-length and color-mapping properties have been added to all LED strip bindings.
    • The length of a strip is now checked before updating it, an error is returned if the provided data is too long.
    • A length function has been added which returns the length of the LED strip (:c:func:`led_strip_length`).
    • The update channels function is now optional and can be left unimplemented.
    • The in-gpios and output-pin properties of the respective :dtcompatible:`worldsemi,ws2812-gpio` and :dtcompatible:`worldsemi,ws2812-rpi_pico-pio` devicetree bindings have been renamed to gpios.
    • Removed CONFIG_WS2812_STRIP and CONFIG_WS2812_STRIP_DRIVER Kconfig options. They became useless after refactoring.
    • Added driver for Texas Instruments TLC59731 RGB controller.
  • LoRa
    • Added driver for Reyax LoRa module
  • Mailbox
    • Added support for HSEM based STM32 driver.
  • MDIO
    • Made the bus_enable and bus_disable functions optional for drivers to implement, and removed empty implementation from many drivers.
    • Added NXP ENET QOS MDIO controller driver.
    • Fixed but with NXP ENET MDIO driver blocking the system workqueue.
    • :kconfig:option:`CONFIG_MDIO_NXP_ENET_TIMEOUT` units change to microseconds.
    • Added support for STM32 MDIO controller driver.
  • MFD
  • Modem
    • Removed deprecated GSM_PPP driver along with its dts compatible zephyr,gsm-ppp.
    • Removed deprecated UART_MUX and GSM_MUX previously used by GSM_PPP.
    • Removed support for dts compatible zephyr,gsm-ppp from MODEM_CELLULAR driver.
    • Removed integration with UART_MUX from MODEM_IFACE_UART_INTERRUPT module.
    • Removed integration with UART_MUX from MODEM_SHELL module.
    • Implemented modem pipelinks in MODEM_CELLULAR driver for additional DLCI channels available by the different modems. This includes generic AT mode DLCI channels, named user_pipe_<index> and DLCI channels reserved for GNSS tunneling named gnss_pipe.
    • Added new set of shell commands for sending AT commands directly to a modem using the newly implemented modem pipelinks. The implementation of the new shell commands is both functional and together with the MODEM_CELLULAR driver will provide an example of how to implement and use the modem pipelink module.
  • PCIE
    • pcie_bdf_lookup and pcie_probe have been removed since they have been deprecated since v3.3.0.
  • MIPI-DBI
    • Added release API
    • Added support for mode selection via the device tree
  • MSPI
    • Add the new experimental :ref:`MSPI(Multi-bit SPI) <mspi_api>` API, enabling support for advanced SPI controllers and peripherals that typically require command, address and data phases as well as variable latency for a transfer. The API now supports from single wire SDR up to hex wires DDR communication in sync/async ways.
    • Added MSPI bus emulator under bus emulators to showcase the implementation of the MSPI API.
    • Added MSPI flash device emulator to showcase the use of the MSPI API and interfacing with MSPI bus controllers.
    • Added APS6404L QPI pSRAM device driver.
    • Added ATXP032 OPI NOR flash device driver.
    • Added Ambiq Apollo3p MSPI controller driver.
    • Added :zephyr:code-sample:`mspi-async` and :zephyr:code-sample:`mspi-flash` samples to showcase the use of MSPI device drivers.
    • Added mspi/api and mspi/flash testcase for developers to check their implementations.
  • Pin control
    • Added driver for Renesas RA8 series
    • Added driver for Infineon PSoC6 (legacy)
    • Added driver for Analog Devices MAX32 SoC series.
    • Added driver for Ambiq Apollo3
    • Added driver for ENE KB1200
    • Added driver for NXP RW
    • Espressif driver now supports ESP32C6
    • STM32 driver now supports remap functionality for STM32C0
    • Added support for Nuvoton Numaker M2L31X series.
  • PWM
    • Added support for STM32H7R/S series.
    • Added a Add QTMR PWM driver for NXP imxrt11xx
    • Made the NXP MCUX PWM driver thread safe
    • Fix :zephyr:code-sample:`pwm-blinky` code sample to demonstrate PWM support for :zephyr:board:`beagleconnect_freedom`.
    • Added driver for ENE KB1200.
    • Added support for Nordic nRF54H and nRF54L Series SoCs.
    • Added support for Nuvoton Numaker M2L31X series.
  • Regulators
  • Reset
    • Added driver for reset controller on Nuvoton NPCX chips.
    • Added reset controller driver for NXP SYSCON.
    • Added reset controller driver for NXP RSTCTL.
    • Added support for Nuvoton Numaker M2L31X series.
  • RTC
    • Added Raspberry Pi Pico RTC driver.
    • Added support for :kconfig:option:`CONFIG_RTC_ALARM` on all STM32 MCU series (except STM32F1).
    • Added support for Nuvoton Numaker M2L31X series.
  • RTIO
    • Move lock-free queues out of RTIO into lib, dropping the rtio_ prefix to SPSC and MPSC queues.
    • Added tests and fixed bugs related to chained callback requests.
    • Wrapper around p4wq (rtio workq) created to go from blocking to non-blocking behavior in cases where native asynchronous RTIO functionality is unavailable.
  • SDHC
  • Sensors
  • Serial
    • Added driver to support UART over Bluetooth LE using NUS (Nordic UART Service). This driver enables using Bluetooth as a transport to all the subsystems that are currently supported by UART (e.g: Console, Shell, Logging).
    • Added :kconfig:option:`CONFIG_NOCACHE_MEMORY` support in async DMA mode in STM32 driver. It is now possible to use UART in DMA mode with :kconfig:option:`CONFIG_DCACHE` enabled on STM32 F7 & H7 SoC series, as long as DMA buffers are placed in an uncached memory section.
    • Added support for STM32H7R/S series.
    • Added support for HSCIF (High Speed Serial Communication Interface with FIFO) in the UART driver for Renesas RCar platforms.
    • Added driver for ENE KB1200 UART.
    • Added driver for UART on Analog Devices MAX32 series microcontrollers.
    • Added driver for UART on Renesas RA8 devices.
    • uart_emul (:dtcompatible:`zephyr,uart-emul`):
      • Added support for asynchronous API for the emulated UART driver.
    • uart_esp32 (:dtcompatible:`espressif,esp32-uart`):
      • Added support to invert TX and RX pin signals.
      • Added support for ESP32C6 SoC.
    • uart_native_tty (:dtcompatible:`zephyr,native-tty-uart`):
      • Added support to emulate interrupt driven UART.
    • uart_mcux_lpuart (:dtcompatible:`nxp,kinetis-lpuart`):
      • Added support for single wire half-duplex communication.
      • Added support to invert TX and RX pin signals.
    • uart_npcx (:dtcompatible:`nuvoton,npcx-uart`):
      • Added support for asynchronous API.
      • Added support for baud rate of 3MHz.
    • uart_nrfx_uarte (:dtcompatible:`nordic,nrf-uarte`):
      • Added support to put TX and RX pins into low power mode when UART is not active.
    • uart_nrfx_uarte2 (:dtcompatible:`nordic,nrf-uarte`):
      • Prevents UART from transmitting when device is suspended.
      • Fixed some events not being triggered.
    • uart_pl011 (:dtcompatible:`arm,pl011`):
      • Added support for runtime configuration.
      • Added support for reset device.
      • Added support to use clock control to determine frequency.
      • Added support for hardware flow control.
      • Added support for UART on Ambiq Apollo3 SoC.
    • uart_smartbond (:dtcompatible:`renesas,smartbond-uart`):
      • Added support for power management.
      • Added support to wake up via DTR and RX lines.
    • uart_stm32 (:dtcompatible:`st,stm32-uart`):
      • Added support to identify if DMA buffers are in data cache or non-cacheable memory.
    • Added support for Nuvoton Numaker M2L31X series.
  • SPI
  • USB
    • Added UDC shim driver for NXP EHCI and IP3511 USB controller.
    • Various fixes and improvements in IT82xx2, DWC2, STM32, RP2040, Smartbond USB controller drivers.
  • Video
    • Added support for STM32 Digital camera interface (DCMI) driver (:dtcompatible:`st,stm32-dcmi`).
    • Enabled NXP USB Device controllers
    • Added support for the ov7670 camera
    • Added support for the ov5640 camera
    • Added CSI-2 MIPI driver for NXP MCUX
    • Added support for DVP FPC 24-pins mt9m114 camera module shield
  • Watchdog
  • Wi-Fi
    • Fixed message parsing for esp-at.
    • Fixed esp-at connect failures.
    • Implement :c:func:`bind` and :c:func:`recvfrom` for UDP sockets for esp-at.
    • Added option for setting maximum data size for eswifi.
    • Fixed ESP32 Wi-Fi driver memory leak.

Networking

  • ARP:
    • Added support for gratuitous ARP transmission.
    • Fixed a possible deadlock between TX and RX threads within ARP module.
    • Fixed a possible ARP entry leak.
    • Improved ARP debug logs.
  • CoAP:
  • Connection manager:
  • DHCPv4:
  • DHCPv6:
  • DNS/mDNS/LLMNR:
    • Fixed an issue where the mDNS Responder did not work when the mDNS Resolver was also enabled. The mDNS Resolver and mDNS Responder can now be used simultaneously.
    • Reworked LLMNR and mDNS responders, and DNS resolver to use sockets and socket services API.
    • Added ANY query resource type.
    • Added support for mDNS to provide records in runtime.
    • Added support for caching DNS records.
    • Fixed error codes returned when socket creation fails, and when all results have been returned.
    • Fixed DNS retransmission timeout calculation.
  • gPTP/PTP:
    • Added support for IEEE 1588-2019 PTP.
    • Added support for SO_TIMESTAMPING socket option to get timestamping information in socket ancillary data.
    • Fixed race condition on timestamp callback.
    • Fixed clock master sync send SM if we are not the GM clock.
  • HTTP:
    • Added HTTP/2 server library and sample application with support for static, dynamic and Websocket resource types.
    • Added HTTP shell component.
    • Improved HTTP client error reporting.
    • Moved HTTP client library out of experimental.
    • Added POLLOUT monitoring when sending response in HTTP client.
  • IPSP:
    • Removed IPSP support. CONFIG_NET_L2_BT does not exist anymore.
  • IPv4:
    • Implemented IPv4 Address Conflict Detection, according to RFC 5227.
    • Added :c:func:`net_ipv4_is_private_addr` API function.
    • IPv4 netmask is now set individually for each address instead of being set for the whole interface.
    • Other minor fixes and improvements.
  • IPv6:
  • LwM2M:
    • Added new API functions:
    • Added new offset parameter to :c:type:`lwm2m_engine_set_data_cb_t` callback type. This affects post write and validate callbacks as well as some firmware callbacks.
    • Fixed block context not being reset upon receiving block number 0 in block transfer.
    • Fixed block size negotiation with the server in block transfer.
    • Added :kconfig:option:`CONFIG_LWM2M_ENGINE_ALWAYS_REPORT_OBJ_VERSION` which allows to force the client to always report object version.
    • Block transfer is now possible with resource w/o registered callback.
    • Fixed a bug, where an empty ACK sent from the registered callback would not be sent immediately.
    • Removed deprecated API functions and definitions.
    • Other minor fixes and improvements.
  • Misc:
    • Improved overall networking API Doxygen documentation.
    • Converted TFTP library to use zsock_* API.
    • Added SNTP :c:func:`sntp_simple_addr` API function to perform SNTP query when the server IP address is already known.
    • Added :kconfig:option:`CONFIG_NET_TC_THREAD_PRIO_CUSTOM` allowing to override default traffic class threads priority.
    • Fixed the IPv6 event handler initialization order in net config library.
    • Reworked telnet shell backend to use sockets and socket services API.
    • Fixed double dereference of IGMP packets.
    • Moved from native_posix to native_sim support in various tests and samples.
    • Added support for copying user data in network buffers.
    • Fixed cloning of zero sized network buffers.
    • Added net_buf APIs to handle 40 bit data format.
    • Added receive callback for dummy L2, applicable in certain use cases (for example, packet capture).
    • Implemented pseudo interface, a.k.a "any" interface for packet capture use case.
    • Added cooked mode capture support. This allows non-IP based network data capture.
    • Generate network events when starting or stopping packet capture.
    • Removed obsolete and unused tcp_first_msg :c:struct:`net_pkt` flag.
    • Added new :zephyr:code-sample:`secure-mqtt-sensor-actuator` sample.
    • Added support for partial L3 and L4 checksum offloading.
    • Updated :zephyr:code-sample:`mqtt-azure` with new CA certificates, the current on expires soon.
    • Added new driver for Native Simulator offloaded sockets.
    • Overhauled VLAN support to use Virtual network interfaces.
    • Added statistics collection for Virtual network interfaces.
    • Fixed system workqueue block in :c:func:`mgmt_event_work_handler` when :kconfig:option:`CONFIG_NET_MGMT_EVENT_SYSTEM_WORKQUEUE` is enabled.
  • MQTT:
    • Added ALPN support for MQTT TLS backend.
    • Added user data field in :c:struct:`mqtt_client` context structure.
    • Fixed a potential socket leak in MQTT Websockets transport.
  • Network Interface:
  • OpenThread
    • Removed deprecated openthread_set_state_changed_cb() function.
    • Added implementation of BLE TCAT advertisement API.
  • PPP
    • Removed deprecated gsm_modem driver and sample.
    • Optimized memory allocation in PPP driver.
    • Misc improvements in the :zephyr:code-sample:`cellular-modem` sample
    • Added PPP low level packet capture support.
  • Shell:
    • Added net ipv4 gateway command to set IPv4 gateway address.
    • Added argument validation in network shell macros.
    • Fixed net_mgmt sockets information printout.
    • Reworked VLAN information printout.
    • Added option to set random MAC address with net iface set_mac command.
    • Added multicast join status when printing multicast address information.
  • Sockets:
  • Syslog:
  • TCP:
    • Fixed possible deadlock when accepting new TCP connection.
    • Fixed ACK number verification during connection teardown.
    • Fixed a bug, where data bytes included in FIN packet were ignored.
    • Fixed a possible TCP context leak in case initial SYN packet transmission failed.
    • Deprecated :kconfig:option:`CONFIG_NET_TCP_ACK_TIMEOUT` as it was redundant with other configs.
    • Improved debug logs, so that they're easier to follow under heavy load.
    • ISN generation now uses SHA-256 instead of MD5. Moreover, it now relies on PSA APIs instead of legacy Mbed TLS functions for hash computation.
    • Improved ACK reply logic in case no PSH flag is present to reduce redundant ACKs.
  • Websocket:
  • Wi-Fi:
    • Reduce memory usage of 5 GHz channel list.
    • Added channel validity check in AP mode.
    • Added support for BSSID configuration in connect call.
    • Wifi shell help text fixes. Option parsing fixes.
    • Support WPA auto personal security mode.
    • Collect unicast received/sent network packet statistics.
    • Added support for configuring RTS threshold. With this, users can set the RTS threshold value or disable the RTS mechanism.
    • Added support for configuring AP parameters. With this, users can set AP parameters at build and run time.
    • Added support to configure max_inactivity BSS parameter. Users can set this both build and runtime duration to control the maximum time duration after which AP may disconnect a STA due to inactivity from STA.
    • Added support to configure inactivity_poll BSS parameter. Users can set build only AP parameter to control whether AP may poll the STA before throwing away STA due to inactivity.
    • Added support to configure max_num_sta BSS parameter. Users can set this both build and run time parameter to control the maximum number of STA entries.
  • zperf:
    • Fixed IP_TOS and IPV6_TCLASS options handling in zperf.
    • Fixed throughput calculation during long zperf sessions.
    • Fixed error on TCP upload session end in case multicast IP address was used.
    • Fixed a bug, where IPv6 socket was bound with IPv4 address, giving error.
    • Added an option to specify the network interface to use during zperf sessions.
    • Added a new ZPERF_SESSION_PERIODIC_RESULT event for periodic updates during TCP upload sessions.
    • Fixed possible socket leak in case of errors during zperf session.
    • Improved performance in the default configuration for the zperf sample.

USB

  • New USB device stack:
    • Added support for HID devices
    • Introduced speed-specific configurations and made high-speed support compliant with the USB2.0 specification
    • Added notification support and initial BOS support

Devicetree

Kconfig

  • Added a substring Kconfig preprocessor function.
  • Added a dt_node_ph_prop_path Kconfig preprocessor function.
  • Added a dt_compat_any_has_prop Kconfig preprocessor function.

Libraries / Subsystems

HALs

  • Nordic
    • Updated nrfx to version 3.5.0.
    • Added nRF Services (nrfs) library.
  • STM32
    • Updated STM32F0 to cube version V1.11.5.
    • Updated STM32F3 to cube version V1.11.5.
    • Updated STM32F4 to cube version V1.28.0.
    • Updated STM32F7 to cube version V1.17.2.
    • Updated STM32G0 to cube version V1.6.2.
    • Updated STM32G4 to cube version V1.5.2.
    • Updated STM32H5 to cube version V1.2.0.
    • Updated STM32H7 to cube version V1.11.2.
    • Updated STM32L5 to cube version V1.5.1.
    • Updated STM32U5 to cube version V1.5.0.
    • Updated STM32WB to cube version V1.19.1.
    • Updated STM32WBA to cube version V1.3.1.
    • Added STM32H7R/S with cube version V1.0.0.
  • ADI
    • Introduced the hal_adi module, which is a subset of the Maxim Software Development Kit (MSDK) that contains device header files and bare metal peripheral drivers (:github:`72391`).
  • Espressif
    • Updated HAL to version v5.1, which has new SoCs low-level files.

MCUboot

  • Fixed memory leak in bootutil HKDF implementation
  • Fixed enforcing TLV entries to be protected
  • Fixed disabling instruction/data caches
  • Fixed estimated image overhead size calculation
  • Fixed issue with swap-move algorithm failing to validate multiple-images
  • Fixed align script error in imgtool
  • Fixed img verify for hex file format in imgtool
  • Fixed issue with reading the flash image reset vector
  • Fixed too-early check_config.h include in mbedtls
  • Refactored image dependency functions to reduce code size
  • Added MCUboot support for ESP32-C6
  • Added optional MCUboot boot banner
  • Added TLV querying for protected region
  • Added using builtin keys for verification in bootutil
  • Added builtin ECDSA key support for PSA Crypto backend
  • Added OVERWRITE_ONLY_KEEP_BACKUP option for secondary images
  • Added defines for SOC_FLASH_0_ID and SPI_FLASH_0_ID
  • Fixed ASN.1 support for mbedtls version >= 3.1
  • Fixed bootutil signed/unsigned comparison in boot_read_enc_key
  • Updated imgtool version.py to take command line arguments
  • Added imgtool improvements to dumpinfo
  • Fixed various imgtool dumpinfo issues
  • Fixed imgtool verify command for edcsa-p384 signed images
  • Added support for NXP MCXN947
  • The MCUboot version in this release is version 2.1.0+0-dev.

OSDP

  • Fixed issue in CP secure channel handshake where R-MAC can be reverted to an old one by a rogue PD sending an out-of-order secure channel response resulting in a replay attack.

Trusted Firmware-M

LVGL

LVGL was updated to 8.4.0. Release notes can be found at: https://docs.lvgl.io/8.4/CHANGELOG.html#v8-4-0-19-march-2024

Additionally, the following changes in Zephyr were done:

  • Added support to place memory pool buffers in .lvgl_heap section by enabling :kconfig:option:`CONFIG_LV_Z_MEMORY_POOL_CUSTOM_SECTION`
  • Removed kscan-based pointer input wrapper code.
  • Corrected encoder button behavior to emit LV_KEY_ENTER events correctly.
  • Improved handling for :samp:`invert-{x,y}` and swap-xy configurations.
  • Added LV_MEM_CUSTOM_FREE call on file closure.
  • Added missing Kconfig stubs for DMA2D symbols.
  • Integrated support for LVGL rounder callback function.

Tests and Samples

  • Added snippet for easily enabling UART over Bluetooth LE by passing -S nus-console during west build. This snippet sets the :kconfig:option:`CONFIG_BT_ZEPHYR_NUS_AUTO_START_BLUETOOTH` which allows non-Bluetooth samples that use the UART APIs to run without modifications (e.g.: Console and Logging examples).
  • Removed GSM_PPP specific configuration overlays from samples net/cloud/tagoio and net/mgmt/updatehub. The GSM_PPP device driver has been deprecated and removed. The new MODEM_CELLULAR device driver which replaces it uses the native networking stack and PM subsystem, which like ethernet, requires no application specific actions to set up networking.
  • Removed net/gsm_modem sample as the GSM_PPP device driver it depended on has been deprecated and removed. The sample has been replaced by the sample net/cellular_modem based on the MODEM_CELLULAR device driver.
  • BT LE Coded PHY is now runtime tested in CI with the nrf5x bsim targets.
  • External ethernet network interfaces have been disabled in the tests/net tests, since these tests are meant to use simulated network interfaces.

Issue Related Items

Known Issues