:orphan:

.. _zephyr_3.7:

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:

* A new, completely :ref:`overhauled hardware model <hw_model_v2>` has been introduced.
  It changes the way both SoCs and boards are named, defined and constructed in Zephyr.
  Additional information can be found in the :ref:`board_porting_guide`.
* A long-awaited :ref:`HTTP Server <http_server_interface>` library, and associated service API,
  allow to easily implement HTTP/1.1 and HTTP/2 servers in Zephyr. Resources can be registered
  statically or dynamically, and WebSocket support is included.
* :ref:`POSIX support <posix_support>` has been extended, with most Options of the IEEE 1003-2017
  :ref:`System Interfaces <posix_system_interfaces_required>` receiving support, as well as most
  Options and Option groups required for :ref:`PSE51 <posix_aep_pse51>`,
  :ref:`PSE52 <posix_aep_pse52>`, and :ref:`PSE53 <posix_aep_pse53>`.
* Bluetooth Host has been extended with support for the Nordic UART Service (NUS), Hands-free Audio
  Gateway (AG), Advanced Audio Distribution Profile (A2DP), and Audio/Video Distribution Transport
  Protocol (AVDTP).
* Sensor abstraction model has been overhauled to adopt a
  :ref:`read-then-decode approach <sensor-read-and-decode>` that enables more types of sensors and
  data flows than the previous fetch/get APIs.
* A new :ref:`LLEXT Extension Developer Kit (EDK) <llext_build_edk>` makes it easier to develop and
  integrate custom extensions into Zephyr, including outside of the Zephyr tree.
* :ref:`Native simulator <native_sim>` now supports leveraging the native host networking stack
  without having to rely on a complex setup of the host environment.
* Trusted Firmware-M (TF-M) 2.1.0 and Mbed TLS 3.6.0 have been integrated into Zephyr.
  Both of these versions are LTS releases. What's more, :ref:`psa_crypto` has been adopted as a replacement
  for TinyCrypt and provides enhanced security and performance.
* A new experimental implementation of the :ref:`Precision Time Protocol <ptp_interface>` (PTP, IEEE
  1588) allows to synchronize time across devices with sub-microsecond accuracy.
* New documentation pages have been introduced to help developers setup their local development
  environment for :ref:`vscode_ide` and :ref:`clion_ide`.

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
  <https://github.com/zephyrproject-rtos/zephyr/security/advisories/GHSA-gmfv-4vfh-2mh8>`_

