FOUNDRIES.IO INSIGHTS

Zephyr Development News 05 September 2018

By Marti Bolivar | September 5, 2018

This is the 05 September 2018 newsletter tracking the latest Zephyr development merged into the mainline tree on GitHub.

Highlights

This newsletter covers the following inclusive commit range, which is all of the patches merged between v1.13.0-rc1 and v1.13.0-rc2:

  • d67095ba Kconfiglib: Make header symbol order match .config files again, merged 22 August 2018
  • 8f7990de release: Zephyr 1.13rc2, merged 30 August 2018

Important Changes

New ADC Framework

Zephyr’s ADC support has been heavily reworked, with new device drivers, DT bindings, and board support.

New features include asynchronous usage, channel configuration, and multi-channel sampling.

This significant change past the release candidate period was approved by the technical steering committee on the grounds that the pull request which included it has been open for several months. (It wasn’t merged in time for rc1 due to a few remaining issues which have since been fixed.)

The new ADC framework includes support for Nordic- and NXP Kinetis-based devices and boards, ARC devices using DesignWare ADC IP blocks, and Atmel SAM devices. The quark_d2000_crb board no longer has ADC support, however.

In-tree sample applications were updated, showing how to use the new API, which is still defined in include/adc.h and was introduced in commit f1891e9

One notable (and late-breaking) review comment, while agreeing that the new API is a definite improvement, lamented the lack of trigger support.

Features

Arches:

Instruction and data caches were enabled on STM32F7 SoCs.

Bluetooth:

Mirroring a change made to the PHY update code merged earlier in the cycle, the connection update procedure now avoids an assert when confronted with protocol errors related to procedure collision rules observed in certain cell phones. In a related change, a new Kconfig option, CONFIG_BT_AUTO_PHY_UPDATE, was added, which can be disabled to allow the remote device to initiate PHY update, rather than doing so at connection establishment time.

Boards:

The nrf52840_pca10059 and nrf52_adafruit_feather boards now support flashing and debugging with PyOCD.

The nucleo_l432kc now has a flash storage partition.

Build:

Users can now set QEMU_BIN_PATH in their environment to specify the path to their own QEMU binaries, rather than using those provided by the Zephyr SDK.

They can also set the CMake variable DTS_APP_BINDINGS to specify a directory containing out-of-tree DTS bindings.

Drivers:

A new CONFIG_ENABLE_HID_INT_OUT_EP option was added, which adds support for an OUT interrupt endpoint in the USB HID driver. It is disabled by default, so its merge should not affect applications using this driver.

The sensor subsystem’s Kconfig choice options now have names. This allowed board-specific support files to enable available sensors using Kconfig default settings for these choices, instead of setting them explicitly in defconfigs. This is useful as defaults can be easily overridden by applications.

Scripts:

Piggy-backing on the Kconfiglib update discussed below, the ninja menuconfig interface now shows how the Kconfig file of each symbol was sourced in its help for each symbol, roughly like so (for CONFIG_NET_UDP):

At subsys/net/ip/Kconfig:256
Included via some-app/KCONFIG_ROOT:86 -> ZEPHYR_BASE/Kconfig.zephyr:35 -> subsys/Kconfig:22 -> subsys/net/Kconfig:91
Menu path: (top menu) -> Networking -> IP stack

Bug Fixes and Documentation

Arches:

GPIO interrupt handling on STM32L4 SoCs now works properly.

Bluetooth:

A fix to an internal procedure affecting configurations which use the (new to v1.13) feature enabling multiple identities was merged.

Boards:

Documentation was added for qemu_nios2.

ARC boards’ Kconfig files were cleaned up and updated.

The nrf52_pca10040 board now declare Flash erase block sizes properly in DTS.

The arduino_101 Kconfig default for CONFIG_DISK_FLASH_MAX_RW_SIZE was fixed.

The mimxrt1050_evk and udoo_neo_full_m4 got Kconfig warning fixes.

