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 release notes.
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:
CONFIG_STD_C99orCONFIG_STD_C11.The
full_nameproperty ofboard/boardsentries corresponding to new boards in board.yml files is now required.The CMake variable
BOARD_QUALIFIERSis aligned with the correspondingCONFIG_BOARD_QUALIFIERSso 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}.
Kernel
Boards
The OpenOCD runner now uses the standard
--fileand--file-typeinterface for specifying flash files, aligning with other runners like JLink. The following changes apply:The
--use-hex,--use-elf, and--use-binflags are deprecated. Use--file-typeinstead:--use-elf→--file-type=elf--use-bin→--file-type=bin--use-hex→--file-type=hex(or omit, as hex is the default)
The
--fileoption 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-typeoption can now be used without--fileto select between build artifacts (hex, elf, bin).
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 boards/nxp/mimxrt1180_evk/xip/evkmimxrt1180_flexspi_nor_config.c and 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/cm85is renamed toek_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 inboards/nxp/mimxrt10xx_evk/CMakeLists.txtandboards/nxp/mimxrt11xx_evk/CMakeLists.txt, is used only by the HAL headerfsl_flexspi_nor_boot.h, which is included by soc/nxp/imxrt/imxrt10xx/soc.c and soc/nxp/imxrt/imxrt11xx/soc.c. To avoid potential collisions with other global flags, the macro is now defined at the SoC layer usingzephyr_library_compile_definitions()in soc/nxp/imxrt/imxrt10xx/CMakeLists.txt and 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 inboards/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 inboards/nxp/mimxrtxxx_evk/CMakeLists.txtand used inboards/nxp/rtxxx/<boot_header>.c, has been replaced by a Kconfig option. Consequently, the linezephyr_compile_definitions(BOOT_HEADER_ENABLE=1)has been removed from the RTxxx board CMakeLists.txt files.Removed compile flag
BOOT_HEADER_ENABLEdefinition from boards/nxp/rd_rw612_bga/CMakeLists.txt, as it is not used in the Zephyr tree.Originally, the compile flags
XIP_BOOT_HEADER_ENABLEandXIP_BOOT_HEADER_DCD_ENABLEwere used inboards/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 removedzephyr_compile_definitions(XIP_BOOT_HEADER_ENABLE=1)andzephyr_compile_definitions(XIP_BOOT_HEADER_DCD_ENABLE=1)from the RTxxxx board-level CMakeLists.txt files. Because these macros are also required byhal_nxp/rt10xx/fsl_flexspi_nor_boot.handhal_nxp/rt11xx/fsl_flexspi_nor_boot.h, they were added to the corresponding SoC-layer CMakeLists.txt files usingzephyr_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:
ITE
it515xx_evbis renamed toit51xxx_evb.
Device Drivers and Devicetree
ADC
The
renesas,ra-adccompatible has been replaced byrenesas,ra-adc12. Applications using the old compatible must update their devicetree nodes.The
renesas,ra-adc16compatible was added. This must be used when working with the EK-RA2A1 board, which provides a 16-bit ADC resolution.Renamed the
CONFIG_ADC_MCUX_SAR_ADCtoCONFIG_ADC_NXP_SAR_ADC.Renamed the driver file from
adc_mcux_sar_adc.cto 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-positiveto specify the hardware channel. For SoCs that currently support SAR ADC, the reference voltage should useADC_REF_VDD_1instead ofADC_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)st,stm32-adcno longer has theresolutionsproperty. It is replaced by thest,adc-resolutionsproperty. 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:CONFIG_CAN_NATIVE_LINUX_MAX_FILTERSforzephyr,native-linux-canCONFIG_CAN_SJA1000_MAX_FILTERSforkvaser,pcicanandespressif,esp32-twaiCONFIG_CAN_STM32_BXCAN_MAX_EXT_ID_FILTERSforst,stm32-bxcanCONFIG_CAN_STM32_BXCAN_MAX_STD_ID_FILTERSforst,stm32-bxcanCONFIG_CAN_STM32_FDCAN_MAX_EXT_ID_FILTERSforst,stm32-fdcanCONFIG_CAN_STM32_FDCAN_MAX_STD_ID_FILTERSforst,stm32-fdcanCONFIG_CAN_XMC4XXX_MAX_FILTERSforinfineon,xmc4xxx-can-node
Replaced Kconfig option
CONFIG_CAN_MAX_MBfornxp,flexcanandnxp,flexcan-fdwith per-instancenumber-of-mbandnumber-of-mb-fddevicetree properties (GitHub #99483).The
nxp,flexcanclk-sourcedevicetree property, if present, now automatically selects between the named input clocksclksrc0andclksrc1for use as the CAN protocol engine clock.
Counter
Drivers that implement
get_value_64API will now need to selectCONFIG_COUNTER_SUPPORTS_64BITS_TICKSand applications will needCONFIG_COUNTER_64BITS_TICKSto enable the API. (GitHub #94189).The NXP LPTMR driver (
nxp,lptmr) has been updated to fix incorrect prescaler and glitch filter configuration:The
prescale-glitch-filterproperty valid range changed from[0-16]to[0-15]. The value16was invalid for pulse counter mode and has been removed. Device trees using value16must be updated to use values in the range[0-15].A new boolean property
prescale-glitch-filter-bypasshas been introduced to explicitly control prescaler/glitch filter bypass. Previously, settingprescale-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 andprescale-glitch-filteris 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-filterrising 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 ofprescale-glitch-filter = <0>;. Out-of-tree boards should be updated accordingly.If both
prescale-glitch-filter-bypassandprescale-glitch-filterare set, bypass mode takes precedence and theprescale-glitch-filtervalue is ignored.
Example migration:
/* 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; };
Examples of using
prescale-glitch-filterNote
prescale-glitch-filter-bypassis a boolean. If present, bypass is enabled. If absent, bypass is disabled andprescale-glitch-filteris applied.In Pulse Counter mode,
prescale-glitch-filter = <0>is not a supported glitch filter configuration. To request no filtering, useprescale-glitch-filter-bypass;.Time Counter mode: divide the counter clock
In Time Counter mode the prescaler divides by
2^(N + 1)./* 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)
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^Nrising edges. Value0is not supported for glitch filtering; use bypass if you want no filtering./* 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 (
nxp,imx-gpt) now defaults torun-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-modedevicetree 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./* 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 userun-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_xin devicetrees for panel color format selection has been updated toPANEL_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_565pixel format has been renamed toPIXEL_FORMAT_RGB_565Xto correctly reflect that it is a byte-swapped version of RGB_565, not a channel-swapped format. Applications usingPIXEL_FORMAT_BGR_565must update to usePIXEL_FORMAT_RGB_565X. (GitHub #99276)The devicetree macro
PANEL_PIXEL_FORMAT_BGR_565has been renamed toPANEL_PIXEL_FORMAT_RGB_565X. (GitHub #99276)The Kconfig options
SDL_DISPLAY_DEFAULT_PIXEL_FORMAT_BGR_565andST7789V_BGR565have been renamed toSDL_DISPLAY_DEFAULT_PIXEL_FORMAT_RGB_565XandST7789V_RGB565Xrespectively. (GitHub #99276)CONFIG_SSD1327symbol has been renamed toCONFIG_SSD1327_5to includeSSD1325as well.solomon,ssd1327fbdevicetree compatible has been renamedsolomon,ssd1327to harmonize with other display controllers and eliminate the zephyr-irrelevantfbsuffix.solomon,ssd1306fbandsolomon,ssd1309fbdevicetree compatibles has been renamedsolomon,ssd1306andsolomon,ssd1309respectively, to harmonize with other display controllers and eliminate the zephyr-irrelevantfbsuffix.
DMA
Removed the
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 modifyDMA_MCUX_EDMA_V5toDMA_MCUX_EDMA_V4.
EEPROM
Added
eeprom_target_read_data()andeeprom_target_write_data()which takes an offset and length and deprecatedeeprom_target_program()for the I2C EEPROM target driver.
ESP32-S3
The former
espressif,esp32-lcd-cambinding has been restructured. The LCD_CAM peripheral is now represented by a commonlcd_camnode, with its functional blocks split into two separate child nodes:espressif,esp32-lcd-cam-dvpcompatible node for the DVP (camera) input module, labeled aslcd_cam_dvp.espressif,esp32-lcd-cam-mipi-dbicompatible node for the LCD output module, labeled aslcd_cam_disp.
The original
espressif,esp32-lcd-camcompatible node keeps the common pinctrl, clock, and interrupt properties, while camera-specific properties have moved into the newlcd_cam_dvpchild node.Camera-related properties must be moved from
lcd_camnode to the newlcd_cam_dvpchild node, andzephyr,camerachosen property should point tolcd_cam_dvpinstead.
Ethernet
Driver MAC address configuration support using
net_eth_mac_confighas been introduced for the following drivers:atmel,sam-gmacandatmel,sam0-gmac(GitHub #96598)Removed
CONFIG_ETH_SAM_GMAC_MAC_I2C_EEPROMRemoved
CONFIG_ETH_SAM_GMAC_MAC_I2C_INT_ADDRESSRemoved
CONFIG_ETH_SAM_GMAC_MAC_I2C_INT_ADDRESS_SIZERemoved
mac-eepromproperty
vnd,ethernet(GitHub #96598)
The
fixed-linkproperty has been removed fromethernet-phy. Use the newethernet-phy-fixed-linkcompatible instead, if that functionality is needed. There you need to specify the fixed link parameters using thedefault-speedsproperty (GitHub #100454).The
reset-gpiosproperty ofmicrochip,ksz8081has been reworked to be used as active low, you may have to set the pin asGPIO_ACTIVE_LOWin devicetree (GitHub #100751).
GPIO
The LiteX GPIO driver
litex,gpiohas been reworked to support changing direction. The driver now uses the reg-names property to detect supported modes of the GPIO controller. The Devicetree propertyport-is-outputhas been removed. The reg-names are now taken directly from LiteX. (GitHub #99329)The
irqsproperty ofrenesas,rz-gpiohas been reworked to map a pin to an interrupt phandle explicitly instead of an interrupt index (GitHub #101256)./* 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
cat1from their names to support reusability across multiple device categories. The following drivers have been renamed (GitHub #99174):adc_ifx_cat1.c→adc_ifx.cclock_control_ifx_cat1.c→clock_control_ifx.ccounter_ifx_cat1.c→counter_ifx.cdma_ifx_cat1.c→dma_ifx.cdma_ifx_cat1_pdl.c→dma_ifx_pdl.cflash_ifx_cat1.c→flash_ifx.cflash_ifx_cat1_qspi.c→flash_ifx_qspi.cflash_ifx_cat1_qspi_mtb_hal.c→flash_ifx_qspi_mtb_hal.cgpio_ifx_cat1.c→gpio_ifx.ci2c_ifx_cat1.c→i2c_ifx.ci2c_ifx_cat1_pdl.c→i2c_ifx_pdl.cmbox_ifx_cat1.c→mbox_ifx.cpinctrl_ifx_cat1.c→pinctrl_ifx.crtc_ifx_cat1.c→rtc_ifx.cifx_cat1_sdio.c→ifx_sdio.csdio_ifx_cat1_pdl.c→sdio_ifx_pdl.cserial_ifx_cat1_uart.c→serial_ifx_uart.cspi_ifx_cat1.c→spi_ifx.cspi_ifx_cat1_pdl.c→spi_ifx_pdl.cuart_ifx_cat1.c→uart_ifx.cuart_ifx_cat1_pdl.c→uart_ifx_pdl.cwdt_ifx_cat1.c→wdt_ifx.c
Corresponding Kconfig symbols and binding files have also been updated:
CONFIG_*_INFINEON_CAT1→CONFIG_*_INFINEONcompatible: "infineon,cat1-adc"→compatible: "infineon,adc"
MDIO
The
mdio_bus_enable()andmdio_bus_disable()functions have been removed. MDIO bus enabling/disabling is now handled internally by the MDIO drivers. (GitHub #99690).
QSPI
st,stm32-qspicompatible nodes configured withdual-flashproperty now need to also include thessht-enableproperty 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:generic-fem-two-ctrl-pinsis nowradio-fem-two-ctrl-pinsgpio-radio-coexis nowradio-gpio-coex
A new
radio.yamlbase binding has been introduced for generic radio hardware capabilities. Thetx-high-power-supportedproperty has been renamed toradio-tx-high-power-supportedfor 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_supportandhs400_supportfromsdhc_host_capstosdhc_host_propsas per the SD Host Controller Specification. (GitHub #91701)
Shell
The
shell_set_bypass()now requires a user data pointer to be passed. And accordingly theshell_bypass_cb_tnow has a user data argument. (GitHub #100311)
Stepper
For
adi,tmc2209, the propertymsx-gpiosis now replaced bym0-gpiosandm1-gpiosfor 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 Stepper to Stepper-Drv:
stepper_enable()is replaced bystepper_drv_enable().stepper_disable()is replaced bystepper_drv_disable().stepper_set_micro_step_res()is replaced bystepper_drv_set_micro_step_res().stepper_get_micro_step_res()is replaced bystepper_drv_get_micro_step_res().
stepper_micro_step_resolutionis replaced bystepper_drv_micro_step_resolution.STEPPER_DRV_EVENT_STALL_DETECTEDandSTEPPER_DRV_EVENT_FAULT_DETECTEDevents have been refactored tostepper_drv_event.zephyr,gpio-step-dir-stepperimplements Stepper for controlling stepper motors via GPIO step and direction signals. Refer to Individual Stepper Motion Controller and Driver for more details.step-gpios,dir-gpios,invert-directionandcounterproperties are removed fromadi,tmc2209,ti,drv84xxandallegro,a4979, these are now are implemented byzephyr,gpio-step-dir-stepper.stepper_move_by(),stepper_move_to(),stepper_run(),stepper_stop(),stepper_is_moving(),stepper_set_microstep_interval()andstepper_set_event_callback()APIs are removed fromadi,tmc2209,ti,drv84xxandallegro,a4979.adi,tmc2209,ti,drv84xxandallegro,a4979implement Stepper-Drv.
stepper_enable(),stepper_disable(),stepper_set_micro_step_res()andstepper_get_micro_step_res()APIs are removed fromzephyr,h-bridge-stepper.en-gpiosproperty is removed fromzephyr,h-bridge-stepper.micro-step-resproperty is replaced bylut-step-gapproperty inzephyr,h-bridge-stepper.adi,tmc50xxandadi,tmc51xxdevices are now modeled as MFDs.adi,tmc50xx-stepperandadi,tmc51xx-stepperdrivers implement Stepper.adi,tmc50xx-stepper-drvandadi,tmc51xx-stepper-drvdrivers implement Stepper-Drv.
STM32
STM32 power supply configuration is now performed using Devicetree properties. New bindings
st,stm32h7-pwr,st,stm32h7rs-pwrandst,stm32-dualreg-pwrhave been introduced, and all Kconfig symbols related to power supply configuration have been removed:CONFIG_POWER_SUPPLY_LDOCONFIG_POWER_SUPPLY_DIRECT_SMPS,CONFIG_POWER_SUPPLY_SMPS_1V8_SUPPLIES_LDOCONFIG_POWER_SUPPLY_SMPS_2V5_SUPPLIES_LDO,CONFIG_POWER_SUPPLY_SMPS_1V8_SUPPLIES_EXT_AND_LDOCONFIG_POWER_SUPPLY_SMPS_2V5_SUPPLIES_EXT_AND_LDOCONFIG_POWER_SUPPLY_SMPS_1V8_SUPPLIES_EXTCONFIG_POWER_SUPPLY_SMPS_2V5_SUPPLIES_EXTCONFIG_POWER_SUPPLY_EXTERNAL_SOURCE
The ST-specific chosen property
/chosen/zephyr,ccmis replaced by/chosen/zephyr,dtcm. Attribute macros__ccm_data_section,__ccm_bss_sectionand__ccm_noinit_sectionare deprecated, but retained for backwards compatibility; they will be removed in Zephyr 4.5. The generic__dtcm_{data,bss,noinit}_sectionmacros should be used instead. (GitHub #100590)STM32 platforms now use the default MCUboot operating mode
swap using offset(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 previousswap using movemode can still be selected in sysbuild by enablingSB_CONFIG_MCUBOOT_MODE_SWAP_USING_MOVE.For STM32F2x/F4x/F7x, the different PLL bindings (
st,stm32f2-pll-clock,st,stm32f4-pll-clock,st,stm32f4-plli2s-clock,st,stm32f411-plli2s-clock,st,stm32f7-pll-clockandst,stm32fx-pllsai-clock) has been merged into a single onest,stm32fx-pll-clock. This merge brings some changes, notablydiv-divqanddiv-divrproperties have been renamed respectively topost-div-qandpost-div-r. Besides, when applicable to the SoC, these properties need to be defined if the correspondingdiv-qordiv-rproperties are used.
USB
maxim,max3421e_spihas been renamed tomaxim,max3421e-spi.
Video
CONFIG_VIDEO_OV7670 is now gone and replaced by CONFIG_VIDEO_OV767X. This allows supporting both the OV7670 and 0V7675.
CONFIG_VIDEO_BUFFER_POOL_SZ_MAXis replaced byCONFIG_VIDEO_BUFFER_POOL_HEAP_SIZEwhich represent the size in byte allocated for the whole video buffer pool.The
ovti,ov2640reset pin handling has been corrected, resulting in an inverted active level compared to before, to match the active level expected by the sensor.
Bluetooth
Bluetooth Host
CONFIG_BT_SIGNINGhas been deprecated.BT_GATT_CHRC_AUTHhas been deprecated.bt_conn_le_info.intervalhas been deprecated. Usebt_conn_le_info.interval_usinstead. Note that the units have changed:intervalwas in units of 1.25 milliseconds, whileinterval_usis 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
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 callbt_bap_broadcast_assistant_read_recv_state()to read the existing receive states, if any, prior to performing any operations. (GitHub #91587)CONFIG_BT_AUDIOnow depends onCONFIG_UTF8. Applications that enableCONFIG_BT_AUDIOmust also haveCONFIG_UTF8enabled. (GitHub #102350)
Bluetooth Mesh
CONFIG_BT_MESH_MODEL_VND_MSG_CID_FORCEhas been deprecated. Enabling it no longer has any effect on message handling performance.
Networking
Networking APIs found in
and relevant code in
subsys/netetc. is namespaced. This means that eithernet_,NET_orZSOCK_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 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 likesys/socket.hto 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_statustohttp_transaction_statusto better reflect its purpose. The enum values have also been renamed as follows:HTTP_SERVER_DATA_ABORTED→HTTP_SERVER_TRANSACTION_ABORTEDHTTP_SERVER_DATA_MORE→HTTP_SERVER_REQUEST_DATA_MOREHTTP_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_COMPLETEstatus 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
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
NET_SOCKETS_SOCKOPT_TLSas they strongly depend on the final application’s needs. As a consequence the desired TLS protocol version and ciphersuite(s) must be explicitly selected. AvailableCONFIG_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.
Modem
Modem HL78XX
The Kconfig options related to HL78XX startup timing have been renamed in
CONFIG_MODEM_HL78XX_DEV_*as follows:MODEM_HL78XX_DEV_POWER_PULSE_DURATION→MODEM_HL78XX_DEV_POWER_PULSE_DURATION_MSMODEM_HL78XX_DEV_RESET_PULSE_DURATION→MODEM_HL78XX_DEV_RESET_PULSE_DURATION_MSMODEM_HL78XX_DEV_STARTUP_TIME→MODEM_HL78XX_DEV_STARTUP_TIME_MSMODEM_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_*toLORAWAN_REGION_*to make them backend-agnostic. Applications using any of the following symbols must update their configuration files:CONFIG_LORAMAC_REGION_AS923→CONFIG_LORAWAN_REGION_AS923CONFIG_LORAMAC_REGION_AU915→CONFIG_LORAWAN_REGION_AU915CONFIG_LORAMAC_REGION_CN470→CONFIG_LORAWAN_REGION_CN470CONFIG_LORAMAC_REGION_CN779→CONFIG_LORAWAN_REGION_CN779CONFIG_LORAMAC_REGION_EU433→CONFIG_LORAWAN_REGION_EU433CONFIG_LORAMAC_REGION_EU868→CONFIG_LORAWAN_REGION_EU868CONFIG_LORAMAC_REGION_KR920→CONFIG_LORAWAN_REGION_KR920CONFIG_LORAMAC_REGION_IN865→CONFIG_LORAWAN_REGION_IN865CONFIG_LORAMAC_REGION_US915→CONFIG_LORAWAN_REGION_US915CONFIG_LORAMAC_REGION_RU864→CONFIG_LORAWAN_REGION_RU864
Other subsystems
The DAP subsystem initialization and configuration has changed. Please take a look at CMSIS-DAP sample on how to initialize Zephyr DAP Link with USB backend.
Cache
Use
CONFIG_CACHE_HAS_MIRRORED_MEMORY_REGIONSinstead ofCONFIG_CACHE_DOUBLEMAPas the former is more descriptive of the feature.
Flash
Previously deprecated
CONFIG_FLASH_AREA_CHECK_INTEGRITY_MBEDTLSis now removed.CONFIG_FLASH_AREA_CHECK_INTEGRITY_PSAis also removed since there is now no alternative for the crypto library backend.
JWT
Previously deprecated
CONFIG_JWT_SIGN_RSA_LEGACYis 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
CONFIG_MCUMGR_TRANSPORT_UARTthenCONFIG_UART_MCUMGRmust now also be selected, this has changed to bedepends onrather thanselect.
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
pl011_poll_in(). RSR handling is already implemented inpl011_err_check(), which is the appropriate place to detect, and report receive error conditions. (GitHub #101715)
Settings
CONFIG_SETTINGS_TFM_ITShas been renamed toCONFIG_SETTINGS_TFM_PSA.
Modules
HostAP
Kconfig
CONFIG_WIFI_NM_WPA_SUPPLICANT_CRYPTO_MBEDTLS_PSAis now enabled by default.
OpenThread
The following Kconfigs options were renamed:
CONFIG_OPENTHREAD_MBEDTLS_CHOICEtoCONFIG_OPENTHREAD_SECURITY_DEFAULT_CONFIGCONFIG_CUSTOM_OPENTHREAD_SECURITYtoCONFIG_OPENTHREAD_SECURITY_CUSTOM_CONFIG
CONFIG_OPENTHREAD_CRYPTO_PSAno more depends onCONFIG_PSA_CRYPTO_CLIENT, but instead selectsCONFIG_PSA_CRYPTO.In builds without TF-M,
CONFIG_SECURE_STORAGEis now automatically implied ifCONFIG_OPENTHREAD_SECURITY_DEFAULT_CONFIGandCONFIG_OPENTHREAD_CRYPTO_PSAare 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.CONFIG_OPENTHREAD_CRYPTO_PSAis now enabled by default.
Trusted Firmware-M
The
SECURE_UART1TF-M define is now controlled by Zephyr’sCONFIG_TFM_SECURE_UART. This option will override any platform values previously specified in the TF-M repository.
Architectures
Renamed
CONFIG_ARCH_HAS_COHERENCEtoCONFIG_CACHE_CAN_SAY_MEM_COHERENCEas the feature is cache related so move it under cache.Use
sys_cache_is_mem_coherent()instead ofarch_mem_coherent().
CONFIG_RISCVnow requires, that theriscvis present in the devicetree.The
riscv,isa-baseandriscv,isa-extensionsdevicetree properties ofriscvare now used to set the Base Integer Instruction Set and the RISC-V extensions. They are no longer set by the SoC. The devicetree propertyriscv,isahas been deprecated in favor of the two new properties. (GitHub #97540)CONFIG_SOC_CV64A6_IMAFDCandCONFIG_SOC_CV64A6_IMACare now combined intoCONFIG_SOC_CV64A6, as the RISC-V extensions are now set by the devicetree.The following options of
CONFIG_SOC_SERIES_AE350had been removed, as they now can be set via the devicetree:CONFIG_RV32I_CPUCONFIG_RV32E_CPUCONFIG_RV64I_CPUCONFIG_NO_FPUCONFIG_SINGLE_PRECISION_FPUCONFIG_DOUBLE_PRECISION_FPU