* CVE-2024-3332  `Zephyr project bug tracker GHSA-jmr9-xw2v-5vf4
  <https://github.com/zephyrproject-rtos/zephyr/security/advisories/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
==========================

 * Bluetooth advertiser options :code:`BT_LE_ADV_OPT_USE_NAME` and
   :code:`BT_LE_ADV_OPT_FORCE_NAME_IN_AD` are now deprecated. That means the following macro are
   deprecated:

    * :c:macro:`BT_LE_ADV_CONN_NAME`
    * :c:macro:`BT_LE_ADV_CONN_NAME_AD`
    * :c:macro:`BT_LE_ADV_NCONN_NAME`
    * :c:macro:`BT_LE_EXT_ADV_CONN_NAME`
    * :c:macro:`BT_LE_EXT_ADV_SCAN_NAME`
    * :c:macro:`BT_LE_EXT_ADV_NCONN_NAME`
    * :c:macro:`BT_LE_EXT_ADV_CODED_NCONN_NAME`

   Application developers will now need to set the advertised name themselves by updating the
   advertising data or the scan response data.

* CAN

  * Deprecated the :c:func:`can_calc_prescaler` API function, as it allows for bitrate
    errors. Bitrate errors between nodes on the same network leads to them drifting apart after the
    start-of-frame (SOF) synchronization has taken place, leading to bus errors.
  * Deprecated the :c:func:`can_get_min_bitrate` and :c:func:`can_get_max_bitrate` API functions in
    favor of :c:func:`can_get_bitrate_min` and :c:func:`can_get_bitrate_max`.
  * Deprecated the :c:macro:`CAN_MAX_STD_ID` and :c:macro:`CAN_MAX_EXT_ID` macros in favor of
    :c:macro:`CAN_STD_ID_MASK` and :c:macro:`CAN_EXT_ID_MASK`.

* PM

  * Deprecated :kconfig:option:`CONFIG_PM_DEVICE_RUNTIME_EXCLUSIVE`. Similar behavior can be achieved
    using :kconfig:option:`CONFIG_PM_DEVICE_SYSTEM_MANAGED`.

.. _zephyr_3.7_posix_api_deprecations:

* POSIX API

  * Deprecated :c:macro:`PTHREAD_BARRIER_DEFINE` has been removed.
  * Deprecated :c:macro:`EFD_IN_USE` and :c:macro:`EFD_FLAGS_SET` have been removed.

  * In efforts to use Kconfig options that map directly to the Options and Option Groups in
    IEEE 1003.1-2017, the following Kconfig options have been deprecated (replaced by):

    * :kconfig:option:`CONFIG_EVENTFD_MAX` (:kconfig:option:`CONFIG_ZVFS_EVENTFD_MAX`)
    * :kconfig:option:`CONFIG_FNMATCH` (:kconfig:option:`CONFIG_POSIX_C_LIB_EXT`)
    * :kconfig:option:`CONFIG_GETOPT` (:kconfig:option:`CONFIG_POSIX_C_LIB_EXT`)
    * :kconfig:option:`CONFIG_MAX_PTHREAD_COUNT` (:kconfig:option:`CONFIG_POSIX_THREAD_THREADS_MAX`)
    * :kconfig:option:`CONFIG_MAX_PTHREAD_KEY_COUNT` (:kconfig:option:`CONFIG_POSIX_THREAD_KEYS_MAX`)
    * :kconfig:option:`CONFIG_MAX_TIMER_COUNT` (:kconfig:option:`CONFIG_POSIX_TIMER_MAX`)
    * :kconfig:option:`CONFIG_POSIX_LIMITS_RTSIG_MAX` (:kconfig:option:`CONFIG_POSIX_RTSIG_MAX`)
    * :kconfig:option:`CONFIG_POSIX_CLOCK` (:kconfig:option:`CONFIG_POSIX_CLOCK_SELECTION`,
      :kconfig:option:`CONFIG_POSIX_CPUTIME`, :kconfig:option:`CONFIG_POSIX_MONOTONIC_CLOCK`,
      :kconfig:option:`CONFIG_POSIX_TIMERS`, and :kconfig:option:`CONFIG_POSIX_TIMEOUTS`)
    * :kconfig:option:`CONFIG_POSIX_FS` (:kconfig:option:`CONFIG_POSIX_FILE_SYSTEM`)
    * :kconfig:option:`CONFIG_POSIX_MAX_FDS` (:kconfig:option:`CONFIG_POSIX_OPEN_MAX` and
      :kconfig:option:`CONFIG_ZVFS_OPEN_MAX`)
    * :kconfig:option:`CONFIG_POSIX_MAX_OPEN_FILES` (:kconfig:option:`CONFIG_POSIX_OPEN_MAX` and
      :kconfig:option:`CONFIG_ZVFS_OPEN_MAX`)
    * :kconfig:option:`CONFIG_POSIX_MQUEUE` (:kconfig:option:`CONFIG_POSIX_MESSAGE_PASSING`)
    * :kconfig:option:`CONFIG_POSIX_PUTMSG` (:kconfig:option:`CONFIG_XOPEN_STREAMS`)
    * :kconfig:option:`CONFIG_POSIX_SIGNAL` (:kconfig:option:`CONFIG_POSIX_SIGNALS`)
    * :kconfig:option:`CONFIG_POSIX_SYSCONF` (:kconfig:option:`CONFIG_POSIX_SINGLE_PROCESS`)
    * :kconfig:option:`CONFIG_POSIX_UNAME` (:kconfig:option:`CONFIG_POSIX_SINGLE_PROCESS`)
    * :kconfig:option:`CONFIG_PTHREAD` (:kconfig:option:`CONFIG_POSIX_THREADS`)
    * :kconfig:option:`CONFIG_PTHREAD_BARRIER` (:kconfig:option:`CONFIG_POSIX_BARRIERS`)
    * :kconfig:option:`CONFIG_PTHREAD_COND` (:kconfig:option:`CONFIG_POSIX_THREADS`)
    * :kconfig:option:`CONFIG_PTHREAD_IPC` (:kconfig:option:`CONFIG_POSIX_THREADS`)
    * :kconfig:option:`CONFIG_PTHREAD_KEY` (:kconfig:option:`CONFIG_POSIX_THREADS`)
    * :kconfig:option:`CONFIG_PTHREAD_MUTEX` (:kconfig:option:`CONFIG_POSIX_THREADS`)
    * :kconfig:option:`CONFIG_PTHREAD_RWLOCK` (:kconfig:option:`CONFIG_POSIX_READER_WRITER_LOCKS`)
    * :kconfig:option:`CONFIG_PTHREAD_SPINLOCK` (:kconfig:option:`CONFIG_POSIX_SPIN_LOCKS`)
    * :kconfig:option:`CONFIG_SEM_NAMELEN_MAX` (:kconfig:option:`CONFIG_POSIX_SEM_NAMELEN_MAX`)
    * :kconfig:option:`CONFIG_SEM_VALUE_MAX` (:kconfig:option:`CONFIG_POSIX_SEM_VALUE_MAX`)
    * :kconfig:option:`CONFIG_TIMER` (:kconfig:option:`CONFIG_POSIX_TIMERS`)
    * :kconfig:option:`CONFIG_TIMER_DELAYTIMER_MAX` (:kconfig:option:`CONFIG_POSIX_DELAYTIMER_MAX`)

    Please see the :ref:`POSIX API migration guide <zephyr_3.7_posix_api_migration>`.

 * SPI

  * Deprecated :c:func:`spi_is_ready` API function has been removed.
  * Deprecated :c:func:`spi_transceive_async` API function has been removed.
  * Deprecated :c:func:`spi_read_async` API function has been removed.
  * Deprecated :c:func:`spi_write_async` API function has been removed.

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

  * Implemented symbol names in the backtraces, enable by selecting :kconfig:option:`CONFIG_SYMTAB`

  * Add compiler tuning for Cortex-R82

* RISC-V

  * The fatal error message triggered from a fault now contains the callee-saved-registers states.

  * Implemented stack unwinding

    * Frame-pointer can be selected to enable precise stack traces at the expense of slightly
      increased size and decreased speed.

    * Symbol names can be enabled by selecting :kconfig:option:`CONFIG_EXCEPTION_STACK_TRACE_SYMTAB`

* 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
******

  * Added :c:func:`k_uptime_seconds` function to simplify ``k_uptime_get() / 1000`` usage.

  * Added :c:func:`k_realloc`, that uses kernel heap to implement traditional :c:func:`realloc`
    semantics.

  * Devices can now store devicetree metadata such as nodelabels by turning on
    :kconfig:option:`CONFIG_DEVICE_DT_METADATA`. This option may be useful in
    e.g. shells as devices can be obtained using human-friendly names thanks to
    APIs like :c:func:`device_get_by_dt_nodelabel`.

  * Any device initialization can be deferred if its associated devicetree node
    has the special ``zephyr,deferred-init`` property set. The device can be
    initialized later in time by using :c:func:`device_init`.

  * The declaration of statically allocated thread stacks has been updated to utilize
    :c:macro:`K_THREAD_STACK_LEN` for both single thread stack declaration and array thread
    stack declarations. This ensures correct alignment for all thread stacks. For user
    threads, this may increase the size of the statically allocated stack objects depending
    on architecture alignment requirements.

  * Fix an edge case deadlock in :c:func:`k_thread_abort` (and join)
    where racing ISRs on SMP systems could become stuck spinning to
    signal each other's interrupted threads.

  * Fix a bug where :kconfig:option:`CONFIG_SCHED_SCALABLE` and
    :kconfig:option:`CONFIG_SCHED_DEADLINE` would corrupt the
    scheduling queue when used together.

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
    :code:`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
********************

* Added support for these SoC series:

  * Added support for Ambiq Apollo3 Blue and Apollo3 Blue Plus SoC series.
  * Added support for Synopsys ARC-V RMX1xx simulation platform.
  * Added support for STM32H7R/S SoC series.
  * Added support for NXP mke15z7, mke17z7, mke17z9, MCXNx4x, RW61x
  * Added support for Analog Devices MAX32 SoC series.
  * Added support for Infineon Technologies AIROC |trade| CYW20829 Bluetooth LE SoC series.
  * Added support for MediaTek MT8195 Audio DSPs
  * Added support for Nuvoton Numaker M2L31X SoC series.
  * Added support for the Microchip PolarFire ICICLE Kit SMP variant.
  * Added support for Renesas RA8 series SoC.

* Made these changes in other SoC series:

  * Intel ACE Audio DSP: Use dedicated registers to report boot status instead of arbitrary memory.
  * ITE: Rename the Kconfig symbol for all ITE SoC variants.
  * STM32: Enabled ART Accelerator, I-cache, D-cache and prefetch on compatible series.
  * STM32H5: Added support for Stop mode and :kconfig:option:`CONFIG_PM`.
  * STM32WL: Decreased Sub-GHz SPI frequency from 12 to 8MHz.
  * STM32C0: Added support for :kconfig:option:`CONFIG_POWEROFF`.
  * STM32U5: Added support for Stop3 mode.
  * Synopsys:

    * nsim: split nsim platform for arc_classic (ARCv2 and ARCv3 ISA based) and arc_v (RISC-V ISA based)
    * nsim/nsim_hs5x/smp: align sys clock frequency with other SMP nSIM configs

  * NXP IMX8M: added resource domain controller support
  * NXP s32k146: set RTC clock source to internal oscillator
  * GD32F4XX: Fixed an incorrect uart4 irq number.
  * Nordic nRF54L: Added support for the FLPR (fast lightweight processor) RISC-V CPU.
  * Espressif: Removed idf-bootloader dependency from all ESP32 SoC variants.
  * Espressif: Added Simple boot support for ESP32 SoC variants, which allows loading application
    using a single binary image without a 2nd stage bootloader.
  * Espressif: Re-worked and optimized all SoCs memory map.
  * LiteX:

    * Added support for :c:func:`sys_arch_reboot()`.
    * :kconfig:option:`CONFIG_RISCV_ISA_EXT_A` is no longer erroneously y-selected.
  * rp2040: The proprietary UART driver has been discontinued and replaced with PL011.

  * Renesas RZ/T2M: Added default values for System Clock Control register.