Build:

Documentation for Kconfig symbols now includes the path to access the symbol in ninja menuconfig.

Continuous Integration:

An issue causing CI to miss fault-related output was fixed.

Device Tree:

The STM32L4 SoC family got several fixes:

  • a missing flash erase block size is now declared
  • the fixup file now includes the necessary definitions for using I2C3
  • the gpioh and gpioi node addresses were fixed

Documentation:

The documentation itself can now be generated in PDF form if a LaTeX installation is found.

Drivers:

The Kconfig options for the SX1509B I2C GPIO chip got dependency fixes.

Two bugs affecting the nRF GPIO driver were fixed.

The “v1” I2C driver available for some STM32 SoC families now properly handles NACKed transactions. (The “v1” refers to the I2C IP block itself, not a software version.)

External:

Kconfiglib was updated to upstream a28bc4da9762e, which was used to add menu path information to the documentation and fix some bugs.

Kernel:

Fixes were merged for:

  • a significant bug affecting timeout handling
  • memory pools (mempool) for pools with large numbers of maximum-size blocks
  • use of interrupts when CONFIG_MULTITHREADING=n
  • time slice accounting in tickless mode (with a band-aid; more changes affecting the interaction of these two areas are expected)
  • k_pipe_block_put() behavior when memory runs out
  • k_poll() behavior when waiting on queues that subsequently have waiting canceled

Libraries:

Several fixes were merged for Zephyr’s CMSIS RTOS support shim.

Logging:

Fixes for out-of-bounds reads and null dereferences were merged.

Networking:

Fixes were merged affecting:

  • net_udp_append_raw() timeout handling
  • LWM2M formatter usage
  • memory exhaustion during TCP segment creation
  • retransmission of FIN packets
  • handling of multiple hop-by-hop option headers
  • DTLS connection closure
  • polling on sockets

Samples:

Patches include fixes for the following samples:

  • peripheral_hids: connection with a previously bonded device
  • nvs: interoperation with MPUs, flash block erase size
  • grove_light, grove_temperature: printing floats with newlib, missing respect for CONFIG_GROVE_LIGHT_SENSOR_NAME

All samples using mbedTLS directly were removed. These were mbedtls_sslclient, mbedtls_dtlsserver, and mbedtls_dtlsclient. This follows from the move to socket-based TLS support.

Scripts:

A menuconfig fix for visible symbols not being shown was merged.

Storage:

NVS writes now work when the underlying flash device cannot be written with byte-level granularity.

Testing:

Numerous enhancements and fixes were merged as the testing period continues; refer to the individual changes for details.

Individual Changes

Patches by area (154 patches total):

  • Arches: 6
  • Bluetooth: 8
  • Boards: 13
  • Build: 3
  • Continuous Integration: 2
  • Device Tree: 5
  • Documentation: 8
  • Drivers: 17
  • Kernel: 12
  • Libraries: 5
  • Logging: 2
  • Miscellaneous: 1
  • Networking: 36
  • Samples: 10
  • Scripts: 1
  • Storage: 1
  • Testing: 24

Arches (6):

  • 069d409b arch: arm: stm32: enable instruction and data caches on STM32F7
  • c0907762 sam_e70: enable instruction and data caches on sam_e70
  • 511edf01 Revert “sam_e70: enable instruction and data caches on sam_e70”
  • 64b13068 arch: arm: stm32l4: add missing I2C_3 to dts.fixup
  • 32a6fa1c arch: st_stm32: Remove I2C and SPI instances from common defconfig
  • d2e713f9 arch: stm32l4: Enable gpio interrupts correctly

