: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.3:

Migration guide to Zephyr v4.3.0
################################

This document describes the changes required when migrating your application from Zephyr v4.2.0 to
Zephyr v4.3.0.

Any other changes (not directly related to migrating applications) can be found in
the :ref:`release notes<zephyr_4.3>`.

.. contents::
    :local:
    :depth: 2

Build System
************

Kernel
******

* :c:func:`device_init` Earlier releases returned a positive +errno value in case
  of device init failure due to a bug. This is now fixed to return the correct
  negative -errno value. Applications that implemented workarounds for this
  issue should now update their code accordingly.

Base Libraries
**************

* UTF-8 utils declarations (:c:func:`utf8_trunc`, :c:func:`utf8_lcpy`) have
  been moved from ``util.h`` to a separate
  :zephyr_file:`include/zephyr/sys/util_utf8.h` file.

* ``Z_MIN``, ``Z_MAX`` and ``Z_CLAMP`` macros have been renamed to
  :c:macro:`min` :c:macro:`max` and :c:macro:`clamp`.

* The header files ``<zephyr/posix/time.h>``, ``<zephyr/posix/signal.h>`` should no longer be used.
  Include them in the standard path as ``<time.h>``, and ``<signal.h>``, provided by the C library.
  Non-POSIX C library maintainers may include :zephyr_file:`include/zephyr/posix/posix_time.h`
  and :zephyr_file:`include/zephyr/posix/posix_signal.h` to portably provide POSIX definitions.

* POSIX limits are no longer defined in ``<zephyr/posix/posix_features.h>``. Similarly, include them
  in the standard path via ``<limits.h>``, provided by the C library. Non-POSIX C library maintainers
  may include :zephyr_file:`include/zephyr/posix/posix_limits.h` for Zephyr's definitions. Some
  runtime-invariant values may need to be queried via :c:func:`sysconf`.

* The number of file descriptor table size and its availability is now determined by
  a ``ZVFS_OPEN_SIZE`` define instead of the :kconfig:option:`CONFIG_ZVFS_OPEN_MAX`
  Kconfig option. Subsystems can specify their own custom file descriptor table size
  requirements by specifying Kconfig options with the prefix ``CONFIG_ZVFS_OPEN_ADD_SIZE_``.
  The old Kconfig option still exists, but will be overridden if the custom requirements
  are larger. To force the old Kconfig option to be used, even when its value is less
  than the indicated custom requirements, a new :kconfig:option:`CONFIG_ZVFS_OPEN_IGNORE_MIN`
  option has been introduced (which defaults to being disabled).

Boards
******

* b_u585i_iot02a/ns: The flash layout was changed to be in sync with the upstream TF-M 2.2.1 board
  configurations. The new layout expands the flash partitions, moving the secondary ones to the
  external NOR flash. This change currently prevents upgrade from older Zephyr release images to
  Zephyr 4.3 release images. More details in the TF-M migration and release notes.

* nucleo_h753zi: the flash layout was updated and firmware upgrade may fail due to layout
  incompatibility with the previous layout. The new layout includes storage partition enlarged to
  2 sectors, scratch partition removed and all flash partitions reordered for better structure.

* mimxrt11x0: renamed lpadc1 to lpadc2 and renamed lpadc0 to lpadc1.

* NXP ``frdm_mcxa166`` is renamed to ``frdm_mcxa346``.
* NXP ``frdm_mcxa276`` is renamed to ``frdm_mcxa266``.

* Panasonic ``panb511evb`` is renamed to ``panb611evb``.