* Added support for these boards:

  * Added support for :zephyr:board:`Ambiq Apollo3 Blue board <apollo3_evb>`: ``apollo3_evb``.
  * Added support for :zephyr:board:`Ambiq Apollo3 Blue Plus board <apollo3p_evb>`: ``apollo3p_evb``.
  * Added support for :zephyr:board:`Raspberry Pi 5 board <rpi_5>`: ``rpi_5``.
  * Added support for :zephyr:board:`Seeed Studio XIAO RP2040 board <xiao_rp2040>`: ``xiao_rp2040``.
  * Added support for :zephyr:board:`Mikroe RA4M1 Clicker board <mikroe_clicker_ra4m1>`: ``mikroe_clicker_ra4m1``.
  * Added support for :zephyr:board:`Arduino UNO R4 WiFi board <arduino_uno_r4>`: ``arduino_uno_r4_wifi``.
  * Added support for :zephyr:board:`Renesas EK-RA8M1 board <ek_ra8m1>`: ``ek_ra8m1``.
  * Added support for :zephyr:board:`ST Nucleo H533RE <nucleo_h533re>`: ``nucleo_h533re``.
  * Added support for :zephyr:board:`ST STM32C0116-DK Discovery Kit <stm32c0116_dk>`: ``stm32c0116_dk``.
  * Added support for :zephyr:board:`ST STM32H745I Discovery <stm32h745i_disco>`: ``stm32h745i_disco``.
  * Added support for :zephyr:board:`ST STM32H7S78-DK Discovery <stm32h7s78_dk>`: ``stm32h7s78_dk``.
  * Added support for :zephyr:board:`ST STM32L152CDISCOVERY board <stm32l1_disco>`: ``stm32l152c_disco``.
  * Added support for :zephyr:board:`ST STEVAL STWINBX1 Development kit <steval_stwinbx1>`: ``steval_stwinbx1``.
  * Added support for NXP boards: ``frdm_mcxn947``, ``ke17z512``, ``rd_rw612_bga``, ``frdm_rw612``, ``frdm_ke15z``, ``frdm_ke17z``
  * Added support for :zephyr:board:`Synopsys ARC-V RMX1xx nSIM-based simulation platform <nsim_arc_v>`: ``nsim_arc_v/rmx100``.
  * Added support for :zephyr:board:`Analog Devices MAX32690EVKIT <max32690evkit>`: ``max32690evkit``.
  * Added support for :zephyr:board:`Analog Devices MAX32680EVKIT <max32680evkit>`: ``max32680evkit``.
  * Added support for :zephyr:board:`Analog Devices MAX32672EVKIT <max32672evkit>`: ``max32672evkit``.
  * Added support for :zephyr:board:`Analog Devices MAX32672FTHR <max32672fthr>`: ``max32672fthr``.
  * Added support for :zephyr:board:`Analog Devices MAX32670EVKIT <max32670evkit>`: ``max32670evkit``.
  * Added support for :zephyr:board:`Analog Devices MAX32655EVKIT <max32655evkit>`: ``max32655evkit``.
  * Added support for :zephyr:board:`Analog Devices MAX32655FTHR <max32655fthr>`: ``max32655fthr``.
  * Added support for :zephyr:board:`Analog Devices AD-APARD32690-SL <apard32690>`: ``ad_apard32690_sl``.
  * Added support for :zephyr:board:`Infineon Technologies CYW920829M2EVK-02 <cyw920829m2evk_02>`: ``cyw920829m2evk_02``.
  * Added support for :zephyr:board:`Nuvoton Numaker M2L31KI board <numaker_m2l31ki>`: ``numaker_m2l31ki``.
  * Added support for :zephyr:board:`Espressif ESP32-S2 DevKit-C <esp32s2_devkitc>`: ``esp32s2_devkitc``.
  * Added support for :zephyr:board:`Espressif ESP32-S3 DevKit-C <esp32s3_devkitc>`: ``esp32s3_devkitc``.
  * Added support for :zephyr:board:`Espressif ESP32-C6 DevKit-C <esp32c6_devkitc>`: ``esp32c6_devkitc``.
  * Added support for :zephyr:board:`Waveshare ESP32-S3-Touch-LCD-1.28 <esp32s3_touch_lcd_1_28>`: ``esp32s3_touch_lcd_1_28``.
  * Added support for :zephyr:board:`M5Stack ATOM Lite <m5stack_atom_lite>`: ``m5stack_atom_lite``.
  * Added support for :zephyr:board:`CTHINGS.CO Connectivity Card nRF52840 <ctcc>`: ``ctcc``.

* Made these board changes:

  * On :zephyr:board:`ST STM32H7B3I Discovery Kit <stm32h7b3i_dk>`: ``stm32h7b3i_dk``,
    enabled full cache management, Chrom-ART, double frame buffer and full refresh for
    optimal LVGL performance.
  * On ST STM32 boards, stm32cubeprogrammer runner can now be used to program external
    flash using ``--extload`` option.
  * Add HEX file support for Linkserver to all NXP boards
  * Updated the Linkserver west runner to reflect changes to the CLI of LinkServer v1.5.xx
  * Add LinkServer support to NXP ``mimxrt1010_evk``, ``mimxrt1160_evk``, ``frdm_rw612``, ``rd_rw612_bga``, ``frdm_mcxn947``
  * Introduced the simulated :ref:`nrf54l15bsim<nrf54l15bsim>` target.
  * The nrf5x bsim targets now support BT LE Coded PHY.
  * LLVM fuzzing support has been refactored while adding support for it in native_sim.
  * nRF54H20 PDK (pre-release) converted to :zephyr:board:`nrf54h20dk`
  * PPR core target in :zephyr:board:`nrf54h20dk` runs from RAM by default. A
    new ``xip`` variant has been introduced which runs from MRAM (XIP).
  * Refactored :zephyr:board:`beagleconnect_freedom` external antenna switch handling.
  * Added Arduino dts node labels for the nRF5340 Audio DK.
  * Changed the default revision of the nRF54L15 PDK from 0.2.1 to 0.3.0.
  * In boards based on the nRF5340 SoC, replaced direct accesses to the register
    that controls the network core Force-OFF signal with a module that uses an
    on-off manager to keep track of the network core use and exposes its API
    in ``<nrf53_cpunet_mgmt.h>``.
  * Laird Connectivity boards are rebranded to Ezurio.

