1:orphan:
2
3.. _migration_4.0:
4
5Migration guide to Zephyr v4.0.0
6################################
7
8This document describes the changes required when migrating your application from Zephyr v3.7.0 to
9Zephyr v4.0.0.
10
11Any other changes (not directly related to migrating applications) can be found in
12the :ref:`release notes<zephyr_4.0>`.
13
14.. contents::
15    :local:
16    :depth: 2
17
18Build System
19************
20
21* Removed the ``CONFIG_MCUBOOT_CMAKE_WEST_SIGN_PARAMS`` Kconfig option as ``west sign`` is no
22  longer called by the build system when signing images for MCUboot.
23
24* The imgtool part of ``west sign`` has been deprecated, options to be supplied to imgtool when
25  signing should be set in :kconfig:option:`CONFIG_MCUBOOT_EXTRA_IMGTOOL_ARGS` instead.
26
27Kernel
28******
29
30* Removed the deprecated :kconfig:option:`CONFIG_MP_NUM_CPUS`, application should be updated to use
31  :kconfig:option:`CONFIG_MP_MAX_NUM_CPUS` instead.
32
33Boards
34******
35
36* :ref:`native_posix<native_posix>` has been deprecated in favour of
37  :ref:`native_sim<native_sim>` (:github:`76898`).
38* Nordic nRF53 and nRF91 based boards can use the common devicetree overlays in ``dts/common/nordic``
39  to define default flash and ram partitioning based on TF-M.
40
41* STM32WBA: The command used for fetching blobs required to build ble applications is now
42  ``west blobs fetch hal_stm32`` instead of ``west blobs fetch stm32``.
43
44* Board ``qemu_xtensa`` is deprecated. Use ``qemu_xtensa/dc233c`` instead.
45
46Devicetree
47**********
48
49* The :c:macro:`DT_REG_ADDR` macro and its variants are now expanding into an
50  unsigned literals (i.e. with a ``U`` suffix). To use addresses as devicetree
51  indexes use the :c:macro:`DT_REG_ADDR_RAW` variants.
52* The :c:macro:`DT_REG_SIZE` macro and its variants are also expanding into
53  unsigned literals, no raw variants are provided at this stage.
54
55STM32
56=====
57
58* On all official STM32 boards, ``west flash`` selects STM32CubeProgrammer as the default west runner.
59  If you want to enforce the selection of another runner like OpenOCD or pyOCD for flashing, you should
60  specify it using the west ``--runner`` or ``-r`` option. (:github:`75284`)
61* ADC: Domain clock needs to be explicitly defined if property st,adc-clock-source = <ASYNC> is used.
62
63Modules
64*******
65
66Mbed TLS
67========
68
69* The Kconfig options ``CONFIG_MBEDTLS_TLS_VERSION_1_0`` and ``CONFIG_MBEDTLS_TLS_VERSION_1_1``
70  have been removed because Mbed TLS doesn't support TLS 1.0 and 1.1 anymore since v3.0. (:github:`76833`)
71* The following Kconfig symbols were renamed (:github:`76408`):
72  * ``CONFIG_MBEDTLS_ENTROPY_ENABLED`` is now :kconfig:option:`CONFIG_MBEDTLS_ENTROPY_C`,
73  * ``CONFIG_MBEDTLS_ZEPHYR_ENTROPY`` is now :kconfig:option:`CONFIG_MBEDTLS_ENTROPY_POLL_ZEPHYR`.
74
75* The Kconfig option ``CONFIG_MBEDTLS_SSL_EXPORT_KEYS`` was removed because the
76  corresponding build symbol was removed in Mbed TLS 3.1.0 and is now assumed to
77  be enabled. (:github:`77657`)
78
79TinyCrypt
80=========
81
82Albeit the formal deprecation of TinyCrypt is not started yet, its removal from
83the Zephyr codebase is. Formal deprecation will happen in the next release.
84
85Trusted Firmware-M
86==================
87
88* The security counter used for the hardware rollback protection now comes explicitly from
89  :kconfig:option:`CONFIG_TFM_IMAGE_SECURITY_COUNTER`, instead of being automatically determined from
90  the image version. This has been changed as the implicit counter calculation is incompatible with
91  versions larger than ``0.0.1024`` (:github:`78128`).
92
93LVGL
94====
95
96zcbor
97=====
98
99* Updated the zcbor library to version 0.9.0.
100  Full release notes at https://github.com/NordicSemiconductor/zcbor/blob/0.9.0/RELEASE_NOTES.md
101  Migration guide at https://github.com/NordicSemiconductor/zcbor/blob/0.9.0/MIGRATION_GUIDE.md
102  Migration guide copied here:
103
104  * ``zcbor_simple_*()`` functions have been removed to avoid confusion about their use.
105    They are still in the C file because they are used by other functions.
106    Instead, use the specific functions for the currently supported simple values, i.e.
107    ``zcbor_bool_*()``, ``zcbor_nil_*()``, and ``zcbor_undefined_*()``.
108    If a removed variant is strictly needed, add your own forward declaration in your code.
109
110  * Code generation naming:
111
112    * More C keywords are now capitalized to avoid naming collision.
113      You might have to capitalize some instances if your code was generated to have those names.
114
115    * A fix was made to the naming of bstr elements with a .size specifier, which might mean that these elements change name in your code when you regenerate.
116
117Device Drivers and Devicetree
118*****************************
119
120* The ``compatible`` of the LiteX ethernet controller has been renamed from
121  ``litex,eth0`` to :dtcompatible:`litex,liteeth`. (:github:`75433`)
122
123* The ``compatible`` of the LiteX uart controller has been renamed from
124  ``litex,uart0`` to :dtcompatible:`litex,uart`. (:github:`74522`)
125
126* The devicetree bindings for the Microchip ``mcp23xxx`` series have been split up. Users of
127  ``microchip,mcp230xx`` and ``microchip,mcp23sxx`` should change their devicetree ``compatible``
128  values to the specific chip variant, e.g. :dtcompatible:`microchip,mcp23017`.
129  The ``ngpios`` devicetree property has been removed, since it is implied by the model name.
130  Chip variants with open-drain outputs (``mcp23x09``, ``mcp23x18``) now correctly reflect this in
131  their driver API, users of these devices should ensure they pass appropriate values to
132  :c:func:`gpio_pin_set`. (:github:`65797`)
133
134* The ``power-domain`` property has been removed in favor of ``power-domains``.
135  The new property allows to add more than one power domain.
136  ``power-domain-names`` is also available to optionally name each entry in
137  ``power-domains``. The number of cells in the ``power-domains`` property need
138  to be defined using ``#power-domain-cells``.
139
140Analog Digital Converter (ADC)
141==============================
142
143* For all STM32 ADC that selects an asynchronous clock through ``st,adc-clock-source`` property,
144  it is now mandatory to also explicitly define a domain clock source using the ``clock`` property.
145
146Clock control
147=============
148
149* LFXO/HFXO (High/Low Frequency Crystal Oscillator) present in nRF53 series can
150  now be configured using devicetree. The Kconfig options
151  :kconfig:option:`CONFIG_SOC_ENABLE_LFXO`,
152  :kconfig:option:`CONFIG_SOC_LFXO_CAP_EXTERNAL`,
153  :kconfig:option:`CONFIG_SOC_LFXO_CAP_INT_6PF`,
154  :kconfig:option:`CONFIG_SOC_LFXO_CAP_INT_7PF`,
155  :kconfig:option:`CONFIG_SOC_LFXO_CAP_INT_9PF`,
156  :kconfig:option:`CONFIG_SOC_HFXO_CAP_DEFAULT`,
157  :kconfig:option:`CONFIG_SOC_HFXO_CAP_EXTERNAL`,
158  :kconfig:option:`CONFIG_SOC_HFXO_CAP_INTERNAL` and
159  :kconfig:option:`CONFIG_SOC_HFXO_CAP_INT_VALUE_X2` have been deprecated.
160
161  LFXO can now be configured like this:
162
163  .. code-block:: devicetree
164
165     /* use external capacitors */
166     &lfxo {
167           load-capacitors = "external";
168     };
169
170     /* use internal capacitors (value needs to be selected: 6, 7, 9pF)
171     &lfxo {
172           load-capacitors = "internal";
173           load-capacitance-picofarad = <...>;
174     };
175
176  HFXO can now be configured like this:
177
178  .. code-block:: devicetree
179
180     /* use external capacitors */
181     &hfxo {
182           load-capacitors = "external";
183     };
184
185     /* use internal capacitors (value needs to be selected: 7pF...20pF in 0.5pF
186      * steps, units: femtofarads)
187      */
188     &hfxo {
189           load-capacitors = "internal";
190           load-capacitance-femtofarad = <...>;
191     };
192
193Crypto
194======
195
196* Following the deprecation of the TinyCrypt library (:github:`79566`), the
197  TinyCrypt-based shim driver was marked as deprecated (:github:`79653`).
198
199Disk
200====
201
202* The SDMMC subsystem driver now requires a ``disk-name`` property be supplied
203  with the definition of the disk, which is used when registering the
204  SD device with the disk subsystem. This permits multiple SD devices to be
205  registered simultaneously. If unsure, ``disk-name = "SD"`` may be used
206  as a sane default.
207
208* The MMC subsystem driver now requires a ``disk-name`` property be supplied
209  with the definition of the disk, which is used when registering the
210  MMC device with the disk subsystem. This permits multiple MMC devices to be
211  registered simultaneously. If unsure, ``disk-name = "SD2"`` may be used
212  as a sane default.
213
214
215Enhanced Serial Peripheral Interface (eSPI)
216===========================================
217
218GNSS
219====
220
221* The u-blox M10 driver has been renamed to M8 as it only supports M8 based devices.
222  Existing devicetree compatibles should be updated to :dtcompatible:`u-blox,m8`, and Kconfig
223  symbols swapped to :kconfig:option:`CONFIG_GNSS_U_BLOX_M8`.
224
225* The APIs :c:func:`gnss_set_periodic_config` and :c:func:`gnss_get_periodic_config` have
226  been removed. (:github:`76392`)
227
228Input
229=====
230
231* :c:macro:`INPUT_CALLBACK_DEFINE` has now an extra ``user_data`` void pointer
232  argument that can be used to reference any user data structure. To restore
233  the current behavior it can be set to ``NULL``. A ``void *user_data``
234  argument has to be added to the callback function arguments.
235
236* The :dtcompatible:`analog-axis` ``invert`` property has been renamed to
237  ``invert-input`` (there's now an ``invert-output`` available as well).
238
239PWM
240===
241
242* The Raspberry Pi Pico PWM driver now configures frequency adaptively.
243  This has resulted in a change in how device tree parameters are handled.
244  If the :dtcompatible:`raspberry,pico-pwm`'s ``divider-int-0`` or variations
245  for each channel are specified, or if these are set to 0,
246  the driver dynamically configures the division ratio by specified cycles.
247  The driver will operate at the specified division ratio if a non-zero value is
248  specified for ``divider-int-0``.
249  This is unchanged from previous behavior.
250  Please specify ``divider-int-0`` explicitly to make the same behavior as before.
251
252SDHC
253====
254
255* The NXP USDHC driver now assumes a card is present if no card detect method
256  is configured, instead of using the peripheral's internal card detect signal
257  to check for card presence. To use the internal card detect signal, the
258  devicetree property ``detect-cd`` should be added to the USDHC node in use.
259
260Sensors
261=======
262
263* The existing driver for the Microchip MCP9808 temperature sensor transformed and renamed
264  to support all JEDEC JC 42.4 compatible temperature sensors. It now uses the
265  :dtcompatible:`jedec,jc-42.4-temp` compatible string instead to the ``microchip,mcp9808`` string.
266* The :dtcompatible:`current-sense-amplifier` sense resistor is now specified in milli-ohms
267  (``sense-resistor-milli-ohms``) instead of micro-ohms in order to increase the maximum representable
268  resistor from 4.2k to 4.2M.
269* The :dtcompatible:`current-sense-amplifier` properties ``sense-gain-mult`` and ``sense-gain-div``
270  are now limited to a maximum value of ``UINT16_MAX`` to enable smaller rounding errors in internal
271  calculations.
272
273* The ``nxp,`` prefixed properties in :dtcompatible:`nxp,kinetis-acmp` have been deprecated in favor
274  of properties without the prefix. The sensor based driver for the :dtcompatible:`nxp,kinetis-acmp`
275  has been updated to support both the new and deprecated property names. Uses of the deprecated
276  property names should be updated to the new property names.
277
278Serial
279======
280
281 * Users of :c:func:`uart_irq_tx_ready` now need to check for ``ret > 0`` to ensure that the FIFO
282   can accept data bytes, instead of ``ret == 1``. The function now returns a lower bound on the
283   number of bytes that can be provided to :c:func:`uart_fifo_fill` without truncation.
284
285 * LiteX: ``CONFIG_UART_LITEUART`` has been renamed to :kconfig:option:`CONFIG_UART_LITEX`.
286
287Regulator
288=========
289
290* Internal regulators present in nRF52/53 series can now be configured using
291  devicetree. The Kconfig options :kconfig:option:`CONFIG_SOC_DCDC_NRF52X`,
292  :kconfig:option:`CONFIG_SOC_DCDC_NRF52X_HV`,
293  :kconfig:option:`CONFIG_SOC_DCDC_NRF53X_APP`,
294  :kconfig:option:`CONFIG_SOC_DCDC_NRF53X_NET` and
295  :kconfig:option:`CONFIG_SOC_DCDC_NRF53X_HV` selected by board-level Kconfig
296  options have been deprecated.
297
298  Example for nRF52 series:
299
300  .. code-block:: devicetree
301
302      /* configure REG/REG1 in DC/DC mode */
303      &reg/reg1 {
304          regulator-initial-mode = <NRF5X_REG_MODE_DCDC>;
305      };
306
307      /* enable REG0 (HV mode) */
308      &reg0 {
309          status = "okay";
310      };
311
312  Example for nRF53 series:
313
314  .. code-block:: devicetree
315
316      /* configure VREGMAIN in DC/DC mode */
317      &vregmain {
318          regulator-initial-mode = <NRF5X_REG_MODE_DCDC>;
319      };
320
321      /* configure VREGRADIO in DC/DC mode */
322      &vregradio {
323          regulator-initial-mode = <NRF5X_REG_MODE_DCDC>;
324      };
325
326      /* enable VREGH (HV mode) */
327      &vregh {
328          status = "okay";
329      };
330
331Bluetooth
332*********
333
334Bluetooth HCI
335=============
336
337* The ``bt-hci-bus`` and ``bt-hci-quirks`` devicetree properties for HCI bindings have been changed
338  to use lower-case strings without the ``BT_HCI_QUIRK_`` and ``BT_HCI_BUS_`` prefixes.
339* The Kconfig option :kconfig:option:`BT_SPI` is now automatically selected based on devicetree
340  compatibles and can be removed from board ``.defconfig`` files.
341
342Bluetooth Audio
343===============
344
345* The Volume Renderer callback functions :code:`bt_vcp_vol_rend_cb.state` and
346  :code:`bt_vcp_vol_rend_cb.flags` for VCP now contain an additional parameter for
347  the connection.
348  This needs to be added to all instances of VCP Volume Renderer callback functions defined.
349  (:github:`76992`)
350
351* The Unicast Server has a new registration function :c:func:`bt_bap_unicast_server_register` which
352  takes a :c:struct:`bt_bap_unicast_server_register_param` as argument. This allows the Unicast
353  Server to dynamically register Source and Sink ASE count at runtime. The old
354  :kconfig:option:`CONFIG_BT_ASCS_ASE_SRC_COUNT` and :kconfig:option:`CONFIG_BT_ASCS_ASE_SNK_COUNT`
355  has been renamed to :kconfig:option:`CONFIG_BT_ASCS_MAX_ASE_SRC_COUNT` and
356  :kconfig:option:`CONFIG_BT_ASCS_MAX_ASE_SNK_COUNT` to reflect that they now serve as a
357  compile-time maximum configuration of ASEs to be used.
358  :c:func:`bt_bap_unicast_server_register` needs to be called once before using the Unicast Server,
359  and more specifically prior to calling :c:func:`bt_bap_unicast_server_register_cb` for the first
360  time. It does not need to be called again until the new function
361  :c:func:`bt_bap_unicast_server_unregister` has been called.
362  (:github:`76632`)
363
364* The Coordinated Set Coordinator functions :c:func:`bt_csip_set_coordinator_lock` and
365  :c:func:`bt_csip_set_coordinator_release` now require that :kconfig:option:`CONFIG_BT_BONDABLE`
366  is enabled and that all members are bonded, to comply with the requirements from the CSIP spec.
367  (:github:`78877`)
368
369* The callback structure provided to :c:func:`bt_bap_unicast_client_register_cb` is no longer
370  :code:`const`, and now multiple callback structures can be registered.
371  (:github:`78999`)
372
373* The Broadcast Audio Scan Service (BASS) shall now be registered and unregistered dynamically
374  at runtime within the scan delegator. Two new APIs, :c:func:`bt_bap_scan_delegator_register()`
375  and :c:func:`bt_bap_scan_delegator_unregister()`, have been introduced to manage both BASS and
376  scan delegator registration and initialization dynamically. It should also be mentioned that
377  the previous callback registration function, :c:func:`bt_bap_scan_delegator_register_cb()` has
378  now been removed and merged with :c:func:`bt_bap_scan_delegator_register()`.
379  This change allows more flexibility when registering or unregistering scan delegator and BASS
380  related functionality without requiring build-time configuration. Existing need to be updated
381  to use these new APIs.
382  (:github:`78751`)
383
384* The Telephone Bearer Service (TBS) and Generic Telephone Bearer Service (GTBS) shall now be
385  registered dynamically at runtime with :c:func:`bt_tbs_register_bearer`. The services can also be
386  unregistered with :c:func:`bt_tbs_unregister_bearer`.
387  (:github:`76108`)
388
389* There has been a rename from ``bt_audio_codec_qos`` to ``bt_bap_qos_cfg``. This effects all
390  structs, enums and defines that used the ``bt_audio_codec_qos`` name. To use the new naming simply
391  do a search-and-replace for ``bt_audio_codec_qos`` to ``bt_bap_qos_cfg`` and
392  ``BT_AUDIO_CODEC_QOS`` to ``BT_BAP_QOS_CFG``. (:github:`76633`)
393
394* The generation of broadcast ID inside of zephyr stack has been removed, it is now up the
395  application to generate a broadcast ID. This means that the application can now fully decide
396  whether to use a static or random broadcast ID. Reusing and statically defining a broadcast ID was
397  added to the Basic Audio Profile in version 1.0.2, which is the basis for this change. All
398  instances of :c:func:`bt_cap_initiator_broadcast_get_id` and
399  :c:func:`bt_bap_broadcast_source_get_id` has been removed(:github:`80228`)
400
401* ``BT_AUDIO_BROADCAST_CODE_SIZE`` has been removed and ``BT_ISO_BROADCAST_CODE_SIZE`` should be
402  used instead. (:github:`80217`)
403
404Bluetooth Host
405==============
406
407Automatic advertiser resumption is deprecated
408---------------------------------------------
409
410.. note::
411
412   This deprecation is compiler-checked. If you get no warnings,
413   you should not be affected.
414
415Deprecated symbols:
416   * :c:enumerator:`BT_LE_ADV_OPT_CONNECTABLE`
417   * :c:enumerator:`BT_LE_ADV_OPT_ONE_TIME`
418   * :c:macro:`BT_LE_ADV_CONN`
419
420New symbols:
421   * :c:enumerator:`BT_LE_ADV_OPT_CONN`
422   * :c:macro:`BT_LE_ADV_CONN_FAST_1`
423   * :c:macro:`BT_LE_ADV_CONN_FAST_2`
424
425:c:enumerator:`BT_LE_ADV_OPT_CONNECTABLE` is a combined
426instruction to make the advertiser connectable and to enable
427automatic resumption. To disable the automatic resumption, use
428:c:enumerator:`BT_LE_ADV_OPT_CONN`.
429
430Extended Advertising API with shorthands
431^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
432
433Extended Advertising API ``bt_le_ext_adv_*`` implicitly assumes
434:c:enumerator:`BT_LE_ADV_OPT_ONE_TIME` and never automatically
435resume advertising. Therefore, the following search/replace can
436be applied without thinking:
437
438Replace all
439
440.. code-block:: diff
441
442   -bt_le_ext_adv_create(BT_LE_ADV_CONN, ...)
443   +bt_le_ext_adv_create(BT_LE_ADV_FAST_2, ...)
444
445.. code-block:: diff
446
447   -bt_le_ext_adv_update_param(..., BT_LE_ADV_CONN)
448   +bt_le_ext_adv_update_param(..., BT_LE_ADV_FAST_2)
449
450Extended Advertising API with custom parameters
451^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
452
453You may have uses of :c:enumerator:`BT_LE_ADV_OPT_CONNECTABLE`
454in assignments to a :c:struct:`bt_le_adv_param`. If your struct
455is never passed to :c:func:`bt_le_adv_start`, you should:
456
457* replace :c:enumerator:`BT_LE_ADV_OPT_CONNECTABLE` with
458  :c:enumerator:`BT_LE_ADV_OPT_CONN`.
459* remove :c:enumerator:`BT_LE_ADV_OPT_ONE_TIME`.
460
461Legacy Advertising API not using automatic resumption
462^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
463
464Any calls to :c:func:`bt_le_adv_start` that use the combination
465:c:enumerator:`BT_LE_ADV_OPT_CONNECTABLE` and
466:c:enumerator:`BT_LE_ADV_OPT_ONE_TIME` should have that
467combination replaced with :c:enumerator:`BT_LE_ADV_OPT_CONN`.
468
469Legacy Advertising API using automatic resumption
470^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
471
472For this case, the application has to take over the
473responsibility of restarting the advertiser.
474
475Refer to the extended advertising sample for an example
476implementation of advertiser restarting. The same technique can
477be used for legacy advertising.
478
479Networking
480**********
481
482* The CoAP public API functions :c:func:`coap_get_block1_option` and
483  :c:func:`coap_get_block2_option` have changed. The ``block_number`` pointer
484  type has changed from ``uint8_t *`` to ``uint32_t *``. Additionally,
485  :c:func:`coap_get_block2_option` now accepts an additional ``bool *has_more``
486  parameter, to store the value of the more flag. (:github:`76052`)
487
488* The struct :c:struct:`coap_transmission_parameters` has a new field ``ack_random_percent`` if
489  :kconfig:option:`CONFIG_COAP_RANDOMIZE_ACK_TIMEOUT` is enabled. (:github:`79058`)
490
491* The Ethernet bridge shell is moved under network shell. This is done so that
492  all the network shell activities can be found under ``net`` shell command.
493  After this change the bridge shell is used by ``net bridge`` command. (:github:`77235`)
494
495* The Ethernet bridging code is changed to allow similar configuration experience
496  as in Linux. The bridged Ethernet interface can be used normally even if bridging
497  is enabled. The actual bridging is done by a separate virtual network interface that
498  directs network packets to bridged Ethernet interfaces.
499  The :c:func:`eth_bridge_iface_allow_tx` is removed as it is not needed because the
500  bridged Ethernet interface can send and receive data normally.
501  The :c:func:`eth_bridge_listener_add` and :c:func:`eth_bridge_listener_remove` are
502  removed as same functionality can be achieved using promiscuous API.
503  Because the bridge interface is a normal network interface,
504  the :c:func:`eth_bridge_iface_add` and :c:func:`eth_bridge_iface_remove`
505  will take network interface pointer as a first parameter. (:github:`77987`)
506
507* To facilitate use outside of the networking subsystem, the network buffer header file was renamed
508  from :zephyr_file:`include/zephyr/net/buf.h` to :zephyr_file:`include/zephyr/net_buf.h` and the
509  implementation moved to :zephyr_file:`lib/net_buf/`. (:github:`78009`)
510
511* The ``work_q`` parameter to ``NET_SOCKET_SERVICE_SYNC_DEFINE`` and
512  ``NET_SOCKET_SERVICE_SYNC_DEFINE_STATIC`` has been removed as it was always ignored. (:github:`79446`)
513
514* The callback function for the socket service has changed. The
515  ``struct k_work *work`` parameter has been replaced with a pointer to the
516  ``struct net_socket_service_event *pev`` parameter. (:github:`80041`)
517
518* Deprecated the :kconfig:option:`CONFIG_NET_SOCKETS_POLL_MAX` option in favour of
519  :kconfig:option:`CONFIG_ZVFS_POLL_MAX`.
520
521Other Subsystems
522****************
523
524Flash map
525=========
526
527 * ``CONFIG_SPI_NOR_IDLE_IN_DPD`` has been removed from the :kconfig:option:`CONFIG_SPI_NOR`
528   driver. An enhanced version of this functionality can be obtained by enabling
529   :ref:`pm-device-runtime` on the device (Tunable with
530   :kconfig:option:`CONFIG_SPI_NOR_ACTIVE_DWELL_MS`).
531
532hawkBit
533=======
534
535* :c:func:`hawkbit_autohandler` now takes one argument. This argument has to be set to
536  ``true`` for the same behavior as before the change. (:github:`71037`)
537
538* ``<zephyr/mgmt/hawkbit.h>`` is deprecated in favor of ``<zephyr/mgmt/hawkbit/hawkbit.h>``.
539  The old header will be removed in future releases and its usage should be avoided.
540  The hawkbit autohandler has been separated into ``<zephyr/mgmt/hawkbit/autohandler.h>``.
541  The configuration part of hawkbit is now in ``<zephyr/mgmt/hawkbit/config.h>``. (:github:`71037`)
542
543MCUmgr
544======
545
546* The ``MCUMGR_TRANSPORT_BT_AUTHEN`` Kconfig option from the :kconfig:option:`CONFIG_MCUMGR_TRANSPORT_BT` MCUmgr transport has been replaced with the :kconfig:option:`CONFIG_MCUMGR_TRANSPORT_BT_PERM_RW` Kconfig choice.
547  The requirement for Bluetooth authentication is now indicated by the :kconfig:option:`CONFIG_MCUMGR_TRANSPORT_BT_PERM_RW_AUTHEN` Kconfig option.
548  To remove the default requirement for Bluetooth authentication it is necessary to enable the :kconfig:option:`CONFIG_MCUMGR_TRANSPORT_BT_PERM_RW` Kconfig option in the project configuration.
549
550Random
551======
552
553* Following the deprecation of the TinyCrypt library (:github:`79566`), usage
554  of TinyCrypt in the CTR-DRBG random number generator was removed. From now on
555  Mbed TLS is required to enable :kconfig:option:`CONFIG_CTR_DRBG_CSPRNG_GENERATOR`.
556  (:github:`79653`)
557
558Shell
559=====
560
561* ``kernel threads`` and ``kernel stacks`` shell command have been renamed to
562  ``kernel thread list`` & ``kernel thread stacks``
563
564JWT (JSON Web Token)
565====================
566
567* By default, the signature is now computed using the PSA Crypto API for both RSA and ECDSA
568  (:github:`78243`). The conversion to the PSA Crypto API is part of the adoption
569  of a standard interface for crypto operations (:github:`43712`). Moreover,
570  following the deprecation of the TinyCrypt library (:github:`79566`), usage
571  of TinyCrypt was removed from the JWT subsystem (:github:`79653`).
572
573* The following new symbols were added to allow specifying both the signature
574  algorithm and crypto library:
575
576  * :kconfig:option:`CONFIG_JWT_SIGN_RSA_PSA` (default) RSA signature using the PSA Crypto API;
577  * :kconfig:option:`CONFIG_JWT_SIGN_RSA_LEGACY` RSA signature using Mbed TLS;
578  * :kconfig:option:`CONFIG_JWT_SIGN_ECDSA_PSA` ECDSA signature using the PSA Crypto API.
579
580  They replace the previously-existing Kconfigs ``CONFIG_JWT_SIGN_RSA`` and
581  ``CONFIG_JWT_SIGN_ECDSA``. (:github:`79653`)
582