Files
zephyr/doc/releases/migration-guide-4.4.rst
Robert Lubos a34409f006 doc: migration-guide-4.4: Document secure socket version enforcement
Document that TLS version passed to a zsock_socket() function is no
longer ignored and is now enforced as the minimum TLS version for the
TLS session.

Signed-off-by: Robert Lubos <robert.lubos@nordicsemi.no>
2026-01-22 12:56:12 -05:00

826 lines
36 KiB
ReStructuredText

: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 (Working Draft)
################################################
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
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.
Kernel
******
Boards
******
* 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.
* 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`
* ITE ``it515xx_evb`` is renamed to ``it51xxx_evb``.
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.
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 ``number-of-mb`` and
``number-of-mb-fd`` devicetree properties (: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.
Counter
=======
* 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.
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`).
* The ``PIXEL_FORMAT_BGR_565`` pixel format has been renamed to
:c:macro:`PIXEL_FORMAT_RGB_565X` to correctly reflect that it is a
byte-swapped version of RGB_565, not a channel-swapped format.
Applications using ``PIXEL_FORMAT_BGR_565`` must update to use
:c:macro:`PIXEL_FORMAT_RGB_565X`. (:github:`99276`)
* The devicetree macro ``PANEL_PIXEL_FORMAT_BGR_565`` has been renamed to
:c:macro:`PANEL_PIXEL_FORMAT_RGB_565X`. (:github:`99276`)
* The Kconfig options ``SDL_DISPLAY_DEFAULT_PIXEL_FORMAT_BGR_565`` and
``ST7789V_BGR565`` have been renamed to
:kconfig:option:`SDL_DISPLAY_DEFAULT_PIXEL_FORMAT_RGB_565X` and :kconfig:option:`ST7789V_RGB565X`
respectively. (:github:`99276`)
* ``CONFIG_SSD1327`` symbol has been renamed to :kconfig:option:`CONFIG_SSD1327_5` to include ``SSD1325`` as well.
* ``solomon,ssd1327fb`` devicetree compatible has been renamed :dtcompatible:`solomon,ssd1327`
to harmonize with other display controllers and eliminate the zephyr-irrelevant ``fb`` suffix.
* ``solomon,ssd1306fb`` and ``solomon,ssd1309fb`` devicetree compatibles has been renamed
:dtcompatible:`solomon,ssd1306` and :dtcompatible:`solomon,ssd1309` respectively,
to harmonize with other display controllers and eliminate the zephyr-irrelevant ``fb`` suffix.
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.
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:`sensry,sy1xx-mac` (:github:`100619`)
* :dtcompatible:`virtio,net` (:github:`100106`)
* :dtcompatible:`vnd,ethernet` (:github:`96598`)
* :dtcompatible:`wiznet,w5500` (:github:`100919`)
* 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`).
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"``
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`).
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.
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.
* Since :github:`91979`, All stepper-drv driver APIs have been refactored out of the stepper API.
The following APIs have been moved from :c:group:`stepper_interface` to :c:group:`stepper_drv_interface`:
* :c:func:`stepper_enable` is replaced by :c:func:`stepper_drv_enable`.
* :c:func:`stepper_disable` is replaced by :c:func:`stepper_drv_disable`.
* :c:func:`stepper_set_micro_step_res` is replaced by :c:func:`stepper_drv_set_micro_step_res`.
* :c:func:`stepper_get_micro_step_res` is replaced by :c:func:`stepper_drv_get_micro_step_res`.
* :c:enum:`stepper_micro_step_resolution` is replaced by :c:enum:`stepper_drv_micro_step_resolution`.
* ``STEPPER_DRV_EVENT_STALL_DETECTED`` and ``STEPPER_DRV_EVENT_FAULT_DETECTED`` events have been
refactored to :c:enum:`stepper_drv_event`.
* :dtcompatible:`zephyr,gpio-step-dir-stepper` implements :c:group:`stepper_interface` for
controlling stepper motors via GPIO step and direction signals. Refer to
:ref:`stepper-individual-controller-driver` for more details.
* ``step-gpios``, ``dir-gpios``, ``invert-direction`` and ``counter`` properties are removed
from :dtcompatible:`adi,tmc2209`, :dtcompatible:`ti,drv84xx` and :dtcompatible:`allegro,a4979`,
these are now are implemented by :dtcompatible:`zephyr,gpio-step-dir-stepper`.
* :c:func:`stepper_move_by`, :c:func:`stepper_move_to`, :c:func:`stepper_run`,
:c:func:`stepper_stop`, :c:func:`stepper_is_moving`, :c:func:`stepper_set_microstep_interval`
and :c:func:`stepper_set_event_callback` APIs are removed from :dtcompatible:`adi,tmc2209`,
:dtcompatible:`ti,drv84xx` and :dtcompatible:`allegro,a4979`.
* :dtcompatible:`adi,tmc2209`, :dtcompatible:`ti,drv84xx` and :dtcompatible:`allegro,a4979`
implement :c:group:`stepper_drv_interface`.
* :c:func:`stepper_enable`, :c:func:`stepper_disable`, :c:func:`stepper_set_micro_step_res` and
:c:func:`stepper_get_micro_step_res` APIs are removed from :dtcompatible:`zephyr,h-bridge-stepper`.
* ``en-gpios`` property is removed from :dtcompatible:`zephyr,h-bridge-stepper`.
* ``micro-step-res`` property is replaced by ``lut-step-gap`` property in
:dtcompatible:`zephyr,h-bridge-stepper`.
* :dtcompatible:`adi,tmc50xx` and :dtcompatible:`adi,tmc51xx` devices are now modeled as MFDs.
* :dtcompatible:`adi,tmc50xx-stepper` and :dtcompatible:`adi,tmc51xx-stepper` drivers implement
:c:group:`stepper_interface`.
* :dtcompatible:`adi,tmc50xx-stepper-drv` and :dtcompatible:`adi,tmc51xx-stepper-drv` drivers implement
:c:group:`stepper_drv_interface`.
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.
USB
===
* :dtcompatible:`maxim,max3421e_spi` has been renamed to :dtcompatible:`maxim,max3421e-spi`.
Video
=====
* CONFIG_VIDEO_OV7670 is now gone and replaced by 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.
.. 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.
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`)
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.
Networking
**********
* 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 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.
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
****************
* 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.
JWT
===
* Previously deprecated ``CONFIG_JWT_SIGN_RSA_LEGACY`` is removed. This removal happens 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
==========
* 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``.
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
*******
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`.