Bluetooth (8):

  • 94d7669c Bluetooth: controller: Fix assert on different transaction collision
  • 76599ec2 Bluetooth: Add HCI Error Code definitions required by LE controller
  • f232643f Bluetooth: controller: Use HCI Error Code definitions
  • 021b1232 Bluetooth: Kconfig the Auto PHY Update Procedure initiation
  • f3be6316 Bluetooth: controller: Fix compile error when PHY update disabled
  • c3118e66 subsys: bluetooth: host: Ensure PDUs are not allocated in ISR
  • 643c8abe Bluetooth: Fix using correct IRK when generating RPA
  • 4e208b24 Bluetooth: IPSP: Fix pointing to invalid file

Boards (13):

  • 32652b4e boards: nios2: qemu_nios2: Add board documentation
  • 0be1875e boards: cleanup and update the default config of arc boards
  • 12a77e50 boards: nrf52_adafruit_feather: Add pyOCD configuration
  • b92436a1 boards: nrf52840_pca10059: Add pyOCD configuration
  • 9a5fdefa boards: nrf52840_pca10059: Fix pyOCD configuration
  • c73f15a4 boards: nucleo_l432kc: add a storage flash partition
  • 4f59c624 boards: nucleo_l432kc: mark nvs sample as supported
  • 6a01c69f nrf52_pca10040: get the erase block size from dts
  • 8c91001a boards: x86: arduino_101: set DISK_FLASH_MAX_RW_SIZE to 256
  • 5a1ef7b1 boards: nrf: Enable ADC nodes in DTS for nRF boards
  • c83769f8 boards: quark_se_c1000_ss_devboard: Enable ADC node
  • ea4305a4 boards: quark_d2000_crb: Remove adc support
  • 4f0f8dde boards: Remove CONFIG_OSC_EXTERNAL defconfigs from non-kinetis boards

Build (3):

  • 1d4e0894 qemu: support alternate path of qemu binaries
  • c1f54cc5 Kconfig: Show include paths in menuconfig and documentation
  • 9f8d4290 menuconfig: Fix a case of visible symbols not being shown

Continuous Integration (2):

  • 39ae72b4 sanitycheck: capture delayed faults
  • 77837e81 sanitycheck: do not abort logging on faults

Device Tree (5):

  • 5a16b902 dts: bindings: scan application dir for bindings
  • cdbbdcae dts: stm32l4: add flash erase block size entry
  • 68823b50 dts/st: fix stm32l4 gpioh gpioi node addresses
  • 0a97b5bf dts: nrf: Add ADC nodes and bindings for nRF SoCs
  • c995c4b4 dts: arc: Use dts tree for designware driver

Documentation (8):

  • 7b548c42 doc: fix misspellings in API documentation
  • 1c29bff0 doc: fix kconfig misspellings
  • 1d1a4b32 doc: fix misspellings in reST files
  • 9945e7fd doc: add ability to generate PDF
  • 7c08fdac doc: fix wrong board name in NXP LPCXpresso54114 doc
  • e6f2dff7 doc: DRAFT start for 1.13 release notes
  • 1f1307e1 doc: enhance multi-level interrupts diagram
  • 350026e8 doc: Add networking information to 1.13 release note

Drivers (17):

  • 79836063 drivers: gpio: sx1509b: Kconfig options depend on GPIO_SX1509B
  • fb10377e drivers: gpio: Fix two bugs in nrfx gpio
  • 32d159e3 drivers: i2c_ll_stm32_v1: Generate STOP condition if NACK
  • 7b063282 drivers: i2c_ll_stm32_v1: Handle NACK during address tranmsission
  • 6b44a003 subsys: usb: class: hid: Add OUT interrupt endpoint
  • 9255bf5f gpio: Use GPIO_FLAGS instead of GPIO_INT_CONF
  • 18b8a633 sensors: introduce kconfig named choices
  • f1891e94 drivers: adc: Introduce reworked API
  • aad21ecb drivers: adc: Add shims for nrfx ADC and SAADC drivers
  • 62fcfb72 drivers: adc: Select HAS_DTS_ADC for all ADC drivers
  • c0ce7d02 adc: Convert mcux adc16 driver to the new adc api
  • 4e551aab sam: adc: Updated SAM ADC driver.
  • ef839433 drivers: Use Designware driver for sensor subsystem
  • 353a69cb drivers: adc: Update new ADC APIs
  • b98aeab5 drivers: Kconfig.dw: Remove unnecessary Kconfig
  • a490a846 drivers: grove: Modify light sensor
  • 003f0176 drivers: grove: Update temperature driver

