1:orphan:
2
3..
4  See
5  https://docs.zephyrproject.org/latest/releases/index.html#migration-guides
6  for details of what is supposed to go into this document.
7
8.. _migration_4.1:
9
10Migration guide to Zephyr v4.1.0
11################################
12
13This document describes the changes required when migrating your application from Zephyr v4.0.0 to
14Zephyr v4.1.0.
15
16Any other changes (not directly related to migrating applications) can be found in
17the :ref:`release notes<zephyr_4.1>`.
18
19.. contents::
20    :local:
21    :depth: 2
22
23Build System
24************
25
26* Support for the build type feature which was deprecated in Zephyr 3.6 has been removed,
27  :ref:`application-file-suffixes`/:ref:`sysbuild_file_suffixes` has replaced this.
28
29* Sysbuild
30
31  * The Kconfig ``SB_CONFIG_MCUBOOT_MODE_SWAP_WITHOUT_SCRATCH`` has been deprecated and replaced
32    with ``SB_CONFIG_MCUBOOT_MODE_SWAP_USING_MOVE``, applications should be updated to select this
33    new symbol if they were selecting the old symbol.
34
35BOSSA Runner
36============
37
38The ``bossac`` runner has been changed to no longer do a full erase by default when flashing. To
39perform a full erase, pass the ``--erase`` option when executing ``west flash``.
40
41Kernel
42******
43
44
45k_pipe API
46==========
47
48The k_pipe API has been reworked and the API used in ``CONFIG_PIPES`` is now deprecated.
49The k_pipe API is enabled by default when ``CONFIG_MULTITHREADING`` is set.
50Function renames and modifications:
51
52.. list-table::
53   :header-rows: 1
54
55   * - Old API
56     - New API
57     - Changes
58   * - ``k_pipe_put(..)``
59     - ``k_pipe_write(..)``
60     - Removed ``min_xfer`` parameter (partial transfers based on thresholds are no longer supported)
61       ``bytes_written`` is now the return value
62   * - ``k_pipe_get(..)``
63     - ``k_pipe_read(..)``
64     - Removed ``min_xfer`` parameter (partial transfers based on thresholds are no longer supported)
65       ``bytes_read`` is now the return value
66   * - ``k_pipe_flush(..)`` & ``k_pipe_buffer_flush(..)``
67     - ``k_pipe_reset(..)``
68     - Reset the pipe, discarding all data in the pipe, non blocking.
69   * - ``k_pipe_alloc_init(..)``, ``k_pipe_cleanup(..)``
70     - **Removed**
71     - Dynamic allocation of pipes is no longer supported
72   * - ``k_pipe_read_avail(..)``, ``k_pipe_write_avail(..)``
73     - **Removed**
74     - Querying the number of bytes in the pipe is no longer supported
75   * - None
76     - ``k_pipe_close(..)``
77     - Close a pipe, waking up all pending readers and writers with an error code. No further
78       reading or writing is allowed on the pipe. The pipe can be re-opened by calling
79       ``k_pipe_init(..)`` again. **Note**, all data in the pipe is available to readers until the
80       pipe is emptied.
81
82
83Security
84********
85
86* New options for stack canaries have been added, providing users with finer control over stack
87  protection. With this change, :kconfig:option:`CONFIG_STACK_CANARIES` no longer enables the
88  compiler option ``-fstack-protector-all``. Users who wish to use this option must now enable
89  :kconfig:option:`CONFIG_STACK_CANARIES_ALL`.
90
91Boards
92******
93
94* Shield ``mikroe_weather_click`` now supports both I2C and SPI interfaces. Users should select
95  the required configuration by using ``mikroe_weather_click_i2c`` or ``mikroe_weather_click_spi``
96  instead of ``mikroe_weather_click``.
97
98* All nRF52-based boards will now default to soft (system) reset
99  instead of pin reset when flashing with ``west flash``. If you want to keep
100  using pin reset on the nRF52 family of ICs you can use ``west flash --pinreset``.
101
102* Erasing the external memory when programming a new firmware image with ``west
103  flash`` on the nRF52 and nRF53 series now always correctly honors the
104  ``--erase`` flag (and its absence) both when using the ``nrfjprog`` and
105  ``nrfutil`` backends.  Prior to this release, the ``nrjfprog`` backend would
106  always erase only the sectors of the external flash used by the new firmware,
107  and the ``nrfutil`` one would always erase the whole external flash.
108
109* CAN1 and USART1 have been disabled on the ``stm32f4_disco``, because of
110  conflicting pinctrl on I2C1, which is now used to control the audio codec
111  connected to the audio jack output.
112
113Devicetree
114**********
115
116* The :dtcompatible:`microchip,cap1203` driver has changed its compatible to
117  :dtcompatible:`microchip,cap12xx` and has been updated to support multiple
118  channels.
119  The number of available channels is derived from the length of the devicetree
120  array property ``input-codes``.
121  The :kconfig:option:`CONFIG_INPUT_CAP1203_POLL` has been removed:
122  If the devicetree property ``int-gpios`` is present, interrupt mode is used
123  otherwise, polling is used.
124  The :kconfig:option:`CONFIG_INPUT_CAP1203_PERIOD` has been replaced with
125  the devicetree property ``poll-interval-ms``.
126  In interrupt mode, the devicetree property ``repeat`` is supported.
127
128Raspberry Pi
129============
130
131* ``CONFIG_SOC_SERIES_RP2XXX`` is renamed to :kconfig:option:`CONFIG_SOC_SERIES_RP2040`.
132
133STM32
134=====
135
136* MCO clock source and prescaler are now exclusively configured by the DTS
137  as it was introduced earlier.
138  The Kconfig method for configuration is now removed.
139
140* ADC properties ``st,adc-sequencer`` and ``st,adc-clock-source`` now uses
141  string values instead of integer values.
142
143Modules
144*******
145
146Mbed TLS
147========
148
149* If a platform has a CSPRNG source available (i.e. :kconfig:option:`CONFIG_CSPRNG_ENABLED`
150  is set), then the Kconfig option :kconfig:option:`CONFIG_MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG`
151  is the default choice for random number source instead of
152  :kconfig:option:`CONFIG_MBEDTLS_PSA_CRYPTO_LEGACY_RNG`. This helps in reducing
153  ROM/RAM footprint of the Mbed TLS library.
154
155* The newly-added Kconfig option :kconfig:option:`CONFIG_MBEDTLS_PSA_KEY_SLOT_COUNT`
156  allows to specify the number of key slots available in the PSA Crypto core.
157  Previously this value was not explicitly set, so Mbed TLS's default value of
158  32 was used. The new Kconfig option defaults to 16 instead in order to find
159  a reasonable compromise between RAM consumption and most common use cases.
160  It can be further trimmed down to reduce RAM consumption if the final
161  application doesn't need that many key slots simultaneously.
162
163Trusted Firmware-M
164==================
165
166LVGL
167====
168
169* The config option :kconfig:option:`CONFIG_LV_Z_FLUSH_THREAD_PRIO` is now called
170  :kconfig:option:`CONFIG_LV_Z_FLUSH_THREAD_PRIORITY` and its value is now interpreted as an
171  absolute priority instead of a cooperative one.
172
173* The config option :kconfig:option:`CONFIG_LV_Z_VBD_CUSTOM_SECTION` is now called
174  :kconfig:option:`CONFIG_LV_Z_VDB_CUSTOM_SECTION`.
175
176Device Drivers and Devicetree
177*****************************
178
179* Device driver APIs are placed into iterable sections (:github:`71773` and :github:`82102`) to
180  allow for runtime checking. See :ref:`device_driver_api` for more details.
181  The :c:macro:`DEVICE_API()` macro should be used by out-of-tree driver implementations for
182  all the upstream driver classes.
183
184ADC
185===
186
187* Renamed the ``compatible`` from ``nxp,kinetis-adc12`` to :dtcompatible:`nxp,adc12`.
188
189Clock
190=====
191* Renamed the devicetree property ``freqs_mhz`` to ``freqs-mhz``.
192* Renamed the devicetree property ``cg_reg`` to ``cg-reg``.
193* Renamed the devicetree property ``pll_ctrl_reg`` to ``pll-ctrl-reg``.
194
195Counter
196=======
197
198* Renamed the devicetree property ``primary_source`` to ``primary-source``.
199* Renamed the devicetree property ``secondary_source`` to ``secondary-source``.
200* Renamed the devicetree property ``filter_count`` to ``filter-count``.
201* Renamed the devicetree property ``filter_period`` to ``filter-period``.
202
203Controller Area Network (CAN)
204=============================
205
206* Renamed the :dtcompatible:`infineon,xmc4xxx-can-node` devicetree property ``clock_div8`` to
207  ``clock-div8`` (:github:`83782`).
208
209Display
210=======
211
212* Displays using the MIPI DBI driver which set their MIPI DBI mode via the
213  ``mipi-mode`` property in devicetree should now use a string property of
214  the same name, like so:
215
216  .. code-block:: devicetree
217
218    /* Legacy display definition */
219
220    st7735r: st7735r@0 {
221        ...
222        mipi-mode = <MIPI_DBI_MODE_SPI_4WIRE>;
223        ...
224    };
225
226    /* New display definition */
227
228    st7735r: st7735r@0 {
229        ...
230        mipi-mode = "MIPI_DBI_MODE_SPI_4WIRE";
231        ...
232    };
233
234* Renamed the devicetree propertys ``pclk_pol`` and ``data_cmd-gpios``
235  to ``pclk-pol`` and ``data-cmd-gpios``.
236
237DAC
238===
239
240* Renamed the devicetree properties ``voltage_reference`` and ``power_down_mode``
241  to ``voltage-reference`` and ``power-down-mode``.
242
243Enhanced Serial Peripheral Interface (eSPI)
244===========================================
245
246Entropy
247=======
248
249* BT HCI based entropy driver now directly sends the HCI command to parse random
250  data instead of waiting for BT connection to be ready. This is helpful on
251  platforms where the BT controller owns the HW random generator and the application
252  processor needs to get random data before BT is fully enabled.
253  (:github:`79931`)
254
255Ethernet
256========
257
258* Deprecated eth_mcux driver was removed.
259* Silabs gecko ethernet changes:
260
261  * Renamed the devicetree property ``location-phy_mdc`` to ``location-phy-mdc``.
262  * Renamed the devicetree property ``location-phy_mdio`` to ``location-phy-mdio``.
263  * Renamed the devicetree property ``location-rmii_refclk`` to ``location-phy-refclk``.
264  * Renamed the devicetree property ``location-rmii_crs_dv`` to ``location-phy-crs-dv``.
265  * Renamed the devicetree property ``location-rmii_txd0`` to ``location-phy-txd0``.
266  * Renamed the devicetree property ``location-rmii_txd1`` to ``location-phy-txd1``.
267  * Renamed the devicetree property ``location-rmii_tx_en`` to ``location-phy-tx-en``.
268  * Renamed the devicetree property ``location-rmii_rxd0`` to ``location-phy-rxd0``.
269  * Renamed the devicetree property ``location-rmii_rxd1`` to ``location-phy-rxd1``.
270  * Renamed the devicetree property ``location-rmii_rx_er`` to ``location-phy-rx-er``.
271  * Renamed the devicetree property ``location-phy_pwr_enable`` to ``location-phy-pwr-enable``.
272  * Renamed the devicetree property ``location-phy_reset`` to ``location-phy-reset``.
273  * Renamed the devicetree property ``location-phy_interrupt`` to ``location-phy-interrupt``.
274
275GNSS
276====
277
278GPIO
279====
280
281* Renamed the device tree property ``pin_mask`` to ``pin-mask``.
282* Renamed the device tree property ``pinmux_mask`` to ``pinmux-mask``.
283* Renamed the device tree property ``vbatts_pins`` to ``vbatts-pins``.
284* Renamed the device tree property ``bit_per_gpio`` to ``bit-per-gpio``.
285* Renamed the device tree property ``off_val`` to ``off-val``.
286* Renamed the device tree property ``on_val`` to ``on-val``.
287* Renamed the ``compatible`` from ``ti,ads114s0x-gpio`` to :dtcompatible:`ti,ads1x4s0x-gpio`.
288
289HWSPINLOCK
290==========
291
292* Renamed the DeviceTree property ``num_locks`` to ``num-locks``.
293
294I2C
295===
296
297* Renamed the ``compatible`` from ``nxp,imx-lpi2c`` to :dtcompatible:`nxp,lpi2c`.
298* Renamed the device tree property ``port_sel`` to ``port-sel```.
299
300I2S
301===
302
303* Renamed the device tree property from ``fifo_depth`` to ``fifo-depth``.
304
305Input
306=====
307
308LED
309===
310
311* Renamed the device tree property ``max_curr_opt`` to ``max-curr-opt``.`
312
313PWM
314===
315
316* Renamed the ``compatible`` from ``renesas,ra8-pwm`` to :dtcompatible:`renesas,ra-pwm`.
317
318Interrupt Controller
319====================
320
321LED Strip
322=========
323
324Misc
325====
326
327* All the functions in the ft8xx driver take an additional ``const struct *device`` parameter
328  to allow for multiple instances of the driver.
329
330  The exception to this is the functions and macros defined in the
331  :zephyr_file:`include/zephyr/drivers/misc/ft8xx/ft8xx_reference_api.h` file, which translate the
332  API to a single-instance model, compatible with the API defined in the FT8xx programming guide.
333  These functions have not been modified.
334
335* The :c:func:`ft8xx_register_int` function now takes an additional ``void *user_data`` parameter
336  to allow user-defined data to be passed to the interrupt handler.
337  Additionally, the signature of the ft8xx interrupt handler has changed to include the
338  ``void *user_data`` parameter.
339
340MMU/MPU
341=======
342
343* Renamed the ``compatible`` from ``nxp,kinetis-mpu`` to :dtcompatible:`nxp,sysmpu` and added
344  its corresponding binding.
345* Renamed the Kconfig option ``CPU_HAS_NXP_MPU`` to :kconfig:option:`CPU_HAS_NXP_SYSMPU`.
346
347Pin Control
348===========
349
350  * Renamed the ``compatible`` from ``nxp,kinetis-pinctrl`` to :dtcompatible:`nxp,port-pinctrl`.
351  * Renamed the ``compatible`` from ``nxp,kinetis-pinmux`` to :dtcompatible:`nxp,port-pinmux`.
352  * Silabs Series 2 devices now use a new pinctrl driver selected by
353    :dtcompatible:`silabs,dbus-pinctrl`. This driver allows the configuration of GPIO properties
354    through device tree, rather than having them hard-coded for each supported signal. It also
355    supports all possible digital bus signals by including a binding header such as
356    :zephyr_file:`include/zephyr/dt-bindings/pinctrl/silabs/xg24-pinctrl.h`.
357
358    Pinctrl should now be configured like this:
359
360    .. code-block:: devicetree
361
362      #include <dt-bindings/pinctrl/silabs/xg24-pinctrl.h>
363
364      &pinctrl {
365        i2c0_default: i2c0_default {
366          group0 {
367            /* Pin selection(s) using bindings included above */
368            pins = <I2C0_SDA_PD2>, <I2C0_SCL_PD3>;
369            /* Shared properties for the group of pins */
370            drive-open-drain;
371            bias-pull-up;
372          };
373        };
374      };
375
376
377PWM
378===
379
380* Renamed the ``compatible`` from ``nxp,kinetis-ftm-pwm`` to :dtcompatible:`nxp,ftm-pwm`.
381
382SDHC
383====
384
385* Renamed the device tree property from ``power_delay_ms`` to ``power-delay-ms```
386* Renamed the device tree property from ``max_current_330`` to ``max-current-330``
387
388Sensors
389=======
390
391  * The :dtcompatible:`we,wsen-pads` driver has been renamed to
392    :dtcompatible:`we,wsen-pads-2511020213301`.
393    The Device Tree can be configured as follows:
394
395    .. code-block:: devicetree
396
397      &i2c0 {
398        pads:pads-2511020213301@5d {
399          compatible = "we,wsen-pads-2511020213301";
400          reg = <0x5d>;
401          odr = < 10 >;
402          interrupt-gpios = <&gpio1 1 GPIO_ACTIVE_HIGH>;
403        };
404      };
405
406  * The :dtcompatible:`we,wsen-pdus` driver has been renamed to
407    :dtcompatible:`we,wsen-pdus-25131308XXXXX`.
408    The Device Tree can be configured as follows:
409
410    .. code-block:: devicetree
411
412      &i2c0 {
413        pdus:pdus-25131308XXXXX@78 {
414          compatible = "we,wsen-pdus-25131308XXXXX";
415          reg = < 0x78 >;
416          sensor-type = < 4 >;
417        };
418      };
419
420  * The :dtcompatible:`we,wsen-tids` driver has been renamed to
421    :dtcompatible:`we,wsen-tids-2521020222501`.
422    The Device Tree can be configured as follows:
423
424    .. code-block:: devicetree
425
426      &i2c0 {
427        tids:tids-2521020222501@3F {
428          compatible = "we,wsen-tids-2521020222501";
429          reg = < 0x3F >;
430          odr = < 25 >;
431          interrupt-gpios = <&gpio1 1 GPIO_ACTIVE_LOW>;
432        };
433      };
434
435  * The :dtcompatible:`invensense,icp10125` driver has been renamed to
436    :dtcompatible:`invensense,icp101xx`.
437    The Device Tree can be configured as follows:
438
439    .. code-block:: devicetree
440
441      &i2c0 {
442        icp101xx:icp101xx@63 {
443           compatible = "invensense,icp101xx";
444           reg = <0x63>;
445        };
446      };
447
448Serial
449======
450
451* Renamed the ``compatible`` from ``nxp,kinetis-lpuart`` to :dtcompatible:`nxp,lpuart`.
452* Silabs Usart driver has been split for Series 2 :dtcompatible:`silabs,usart-uart`
453  and  Series 0/1 ``silabs,gecko-usart``
454
455Stepper
456=======
457
458  * Renamed the ``compatible`` from ``zephyr,gpio-steppers`` to :dtcompatible:`zephyr,gpio-stepper`.
459  * Renamed the ``stepper_set_actual_position`` function to :c:func:`stepper_set_reference_position`.
460  * Renamed the ``stepper_enable_constant_velocity_mode`` function to :c:func:`stepper_run`.
461    The function does not take a velocity parameter anymore. Set the desired speed using the
462    :c:func:`stepper_set_microstep_interval` function beforehand.
463  * Renamed the ``stepper_move`` function to :c:func:`stepper_move_by`.
464  * Renamed the ``stepper_set_target_position`` function to :c:func:`stepper_move_to`.
465  * Renamed the ``stepper_set_max_velocity`` function to :c:func:`stepper_set_microstep_interval`.
466    The function now takes the step interval in nanoseconds. This allows for a more precise control.
467  * Deprecating setting max velocity via :c:func:`stepper_run`.
468  * The :kconfig:option:`STEPPER_ADI_TMC_RAMP_GEN` is now deprecated and is replaced with the new
469    :kconfig:option:`STEPPER_ADI_TMC50XX_RAMP_GEN` option.
470  * Renamed tmc5041 stepper driver to tmc50xx.
471  * To control the velocity for :dtcompatible:`adi,tmc50xx` stepper driver, use
472    :c:func:`tmc50xx_stepper_set_max_velocity` or :c:func:`tmc50xx_stepper_set_ramp`.
473  * Renamed the DeviceTree property ``en_spreadcycle`` to ``en-spreadcycle``.
474  * Renamed the DeviceTree property ``i_scale_analog`` to ``i-scale-analog``.
475  * Renamed the DeviceTree property ``index_optw`` to ``index-otpw``.
476  * Renamed the DeviceTree property ``ìndex_step`` to ``index-step``.
477  * Renamed the DeviceTree property ``internal_rsense`` to ``internal-rsense``.
478  * Renamed the DeviceTree property ``lock_gconf`` to ``lock-gconf``.
479  * Renamed the DeviceTree property ``mstep_reg_select`` to ``mstep-reg-select``.
480  * Renamed the DeviceTree property ``pdn_disable`` to ``pdn-disable``.
481  * Renamed the DeviceTree property ``poscmp_enable`` to ``poscmp-enable``.
482  * Renamed the DeviceTree property ``test_mode`` to ``test-mode``.
483
484SPI
485===
486
487* Renamed the ``compatible`` from ``nxp,imx-lpspi`` to :dtcompatible:`nxp,lpspi`.
488* Renamed the ``compatible`` from ``nxp,kinetis-dspi`` to :dtcompatible:`nxp,dspi`.
489* Renamed the ``compatible`` from ``silabs,gecko-spi-usart`` to :dtcompatible:`silabs,usart-spi`.
490* Renamed the ``compatible`` from ``silabs,gecko-spi-eusart`` to :dtcompatible:`silabs,eusart-spi`.
491
492Regulator
493=========
494
495RTC
496===
497
498* Renamed the ``compatible`` from ``nxp,kinetis-rtc`` to :dtcompatible:`nxp,rtc`.
499
500Timer
501=====
502
503* Renamed the ``compatible`` from ``nxp,kinetis-ftm`` to :dtcompatible:`nxp,ftm` and relocate it
504  under ``dts/bindings/timer``.
505* Renamed the device tree property from ``ticks_us`` to ``ticks-us``.
506
507USB
508===
509
510* Renamed the devicetree property names ``phy_handle`` to ``phy-handle``.
511
512Video
513=====
514
515* The :file:`include/zephyr/drivers/video-controls.h` got updated to have video controls IDs (CIDs)
516  matching the definitions in the Linux kernel file ``include/uapi/linux/v4l2-controls.h``.
517  In most cases, removing the category prefix is enough: ``VIDEO_CID_CAMERA_GAIN`` becomes
518  ``VIDEO_CID_GAIN``.
519  The new ``video-controls.h`` source now contains description of each control ID to help
520  disambiguating.
521
522* The ``video_pix_fmt_bpp()`` function was returning a byte count, this got replaced by
523  ``video_bits_per_pixel()`` which return a bit count. For instance, invocations such as
524  ``pitch = width * video_pix_fmt_bpp(pixfmt)`` needs to be replaced by an equivalent
525  ``pitch = width * video_bits_per_pixel(pixfmt) / BITS_PER_BYTE``.
526
527* The :c:func:`video_buffer_alloc` and :c:func:`video_buffer_aligned_alloc` functions in the
528  video API now take an additional timeout parameter.
529
530* The :c:func:`video_stream_start` and :c:func:`video_stream_stop` driver APIs are now merged
531  into the new :c:func:`video_set_stream` driver API. The user APIs are however unchanged to
532  keep backward compatibility with downstream applications.
533
534Watchdog
535========
536
537* Renamed the ``compatible`` from ``nxp,kinetis-wdog32`` to :dtcompatible:`nxp,wdog32`.
538
539Wi-Fi
540=====
541
542* The config options :kconfig:option:`CONFIG_NXP_WIFI_BUILD_ONLY_MODE` and
543  :kconfig:option:`CONFIG_NRF_WIFI_BUILD_ONLY_MODE` are now unified under
544  :kconfig:option:`CONFIG_BUILD_ONLY_NO_BLOBS` making it a common entry point
545  for any vendor to enable builds without blobs.
546
547Bluetooth
548*********
549
550Bluetooth HCI
551=============
552
553* The :kconfig:option:`BT_CTLR` has been deprecated. A new :kconfig:option:`HAS_BT_CTLR` has been
554  introduced which should be selected by the respective link layer Kconfig options (e.g. a
555  HCI driver option, or the one for the upstream controller). It's recommended that all HCI drivers
556  for local link layers select the new option, since that opens up the possibility of indicating
557  build-time support for specific features, which e.g. the host stack can take advantage of.
558
559Bluetooth Mesh
560==============
561
562* Following the beginnig of the deprecation process for the TinyCrypt crypto
563  library, Kconfig symbol :kconfig:option:`CONFIG_BT_MESH_USES_TINYCRYPT` was
564  set as deprecated. Default option for platforms that do not support TF-M
565  is :kconfig:option:`CONFIG_BT_MESH_USES_MBEDTLS_PSA`.
566
567* Mesh key representations are not backward compatible if images are built with TinyCrypt and
568  crypto libraries based on the PSA API. Mesh no longer stores the key values for those crypto
569  libraries. The crypto library stores the keys in the internal trusted storage.
570  If a provisioned device is going to update its image that was built with
571  the :kconfig:option:`CONFIG_BT_MESH_USES_TINYCRYPT` Kconfig option set on an image
572  that was built with :kconfig:option:`CONFIG_BT_MESH_USES_MBEDTLS_PSA` or
573  :kconfig:option:`CONFIG_BT_MESH_USES_TFM_PSA` without erasing the persistent area,
574  it should be unprovisioned first and reprovisioned after update again.
575  If the image is changed over Mesh DFU, use :c:enumerator:`BT_MESH_DFU_EFFECT_UNPROV`.
576
577* Mesh explicitly depends on the Secure Storage subsystem if storing into
578  non-volatile memory (:kconfig:option:`CONFIG_BT_SETTINGS`) is enabled and
579  Mbed TLS library (:kconfig:option:`CONFIG_BT_MESH_USES_MBEDTLS_PSA`) is used.
580  Applications should be built with :kconfig:option:`CONFIG_SECURE_STORAGE` enabled.
581
582Bluetooth Audio
583===============
584
585* The following Kconfig options are not longer automatically enabled by the LE Audio Kconfig
586  options and may need to be enabled manually (:github:`81328`):
587
588    * :kconfig:option:`CONFIG_BT_GATT_CLIENT`
589    * :kconfig:option:`CONFIG_BT_GATT_AUTO_DISCOVER_CCC`
590    * :kconfig:option:`CONFIG_BT_GATT_AUTO_UPDATE_MTU`
591    * :kconfig:option:`CONFIG_BT_EXT_ADV`
592    * :kconfig:option:`CONFIG_BT_PER_ADV_SYNC`
593    * :kconfig:option:`CONFIG_BT_ISO_BROADCASTER`
594    * :kconfig:option:`CONFIG_BT_ISO_SYNC_RECEIVER`
595    * :kconfig:option:`CONFIG_BT_PAC_SNK`
596    * :kconfig:option:`CONFIG_BT_PAC_SRC`
597
598* PACS have been changed to support dynamic, runtime configuration. This means that PACS now has
599  to be registered with :c:func:`bt_pacs_register` before it can be used. In addition,
600  :c:func:`bt_pacs_register` also have to be called before :c:func:`bt_ascs_register` can be
601  be called. All Kconfig options still remain. Runtime configuration cannot override a disabled
602  Kconfig option. (:github:`83730`)
603
604* Several services and service client (AICS, ASCS, CSIP, HAS, MCS, PACS, TBS, VCP and VOCS) now
605  depend on :kconfig:option:`CONFIG_BT_SMP` and may need to be explicitly enabled.
606  (:github:`84994``)
607
608Bluetooth Classic
609=================
610
611Bluetooth Host
612==============
613
614* :kconfig:option:`CONFIG_BT_BUF_ACL_RX_COUNT` has been deprecated. The number of ACL RX buffers is
615  now computed internally and is equal to :kconfig:option:`CONFIG_BT_MAX_CONN` + 1. If an application
616  needs more buffers, it can use the new :kconfig:option:`CONFIG_BT_BUF_ACL_RX_COUNT_EXTRA` to add
617  additional ones.
618
619  e.g. if :kconfig:option:`CONFIG_BT_MAX_CONN` was ``3`` and
620  :kconfig:option:`CONFIG_BT_BUF_ACL_RX_COUNT` was ``7`` then
621  :kconfig:option:`CONFIG_BT_BUF_ACL_RX_COUNT_EXTRA` should be set to ``7 - (3 + 1) = 3``.
622
623  .. warning::
624
625   The default value of :kconfig:option:`CONFIG_BT_BUF_ACL_RX_COUNT` has been set to 0.
626
627* LE legacy pairing is no longer enabled by default since it's not secure. Leaving it enabled
628  makes a device vulnerable for downgrade attacks. If an application still needs to use LE legacy
629  pairing, it should disable :kconfig:option:`CONFIG_BT_SMP_SC_PAIR_ONLY` manually.
630
631* The prompt for :kconfig:option:`CONFIG_BT_ECC` has been removed, since it only offers an internal
632  API, meaning internal users should explicitly select it in their respective Kconfig options.
633
634Bluetooth Crypto
635================
636
637Bluetooth Services
638==================
639
640* The :kconfig:option:`CONFIG_BT_DIS_MODEL` and :kconfig:option:`CONFIG_BT_DIS_MANUF` have been
641  deprecated. Application developers should now use the
642  :kconfig:option:`CONFIG_BT_DIS_MODEL_NUMBER_STR` and
643  :kconfig:option:`CONFIG_BT_DIS_MANUF_NAME_STR` Kconfig options to set the string values in the
644  Model Number String and Manufacturer Name String characteristics that are part of the Device
645  Information Service (DIS).
646
647Networking
648**********
649
650* The Prometheus metric creation has changed as user does not need to have a separate
651  struct :c:struct:`prometheus_metric` any more. This means that the Prometheus macros
652  :c:macro:`PROMETHEUS_COUNTER_DEFINE`, :c:macro:`PROMETHEUS_GAUGE_DEFINE`,
653  :c:macro:`PROMETHEUS_HISTOGRAM_DEFINE` and :c:macro:`PROMETHEUS_SUMMARY_DEFINE`
654  prototypes have changed. (:github:`81712`)
655
656* The default subnet mask on newly added IPv4 addresses is now specified with
657  :kconfig:option:`CONFIG_NET_IPV4_DEFAULT_NETMASK` option instead of being left
658  empty. Applications can still specify a custom netmask for an address with
659  :c:func:`net_if_ipv4_set_netmask_by_addr` function if needed.
660
661* The HTTP server public API function signature for the :c:type:`http_resource_dynamic_cb_t` has
662  changed, the data is now passed in a :c:struct:`http_request_ctx` which holds the data, data
663  length and request header information. Request headers should be accessed via this parameter
664  rather than directly in the :c:struct:`http_client_ctx` to correctly handle concurrent requests
665  on different HTTP/2 streams.
666
667* The HTTP server public API function signature for the :c:type:`http_resource_websocket_cb_t` has
668  changed, a :c:struct:`http_request_ctx` parameter has been added. The application may use this to
669  access the request headers of the HTTP upgrade request, which may be useful in deciding whether
670  to accept or reject a websocket connection.
671
672* An additional ``_res_fallback`` parameter has been added to the :c:macro:`HTTP_SERVICE_DEFINE`
673  and :c:macro:`HTTPS_SERVICE_DEFINE` macros, allowing a fallback resource to be served if no other
674  resources match the requested path. To retain the existing behaviour, ``NULL`` can be passed as the
675  additional parameter.
676
677* The :kconfig:option:`CONFIG_NET_L2_OPENTHREAD` symbol no longer implies the
678  :kconfig:option:`CONFIG_NVS` Kconfig option. Platforms using OpenThread must explicitly enable
679  either the :kconfig:option:`CONFIG_NVS` or :kconfig:option:`CONFIG_ZMS` Kconfig option.
680
681* ``CONFIG_NET_TC_SKIP_FOR_HIGH_PRIO`` was deprecated in favour of
682  :kconfig:option:`CONFIG_NET_TC_TX_SKIP_FOR_HIGH_PRIO` to avoid naming ambiguity.
683
684Other Subsystems
685****************
686
687Flash map
688=========
689
690Filesystem
691==========
692
693* The EXT2 Kconfig symbol ``CONFIG_MAX_FILES`` has been renamed to
694  :kconfig:option:`CONFIG_EXT2_MAX_FILES`.
695
696hawkBit
697=======
698
699* The Kconfig symbols :kconfig:option:`CONFIG_SMF` and
700  :kconfig:option:`CONFIG_SMF_ANCESTOR_SUPPORT` are now required to be enabled to use the
701  hawkBit subsystem.
702
703MCUmgr
704======
705
706* The Kconfig :kconfig:option:`CONFIG_MCUBOOT_BOOTLOADER_MODE_SWAP_WITHOUT_SCRATCH` has been
707  deprecated and replaced with :kconfig:option:`CONFIG_MCUBOOT_BOOTLOADER_MODE_SWAP_USING_MOVE`,
708  applications should be updated to select this new symbol if they were selecting the old symbol.
709
710* The deprecated macro ``MGMT_CB_ERROR_RET`` has been removed.
711
712Modem
713=====
714
715LoRa
716====
717
718* The function :c:func:`lora_recv_async` and callback ``lora_recv_cb`` now include an
719  additional ``user_data`` parameter, which is a void pointer. This parameter can be used to reference
720  any user-defined data structure. To maintain the current behavior, set this parameter to ``NULL``.
721
722Secure Storage
723==============
724
725* Store backends no longer automatically enable their dependencies through ``select`` or ``imply``.
726  Users must ensure that the depencies are enabled in their applications.
727  :kconfig:option:`CONFIG_SECURE_STORAGE_ITS_STORE_IMPLEMENTATION_SETTINGS` previously enabled NVS
728  and settings, which means the NVS settings backend would get used by default if ZMS wasn't
729  enabled. (:github:`86181`)
730
731Stream Flash
732============
733
734* The function :c:func:`stream_flash_init` no longer does auto-detection of device size
735  when ``size`` parameter is set to 0 and will return error in such case. User is now
736  required to explicitly provide device size. Issue :github:`71042` provides rationale
737  for the change.
738
739Architectures
740*************
741
742* native/POSIX
743
744  * :kconfig:option:`CONFIG_NATIVE_APPLICATION` has been deprecated. Out-of-tree boards using this
745    option should migrate to the native_simulator runner (:github:`81232`).
746    For an example of how this was done with a board in-tree check :github:`61481`.
747  * For the native_sim target :kconfig:option:`CONFIG_NATIVE_SIM_NATIVE_POSIX_COMPAT` has been
748    switched to ``n`` by default, and this option has been deprecated. Ensure your code does not
749    use the :kconfig:option:`CONFIG_BOARD_NATIVE_POSIX` option anymore (:github:`81232`).
750
751* x86
752
753  * Kconfigs ``CONFIG_DISABLE_SSBD`` and ``CONFIG_ENABLE_EXTENDED_IBRS`` have been deprecated
754    since v3.7. These were removed.  Use :kconfig:option:`CONFIG_X86_DISABLE_SSBD` and
755    :kconfig:option:`CONFIG_X86_ENABLE_EXTENDED_IBRS` instead.
756