* Added support for the following shields:

  * :ref:`adafruit_2_8_tft_touch_v2` (``adafruit_2_8_tft_touch_v2``)
  * :ref:`adafruit_neopixel_grid_bff` (``adafruit_neopixel_grid_bff``)
  * :ref:`arduino_uno_click` (``arduino_uno_click``)
  * :ref:`dvp_fpc24_mt9m114` (``dvp_fpc24_mt9m114``)
  * :ref:`lcd_par_s035` (``lcd_par_s035``)
  * :ref:`mikroe_weather_click` (``mikroe_weather_click``)
  * :ref:`nxp_btb44_ov5640` (``nxp_btb44_ov5640``)
  * :ref:`reyax_lora` (``reyax_lora``)
  * :ref:`rk043fn02h_ct` (``rk043fn02h_ct``)
  * :ref:`rk043fn66hs_ctg` (``rk043fn66hs_ctg``)
  * :ref:`rpi_pico_uno_flexypin` (``rpi_pico_uno_flexypin``)
  * :ref:`seeed_xiao_expansion_board` (``seeed_xiao_expansion_board``)
  * :ref:`seeed_xiao_round_display` (``seeed_xiao_round_display``)
  * :ref:`sparkfun_carrier_asset_tracker` (``sparkfun_carrier_asset_tracker``)
  * :ref:`st_b_lcd40_dsi1_mb1166` (``st_b_lcd40_dsi1_mb1166``)
  * :ref:`waveshare_epaper` (``waveshare_epaper``)
  * :ref:`x_nucleo_bnrg2a1` (``x_nucleo_bnrg2a1``)

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

    * Added support for power management to the Smartbond SDADC and GPADC drivers.
    * Fixed support for :kconfig:option:`CONFIG_PM_DEVICE_RUNTIME` in the Smartbond ADC driver.
  * 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

  * Extended support for automatic sample point location to also cover :c:func:`can_calc_timing` and
    :c:func:`can_calc_timing_data`.
  * Added optional ``min-bitrate`` devicetree property for CAN transceivers.
  * Added devicetree macros :c:macro:`DT_CAN_TRANSCEIVER_MIN_BITRATE` and
    :c:macro:`DT_INST_CAN_TRANSCEIVER_MIN_BITRATE` for getting the minimum supported bitrate of a CAN
    transceiver.
  * Added support for specifying the minimum bitrate supported by a CAN controller in the internal
    ``CAN_DT_DRIVER_CONFIG_GET`` and ``CAN_DT_DRIVER_CONFIG_INST_GET`` macros.
  * Added :c:func:`can_get_bitrate_min` and :c:func:`can_get_bitrate_max` for retrieving the minimum
    and maximum supported bitrate for a given CAN controller/CAN transceiver combination, reflecting
    that retrieving the bitrate limits can no longer fail. Deprecated the existing
    :c:func:`can_get_max_bitrate` API function.
  * Updated the CAN timing functions to take the minimum supported bitrate into consideration when
    validating the bitrate.
  * Made the ``sample-point`` and ``sample-point-data`` devicetree properties optional.
  * Renamed the ``bus_speed`` and ``bus_speed_data`` fields of :c:struct:`can_driver_config` to
    ``bitrate`` and ``bitrate_data``.
  * Added driver for :dtcompatible:`nordic,nrf-can`.
  * Added driver support for Numaker M2L31X to the :dtcompatible:`nuvoton,numaker-canfd` driver.
  * Added host communication test suite.

* 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

  * Added support for Microcontroller Clock Output (MCO) on STM32H5 series.
  * Added support for MSI clock on STM32WL series.
  * Added driver for Analog Devices MAX32 SoC series.
  * Added support for Nuvoton Numaker M2L31X series.
  * Refactored ESP32 clock control driver to support ESP32-C6.
  * In LiteX (:file:`drivers/clock_control/clock_control_litex.c`) added return code checking for
    :c:func:`litex_clk_get_duty_cycle()` and :c:func:`litex_clk_get_clkout_divider`.

* 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

  * Added support for NXP RW SOC series DAC (:dtcompatible:`nxp,gau-dac`).
  * Added support for Analog Devices AD5691 / AD5692 / AD5693 DACs
    (:dtcompatible:`adi,ad5691`, :dtcompatible:`adi,ad5692` and :dtcompatible:`adi,ad5693`).
  * Added support for Texas Instruments DACx0501 series DACs (:dtcompatible:`ti,dacx0501`).

* Disk

  * Support for eMMC devices was added to the STM32 SD driver. This can
    be enabled with :kconfig:option:`CONFIG_SDMMC_STM32_EMMC`.
  * Added a loopback disk driver, to expose a disk device backed by a file.
    A file can be registered with the loopback disk driver using
    :c:func:`loopback_disk_access_register`
  * Added support for :c:macro:`DISK_IOCTL_CTRL_INIT` and
    :c:macro:`DISK_IOCTL_CTRL_DEINIT` macros, which allow for initializing
    and de-initializing a disk at runtime. This allows hotpluggable
    disk devices (like SD cards) to be removed and reinserted at runtime.
  * Added SDMMC support for STM32H5 series.

* Display

  * All in tree displays capable of supporting the :ref:`mipi_dbi_api` have
    been converted to use it. GC9X01X, UC81XX, SSD16XX, ST7789V, ST7735R based
    displays have been converted to this API. Boards using these displays will
    need their devicetree updated, see the display section of
    :ref:`migration_3.7` for examples of this process.
  * Added driver for ST7796S display controller (:dtcompatible:`sitronix,st7796s`)
  * Added support for :c:func:`display_read` API to ILI9XXX display driver,
    which can be enabled with :kconfig:option:`CONFIG_ILI9XXX_READ`
  * Added support for :c:func:`display_set_orientation` API to SSD16XXX
    display driver
  * Added driver for NT35510 MIPI-DSI display controller
    (:dtcompatible:`frida,nt35510`)
  * Added driver to abstract LED strip devices as displays
    (:dtcompatible:`led-strip-matrix`)
  * Added support for :c:func:`display_set_pixel_format` API to NXP eLCDIF
    driver. ARGB8888, RGB888, and BGR565 formats are supported.
  * Added support for inverting color at runtime to the SSD1306 driver, via
    the :c:func:`display_set_pixel_format` API.
  * Inversion mode can now be disabled in the ST7789V driver
    (:dtcompatible:`sitronix,st7789v`) using the ``inversion-off`` property.
  * Added support for NXP MCXNx4x