Kernel (12):

  • 71ca6530 mempool: Fix bit pointer state for N_MAX > 31
  • 69d8c1c0 syscalls: Correct the type of _k_syscall_table
  • 8b651492 kernel: Remove unused variable
  • d8d5ec3f kernel: Fix double-list-removal corruption case in timeout handling
  • bc6fb65c sched: Properly account for timeslicing in tickless mode
  • 17e9d623 kernel: Enable interrupts for MULTITHREADING=n on supported arch’s
  • 0e07f8e9 Revert “sched: Properly account for timeslicing in tickless mode”
  • 9ecc4ead sched: Properly account for timeslicing in tickless mode
  • 1c6d202e kernel: pipes: fix k_pipe_block_put() when not enough space
  • 45c0b204 kernel: k_poll: Introduce separate status for cancelled events
  • 8daafd4f kernel: Final spin in !MULTITHREADING should be locked
  • 8dcd5f8c kernel: Disable tick handling when !MULTITHREADING

Libraries (5):

  • 845fdbb7 lib: cmsis_rtos_v1: replace an else case
  • f72c4c52 lib/cmsis_rtos_v1: Remove redundant stack size check
  • 0b8792c0 lib/cmsis_rtos_v1: Check if osKernelStart() is called from ISR
  • ac787e0e lib/posix: Use static allocation for posix_thread objects
  • a0879409 lib: cmsis_rtos_v1: remove unhit return case

Logging (2):

  • 9624593a subsys: logging: Fix possible out-of-bounds read
  • 59198514 subsys: logging: Fix possible null dereference

Miscellaneous (1):

Networking (36):

  • 8d3510c5 net: pkt: Cleanup validation of min fragment size based on max headers
  • 8ccac9f7 net: context: Move/rename net_context_set_appdata_values() to net_pkt.c
  • 2af8dc96 net: sockets: close: Call net_context_accept only for listening socket
  • ab9f3948 net: udp: Check return value when appending UDP data
  • 4fedec2e net: tcp: Handle out-of-buf properly when preparing segment
  • 338dc8a9 net: tcp: Properly queue FIN packets for retransmission
  • 45a394e8 net: tcp: Remove NET_TCPFINAL* flags
  • 3b80998f net: lwm2m: correct Copyright to Foundries.io
  • be2b361b net: lwm2m: check for read permission on observe
  • 881fae33 net: lwm2m: fix typo in observe error message
  • a166ba77 net: lwm2m: return observe errors immediately
  • 6dae106d net: ipv6: Drop packet with multiple HBHO
  • b0c3b357 net: tcp: Add comment of func prototype for NET_CONN_CB macro usages
  • cfe27b39 net: app: Notify peers properly when DTLS connection is closed
  • a2d12527 net: sockets: poll: Handle EINTR return from k_poll
  • feed6bfb net: dhcpv4: Do not debug print IP address using NULL pointer
  • 0f0455e0 net: lwm2m: simplify MATCH_ logic in do_read_op()
  • 280f159b net: lwm2m: fix logic for lwm2m_next_engine_obj_inst()
  • 485bf7a7 net: lwm2m: fix reading multiple objects that don’t start at 0
  • 34a135b6 net: lwm2m: allow formatters to perform processing prior to read_op
  • a4001f02 net: lwm2m: plain-text: process only reads for a specific resource
  • fff8422f net: lwm2m: introduce output context user_data
  • 4fb29949 net: lwm2m: json formatter use private data
  • 4a344e7d net: lwm2m: tlv formatter use private data
  • f21b2055 net: lwm2m: remove unused members from lwm2m_output_context
  • 1821c274 net: lwm2m: optimize variable order in lwm2m_perform_read_op()
  • 658cb193 net: lwm2m: correct placement of put_begin/put_end in READ op
  • 0561887b net: lwm2m: fix JSON format for multi-instance reads
  • 019b24f1 net: lwm2m: optimize lwm2m_perform_read_op()
  • 3d2c1b7d net: lwm2m: introduce put_begin/end for object instance and resources
  • 90b0986b net: lwm2m: store a backup of the entire path in perform_read_op
  • 24e63f12 net: lwm2m: implement begin/end processing for obj inst and resources
  • 4ba19494 net: lwm2m: refactor put_begin_ri/put_end_ri into generic functions
  • 7345023d net: lwm2m: TLV: mark object instance boundry when needed
  • e4261161 net: lwm2m: in oma_tlv_put don’t re-add value when insert is true
  • d30f2abb net: lwm2m: fix formatter reader/writer initialization syntax

