Migration guide to Zephyr v4.5.0 (Working Draft)

This document describes the changes required when migrating your application from Zephyr v4.4.0 to Zephyr v4.5.0.

Any other changes (not directly related to migrating applications) can be found in the release notes.

Common

Build System

Kernel

Boards

  • The Kconfig options CONFIG_SRAM_SIZE and CONFIG_SRAM_BASE_ADDRESS have been deprecated, boards should instead use the devicetree zephyr.sram chosen node to specify the RAM node which will be used (whose values populated the Kconfig values). If either option is manually adjusted, it will cause CONFIG_SRAM_DEPRECATED_KCONFIG_SET to be set which indicates this deprecation.

  • The internal Nordic SoC platform Kconfig symbols NRF_PLATFORM_HALTIUM and NRF_PLATFORM_LUMOS are no longer used by in-tree code, which now relies on explicit CONFIG_SOC_SERIES_NRF54H, CONFIG_SOC_SERIES_NRF92, CONFIG_SOC_SERIES_NRF54L and CONFIG_SOC_SERIES_NRF71 checks. Both symbols are kept as deprecated stubs that default to y when the corresponding SoC series is selected and CONFIG_NRF_PLATFORM_DEPRECATED_SYMBOLS is enabled, so existing CONFIG_NRF_PLATFORM_*=y lines and depends on NRF_PLATFORM_* clauses keep building with a Kconfig deprecation warning. Out-of-tree Kconfig, CMake and code using these symbols should be updated:

  • The Nordic sysbuild Kconfig option SB_CONFIG_NRF_HALTIUM_GENERATE_UICR has been renamed to SB_CONFIG_NRF_GENERATE_UICR. Update sysbuild configurations to use the new name.

  • The Nordic SoC headers <haltium_power.h> and <haltium_pm_s2ram.h> have been renamed to <soc_power.h> and <soc_pm_s2ram.h> respectively. Forwarder headers under the old names remain available and emit a #warning pointing to the new include paths. Out-of-tree code that includes the old paths should be updated:

    • #include <haltium_power.h> with #include <soc_power.h>.

    • #include <haltium_pm_s2ram.h> with #include <soc_pm_s2ram.h>.

  • The system clock on STM32H7RS-based boards (stm32h7s78_dk and nucleo_h7s3l8) has been increased to 600 MHz. This is achieved by increasing the PLL1 frequency to 300 MHz, which also affects the bus and kernel clocks, resulting in slightly higher frequencies.

  • CONFIG_GPIO is no longer enabled by default on most STM32 boards. (boards with GPIO hogs keep it enabled as GPIO is needed for hogs to work). Applications that relied on CONFIG_GPIO=y being the default will need to enable the option explicitly. (GitHub #109468)

  • Boards that use UF2 images that migrate to zephyr,mapped-partition should enable HEX output in their defconfig (CONFIG_BUILD_OUTPUT_HEX), as the UF2 image generation can no longer rely on CONFIG_FLASH_LOAD_OFFSET to determine the code address from a BIN output. HEX to UF2 is now the default (instead of BIN). (GitHub #107944)

  • Ezurio bl54l15u_dvk has been removed. The bl54l15_dvk remains available and supports both the bl54l15 and bl54l15u variants of the module, with the same features. Boards using the bl54l15u_dvk should migrate to bl54l15_dvk/nrf54l15/cpuapp or bl54l15_dvk/nrf54l15/cpuflpr as appropriate.

  • The default MCUboot signature type for the boards stm32h573i_dk and b_u585i_iot02a has been changed from RSA-3072 to EC-P256. This affects builds that have MCUboot enabled in TF-M (CONFIG_TFM_BL2). If you wish to keep using RSA-3072, you need to set CONFIG_TFM_MCUBOOT_SIGNATURE_TYPE to "RSA-3072". Otherwise, make sure to have your own signing keys of the signature type in use.

Device Drivers and Devicetree

  • The DEVICE_API macro is now mandatory for declaring device driver API instances of any upstream driver class, including in out-of-tree drivers. DEVICE_API_GET now asserts that the API belongs to the requested class, which requires the instance to live in the class’s iterable section. Out-of-tree driver classes that embed an upstream API as their first member must also declare the relationship with DEVICE_API_EXTENDS, so that DEVICE_API_GET for the parent class succeeds on devices implementing the child API. See Driver APIs for details.

ADC

  • The girqs and pcrs properties (array type) of microchip,xec-adc have been replaced by encoded girqs (using MCHP_XEC_ECIA_GIRQ_ENC macros) and pcr-scr (int type) for encoded PCR register index and bit position (GitHub #105658).

Audio Codec

  • The audio codec driver backend API now uses audio_codec_driver_api instead of struct audio_codec_api.

    Out-of-tree audio codec drivers must rename their backend API struct definitions and switch their API instances to DEVICE_API(audio_codec, ...). See GitHub #110631 for examples of how in-tree drivers have been updated. Application code using the audio_codec_... APIs is not impacted.

Clock Control

  • The nxp,imxrt11xx-arm-pll binding now uses loop-div and post-div for ARM PLL configuration. The legacy clock-mult and clock-div properties remain supported but are deprecated. Existing RT11xx overlays should be updated using the mapping loop-div = clock-mult * 2 and post-div = clock-div.

Controller Area Network (CAN)

  • The header files for the NXP SJA1000 (can_sja1000.h) and Bosch M_CAN (can_mcan.h) CAN controller driver backends where converted to library-specific includes. Out-of-tree drivers based on these backends will need to update their include directives accordingly.

  • The Bosch M_CAN driver now solely uses RX FIFO0 for processing received CAN frames, ensuring these are processed in the order received on the bus. Out-of-tree users may want to update any bosch,mram-cfg devicetree property overrides to allocate all FIFO elements to RX FIFO0.

Devicetree

  • int and array typed devicetree properties whose DTS source uses a negative literal (e.g. <(-1)>) now expand to a negative value instead of the two’s-complement unsigned value used previously. Code that relied on the old unsigned representation, for example unsigned comparisons or BUILD_ASSERT(DT_PROP(node, foo) > 0, ...) checks, must be updated to use signed types or signed-aware checks (GitHub #107271).

Digital Microphone

  • The DMIC driver backend API now uses dmic_driver_api instead of struct _dmic_ops.

    Out-of-tree DMIC drivers must rename their backend API struct definitions and switch their API instances to DEVICE_API(dmic, ...). See GitHub #107695 for examples of how in-tree drivers have been updated. Application code using dmic_configure(), dmic_trigger(), and dmic_read() is not impacted.

Display

  • The Kconfig options CONFIG_SDL_DISPLAY_DEFAULT_PIXEL_FORMAT_* for SDL display pixel-format selection have been removed in favour of setting the pixel-format property directly in devicetree on the SDL pseudo-device node using the PANEL_PIXEL_FORMAT_* macros from include/zephyr/dt-bindings/display/panel.h. (GitHub #104099)

  • The LVGL CONFIG_LV_Z_COLOR_24_BGR_TO_RGB Kconfig option has been removed. LVGL’s RGB888 color format stores bytes in memory as blue, green, red, which matches the in-memory layout of PIXEL_FORMAT_RGB_888, so no channel swap is performed for displays reporting that format. Displays whose framebuffer instead expects a red, green, blue byte order must now report PIXEL_FORMAT_BGR_888, for which the LVGL glue performs the red/blue channel swap automatically.

DMA

  • silabs,siwx91x-dma has been renamed silabs,udma. The Kconfig options have also been renamed to align with this new name (DMA_SILABS_SIWX91X in DMA_SILABS_SIWX91X_UDMA and DMA_SILABS_SIWX91X_SG_BUFFER_COUNT in DMA_SILABS_SIWX91X_UDMA_DESCR_COUNT)

  • To align with the other drivers, GPDMA_SILABS_SIWX91X_DESCRIPTOR_COUNT has been renamed in DMA_SILABS_SIWX91X_GPDMA_DESCR_COUNT.

ESPI

  • ECUSTOM_HOST_SUBS_INTERRUPT_EN has been deprecated in favor of new API that allows fine-grained enable/disable control of individual eSPI hardware interrupts. This replaces the current all-or-nothing approach, which is tightly coupled to CONFIG_ESPI_PERIPHERAL_CUSTOM_OPCODE and single eSPI ACPI HW block instance in all eSPI drivers. This will be completely removed in the next Zephyr release to give time for transition.

Ethernet

  • ETHERNET_CONFIG_TYPE_T1S_PARAM and the related NET_REQUEST_ETHERNET_SET_T1S_PARAM has been removed. phy_set_plca_cfg() together with net_eth_get_phy() should be used instead to set these parameters (GitHub #108136).

  • In the functions implemented by the ethernet_api a additional argument was added for a pointer to net_if. This api is not directly exposed to the application, so only out-of-tree drivers need to be updated. (GitHub #106086)

  • The pinctrl-0 and pinctrl-names devicetree properties for the nxp,enet-mac need to be moved from the MAC node to the parent Ethernet controller node. (GitHub #107352)

  • port_generate_random_mac of the dsa_api got removed. Also dsa_port_config now uses net_eth_mac_config to set the MAC address. mac_addr and use_random_mac_addr members of dsa_port_config were removed. Out-of-tree DSA drivers must update their port configuration code to use the new API and structures. (GitHub #108952)

  • The Kconfig option CONFIG_ETH_NATIVE_TAP_PTP_CLOCK has been replaced by CONFIG_PTP_CLOCK_NATIVE. A new compatible zephyr,native-ptp-clock has been added for the native_sim PTP clock driver. CONFIG_PTP_CLOCK_NATIVE is enabled by default when the zephyr,native-ptp-clock compatible is present.

  • port_phylink_change of the dsa_api is now optional. The DSA driver no longer needs to call net_eth_carrier_on() or net_eth_carrier_off() on PHY link change, this is now handled by the DSA core. The void *user_data argument of port_phylink_change has been changed to const struct device *dev, so it no longer needs to be cast to obtain the device pointer. Out-of-tree DSA drivers must update their port_phylink_change callback to match the new API and can remove any calls to net_eth_carrier_on() or net_eth_carrier_off() from it. (GitHub #109671)

  • The MAC address of ethernet interfaces is now checked for validity, when bringing the interface up with net_if_up(). If the MAC address is invalid, the interface will fail to come up and an error will be logged. This check is done before the start function of the ethernet_api is called. This also applies to native wifi drivers. (GitHub #110435)

Flash

  • jedec,spi-nand now requires a plane-bytes property, which indicates the size of each plane in the flash device. For devices with a single plane, this should be set to the same value as size-bytes.

Fuel Gauge

  • Various fuel gauge property enums and union fields have been deprecated in favor of new versions with explicit unit suffixes. Applications and drivers should migrate to the unit-suffixed names. For example, FUEL_GAUGE_CURRENT (val.current) is replaced by FUEL_GAUGE_CURRENT_UA (val.current_ua).

GPIO

  • The STM32 GPIO driver now returns -EINVAL when attempting to configure a GPIO pin in disabled state with a pull-up/pull-down resistor using gpio_pin_configure(). The driver would previously return 0 without actually honoring those flags (no PU/PD resistor was enabled). Applications encountering this error should remove GPIO_PULL_UP/ GPIO_PULL_DOWN from the flags they provide to gpio_pin_configure(); this will result in the same behavior as before since these flags were effectively ignored. (GitHub #104690)

  • On STM32F1 series, GPIO output pins now use 50 MHz max. speed instead of 10 MHz. (GitHub #104690)

Haptics

Input

  • The no-disconnect property of gpio-keys has been replaced by enumeration property zephyr,suspend-action. The new property currently has three values, two of which are direct replacements for the old situations:

    • zephyr,suspend-action = "none"; is the remplacement for the behavior when when no-disconnect was present. Users of the no-disconnect property should replace it with zephyr,suspend-action = "none";.

    • zephyr,suspend-action = "disconnect-with-pupd"; is the replacement for the behavior when no-disconnect was not present. This is selected by default for backwards compatibility with the previous behavior.

    • zephyr,suspend-action = "full-disconnect"; is a new value. (Refer to the binding for more details)

    Users of the default configuration are advised to reconsider whether it really is appropriate; migration to zephyr,suspend-action = "full-disconnect"; is recommended. (GitHub #108294)

  • Kconfig options for the ft6146, ft5336, and cst8xx input drivers have been renamed to be consistent with the other input drivers. Applications using the following Kconfig options must update their configurations accordingly:

Interrupt Controllers

NXP

  • CONFIG_MCUX_LPTMR_TIMER now defaults to y when the /chosen/zephyr,system-timer chosen node is enabled and compatible with nxp,lptmr. Boards that do not use LPTMR as the system timer must not select an LPTMR node in /chosen/zephyr,system-timer.

  • Kinetis KE1xF no longer requires a board overlay to designate the system timer when CONFIG_PM is enabled. The SoC DTSI now sets the zephyr,system-timer chosen property, so boards that added the overlay described in the Zephyr 4.4 migration guide can remove it.

PWM

  • The pcrs property (array type) of microchip,xec-pwm has been replaced by pcr-scr (int type) to use encoded PCR register index and bit position macros (GitHub #104570).

  • STM32 PWM DT bindings macro PWM_STM32_COMPLEMENTARY that is deprecated since Zephyr v3.3.0 is no more defined. One shall use STM32_PWM_COMPLEMENTARY instead.

SD Host Controller

  • Renamed the Kconfig option CONFIG_SDHC_STM32_POLLING_SUPPORT to CONFIG_SDHC_STM32_DMA_MODE. The new symbol enables DMA (default y); set it to n to use polling mode. (GitHub #101617)

  • Renamed the Kconfig option CONFIG_SDHC_STM32_SDIO to CONFIG_SDHC_STM32_SDMMC. (GitHub #101617)

  • The devicetree compatible st,stm32-sdio was renamed. Use st,stm32-sdmmc instead. With this compatible, the legacy disk driver and the SDHC driver can target the same node. To migrate to the SDHC STM32 SDMMC driver, disable the legacy disk driver:

    CONFIG_SDMMC_STM32=n
    

    (GitHub #101617)

  • For st,stm32-sdmmc, the sdhi-on-gpios property has been consolidated into the existing pwr-gpios property. Replace sdhi-on-gpios with pwr-gpios in out-of-tree devicetree nodes.

  • litex,mmc now uses the dma-coherent devicetree property to indicate that the controller’s DMA accesses are coherent with the CPU. CONFIG_SDHC_LITEX_LITESDCARD_NO_COHERENT_DMA is automatically set based on that property and is no longer user-configurable. (GitHub #108411)

Sensor

  • The girqs and pcrs properties (array type) of microchip,xec-tach have been replaced by pcr-scr (int type) to use encoded PCR register index and bit position macros. GIRQ configuration is now handled via the microchip,dmec-ecia-girq binding include (GitHub #104808).

  • The devicetree compatible tdk,ntcg163jf103ft1 has been renamed to tdk,ntcgxx3jx103x to reflect that the compensation values are identical for TDK NTCG thermistor parts with the same resistance (R25) and beta (B25/85) values, as indicated in the part naming scheme (GitHub #110123).

Serial

SPI

  • SPI_SILABS_SIWX91X_GSPI_DMA and SPI_SILABS_SIWX91X_GSPI_DMA_MAX_BLOCKS have been removed. They are replaced by SPI_SILABS_SIWX91X_GSPI_DMA_DESCR_COUNT which allow to enable DMA and configure the descriptor count.

  • The fifo-enable property of st,stm32h7-spi has been removed. FIFO is now always used in polling and interrupt mode to enhance performance. A new property st,fifo-threshold can be used to configure the FIFO threshold (default = 1). (GitHub #110265)

Stepper

STM32

  • gpio-keys devices will fail to suspend unless property zephyr,suspend-action is present in Devicetree with value "none" or "full-disconnect". Refer to the migration guide entry related to this binding for more details. (GitHub #104690 / GitHub #108294)

  • SoC DTSI files now consistently use interrupt priority zero for all peripherals. Applications must now explicitly configure interrupt priorities using Devicetree if they previously relied on the values found in SoC DTSI files. (GitHub #106188)

  • st,stm32-sai binding has been restructured to reflect the SAI hardware topology. The parent node now represents the SAI Block controller, while a new child-binding represents the SAI Sub-Block instances. The following properties shall be moved from the parent SAI node to a child sub-block node: dmas, dma-names (now validated against enum: [tx, rx]), pinctrl-0, pinctrl-names, mclk-enable, mclk-divider, synchronous, and fifo-threshold. (GitHub #104423)

  • st,hci-stm32wba and st,stm32wba-ieee802154 nodes (with nodelabels bt_hci_wba and ieee802154 respectively) are now children of a top-level st,stm32wba-radio node with nodelabel radio. The interrupts property is now set on the &radio node instead of being duplicated on both &bt_hci_wba and &ieee802154 nodes. Out-of-tree boards which modified the interrupts property on either node must be updated to set the property on the top-level &radio node instead. (GitHub #110546)

Syscon

  • The syscon API functions syscon_read_reg() and syscon_write_reg() now use uint32_t for the register offset parameter instead of uint16_t. This allows for larger register offsets. Code that explicitly declares uint16_t variables for the register parameter or implements the syscon driver API functions may need to be updated.

USB

  • On STM32N6, the clocks cell which configures the USBPHYC clock mux has been moved from usbotg_hsN to usbphycN nodes at SoC DTSI level. Boards which use an STM32N6 SoC with custom clock mux configuration must now set the clocks property on usbphycN instead of usbotg_hsN. (GitHub #107813)

  • When host issues control transfer with data stage from host to device, the USB control transfer callbacks control_to_dev in usbd_class_api and to_dev in usbd_vreq_node are now called with NULL buf before data stage is received. This allows the stack to return STALL during data stage. Out-of-tree class and vendor handlers need to be updated. (GitHub #108840)

WiFi

  • In the functions implemented by the net_wifi_mgmt_offload, internally ethernet_api and wifi_mgmt_ops, a additional argument was added for a pointer to net_if. This api is not directly exposed to the application, so only out-of-tree drivers need to be updated. (GitHub #106086)

  • The Espressif Wi-Fi driver Kconfig option CONFIG_ESP32_WIFI_STA_AUTO_DHCPV4 has been removed in favor of the generic CONFIG_WIFI_STA_AUTO_DHCPV4. Applications that previously disabled the Espressif-specific option must now disable the generic option to retain manual DHCPv4 or static IP behavior after STA connection.

Bluetooth

Bluetooth Audio

Bluetooth Classic

  • The BR/EDR specific callbacks role_changed and br_mode_changed in bt_conn_cb have been moved into a new sub-struct bt_conn_br_cb, accessible via the br member. Application code using these callbacks must update the designated initializers:

    • .role_changed.br.role_changed

    • .br_mode_changed.br.mode_changed

    (GitHub #108022)

  • Renamed BT_DEVICE_VEDNOR_ID to BT_DEVICE_VENDOR_ID to fix a typo.

Bluetooth HCI

  • The devicetree compatible bflb,bl70x-bt-hci has been renamed to bflb,bt-hci, now that a single binding covers all Bouffalo Lab on-chip BLE controllers (BL60x/BL70x/BL70XL). Out-of-tree boards and shields must update their devicetree nodes accordingly.

  • Bluetooth HCI drivers now have to provide a mandatory common struct as the first field of their data (bt_hci_driver_data) and config (bt_hci_driver_config) structs.

  • The HCI driver bt_hci_driver_api.open callback no longer has a recv parameter; rather the common HCI driver layer code takes care of managing this as part of the common data struct. There is a new bt_hci_recv() API for drivers to pass data the higher layer (e.g. the Bluetooth Host stack). For drivers that need access to any error from recv() (most don’t) there’s also a new bt_hci_recv_err() API that leaves the responsibility of unrefing the buffer to the caller in case of error situations.

Networking

  • Various IP routing related Kconfig options will have now IPV6 prefix added to them. This is done so that we can have IPv4 routing symbols that provide same functionality as IPv6 ones but can be controlled separately.

  • IPv4 and IPv6 unicast route-table support is now exposed through the CONFIG_NET_IPV4_ROUTE and CONFIG_NET_IPV6_ROUTE options.

    These options control the per-family unicast route tables that are used by static route management, networking shell route commands, and host-side route selection for locally originated traffic such as VPN-bound packets. They do not, by themselves, enable packet forwarding between interfaces.

  • The Kconfig options CONFIG_NET_IPV4_ROUTING and CONFIG_NET_IPV6_ROUTING have been renamed to CONFIG_NET_IPV4_FORWARDING and CONFIG_NET_IPV6_FORWARDING.

    The renamed options explicitly describe IP forwarding between interfaces. Applications that only need route-table lookups or static routes should enable CONFIG_NET_IPV4_ROUTE or CONFIG_NET_IPV6_ROUTE and leave forwarding disabled. Applications acting as routers should enable both the route-table option and the corresponding forwarding option.

  • Out-of-tree IPv6 configurations should also migrate away from the deprecated legacy aliases CONFIG_NET_ROUTE, CONFIG_NET_ROUTING, CONFIG_NET_MAX_ROUTES, and CONFIG_NET_MAX_NEXTHOPS and use the CONFIG_NET_IPV6_* symbols directly.

  • The samples/net/wifi/test_certs/rsa2k enterprise test certificates have been removed. TF-PSA-Crypto cannot decrypt their DES-encrypted PKCS#8 private keys. Use samples/net/wifi/test_certs/rsa2k_no_des instead, or set WIFI_TEST_CERTS_DIR to another AES-encrypted certificate directory.

  • net_if_config_get was removed as it was a duplicate of net_if_get_config(). (GitHub #110930)

Ethernet

PTP

gPTP

  • Converted int port to uint16_t gptp_port in ethernet_context to make it clear that the field used only by the gPTP stack to store the gPTP port number.

  • Used uint16_t for nb_ports in gptp_default_ds per IEEE 1588 standard.

  • Removed net_eth_get_ptp_port and net_eth_set_ptp_port. New gptp_get_port_number() and gptp_set_port_number() can be used instead.

LoRaWAN

Other subsystems

  • Demand paging (subsys/demand_paging) is moved under Memory Management into subsys/mem_mgmt/demand_paging. Custom backing store and eviction algorithm code need to be moved there.

  • The ring buffer “item” API in <zephyr/sys/ring_buffer.h> has been deprecated in favor of the new fixed-size queue API in <zephyr/sys/ringq.h>.

    Code storing fixed-size items should migrate to sys_ringq (see sys_ringq Data Structure). Code that only used the item API at the byte level should switch to the byte-mode functions ring_buf_put() / ring_buf_get() calls on the same ring_buf. (GitHub #98255)

  • The ZTEST_BENCHMARK_SETUP_TEARDOWN() and ZTEST_BENCHMARK_TIMED_SETUP_TEARDOWN() macros have been removed. Their setup/teardown signature has been folded into ZTEST_BENCHMARK() and ZTEST_BENCHMARK_TIMED(), which now require explicit setup_fn and teardown_fn arguments at every call site. Pass NULL when a benchmark genuinely needs neither.

    Update existing call sites as follows:

    /* Before */
    ZTEST_BENCHMARK(suite, my_bench, 100) { /* ... */ }
    ZTEST_BENCHMARK_TIMED(suite, my_bench, 1000) { /* ... */ }
    ZTEST_BENCHMARK_SETUP_TEARDOWN(suite, my_bench, 100, setup, teardown) { /* ... */ }
    ZTEST_BENCHMARK_TIMED_SETUP_TEARDOWN(suite, my_bench, 1000, setup, teardown) { /* ... */ }
    
    /* After */
    ZTEST_BENCHMARK(suite, my_bench, 100, NULL, NULL) { /* ... */ }
    ZTEST_BENCHMARK_TIMED(suite, my_bench, 1000, NULL, NULL) { /* ... */ }
    ZTEST_BENCHMARK(suite, my_bench, 100, setup, teardown) { /* ... */ }
    ZTEST_BENCHMARK_TIMED(suite, my_bench, 1000, setup, teardown) { /* ... */ }
    

Random

  • CONFIG_CTR_DRBG_CSPRNG_GENERATOR has been removed. Use CONFIG_PSA_CSPRNG_GENERATOR instead.

  • CONFIG_CS_CTR_DRBG_PERSONALIZATION has been removed. It did not have any effect.

Modules

hal_nxp

  • S32K344: The pinmux header file for this SoC was renamed from S32K344-172MQFP-pinctrl.h to S32K344_K324_K314_172HDQFP-pinctrl.h. Out-of-tree boards must update their include directive accordingly:

    #include <nxp/s32/S32K344_K324_K314_172HDQFP-pinctrl.h>
    

Mbed TLS

Snippets

  • Rename xen_dom0 to xen-dom0.

Architectures

  • A new architecture primitive, arch_cpu_irqs_are_enabled(), has been added. It returns the current interrupt-enable state of the calling CPU without modifying it, complementing arch_irq_unlocked() which inspects a saved key. Out-of-tree architecture ports must provide an implementation.

  • CONFIG_XTENSA_MPU_ONLY_SOC_RANGES is removed. For SoC or board to override the default MPU region table, override xtensa_mpu_ranges in the SoC or board layer instead.

  • xtensa_soc_mpu_ranges[] and xtensa_soc_mpu_ranges_num are removed. If SoC or board needs its own memory regions at boot, override xtensa_mpu_ranges instead.