| :orphan: | 
 |  | 
 | .. | 
 |   See | 
 |   https://docs.zephyrproject.org/latest/releases/index.html#migration-guides | 
 |   for details of what is supposed to go into this document. | 
 |  | 
 | .. _migration_4.2: | 
 |  | 
 | Migration guide to Zephyr v4.2.0 | 
 | ################################ | 
 |  | 
 | This document describes the changes required when migrating your application from Zephyr v4.1.0 to | 
 | Zephyr v4.2.0. | 
 |  | 
 | Any other changes (not directly related to migrating applications) can be found in | 
 | the :ref:`release notes<zephyr_4.2>`. | 
 |  | 
 | .. contents:: | 
 |     :local: | 
 |     :depth: 2 | 
 |  | 
 | Build System | 
 | ************ | 
 |  | 
 | * HWMv1 support has been removed, any out-of-tree boards or SoCs in HWMv1 format must be migrated | 
 |   to :ref:`HWMv2 <hw_model_v2>` to work with Zephyr v4.2 onwards. | 
 |  | 
 | Kernel | 
 | ****** | 
 |  | 
 | Boards | 
 | ****** | 
 |  | 
 | * All boards based on Nordic ICs that used the ``nrfjprog`` Nordic command-line | 
 |   tool for flashing by default have been modified to instead default to the new | 
 |   nRF Util (``nrfutil``) tool. This means that you may need to `install nRF Util | 
 |   <https://www.nordicsemi.com/Products/Development-tools/nrf-util>`_ or, if you | 
 |   prefer to continue using ``nrfjprog``, you can do so by invoking west while | 
 |   specifying the runner: ``west flash -r nrfjprog``. The full documentation for | 
 |   nRF Util can be found | 
 |   `here <https://docs.nordicsemi.com/bundle/nrfutil/page/README.html>`_. | 
 |  | 
 | * All boards based on a Nordic IC of the nRF54L series now default to not | 
 |   erasing any part of the internal storage when flashing. If you'd like to | 
 |   revert to the previous default of erasing the pages that will be written to by | 
 |   the firmware to be flashed you can set the new ``--erase-mode`` command-line | 
 |   switch when invoking ``west flash`` to ``ranges``. | 
 |   Note that RRAM on nRF54L devices is not physically paged, and paging is | 
 |   only artificially provided, with a page size of 4096 bytes, for an easier | 
 |   transition of nRF52 software to nRF54L devices. | 
 |  | 
 | * The config option :kconfig:option:`CONFIG_NATIVE_POSIX_SLOWDOWN_TO_REAL_TIME` has been deprecated | 
 |   in favor of :kconfig:option:`CONFIG_NATIVE_SIM_SLOWDOWN_TO_REAL_TIME`. | 
 |  | 
 | * The DT binding :dtcompatible:`zephyr,native-posix-cpu` has been deprecated in favor of | 
 |   :dtcompatible:`zephyr,native-sim-cpu`. | 
 |  | 
 | * Zephyr now supports version 1.11.6 of the :zephyr:board:`neorv32`. NEORV32 processor (SoC) | 
 |   implementations need to be updated to this version to be compatible with Zephyr v4.2.0. | 
 |  | 
 | * The :zephyr:board:`neorv32` now targets NEORV32 processor (SoC) templates via board variants. The | 
 |   old ``neorv32`` board target is now named ``neorv32/neorv32/up5kdemo``. | 
 |  | 
 | * ``arduino_uno_r4_minima``, ``arduino_uno_r4_wifi``, and ``mikroe_clicker_ra4m1`` have migrated to | 
 |   new FSP-based configurations. | 
 |   While there are no major functional changes, the device tree structure has been significantly revised. | 
 |   The following device tree bindings are now removed: | 
 |   ``renesas,ra-gpio``, ``renesas,ra-uart-sci``, ``renesas,ra-pinctrl``, | 
 |   ``renesas,ra-clock-generation-circuit``, and ``renesas,ra-interrupt-controller-unit``. | 
 |   Instead, use the following replacements: | 
 |   - :dtcompatible:`renesas,ra-gpio-ioport` | 
 |   - :dtcompatible:`renesas,ra-sci-uart` | 
 |   - :dtcompatible:`renesas,ra-pinctrl-pfs` | 
 |   - :dtcompatible:`renesas,ra-cgc-pclk-block` | 
 |  | 
 | * Nucleo WBA52CG board (``nucleo_wba52cg``) is not supported anymore since it is NRND | 
 |   (Not Recommended for New Design) and it is not supported anymore in the STM32CubeWBA from | 
 |   version 1.1.0 (July 2023). The migration to :zephyr:board:`nucleo_wba55cg` (``nucleo_wba55cg``) | 
 |   is recommended and it could be done without any change. | 
 |  | 
 | * Espressif boards ``esp32_devkitc_wroom`` and ``esp32_devkitc_wrover`` shared almost identical features. | 
 |   The differences are covered by the Kconfig options so both boards were merged into ``esp32_devkitc``. | 
 |  | 
 | * STM32 boards should now add OpenOCD programming support by including ``openocd-stm32.board.cmake`` | 
 |   instead of ``openocd.board.cmake``. The ``openocd-stm32.board.cmake`` file extends the default | 
 |   OpenOCD runner with manufacturer-specific configuration like STM32 mass erase commands. | 
 |  | 
 | * STM32N6570-DK boards's default variant (``stm32n6570_dk/stm32n657xx``) is now supposed to be a | 
 |   chainloaded application and should be built using ``--sysbuild``. The old default, | 
 |   which built applications to run as First Stage BootLoader, is now available as a dedicated | 
 |   variant (``stm32n6570_dk/stm32n657xx/fsbl``) that must be selected explicitly. | 
 |   See board documentation for more information about these variants. | 
 |  | 
 | * STM32 boards that embed TF-M BL2 boot stage (``b_u585i_iot02a//ns``, ``nucleo_l552ze_q//ns`` | 
 |   and ``stm32l562e_dk//ns``) do not embed HW crypto accelerator drivers in BL2 as they previously | 
 |   did, now relying on Mbed TLS software implementation. This is related to the upgrade to TF-M | 
 |   v2.2. HW crypto accelerators are still supported in TF-M, but only in the runtime secure firmware. | 
 |  | 
 | Device Drivers and Devicetree | 
 | ***************************** | 
 |  | 
 | .. zephyr-keep-sorted-start re(^\w) | 
 |  | 
 | Audio | 
 | ===== | 
 |  | 
 | * The binding file for :dtcompatible:`cirrus,cs43l22` has been renamed to have a name | 
 |   matching the compatible string. | 
 |  | 
 | Counter | 
 | ======= | 
 |  | 
 | * ``counter_native_posix`` has been renamed ``counter_native_sim``, and with it its | 
 |   kconfig options and DT binding. :dtcompatible:`zephyr,native-posix-counter`  has been deprecated | 
 |   in favor of :dtcompatible:`zephyr,native-sim-counter`. | 
 |   And :kconfig:option:`CONFIG_COUNTER_NATIVE_POSIX` and its related options with | 
 |   :kconfig:option:`CONFIG_COUNTER_NATIVE_SIM` (:github:`86616`). | 
 |  | 
 | DAI | 
 | === | 
 |  | 
 | * Renamed the devicetree property ``dai_id`` to ``dai-id``. | 
 | * Renamed the devicetree property ``afe_name`` to ``afe-name``. | 
 | * Renamed the devicetree property ``agent_disable`` to ``agent-disable``. | 
 | * Renamed the devicetree property ``ch_num`` to ``ch-num``. | 
 | * Renamed the devicetree property ``mono_invert`` to ``mono-invert``. | 
 | * Renamed the devicetree property ``quad_ch`` to ``quad-ch``. | 
 | * Renamed the devicetree property ``int_odd`` to ``int-odd``. | 
 |  | 
 | DMA | 
 | === | 
 |  | 
 | * Renamed the devicetree property ``nxp,a_on`` to ``nxp,a-on``. | 
 | * Renamed the devicetree property ``dma_channels`` to ``dma-channels``. | 
 | * The binding files for Xilinx DMA controllers have been renamed to use the proper vendor prefix | 
 |   (``xlnx`` instead of ``xilinx``) and to match their compatible string. | 
 |  | 
 | Devicetree | 
 | ========== | 
 |  | 
 | * Many of the vendor-specific and arch-specific files that were in dts/common have been moved | 
 |   to more specific locations. Therefore, any dts files which ``#include <common/some_file.dtsi>`` | 
 |   a file from in the zephyr tree will need to be changed to just ``#include <some_file.dtsi>``. | 
 |  | 
 | * Silicon Labs SoC-level dts files for Series 2 have been reorganized in subdirectories per device | 
 |   superfamily. Therefore, any dts files for boards that use Series 2 SoCs will need to change their | 
 |   include from ``#include <silabs/some_soc.dtsi>`` to ``#include <silabs/xg2[1-9]/some_soc.dtsi>``. | 
 |  | 
 | * The :c:macro:`DT_ENUM_HAS_VALUE` and :c:macro:`DT_INST_ENUM_HAS_VALUE` macros are now | 
 |   checking all values, when used on an array, not just the first one. | 
 |  | 
 | * Property names in devicetree and bindings use hyphens(``-``) as separators, and replacing | 
 |   all previously used underscores(``_``). For local code, you can migrate property names in | 
 |   bindings to use hyphens by running the ``scripts/utils/migrate_bindings_style.py`` script. | 
 |  | 
 | Display | 
 | ======= | 
 |  | 
 | * On STM32 devices, the LTDC driver (:dtcompatible:`st,stm32-ltdc`) RGB565 format | 
 |   ``PIXEL_FORMAT_RGB565`` has been replaced by ``PIXEL_FORMAT_BGR565`` to match | 
 |   the format expected by Zephyr. This change ensures proper behavior of both | 
 |   display and video capture samples. | 
 |  | 
 | EEPROM | 
 | ======== | 
 |  | 
 | * :dtcompatible:`ti,tmp116-eeprom` has been renamed to :dtcompatible:`ti,tmp11x-eeprom` because it | 
 |   supports both tmp117 and tmp119. | 
 |  | 
 | Enhanced Serial Peripheral Interface (eSPI) | 
 | =========================================== | 
 |  | 
 | * Renamed the devicetree property ``io_girq`` to ``io-girq``. | 
 | * Renamed the devicetree property ``vw_girqs`` to ``vw-girqs``. | 
 | * Renamed the devicetree property ``pc_girq`` to ``pc-girq``. | 
 | * Renamed the devicetree property ``poll_timeout`` to ``poll-timeout``. | 
 | * Renamed the devicetree property ``poll_interval`` to ``poll-interval``. | 
 | * Renamed the devicetree property ``consec_rd_timeout`` to ``consec-rd-timeout``. | 
 | * Renamed the devicetree property ``sus_chk_delay`` to ``sus-chk-delay``. | 
 | * Renamed the devicetree property ``sus_rsm_interval`` to ``sus-rsm-interval``. | 
 |  | 
 | Entropy | 
 | ======= | 
 |  | 
 | * ``fake_entropy_native_posix`` has been renamed ``fake_entropy_native_sim``, and with it its | 
 |   kconfig options and DT binding. :dtcompatible:`zephyr,native-posix-rng`  has been deprecated | 
 |   in favor of :dtcompatible:`zephyr,native-sim-rng`. | 
 |   And :kconfig:option:`CONFIG_FAKE_ENTROPY_NATIVE_POSIX` and its related options with | 
 |   :kconfig:option:`CONFIG_FAKE_ENTROPY_NATIVE_SIM` (:github:`86615`). | 
 |  | 
 | Ethernet | 
 | ======== | 
 |  | 
 | * Removed Kconfig option ``ETH_STM32_HAL_MII`` (:github:`86074`). | 
 |   PHY interface type is now selected via the ``phy-connection-type`` property in the device tree. | 
 |  | 
 | * The :dtcompatible:`st,stm32-ethernet` driver now requires the ``phy-handle`` phandle to be | 
 |   set to the according PHY node in the device tree (:github:`87593`). | 
 |  | 
 | * The Kconfig options ``ETH_STM32_HAL_PHY_ADDRESS``, ``ETH_STM32_CARRIER_CHECK``, | 
 |   ``ETH_STM32_CARRIER_CHECK_RX_IDLE_TIMEOUT_MS``, ``ETH_STM32_AUTO_NEGOTIATION_ENABLE``, | 
 |   ``ETH_STM32_SPEED_10M``, ``ETH_STM32_MODE_HALFDUPLEX`` have been removed, as they are no longer | 
 |   needed, and the driver now uses the ethernet phy api to communicate with the phy driver, which | 
 |   is responsible for configuring the phy settings (:github:`87593`). | 
 |  | 
 | * ``ethernet_native_posix`` has been renamed ``ethernet_native_tap``, and with it its | 
 |   kconfig options: :kconfig:option:`CONFIG_ETH_NATIVE_POSIX` and its related options have been | 
 |   deprecated in favor of :kconfig:option:`CONFIG_ETH_NATIVE_TAP` (:github:`86578`). | 
 |  | 
 | * NuMaker Ethernet driver ``eth_numaker.c`` now supports ``gen_random_mac``, | 
 |   and the EMAC data flash feature has been removed (:github:`87953`). | 
 |  | 
 | * The enum ``ETHERNET_DSA_MASTER_PORT`` and ``ETHERNET_DSA_SLAVE_PORT`` in | 
 |   :zephyr_file:`include/zephyr/net/ethernet.h` have been renamed | 
 |   to ``ETHERNET_DSA_CONDUIT_PORT`` and ``ETHERNET_DSA_USER_PORT``. | 
 |  | 
 | * Enums for the Ethernet speed have been renamed to be more independent of the used medium. | 
 |   ``LINK_HALF_10BASE_T``, ``LINK_FULL_10BASE_T``, ``LINK_HALF_100BASE_T``, ``LINK_FULL_100BASE_T``, | 
 |   ``LINK_HALF_1000BASE_T``, ``LINK_FULL_1000BASE_T``, ``LINK_FULL_2500BASE_T`` and | 
 |   ``LINK_FULL_5000BASE_T`` have been renamed to :c:enumerator:`LINK_HALF_10BASE`, | 
 |   :c:enumerator:`LINK_FULL_10BASE`, :c:enumerator:`LINK_HALF_100BASE`, | 
 |   :c:enumerator:`LINK_FULL_100BASE`, :c:enumerator:`LINK_HALF_1000BASE`, | 
 |   :c:enumerator:`LINK_FULL_1000BASE`, :c:enumerator:`LINK_FULL_2500BASE` and | 
 |   :c:enumerator:`LINK_FULL_5000BASE`. | 
 |   ``ETHERNET_LINK_10BASE_T``, ``ETHERNET_LINK_100BASE_T``, ``ETHERNET_LINK_1000BASE_T``, | 
 |   ``ETHERNET_LINK_2500BASE_T`` and ``ETHERNET_LINK_5000BASE_T`` have been renamed to | 
 |   :c:enumerator:`ETHERNET_LINK_10BASE`, :c:enumerator:`ETHERNET_LINK_100BASE`, | 
 |   :c:enumerator:`ETHERNET_LINK_1000BASE`, :c:enumerator:`ETHERNET_LINK_2500BASE` and | 
 |   :c:enumerator:`ETHERNET_LINK_5000BASE` respectively (:github:`87194`). | 
 |  | 
 | * ``ETHERNET_CONFIG_TYPE_LINK``, ``ETHERNET_CONFIG_TYPE_DUPLEX``, ``ETHERNET_CONFIG_TYPE_AUTO_NEG`` | 
 |   and the related ``NET_REQUEST_ETHERNET_SET_LINK``, ``NET_REQUEST_ETHERNET_SET_DUPLEX``, | 
 |   ``NET_REQUEST_ETHERNET_SET_AUTO_NEGOTIATION`` have been removed. :c:func:`phy_configure_link` | 
 |   together with :c:func:`net_eth_get_phy` should be used instead to configure the link | 
 |   (:github:`90652`). | 
 |  | 
 | * :c:func:`phy_configure_link` got a ``flags`` parameter. Set it to ``0`` to preserve the old | 
 |   behavior (:github:`91354`). | 
 |  | 
 | Flash | 
 | ===== | 
 |  | 
 | * Renamed the file from ``flash_hp_ra.h`` to ``soc_flash_renesas_ra_hp.h``. | 
 | * Renamed the file from ``flash_hp_ra.c`` to ``soc_flash_renesas_ra_hp.c``. | 
 | * Renamed the file from ``flash_hp_ra_ex_op.c`` to ``soc_flash_renesas_ra_hp_ex_op.c``. | 
 |  | 
 | * The Flash HP Renesas RA dual bank mode Kconfig symbol :kconfig:option:`CONFIG_DUAL_BANK_MODE` | 
 |   has been removed. | 
 | * The Flash HP Renesas RA Kconfig symbol :kconfig:option:`CONFIG_RA_FLASH_HP` | 
 |   has been renamed to :kconfig:option:`CONFIG_SOC_FLASH_RENESAS_RA_HP`. | 
 | * The Flash HP Renesas RA write protect Kconfig symbol :kconfig:option:`CONFIG_FLASH_RA_WRITE_PROTECT` | 
 |   has been renamed to :kconfig:option:`CONFIG_FLASH_RENESAS_RA_HP_WRITE_PROTECT`. | 
 |  | 
 | * Separate the file ``renesas,ra-nv-flash.yaml`` into 2 files ``renesas,ra-nv-code-flash.yaml`` | 
 |   and ``renesas,ra-nv-data-flash.yaml``. | 
 | * Separate the ``compatible`` from ``renesas,ra-nv-flash`` to :dtcompatible:`renesas,ra-nv-code-flash.yaml` | 
 |   and :dtcompatible:`renesas,ra-nv-data-flash.yaml`. | 
 |  | 
 | GPIO | 
 | ==== | 
 |  | 
 | * To support the RP2350B, which has many pins, the Raspberry Pi-GPIO configuration has | 
 |   been changed. The previous role of :dtcompatible:`raspberrypi,rpi-gpio` has been migrated to | 
 |   :dtcompatible:`raspberrypi,rpi-gpio-port`, and :dtcompatible:`raspberrypi,rpi-gpio` is | 
 |   now left as a placeholder and mapper. | 
 |   The labels have also been changed along, so no changes are necessary for regular use. | 
 | * ``arduino-nano-header-r3`` is renamed to :dtcompatible:`arduino-nano-header`. | 
 |   Because the R3 comes from the Arduino UNO R3, which has changed the connector from | 
 |   the former version, and is unrelated to the Arduino Nano. | 
 | * Moved file ``include/zephyr/dt-bindings/gpio/nordic-npm1300-gpio.h`` to | 
 |   :zephyr_file:`include/zephyr/dt-bindings/gpio/nordic-npm13xx-gpio.h` and renamed all instances of | 
 |   ``NPM1300`` to ``NPM13XX`` in the defines | 
 | * Renamed ``CONFIG_GPIO_NPM1300`` to :kconfig:option:`CONFIG_GPIO_NPM13XX`, | 
 |   ``CONFIG_GPIO_NPM1300_INIT_PRIORITY`` to :kconfig:option:`CONFIG_GPIO_NPM13XX_INIT_PRIORITY` | 
 |  | 
 | I2S | 
 | === | 
 | * The :dtcompatible:`nxp,mcux-i2s` driver added property ``mclk-output``. Set this property to | 
 | * configure the MCLK signal as an output.  Older driver versions used the macro | 
 | * ``I2S_OPT_BIT_CLK_SLAVE`` to configure the MCLK signal direction. (:github:`88554`) | 
 |  | 
 | LED | 
 | === | 
 |  | 
 | * Renamed ``CONFIG_LED_NPM1300`` to :kconfig:option:`CONFIG_LED_NPM13XX` | 
 |  | 
 | MFD | 
 | === | 
 |  | 
 | * Moved file ``include/zephyr/drivers/mfd/npm1300.h`` to :zephyr_file:`include/zephyr/drivers/mfd/npm13xx.h` | 
 |   and renamed all instances of ``npm1300``/``NPM1300`` to ``npm13xx``/``NPM13XX`` in the enums and | 
 |   function names | 
 | * Renamed ``CONFIG_MFD_NPM1300`` to :kconfig:option:`CONFIG_MFD_NPM13XX`, | 
 |   ``CONFIG_MFD_NPM1300_INIT_PRIORITY`` to :kconfig:option:`CONFIG_MFD_NPM13XX_INIT_PRIORITY` | 
 |  | 
 | Misc | 
 | ==== | 
 |  | 
 | * Moved file ``drivers/memc/memc_nxp_flexram.h`` to | 
 |   :zephyr_file:`include/zephyr/drivers/misc/flexram/nxp_flexram.h` so that the | 
 |   file can be included using ``<zephyr/drivers/misc/flexram/nxp_flexram.h>``. | 
 |   Modification to CMakeList.txt to use include this driver is no longer | 
 |   required. | 
 | * All memc_flexram_* namespaced things including kconfigs and C API | 
 |   have been changed to just flexram_*. | 
 |  | 
 | * Select ``CONFIG_ETHOS_U`` instead ``CONFIG_ARM_ETHOS_U`` to enable Ethos-U NPU driver. | 
 | * Rename all configs that have prefix ``CONFIG_ARM_ETHOS_U_`` to ``CONFIG_ETHOS_U_``. | 
 |  | 
 | Modem | 
 | ===== | 
 |  | 
 | * Removed Kconfig option :kconfig:option:`CONFIG_MODEM_CELLULAR_CMUX_MAX_FRAME_SIZE` in favor of | 
 |   :kconfig:option:`CONFIG_MODEM_CMUX_WORK_BUFFER_SIZE` and :kconfig:option:`CONFIG_MODEM_CMUX_MTU`. | 
 |  | 
 | Regulator | 
 | ========= | 
 |  | 
 | * Moved file ``include/zephyr/dt-bindings/regulator/npm1300.h`` to | 
 |   :zephyr_file:`include/zephyr/dt-bindings/regulator/npm13xx.h` and renamed all instances of | 
 |   ``NPM1300`` to ``NPM13XX`` in the defines | 
 | * Renamed ``CONFIG_REGULATOR_NPM1300`` to :kconfig:option:`CONFIG_REGULATOR_NPM13XX`, | 
 |   ``CONFIG_REGULATOR_NPM1300_COMMON_INIT_PRIORITY`` to :kconfig:option:`REGULATOR_NPM13XX_COMMON_INIT_PRIORITY`, | 
 |   ``CONFIG_REGULATOR_NPM1300_INIT_PRIORITY`` to :kconfig:option:`CONFIG_REGULATOR_NPM13XX_INIT_PRIORITY` | 
 | * :dtcompatible:`nordic,npm1300-regulator` BUCK and LDO node GPIO properties are now specified as an | 
 |   integer array without a GPIO controller, removing the requirement for a | 
 |   :dtcompatible:`nordic,npm1300-gpio` node to be present and enabled for GPIO control of the output | 
 |   rails. For example, ``enable-gpios = <&pmic_gpios 3 GPIO_ACTIVE_LOW>;`` is now specified as | 
 |   ``enable-gpio-config = <3 GPIO_ACTIVE_LOW>;``. | 
 |  | 
 | SPI | 
 | === | 
 |  | 
 | * Renamed ``CONFIG_SPI_MCUX_LPSPI`` to :kconfig:option:`CONFIG_SPI_NXP_LPSPI`, | 
 |   and similar for any child configs for that driver, including | 
 |   :kconfig:option:`CONFIG_SPI_NXP_LPSPI_DMA` and :kconfig:option:`CONFIG_SPI_NXP_LPSPI_CPU`. | 
 | * Renamed the device tree property ``port_sel`` to ``port-sel``. | 
 | * Renamed the device tree property ``chip_select`` to ``chip-select``. | 
 | * The binding file for :dtcompatible:`andestech,atcspi200` has been renamed to have a name | 
 |   matching the compatible string. | 
 |  | 
 | Sensors | 
 | ======= | 
 |  | 
 | * ``ltr`` vendor prefix has been renamed to ``liteon``, and with it the | 
 |   :dtcompatible:`ltr,f216a` name has been replaced by :dtcompatible:`liteon,ltrf216a`. | 
 |   The choice :kconfig:option:`DT_HAS_LTR_F216A_ENABLED` has been replaced with | 
 |   :kconfig:option:`DT_HAS_LITEON_LTRF216A_ENABLED` (:github:`85453`) | 
 |  | 
 | * :dtcompatible:`ti,tmp116` has been renamed to :dtcompatible:`ti,tmp11x` because it supports | 
 |   tmp116, tmp117 and tmp119. | 
 |  | 
 | * :dtcompatible:`meas,ms5837` has been replaced by :dtcompatible:`meas,ms5837-30ba` | 
 |   and :dtcompatible:`meas,ms5837-02ba`. In order to use one of the two variants, the | 
 |   status property needs to be used as well. | 
 |  | 
 | * The :dtcompatible:`we,wsen-itds` driver has been renamed to | 
 |   :dtcompatible:`we,wsen-itds-2533020201601`. | 
 |   The Device Tree can be configured as follows: | 
 |  | 
 |   .. code-block:: devicetree | 
 |  | 
 |     &i2c0 { | 
 |       itds:itds-2533020201601@19 { | 
 |         compatible = "we,wsen-itds-2533020201601"; | 
 |         reg = <0x19>; | 
 |         odr = "400"; | 
 |         op-mode = "high-perf"; | 
 |         power-mode = "normal"; | 
 |         events-interrupt-gpios = <&gpio1 1 GPIO_ACTIVE_HIGH>; | 
 |         drdy-interrupt-gpios = < &gpio1 2 GPIO_ACTIVE_HIGH >; | 
 |       }; | 
 |     }; | 
 |  | 
 | * The binding file for :dtcompatible:`raspberrypi,pico-temp.yaml` has been renamed to have a name | 
 |   matching the compatible string. | 
 |  | 
 | * Moved file ``include/zephyr/drivers/sensor/npm1300_charger.h`` to | 
 |   :zephyr_file:`include/zephyr/drivers/sensor/npm13xx_charger.h` and renamed all instances of | 
 |   ``NPM1300`` to ``NPM13XX`` in the enums | 
 |  | 
 | * Renamed ``CONFIG_NPM1300_CHARGER`` to :kconfig:option:`CONFIG_NPM13XX_CHARGER` | 
 |  | 
 | Serial | 
 | ======= | 
 |  | 
 | * ``uart_native_posix`` has been renamed ``uart_native_pty``, and with it its | 
 |   kconfig options and DT binding. :dtcompatible:`zephyr,native-posix-uart`  has been deprecated | 
 |   in favor of :dtcompatible:`zephyr,native-pty-uart`. | 
 |   :kconfig:option:`CONFIG_UART_NATIVE_POSIX` and its related options with | 
 |   :kconfig:option:`CONFIG_UART_NATIVE_PTY`. | 
 |   The choice :kconfig:option:`CONFIG_NATIVE_UART_0` has been replaced with | 
 |   :kconfig:option:`CONFIG_UART_NATIVE_PTY_0`, but now, it is also possible to select if a UART is | 
 |   connected to the process stdin/out instead of a PTY at runtime with the command line option | 
 |   ``--<uart_name>_stdinout``. | 
 |   :kconfig:option:`CONFIG_NATIVE_UART_AUTOATTACH_DEFAULT_CMD` has been replaced with | 
 |   :kconfig:option:`CONFIG_UART_NATIVE_PTY_AUTOATTACH_DEFAULT_CMD`. | 
 |   :kconfig:option:`CONFIG_UART_NATIVE_WAIT_PTS_READY_ENABLE` has been deprecated. The functionality | 
 |   it enabled is now always enabled as there is no drawbacks from it. | 
 |   :kconfig:option:`CONFIG_UART_NATIVE_POSIX_PORT_1_ENABLE` has been deprecated. This option does | 
 |   nothing now. Instead users should instantiate as many :dtcompatible:`zephyr,native-pty-uart` nodes | 
 |   as native PTY UART instances they want. (:github:`86739`) | 
 |  | 
 | Stepper | 
 | ======= | 
 |  | 
 | * Refactored the ``stepper_enable(const struct device * dev, bool enable)`` function to | 
 |   :c:func:`stepper_enable` & :c:func:`stepper_disable`. | 
 |  | 
 | Timer | 
 | ===== | 
 |  | 
 | * ``native_posix_timer`` has been renamed ``native_sim_timer``, and so its kconfig option | 
 |   :kconfig:option:`CONFIG_NATIVE_POSIX_TIMER` has been deprecated in favor of | 
 |   :kconfig:option:`CONFIG_NATIVE_SIM_TIMER`, (:github:`86612`). | 
 |  | 
 | * :dtcompatible:`andestech,machine-timer`, :dtcompatible:`neorv32-machine-timer`, | 
 |   :dtcompatible:`telink,machine-timer`, :dtcompatible:`lowrisc,machine-timer`, | 
 |   :dtcompatible:`niosv-machine-timer`, and :dtcompatible:`scr,machine-timer` have | 
 |   been unified under :dtcompatible:`riscv,machine-timer`. | 
 |  | 
 |   The addresses of both ``MTIME`` and ``MTIMECMP`` registers must now be explicitly | 
 |   specified using the ``reg`` and ``reg-names`` properties. The ``reg-names`` property | 
 |   is now **required**, and must list names corresponding one-to-one with each entry | 
 |   in ``reg``. (:github:`84175` and :github:`89847`) | 
 |  | 
 |   Example: | 
 |  | 
 |   .. code-block:: devicetree | 
 |  | 
 |     mtimer: timer@d1000000 { | 
 |         compatible = "riscv,machine-timer"; | 
 |         interrupts-extended = <&cpu0_intc 7>; | 
 |         reg = <0xd1000000 0x8 | 
 |                0xd1000008 0x8>; | 
 |         reg-names = "mtime", "mtimecmp"; | 
 |     }; | 
 |  | 
 | * It is now possible to use a ``timebase-frequency`` property in the cpus DTS group to provide | 
 |   the value for :kconfig:option:`CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC` instead of | 
 |   using a value: :github:`91296` | 
 |  | 
 | Video | 
 | ===== | 
 |  | 
 | * 8 bit RAW Bayer formats BGGR8 / GBRG8 / GRBG8 / RGGB8 have been renamed by adding | 
 |   a S prefix in front: | 
 |  | 
 |   ``VIDEO_PIX_FMT_BGGR8`` becomes :c:macro:`VIDEO_PIX_FMT_SBGGR8` | 
 |   ``VIDEO_PIX_FMT_GBRG8`` becomes :c:macro:`VIDEO_PIX_FMT_SGBRG8` | 
 |   ``VIDEO_PIX_FMT_GRBG8`` becomes :c:macro:`VIDEO_PIX_FMT_SGRBG8` | 
 |   ``VIDEO_PIX_FMT_RGGB8`` becomes :c:macro:`VIDEO_PIX_FMT_SRGGB8` | 
 |  | 
 | * On STM32 devices, the DCMI driver (:dtcompatible:`st,stm32-dcmi`) now relies on endpoint based | 
 |   video-interfaces.yaml bindings for sensor interface properties (such as bus width and | 
 |   synchronization signals). | 
 |   Also the ``capture-rate`` property has been replaced by the usage of the frame interval API | 
 |   :c:func:`video_set_frmival`. | 
 |   See (:github:`89627`). | 
 |  | 
 | * :c:enum:`video_endpoint_id` has been dropped. It is no longer a parameter in any video API. | 
 |  | 
 | * :c:enum:`video_buf_type` has been added. It is a required parameter in the following video APIs: | 
 |   :c:func:`set_stream`, :c:func:`video_stream_start`, :c:func:`video_stream_stop` | 
 |  | 
 | * ``video_format.pitch`` has been updated to be set explicitly by the driver, a task formerly | 
 |   required by the application. This update enables the application to correctly allocate a buffer | 
 |   size on a per driver basis. Existing applications will not be broken by this change but can be | 
 |   simplified as performed in the sample in the commit ``33dcbe37cfd3593e8c6e9cfd218dd31fdd533598``. | 
 |  | 
 | * Samples and projects using the :zephyr:board:`native simulator <native_sim>` now require | 
 |   specifying the ``--snippet`` :ref:`video-sw-generator <snippet-video-sw-generator>` to build | 
 |   correctly. | 
 |  | 
 | * :c:func:`video_query_ctrl` now takes a single argument with the :c:struct:`video_ctrl_query`, | 
 |   which now contains a ``video_ctrl_query.dev`` field to specify and read back which device is | 
 |   being queried (:github:`91265`). | 
 |  | 
 | Watchdog | 
 | ======== | 
 | * Renamed ``CONFIG_WDT_NPM1300`` to :kconfig:option:`CONFIG_WDT_NPM13XX`, | 
 |   ``CONFIG_WDT_NPM1300_INIT_PRIORITY`` to :kconfig:option:`CONFIG_WDT_NPM13XX_INIT_PRIORITY` | 
 |  | 
 | qSPI/oSPI/xSPI | 
 | ============== | 
 |  | 
 | * On STM32 devices, external memories device tree descriptions for size and address are now split | 
 |   in two separate properties to comply with specification recommendations. | 
 |  | 
 |   For instance, following external flash description ``reg = <0x70000000 DT_SIZE_M(64)>; /* 512 Mbits /`` | 
 |   is changed to ``reg = <0>;`` ``size = <DT_SIZE_M(512)>; / 512 Mbits */``. | 
 |  | 
 |   Note that the property gives the actual size of the memory device in bits. | 
 |   Previous mapping address information is now described in xspi, ospi or qspi nodes at SoC dtsi level. | 
 |  | 
 | .. zephyr-keep-sorted-stop | 
 |  | 
 | Bluetooth | 
 | ********* | 
 |  | 
 | .. zephyr-keep-sorted-start re(^\w) | 
 |  | 
 | Bluetooth Audio | 
 | =============== | 
 |  | 
 | * ``CONFIG_BT_CSIP_SET_MEMBER_NOTIFIABLE`` has been renamed to | 
 |   :kconfig:option:`CONFIG_BT_CSIP_SET_MEMBER_SIRK_NOTIFIABLE``. (:github:`86763``) | 
 |  | 
 | * ``bt_csip_set_member_get_sirk`` has been removed. Use :c:func:`bt_csip_set_member_get_info` to get | 
 |   the SIRK (and other information). (:github:`86996`) | 
 |  | 
 | * ``BT_AUDIO_CONTEXT_TYPE_PROHIBITED`` has been renamed to | 
 |   :c:enumerator:`BT_AUDIO_CONTEXT_TYPE_NONE`. (:github:`89506`) | 
 |  | 
 | Bluetooth Classic | 
 | ================= | 
 |  | 
 | * The parameters of HFP AG callback ``sco_disconnected`` of the struct :c:struct:`bt_hfp_ag_cb` | 
 |   have been changed to SCO connection object ``struct bt_conn *sco_conn`` and the disconnection | 
 |   reason of the SCO connection ``uint8_t reason``. | 
 |  | 
 | Bluetooth HCI | 
 | ============= | 
 |  | 
 | * The buffer types passing through the HCI driver interface are now indicated as H:4 encoded prefix | 
 |   bytes as part of the buffer payload itself. The bt_buf_set_type() and bt_buf_get_type() functions | 
 |   have been deprecated, but are still usable, with the exception that they can only be | 
 |   called once per buffer. | 
 |  | 
 | * The :c:func:`bt_hci_cmd_create` function has been deprecated and the new :c:func:`bt_hci_cmd_alloc` | 
 |   function should be used instead. The new function takes no parameters because the command | 
 |   sending functions have been updated to do the command header encoding. | 
 |  | 
 | Bluetooth Host | 
 | ============== | 
 |  | 
 | * The symbols ``BT_LE_CS_TONE_ANTENNA_CONFIGURATION_INDEX_<NUMBER>`` in | 
 |   :zephyr_file:`include/zephyr/bluetooth/conn.h` have been renamed | 
 |   to ``BT_LE_CS_TONE_ANTENNA_CONFIGURATION_A<NUMBER>_B<NUMBER>``. | 
 |  | 
 | * The ISO data paths are not longer setup automatically, and shall explicitly be setup and removed | 
 |   by the application by calling :c:func:`bt_iso_setup_data_path` and | 
 |   :c:func:`bt_iso_remove_data_path` respectively. (:github:`75549`) | 
 |  | 
 | * ``BT_ISO_CHAN_TYPE_CONNECTED`` has been split into ``BT_ISO_CHAN_TYPE_CENTRAL`` and | 
 |   ``BT_ISO_CHAN_TYPE_PERIPHERAL`` to better describe the type of the ISO channel, as behavior for | 
 |   each role may be different. Any existing uses/checks for ``BT_ISO_CHAN_TYPE_CONNECTED`` | 
 |   can be replaced with an ``||`` of the two. (:github:`75549`) | 
 |  | 
 | * The ``struct _bt_gatt_ccc`` in :zephyr_file:`include/zephyr/bluetooth/gatt.h` has been renamed to | 
 |   struct :c:struct:`bt_gatt_ccc_managed_user_data`. (:github:`88652`) | 
 |  | 
 | * The macro ``BT_GATT_CCC_INITIALIZER`` in :zephyr_file:`include/zephyr/bluetooth/gatt.h` | 
 |   has been renamed to :c:macro:`BT_GATT_CCC_MANAGED_USER_DATA_INIT`. (:github:`88652`) | 
 |  | 
 | * The ``CONFIG_BT_ISO_TX_FRAG_COUNT`` Kconfig option was removed as it was completely unused. | 
 |   Any uses of it can simply be removed. (:github:`89836`) | 
 |  | 
 | .. zephyr-keep-sorted-stop | 
 |  | 
 | Networking | 
 | ********** | 
 |  | 
 | * The struct ``net_linkaddr_storage`` has been renamed to struct | 
 |   :c:struct:`net_linkaddr` and the old struct ``net_linkaddr`` has been removed. | 
 |   The struct :c:struct:`net_linkaddr` now contains space to store the link | 
 |   address instead of having pointer that point to the link address. This avoids | 
 |   possible dangling pointers when cloning struct :c:struct:`net_pkt`. This will | 
 |   increase the size of struct :c:struct:`net_pkt` by 4 octets for IEEE 802.15.4, | 
 |   but there is no size increase for other network technologies like Ethernet. | 
 |   Note that any code that is using struct :c:struct:`net_linkaddr` directly, and | 
 |   which has checks like ``if (lladdr->addr == NULL)``, will no longer work as expected | 
 |   (because the addr is not a pointer) and must be changed to ``if (lladdr->len == 0)`` | 
 |   if the code wants to check that the link address is not set. | 
 |  | 
 | * TLS credential type ``TLS_CREDENTIAL_SERVER_CERTIFICATE`` was renamed to | 
 |   more generic :c:enumerator:`TLS_CREDENTIAL_PUBLIC_CERTIFICATE` to better | 
 |   reflect the purpose of this credential type. | 
 |  | 
 | * The MQTT public API function :c:func:`mqtt_disconnect` has changed. The function | 
 |   now accepts additional ``param`` parameter to support MQTT 5.0 case. The parameter | 
 |   is optional and not used with older MQTT versions - MQTT 3.1.1 users should pass | 
 |   NULL as an argument. | 
 |  | 
 | * The ``AF_PACKET/SOCK_RAW/IPPROTO_RAW`` socket combination is no longer supported, | 
 |   as ``AF_PACKET`` sockets should only accept IEEE 802.3 protocol numbers. As an | 
 |   alternative, ``AF_PACKET/SOCK_DGRAM/ETH_P_ALL`` or ``AF_INET(6)/SOCK_RAW/IPPROTO_IP`` | 
 |   sockets can be used, depending on the actual use case. | 
 |  | 
 | * The HTTP server now respects the configured ``_concurrent`` and  ``_backlog`` values. Check that | 
 |   you provide applicable values to :c:macro:`HTTP_SERVICE_DEFINE_EMPTY`, | 
 |   :c:macro:`HTTPS_SERVICE_DEFINE_EMPTY`, :c:macro:`HTTP_SERVICE_DEFINE` and | 
 |   :c:macro:`HTTPS_SERVICE_DEFINE`. | 
 |  | 
 | * :kconfig:option:`CONFIG_NET_ZPERF` no longer includes server support by default. To use | 
 |   the server commands, enable :kconfig:option:`CONFIG_NET_ZPERF_SERVER`. If server support | 
 |   is not needed, :kconfig:option:`CONFIG_ZVFS_POLL_MAX` can possibly be reduced. | 
 |  | 
 | * The L2 Wi-Fi shell now supports interface option for most commands, to accommodate this | 
 |   change some of the existing options have been renamed. The following table | 
 |   summarizes the changes: | 
 |  | 
 |   +------------------------+---------------------+--------------------+ | 
 |   | Command(s)             | Old option          | New option         | | 
 |   +------------------------+---------------------+--------------------+ | 
 |   | ``wifi connect``       | ``-i``              | ``-g``             | | 
 |   | ``wifi ap enable``     |                     |                    | | 
 |   +------------------------+---------------------+--------------------+ | 
 |   | ``wifi twt setup``     | ``-i``              | ``-p``             | | 
 |   +------------------------+---------------------+--------------------+ | 
 |   | ``wifi ap config``     | ``-i``              | ``-t``             | | 
 |   +------------------------+---------------------+--------------------+ | 
 |   | ``wifi mode``          | ``--if-index``      | ``--iface``        | | 
 |   | ``wifi channel``       |                     |                    | | 
 |   | ``wifi packet_filter`` |                     |                    | | 
 |   +------------------------+---------------------+--------------------+ | 
 |  | 
 | * The :c:type:`http_response_cb_t` HTTP client response callback signature has | 
 |   changed. The callback function now returns ``int`` instead of ``void``. This | 
 |   allows the application to abort the HTTP connection. Existing applications | 
 |   need to update their response callback implementations. To retain current | 
 |   behavior, simply return 0 from the callback. | 
 |  | 
 | * The API signature of ``net_mgmt`` event handler :c:type:`net_mgmt_event_handler_t` and | 
 |   request handler :c:type:`net_mgmt_request_handler_t` has changed. The management event | 
 |   type is changed from ``uint32_t`` to ``uint64_t``. The change allows event number values | 
 |   to be bit masks instead of enum values. The layer code still stays as a enum value. | 
 |   The :c:macro:`NET_MGMT_LAYER_CODE` and :c:macro:`NET_MGMT_GET_COMMAND` can be used to get | 
 |   the layer code and management event command from the actual event value in the request or | 
 |   event handlers if needed. | 
 |  | 
 | * The socket options for ``net_mgmt`` type sockets cannot directly be network management | 
 |   event types as those are now ``uint64_t`` and the socket option expects a normal 32 bit | 
 |   integer value. Because of this, a new ``SO_NET_MGMT_ETHERNET_SET_QAV_PARAM`` | 
 |   and ``SO_NET_MGMT_ETHERNET_GET_QAV_PARAM`` socket options are created that will replace | 
 |   the previously used ``NET_REQUEST_ETHERNET_SET_QAV_PARAM`` and | 
 |   ``NET_REQUEST_ETHERNET_GET_QAV_PARAM`` options. | 
 |  | 
 | * The DNS server resolver configuration functions :c:func:`dns_resolve_reconfigure` and | 
 |   :c:func:`dns_resolve_reconfigure_with_interfaces` now require that the user supplies | 
 |   the source of the DNS server information. For example when DNS server information is | 
 |   received via DHCPv4, then :c:enumerator:`DNS_SOURCE_DHCPV4` needs to be specified. | 
 |  | 
 | .. zephyr-keep-sorted-start re(^\w) | 
 |  | 
 | LwM2M | 
 | ===== | 
 |  | 
 | * Accelerometer object: optional resources Y value, Z value, min range value, | 
 |   max range value can now be used optionally as per the accelerometer object's | 
 |   specification. Users of these resources will now need to provide a read | 
 |   buffer. | 
 |  | 
 | OpenThread | 
 | ========== | 
 |  | 
 | * The OpenThread stack integration in Zephyr has undergone a major refactor. | 
 |   The implementation has been moved from the Zephyr networking layer (``subsys/net/l2/openthread/``) | 
 |   to a dedicated module (``modules/openthread/``). | 
 |  | 
 | * OpenThread is now a standalone module in Zephyr. | 
 |   It can be used independently of Zephyr's networking stack (L2 and IEEE802.15.4 shim layers). | 
 |   This enables new use cases, such as applications that use OpenThread directly with their | 
 |   own IEEE802.15.4 driver, or that do not need the full Zephyr networking stack. | 
 |  | 
 | * Most functions in the :zephyr_file:`include/zephyr/net/openthread.h` file have been deprecated. | 
 |   These deprecated APIs are still available for backward compatibility, but new applications should | 
 |   use the new APIs provided by the OpenThread module. The following list summarizes the changes: | 
 |  | 
 |   * Mutex handling: | 
 |  | 
 |     * Previously: | 
 |  | 
 |       * ``openthread_api_mutex_lock`` | 
 |       * ``openthread_api_mutex_try_lock`` | 
 |       * ``openthread_api_mutex_unlock`` | 
 |  | 
 |     * Now use: | 
 |  | 
 |       * :c:func:`openthread_mutex_lock` | 
 |       * :c:func:`openthread_mutex_try_lock` | 
 |       * :c:func:`openthread_mutex_unlock` | 
 |  | 
 |   * OpenThread starting: | 
 |  | 
 |     * Previously: ``openthread_start`` | 
 |     * Now use: :c:func:`openthread_run` | 
 |  | 
 |   * Callback registration: | 
 |  | 
 |     * Previously: | 
 |  | 
 |       * ``openthread_state_changed_cb_register`` | 
 |       * ``openthread_state_changed_cb_unregister`` | 
 |  | 
 |     * Now use: | 
 |  | 
 |       * :c:func:`openthread_state_changed_callback_register` | 
 |       * :c:func:`openthread_state_changed_callback_unregister` | 
 |  | 
 |   * Callback structure: | 
 |  | 
 |     * Previously: ``openthread_state_changed_cb`` | 
 |     * Now use: :c:struct:`openthread_state_changed_callback` | 
 |  | 
 |   * The following :c:struct:`openthread_context` struct fields are deprecated and shall not be used | 
 |     in new code anymore: | 
 |  | 
 |     * ``instance`` | 
 |     * ``api_lock`` | 
 |     * ``work_q`` | 
 |     * ``api_work`` | 
 |     * ``state_change_cbs`` | 
 |  | 
 |   * The new functions that were not present before: | 
 |  | 
 |     * :c:func:`openthread_init` to initialize the OpenThread stack. | 
 |     * :c:func:`openthread_stop` to stop and disable the OpenThread stack. | 
 |     * :c:func:`openthread_set_receive_cb` to set the receive callback for the OpenThread stack. | 
 |  | 
 | * The OpenThread-related Kconfig options from ``subsys/net/l2/openthread/Kconfig`` | 
 |   have been moved to :zephyr_file:`modules/openthread/Kconfig`. All Kconfig options remain the same. | 
 |   You can still use them in the same way as before, but to modify them, use the new path in the | 
 |   menuconfig or guiconfig. | 
 |  | 
 | * If the :kconfig:option:`CONFIG_NET_L2_OPENTHREAD` Kconfig option is enabled, Zephyr's L2 layer | 
 |   will use the new OpenThread module API as its backend. The L2 layer no longer implements | 
 |   OpenThread itself, but delegates the implementation to the module. | 
 |  | 
 | * For existing applications using OpenThread through Zephyr's networking stack: | 
 |  | 
 |   * Your application should continue to work, as the old APIs are still available for compatibility. | 
 |     However, you are encouraged to migrate to the new APIs for future-proofing and use the new | 
 |     modular structure. | 
 |   * Update any references to OpenThread Kconfig options to use the new path | 
 |     (``modules/openthread/Kconfig``) in your configuration tools. | 
 |  | 
 | * For applications using :c:struct:`openthread_context` or other deprecated APIs: | 
 |  | 
 |   * Begin migrating to the new APIs. The deprecated APIs will be removed in a future release. | 
 |   * Avoid direct use of :c:struct:`openthread_context` and related fields; use the new | 
 |     initialization and callback registration functions instead. | 
 |  | 
 | * For new applications or those using OpenThread without Zephyr L2: | 
 |  | 
 |   * Use the new initialization (:c:func:`openthread_init`), run (:c:func:`openthread_run`), | 
 |     and callback registration APIs (:c:func:`openthread_state_change_callback_register`). | 
 |   * You can now use OpenThread directly, without enabling Zephyr's L2 or IEEE802.15.4 layers, if | 
 |     your use case allows. | 
 |  | 
 | .. zephyr-keep-sorted-stop | 
 |  | 
 |  | 
 | Other subsystems | 
 | **************** | 
 |  | 
 | .. zephyr-keep-sorted-start re(^\w) | 
 |  | 
 | Modbus | 
 | ====== | 
 |  | 
 | * The ``client_stop_bits`` field in :c:struct:`modbus_serial_param` has been renamed into ``stop_bits``. | 
 |   The setting is valid in both client and server modes. | 
 | * Custom stop-bit settings are disabled by default and should be enabled | 
 |   by :kconfig:option:`CONFIG_MODBUS_NONCOMPLIANT_SERIAL_MODE`. | 
 |  | 
 | State Machine Framework | 
 | ======================= | 
 |  | 
 | * :c:func:`smf_set_handled` has been removed. | 
 | * State run actions now return an :c:enum:`smf_state_result` value instead of void. and the return | 
 |   code determines if the event is propagated to parent run actions or has been handled. A run action | 
 |   that handles the event completely should return :c:enum:`SMF_EVENT_HANDLED`, and run actions that | 
 |   propagate handling to parent states should return :c:enum:`SMF_EVENT_PROPAGATE`. | 
 | * Flat state machines ignore the return value; returning :c:enum:`SMF_EVENT_HANDLED` | 
 |   would be the most technically accurate response. | 
 |  | 
 | hawkBit | 
 | ======= | 
 |  | 
 | * When :kconfig:option:`CONFIG_HAWKBIT_CUSTOM_DEVICE_ID` is enabled, device_id will no longer | 
 |   be prepended with :kconfig:option:`CONFIG_BOARD`. It is the user's responsibility to write a | 
 |   callback that prepends the board name if needed. | 
 |  | 
 | .. zephyr-keep-sorted-stop | 
 |  | 
 | Modules | 
 | ******* | 
 |  | 
 | .. zephyr-keep-sorted-start re(^\w) | 
 |  | 
 | CMSIS | 
 | ===== | 
 |  | 
 | * Cortex-M boards/socs now require the ``CMSIS_6`` module to build properly (instead of ``cmsis`` | 
 |   which was CMSIS 5.9.0). | 
 |   If trying to build a Cortex-M board, do a ``west update`` to make sure that ``CMSIS_6`` module is | 
 |   available before running ``west build`` or other commands. | 
 |  | 
 |   Boards or SOCs or modules using the older ``cmsis`` module either with a local copy or via the | 
 |   :kconfig:option:`CONFIG_ZEPHYR_CMSIS_MODULE_DIR` are requested to move to the ``CMSIS_6`` module | 
 |   which can be accessed via the :kconfig:option:`CONFIG_ZEPHYR_CMSIS_6_MODULE_DIR` configuration. | 
 |  | 
 |   Note: Zephyr will continue using the older ``cmsis`` module for Cortex-A and Cortex-R targets. | 
 |  | 
 | .. zephyr-keep-sorted-stop | 
 |  | 
 | Architectures | 
 | ************* | 
 |  | 
 | * Moved :kconfig:option:`CONFIG_SRAM_VECTOR_TABLE` from ``zephyr/Kconfig.zephyr`` to | 
 |   ``zephyr/arch/Kconfig`` and added dependency to :kconfig:option:`CONFIG_XIP`, | 
 |   :kconfig:option:`CONFIG_ARCH_HAS_VECTOR_TABLE_RELOCATION` and | 
 |   :kconfig:option:`CONFIG_ROMSTART_RELOCATION_ROM` to support relocation | 
 |   of vector table in RAM. | 
 | * Renamed :kconfig:option:`CONFIG_DEBUG_INFO` to :kconfig:option:`CONFIG_X86_DEBUG_INFO` to | 
 |   better reflect its purpose. This option is now only available for x86 architecture. |