Samples (10):

  • a4cc88ad samples: net: sockets: echo-client: fix sock fd test, allow zero.
  • 0d0b221e samples: bluetooth: peripheral_hids: Add settings module
  • f2662acd samples: nvs: Allow mpu flash write
  • 9039d6fd samples: nvs: Use depends_on to select platforms
  • 7976d2b5 samples: nvs: Use flash erase block size from dts
  • 3ef2cc66 samples: mpu_stack_guard_test: Fix yaml regexes
  • 42c5d519 samples: mpu_stack_guard_test: Update console output in README
  • 52339f4b samples: grove_light: Provide device name from Kconfig
  • 094531bf samples: grove_temperature: Use device name from Kconfig
  • 38534521 samples: net: mbedtls: Remove apps using raw mbedtls APIs

Scripts (1):

  • d67095ba Kconfiglib: Make header symbol order match .config files again

Storage (1):

  • d47fada3 subsys: fs/nvs: fix writes when write_block_size != 1

Testing (24):

  • 871cc323 tests: kernel: sched: schedule_api: Increase stack size.
  • 5c3198e3 tests: power: exclude arduino_101
  • 9dd63f7d tests: cmsis_rtos_v1: Add more test scenarios in mutex
  • dc537eb6 tests: cmsis_rtos_v1: add semaphore negative tests
  • f17b111e tests: kernel: init: Fix integer overflow issue
  • 1b5db96a tests: benchmark: Check for return values
  • d2b4d8f0 tests: thread_api: increase stack for test
  • 3f2f6dda tests: a fix for ARC and MPU VER 3
  • baabe645 tests: cmsis_rtos_v1: Wait for longer duration in k_busy_wait
  • 70f85fee tests: net: mqtt: Fix rc check in mqtt_publisher test
  • 24c96a8a tests: benchmarks: sys_kernel: Enable benchmark for slower SoCs
  • a81aad97 tests: net: Run networking tests only for selected platforms
  • 44498e6c tests: net: websocket: Fix crash when tearing down tests
  • 9e161a5a tests: adc_api: Add configurations for nRF5 boards
  • c68e41df tests: adc_api: Add support for kinetis boards
  • 1bfa34f4 tests: adc_api: Add ARC related parameters for ADC
  • 108b5398 tests: adc_api: Remove sample width test scenario
  • 4a2ba0dd tests/kernel: pipes: add tests for smaller pipe buffers
  • 3e41864e tests: gen_isr_table: Add barriers after triggering the irq
  • 30d478a5 tests: cmsis_rtos_v1: add and enhance msgq tests
  • 14742d79 tests: k_poll: Add testcase to poll fifo which gets k_fifo_cancel_wait
  • 9c68c469 tests: crypto: sha256: Add the missing test case for execution
  • 2f95e240 tests/kernel/threads/no-multithreading: Disable USERSPACE
  • af17c195 tests: syscalls: ignore faults, they are intentional
comments powered by Disqus