BayLibre contributions to Zephyr v3.7


The Zephyr Project recently released version 3.7 on July 27th 2024. Baylibre is proud to have contributed to this release in several areas.

Cryptography

Improvements to PSA crypto APIs

Zephyr’s long-term plan for cryptography involves moving towards PSA Crypto APIs. In this scope Valerio Setti:

  • contributed to update the Mbed TLS version used in Zephyr to 3.6 (LTS release).
  • added support for CONFIG_PSA_WANT_xxx Kconfigs which are used to explicitly enable crypto features on the Mbed TLS’s PSA core instead of automatically guessing them from legacy build symbols.
  • added support for the Mbed TLS’s software optimized version of the NIST P-256 elliptical curve.
  • replaced and/or added PSA crypto alternatives to TinyCrypt in several places on Zephyr’s code base (ex: TCP’s ISN and Bluetooth LE).

Valerio was also recognized as a collaborator for both “Mbed TLS” and “TF-M integration.”

OpenPGP Support

Adrien Ricciardi added support for the OpenPGP 24-bit CRC algorithm, enhancing data integrity.

Networking

PTP Protocol Introduction

Adam Wojasiński introduced the PTP (Precision Time Protocol) in Zephyr v3.7.0. This network protocol, implemented in the application layer, synchronizes clocks in a computer network with sub-microsecond accuracy. It is based on the IEEE 1588 standard. The implementation supports both IPv6 and IPv4 as transport protocols.

Network Packet Timestamps

Adam Wojasiński also added support for passing network packet timestamps to the BSD Sockets API using the SO_TIMESTAMPING socket option. Additionally, minor improvements were made to the network stack related to timestamping.

Non-Volatile Storage (NVS)

Adrien Ricciardi improved the reliability of the NVS by adding an optional 32-bit CRC to each data field. Previously, only filesystem metadata was protected with a CRC. This feature can be enabled through Kconfig. He also fixed issues with the nvs_calc_free_space() function and implemented stricter checks to identify and reject corrupted NVS items.

Riadh Ghaddab fixed a broken test case in the NVS test suite related to the cache after garbage collection.

DesignWare SPI Enhancements

Julien Panis added support for multiple interrupt lines for errors in the DesignWare SPI driver. This allows for individual lines for each of the four DW SPI error interrupts (TX overrun, RX underrun, RX overflow, and master error) instead of a single line for all errors.

Another contribution by Julien manages the DW SPI driver’s MMIO (Memory-Mapped I/O) region, ensuring proper operation on 64-bit platforms.

Memory Management

Nicolas Pitre refined the core demand paging code and prepared it for ARM64 support. He also implemented an LRU (Least Recently Used) eviction algorithm for demand paging.

Additionally, Nicolas fixed issues with the ARM64 MMU code and added formal test cases to ensure future stability.

Timers

Nicolas Pitre addressed several timer-related issues, including removing unnecessary runtime division, handling maximum periods correctly, and implementing optimizations and bug fixes.

RISC-V Improvements

Nicolas Pitre contributed to improvements in the RISC-V exception handling and Physical Memory Protection code.

Analog Devices Support

Axel Haslam and Philip Molloy enhanced the Analog Devices SDP-K1 evaluation board by incorporating USB CDC support. This enables the transmission of debug logs to the host computer while simultaneously streaming data from an analog-to-digital converter (ADC).

Stoyan Bogdanov introduced a definition for the SDP-120 pin connector, making it compatible with the 120-pin connector on the ADI SDP-K1 board. This simplifies the process of working with the board as pins can now be accessed using their respective names. This feature was particularly beneficial when combined with the SDP-I-PMOD and an attached devkit.

Angelo Dureghello focused on refining the ADIN2111 PHY driver, implementing several fixes and improvements. Additionally, support for the ADIN1100 device was added.

Code Cleanups

Adrien Ricciardi introduced the SIZEOF_FIELD() macro, aligning it with the Linux implementation. This macro eliminates the need for redundant code in various parts of Zephyr that previously relied on direct code manipulation to achieve the same goal. By centralizing this functionality, code consistency and maintainability are improved.

Summary of BayLibre contributions in Zephyr v3.7.0

  
Authored153
Co-developed-by1
Signed-off-by2