* STM32 boards OpenOCD configuration files have been changed to support latest OpenOCD versions
  (> v0.12.0) in which the HLA/SWD transport has been deprecated (see
  https://review.openocd.org/c/openocd/+/8523 and commit
  https://sourceforge.net/p/openocd/code/ci/34ec5536c0ba3315bc5a841244bbf70141ccfbb4/).
  Issues may be encountered when connecting to an ST-Link adapter running firmware prior to
  v2j24 which do not support the new transport. In this case, the ST-Link firmware should
  be upgraded or, if not possible, the OpenOCD configuration script should be changed to
  source "interface/stlink-hla.cfg" and select the "hla_swd" interface explicitly.
  Backward compatibility with OpenOCD v0.12.0 or older is maintained.

Device Drivers and Devicetree
*****************************

.. zephyr-keep-sorted-start re(^\w)

ADC
===

* ``iadc_gecko.c`` driver is replaced by ``adc_silabs_iadc.c``.
  :dtcompatible:`silabs,gecko-iadc` is replaced by :dtcompatible:`silabs,iadc`.

* :dtcompatible:`st,stm32-adc` and its derivatives now require the ``clock-names`` property to be
  defined and to match the number of clocks in the ``clocks`` property. The expected clock names are
  ``adcx`` for the register clock, ``adc-ker`` for the kernel source clock, and ``adc-pre`` to set
  the ADC prescaler (for series where it is located in the RCC registers).

Clock Control
=============

* :kconfig:option:`CONFIG_CLOCK_STM32_HSE_CLOCK` is no longer user-configurable. Its value is now
  always taken from the ``clock-frequency`` property of ``&clk_hse`` DT node, but only if the node
  is enabled (otherwise, the symbol is not defined). This change should only affect STM32 MPU-based
  platforms and aligns them with existing practice from STM32 MCU platforms.

* :dtcompatible:`st,stm32f1-rcc` and :dtcompatible:`st,stm32f3-rcc` do not exist anymore. Therefore
  ``adc-prescaler``, ``adc12-prescaler`` and ``adc34-prescaler`` properties are no longer defined
  either. They are replaced by adding the prescaler as an additional clock in the ADC ``clocks``
  property.

Comparator
==========

* :dtcompatible:`nordic,nrf-comp` and :dtcompatible:`nordic,nrf-lpcomp` ``psel`` and ``extrefsel``
  properties type has been changed to integer. The value of these properties is in the range
  of :c:macro:`NRF_COMP_AIN0` to :c:macro:`NRF_COMP_AIN_VDDH_DIV5`, where :c:macro:`NRF_COMP_AIN0`
  to :c:macro:`NRF_COMP_AIN7` represent the external inputs AIN0 to AIN7,
  :c:macro:`NRF_COMP_AIN_VDD_DIV2` represents internal reference VDD/2,
  and :c:macro:`NRF_COMP_AIN_VDDH_DIV5` represents VDDH/5.
  The old ``string`` properties type is deprecated.

DMA
===

* DMA no longer implements user mode syscalls as part of its API. The syscalls were determined to be
  too broadly defined in access and impossible to implement the syscall parameter verification step
  in a safe manner.

Ethernet
========

* The :dtcompatible:`microchip,vsc8541` PHY driver now expects the reset-gpios entry to specify
  the GPIO_ACTIVE_LOW flag when the reset is being used as active low. Previously the active-low
  nature was hard-coded into the driver. (:github:`91726`).

* CRC checksum generation offloading to hardware is now explicitly disabled rather then explicitly
  enabled in the Xilinx GEM Ethernet driver (:dtcompatible:`xlnx,gem`). By default, offloading is
  now enabled by default to improve performance, however, offloading is always disabled for QEMU
  targets due to the checksum generation in hardware not being emulated regardless of whether it
  is explicitly disabled via the Devicetree or not. (:github:`95435`)

  * Replaced Devicetree property ``rx-checksum-offload`` which enabled RX checksum offloading
    ``disable-rx-checksum-offload`` which now actively disables it.
  * Replaced Devicetree property ``tx-checksum-offload`` which enabled TX checksum offloading
    ``disable-tx-checksum-offload`` which now actively disables it.

* The Xilinx GEM Ethernet driver (:dtcompatible:`xlnx,gem`) now obtains the AMBA AHB data bus
  width matching the current target SoC (either Zynq-7000 or ZynqMP) from a design configuration
  register at run-time, making the Devicetree property ``amba-ahb-dbus-width`` obsolete, which
  has therefore been removed.

* The :dtcompatible:`nxp,enet-mac` and :dtcompatible:`xlnx,gem` drivers are no longer configuring
  the link speed and duplex mode of the phy via  :c:func:`phy_configure_link` during initialization.
  Instead, the user has to use the ``default-speeds`` Devicetree property of the phy, if they want
  to restrict the advertised speeds for auto-negotiation, when the mac only supports a subset of the
  phy supported speeds. (:github:`91572`)

MFD
===

* Driver support for AXP2101 has been separated from the AXP192 one. As a consequence the
  kconfig symbol ``MFD_AXP192_AXP2101`` is removed. :kconfig:option:`MFD_AXP192` is now to be
  used for AXP192 device while :kconfig:option:`MFD_AXP2101` for the AXP2101 one.

MISC
====

* The nrf_etr driver has been migrated to drivers/debug. As a consequence the related Kconfig
  symbol was renamed from ``NRF_ETR`` to :kconfig:option:`DEBUG_NRF_ETR`, along with the rest of
  the ``NRF_ETR`` symbols. Also the driver needs to be explicitly enabled via
  :kconfig:option:`DEBUG_DRIVER` as it is no longer built by default.

PWM
===

* :dtcompatible:`nxp,pca9685` ``invert`` property has been removed and you can now use the
  :c:macro:`PWM_POLARITY_INVERTED` or :c:macro:`PWM_POLARITY_NORMAL` flags as specifier cells for
  space "pwm" are now named: ``['channel', 'period', 'flags']`` (old value:
  ``['channel', 'period']``) and ``#pwm-cells`` const value changed from 2 to 3.

Phy
===

* Nodes with compatible property :dtcompatible:`st,stm32u5-otghs-phy` now need to select the
  CLKSEL (phy reference clock) in the SYSCFG_OTGHSPHYCR register using the new property
  clock-reference. The selection directly depends on the value on OTGHSSEL (OTG_HS PHY kernel
  clock source selection) located in the RCC_CCIPR2 register.

SPI
===

* The macros :c:macro:`SPI_CS_CONTROL_INIT` :c:macro:`SPI_CS_CONTROL_INIT_INST`,
  :c:macro:`SPI_CONFIG_DT`, :c:macro:`SPI_CONFIG_DT_INST`, :c:macro:`SPI_DT_SPEC_GET`,
  and :c:macro:`SPI_DT_SPEC_INST_GET` have been changed so that they do not need to be
  provided a delay parameter anymore. This is because the timing parameters of a SPI peripheral
  chip select should now be specified in DT with the
  ``spi-cs-setup-delay-ns`` and ``spi-cs-hold-delay-ns`` properties.
  (:github:`87427`).

Sensors
=======

* Nodes with compatible property :dtcompatible:`invensense,icm42688` now additionally need to also
  include :dtcompatible:`invensense,icm4268x` in order to work.

Stepper
=======

* :dtcompatible:`zephyr,gpio-stepper` has been replaced by :dtcompatible:`zephyr,h-bridge-stepper`.

USB
===

* The USB Video Class was configuring the framerate and format of the source video device.
  This is now to be done by the application after the host selected the format (:github:`93192`).

.. zephyr-keep-sorted-stop

Bluetooth
*********

* :c:struct:`bt_le_cs_test_param` and :c:struct:`bt_le_cs_create_config_params` now require
  providing both the main and sub mode as a single parameter.
* :c:struct:`bt_conn_le_cs_config` now reports both the main and sub mode as a single parameter.
* :c:struct:`bt_conn_le_cs_main_mode` and :c:struct:`bt_conn_le_cs_sub_mode` have been replaced
  with :c:struct:`bt_conn_le_cs_mode`.

Bluetooth Controller
====================

* The following have been renamed:

  * :kconfig:option:`CONFIG_BT_CTRL_ADV_ADI_IN_SCAN_RSP` to
    :kconfig:option:`CONFIG_BT_CTLR_ADV_ADI_IN_SCAN_RSP`
  * :c:struct:`bt_hci_vs_fata_error_cpu_data_cortex_m` to
    :c:struct:`bt_hci_vs_fatal_error_cpu_data_cortex_m` and now contains the program counter
    value.

.. zephyr-keep-sorted-start re(^\w)

Bluetooth Audio
===============

* :c:struct:`bt_audio_codec_cfg` now requires setting the target latency and target PHY explicitly,
  rather than always setting the target latency to "Balanced" and the target PHY to LE 2M.
  To keep current functionality, set the ``target_latency`` to
  :c:enumerator:`BT_AUDIO_CODEC_CFG_TARGET_LATENCY_BALANCED` and ``target_phy`` to
  :c:enumerator:`BT_AUDIO_CODEC_CFG_TARGET_PHY_2M`.
  The :c:macro:`BT_AUDIO_CODEC_CFG` macro defaults to these values.
  (:github:`93825`)
* Setting the BGS role for GMAP now requires also supporting and implementing the
  :kconfig:option:`CONFIG_BT_BAP_BROADCAST_ASSISTANT`.
  See the :zephyr:code-sample:`bluetooth_bap_broadcast_assistant` sample as a reference.
* The BAP Scan Delegator will no longer automatically update the PA sync state, and
  :c:func:`bt_bap_scan_delegator_set_pa_state` must be used to update the state. If the
  BAP Scan Delegator is used together with the BAP Broadcast Sink, then the PA state of the
  receive state of a :c:struct:`bt_bap_broadcast_sink` will still be automatically updated when the
  PA state changes. (:github:`95453`)


.. zephyr-keep-sorted-stop

Bluetooth HCI
=============

* The deprecated ``ipm`` value was removed from ``bt-hci-bus`` Devicetree property.
  ``ipc`` should be used instead.

Bluetooth Mesh
==============

* Kconfigs ``CONFIG_BT_MESH_USES_MBEDTLS_PSA`` and ``CONFIG_BT_MESH_USES_TFM_PSA`` have
  been removed. The selection of the PSA Crypto provider is now automatically controlled
  by Kconfig :kconfig:option:`CONFIG_PSA_CRYPTO`.

Bluetooth Host
==============

* :kconfig:option:`CONFIG_BT_FIXED_PASSKEY` has been deprecated. Instead, the application can
  provide passkeys for pairing using the :c:member:`bt_conn_auth_cb.app_passkey` callback, which is
  available when :kconfig:option:`CONFIG_BT_APP_PASSKEY` is enabled. The application can return the
  passkey for pairing, or :c:macro:`BT_PASSKEY_RAND` for the Host to generate a random passkey
  instead.

Power management
****************

* :kconfig:option:`CONFIG_PM_S2RAM` and :kconfig:option:`PM_S2RAM_CUSTOM_MARKING` have been
  refactored to be automatically managed by SoCs and the Devicetree. Applications shall no
  longer enable them directly, instead, enable or disable the "suspend-to-ram" power states
  in the Devicetree.

* For the NXP RW61x, the Devicetree property ``exit-latency-us`` has been updated to reflect more
  accurate, measured wake-up times. For applications utilizing Standby mode (PM3), this update and
  an increase to the ``min-residency-us`` Devicetree property may influence how the system
  transitions between power modes. In some cases, this could lead to changes in power consumption.

Networking
**********

* The HTTP server now respects the configured ``_config`` value. Check that
  you provide applicable value to :c:macro:`HTTP_SERVICE_DEFINE_EMPTY`,
  :c:macro:`HTTPS_SERVICE_DEFINE_EMPTY`, :c:macro:`HTTP_SERVICE_DEFINE` and
  :c:macro:`HTTPS_SERVICE_DEFINE`.

* The size of socket address length type :c:type:`socklen_t` has changed. It is now defined to
  be always 32 bit ``uint32_t`` in order to be aligned with Linux. Previously it was defined as
  ``size_t`` which meant that the size could be either 32 bit or 64 bit depending on system
  configuration.

* :c:func:`net_icmp_init_ctx` API has changed, it now accepts an additional ``family`` argument
  to indicate what packet family the context should work with. For ICMPv4 contexts, use ``AF_INET``,
  for ICMPv6 contexts use ``AF_INET6``.

.. zephyr-keep-sorted-start re(^\w)

CoAP
====

* The :c:type:`coap_client_response_cb_t` signature has changed. The list of arguments
  is passed as a :c:struct:`coap_client_response_data` pointer instead.

* The :c:struct:`coap_client_request` has changed to improve the library's resilience against
  misconfiguration (i.e. using transient pointers within the struct):

  * The :c:member:`coap_client_request.path` is now a ``char`` array instead of a pointer.
    The array size is configurable with :kconfig:option:`CONFIG_COAP_CLIENT_MAX_PATH_LENGTH`.
  * The :c:member:`coap_client_request.options` is now a :c:struct:`coap_client_option` array
    instead of a pointer. The array size is configurable with
    :kconfig:option:`CONFIG_COAP_CLIENT_MAX_EXTRA_OPTIONS`.

.. zephyr-keep-sorted-stop

Modem
*****

* ``CONFIG_MODEM_AT_SHELL_USER_PIPE`` has been renamed to :kconfig:option:`CONFIG_MODEM_AT_USER_PIPE`.
* ``CONFIG_MODEM_CMUX_WORK_BUFFER_SIZE`` has been updated to :kconfig:option:`CONFIG_MODEM_CMUX_WORK_BUFFER_SIZE_EXTRA`,
  which only takes the number of extra bytes desired over the default of (:kconfig:option:`CONFIG_MODEM_CMUX_MTU` + 7).

Display
*******

* The RGB565 and BGR565 pixel formats were used interchangeably in the display sample.
  This has now been fixed. Boards and applications that were tested or developed based on the
  previous sample may be affected by this change (see :github:`79996` for more information).

* SSD1363's properties using 'greyscale' now use 'grayscale'.

PTP Clock
*********

* The doc of :c:func:`ptp_clock_rate_adjust` API didn't provide proper and clear function description.
  Drivers implemented it to adjust rate ratio relative to the current frequency.
  Now PI servo is introduced in both PTP and gPTP, and this API function is changed to use for rate
  ratio adjusting based on nominal frequency. Drivers implementing :c:func:`ptp_clock_rate_adjust`
  should be adjusted to account for the new behavior.

Video
*****

* The ``min_line_count`` and ``max_line_count`` fields have been removed from :c:struct:`video_caps`.
  Application should base on the new :c:member:`video_format.size` to allocate buffers.

Other subsystems
****************

.. zephyr-keep-sorted-start re(^\w)

Cellular
========

 * :c:enum:`cellular_access_technology` values have been redefined to align with 3GPP TS 27.007.
 * :c:enum:`cellular_registration_status` values have been extended to align with 3GPP TS 27.007.

Crypto
======

* Hashing operations now require a constant input in the :c:struct:`hash_pkt`.
  This shouldn't affect any existing code, unless an out-of-tree hashing backend actually
  performs that operation in-place (see :github:`94218`)

Flash Map
=========

* With the long-term goal of transitioning to PSA Crypto API as the only crypto support in Zephyr,
  :kconfig:option:`FLASH_AREA_CHECK_INTEGRITY_MBEDTLS` is deprecated.
  :kconfig:option:`FLASH_AREA_CHECK_INTEGRITY_PSA` is now the default choice: if TF-M is not
  enabled or not supported by the platform, Mbed TLS will be used as PSA Crypto API provider.

Logging
=======

* The UART dictionary log parsing script
  :zephyr_file:`scripts/logging/dictionary/log_parser_uart.py` has been deprecated. Instead, the
  more generic script of :zephyr_file:`scripts/logging/dictionary/live_log_parser.py` should be
  used. The new script supports the same functionality (and more), but requires different command
  line arguments when invoked.

MCUmgr
======

* The :ref:`OS mgmt<mcumgr_smp_group_0>` :ref:`mcumgr_os_application_info` command's response for
  hardware platform has been updated to output the board target instead of the board and board
  revision, which now includes the SoC and board variant. The old behaviour has been deprecated,
  but can still be used by enabling
  :kconfig:option:`CONFIG_MCUMGR_GRP_OS_INFO_HARDWARE_INFO_SHORT_HARDWARE_PLATFORM`.

* Support for legacy Mbed TLS hash crypto is removed and only PSA Crypto API is used.
  :kconfig:option:`CONFIG_MCUMGR_GRP_FS_HASH_SHA256` automatically enables Mbed TLS and its
  PSA Crypto implementation if TF-M is not enabled in the build.

Mbed TLS
========

* In order to improve the 1:1 matching between Zephyr Kconfig and Mbed TLS build symbols, the
  following Kconfigs were renamed:

  * :kconfig:option:`CONFIG_MBEDTLS_MD` -> :kconfig:option:`CONFIG_MBEDTLS_MD_C`
  * :kconfig:option:`CONFIG_MBEDTLS_LMS` -> :kconfig:option:`CONFIG_MBEDTLS_LMS_C`
  * :kconfig:option:`CONFIG_MBEDTLS_TLS_VERSION_1_2` -> :kconfig:option:`CONFIG_MBEDTLS_SSL_PROTO_TLS1_2`
  * :kconfig:option:`CONFIG_MBEDTLS_DTLS` -> :kconfig:option:`CONFIG_MBEDTLS_SSL_PROTO_DTLS`
  * :kconfig:option:`CONFIG_MBEDTLS_TLS_VERSION_1_3` -> :kconfig:option:`CONFIG_MBEDTLS_SSL_PROTO_TLS1_3`
  * :kconfig:option:`CONFIG_MBEDTLS_TLS_SESSION_TICKETS` -> :kconfig:option:`CONFIG_MBEDTLS_SSL_SESSION_TICKETS`
  * :kconfig:option:`CONFIG_MBEDTLS_CTR_DRBG_ENABLED` -> :kconfig:option:`CONFIG_MBEDTLS_CTR_DRBG_C`
  * :kconfig:option:`CONFIG_MBEDTLS_HMAC_DRBG_ENABLED` -> :kconfig:option:`CONFIG_MBEDTLS_HMAC_DRBG_C`

RTIO
====

* Callback operations now take an additional argument corresponding to the result code of the first
  error in the chain.
* Callback operations are always called regardless of success/error status of previous submissions
  in the chain.

Secure storage
==============

* The size of :c:type:`psa_storage_uid_t`, used to identify storage entries, was changed from 64 to
  30 bits.
  This change breaks backward compatibility with previously stored entries for which authentication
  will start failing.
  Enable :kconfig:option:`CONFIG_SECURE_STORAGE_64_BIT_UID` if you are updating an existing
  installation from an earlier version of Zephyr and want to keep the pre-existing entries.
  (:github:`94171`)

Shell
=====

* The MQTT topics related to :kconfig:option:`SHELL_BACKEND_MQTT` have been renamed. Renamed
  ``<device_id>_rx`` to ``<device_id>/sh/rx`` and ``<device_id>_tx`` to ``<device_id>/sh/tx``. The
  part after the ``<device_id>`` is now configurable via :kconfig:option:`SHELL_MQTT_TOPIC_RX_ID`
  and :kconfig:option:`SHELL_MQTT_TOPIC_TX_ID`. This allows keeping the previous topics for backward
  compatibility.
  (:github:`92677`).

UpdateHub
=========

* Legacy Mbed TLS as an option for crypto support has been removed and PSA Crypto is now used in all
  cases. :kconfig:option:`CONFIG_UPDATEHUB` will automatically enable the Mbed TLS implementation of
  PSA Crypto if TF-M is not enabled in the build.

.. zephyr-keep-sorted-stop

Modules
*******

* The TinyCrypt library was removed as the upstream version is no longer maintained.
  PSA Crypto API is now the recommended cryptographic library for Zephyr.

MCUboot
=======

* The default operating mode for MCUboot has been changed to swap using offset, this provides
  faster swap updates, needs less overhead, and reduces the flash endurance cycles required to
  perform an update, the previous default was swap using move. If a board was optimised for swap
  using move by having a primary slot that was one sector larger than the secondary then this
  needs to change to have the secondary slot one sector larger than the primary (for optimised
  usage, it is still supported to have both slots the same number of sectors). Alternatively, the
  previous swap using move mode can be selected in sysbuild by using
  :kconfig:option:`SB_CONFIG_MCUBOOT_MODE_SWAP_USING_MOVE`.

Silabs
======

* Aligned the name of the Rail options with the other SiSDK related options:

  * :kconfig:option:`CONFIG_RAIL_PA_CURVE_HEADER` to
    :kconfig:option:`CONFIG_SILABS_SISDK_RAIL_PA_CURVE_HEADER`
  * :kconfig:option:`CONFIG_RAIL_PA_CURVE_TYPES_HEADER` to
    :kconfig:option:`CONFIG_SILABS_SISDK_RAIL_PA_CURVE_TYPES_HEADER`
  * :kconfig:option:`CONFIG_RAIL_PA_ENABLE_CALIBRATION` to
    :kconfig:option:`CONFIG_SILABS_SISDK_RAIL_PA_ENABLE_CALIBRATION`

* Fixed name of the :kconfig:option:`CONFIG_SOC_*`. These options contained PART_NUMBER in their
  while they shouldn't.

* The separate ``em3`` power state was removed from Series 2 SoCs. The system automatically
  transitions to EM2 or EM3 depending on hardware peripheral requests for the oscillators.

LVGL
====

* The PIXEL_FORMAT_MONO10 and PIXEL_FORMAT_MONO01 formats were swapped
  in :zephyr_file:`modules/lvgl/lvgl_display_mono.c`, which caused
  black and white to be inverted when using LVGL with monochrome displays.
  This issue has now been fixed. Any workarounds previously applied to achieve the expected
  behavior should be removed, otherwise black and white will be inverted again.

LED Strip
=========

* Renamed ``arduino,modulino-smartleds`` to :dtcompatible:`arduino,modulino-pixels`

Trusted Firmware-M
==================

* The signing process for BL2 (MCUboot) was updated. The boards that run using
  TF-M NS and require BL2 must have their flash layout with the flash controller
  information. This will ensure that when signing the hex/bin files all the
  details will be present in the S and NS images. The image now has the details
  to allow the FWU state machine to be correct and allow FOTA.
  (:github:`94470`)

  * The ``--align`` parameter was fixed to 1. Now, it's set to the flash DT ``write_block_size``
    property, but still provides 1 as a fallback for specific vendors.
  * The ``--max-sectors`` value is now calculated based on the number of images, taking into
    consideration the largest image size.
  * The ``--confirm`` option now confirms both S and NS HEX images, ensuring that any image
    that runs is valid for production and development.
  * S and NS BIN images are now available. These are the correct images to be used in FOTA. Note
    that S and NS images are unconfirmed by default, and the application is responsible for
    confirming them with ``psa_fwu_accept()``. Otherwise, the images will roll back on the next
    reboot.

* A compatibility issue was identified in the TF-M attestation procedure introduced
  after the TF-M v2.1.0 release. As a result, systems using TF-M v2.1 cannot be
  upgraded to any later TF-M version without encountering failures.
  This limitation affects Zephyr versions using TF-M v2.1.0 through v2.1.2, specifically,
  Zephyr v3.7 through v4.2, preventing seamless upgrades between these releases.
  The issue was resolved in mainline TF-M as of October 25 and the fix is included
  in Zephyr v4.3.0. Users are advised to migrate directly from any earlier Zephyr
  release to Zephyr v4.3.0 or later to ensure full TF-M attestation functionality
  and upgrade compatibility.
  (:github:`94859`)

* Support for automatically downloading MCUboot and ethos by CMake in a build has been removed,
  the in-tree versions of these modules will be used instead. To use custom versions, create a
  :ref:`west manifest <west-manifest-files>` which pulls in the desired versions of these
  repositories instead.
