blob: 7525855bda77bfc89358de1d97a71eb2e54fac8e [file] [edit]
: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.4:
Migration guide to Zephyr v4.4.0
################################
This document describes the changes required when migrating your application from Zephyr v4.3.0 to
Zephyr v4.4.0.
Any other changes (not directly related to migrating applications) can be found in
the :ref:`release notes<zephyr_4.4>`.
.. contents::
:local:
:depth: 2
Common
******
* The minimum required Zephyr SDK version is now 1.0.0.
* The minimum required Python version is now 3.12 (from 3.10).
Build System
************
* Zephyr now officially defaults to C17 (ISO/IEC 9899:2018) as its minimum required
C standard version. If your toolchain does not support this standard you will
need to use one of the existing and now deprecated options:
:kconfig:option:`CONFIG_STD_C99` or :kconfig:option:`CONFIG_STD_C11`.
* The ``full_name`` property of ``board``/``boards`` entries corresponding to new boards in
board.yml files is now required.
* The CMake variable ``BOARD_QUALIFIERS`` is aligned with the corresponding
:kconfig:option:`CONFIG_BOARD_QUALIFIERS` so that it is no longer prefixed with a ``/``.
This means that any use of ``${BOARD}${BOARD_QUALIFIERS}`` must be updated to include ``/``, like
this: ``${BOARD}/${BOARD_QUALIFIERS}``.
* ``SNIPPET_ROOT`` has been aligned with other Zephyr ``<type>_ROOT`` settings which doesn't include
the application source dir per-default. Samples requiring application source dir to be added to
``SNIPPET_ROOT`` must instead add the application source dir using ``snippet_root = <dir>`` entry
in :file:`zephyr/module.yml` or manually append the folder to the CMake variable ``SNIPPET_ROOT``.
* Shell autocompletions (``west completion``) should be regenerated as board target auto-complete now
supports board revisions.
Kernel
******
* Heap hardening support has been implemented by adding a build time generated
``zephyr/heap_constants.h`` file that is now included from ``kernel.h``. This
may create a build race condition for downstream application built as a cmake
library where cmake may try to build them before the header file is
generated, these may need an extra ``add_dependencies(${lib} zephyr_generated_headers)``
entry in cmake, see :github:`106439` for mode details.
Boards
******
* The OpenOCD runner now uses the standard ``--file`` and ``--file-type`` interface for specifying
flash files, aligning with other runners like JLink. The following changes apply:
* The ``--use-hex``, ``--use-elf``, and ``--use-bin`` flags are deprecated. Use ``--file-type``
instead:
* ``--use-elf`` → ``--file-type=elf``
* ``--use-bin`` → ``--file-type=bin``
* ``--use-hex`` → ``--file-type=hex`` (or omit, as hex is the default)
* The ``--file`` option is now supported to specify a custom file path, similar to the JLink
runner.
* Board cmake files using the deprecated flags will continue to work but will emit a deprecation
warning.
* The ``--file-type`` option can now be used without ``--file`` to select between build artifacts
(hex, elf, bin).
* native_sim: host FUSE access: Defaults to using libfusev3 now instead of v2. But can be chosen
with :kconfig:option:`CONFIG_FUSE_LIBRARY_VERSION` (:github:`104965`).
* m5stack_fire: Removed unused pinctrl entries for UART2, and updated the UART1
pin mapping from GPIO32/GPIO33 to GPIO16/GPIO17 to match the documented Grove
PORT.C wiring.
* The Ai-Thinker ``ai_m62_12f`` and ``ai_wb2_12f`` boards have been renamed to
``ai_m62_12f_kit`` and ``ai_wb2_12f_kit`` respectively.
* Compile definitions 'XIP_EXTERNAL_FLASH', 'USE_HYPERRAM' and 'XIP_BOOT_HEADER_XMCD_ENABLE'
are only used in :zephyr_file:`boards/nxp/mimxrt1180_evk/xip/evkmimxrt1180_flexspi_nor_config.c`
and :zephyr_file:`boards/nxp/mimxrt1170_evk/xmcd/xmcd.c`, we have changed them to local scope
in the respective board CMakeLists.txt files. Applications that depended on these definitions
being globally available may need to be updated. (:github:`101322`)
* Renesas ``ek_ra8t2/r7ka8t2lfecac/cm85`` is renamed to ``ek_ra8t2/r7ka8t2lflcac/cm85``.
* NXP has changed the scope of some in-tree compile flags to limit their visibility to only where
they are needed. Out-of-tree applications or boards that depended on these flags being globally
available may need to add them to their own CMakeLists.txt files to ensure they continue to build
correctly. (:github:`100252`)
The affected flags are listed below:
* For the RT10xx and RT11xx families, the compile flag ``BOARD_FLASH_SIZE``, originally defined in
``boards/nxp/mimxrt10xx_evk/CMakeLists.txt`` and ``boards/nxp/mimxrt11xx_evk/CMakeLists.txt``, is
used only by the HAL header ``fsl_flexspi_nor_boot.h``, which is included by
:zephyr_file:`soc/nxp/imxrt/imxrt10xx/soc.c` and :zephyr_file:`soc/nxp/imxrt/imxrt11xx/soc.c`.
To avoid potential collisions with other global flags, the macro is now defined at the SoC layer
using ``zephyr_library_compile_definitions()`` in :zephyr_file:`soc/nxp/imxrt/imxrt10xx/CMakeLists.txt`
and :zephyr_file:`soc/nxp/imxrt/imxrt11xx/CMakeLists.txt`. This change has been applied to all
RTxxxx boards.
* For the RTxxx family, the compile flag ``BOARD_FLASH_SIZE``, originally defined in
``boards/nxp/mimxrtxxx_evk/CMakeLists.txt``, is not used in the Zephyr tree and has
therefore been removed from all RTxxx board CMakeLists.txt files.
* For the RTxxx family, the compile flag ``BOOT_HEADER_ENABLE``, previously defined in
``boards/nxp/mimxrtxxx_evk/CMakeLists.txt`` and used in ``boards/nxp/rtxxx/<boot_header>.c``,
has been replaced by a Kconfig option. Consequently, the line
``zephyr_compile_definitions(BOOT_HEADER_ENABLE=1)`` has been removed from the RTxxx board
CMakeLists.txt files.
* Removed compile flag ``BOOT_HEADER_ENABLE`` definition from :zephyr_file:`boards/nxp/rd_rw612_bga/CMakeLists.txt`,
as it is not used in the Zephyr tree.
* Originally, the compile flags ``XIP_BOOT_HEADER_ENABLE`` and ``XIP_BOOT_HEADER_DCD_ENABLE`` were
used in ``boards/nxp/rt1xxx/<boot_header>.c``. These flags have been converted to Kconfig options
across NXP RTxxxx evaluation boards, allowing boot-header configuration via the Kconfig build system
instead of compile-time defines. Consequently, we removed ``zephyr_compile_definitions(XIP_BOOT_HEADER_ENABLE=1)``
and ``zephyr_compile_definitions(XIP_BOOT_HEADER_DCD_ENABLE=1)`` from the RTxxxx board-level CMakeLists.txt files.
Because these macros are also required by ``hal_nxp/rt10xx/fsl_flexspi_nor_boot.h`` and
``hal_nxp/rt11xx/fsl_flexspi_nor_boot.h``, they were added to the corresponding SoC-layer CMakeLists.txt files
using ``zephyr_library_compile_definitions()`` to limit their scope.
* The following Nordic SoC Kconfigs have been deprecated and replaced, and Kconfig/CMake/code
needs to be updated if they reference the deprecated Kconfigs:
* :kconfig:option:`CONFIG_SOC_SERIES_NRF51X` with :kconfig:option:`CONFIG_SOC_SERIES_NRF51`
* :kconfig:option:`CONFIG_SOC_SERIES_NRF52X` with :kconfig:option:`CONFIG_SOC_SERIES_NRF52`
* :kconfig:option:`CONFIG_SOC_SERIES_NRF53X` with :kconfig:option:`CONFIG_SOC_SERIES_NRF53`
* :kconfig:option:`CONFIG_SOC_SERIES_NRF54HX` with :kconfig:option:`CONFIG_SOC_SERIES_NRF54H`
* :kconfig:option:`CONFIG_SOC_SERIES_NRF54LX` with :kconfig:option:`CONFIG_SOC_SERIES_NRF54L`
* :kconfig:option:`CONFIG_SOC_SERIES_NRF91X` with :kconfig:option:`CONFIG_SOC_SERIES_NRF91`
* :kconfig:option:`CONFIG_SOC_SERIES_NRF92X` with :kconfig:option:`CONFIG_SOC_SERIES_NRF92`
* The following Sifive Freedom SoC Kconfigs have been deprecated and replaced, and
Kconfig/CMake/code needs to be updated if they reference the deprecated Kconfigs:
* :kconfig:option:`CONFIG_SOC_SERIES_SIFIVE_FREEDOM_FE300` with
:kconfig:option:`CONFIG_SOC_SERIES_FE300`
* :kconfig:option:`CONFIG_SOC_SIFIVE_FREEDOM_FE310_G000` with
:kconfig:option:`CONFIG_SOC_FE310_G000`
* :kconfig:option:`CONFIG_SOC_SIFIVE_FREEDOM_FE310_G002` with
:kconfig:option:`CONFIG_SOC_FE310_G002`
* :kconfig:option:`CONFIG_SOC_SERIES_SIFIVE_FREEDOM_FU500` with
:kconfig:option:`CONFIG_SOC_SERIES_FU500`
* :kconfig:option:`CONFIG_SOC_SIFIVE_FREEDOM_FU540` with :kconfig:option:`CONFIG_SOC_FU540`
* :kconfig:option:`CONFIG_SOC_SIFIVE_FREEDOM_FU540_E51` with
:kconfig:option:`CONFIG_SOC_FU540_E51`
* :kconfig:option:`CONFIG_SOC_SIFIVE_FREEDOM_FU540_U54` with
:kconfig:option:`CONFIG_SOC_FU540_U54`
* :kconfig:option:`CONFIG_SOC_SERIES_SIFIVE_FREEDOM_FU700` with
:kconfig:option:`CONFIG_SOC_SERIES_FU700`
* :kconfig:option:`CONFIG_SOC_SIFIVE_FREEDOM_FU740` with :kconfig:option:`CONFIG_SOC_FU740`
* :kconfig:option:`CONFIG_SOC_SIFIVE_FREEDOM_FU740_S7` with :kconfig:option:`CONFIG_SOC_FU740_S7`
* :kconfig:option:`CONFIG_SOC_SIFIVE_FREEDOM_FU740_U74` with
:kconfig:option:`CONFIG_SOC_FU740_U74`
* ITE ``it515xx_evb`` is renamed to ``it51xxx_evb``.
* Boards that use :kconfig:option:`CONFIG_USE_DT_CODE_PARTITION` or have a
``zephyr,code-partition`` chosen node set should now use the new
:dtcompatible:`zephyr,mapped-partition` compatible. This binding uses the devicetree unit address
to be able to get the memory-mapped address of the partition rather than having to manually go up
child nodes until a node with a specific name is found in order to calculate it, and also
disallows usage of :kconfig:option:`CONFIG_FLASH_LOAD_OFFSET` and
:kconfig:option:`CONFIG_FLASH_LOAD_SIZE` when a :dtcompatible:`zephyr,mapped-partition` is used,
as the linker file can now work out the NVM offset and size without needing Kconfig to perform
math operations as an intermediate step. In addition, :dtcompatible:`fixed-subpartitions` are no
longer needed on memory-mapped devices when switching to :dtcompatible:`zephyr,mapped-partition`
as these can natively be nested inside of each other and will have the correct addresses and
offsets (when used with the devicetree ``ranges`` property).
:kconfig:option:`CONFIG_FLASH_CODE_PARTITION_USING_FIXED_PARTITIONS` will be set on board
targets that have not updated to use the :dtcompatible:`zephyr,mapped-partition` binding for
``zephyr,code-partition`` chosen devices. Support for using fixed-partitions as the chosen
``zephyr,code-partition`` node will be deprecated in the future.
* Boards or projects based on STM32N6x SoCs (:kconfig:option:`CONFIG_SOC_SERIES_STM32N6X`) now need
to explicitly enable :kconfig:option:`CONFIG_TRUSTED_EXECUTION_SECURE` when the Zephyr
application is expected to execute in the secure state of the processor. Alternatively, if the
Zephyr application is expected to execute in the non-secure state of the processor, the board or
project must explicitly enable :kconfig:option:`CONFIG_TRUSTED_EXECUTION_NON_SECURE`.
* The following WCH SoC Kconfigs have been renamed. Kconfig/CMake/code
needs to be updated if they reference the old Kconfigs:
* ``CONFIG_SOC_SERIES_CH32V00X`` with :kconfig:option:`CONFIG_SOC_SERIES_QINGKE_V2C`
Device Drivers and Devicetree
*****************************
.. zephyr-keep-sorted-start re(^\w) ignorecase
ADC
===
* The :dtcompatible:`renesas,ra-adc` compatible has been replaced by
:dtcompatible:`renesas,ra-adc12`. Applications using the old compatible
must update their devicetree nodes.
* The :dtcompatible:`renesas,ra-adc16` compatible was added. This must be
used when working with the EK-RA2A1 board, which provides a 16-bit ADC
resolution.
* Renamed the :kconfig:option:`CONFIG_ADC_MCUX_SAR_ADC` to :kconfig:option:`CONFIG_ADC_NXP_SAR_ADC`.
* Renamed the driver file from ``adc_mcux_sar_adc.c`` to :zephyr_file:`drivers/adc/adc_nxp_sar_adc.c`.
* Applications using the SAR ADC driver need to update the nodes in the devicetree to include
``zephyr,input-positive`` to specify the hardware channel. For SoCs that currently support SAR ADC,
the reference voltage should use ``ADC_REF_VDD_1`` instead of ``ADC_REF_INTERNAL``. This driver
update also corrects this issue, so users also need to update the value of this property in the
devicetree accordingly. (:github:`100978`)
* :dtcompatible:`st,stm32-adc` no longer has the ``resolutions`` property. It is replaced by the
``st,adc-resolutions`` property. For STM32H7 devices in revision Y, it is no longer needed to
replace the 14 and 12-bit resolution values. This change may have an impact on power consumption
if 14 or 12-bit resolutions are used. Previously, power-optimized values were used, now the
standard values (not power-optimized but better accuracy) are used. No impact on other series.
Clock Control
=============
* ``bflb,bl60x-pll``, ``bflb,bl61x-root-clk``, ``bflb,bl60x-root-clk``, ``bflb,bl61x-wifipll``,
``bflb,bl70x-root-clk`` and ``bflb,bl61x-flash-clk`` got respectively replaced with
:dtcompatible:`bflb,flash-clk`, :dtcompatible:`bflb,pll` and :dtcompatible:`bflb,root-clk`.
* The :dtcompatible:`infineon,peri-div` clock control binding has removed the ``resource-type``,
``resource-instance``, and ``resource-channel`` properties. These properties are no longer used by
the driver and the corresponding fields have been removed from the driver's internal data structures.
Out-of-tree boards using this compatible must remove these properties from their devicetree nodes.
(:github:`105393`)
Controller Area Network (CAN)
=============================
* Removed ``CONFIG_CAN_MAX_FILTER``, ``CONFIG_CAN_MAX_STD_ID_FILTER``,
``CONFIG_CAN_MAX_EXT_ID_FILTER`` (:github:`100596`). These are replaced by the following
driver-specific Kconfig symbols, some of which have had their default value increased to meet
typical software needs:
* :kconfig:option:`CONFIG_CAN_LOOPBACK_MAX_FILTERS` for :dtcompatible:`zephyr,can-loopback`
* :kconfig:option:`CONFIG_CAN_MAX32_MAX_FILTERS` for :dtcompatible:`adi,max32-can`
* :kconfig:option:`CONFIG_CAN_MCP2515_MAX_FILTERS` for :dtcompatible:`microchip,mcp2515`
* :kconfig:option:`CONFIG_CAN_MCP251XFD_MAX_FILTERS` for :dtcompatible:`microchip,mcp251xfd`
* :kconfig:option:`CONFIG_CAN_MCUX_FLEXCAN_MAX_FILTERS` for :dtcompatible:`nxp,flexcan`
* :kconfig:option:`CONFIG_CAN_NATIVE_LINUX_MAX_FILTERS` for
:dtcompatible:`zephyr,native-linux-can`
* :kconfig:option:`CONFIG_CAN_RCAR_MAX_FILTERS` for :dtcompatible:`renesas,rcar-can`
* :kconfig:option:`CONFIG_CAN_SJA1000_MAX_FILTERS` for :dtcompatible:`kvaser,pcican` and
:dtcompatible:`espressif,esp32-twai`
* :kconfig:option:`CONFIG_CAN_STM32_BXCAN_MAX_EXT_ID_FILTERS` for :dtcompatible:`st,stm32-bxcan`
* :kconfig:option:`CONFIG_CAN_STM32_BXCAN_MAX_STD_ID_FILTERS` for :dtcompatible:`st,stm32-bxcan`
* :kconfig:option:`CONFIG_CAN_STM32_FDCAN_MAX_EXT_ID_FILTERS` for :dtcompatible:`st,stm32-fdcan`
* :kconfig:option:`CONFIG_CAN_STM32_FDCAN_MAX_STD_ID_FILTERS` for :dtcompatible:`st,stm32-fdcan`
* :kconfig:option:`CONFIG_CAN_XMC4XXX_MAX_FILTERS` for :dtcompatible:`infineon,xmc4xxx-can-node`
* Replaced Kconfig option ``CONFIG_CAN_MAX_MB`` for :dtcompatible:`nxp,flexcan` and
:dtcompatible:`nxp,flexcan-fd` with per-instance a ``number-of-mb`` devicetree property
(:github:`99483`).
* The :dtcompatible:`nxp,flexcan` ``clk-source`` devicetree property, if present, now automatically
selects between the named input clocks ``clksrc0`` and ``clksrc1`` for use as the CAN protocol
engine clock.
* Renamed the NXP LPC family MCAN driver Kconfig option ``CONFIG_CAN_MCUX_MCAN`` to
:kconfig:option:`CONFIG_CAN_NXP_LPC_MCAN` as this driver is not based on the NXP MCUXpresso HAL
(:github:`103679`).
* Added devicetree property ``ti,nwkrq-voltage-vio`` to :dtcompatible:`ti,tcan4x5x` to allow
configuring the voltage rail used for the ``nWKRQ`` pin. To maintain previous driver default of
using VIO, this property must be set (:github:`104182`).
Counter
=======
* Drivers that implement ``get_value_64`` API will now need to select
:kconfig:option:`CONFIG_COUNTER_SUPPORTS_64BITS_TICKS` and applications will need
:kconfig:option:`CONFIG_COUNTER_64BITS_TICKS` to enable the API. (:github:`94189`).
* The NXP LPTMR driver (:dtcompatible:`nxp,lptmr`) has been updated to fix incorrect
prescaler and glitch filter configuration:
* The ``prescale-glitch-filter`` property valid range changed from ``[0-16]`` to ``[0-15]``.
The value ``16`` was invalid for pulse counter mode and has been removed. Device trees using
value ``16`` must be updated to use values in the range ``[0-15]``.
* A new boolean property ``prescale-glitch-filter-bypass`` has been introduced to explicitly
control prescaler/glitch filter bypass. Previously, setting ``prescale-glitch-filter = <0>``
implicitly enabled bypass mode, which was ambiguous.
In v4.4 and later, bypass is controlled only by the presence of
``prescale-glitch-filter-bypass``. If the property is absent, the prescaler/glitch filter is
active and ``prescale-glitch-filter`` is applied.
* The prescaler/glitch filter behavior has been clarified:
* In Time Counter mode: prescaler divides the clock by ``2^(prescale-glitch-filter + 1)``
* In Pulse Counter mode: glitch filter recognizes change after ``2^prescale-glitch-filter``
rising edges (value 0 is not supported for glitch filtering)
* All in-tree device tree nodes have been updated to use ``prescale-glitch-filter-bypass;``
instead of ``prescale-glitch-filter = <0>;``. Out-of-tree boards should be updated
accordingly.
* If both ``prescale-glitch-filter-bypass`` and ``prescale-glitch-filter`` are set,
bypass mode takes precedence and the ``prescale-glitch-filter`` value is ignored.
Example migration:
.. code-block:: devicetree
/* Old (deprecated) */
lptmr0: counter@40040000 {
compatible = "nxp,lptmr";
/* Implicitly bypassed */
prescale-glitch-filter = <0>;
};
/* New (correct) */
lptmr0: counter@40040000 {
compatible = "nxp,lptmr";
/* Explicitly bypassed */
prescale-glitch-filter-bypass;
};
.. rubric:: Examples of using ``prescale-glitch-filter``
.. note::
``prescale-glitch-filter-bypass`` is a boolean. If present, bypass is enabled. If absent,
bypass is disabled and ``prescale-glitch-filter`` is applied.
In Pulse Counter mode, ``prescale-glitch-filter = <0>`` is not a supported glitch filter
configuration. To request no filtering, use ``prescale-glitch-filter-bypass;``.
* Time Counter mode: divide the counter clock
In Time Counter mode the prescaler divides by ``2^(N + 1)``.
.. code-block:: devicetree
/* Divide by 2^(0+1) = 2 */
lptmr0: counter@40040000 {
compatible = "nxp,lptmr";
/* Time Counter mode */
timer-mode-sel = <0>;
clk-source = <1>;
clock-frequency = <32768>;
/* /2 */
prescale-glitch-filter = <0>;
resolution = <16>;
};
/* Divide by 2^(3+1) = 16 */
lptmr1: counter@40041000 {
compatible = "nxp,lptmr";
/* Time Counter mode */
timer-mode-sel = <0>;
clk-source = <1>;
clock-frequency = <32768>;
/* /16 */
prescale-glitch-filter = <3>;
resolution = <16>;
};
* Time Counter mode: explicit bypass (no division)
.. code-block:: devicetree
lptmr0: counter@40040000 {
compatible = "nxp,lptmr";
/* Time Counter mode */
timer-mode-sel = <0>;
clk-source = <1>;
clock-frequency = <32768>;
/* no prescaler */
prescale-glitch-filter-bypass;
resolution = <16>;
};
* Pulse Counter mode: glitch filtering
In Pulse Counter mode the glitch filter recognizes a change after ``2^N`` rising edges.
Value ``0`` is not supported for glitch filtering; use bypass if you want no filtering.
.. code-block:: devicetree
/* Recognize change after 2^2 = 4 rising edges */
lptmr0: counter@40040000 {
compatible = "nxp,lptmr";
/* Pulse Counter mode */
timer-mode-sel = <1>;
clk-source = <1>;
input-pin = <0>;
prescale-glitch-filter = <2>;
resolution = <16>;
};
/* No filtering (explicit bypass) */
lptmr1: counter@40041000 {
compatible = "nxp,lptmr";
/* Pulse Counter mode */
timer-mode-sel = <1>;
clk-source = <1>;
input-pin = <0>;
prescale-glitch-filter-bypass;
resolution = <16>;
};
* The NXP i.MX GPT counter driver (:dtcompatible:`nxp,imx-gpt`) now
defaults to ``run-mode = "restart"`` instead of the previous hardcoded free-run behavior.
* **Previous behavior** (Zephyr ≤ 4.3): GPT counter always ran in free-run mode
(``enableFreeRun = true``). The counter continued counting without reset on compare events.
* **New behavior** (Zephyr ≥ 4.4): GPT counter defaults to restart mode unless explicitly
configured. A new ``run-mode`` devicetree property controls the behavior:
* ``"restart"`` (default): Counter resets to 0 when reaching Compare Channel 1 value
* ``"free-run"``: Counter continues counting without reset (previous behavior)
**Migration Required**: Out-of-tree boards and applications using GPT counters must add
``run-mode = "free-run";`` to their devicetree nodes to preserve the previous behavior.
.. code-block:: devicetree
/* Out-of-tree boards: add this to preserve previous behavior */
gpt2: gpt@400f0000 {
compatible = "nxp,imx-gpt";
/* Explicitly restore Zephyr ≤4.3 behavior */
run-mode = "free-run";
/* ... other properties ... */
};
.. warning::
The driver uses Compare Channel 1 for Zephyr counter alarm functionality. When using
``run-mode = "restart"``, setting alarms will cause the counter to reset at the alarm
compare point. If your application relies on alarms and continuous counting, you must
use ``run-mode = "free-run"``.
.. note::
This change standardizes NXP counter driver run mode configuration.
GPT now uses explicit devicetree properties rather than hardcoded values, allowing
per-instance customization.
.. _migration_4.4_devicetree:
Devicetree
==========
* :ref:`dt-bindings` are no longer allowed to specify any default values for
the ``status`` and ``#address-cells``, ``#size-cells`` properties. The semantics for
these properties are defined in Devicetree `Specification
<https://www.devicetree.org/specifications>`_ section 2.3.4 and `Specification
<https://www.devicetree.org/specifications>`_ section 2.3.5 and users should
not try to override them with their own defaults.
The following bindings syntax now causes build errors:
.. code-block:: yaml
properties:
"status":
default: ... <---- any default is a build error
"#address-cells":
default: ... <---- any default is a build error
"#size-cells":
default: ... <---- any default is a build error
If you were relying on default values in your bindings, you now must
explicitly specify the values in your devicetree source to fix these build
errors.
* The devicetree compatible ``ilitek,ili9806e-dsi`` was renamed.
Use :dtcompatible:`ilitek,ili9806e` instead.
Display
=======
* For ILI9XXX controllers, the usage of ``ILI9XXX_PIXEL_FORMAT_x`` in devicetrees for panel color
format selection has been updated to ``PANEL_PIXEL_FORMAT_x``. Out-of-tree boards and shields
should be updated accordingly. (:github:`99267`).
* For ILI9341 controller, display mirroring configuration has been updated to conform with
the described behavior of the sample ``samples/drivers/display``. (:github:`99267`).
This change causes mirroring issues on some display panels, which will have a proper fix in the
v4.4.1 release. (:github:`106862`)
* The ``PIXEL_FORMAT_BGR_565`` pixel format (and its corresponding devicetree macro
``PANEL_PIXEL_FORMAT_BGR_565``) has been renamed to :c:enumerator:`PIXEL_FORMAT_RGB_565X`
(and :c:macro:`PANEL_PIXEL_FORMAT_RGB_565X`) to correctly reflect that it is a byte-swapped
version of RGB-565, not a swapped Red-Blue channels format. (:github:`99276`)
Applications and libraries using ``PIXEL_FORMAT_BGR_565`` to denote byte-swapped RGB-565 must
update to use :c:enumerator:`PIXEL_FORMAT_RGB_565X`.
* The Kconfig options ``CONFIG_SDL_DISPLAY_DEFAULT_PIXEL_FORMAT_BGR_565`` and
``CONFIG_ST7789V_BGR565`` have been renamed to
:kconfig:option:`CONFIG_SDL_DISPLAY_DEFAULT_PIXEL_FORMAT_RGB_565X` and
:kconfig:option:`CONFIG_ST7789V_RGB565X` respectively. (:github:`99276`)
* ``CONFIG_SSD1327`` symbol has been renamed to :kconfig:option:`CONFIG_SSD1327_5` to include
``SSD1325`` as well.
* ``solomon,ssd1327fb``, ``solomon,ssd1306fb`` and ``solomon,ssd1309fb`` devicetree compatibles
have been renamed :dtcompatible:`solomon,ssd1327`, :dtcompatible:`solomon,ssd1306` and
:dtcompatible:`solomon,ssd1309` respectively, to harmonize with other display controllers and
eliminate the zephyr-irrelevant ``fb`` suffix.
* The NXP eLCDIF controller (:dtcompatible:`nxp,imx-elcdif`) now correctly advertises support for
:c:macro:`PIXEL_FORMAT_XRGB_8888` instead of :c:macro:`PIXEL_FORMAT_ARGB_8888`.
* ``waveshare,7inch-dsi-lcd-c`` devicetree compatible has been replaced by
:dtcompatible:`waveshare,dsi2dpi`, and ``CONFIG_WAVESHARE_7INCH_DSI_LCD_C`` option has been
replaced by :kconfig:option:`CONFIG_WAVESHARE_DSI2DPI`. (:github:`100140`)
* Boards using STM32 LTDC display controller must update their devicetree to have
:c:macro:`PANEL_PIXEL_FORMAT_RGB_888` as ``pixel-format`` in :dtcompatible:`st,stm32-ltdc` node.
(:github:`99277`)
DMA
===
* Removed the :kconfig:option:`CONFIG_DMA_MCUX_EDMA_V5` (:github:`100341`). This macro previously distinguished between
nxp,version(5) and nxp,version(4). It now supports unified maintenance for both versions.
Users can modify ``DMA_MCUX_EDMA_V5`` to ``DMA_MCUX_EDMA_V4``.
EEPROM
======
* Added :c:func:`eeprom_target_read_data()` and :c:func:`eeprom_target_write_data()` which takes an
offset and length and deprecated :c:func:`eeprom_target_program()` for the I2C EEPROM target driver.
* Updated :dtcompatible:`microchip,xec-eeprom` for PCR and GIRQ properties to use new macros (:github:`104591`).
ESP32-S3
========
* The former ``espressif,esp32-lcd-cam`` binding has been restructured. The
LCD_CAM peripheral is now represented by a common ``lcd_cam`` node, with its
functional blocks split into two separate child nodes:
* :dtcompatible:`espressif,esp32-lcd-cam-dvp` compatible node for the DVP
(camera) input module, labeled as ``lcd_cam_dvp``.
* :dtcompatible:`espressif,esp32-lcd-cam-mipi-dbi` compatible node for the
LCD output module, labeled as ``lcd_cam_disp``.
The original :dtcompatible:`espressif,esp32-lcd-cam` compatible node keeps the
common pinctrl, clock, and interrupt properties, while camera-specific
properties have moved into the new ``lcd_cam_dvp`` child node.
Camera-related properties must be moved from ``lcd_cam`` node to the new
``lcd_cam_dvp`` child node, and ``zephyr,camera`` chosen property should
point to ``lcd_cam_dvp`` instead.
Ethernet
========
* Driver MAC address configuration support using :c:struct:`net_eth_mac_config` has been introduced
for the following drivers:
* :dtcompatible:`atmel,sam-gmac` and :dtcompatible:`atmel,sam0-gmac` (:github:`96598`)
* Removed ``CONFIG_ETH_SAM_GMAC_MAC_I2C_EEPROM``
* Removed ``CONFIG_ETH_SAM_GMAC_MAC_I2C_INT_ADDRESS``
* Removed ``CONFIG_ETH_SAM_GMAC_MAC_I2C_INT_ADDRESS_SIZE``
* Removed ``mac-eeprom`` property
* :dtcompatible:`litex,liteeth` (:github:`100620`)
* :dtcompatible:`microchip,lan865x` (:github:`100318`)
* :dtcompatible:`microchip,lan9250` (:github:`99127`)
* :dtcompatible:`nxp,enet-mac` (:github:`102775`)
* :dtcompatible:`sensry,sy1xx-mac` (:github:`100619`)
* :dtcompatible:`st,stm32n6-ethernet`, :dtcompatible:`st,stm32h7-ethernet`
and :dtcompatible:`st,stm32-ethernet` (:github:`102810`, :github:`105090`)
* :dtcompatible:`virtio,net` (:github:`100106`)
* :dtcompatible:`vnd,ethernet` (:github:`96598`)
* :dtcompatible:`wiznet,w5500` (:github:`100919`)
* :dtcompatible:`snps,designware-ethernet` (:github:`105090`)
MAC address should now be set as a child node of a :dtcompatible:`nvmem-layout`.
See the documentation of :ref:`MAC address configuration <mac_address_config>`.
* The ``fixed-link`` property has been removed from :dtcompatible:`ethernet-phy`. Use
the new :dtcompatible:`ethernet-phy-fixed-link` compatible instead, if that functionality
is needed. There you need to specify the fixed link parameters using the ``default-speeds``
property (:github:`100454`).
* The ``reset-gpios`` property of :dtcompatible:`microchip,ksz8081` has been
reworked to be used as active low, you may have to set the pin as
``GPIO_ACTIVE_LOW`` in devicetree (:github:`100751`).
* :kconfig:option:`CONFIG_ETH_INIT_PRIORITY` is now set to 60 by default.
:kconfig:option:`CONFIG_PHY_INIT_PRIORITY` and :kconfig:option:`CONFIG_MDIO_INIT_PRIORITY` are now
defaulting to the value of :kconfig:option:`CONFIG_ETH_INIT_PRIORITY`. Same for
:kconfig:option:`CONFIG_PTP_CLOCK_INIT_PRIORITY`, but only if :kconfig:option:`CONFIG_ETH_DRIVER`
is enabled. This way the priority is based on the dependencies in the devicetree.
(:github:`104310`)
* Drivers, that support checksum offloading, now need to select the new Kconfig option
:kconfig:option:`CONFIG_NET_CHECKSUM_OFFLOAD_SUPPORTED`.
:kconfig:option:`CONFIG_NET_CHECKSUM_OFFLOAD` needs to be enabled to use checksum offloading.
It is enabled by default if :kconfig:option:`CONFIG_NET_CHECKSUM_OFFLOAD_SUPPORTED` is selected.
(:github:`105051`)
* The ``phy-handle`` property of :dtcompatible:`microchip,lan865x` must now be set to the phy node.
* ``CONFIG_NET_DSA_DEPRECATED`` has been removed. The drivers for the compatibles
``microchip,ksz8463``, ``microchip,ksz8794`` and ``microchip,ksz8863`` were removed, as they
haven't been migrated to the new DSA subsystem. (:github:`105926`)
* Ethernet drivers no longer need to call :c:func:`net_if_set_link_addr` themselves, when
the mac address is changed via ``ETHERNET_CONFIG_TYPE_MAC_ADDRESS``. (:github:`105931`)
File System
===========
* :kconfig:option:`CONFIG_FS_FATFS_FSTAB_AUTOMOUNT` is now enabled by default, if any enabled
:dtcompatible:`zephyr,fstab,fatfs` with the ``automount`` property are present in the devicetree.
Applications that do not want this behavior need to explicitly disable this option.
(:github:`103139`)
* NVS and ZMS have been moved to the new Key-Value Storage Systems (KVSS) subsystem; the move
affects NVS and ZMS interface header paths which have been moved from
``zephyr/fs/`` to ``zephyr/kvss/``.
Kconfig options for NVS and ZMS have been moved from underneath "File Systems" menu to
"Key-Value Storage Systems" menu, no Kconfigs have been affected. (:github:`103244`)
GPIO
====
* The LiteX GPIO driver :dtcompatible:`litex,gpio` has been reworked to support changing direction.
The driver now uses the reg-names property to detect supported modes of the GPIO controller.
The Devicetree property ``port-is-output`` has been removed.
The reg-names are now taken directly from LiteX. (:github:`99329`)
* The ``irqs`` property of :dtcompatible:`renesas,rz-gpio` has been reworked
to map a pin to an interrupt phandle explicitly instead of an interrupt index (:github:`101256`).
.. code-block:: devicetree
/* Old (Zephyr ≤ 4.3) */
&gpio16 {
/* Map port16 pin3 to tint7 */
irqs = <3 7>;
};
/* New (Zephyr ≥ 4.4) */
&tint7 {
status = "okay";
};
&gpio16 {
/* Map port16 pin3 to tint7 */
irqs = <&tint7 3>;
};
Infineon
========
* Infineon driver file names have been renamed to remove ``cat1`` from their names to support
reusability across multiple device categories. The following drivers have been renamed
(:github:`99174`):
* ``adc_ifx_cat1.c`` → ``adc_ifx.c``
* ``clock_control_ifx_cat1.c`` → ``clock_control_ifx.c``
* ``counter_ifx_cat1.c`` → ``counter_ifx.c``
* ``dma_ifx_cat1.c`` → ``dma_ifx.c``
* ``dma_ifx_cat1_pdl.c`` → ``dma_ifx_pdl.c``
* ``flash_ifx_cat1.c`` → ``flash_ifx.c``
* ``flash_ifx_cat1_qspi.c`` → ``flash_ifx_qspi.c``
* ``flash_ifx_cat1_qspi_mtb_hal.c`` → ``flash_ifx_qspi_mtb_hal.c``
* ``gpio_ifx_cat1.c`` → ``gpio_ifx.c``
* ``i2c_ifx_cat1.c`` → ``i2c_ifx.c``
* ``i2c_ifx_cat1_pdl.c`` → ``i2c_ifx_pdl.c``
* ``mbox_ifx_cat1.c`` → ``mbox_ifx.c``
* ``pinctrl_ifx_cat1.c`` → ``pinctrl_ifx.c``
* ``rtc_ifx_cat1.c`` → ``rtc_ifx.c``
* ``ifx_cat1_sdio.c`` → ``ifx_sdio.c``
* ``sdio_ifx_cat1_pdl.c`` → ``sdio_ifx_pdl.c``
* ``serial_ifx_cat1_uart.c`` → ``serial_ifx_uart.c``
* ``spi_ifx_cat1.c`` → ``spi_ifx.c``
* ``spi_ifx_cat1_pdl.c`` → ``spi_ifx_pdl.c``
* ``uart_ifx_cat1.c`` → ``uart_ifx.c``
* ``uart_ifx_cat1_pdl.c`` → ``uart_ifx_pdl.c``
* ``wdt_ifx_cat1.c`` → ``wdt_ifx.c``
Corresponding Kconfig symbols and binding files have also been updated:
* ``CONFIG_*_INFINEON_CAT1`` → ``CONFIG_*_INFINEON``
* ``compatible: "infineon,cat1-adc"`` → ``compatible: "infineon,adc"``
* Infineon Bluetooth HCI UART driver (:kconfig:option:`CONFIG_BT_HCI_UART_INFINEON`) with
compatible :dtcompatible:`infineon,bt-hci-uart` is now explicitly scoped to AIROC connectivity
chips that use HCI UART transport.
(:github:`103871`)
Corresponding Kconfig symbols and devicetree compatibles have also been updated:
* ``CONFIG_BT_CYW43XX`` → :kconfig:option:` CONFIG_BT_HCI_UART_INFINEON`
* ``dtcompatible: "infineon,cyw43xxx-bt-hci"`` → ``dtcompatible: "infineon,bt-hci-uart"``
Input
=====
* The CST816S input driver has been generalized to support the CST8xx
family. The driver and Kconfig file been renamed (:github:`105348`)
* ``input_cst816s.c`` → ``input_cst8xx.c``
* ``Kconfig.cst816s`` → ``Kconfig.cst8xx``
Corresponding Devicetree compatible have been updated:
* ``hynitron,cst816s`` → :dtcompatible:`hynitron,cst8xx`
Corresponding Kconfig have also been updated:
* ``CONFIG_INPUT_CST816S`` → :kconfig:option:` CONFIG_INPUT_CST8XX`
* ``CONFIG_INPUT_CST816S_PERIOD`` → :kconfig:option:` CONFIG_INPUT_CST8XX_PERIOD`
* ``CONFIG_INPUT_CST816S_INTERRUPT`` → :kconfig:option:` CONFIG_INPUT_CST8XX_INTERRUPT`
* ``CONFIG_INPUT_CST816S_EV_DEVICE`` → :kconfig:option:` CONFIG_INPUT_CST8XX_EV_DEVICE`
The dt-binding macro prefix have also been updated from ``CST816S_*`` to ``CST8XX_*``.
Interrupt Controller
====================
* :dtcompatible:`swerv,pic` is now :dtcompatible:`cdns,swerv-pic` by adding vendor
prefix.
Keyboard matrix
===============
* The common keyboard matrix Devicetree bindings have been updated to use
microseconds instead of milliseconds for polling period properties.
The following properties have been renamed and their units changed:
* ``poll-period-ms`` -> ``poll-period-us``
* ``stable-poll-period-ms`` -> ``stable-poll-period-us``
Applications using these properties must:
* Replace the old property names with the new ones, and
* Convert the values from milliseconds to microseconds. For example, a value
of ``10`` previously representing 10 ms must now be written as ``10000`` to
represent 10,000 µs.
MDIO
====
* The ``mdio_bus_enable()`` and ``mdio_bus_disable()`` functions have been removed.
MDIO bus enabling/disabling is now handled internally by the MDIO drivers.
(:github:`99690`).
* The MDIO driver area has been integrated into the Ethernet driver area.
The drivers have been moved from ``drivers/mdio/`` to :zephyr_file:`drivers/ethernet/mdio/`.
The devicetree bindings have been moved from ``dts/bindings/mdio/`` to
:zephyr_file:`dts/bindings/ethernet/mdio/`. (:github:`103944`)
MEMC
====
* :dtcompatible:`st,stm32-xspi-psram` and :dtcompatible:`st,stm32-ospi-psram`
compatible nodes now need to include the ``st,refresh`` property to specify
the PSRAM refresh rate in number of memory clock cycles. (:github:`102735`).
Hard-coded default values in drivers, of 320 (:dtcompatible:`st,stm32-xspi-psram`) and 129
(:dtcompatible:`st,stm32-ospi-psram`), have been removed.
NXP
===
* NXP DTSI files were moved into family-specific subdirectories under ``dts/arm/nxp``
to improve maintainability and discoverability and to match the structure under
``soc/nxp``. Devicetree include paths must be updated for moved files. Update
includes of the form ``#include <nxp/nxp_*.dtsi>`` to use the correct family
subdirectory. (:github:`101243`).
Example:
.. code-block:: dts
/* Before */
#include <nxp/nxp_rt1060.dtsi>
/* After */
#include <nxp/imxrt/nxp_rt1060.dtsi>
This change only applies to NXP ARM SoC include files that were moved from ``dts/arm/nxp``.
Do not change includes for DTSI files that live elsewhere (for example under ``dts/arm64/nxp``).
To locate affected includes, you can search for the old include prefix:
.. code-block:: console
git grep "#include <nxp/nxp_" -- '*.dtsi' '*.dts' '*.overlay'
* :dtcompatible:`nxp,lptmr` nodes used as the system timer must now be
designated via the ``zephyr,system-timer`` chosen property. Boards based on
i.MX95 and MCX-W SoCs already have this set in the SoC DTSI and require no
change. All other boards using :kconfig:option:`CONFIG_MCUX_LPTMR_TIMER`
must add a board overlay:
.. code-block:: devicetree
/ {
chosen {
zephyr,system-timer = &lptmr0;
};
};
On Kinetis KE1xF, this overlay is also required when
:kconfig:option:`CONFIG_PM` is enabled.
* :dtcompatible:`nxp,imx-flexspi-nor` compatible nodes now have
a :dtcompatible:`soc-nv-flash` compatible child node to describe
the flash memory. The ``nxp,imx-flexspi-nor`` node acts as the
flash controller (renamed to ``flash-controller@0``),
and ``erase-block-size``, ``write-block-size`` properties, as well
as ``partitions`` node, are moved into the flash chip node.
Out-of-tree boards must update their devicetrees accordingly.
* ``zephyr,flash`` chosen property must point to the
:dtcompatible:`soc-nv-flash` compatible node.
* ``zephyr,flash-controller`` chosen property must point to the
:dtcompatible:`nxp,imx-flexspi-nor` compatible node.
* A ``ranges`` property is required on the controller node.
QSPI
====
* :dtcompatible:`st,stm32-qspi` compatible nodes configured with ``dual-flash`` property
now need to also include the ``ssht-enable`` property to reenable sample shifting.
Sample shifting is configurable now and disabled by default.
(:github:`98999`).
Radio
=====
* The following devicetree bindings have been renamed for consistency with the ``radio-`` prefix:
* :dtcompatible:`generic-fem-two-ctrl-pins` is now :dtcompatible:`radio-fem-two-ctrl-pins`
* :dtcompatible:`gpio-radio-coex` is now :dtcompatible:`radio-gpio-coex`
* A new :dtcompatible:`radio.yaml` base binding has been introduced for generic radio hardware
capabilities. The ``tx-high-power-supported`` property has been renamed to
``radio-tx-high-power-supported`` for consistency.
* Device trees and overlays using the old compatible strings must be updated to use the new names.
SD Host Controller
==================
* Moved extra fields ``bus_4_bit_support``, ``hs200_support`` and ``hs400_support`` from
:c:struct:`sdhc_host_caps` to :c:struct:`sdhc_host_props` as per the
`SD Host Controller Specification <https://www.sdcard.org/downloads/pls/pdf/?p=PartA2_SD%20Host_Controller_Simplified_Specification_Ver4.20.jpg>`_.
(:github:`91701`)
Shell
=====
* The :c:func:`shell_set_bypass` now requires a user data pointer to be passed. And accordingly the
:c:type:`shell_bypass_cb_t` now has a user data argument. (:github:`100311`)
Stepper
=======
* For :dtcompatible:`adi,tmc2209`, the property ``msx-gpios`` is now replaced by ``m0-gpios`` and
``m1-gpios`` for consistency with other step/dir stepper drivers.
* Several API functions have been renamed:
* ``stepper_move_by`` to :c:func:`stepper_ctrl_move_by`.
* ``stepper_move_to`` to :c:func:`stepper_ctrl_move_to`.
* ``stepper_is_moving`` to :c:func:`stepper_ctrl_is_moving`.
* ``stepper_run`` to :c:func:`stepper_ctrl_run`.
* ``stepper_stop`` to :c:func:`stepper_ctrl_stop`.
* ``stepper_set_reference_position`` to :c:func:`stepper_ctrl_set_reference_position`.
* ``stepper_get_actual_position`` to :c:func:`stepper_ctrl_get_actual_position`.
* ``stepper_set_microstep_interval`` to :c:func:`stepper_ctrl_set_microstep_interval`.
* The following events have been moved from :c:enum:`stepper_event` to :c:enum:`stepper_ctrl_event`:
* ``STEPPER_EVENT_STEPS_COMPLETED`` to ``STEPPER_CTRL_EVENT_STEPS_COMPLETED``.
* ``STEPPER_EVENT_LEFT_END_STOP_DETECTED`` to ``STEPPER_CTRL_EVENT_LEFT_END_STOP_DETECTED```.
* ``STEPPER_EVENT_RIGHT_END_STOP_DETECTED`` to ``STEPPER_CTRL_EVENT_RIGHT_END_STOP_DETECTED``.
* ``STEPPER_EVENT_STOPPED`` to ``STEPPER_CTRL_EVENT_STOPPED``.
* The ``step-gpios``, ``dir-gpios``, ``invert-direction``, and ``counter`` properties have been
removed from all bindings of step-dir stepper hardware driver devices (:dtcompatible:`adi,tmc2209`,
:dtcompatible:`ti,drv84xx`, and :dtcompatible:`allegro,a4979`) and moved to the new generic stepper
motion controller binding :dtcompatible:`zephyr,gpio-step-dir-stepper-ctrl`.
* Motion control must now be performed through a :dtcompatible:`zephyr,gpio-step-dir-stepper-ctrl`
device that references the stepper hardware driver devicetree node via the ``stepper-driver`` property.
Applications must update their devicetree to add a motion controller node and use the ``stepper_ctrl_*``
APIs, instead of calling motion control functions directly on the stepper hardware driver device.
* Stepper hardware driver specific APIs have been removed from the H-bridge stepper controller:
* :dtcompatible:`zephyr,h-bridge-stepper` is renamed to :dtcompatible:`zephyr,h-bridge-stepper-ctrl` to
reflect that it is a stepper motion controller binding, not a stepper hardware driver binding.
* :c:func:`stepper_enable`, :c:func:`stepper_disable`, :c:func:`stepper_set_micro_step_res`,
and :c:func:`stepper_get_micro_step_res` API functions are no longer usable with
:dtcompatible:`zephyr,h-bridge-stepper-ctrl` compatible devices.
* The ``en-gpios`` property has been removed from :dtcompatible:`zephyr,h-bridge-stepper-ctrl`.
* The ``micro-step-res`` property has been replaced by ``lut-step-gap`` in
:dtcompatible:`zephyr,h-bridge-stepper-ctrl` to better reflect the H-bridge control mechanism,
which uses lookup table interpolation rather than hardware micro-stepping.
Applications using H-bridge stepper controller must:
1. Remove calls to stepper hardware driver specific APIs on H-bridge controller devices
2. Update devicetree to use ``lut-step-gap`` instead of ``micro-step-res``
3. Remove ``en-gpios`` property if present
* :dtcompatible:`adi,tmc50xx` and :dtcompatible:`adi,tmc51xx` devices are now modeled as MFDs.
* Removed the Kconfig.stepper_event_template template used to generate the
:kconfig:option:`CONFIG_STEPPER_*_GENERATE_ISR_SAFE_EVENTS` and
:kconfig:option:`CONFIG_STEPPER_*_EVENT_QUEUE_LEN` symbols
* :kconfig:option:`CONFIG_STEPPER_STEP_DIR_GENERATE_ISR_SAFE_EVENTS` is replaced by
:kconfig:option:`CONFIG_STEPPER_CTRL_ISR_SAFE_EVENTS`
* :kconfig:option:`CONFIG_STEPPER_STEP_DIR_EVENT_QUEUE_LEN` is replaced by
:kconfig:option:`CONFIG_STEPPER_CTRL_EVENT_QUEUE_LEN`
* :kconfig:option:`CONFIG_STEPPER_CTRL_ISR_SAFE_EVENTS` is now enabled by default
STM32
=====
* STM32 power supply configuration is now performed using Devicetree properties.
New bindings :dtcompatible:`st,stm32h7-pwr`, :dtcompatible:`st,stm32h7rs-pwr`
and :dtcompatible:`st,stm32-dualreg-pwr` have been introduced, and all Kconfig
symbols related to power supply configuration have been removed:
* ``CONFIG_POWER_SUPPLY_LDO``
* ``CONFIG_POWER_SUPPLY_DIRECT_SMPS``,
* ``CONFIG_POWER_SUPPLY_SMPS_1V8_SUPPLIES_LDO``
* ``CONFIG_POWER_SUPPLY_SMPS_2V5_SUPPLIES_LDO``,
* ``CONFIG_POWER_SUPPLY_SMPS_1V8_SUPPLIES_EXT_AND_LDO``
* ``CONFIG_POWER_SUPPLY_SMPS_2V5_SUPPLIES_EXT_AND_LDO``
* ``CONFIG_POWER_SUPPLY_SMPS_1V8_SUPPLIES_EXT``
* ``CONFIG_POWER_SUPPLY_SMPS_2V5_SUPPLIES_EXT``
* ``CONFIG_POWER_SUPPLY_EXTERNAL_SOURCE``
* The ST-specific chosen property ``/chosen/zephyr,ccm`` is replaced by ``/chosen/zephyr,dtcm``.
Attribute macros ``__ccm_data_section``, ``__ccm_bss_section`` and ``__ccm_noinit_section`` are
deprecated, but retained for backwards compatibility; **they will be removed in Zephyr 4.5**.
The generic ``__dtcm_{data,bss,noinit}_section`` macros should be used instead. (:github:`100590`)
* STM32 platforms now use the default MCUboot operating mode ``swap using offset``
(:kconfig:option:`SB_CONFIG_MCUBOOT_MODE_SWAP_USING_OFFSET`). To support this bootloader mode,
some changes to the board devicetrees are required. Several boards already support this mode
(see :github:`100385`).
The previous ``swap using move`` mode can still be selected in sysbuild by enabling
:kconfig:option:`SB_CONFIG_MCUBOOT_MODE_SWAP_USING_MOVE`.
* For STM32F2x/F4x/F7x, the different PLL bindings (:dtcompatible:`st,stm32f2-pll-clock`,
:dtcompatible:`st,stm32f4-pll-clock`, :dtcompatible:`st,stm32f4-plli2s-clock`,
:dtcompatible:`st,stm32f411-plli2s-clock`, :dtcompatible:`st,stm32f7-pll-clock` and
:dtcompatible:`st,stm32fx-pllsai-clock` ) has been merged into a single one
:dtcompatible:`st,stm32fx-pll-clock`. This merge brings some changes, notably ``div-divq`` and
``div-divr`` properties have been renamed respectively to ``post-div-q`` and ``post-div-r``.
Besides, when applicable to the SoC, these properties need to be defined if the corresponding
``div-q`` or ``div-r`` properties are used.
* For STM32L4x, the :dtcompatible:`st,stm32l4-pllsai-clock` binding has been replaced by the
existing :dtcompatible:`st,stm32l4-pll-clock`. This replacement brings a renaming of the
``div-divr`` property to ``post-div-r``.
* The MAC address generation in :zephyr_file:`drivers/ethernet/eth_stm32_hal_common.c` for STM32
platforms now use :c:struct:`net_eth_mac_config` when one of these properties are used in the MAC
device-tree node:
* ``zephyr,random-mac-address`` (a)
* ``local-mac-address`` (b)
* ``nvmem-cells`` (c) (NEW)
This causes backward compatibility breakage for implementations using (a) or (b) properties.
Previous implementation using these properties in the DT mixed an ST OUI for the first 3 MSB with
random (a) or explicit (b) bits for the 3 LSB of the MAC address. Now, the MAC address is fully
random (a), fully or partially written in the device-tree (b).
New implementation (c) allows to refer to a MAC address stored in non-volatile memory.
E.g: BSEC peripheral managing :abbr:`OTP(One Time Programmable)` fuses on STM32N6x platforms.
See :c:func:`net_eth_mac_load` for more details.
When none of these properties are specified in the MAC node, the legacy implementation is used.
(:github:`102810`)
.. note:: This change aligns STM32 platforms' behavior with the generic Zephyr one. Previous
implementation wasn't product-ready so this shouldn't cause much trouble.
* The Kconfig option ``CONFIG_SPI_STM32_USE_HW_SS`` has been removed. SPI operation mode
is now selected automatically based on devicetree configuration: instances with either of
the ``cs-gpios`` or new ``st,soft-nss`` property operate in "Soft NSS" mode, while all other
instances operate in "Hard NSS" mode.
* To ensure that the SPI is functional at any frequency, all SPI pins are now configured with a
``very-high-speed`` slew-rate by default. This may result in higher power consumption.
The slew-rate value can be overridden in board's dts or in overlays to a slower speed in order to
decrease power consumption.
* :kconfig:option:`CONFIG_NUM_IRQS` is computed automatically based on active (``status = "okay";``)
devices by using the new ``dt_highest_controller_irq_number`` Kconfig preprocessor function.
Applications which register custom ISRs (using :c:macro:`IRQ_CONNECT()`) may encounter build
failures such as the following due to :kconfig:option:`CONFIG_NUM_IRQS` having a lower value:
.. code-block::
gen_isr_tables.py: error: IRQ 114 (offset=0) exceeds the maximum of 106
Explicitly set :kconfig:option:`CONFIG_NUM_IRQS` to an appropriate value to solve these issues.
(:ref:`The following documentation page <setting_configuration_values>` explains how to do it)
Timer
=====
* Out-of-tree SoC or platform code that implements the legacy Cortex-M SysTick low-power
companion interface through the compatibility macros ``z_cms_lptim_hook_on_lpm_entry``
and ``z_cms_lptim_hook_on_lpm_exit`` should migrate to :c:func:`z_sys_clock_lpm_enter`
and :c:func:`z_sys_clock_lpm_exit` from :zephyr_file:`include/zephyr/drivers/timer/system_timer_lpm.h`.
The compatibility shim in :zephyr_file:`drivers/timer/cortex_m_systick.h` is deprecated
in Zephyr 4.4.0 and is currently scheduled for removal in Zephyr 4.6.0.
The legacy Kconfig options:
:kconfig:option:`CONFIG_CORTEX_M_SYSTICK_LPM_TIMER_NONE`,
:kconfig:option:`CONFIG_CORTEX_M_SYSTICK_LPM_TIMER_COUNTER`,
:kconfig:option:`CONFIG_CORTEX_M_SYSTICK_LPM_TIMER_HOOKS`, and
:kconfig:option:`CONFIG_CORTEX_M_SYSTICK_RESET_BY_LPM` are also deprecated.
The chosen property ``/chosen/zephyr,cortex-m-idle-timer`` is deprecated in
favor of ``/chosen/zephyr,system-timer-companion``.
Migrate to :kconfig:option:`CONFIG_SYSTEM_TIMER_LPM_COMPANION_NONE`,
:kconfig:option:`CONFIG_SYSTEM_TIMER_LPM_COMPANION_COUNTER`,
:kconfig:option:`CONFIG_SYSTEM_TIMER_LPM_COMPANION_HOOKS`, and
:kconfig:option:`CONFIG_SYSTEM_TIMER_RESET_BY_LPM`.
* :dtcompatible:`renesas,rza2m-ostm` name has been replaced by :dtcompatible:`renesas,rza2m-ostm-timer`.
The choice :kconfig:option:`DT_HAS_RENESAS_RZA2M_OSTM_ENABLED` has been replaced with
:kconfig:option:`DT_HAS_RENESAS_RZA2M_OSTM_TIMER_ENABLED` (:github:`100934`)
USB
===
* :dtcompatible:`maxim,max3421e_spi` has been renamed to :dtcompatible:`maxim,max3421e-spi`.
* USB control transfer buffer allocation has been moved away from UDC to USB device_next.
Out-of-tree UDC drivers will have to be reworked. (:github:`103493`).
* UVC device application API got modified:
* ``uvc_set_video_dev`` has been renamed to :c:func:`uvc_device_init`
* ``uvc_add_format`` has been renamed to :c:func:`uvc_device_add_format`
* :c:func:`uvc_device_enable` has been introduced
* :c:func:`uvc_device_shutdown` has been introduced
USB-C
=====
* The ``alert_handler_cb`` field has been removed from the :c:struct:`tcpc_driver_api` struct as it
was unused and redundant with the callback registered via :c:func:`tcpc_set_alert_handler_cb`.
Video
=====
* ``CONFIG_VIDEO_HIMAX_HM01B0`` has been renamed to :kconfig:option:`CONFIG_VIDEO_HM01B0`.
* ``CONFIG_VIDEO_OV7670`` is now gone and replaced by
:kconfig:option:`CONFIG_VIDEO_OV767X`. This allows supporting both the OV7670
and 0V7675.
* :kconfig:option:`CONFIG_VIDEO_BUFFER_POOL_SZ_MAX` is replaced by
:kconfig:option:`CONFIG_VIDEO_BUFFER_POOL_HEAP_SIZE` which represent the
size in byte allocated for the whole video buffer pool.
* The :dtcompatible:`ovti,ov2640` reset pin handling has been corrected, resulting in an inverted
active level compared to before, to match the active level expected by the sensor.
* The following pixel formats were renamed to keep consistency with the data ():github:`105522`):
* :c:macro:`VIDEO_PIX_FMT_ARGB32` (swapped with :c:macro:`VIDEO_PIX_FMT_BGRA32`)
* :c:macro:`VIDEO_PIX_FMT_BGRA32` (swapped with :c:macro:`VIDEO_PIX_FMT_ARGB32`)
* :c:macro:`VIDEO_PIX_FMT_RGBA32` (unchanged)
* :c:macro:`VIDEO_PIX_FMT_ABGR32` (unchanged)
* :c:macro:`VIDEO_PIX_FMT_XRGB32` (unchanged)
* :c:macro:`VIDEO_PIX_FMT_XBGR32` (newly introduced)
* :c:macro:`VIDEO_PIX_FMT_BGRX32` (newly introduced)
* :c:macro:`VIDEO_PIX_FMT_RGBX32` (newly introduced)
Watchdog
========
* The semantics of :kconfig:option:`CONFIG_WDT_DISABLE_AT_BOOT` have been clarified: the expected
behavior when ``CONFIG_WDT_DISABLE_AT_BOOT=n``, which was unclear and
implemented inconsistently across drivers, is now explicitly documented in
:kconfig:option:`CONFIG_WDT_DISABLE_AT_BOOT`'s description (refer to it for
more details).
All in-tree watchdog drivers have been updated to follow the now documented semantics.
Notably, ``CONFIG_WDT_DISABLE_AT_BOOT=n`` can no longer be used to have
watchdog(s) enabled at boot "*automatically*". Users which relied on this
behavior must update their application to explicitly configure a watchdog, as
done in the :zephyr:code-sample:`watchdog`. The following Kconfig options
related to this incorrect usage have been removed:
* ``CONFIG_IWDG_STM32_INITIAL_TIMEOUT``
* ``CONFIG_WDT_RPI_PICO_INITIAL_TIMEOUT``
* ``CONFIG_WDT_CC13XX_CC26XX_INITIAL_TIMEOUT``
* ``CONFIG_WDT_CC23X0_INITIAL_TIMEOUT``
* ``CONFIG_WDT_CC32XX_INITIAL_TIMEOUT``
* Updated :dtcompatible:`microchip,xec-watchdog` for PCR and GIRQ properties to
use new macros (:github:`105668`).
.. zephyr-keep-sorted-stop
Bluetooth
*********
Bluetooth Host
==============
* :kconfig:option:`CONFIG_BT_SIGNING` has been deprecated.
* :c:macro:`BT_GATT_CHRC_AUTH` has been deprecated.
* :c:member:`bt_conn_le_info.interval` has been deprecated. Use
:c:member:`bt_conn_le_info.interval_us` instead. Note that the units have changed: ``interval``
was in units of 1.25 milliseconds, while ``interval_us`` is in microseconds.
* Legacy Bluetooth LE pairing using the passkey entry method no longer grants authenticated (MITM)
protection as of the Bluetooth Core Specification v6.2. Stored bonds that were generated using
this method will be downgraded to unauthenticated when loaded from persistent storage, resulting
in a lower security level.
* The Bluetooth Host no longer depends on :c:func:`k_poll`, and therefore doesn't select
:kconfig:option:`CONFIG_POLL`. If the application code itself depends on this, it needs to
explicitly enable :kconfig:option:`CONFIG_POLL` in its configuration.
* Replace any usage of :kconfig:option:`CONFIG_DEVICE_NAME_GATT_WRITABLE_NONE`
with :kconfig:option:`CONFIG_BT_DEVICE_NAME_GATT_WRITABLE_NONE`.
* Replace any usage of :kconfig:option:`CONFIG_DEVICE_NAME_GATT_WRITABLE_ENCRYPT`
with :kconfig:option:`CONFIG_BT_DEVICE_NAME_GATT_WRITABLE_ENCRYPT`.
* Replace any usage of :kconfig:option:`CONFIG_DEVICE_NAME_GATT_WRITABLE_AUTHEN`
with :kconfig:option:`CONFIG_BT_DEVICE_NAME_GATT_WRITABLE_AUTHEN`.
* Replace any usage of :kconfig:option:`CONFIG_DEVICE_APPEARANCE_GATT_WRITABLE_AUTHEN`
with :kconfig:option:`CONFIG_BT_DEVICE_APPEARANCE_GATT_WRITABLE_AUTHEN`.
* The ``required_sec_level`` field has been removed from :c:struct:`bt_iso_chan`.
Applications that need to set security for CIS connections should call
:c:func:`bt_conn_set_security` on the ACL connection before calling
:c:func:`bt_iso_chan_connect`.
* The ``sec_level`` field has been removed from :c:struct:`bt_iso_server`.
Bluetooth Audio
===============
* :c:func:`bt_bap_broadcast_assistant_discover` will now no longer perform reads of the remote BASS
receive states at the end of the procedure. Users will have to manually call
:c:func:`bt_bap_broadcast_assistant_read_recv_state` to read the existing receive states, if any,
prior to performing any operations. (:github:`91587`)
* :kconfig:option:`CONFIG_BT_AUDIO` now depends on :kconfig:option:`CONFIG_UTF8`.
Applications that enable :kconfig:option:`CONFIG_BT_AUDIO` must also have
:kconfig:option:`CONFIG_UTF8` enabled. (:github:`102350`)
* :c:func:`bt_tbs_set_uri_scheme_list` now only takes a single string value,
instead of a list/array of URIs. Applications will need to modify any current input
from e.g. ``{"tel", "skype"}`` to ``"tel,skype"``. (:github:`102724`)
* ``CONFIG_BT_TBS_SUPPORTED_FEATURES`` has been removed. Applications should use the defined macros
:c:macro:`BT_TBS_FEATURE_HOLD` and :c:macro:`BT_TBS_FEATURE_JOIN` to set their supported features.
(:github:`102666`)
* :c:func:`bt_bap_unicast_server_foreach_ep` and :c:func:`bt_has_preset_foreach` may now return an
error if the iteration stopped early, or if provided with invalid parameters. (:github:`105462`)
* The callbacks for :c:func:`bt_bap_unicast_server_foreach_ep`,
:c:func:`bt_bap_unicast_group_foreach_stream`, :c:func:`bt_bap_broadcast_source_foreach_stream`,
:c:func:`bt_cap_unicast_group_foreach_stream`, :c:func:`bt_cap_initiator_broadcast_foreach_stream`
and :c:func:`bt_has_preset_foreach` now return ``true`` to continue the iteration,
and ``false`` to stop the iteration. Any callbacks for these functions need to be updated to
reflect the new return types and values. (:github:`105462`)
Bluetooth Mesh
==============
* :kconfig:option:`CONFIG_BT_MESH_MODEL_VND_MSG_CID_FORCE` has been deprecated. Enabling it no
longer has any effect on message handling performance.
Bluetooth HCI
=============
* Use :c:macro:`BT_HCI_LE_SUPERVISION_TIMEOUT_MIN` and :c:macro:`BT_HCI_LE_SUPERVISION_TIMEOUT_MAX` instead
of :c:macro:`BT_HCI_LE_SUPERVISON_TIMEOUT_MIN` and :c:macro:`BT_HCI_LE_SUPERVISON_TIMEOUT_MAX` because
they have been deprecated for misspelling.
Networking
**********
Wi-Fi
=====
* :c:struct:`wifi_channel_info` gained a ``band`` field for set-channel. Behaviour
is backwards compatible for 2.4 GHz (channels 1–14) and 5 GHz (36–165): omit or
leave ``band`` as :c:macro:`WIFI_FREQ_BAND_UNKNOWN` and the driver infers the
band. For 6 GHz, set ``band`` to :c:macro:`WIFI_FREQ_BAND_6_GHZ` (channel
numbers overlap 1–14 with 2.4 GHz). Recompile so ``sizeof(struct
wifi_channel_info)`` is correct when calling net_mgmt.
* WPA3 is configured with the choice
``WIFI_NM_WPA_SUPPLICANT_WPA3_IMPLEMENTATION`` (Internal, External, or None).
Replace any ``CONFIG_WIFI_NM_WPA_SUPPLICANT_WPA3=y`` line in ``prj.conf`` with
``CONFIG_WIFI_NM_WPA_SUPPLICANT_WPA3_IMPLEMENTATION_INT=y`` (or ``_EXT`` /
``_NONE`` as needed). :kconfig:option:`CONFIG_WIFI_NM_WPA_SUPPLICANT_WPA3` is
now promptless and is selected only when Internal is chosen; do not assign it
directly. In C code, prefer :kconfig:option:`CONFIG_WIFI_NM_WPA_SUPPLICANT_WPA3_COMMON`
to detect either internal or external WPA3.
* Networking APIs found in
* :zephyr_file:`include/zephyr/net/net_ip.h`
* :zephyr_file:`include/zephyr/net/socket.h`
and relevant code in ``subsys/net`` etc. is namespaced. This means that either
``net_``, ``NET_`` or ``ZSOCK_`` prefix is added to the network API name. This is done in order
to avoid circular dependency with POSIX or libc that might define the same symbol.
A compatibility header file :zephyr_file:`include/zephyr/net/net_compat.h`
is created that provides the old symbols allowing the user to continue use the old symbols.
External network applications can continue to use POSIX defined network symbols and
include relevant POSIX header files like ``sys/socket.h`` to get the POSIX symbols as Zephyr
networking header files will no longer include those. If the application or Zephyr internal
code cannot use POSIX APIs, then the relevant network API prefix needs to be added to the
code calling a network API.
* The return type of :c:type:`net_icmp_handler_t` has changed from ``int`` to
:c:enum:`net_verdict`. (:github:`104815`)
* The enum for HTTP server transaction status has been renamed from ``http_data_status``
to ``http_transaction_status`` to better reflect its purpose. The enum values have also been
renamed as follows:
- ``HTTP_SERVER_DATA_ABORTED`` → ``HTTP_SERVER_TRANSACTION_ABORTED``
- ``HTTP_SERVER_DATA_MORE`` → ``HTTP_SERVER_REQUEST_DATA_MORE``
- ``HTTP_SERVER_DATA_FINAL`` → ``HTTP_SERVER_REQUEST_DATA_FINAL``
The handler callback type for dynamic resources has been updated accordingly to use the new enum
and its renamed values. Applications using dynamic HTTP resources must update their handler
callbacks to use the new enum and handle the renamed values.
* The HTTP server now reports for dynamic resources the ``HTTP_SERVER_TRANSACTION_COMPLETE``
status when the response has been sent completely to the client. Applications should now also
handle this status in the handler callback to properly reset resource state after successful
response transmission.
* The protocol version passed to :c:func:`zsock_socket` when creating a secure socket is now
enforced as the minimum TLS version to use for the TLS session.
* Automatic selection of crypto Kconfigs has been removed from :kconfig:option:`NET_SOCKETS_SOCKOPT_TLS`
as they strongly depend on the final application's needs. As a consequence the desired TLS protocol
version and ciphersuite(s) must be explicitly selected.
Available :kconfig:option-regex:`CONFIG_MBEDTLS_CIPHERSUITE_TLS_.*` Kconfig helpers can be used
to automatically enable all the dependencies of a given ciphersuite, and more can be added as
needed following the same pattern.
CoAP
====
* Resource-related metadata for CoAP ``.well-known/core`` responses is now configured with a dedicated
:c:member:`coap_resource.metadata` pointer instead of :c:member:`coap_resource.user_data`, which
should remain for the application to use exclusively. Applications implementing CoAP
``.well-known/core`` handling should be updated to use the new pointer.
* ``COAP_RESPONSE_CODE_OK`` 2.00 response code definition has been removed as it's not a valid
response code - it's not defined in :rfc:`7252` and is not assigned in the IANA registry
(https://www.iana.org/assignments/core-parameters/core-parameters.xhtml#response-codes).
Modem
*****
Modem HL78XX
============
* The Kconfig options related to HL78XX startup timing have been renamed in
:kconfig:option:`CONFIG_MODEM_HL78XX_DEV_*` as follows:
- ``MODEM_HL78XX_DEV_POWER_PULSE_DURATION`` → ``MODEM_HL78XX_DEV_POWER_PULSE_DURATION_MS``
- ``MODEM_HL78XX_DEV_RESET_PULSE_DURATION`` → ``MODEM_HL78XX_DEV_RESET_PULSE_DURATION_MS``
- ``MODEM_HL78XX_DEV_STARTUP_TIME`` → ``MODEM_HL78XX_DEV_STARTUP_TIME_MS``
- ``MODEM_HL78XX_DEV_SHUTDOWN_TIME`` → ``MODEM_HL78XX_DEV_SHUTDOWN_TIME_MS``
* The default startup timing was changed from 1000 ms to 120 ms to improve
initialization reliability across all supported boards.
Applications depending on the previous defaults must update their configuration.
LoRaWAN
*******
* The LoRaWAN region Kconfig symbols have been renamed from ``LORAMAC_REGION_*`` to
``LORAWAN_REGION_*`` to make them backend-agnostic. Applications using any of the following
symbols must update their configuration files:
* ``CONFIG_LORAMAC_REGION_AS923`` → :kconfig:option:`CONFIG_LORAWAN_REGION_AS923`
* ``CONFIG_LORAMAC_REGION_AU915`` → :kconfig:option:`CONFIG_LORAWAN_REGION_AU915`
* ``CONFIG_LORAMAC_REGION_CN470`` → :kconfig:option:`CONFIG_LORAWAN_REGION_CN470`
* ``CONFIG_LORAMAC_REGION_CN779`` → :kconfig:option:`CONFIG_LORAWAN_REGION_CN779`
* ``CONFIG_LORAMAC_REGION_EU433`` → :kconfig:option:`CONFIG_LORAWAN_REGION_EU433`
* ``CONFIG_LORAMAC_REGION_EU868`` → :kconfig:option:`CONFIG_LORAWAN_REGION_EU868`
* ``CONFIG_LORAMAC_REGION_KR920`` → :kconfig:option:`CONFIG_LORAWAN_REGION_KR920`
* ``CONFIG_LORAMAC_REGION_IN865`` → :kconfig:option:`CONFIG_LORAWAN_REGION_IN865`
* ``CONFIG_LORAMAC_REGION_US915`` → :kconfig:option:`CONFIG_LORAWAN_REGION_US915`
* ``CONFIG_LORAMAC_REGION_RU864`` → :kconfig:option:`CONFIG_LORAWAN_REGION_RU864`
Other subsystems
****************
CFB
===
* Change using signed values to represent the coordinates.
As a result, :c:func:`cfb_print`, :c:func:`cfb_invert_area`,
and :c:struct:`cfb_position` definitions are changed.
* The DAP subsystem initialization and configuration has changed. Please take a look at
:zephyr:code-sample:`cmsis-dap` sample on how to initialize Zephyr DAP Link with USB backend.
* Cache
* Use :kconfig:option:`CONFIG_CACHE_HAS_MIRRORED_MEMORY_REGIONS` instead of
:kconfig:option:`CONFIG_CACHE_DOUBLEMAP` as the former is more descriptive of the feature.
Flash
=====
* Previously deprecated ``CONFIG_FLASH_AREA_CHECK_INTEGRITY_MBEDTLS`` is now
removed.
* ``CONFIG_FLASH_AREA_CHECK_INTEGRITY_PSA`` is also removed since there is
now no alternative for the crypto library backend.
* The flash shell commands ``flash erase`` and ``flash write`` now require an explicit
device argument. This avoids accidental corruption of the device's program flash.
Flash map
=========
* The following :zephyr_file:`include/zephyr/storage/flash_map.h` macros have been deprecated and
replaced:
+-----------------------------------------+-----------------------------------+
| Deprecated macro | Replacement macro |
+=========================================+===================================+
| :c:macro:`FIXED_PARTITION_EXISTS` | :c:macro:`PARTITION_EXISTS` |
+-----------------------------------------+-----------------------------------+
| :c:macro:`FIXED_PARTITION_ID` | :c:macro:`PARTITION_ID` |
+-----------------------------------------+-----------------------------------+
| :c:macro:`FIXED_PARTITION_OFFSET` | :c:macro:`PARTITION_OFFSET` |
+-----------------------------------------+-----------------------------------+
| :c:macro:`FIXED_PARTITION_ADDRESS` | :c:macro:`PARTITION_ADDRESS` |
+-----------------------------------------+-----------------------------------+
| :c:macro:`FIXED_PARTITION_NODE_ADDRESS` | :c:macro:`PARTITION_NODE_ADDRESS` |
+-----------------------------------------+-----------------------------------+
| :c:macro:`FIXED_PARTITION_NODE_OFFSET` | :c:macro:`PARTITION_NODE_OFFSET` |
+-----------------------------------------+-----------------------------------+
| :c:macro:`FIXED_PARTITION_SIZE` | :c:macro:`PARTITION_SIZE` |
+-----------------------------------------+-----------------------------------+
| :c:macro:`FIXED_PARTITION_NODE_SIZE` | :c:macro:`PARTITION_NODE_SIZE` |
+-----------------------------------------+-----------------------------------+
| :c:macro:`FIXED_PARTITION_DEVICE` | :c:macro:`PARTITION_DEVICE` |
+-----------------------------------------+-----------------------------------+
| :c:macro:`FIXED_PARTITION_NODE_DEVICE` | :c:macro:`PARTITION_NODE_DEVICE` |
+-----------------------------------------+-----------------------------------+
| :c:macro:`FIXED_PARTITION_MTD` | :c:macro:`PARTITION_MTD` |
+-----------------------------------------+-----------------------------------+
| :c:macro:`FIXED_PARTITION_NODE_MTD` | :c:macro:`PARTITION_NODE_MTD` |
+-----------------------------------------+-----------------------------------+
| :c:macro:`FIXED_PARTITION_BY_NODE` | :c:macro:`PARTITION_BY_NODE` |
+-----------------------------------------+-----------------------------------+
These new macros also add support for the :dtcompatible:`zephyr,mapped-partition` binding.
JWT
===
* Previously deprecated ``CONFIG_JWT_SIGN_RSA_LEGACY`` is removed. This removal occurred before
the usual deprecation period of 2 releases because it has been agreed (see :github:`97660`)
that Mbed TLS is an external module, so normal deprecation rules do not apply in this case.
Libsbc
======
* Libsbc (sbc.c and sbc.h) is moved under the Bluetooth subsystem. The sbc.h is in
include/zephyr/bluetooth now.
Management
==========
* hawkBit
* The deprecated Kconfig option ``CONFIG_HAWKBIT_DDI_NO_SECURITY`` has been removed.
(:github:`105150`)
* MCUmgr
* If using :kconfig:option:`CONFIG_MCUMGR_TRANSPORT_UART` then
:kconfig:option:`CONFIG_UART_MCUMGR` must now also be selected, this has changed to be
``depends on`` rather than ``select``.
Random
======
* ``CONFIG_CSPRNG_AVAILABLE`` has been renamed to :kconfig:option:`CONFIG_ENTROPY_NODE_ENABLED`.
Tracing
========
* CTF: Changed uint8_t id to uint16_t id in the CTF metadata event header. This
doubles the space used for event IDs but allows 65,535 events instead of 255.
With this change, existing CTF traces with 8-bit IDs won't be compatible.
Serial
========
* pl011 UART driver: Remove Read Status Register (RSR) error handling
from :c:func:`pl011_poll_in`. RSR handling is already implemented in
:c:func:`pl011_err_check`, which is the appropriate place to detect,
and report receive error conditions. (:github:`101715`)
Settings
========
* ``CONFIG_SETTINGS_TFM_ITS`` has been renamed to :kconfig:option:`CONFIG_SETTINGS_TFM_PSA`.
Modules
*******
HostAP
======
* Kconfig :kconfig:option:`CONFIG_WIFI_NM_WPA_SUPPLICANT_CRYPTO_MBEDTLS_PSA` is now
enabled by default.
Mbed TLS
========
* Mbed TLS has been upgraded to version 4.1.0. From now on this repo will only include TLS
and X.509, while crypto support was moved to TF-PSA-Crypto. A new west module
has been introduced for the latter and it's based on upstream release 1.1.0.
TF-M continues to build with Mbed TLS 3.6.5.
Crypto-wise there are many changes introduced with this change, so it's strongly
suggested to take a look to the official `Mbed TLS 3.x to TF-PSA-Crypto 1.x migration guide
<https://github.com/Mbed-TLS/TF-PSA-Crypto/blob/development/docs/1.0-migration-guide.md>`.
* ``CONFIG_MBEDTLS_ENTROPY_POLL_ZEPHYR`` has been renamed to
:kconfig:option:`CONFIG_MBEDTLS_PSA_DRIVER_GET_ENTROPY`.
* ``CONFIG_MBEDTLS_PEM_CERTIFICATE_FORMAT`` has been replaced by the underlying options it used
to enable: :kconfig:option:`CONFIG_MBEDTLS_PEM_PARSE_C`,
:kconfig:option:`CONFIG_MBEDTLS_PEM_WRITE_C` and :kconfig:option:`CONFIG_MBEDTLS_BASE64_C`.
* ``CONFIG_MBEDTLS_SERVER_NAME_INDICATION`` has been renamed to
:kconfig:option:`CONFIG_MBEDTLS_SSL_SERVER_NAME_INDICATION`.
* ``CONFIG_MBEDTLS_TEST`` has been renamed to :kconfig:option:`CONFIG_MBEDTLS_DEBUG_C`.
* The following PSA related Kconfig symbols have been removed as they are no longer
supported by TF-PSA-Crypto:
* ``CONFIG_PSA_WANT_KEY_TYPE_DES``
* ``CONFIG_PSA_WANT_ECC_SECP_R1_192``
* ``CONFIG_PSA_WANT_ECC_SECP_K1_192``
* ``CONFIG_PSA_WANT_ECC_SECP_R1_224``
* The following Mbed TLS Kconfig symbols have been removed:
* ``CONFIG_CUSTOM_MBEDTLS_CFG_FILE``
* ``CONFIG_MBEDTLS_CHACHAPOLY_AEAD_ENABLED``
* ``CONFIG_MBEDTLS_CIPHER_AES_ENABLED``
* ``CONFIG_MBEDTLS_CIPHER_CAMELLIA_ENABLED``
* ``CONFIG_MBEDTLS_CIPHER_CCM_ENABLED``
* ``CONFIG_MBEDTLS_CIPHER_CHACHA20_ENABLED``
* ``CONFIG_MBEDTLS_CIPHER_DES_ENABLED``
* ``CONFIG_MBEDTLS_CIPHER_GCM_ENABLED``
* ``CONFIG_MBEDTLS_CIPHER_MODE_CBC_ENABLED``
* ``CONFIG_MBEDTLS_CIPHER_MODE_CTR_ENABLED``
* ``CONFIG_MBEDTLS_CIPHER_MODE_XTS_ENABLED``
* ``CONFIG_MBEDTLS_CMAC``
* ``CONFIG_MBEDTLS_DHM_C``
* ``CONFIG_MBEDTLS_ECDH_C``
* ``CONFIG_MBEDTLS_ECDSA_C``
* ``CONFIG_MBEDTLS_ECDSA_DETERMINISTIC``
* ``CONFIG_MBEDTLS_ECJPAKE_C``
* ``CONFIG_MBEDTLS_ECP_ALL_ENABLED``
* ``CONFIG_MBEDTLS_ECP_C``
* ``CONFIG_MBEDTLS_ECP_DP_BP256R1_ENABLED``
* ``CONFIG_MBEDTLS_ECP_DP_BP384R1_ENABLED``
* ``CONFIG_MBEDTLS_ECP_DP_BP512R1_ENABLED``
* ``CONFIG_MBEDTLS_ECP_DP_CURVE25519_ENABLED``
* ``CONFIG_MBEDTLS_ECP_DP_CURVE448_ENABLED``
* ``CONFIG_MBEDTLS_ECP_DP_SECP192K1_ENABLED``
* ``CONFIG_MBEDTLS_ECP_DP_SECP192R1_ENABLED``
* ``CONFIG_MBEDTLS_ECP_DP_SECP224K1_ENABLED``
* ``CONFIG_MBEDTLS_ECP_DP_SECP224R1_ENABLED``
* ``CONFIG_MBEDTLS_ECP_DP_SECP256K1_ENABLED``
* ``CONFIG_MBEDTLS_ECP_DP_SECP256R1_ENABLED``
* ``CONFIG_MBEDTLS_ECP_DP_SECP384R1_ENABLED``
* ``CONFIG_MBEDTLS_ECP_DP_SECP521R1_ENABLED``
* ``CONFIG_MBEDTLS_GENPRIME_ENABLED``
* ``CONFIG_MBEDTLS_HKDF_C``
* ``CONFIG_MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED``
* ``CONFIG_MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED``
* ``CONFIG_MBEDTLS_KEY_EXCHANGE_RSA_ENABLED``
* ``CONFIG_MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED``
* ``CONFIG_MBEDTLS_MD5``
* ``CONFIG_MBEDTLS_PKCS1_V15``
* ``CONFIG_MBEDTLS_PKCS1_V21``
* ``CONFIG_MBEDTLS_POLY1305``
* ``CONFIG_MBEDTLS_RSA_C``
* ``CONFIG_MBEDTLS_SHA1``
* ``CONFIG_MBEDTLS_SHA224``
* ``CONFIG_MBEDTLS_SHA256``
* ``CONFIG_MBEDTLS_SHA384``
* ``CONFIG_MBEDTLS_SHA512``
* ``CONFIG_MBEDTLS_USE_PSA_CRYPTO``
OpenThread
==========
* The following Kconfigs options were renamed:
* ``CONFIG_OPENTHREAD_MBEDTLS_CHOICE`` to
:kconfig:option:`CONFIG_OPENTHREAD_SECURITY_DEFAULT_CONFIG`
* ``CONFIG_CUSTOM_OPENTHREAD_SECURITY`` to
:kconfig:option:`CONFIG_OPENTHREAD_SECURITY_CUSTOM_CONFIG`
* :kconfig:option:`CONFIG_OPENTHREAD_CRYPTO_PSA` no longer depends on
:kconfig:option:`CONFIG_PSA_CRYPTO_CLIENT`, but instead selects
:kconfig:option:`CONFIG_PSA_CRYPTO`.
* In builds without TF-M, :kconfig:option:`CONFIG_SECURE_STORAGE` is now automatically
implied if :kconfig:option:`CONFIG_OPENTHREAD_SECURITY_DEFAULT_CONFIG` and
:kconfig:option:`CONFIG_OPENTHREAD_CRYPTO_PSA` are set. This
guarantees that a PSA ITS implementation is available and it requires a backend
for Secure Storage (Settings, ZMS, or a custom one) to be configured.
* :kconfig:option:`CONFIG_OPENTHREAD_CRYPTO_PSA` is now enabled by default.
* Following Mbed TLS bump to version 4.1.0, legacy crypto support is no longer available
in Zephyr. Therefore ``CONFIG_OPENTHREAD_CRYPTO_LEGACY_MBEDTLS_CONFIG`` has been removed.
:kconfig:option:`CONFIG_OPENTHREAD_CRYPTO_PSA_CONFIG` was already the default choice for
crypto support and it is now the only supported crypto option.
Trusted Firmware-M
==================
* The ``SECURE_UART1`` TF-M define is now controlled by Zephyr's
:kconfig:option:`CONFIG_TFM_SECURE_UART`. This option will override any platform values previously
specified in the TF-M repository.
Architectures
*************
* Renamed ``CONFIG_ARCH_HAS_COHERENCE`` to :kconfig:option:`CONFIG_CACHE_CAN_SAY_MEM_COHERENCE` as
the feature is cache related so move it under cache.
* Use :c:func:`sys_cache_is_mem_coherent` instead of :c:func:`arch_mem_coherent`.
* :kconfig:option:`CONFIG_RISCV` now requires that the :dtcompatible:`riscv` is present in the
devicetree.
* The ``riscv,isa-base`` and ``riscv,isa-extensions`` devicetree properties of
:dtcompatible:`riscv` are now used to set the Base Integer Instruction Set and the RISC-V
extensions. They are no longer set by the SoC. The devicetree property ``riscv,isa`` has been
deprecated in favor of the two new properties. (:github:`97540`)
* ``CONFIG_SOC_CV64A6_IMAFDC`` and ``CONFIG_SOC_CV64A6_IMAC`` are now combined into
:kconfig:option:`CONFIG_SOC_CV64A6`, as the RISC-V extensions are now set by the devicetree.
* The following options of :kconfig:option:`CONFIG_SOC_SERIES_AE350` had been removed, as they
now can be set via the devicetree:
* ``CONFIG_RV32I_CPU``
* ``CONFIG_RV32E_CPU``
* ``CONFIG_RV64I_CPU``
* ``CONFIG_NO_FPU``
* ``CONFIG_SINGLE_PRECISION_FPU``
* ``CONFIG_DOUBLE_PRECISION_FPU``