* 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

  * Added property for specifying ``address-width`` to :dtcompatible:`zephyr,i2c-target-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

    * The eth_nxp_s32_gmac driver now implies :kconfig:option:`CONFIG_MDIO`.
    * eth_nxp_s32_netc driver updated to use new MBOX API.
  * 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

  * Added GNSS device driver API test suite.
  * Added support for the u-blox UBX protocol.
  * Added device driver for the u-blox M8 GNSS modem (:dtcompatible:`u-blox,m8`).
  * Added device driver for the Luatos Air530z GNSS modem (:dtcompatible:`luatos,air530z`).

* 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

  * Added support for Ambiq Apollo3 series.
  * In STM32 V2 driver, added support for a new :kconfig:option:`CONFIG_I2C_STM32_V2_TIMING`
    which automatically computes bus timings which should be used to configure the hardware
    block depending on the clock configuration in use. To avoid embedding this heavy algorithm
    in a production application, a dedicated sample :zephyr:code-sample:`stm32_i2c_v2_timings` is provided
    to get the output of the algorithm. Once bus timings configuration is available,
    :kconfig:option:`CONFIG_I2C_STM32_V2_TIMING` could be disabled, bus timings configured
    using device tree.
  * Added support for STM32H5 series.
  * Added support to NXP MCXN947
  * Added driver for Analog Devices MAX32 SoC series.
  * Added support for Nuvoton Numaker M2L31X series.
  * LiteX I2C driver (:file:`drivers/i2c/i2c_litex.c`):

    * Added support for bitrate setting from the devicetree.
    * Added :c:func:`i2c_litex_recover_bus()` and :c:func:`i2c_litex_get_config()` API
      implementations.

* 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

  * New drivers: :dtcompatible:`adc-keys`, :dtcompatible:`chipsemi,chsc6x`,
    :dtcompatible:`cirque,pinnacle`, :dtcompatible:`futaba,sbus`,
    :dtcompatible:`pixart,pat912x`, :dtcompatible:`pixart,paw32xx`,
    :dtcompatible:`pixart,pmw3610` and :dtcompatible:`sitronix,cf1133`.
  * Migrated :dtcompatible:`holtek,ht16k33` and
    :dtcompatible:`microchip,xec-kbd` from kscan to input subsystem.

* 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

  * New driver :dtcompatible:`nxp,lp-flexcomm`.
  * New driver :dtcompatible:`rohm,bd8lb600fs`.
  * New driver :dtcompatible:`maxim,max31790`.
  * New driver :dtcompatible:`infineon,tle9104`
  * New driver :dtcompatible:`adi,ad559x`
  * Added option to disable N_VBUSEN for :dtcompatible:`x-powers,axp192`.
  * Added GPIO input edge events for :dtcompatible:`nordic,npm1300`.
  * Added long press reset configuration for :dtcompatible:`nordic,npm1300`.
  * Fixed initialisation of hysteretic mode for :dtcompatible:`nordic,npm6001`.

* 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

  * New driver :dtcompatible:`cirrus,cp9314`.
  * Added ``regulator-boot-off`` property to common regulator driver.
    Updated :dtcompatible:`adi,adp5360-regulator`, :dtcompatible:`nordic,npm1300-regulator`,
    :dtcompatible:`nordic,npm6001-regulator` and :dtcompatible:`x-powers,axp192-regulator`
    to use this new property.
  * Added power management for :dtcompatible:`renesas,smartbond-regulator`.
  * Added ``is_enabled`` shell command.
  * Removed use of busy wait for single threaded systems.
  * Fixed control of DCDC2 output for :dtcompatible:`x-powers,axp192-regulator`.
  * Fixed current and voltage get functions for :dtcompatible:`renesas,smartbond-regulator`.
  * Fixed NXP VREF Kconfig leakage.
  * Fixed display of micro values in shell.
  * Fixed strcmp usage bug in ``adset`` shell command.

* 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

  * Added ESP32 SDHC driver (:dtcompatible:`espressif,esp32-sdhc`).
  * Added SDHC driver for Renesas MMC controller (:dtcompatible:`renesas,rcar-mmc`).

* Sensors

  * General

    * Added a channel specifier to the new read/decoder API.
    * Added a blocking sensor read call :c:func:`sensor_read`.
    * Decoupled RTIO requests using RTIO workqueues service to turn
      :c:func:`sensor_submit_callback` into an asynchronous request.
    * Moved most drivers to vendor subdirectories.

  * AMS

    * Added TSL2591 light sensor driver (:dtcompatible:`ams,tsl2591`).

  * Aosong

    * Added DHT20 digital-output humidity and temperature sensor driver
      (:dtcompatible:`aosong,dht20`).

    * Added :kconfig:option:`CONFIG_DHT_LOCK_IRQS` for the dht11 driver which allows for locking
      interrupts during sensor reading to prevent issues with reading the sensor.

  * Bosch

    * Updated BME280 to the new async API.

  * Infineon

    * Added TLE9104 power train switch diagnostics sensor driver
      (:dtcompatible:`infineon,tle9104-diagnostics`).

  * Maxim

    * Added DS18S20 1-Wire temperature sensor driver (:dtcompatible:`maxim,ds18s20`).
    * Added MAX31790 fan speed and fan fault sensor
      (:dtcompatible:`maxim,max31790-fan-fault` and :dtcompatible:`maxim,max31790-fan-speed`).

  * NXP

    * Added low power comparator driver (:dtcompatible:`nxp,lpcmp`).

  * Rohm

    * Added BD8LB600FS diagnostics sensor driver (:dtcompatible:`rohm,bd8lb600fs-diagnostics`).

  * Silabs

    * Made various fixes and enhancements to the SI7006 humidity/temperature sensor driver.

  * ST

    * QDEC driver now supports encoder mode configuration (see :dtcompatible:`st,stm32-qdec`).
    * Added support for STM32 Digital Temperature Sensor (:dtcompatible:`st,stm32-digi-temp`).
    * Added IIS328DQ I2C/SPI accelerometer sensor driver (:dtcompatible:`st,iis328dq`).

  * TDK

    * Added support for the MPU6500 3-axis accelerometer and 3-axis gyroscope sensor to the
      MPU6050 driver.

  * TI

    * Added TMP114 driver (:dtcompatible:`ti,tmp114`).
    * Added INA226 bidirectional current and power monitor driver (:dtcompatible:`ti,ina226`).
    * Added LM95234 quad remote diode and local temperature sensor driver
      (:dtcompatible:`national,lm95234`).

  * Other vendors

    * Added Angst+Pfister FCX-MLDX5 O2 sensor driver (:dtcompatible:`ap,fcx-mldx5`).
    * Added ENE KB1200 tachometer sensor driver (:dtcompatible:`ene,kb1200-tach`).
    * Added Festo VEAA-X-3 series proportional pressure regulator driver
      (:dtcompatible:`festo,veaa-x-3`).
    * Added Innovative Sensor Technology TSic xx6 temperature sensor driver
      (:dtcompatible:`ist,tsic-xx6`).
    * Added ON Semiconductor NCT75 temperature sensor driver (:dtcompatible:`onnn,nct75`).
    * Added ScioSense ENS160 digital metal oxide multi-gas sensor driver
      (:dtcompatible:`sciosense,ens160`).
    * Made various fixes and enhancements to the GROW_R502A fingerprint sensor driver.

* 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

  * Added support to NXP MCXN947
  * Added support for Ambiq Apollo3 series general IOM based SPI.
  * Added support for Ambiq Apollo3 BLEIF based SPI, which is specific for internal HCI.
  * Added support for :kconfig:option:`CONFIG_PM` and :kconfig:option:`CONFIG_PM_DEVICE_RUNTIME` on STM32 SPI driver.
  * Added support for :kconfig:option:`CONFIG_NOCACHE_MEMORY` in DMA SPI mode for STM32F7x SoC series.
  * Added support for STM32H7R/S series.
  * Added driver for Analog Devices MAX32 SoC series.
  * Fixed an incorrect register assignment in gd32 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

  * Added :kconfig:option:`CONFIG_WDT_NPCX_WARNING_LEADING_TIME_MS` to set the leading warning time
    in milliseconds. Removed no longer used :kconfig:option:`CONFIG_WDT_NPCX_DELAY_CYCLES`.
  * Added support for Ambiq Apollo3 series.
  * Added support for STM32H7R/S series.
  * Added support for Nuvoton Numaker M2L31X series.
  * Added watchdog for external 32kHz crystal in ESP32 SoC variants.

* 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:

  * Fixed CoAP observe age overflows.
  * Increased upper limit for CoAP retransmissions (:kconfig:option:`CONFIG_COAP_MAX_RETRANSMIT`).
  * Fixed CoAP observations in CoAP client library.
  * Added new CoAP client :c:func:`coap_client_cancel_requests` API which allows
    to cancel active observations.
  * Fixed CoAP ID generation for responses in CoAP Server sample.

* Connection manager:

  * Added support for new net_mgmt events, which allow to track IPv4 and IPv6
    connectivity independently:

    * :c:macro:`NET_EVENT_L4_IPV4_CONNECTED`
    * :c:macro:`NET_EVENT_L4_IPV4_DISCONNECTED`
    * :c:macro:`NET_EVENT_L4_IPV6_CONNECTED`
    * :c:macro:`NET_EVENT_L4_IPV6_DISCONNECTED`

* DHCPv4:

  * Added support for encapsulated vendor specific options. By enabling
    :kconfig:option:`CONFIG_NET_DHCPV4_OPTION_CALLBACKS_VENDOR_SPECIFIC` callbacks can be
    registered with :c:func:`net_dhcpv4_add_option_vendor_callback` to handle these options after
    being initialised with :c:func:`net_dhcpv4_init_option_vendor_callback`.
  * Added support for the "Vendor class identifier" option. Use the
    :kconfig:option:`CONFIG_NET_DHCPV4_VENDOR_CLASS_IDENTIFIER` to enable it and
    :kconfig:option:`CONFIG_NET_DHCPV4_VENDOR_CLASS_IDENTIFIER_STRING` to set it.
  * The NTP server from the DHCPv4 option can now be used to set the system time. This is done by
    default, if :kconfig:option:`CONFIG_NET_CONFIG_CLOCK_SNTP_INIT` is enabled.
  * The syslog server address can now be set with DHCPv4 option. This is done by
    default, if :kconfig:option:`CONFIG_LOG_BACKEND_NET_USE_DHCPV4_OPTION` is enabled.
  * Fixed a bug, where options with registered callbacks were not requested from
    the server.
  * Fixed a bug, where netmask received from the server was not applied correctly.
  * Reimplemented DHCPv4 client RENEW/REBIND logic to be compliant with RFC2131.
  * Improved declined addresses management in DHCPv4 server, which now can be
    reused after configured time.
  * Fixed including the client ID option in the DHCPv4 server response, according to RFC6842.
  * Added :kconfig:option:`CONFIG_NET_DHCPV4_SERVER_NAK_UNRECOGNIZED_REQUESTS` which
    allows to override RFC-defined behavior, and NAK requests from unrecognized
    clients.
  * Fixed client ID generation in DHCPv4 server.
  * Other minor fixes in DHCPv4 client and server implementations.

* DHCPv6:

  * Fixed incorrect DHCPv6 events code base for net_mgmt events.
  * Added :kconfig:option:`CONFIG_NET_DHCPV6_DUID_MAX_LEN` which allows to configure
    maximum supported DUID length.
  * Added documentation page for 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:

  * Implemented IPv6 Privacy Extensions according to RFC 8981.
  * Added :c:func:`net_ipv6_is_private_addr` API function.
  * Implemented reachability hint for IPv6. Upper layers can use
    :c:func:`net_if_nbr_reachability_hint` to report Neighbor reachability and
    avoid unnecessary Neighbor Discovery solicitations.
  * Added :kconfig:option:`CONFIG_NET_IPV6_MTU` allowing to set custom IPv6 MTU.
  * Added :kconfig:option:`CONFIG_NET_MCAST_ROUTE_MAX_IFACES` which allows to set
    multiple interfaces for multicast forwarding entries.
  * Added :kconfig:option:`CONFIG_NET_MCAST_ROUTE_MLD_REPORTS` which allows to
    report multicast routes in MLDv2 reports.
  * Fixed IPv6 hop limit handling for multicast packets.
  * Improved IPv6 Neighbor Discovery test coverage.
  * Fixed a bug, where Neighbor Advertisement packets reporting Duplicate address
    detection conflicts were dropped.
  * Other minor fixes and improvements.

* LwM2M:

  * Added new API functions:

    * :c:func:`lwm2m_set_bulk`
    * :c:func:`lwm2m_rd_client_set_ctx`

  * 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:

  * Added new API functions:

    * :c:func:`net_if_ipv4_maddr_foreach`
    * :c:func:`net_if_ipv6_maddr_foreach`

  * Improved debug logging in the network interface code.
  * Added reference counter to the :c:struct:`net_if_addr` structure.
  * Fixed IPv6 DAD and MLDv2 operation when interface goes up.
  * Added unique default name for OpenThread interfaces.
  * Other minor fixes.

* 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:

  * Implemented new networking POSIX APIs:

    * :c:func:`if_nameindex`
    * :c:func:`inet_ntoa`
    * :c:func:`inet_addr`

  * Added support for tracing socket API calls.
  * TLS sockets are no longer experimental API.
  * Fixed the protocol field endianness for ``AF_PACKET`` type sockets.
  * Fixed :c:func:`getsockname` for TCP.
  * Improve :c:func:`sendmsg` support when using DTLS sockets.
  * Fixed :c:func:`net_socket_service_register` function stall in case socket
    services thread stopped.
  * Fixed potential socket services thread stoppage when deregistering service.
  * Removed support for asynchronous timeouts in socket services library.
  * Fixed potential busy looping when using :c:func:`zsock_accept` in case of
    file descriptors shortage.

* Syslog:

  * Added new API functions:

    * :c:func:`log_backend_net_set_ip` to initialize syslog net backend with IP
      address directly.
    * :c:func:`log_backend_net_start` to facilitate syslog net backend activation.

  * Added structured logging support to syslog net backend.
  * Added TCP support to syslog net backend.

* 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:

  * Added new Websocket APIs:

    * :c:func:`websocket_register`
    * :c:func:`websocket_unregister`

  * Converted Websocket library to use ``zsock_*`` API.
  * Added Object Core support to Websocket sockets.
  * Added POLLOUT monitoring when sending.

* 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
**********

* Added :c:macro:`DT_INST_NODE_HAS_COMPAT` to check if a node has a compatible.
  This is useful for nodes that have multiple compatibles.
* Added :c:macro:`DT_CHILD_NUM` and variants to count the number of children of a node.
* Added :c:macro:`DT_FOREACH_NODELABEL` and variants, which can be used to iterate over the
  node labels of a devicetree node.
* Added :c:macro:`DT_NODELABEL_STRING_ARRAY` and :c:macro:`DT_NUM_NODELABELS` and their variants.
* Added :c:macro:`DT_REG_HAS_NAME` and variants.
* Reworked :c:macro:`DT_ANY_INST_HAS_PROP_STATUS_OKAY` so that the result can
  be used with macros like :c:macro:`IS_ENABLED`, IF_ENABLED, or COND_CODE_x.
* Reworked :c:macro:`DT_NODE_HAS_COMPAT_STATUS` so that it can be evaluated at preprocessor time.
* Updated PyYaml version used in dts scripts to 6.0 to remove supply chain vulnerabilities.

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
**********************

* Debug

  * symtab

   * By enabling :kconfig:option:`CONFIG_SYMTAB`, the symbol table will be
     generated with Zephyr link stage executable on supported architectures.

* Demand Paging

  * NRU (Not Recently Used) eviction algorithm has updated its selection logic to avoid
    picking the same page to evict constantly. The updated login now searches for a new
    candidate linearly after the last evicted page.

  * Added LRU (Least Recently Used) eviction algorithm.

* Formatted output

  * Fix warning when compiling cbprintf with ARCMWDT.

* Management

  * hawkBit

    * The hawkBit subsystem has been reworked to use the settings subsystem to store the hawkBit
      configuration.

    * By enabling :kconfig:option:`CONFIG_HAWKBIT_SET_SETTINGS_RUNTIME`, the hawkBit settings can
      be configured at runtime. Use the :c:func:`hawkbit_set_config` function to set the hawkBit
      configuration. It can also be set via the hawkBit shell, by using the ``hawkbit set``
      command.

    * When using the hawkBit autohandler and an update is installed, the device will now
      automatically reboot after the installation is complete.

    * By enabling :kconfig:option:`CONFIG_HAWKBIT_CUSTOM_DEVICE_ID`, a callback function can be
      registered to set the device ID. Use the :c:func:`hawkbit_set_device_identity_cb` function to
      register the callback.

    * By enabling :kconfig:option:`CONFIG_HAWKBIT_CUSTOM_ATTRIBUTES`, a callback function can be
      registered to set the device attributes that are sent to the hawkBit server. Use the
      :c:func:`hawkbit_set_custom_data_cb` function to register the callback.

  * MCUmgr

    * Instructions for the deprecated mcumgr go tool have been removed, a list of alternative,
      supported clients can be found on :ref:`mcumgr_tools_libraries`.

    * Fixed an issue with the SMP structure not being packed which would cause a fault on devices
      that do not support unaligned memory accesses.

    * Added :kconfig:option:`CONFIG_MCUMGR_TRANSPORT_BT_DYNAMIC_SVC_REGISTRATION` that allows users
      to select whether MCUmgr BT service is statically registered at compile time or
      dynamically at run time.

    * In FS group, TinyCrypt has been replaced with PSA calls for SHA calculation.

* Logging

  * By enabling :kconfig:option:`CONFIG_LOG_BACKEND_NET_USE_DHCPV4_OPTION`, the IP address of the
    syslog server for the networking backend is set by the DHCPv4 Log Server Option (7).

  * Use real time clock as timestamp on POSIX.

  * Add support for syslog (POSIX).

  * Add :c:macro:`LOG_WRN_ONCE` for logging warning message where only the first occurrence is
    logged.

  * Add :c:func:`log_thread_trigger` for triggering processing of the log messages.

  * Fix case when deferred logging not compiling when :kconfig:option:`CONFIG_MULTITHREADING` was
    disabled.

  * Fix case when logging strings could be stripped from the binary when dictionary based logging
    was mixed with non-dictionary.

  * Fix dictionary database not being generated in certain situations.

  * Fix dictionary logging parser not handling long long arguments correctly.

  * Fix support for :kconfig:option:`CONFIG_LOG_MSG_APPEND_RO_STRING_LOC`.

* Modem modules

  * Added modem pipelink module which shares modem pipes globally, allowing device drivers to
    create and set up pipes for the application to use.

  * Simplified the modem pipe module's synchronization mechanism to only protect the callback
    and user data. This matches the actual in-tree usage of the modem pipes.

  * Added ``modem_stats`` module which tracks the usage of buffers throughout the modem
    subsystem.

* Power management

  * Devices can now declare which system power states cause power loss.
    This information can be used to set and release power state
    constraints when it is needed by the device. This feature is enabled with
    :kconfig:option:`CONFIG_PM_POLICY_DEVICE_CONSTRAINTS`. Use functions
    :c:func:`pm_policy_device_power_lock_get` and :c:func:`pm_policy_device_power_lock_put`
    to lock and unlock all power states that cause power loss in a device.

  * Added shell support for device power management.

  * Device power management was de-coupled from system power management. The new
    :kconfig:option:`CONFIG_PM_DEVICE_SYSTEM_MANAGED` option is used to enable
    whether devices must be suspended when the system sleeps.

  * Make it possible to disable system device power management individually per
    power state using ``zephyr,pm-device-disabled``. This allows targets tuning which
    states should (and which should not) trigger device power management.

* Crypto

  * TinyCrypt remains available but is now being phased out in favor
    of PSA Crypto for enhanced security and performance.
  * Mbed TLS was updated to 3.6.0. Release notes can be found at:
    https://github.com/Mbed-TLS/mbedtls/releases/tag/v3.6.0
  * When any PSA crypto provider is available in the system
    (:kconfig:option:`CONFIG_MBEDTLS_PSA_CRYPTO_CLIENT` is enabled), desired PSA features
    must now be explicitly selected through ``CONFIG_PSA_WANT_xxx`` symbols.
  * Choice symbols :kconfig:option:`CONFIG_MBEDTLS_PSA_CRYPTO_LEGACY_RNG` and
    :kconfig:option:`CONFIG_MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG` were added in order
    to allow the user to specify how Mbed TLS PSA crypto core should generate random numbers.
    The former option, which is the default, relies on legacy entropy and CTR_DRBG/HMAC_DRBG
    modules, while the latter relies on CSPRNG drivers.
  * :kconfig:option:`CONFIG_MBEDTLS_PSA_P256M_DRIVER_ENABLED` enables support
    for the Mbed TLS's p256-m driver PSA crypto library. This is a Cortex-M SW
    optimized implementation of secp256r1 curve.

* CMSIS-NN

  * CMSIS-NN was updated to v6.0.0 from v4.1.0:
    https://arm-software.github.io/CMSIS-NN/latest/rev_hist.html

* FPGA

  * Improve handling of drivers missing ``reset``, ``load``, ``get_status``, and ``get_info``
    methods.
  * Add support for Agilex and Agilex 5.

* Random

  * Besides the existing :c:func:`sys_rand32_get` function, :c:func:`sys_rand8_get`,
    :c:func:`sys_rand16_get` and :c:func:`sys_rand64_get` are now also available.
    These functions are all implemented on top of :c:func:`sys_rand_get`.

* SD

  * SDMMC and SDIO frequency and timing selection logic have been reworked,
    to resolve an issue where a timing mode would not be selected if the
    SDHC device in use did not report support for the maximum frequency
    possible in that mode. Now, if the host controller and card both report
    support for a given timing mode but not the highest frequency that
    mode supports, the timing mode will be selected and configured at
    the reduced frequency (:github:`72705`).

* State Machine Framework

  * The :c:macro:`SMF_CREATE_STATE` macro now always takes 5 arguments.
  * Transition sources that are parents of the state that was run now choose the correct Least
    Common Ancestor for executing Exit and Entry Actions.
  * Passing ``NULL`` to :c:func:`smf_set_state` is now not allowed.

* Storage

  * FAT FS: It is now possible to expose file system formatting functionality for FAT without also
    enabling automatic formatting on mount failure by setting the
    :kconfig:option:`CONFIG_FS_FATFS_MKFS` Kconfig option. This option is enabled by default if
    :kconfig:option:`CONFIG_FILE_SYSTEM_MKFS` is set.

  * FS: It is now possible to truncate a file while opening using :c:func:`fs_open`
    and by passing ``FS_O_TRUNC`` flag.

  * Flash Map: TinyCrypt has been replaced with PSA Crypto in Flash Area integrity check.

  * Flash Map: :c:func:`flash_area_flatten` has been added to be used where an erase
    operation has been previously used for removing/scrambling data rather than
    to prepare a device for a random data write.

  * Flash Map: :c:macro:`FIXED_PARTITION_NODE_OFFSET`, :c:macro:`FIXED_PARTITION_NODE_SIZE`
    and :c:macro:`FIXED_PARTITION_NODE_DEVICE` have been added to allow obtaining
    fixed partition information from a devicetree node rather than a label.

  * Added :kconfig:option:`CONFIG_NVS_DATA_CRC`, to add CRC protection for data.
    Note that enabling this option makes NVS incompatible with existing storage
    that have not been previously using CRC on data.

  * Fixed NVS issue where :c:func:`nvs_calc_free_space` would return larger
    size than available, because space for reserved ate was not subtracted.

  * Fixed ext2 incorrectly calculating free space when attempting to format
    partition.

  * Fixed FAT driver leaving disk in initialized state after unmount.

* Task Watchdog

  * Added shell (mainly for testing purposes during development).

* POSIX API

  * Improved Kconfig options to reflect standard POSIX Options and Option Groups.

  * Added support for the following Option Groups

    * :ref:`POSIX_MAPPED_FILES <posix_option_group_mapped_files>`
    * :ref:`POSIX_MEMORY_PROTECTION <posix_option_group_memory_protection>`
    * :ref:`POSIX_NETWORKING <posix_option_group_networking>`
    * :ref:`POSIX_SINGLE_PROCESS <posix_option_group_single_process>`
    * :ref:`POSIX_TIMERS <posix_option_group_timers>`
    * :ref:`XSI_SYSTEM_LOGGING <posix_option_group_xsi_system_logging>`

  * Added support for the following Options

    * :ref:`_POSIX_ASYNCHRONOUS_IO <posix_option_asynchronous_io>`
    * :ref:`_POSIX_CPUTIME <posix_option_cputime>`
    * :ref:`_POSIX_FSYNC <posix_option_fsync>`
    * :ref:`_POSIX_MEMLOCK <posix_option_memlock>`
    * :ref:`_POSIX_MEMLOCK_RANGE <posix_option_memlock_range>`
    * :ref:`_POSIX_READER_WRITER_LOCKS <posix_option_reader_writer_locks>`
    * :ref:`_POSIX_SHARED_MEMORY_OBJECTS <posix_shared_memory_objects>`
    * :ref:`_POSIX_THREAD_CPUTIME <posix_option_thread_cputime>`
    * :ref:`_POSIX_THREAD_PRIO_PROTECT <posix_option_thread_prio_protect>`
    * :ref:`_POSIX_THREAD_PRIORITY_SCHEDULING <posix_option_thread_priority_scheduling>`
    * :ref:`_XOPEN_STREAMS <posix_option_xopen_streams>`

  * Fixed eventfd ``F_SETFL`` handling to avoid overwriting internal flags.
  * Fixed thread stack address printed in debug message.
  * Fixed macro parameter usage in signal code.

* LoRa/LoRaWAN

  * Added the Fragmented Data Block Transport service, which can be enabled via
    :kconfig:option:`CONFIG_LORAWAN_FRAG_TRANSPORT`. In addition to the default fragment decoder
    implementation from Semtech, an in-tree implementation with reduced memory footprint is
    available.

  * Added a sample to demonstrate LoRaWAN firmware-upgrade over the air (FUOTA).

* ZBus

  * Improved the VDED process by optimizing the channel reference copying for the clones delivered
    during the message subscriber delivery notification.

  * Improved the initialization phase by statically initiating the semaphores and runtime observer
    list. That decreased the duration of the zbus initialization.

  * Added a way of isolating a channel message subscribers pool. Some channels can now share an
    isolated pool to avoid delivery failures and shorten communication latency. It is only necessary
    to enable the :kconfig:option:`CONFIG_ZBUS_MSG_SUBSCRIBER_NET_BUF_POOL_ISOLATION` and use the
    function :c:func:`zbus_chan_set_msg_sub_pool` to change the msg pool used by the channel.
    Channels can share the same message pool.

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
******************

* TF-M was updated to 2.1.0. Release notes can be found at:
  https://tf-m-user-guide.trustedfirmware.org/releases/2.1.0.html

* Support for MCUboot signature types other than RSA-3072 has been added.
  The type can be chosen with the :kconfig:option:`CONFIG_TFM_MCUBOOT_SIGNATURE_TYPE` Kconfig option.
  Using EC-P256, the new default, reduces flash usage by several KBs compared to RSA.

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
============

- :github:`74345` - Bluetooth: Non functional on nRF51 with fault
