blob: d999fff7b7e8adbcf0351e26acafc8cd71180938 [file] [log] [blame]
:orphan:
.. _zephyr_3.2:
Zephyr 3.2.0 (Working Draft)
############################
The following sections provide detailed lists of changes by component.
Security Vulnerability Related
******************************
Known issues
************
API Changes
***********
Changes in this release
=======================
* Zephyr now requires Python 3.8 or higher
* Changed :c:struct:`spi_cs_control` to remove anonymous struct.
This causes possible breakage for static initialization of the
struct. Updated :c:macro:`SPI_CS_CONTROL_PTR_DT` to reflect
this change.
* The :kconfig:option:`CONFIG_LEGACY_INCLUDE_PATH` option has been disabled by
default, all upstream code and modules have been converted to use
``<zephyr/...>`` header paths. The option is still available to facilitate
the migration of external applications, but will be removed with the 3.4
release. The :zephyr_file:`scripts/utils/migrate_includes.py` script is
provided to automate the migration.
* :zephyr_file:`include/zephyr/zephyr.h` no longer defines ``__ZEPHYR__``.
This definition can be used by third-party code to compile code conditional
to Zephyr. The definition is already injected by the Zephyr build system.
Therefore, any third-party code integrated using the Zephyr build system will
require no changes. External build systems will need to inject the definition
by themselves, if they did not already.
* :zephyr_file:`include/zephyr/zephyr.h` has been deprecated in favor of
:zephyr_file:`include/zephyr/kernel.h`, since it only included that header. No
changes are required by applications other than replacing ``#include
<zephyr/zephyr.h>`` with ``#include <zephyr/kernel.h>``.
* CAN
* The Zephyr SocketCAN definitions have been moved from :zephyr_file:`include/zephyr/drivers/can.h`
to :zephyr_file:`include/zephyr/net/socketcan.h`, the SocketCAN ``struct can_frame`` has been
renamed to :c:struct:`socketcan_frame`, and the SocketCAN ``struct can_filter`` has been renamed
to :c:struct:`socketcan_filter`. The SocketCAN utility functions are now available in
:zephyr_file:`include/zephyr/net/socketcan_utils.h`.
* The CAN controller ``struct zcan_frame`` has been renamed to :c:struct:`can_frame`, and ``struct
zcan_filter`` has been renamed to :c:struct:`can_filter`.
* The :c:enum:`can_state` enumerations have been renamed to contain the word STATE in order to make
their context more clear:
* ``CAN_ERROR_ACTIVE`` renamed to :c:enumerator:`CAN_STATE_ERROR_ACTIVE`.
* ``CAN_ERROR_WARNING`` renamed to :c:enumerator:`CAN_STATE_ERROR_WARNING`.
* ``CAN_ERROR_PASSIVE`` renamed to :c:enumerator:`CAN_STATE_ERROR_PASSIVE`.
* ``CAN_BUS_OFF`` renamed to :c:enumerator:`CAN_STATE_BUS_OFF`.
* The error code for :c:func:`can_send` when the CAN controller is in bus off state has been
changed from ``-ENETDOWN`` to ``-ENETUNREACH``. A return value of ``-ENETDOWN`` now indicates
that the CAN controller is in :c:enumerator:`CAN_STATE_STOPPED`.
* The list of valid return values for the CAN timing calculation functions have been expanded to
allow distinguishing between an out of range bitrate/sample point, an unsupported bitrate, and a
resulting sample point outside the guard limit.
* Memory Management Drivers
* Added :c:func:`sys_mm_drv_update_page_flags` and
:c:func:`sys_mm_drv_update_region_flags` to update flags associated
with memory pages and regions.
Removed APIs in this release
============================
* The following functions, macros, and structures related to the
deprecated kernel work queue API have been removed:
* ``k_work_pending()``
* ``k_work_q_start()``
* ``k_delayed_work``
* ``k_delayed_work_init()``
* ``k_delayed_work_submit_to_queue()``
* ``k_delayed_work_submit()``
* ``k_delayed_work_pending()``
* ``k_delayed_work_cancel()``
* ``k_delayed_work_remaining_get()``
* ``k_delayed_work_expires_ticks()``
* ``k_delayed_work_remaining_ticks()``
* ``K_DELAYED_WORK_DEFINE``
* Removed support for enabling passthrough mode on MPU9150 to
AK8975 sensor.
* Removed deprecated SPI :c:struct:`spi_cs_control` fields for GPIO management
that have been replaced with :c:struct:`gpio_dt_spec`.
* Removed support for configuring the CAN-FD maximum DLC value via Kconfig
``CONFIG_CANFD_MAX_DLC``.
Deprecated in this release
==========================
* :c:macro:`DT_SPI_DEV_CS_GPIOS_LABEL` and
:c:macro:`DT_INST_SPI_DEV_CS_GPIOS_LABEL` are deprecated in favor of
utilizing :c:macro:`DT_SPI_DEV_CS_GPIOS_CTLR` and variants.
* :c:macro:`DT_GPIO_LABEL`, :c:macro:`DT_INST_GPIO_LABEL`,
:c:macro:`DT_GPIO_LABEL_BY_IDX`, and :c:macro:`DT_INST_GPIO_LABEL_BY_IDX`,
are deprecated in favor of utilizing :c:macro:`DT_GPIO_CTLR` and variants.
* :c:macro:`DT_LABEL`, and :c:macro:`DT_INST_LABEL`, are deprecated
in favor of utilizing :c:macro:`DT_PROP` and variants.
* :c:macro:`DT_BUS_LABEL`, and :c:macro:`DT_INST_BUS_LABEL`, are deprecated
in favor of utilizing :c:macro:`DT_BUS` and variants.
* STM32 LPTIM domain clock should now be configured using devicetree.
Related Kconfig :kconfig:option:`CONFIG_STM32_LPTIM_CLOCK` option is now
deprecated.
* 'label' property from devicetree as a base property. The property is still
valid for specific bindings to specify like :dtcompatible:`gpio-leds` and
:dtcompatible:`fixed-partitions`.
* Bluetooth mesh Configuration Client API prefixed with ``bt_mesh_cfg_``
is deprecated in favor of a new API with prefix ``bt_mesh_cfg_cli_``.
Stable API changes in this release
==================================
New APIs in this release
========================
* CAN
* Added :c:func:`can_start` and :c:func:`can_stop` API functions for starting and stopping a CAN
controller. Applications will need to call :c:func:`can_start` to bring the CAN controller out
of :c:enumerator:`CAN_STATE_STOPPED` before being able to transmit and receive CAN frames.
* Added :c:func:`can_get_capabilities` for retrieving a bitmask of the capabilities supported by a
CAN controller.
* Added :c:enumerator:`CAN_MODE_ONE_SHOT` for enabling CAN controller one-shot transmission mode.
* Added :c:enumerator:`CAN_MODE_3_SAMPLES` for enabling CAN controller triple-sampling receive
mode.
* I3C
* Added a set of new API for I3C controllers.
* W1
* Introduced the :ref:`W1 api<w1_api>`, used to interact with 1-Wire masters.
Kernel
******
* Source files using multiple :c:macro:`SYS_INIT` macros with the
same initialisation function must now use :c:macro:`SYS_INIT_NAMED`
with unique names per instance.
Architectures
*************
* ARC
* ARM
* ARM64
* :c:func:`arch_mem_map` now supports :c:enumerator:`K_MEM_PERM_USER`.
* Added :kconfig:option:`CONFIG_WAIT_AT_RESET_VECTOR` to spin at reset vector
allowing a debugger to be attached.
* Implemented erratum 822227 "Using unsupported 16K translation granules
might cause Cortex-A57 to incorrectly trigger a domain fault".
* Enabled single-threaded support for some platforms.
* IRQ stack is now initialized when :kconfig:option:`CONFIG_INIT_STACKS` is set.
* Fixed issue when cache API are used from userspace.
* Fixed issue about the way IPI are delivered.
* TF-A (TrustedFirmware-A) is now shipped as module
* Posix
* RISC-V
* x86
* Xtensa
* Macros ``RSR`` and ``WSR`` have been renamed to :c:macro:`XTENSA_RSR`
and :c:macro:`XTENSA_WSR` to give them proper namespace.
* Fixed a rounding error in timing function when coverting from cycles
to nanoseconds.
* Fixed the calculation of average "cycles to nanoseconds" to actually
return nanoseconds instead of cycles.
Bluetooth
*********
* Audio
* Direction Finding
* Host
* Added a new callback :c:func:`rpa_expired` in the struct :c:struct:`bt_le_ext_adv_cb`
to enable synchronization of the advertising payload updates with the Resolvable Private
Address (RPA) rotations when the :kconfig:option:`CONFIG_BT_PRIVACY` is enabled.
* Added a new :c:func:`bt_le_set_rpa_timeout()` API call to dynamically change the
the Resolvable Private Address (RPA) timeout when the :kconfig:option:`CONFIG_BT_RPA_TIMEOUT_DYNAMIC`
is enabled.
* Added :c:func:`bt_conn_auth_cb_overlay` to overlay authentication callbacks for a Bluetooth LE connection.
* Removed ``CONFIG_BT_HCI_ECC_STACK_SIZE``.
The Bluetooth long workqueue (:kconfig:option:`CONFIG_BT_LONG_WQ`) is used for processing ECC commands instead of the dedicated thread.
* :c:func:`bt_conn_get_security` and `bt_conn_enc_key_size` now take a ``const struct bt_conn*`` argument.
* Mesh
* Controller
* HCI Driver
Boards & SoC Support
********************
* Added support for these SoC series:
* Atmel SAML21, SAMR34, SAMR35.
* renesas_smartbond da1469x SoC series
* Removed support for these SoC series:
* Made these changes in other SoC series:
* Changes for ARC boards:
* Added support for these ARM boards:
* Atmel atsaml21_xpro
* Atmel atsamr34_xpro
* da1469x_dk_pro
* ST STM32F7508-DK Discovery Kit
* WeAct Studio Black Pill V3.0
* Added support for these ARM64 boards:
* i.MX8M Nano LPDDR4 EVK board
* Removed support for these ARM boards:
* Removed support for these X86 boards:
* Added support for these RISC-V boards:
* Made these changes in other boards:
* sam_e70_xplained: Uses EEPROM devicetree bindings for Ethernet MAC
* sam_v71_xult: Uses EEPROM devicetree bindings for Ethernet MAC
* Added support for these following shields:
* ARCELI W5500 ETH
* Panasonic Grid-EYE (AMG88xx)
Drivers and Sensors
*******************
* ADC
* STM32: Now supports Vbat monitoring channel and STM32U5 series.
* Audio
* CAN
* A driver for bridging from :ref:`native_posix` to Linux SocketCAN has been added.
* A driver for the Espressif ESP32 TWAI has been added. See the
:dtcompatible:`espressif,esp32-twai` devicetree binding for more information.
* The STM32 CAN-FD CAN driver clock configurion has been moved from Kconfig to :ref:`devicetree
<dt-guide>`. See the :dtcompatible:`st,stm32-fdcan` devicetree binding for more information.
* The filter handling of STM32 bxCAN driver has been simplified and made more reliable.
* The STM32 bxCAN driver now supports dual intances.
* The CAN loopback driver now supports CAN-FD.
* The CAN shell module has been rewritten to properly support the additions and changes to the CAN
controller API.
* The Zephyr network CAN bus driver, which provides raw L2 access to the CAN bus via a CAN
controller driver, has been moved to :zephyr_file:`drivers/net/canbus.c` and can now be enabled
using :kconfig:option:`CONFIG_NET_CANBUS`.
* STM32: Now supports dual CAN instances.
* Clock control
* STM32: PLL_P, PLL_Q, PLL_R outputs can now be used as domain clock.
* Clock Control
* Coredump
* Counter
* STM32: RTC : Now supports STM32U5 and STM32F1 series.
* STM32: Timer : Now supports STM32L4 series.
* Crypto
* DAC
* DAI
* Display
* Disk
* Added support for DMA transfers when using STM32 SD host controller
* Added support for SD host controller present on STM32L5X family
* DMA
* STM32: Now supports stm32u5 series.
* cAVS drivers renamed with the broader Intel ADSP naming
* Kconfig depends on improvements with device tree statuses
* EEPROM
* Added Microchip XEC (MEC172x) on-chip EEPROM driver. See the
:dtcompatible:`microchip,xec-eeprom` devicetree binding for more information.
* Entropy
* ESPI
* Ethernet
* Atmel gmac: Add EEPROM devicetree bindings for MAC address.
* Flash
* Atmel eefc: Fix support for Cortex-M4 variants.
* Added flash driver for Renesas Smartbond platform
* STM32: Added OSPI NOR-flash driver. Supports STM32H7 and STM32U5. Supports DMA.
* GPIO
* Added GPIO driver for Renesas Smartbond platform
* HWINFO
* I2C
* Terminology updated to latest i2c specification removing master/slave
terminology and replacing with controller/target terminology.
* Asynchronous APIs added for requesting i2c transactions without
waiting for the completion of them.
* Added NXP LPI2C driver asynchronous i2c implementation with sample
showing usage with a FRDM-K64F board.
* STM32: support for second target address was added.
* Kconfig depends on improvements with device tree statuses
* Improved ITE I2C support with FIFO and command queue mode
* I2S
* I3C
* Added a driver to support the NXP MCUX I3C hardware acting as the primary controller
on the bus (tested using RT685).
* IEEE 802.15.4
* All IEEE 802.15.4 drivers have been converted to Devicetree-based drivers.
* Atmel AT86RF2xx: Add Power Table on devicetree.
* Atmel AT86RF2xx: Add support to RF212/212B Sub-Giga devices.
* Interrupt Controller
* IPM
* Kconfig is split into smaller, vendor oriented files.
* Support for Intel S1000 in cAVS IDC driver has been removed as the board
``intel_s1000_crb`` has been removed.
* LED
* LoRa
* MBOX
* MEMC
* MM
* Modem
* PCIE
* Added a ``dump`` subcommand to the ``pcie`` shell command to print out
the first 16 configuration space registers.
* Added a ``ls`` subcommand to the ``pcie`` shell command to list
devices.
* PECI
* Pinmux
* Pin control
* Added pin control driver for Renesas Smartbond platform
* PWM
* Added PWM driver for Renesas R-Car platform
* Power Domain
* Reset
* SDHC
* Added SDHC driver for NXP LPCXpresso platform
* Added support for card busy signal in SDHC SPI driver, to support
the :ref:`File System API <file_system_api>`
* Sensor
* Converted drivers to use Kconfig 'select' instead of 'depends on' for I2C,
SPI, and GPIO dependencies.
* Converted drivers to use I2C, SPI, and GPIO dt_spec helpers.
* Added multi-instance support to various drivers.
* Added DS18B20 1-wire temperature sensor driver.
* Added WΓΌrth Elektronik WSEN-HIDS driver.
* Fixed unit conversion in the ADXL345 driver.
* Fixed TTE and TTF time units in the MAX17055 driver.
* Removed MPU9150 passthrough support from the AK8975 driver.
* Changed the FXOS8700 driver default mode from accel-only to hybrid.
* Enhanced the ADXL345 driver to support SPI.
* Enhanced the BQ274XX driver to support the data ready interrupt trigger.
* Enhanced the INA237 driver to support triggered mode.
* Enhanced the LPS22HH driver to support being on an I3C bus.
* Enhanced the MAX17055 driver to support VFOCV.
* Serial
* Added serial driver for Renesas Smartbond platform
* The STM32 driver now allows to use serial device as stop mode wake up source.
* SPI
* Timer
* STM32 LPTIM based timer should now be configured using device tree.
* USB
* W1
* Added Zephyr-Serial 1-Wire master driver.
* Added DS2484 1-Wire master driver. See the :dtcompatible:`maxim,ds2484`
devicetree binding for more information.
* Added DS2485 1-Wire master driver. See the :dtcompatible:`maxim,ds2485`
devicetree binding for more information.
* Introduced a shell module for 1-Wire.
* Watchdog
* Added support for Raspberry Pi Pico watchdog.
* WiFi
Networking
**********
* ``CONFIG_NET_CONFIG_IEEE802154_DEV_NAME`` has been removed in favor of
using a Devicetree choice given by ``zephyr,ieee802154``.
* Added new Wi-Fi offload APIs for retrieving status and statistics.
USB
***
Build System
************
* Removed deprecated ``GCCARMEMB_TOOLCHAIN_PATH`` setting
Devicetree
**********
* API
* Bindings
Libraries / Subsystems
**********************
* Console
* C Library
* C++ Subsystem
* Emul
* Filesystem
* IPC
* Management
* MCUMGR race condition when using the task status function whereby if a
thread state changed it could give a falsely short process list has been
fixed.
* MCUMGR shell (group 9) CBOR structure has changed, the ``rc``
response is now only used for mcumgr errors, shell command
execution result codes are instead returned in the ``ret``
variable instead, see :ref:`mcumgr_smp_group_9` for updated
information. Legacy bahaviour can be restored by enabling
:kconfig:option:`CONFIG_MCUMGR_CMD_SHELL_MGMT_LEGACY_RC_RETURN_CODE`
* MCUMGR img_mgmt erase command now accepts an optional slot number
to select which image will be erased, using the ``slot`` input
(will default to slot 1 if not provided).
* MCUMGR :kconfig:option:`CONFIG_OS_MGMT_TASKSTAT_SIGNED_PRIORITY` is now
enabled by default, this makes thread priorities in the taskstat command
signed, which matches the signed priority of tasks in Zephyr, to revert
to previous behaviour of using unsigned values, disable this Kconfig.
* MCUMGR taskstat runtime field support has been added, if
:kconfig:option:`CONFIG_OS_MGMT_TASKSTAT` is enabled, which will report the
number of CPU cycles have been spent executing the thread.
* MCUMgr transport API drops ``zst`` parameter, of :c:struct:`zephyr_smp_transport`
type, from :c:func:`zephyr_smp_transport_out_fn` type callback as it has
not been used, and the ``nb`` parameter, of :c:struct:`net_buf` type,
can carry additional transport information when needed.
* Cbprintf and logging
* Updated cbprintf static packaging to interpret ``unsigned char *`` as a pointer
to a string. See :ref:`cbprintf_packaging_limitations` for more details about
how to efficienty use strings. Change mainly applies to the ``logging`` subsystem
since it uses this feature.
* Added :c:macro:`LOG_RAW` for logging strings without additional formatting.
It is similar to :c:macro:`LOG_PRINTK` but do not append ``<cr>`` when new line is found.
* IPC
* Introduced a 'zephyr,buffer-size' DT property to set the sizes for TX and
RX buffers per created instance.
* Set WQ priority back to PRIO_PREEMPT to fix an issue that was starving the scheduler.
* ``icmsg_buf`` library was renamed to ``spsc_pbuf``.
* Added cache handling support to ``spsc_pbuf``.
* Fixed an issue where the TX virtqueue was misaligned by 2 bytes due to the
way the virtqueue start address is calculated
* Added :c:func:`ipc_service_deregister_endpoint` function to deregister endpoints.
* LoRaWAN
* Modbus
* Power management
* RTIO
* Initial version of an asynchronous task and executor API for I/O similar inspired
by Linux's very successful io_uring.
* Provides a simple linear and limited concurrency executor, simple task queuing,
and the ability to poll for task completions.
* SD Subsystem
* SDMMC STM32: Added DMA support and now compatible with STM32L5 series.
* Settings
* Shell
* Storage
* Testsuite
* Tracing
HALs
****
* Atmel
* sam: Fix incorrect CIDR values for revision b silicon of SAMV71 devices.
* Espressif
* GigaDevice
* NXP
* Nordic
* RPi Pico
* Renesas
* ST
* STM32
* stm32cube: update stm32f7 to cube version V1.17.0
* stm32cube: update stm32g0 to cube version V1.6.1
* stm32cube: update stm32g4 to cube version V1.5.1
* stm32cube: update stm32l4 to cube version V1.17.2
* stm32cube: update stm32u5 to cube version V1.1.1
* stm32cube: update stm32wb to cube version V1.14.0
* Silabs
* TI
* Telink
* Wurth Elektronik
* Xtensa
MCUboot
*******
Trusted Firmware-m
******************
Documentation
*************
Tests and Samples
*****************
Issue Related Items
*******************
These GitHub issues were addressed since the previous 3.1.0 tagged
release: