NuttX-8.2 Release Notes

The 133nd release of NuttX, Version 8.3, was made on November 16, 2019, and is available for download from the Bitbucket.org website. Note that release consists of two tarballs: nuttx-8.2.tar.gz and apps-8.2.tar.gz. These are available from:

https://bitbucket.org/nuttx/nuttx/downloads
https://bitbucket.org/nuttx/apps/downloads

Both may be needed (see the top-level nuttx/README.txt file for build information). SHA1 checksums:

b2597742db3ef18b2318d39a86ded8ac0bfaf09d *apps-8.2.tar.gz
8616ab7e6807aacfb90a9d7af57edc85f0f6d145 *nuttx-8.2.tar.gz

Additional new features and extended functionality:

* Core OS:

  - Signals:  Add support for SIGPIPE default action.  SIGPIPE uses
    SIG_SIGPIPE_ACTION which terminates process by default.  It also
    could be ignored.  From liuhaitao.
  - Spinlocks:  Remove support for re-entrant spinlocks.  They seemed
    like a good idea, but they are never used.  From Xiang Xiao.
  - Memory Manager:  Remove the assumption that one character equals
    eight bits.  From Xiang Xiao.
  - Power Management:  Historically, the NuttX PM subsystem has
    consisted of two functional components:  (1) an "Upper" part that
    detects state changes based on a random walk driven by activity
    levels, and (2) and "lower" part that implementst the state changes.
    This change decouples that upper activity-based logic from the lower
    random walk logic and allows use of other upper state detection
    logic (such as a custom, application-specific state machine).  From
    Matias Nitsche.
  - boardctl():  Expose power manager function through boardctl()
    interface.  From Xiang Xiao.

* File System/Block and MTD Drivers:

  - GD25:  Add support for a new FLASH vendor.  From zhangbo_a.
  - GD25:  Add support for GD25 device with 256-Mbit capacity.  From
    YanLin Zhu.
  - GD25:  Add 4-byte address operation for capacity larger than
    128-Mbit.  From YanLin Zhu.
  - GD25:  Add gd25_lock/unlock to case: enable 4-bytes address  From
    ligd.
  - GD5F:  Add gigadevice SPI NAND FLASH driver.  From YanLin Zhu.

* Networking/Network Drivers:

  - Networking:  Use ntoh() when printing IPv6 addresses so that the
    addresses appear in friendlier host order vs. network order.  From
    Bernd Walter.
  - Netlink:  Implement minimal NETLINK_ROUTE socket functionality that
    can (for now) be use used to obtain a list of network devices, IPv4
    ARP and IPv6 Neighbor tables, and IPv4 and IPv6 routing tables.
    From Gregory Nutt.

* Wireless/Wireless Drivers:

  - BCM43438A1 Bluetooth:  Add support for the BCM43438A1 Bluetooth
    capability.  From Dave Marples.
  - HCIUART Shim:  Add a serial 'shim' to allow any regular serial port
    to support a Bluetooth H4 interface and to be used to drive a
    Bluetooth device.  From Dave Marples.
  - BCM4343x HCIUART:  BCM4343x HCIUART support.  From Dave Marples.
  - BCM43xxx:  Move drivers/wireless/ieee80211/ to
    drivers/wireless/ieee80211/bcm43xxx/ since the directory only
    contains only BCM43362 and BCM43438 related code.  From Xiang Xiao.
  - GS2200M:  Add reset handler to interface.  Add reset and un-reset
    sequence in driver. From Masayuki Ishikawa.

* Audio/Audio Drivers:

  - Audio:  Add message type to support audio trigger.  From anchao.

* Other Common Device Drivers:

  - Altair:  Add support for the altair LTE modem driver.  From Alin
    Jerpelea.
  - MCP2515:  MCP2525 SPI STD-EXT ID fixes.  From DisruptiveNL.
  - OpenAMP:  Brings in the drivers needed to support OpenAMP.  These
    changes were ported from https://github.com/FishsemiCode/nuttx.
    This port was effort of a number of people, I rather arbitrarily
    gave authorship to Guiding Li because he has the largest number of
    fundamental quashed commits from the Xiamoi repository.  From
    Guiding Li.

* Simulator:

  - Simulator:  Add stack coloration feature.  From ligd.
  - Simulator:  Report PM activity on simulated UART.  From Matias
    Nitsche.
  - Simulator:  Add host ftruncate() support.  From chao.an.
  - Simulator:  Replace all CONFIG_DEV_CONSOLE with USE_DEVCONSOLE for
    arch/sim and compile up_devconsole.c conditionally.  From Xiang
    Xiao.
  - Simulator OpenAMP:  Support OpenAMP between two simulator
    instances.  Please read rpserver/rpproxy section in
    boards/sim/sim/sim/README.txt for more information.  From chao.an.

* ARMv7-M

  - ARMv7-M:  Add BPIALL register address.  From Dave Marples.
  - ARMv7-M MPU:  Add user peripheral helper

* Atmel SAMD2/L2 Boards:

  - Arduino-M0:  Add initial board support for the Arduino M0 which is
    based on the SAMD21 chip.  Include nsh and usbnsh configurations.
    From Alan Carvalho de Assis.

* NXP i.MXRT Drivers:

  - i.MXRT LCD:  Add support for LCD.  Clean up some LCD-related
    interfaces.  From Fabio Balzano.
  - i.MXRT Serial:  This change improves the performance of UART serial
    ports on the IMXRT by enabling the RX & TX FIFOS and transmission on
    the holding register being empty (TDRE) rather than transmission
    being complete (TC).  From Dave Marples.
  - i.MXRT Pin Mux:  This change separates out the pinmux and iomux
    functions cleanly.  For ease of conversion default IOMUX definitions
    have been added into imxrt_iomux.h.  The change effectively does two
    things:  (1) unifies the iomux definitions - previously some pins
    had them, and some didn't. This effectively made it impossible to
    use the pinmuxes without editing the header file in the standard
    distribution tree. And (2) unifies the pin definitions so that every
    pin now has a suffix. This makes it *much* easier to see when a pin
    is in use in your code, because it will always have a definition in
    your board.h file.  From Dave Marples.
  - IMXRT1020-EVK:  Add support for the MIMXRT1021-EVK board.  It
    features nsh, netnsh and usdhc sample configurations.  From Dave
    Marples.

* NXP i.MXRT Boards:

  - IMXRT1060-EVK:  Add basic LCD support for the board IMXRT1060-EVK.
    From Fabio Balzano.
  - IMXRT1060-EVK:  Added Littlevgl demo configuration into the
    IMXRT1060-EVK board directory.  From Fabio Balzano.

* NXP/Freescale Kinetis Drivers:

  - Kinetis Ethernet:  Add support for TJA1100 PHY.  From David Sidrane.

* NXP S31K1xx:

  - S32K1xx:  Support configuration and initialization of the flash
    configuration bytes.  From Gregory

* NXP S31K1xx Boards:

  - S32K1**EVB:  Create a special FLASH section to hold the FLASH
    configuration bytes.  From Gregory Nutt.
  - S32K146EVB:  Added configuration script and instructions for using
    Thread-Aware OpenOCD for the S32K146 with Eclipse.  From Han
    Raaijmakers.

* Renesas RX65N:

  - RX65N:  Adds a port of to the Renesas RX65N Micro-controller.  This
    port includes Serial (UART) driver (13 ports) and Ethernet
    driver.  From Anjana.

* Renesas RX65N Boards:

  - RSK RX65N-2MB:  Add support for the RSK RX65N-2MB board.  From
    Anjana.
  - GR-Rose:  Add support for the GR-Rose board.  From Anjana.

* Sony CXD56xx

  - CXD56xx CPU FIFO:  Add configurations for CPU FIFO elements.  From
    Alin Jerpelea.
  - CXD56xx Loader:  Update loader and gnssfw ver. 17660.  From Alin
    Jerpelea.
  - CXD56xx SMP:  Add support for SMP.  To run cxd56xx in SMP mode, new
    boot loader which will be released later must be used.  From
    Masayuki Ishikawa.
  - CXD56xx SMP:  Add IRQ routing for SMP in cxd56_irq.c.  In CXD56xx,
    each external interrupt controller can be accessed from a local
    APP_DSP (Cortex-M4F) only.  This change supports IRQ routing for SMP
    by calling up_send_irqreq() in both up_enable_irq() and
    up_disable_irq().  From Masayuki Ishikawa.

* Sony CXD56xx Drivers:

  - CXD56xx I2C:  Add ability to set the i2c frequency to other than just
    100 or 400 Hz.  From Alin Jerpelea.
  - CXD56xx SDHCI:  Reduce power consumption by stopping SD clock.  Re-
    enable SD clock during access to SD card.  Improve GNSS low
    sensitivity with SD card inserted.  From Alin Jerpelea.

* Sony CXD56xx Spresense Board:

  - CXD56xx Board Common:  Add the Altair LTE modem support on the
    Spresense board.  From Alin Jerpelea.
  - CXD56xx Board Common:  Add Spresense Image Processor.  Enable support
    for accelerated format converter, rotation and so on. using the CXD5602
    image processing accelerator.
  - Spresense:  Add board specific pin configurations of CXD5602 pins to
    fit Spresense board.  From Takayoshi Koizumi.
  - Spresense:  Add a configuration option to select if an extension
    board is attached to the SPresence.  If there is no extension board
    attached, the SPresense may run in a low-power mode by default (as
    determined by the CONFIG_CXD56_CUSTOM_PINCONFIG option).  If an
    extension board is present, then the SPresense will need to run at a
    higher power mode, selected by the new CONFIG_SPRESENSE_EXTENSION
    option.  From Gregory Nutt.
  - Spresense Camera:  Add ISX012 camera initialization and
    configuration.  From Alin Jerpelea.
  - Spresense OS test:  Enable ostest in rndis/defconfig and
    wifi/defconfig. From Masayuki Ishikawa.
  - Spresense:  Add --gc-sections to LDFLAGS and add -ffunction-sections
    and -fdata-sections to ARCHCFLAGS in scripts/Make.defs.   From
    Masayuki Ishikawa.
  - Spresense SMP:  Add smp configuration.  From Masayuki Ishikawa.
  - Spresense SCU:  The SCU has to be initialized at bootup on Spresense
    board because several functions depend on it. Add audio control
    definitions.  Add configuration for the audio implementation.  From
    Alin Jerpelea.
  - Spresense:  Add audio and board audio control implementation.  From
    Alin Jerpelea.
  - Spresense:  Sdd power_control and audio_tone_generator.  Add a simple
    way to control the audio buzzer with defined frequency for user-space
    apps.  From Alin Jerpelea.
  - Spresense:  Add the optional initialization of  GNSS and GEOFENCE at
    boot if the drivers are enabled  From Alin Jerpelea.
  - Spresense:  Add LTE configuration.  From Alin Jerpelea.
  - Spresense:  Enable high current mode for the Spresense Extension
    board on all examples that have SDCARD support.  From Alin Jerpelea.
  - Spresense:  Add lcd examples configuration.  This is a configuration
    for the basic nx examples  From Alin Jerpelea.

* STMicro STM32:

  - STM32 F0/L0/G0:  Add support for STM32G070xx family.  From Daniel
    Pereira Volpato.
  - STM32 F0/L0/G0 Power:  Scale dynamic voltage and flash wait states
    properly on STM32G0 chips.  Included preliminary implementation of
    PWR module VOS support.  From Daniel Pereira Volpato.
  - STM32L4R5ZI:  Add support for the STM32L4R5ZI chip type.  From Jussi
    Kivilinna.
  - STM32 L4+ DMA:  Add DMA support for STM32L4+ series.  From Jussi
    Kivilinna.
  - STM32 L4 Clocking:  Enable "Range 1 boost" mode if any PLL freq
    above 80 Mhz.  From Jussi Kivilinna.
  - STM32 L4 LPTIM:  Add support for LPTIM timers on the STM32L4 as PWM
    outputs.  From Matias N.
  - STM32 H7 Progmem: Add FLASH progmem support.  From David Sidrane.

* STMicro STM32 Drivers:

  - STM32 Serial:  Single Wire add pull{up|down|none} via new IOCTL
    command.  From David Sidrane.
  - STM32 F0/L0/G0 Serial:  Single Wire add pull{up|down|none} via
    new IOCTL command.  From David Sidrane.
  - STM32 F0/L0/G0 PWM:  Add PWM support.  From Daniel Pereira Volpato.
  - STM32 G0 TIM:  Support timers available on STM32G070.  Includes TIM1
    PIOs, TIM driver lower-half.  From Daniel Pereira Volpato.
  - STM32 F7 Serial:  Single Wire add pull{up|down|none} via new IOCTL
    command.  From David Sidrane.
  - STM32 H7 BBSRAM:  Exclude BBSRAM from cacheable when
    CONFIG_ARMV7M_DCACHE. ST placed the STM32H7 BBSRAM in the SRAM
    default memory region which is cacheable. This change sets the
    BBSRAM memory range to non-cacheable.  From David Sidrane.
  - STM32 H7 SDMMC:  Add SDMMC support and IDMA as well as interrupt
    driven transmission.  Support pull-ups and SDIO.  From David Sidrane.
  - STM32 H7 Serial:  Single Wire add pull{up|down|none} via new IOCTL
    command.  From David Sidrane.
  - STM32 L4 OTGFS:  Enable OTGFS for STM32L4+ series.  The OTGFS
    peripheral on stm32l4x6 and stm32l4rxxx reference manual is exactly
    the same.  From Jussi Kivilinna.
  - STM32L4 IDLE Loop:  (1) Added BEGIN_IDLE()/END_IDLE() to stop call
    so that we also get notification via LED of the STOP mode, (2) Added
    the stm32l4_clockenable call as previously discussed, and (3) Added
    call to pm_changestate() to inform drivers we're back to running
    after the call to stm32l4_stop() returns.  From Matias N.
  - STM32 L4 Serial:  Single Wire add pull{up|down|none} via new IOCTL
    command.  From David Sidrane.

* STMicro STM32 Boards:

  - Nucleo-G070RB:  Initial support for board STM32 NUCLEO-G070RB,
    including NSH config.  Enables PWR peripheral and set SYSCLK to
    maximum frequency.  From Daniel Pereira Volpato.
  - Nucleo-G070RB:  Add PWM support and GPIO_TIM3_* mappings.  Add a PWM
    configuration. From Daniel Pereira Volpato.
  - Nucleo-G070RB:  Add button driver support, Add driver support. Add
  - Nucleo-G070RB: Enable basic timers.  Add TIMx clock frequencies to
    board.h.  From Daniel Pereira Volpato.
  - Nucleo-L476RG:  Add required definitions if libcxx is enabled.  From
    Matias N.
  - Nucleo-L476RG:  Add support for LPTIM timers as PWM outputs.  From
    Matias N.
    GPIO configuration.  From Daniel Pereira Volpato.
  - Nucleo-H743ZI:  Added GPIO device driver for user-space apps.  From
    Heiko Demlang.
  - olimex-stm32-e407:  Newer Olimex E407 boards are populated with
    STM32407ZE chips.  From David Alessio.
  - STM32F4-Discovery:  Add support for external DS1307 module.  From
    Alan Carvalho de Assis.
  - STM32F4-Discovery:  Add support for MMCSD_SPI.  This change works
    with STM32F4 Discovery Shield plus microSD click  From Masayuki
    Ishikawa.
  - STM32F4-Discovery:  Add support for gs2200m.  Works with mikroe
    STM32F4 Discovery Shield (slot3)  From Masayuki Ishikawa.

* TI Tiva:

  - TM4C129ENCPDT:  Add support for Tiva TM4C129ENCPDT.  From Nathan
    Hartman.

* TI Tiva Boards:

  - TM4C123G-Launchpad: SPI CAN functionality on TM4C123GXL.  From
    DisruptiveNL.

* Build System:

  - tools/Config.mk:  Eliminate use of the built-in implicit rules.
    From anchao.
  - tools/Config.mk and Makefile.unix:  Support the incremental build
    for configuration change.  From Xiang Xiao.
  - tools/Config.mk:  Support the ability to change the CFLAGS for
    the compilation of a single file.  Set special compiler options as
    follows the rule:  sourcefile + fixed suffix "_[A|C|CPP|CXX]FLAGS".
    For example in apps/examples/hello/Makefile:
    $(SRCDIR)/hello_main.c_CFLAGS = -DTEST.  From Xiang Xiao.
  - Configuration:  Auto-select CONFIG_BUILD_LOADABLE when either
    CONFIG_BUILD_KERNEL or CONFIG_BINFMT_LOADABLE is selected.  From
    Xiang Xiao.

* Libraries/Header Files:

  - libs/libc:  Add CONFIG_MODLIB_SYSTEM_SYMTAB to generate the symbol
    table for dlopen/insmod.  From Xiang Xiao.
  - getdelim() and getline():  Add implementations of the POSIX
    functions getdelim() and getline().  Because of how the function is
    defined, getline() canot be used on platforms that use CR-LF lin
    terminations.  From Gregory Nutt.
  - alarm(), setitimer(), and getitimer():  Implement alarm(),
    setitimer() and getitimer() APIs.  From liuhaitao.

* Tools:

  - tools/mkexport.sh:  Copy the essential build script files too and
    move Make.defs/gnu-elf.ld into scripts like board folder layout.
    From Xiang Xiao.
  - tools/mkexport.sh:  Should export full content for FLAT build even
    with CONFIG_BUILD_LOADABLE.  From Xiang Xiao.
  - tools/testbuild.sh:  Add an option to select the number of CPUs to
    use with 'make'  From Gregory Nutt.
  - tools/indent.sh:  Add a command line option to suppress reformatting
    of comments.  This is useful when comments are already correct
    and/or contain formatted data such as tables or lists.  From Gregory
    Nutt.
  - tools/nxstyle.c:  Add detection of carriage returns.  Improve
    reporting of TABs.  From Gregory Nutt.
  - tools/nxstyle.c:  Add logic to detect if there is a blank line
    following the final right brace.  From Gregory Nutt.
  - tools/nxstyle.c:  Eliminate false alarm errors on comments that are
    to the right of code when the comment terminator is on the same
    line as the last of the comment.  From Gregory Nutt.
  - tools/nxstyle.c:  Eliminate false alarms when checking for
    alignment of comments to the right of code.  Fix check for C++ style
    comments so that strings like http:// and https:// do not generate
    false alarms.  From Gregory Nutt.
  - tools/nxstyle.c:  Eliminate false positive 'Invalid character after
    asterisk in comment block'.  From Gregory Nutt.

* apps/ Build System:

  - apps/ Build System:  Numerous changes for improvements and general
    clean-up of the apps/ build system.  Too many small and individual
    changes to list here.  Includes many improvements related to loadable
    modules and symbol table generation, removal of duplicated logic,
    renaming of binary directories, use of cygpath, etc.  From Xiang Xiao.
  - apps/Application.mk:  Support the ability to change the CFLAGS for
    the compilation of a single file.  Set special compiler options as
    follows the rule: sourcefile + fixed suffix "_[A|C|CPP|CXX]FLAGS"
    As an example in apps/examples/hello/Makefile:
    $(SRCDIR)/hello_main.c_CFLAGS = -DTEST
    From Xiang Xiao.
  - apps/Application.mk and main.c files:  Change builtin's entry point
    from main to xxx_main by macro expansion.  This change make the
    entry point fully compliant with POSIX/ANSI standard.  From Xiang
    Xiao.

* Examples/Tests: apps/examples:

  - apps/examples/audio_rttl:  Add a simple RTTL player demo that is
    able to play tunes according to an RTTL song.  From Alin Jerpelea.
  - apps/examples/bmi160:  Add bmi160 example app.  This app will read
    the BM160 data and list it on the NSH console.  From Alin Jerpelea.
  - apps/examples/charger:  Simple charger example that will display on
    the console voltage and current values.  From Alin Jerpelea.
  - apps/examples/netlink_route:  Add test/example of NETLINK_ROUTE
    'get' operations.  From Gregory Nutt.

* NuttShell:  apps/nshlib:

  - apps/nshlib/: Add rptun cmd for boot remote core.  From ligd.
  - apps.nshlib/:  Add a -t option to the arp command which will enable
    printing the entire ARP table.  From Gregory Nutt.
  - apps/nshlib/:  Add new NSH command, 'pmconfig'.  From ligd.

* System Utilities:  apps/system:

  - apps/system/cle:  Add basic color support to the CLE editor.
    From Dave Marples.
  - apps/system/i2c:  While many I2C slave devices have multiple
    indexed registers, some have only one register and it's not indexed.
    For example, the I2C bus switch TCA9548A has only a Control
    Register, attempting to index to "Reg[0]" alters its contents to
    0x00 disabling all subordinate buses.  This change fixes that
    problem by simply trying to read something/anything from the slave.
    This also helps coax out slaves with register files that start from
    a higher index, i.e. the AT24CS0x, FLASH chips with a UUID that
    appears as a 2nd I2C slave at (address+8), report their serial
    number at Reg[80]-Reg[8F] and will NAK a read of Reg[0].  Modified
    get/set to prevent write of reg index if not specified.
  - apps/system/i2c:  Added a 'dump' command to issue a single
    transaction to retrieve multiple bytes from an I2C slave and
    register/offset.  From David Alessio.
  - apps/system/spi:  Add options to specify devtype, id for chip
    select.  From David S. Alessio.
  - apps/system/symtab:  Remove system/symtab since the same
    functionality exist in nuttx now.  From Gregory Nutt.
  - apps/system/usrsock_rpmsg:  Add rpmsg based usrsock implementation.
    From Jianli Dong.

* Network Utilities: apps/netutils:

  - apps/netutils/cjson/:  Update default version to 1.7.12. Previous
    releases raise compilation warnings about redefined true/false.
    From raiden00pl.
  - apps/netutils/netlib/:  Add a function to read the entire ARP table
    using NETLINK_ROUTE protocol.  From Gregory Nutt.
  - apps/netutils/netlib/:  Add support for retrieving a snapshot of the
    IPv6 neighbor table using Netlink sockets.  From Gregory Nutt.
  - apps/netutils/netlib/:  Add a utility function that will return a
    list of all network devices in the UP state.  From Gregory Nutt.
  - apps/netutils/netlib/:  Add function to retrieve routing tables
    using Netlink.  From Gregory Nutt.

Bugfixes:

Only the most critical bugfixes are listed here (see the ChangeLog for a more complete list of bugfixes and for additional, more detailed bugfix information):

* Core OS:

  - Signals:  Fix undefined reference from sig_default.c to
    sched_suspend() if CONFIG_SIG_SIGSTOP_ACTION is not defined.  From
    raiden00pl.
  - waitpid():  Fix a NULL pointer dereference on race without
    DEBUG_ASSERT.  From David Alessio.
  - WD Timers:  Back out a kludge-workaround in wd_start for an SDCC
    compiler problem fix back in Feb 2017.  That workaround now appears
    to conflict with newer GCC versions using (unsupported) warning
    options and SDCC no longer needs the work-around.  From Gregory
    Nutt.
  - clock_systimespec():  Fix early timespec overflow if using 32 bit
    system timer.  From Jens Gräf.
  - Spinlocks:  spin_trylock handle memory barrier and instrumentation
    correctly.  From Xiang Xiao.
  - Power Management:  Fix a problem where a timer cannot start when it
    encounters a very small pmtick.  From ligd.
  - boardctl(BOARDIOC_MKRD):  This change corrects a problem with NSH:
    NSH was calling the OS internal function ramdisk_register() in
    violation of the portable POSIX interface.  This change solves the
    problem by introducing a new boardctl() function BOARDIOC_MKRD
    which moves the RAM disk creation into the OS.  From Gregory Nutt.
  - boardctl(BOARDIOC_ROMDISK):  Add support for the new
    BOARDIOC_ROMDISK command.  This allows applications to create ROMFS
    block drivers without illegal direct calls to romdisk_register.

* File System/Block and MTD Drivers:

  - SmartFS:  Fix O_CREAT without O_TRUNC truncating existing file.
    Also nothing in POSIX says that O_APPEND should prevent O_TRUNC.
    From Juha Niskanen.
  - SmartFS:  Honor O_APPEND on writes.  Also document pwrite() bug/
    limitation.  From Juha Niskanen.
  - GD25:  spi_devid argument was not used in initialization.  GD25
    driver was always using priv->spi_devid initialized to zero by
    kmm_zalloc(). This change initializes it from the supplied function
    argument.  From Juha Niskanen.
  - MMC/SD:  Set wrbusy after success of all the operations.  Any
    failure could leave wrbusy set when it should not be if the
    operation failed.  From David Sidrane.
  - MMC/SD:  Enter a removed card state On a failure.  If we fail to
    read cardstatus in mmcsd_transferready consider this a hard error
    and set the card to removed.  From David Sidrane.
  - MMC/SD (SDIO): Align DMA buffer for MBURST size.  From David S.
    Alessio.

* Networking/Network Drivers:

  - Socket close():  Fixed problems noted by Bernd Walter:  Eliminate an
    incomplete test when a disconnection event happens. When a
    disconnection event occurs, the close logic MUST always terminate
    the wait.  The conditional test was not incorrect, however, it
    lacked 'else' logic and would simply ignore that disconnection event
    in some cases.  That is bad because there may not be another
    disconnection event and that can lead to hangs (or at least very,
    very long delays).  From Gregory Nutt.
  - ICMPv6:  Dispatch ICMP_POLL to device's callback list too since
    icmpv6_neighbor stills append the callback into this list.  From
    Gregory Nutt.
  - ICMPv6:  Decouple autoconfig and ICMPv6 socket to avoid an invalid
    Kconfig combination.  From Xiang Xiao.
  - ICMPv6:  cmpv6_autoconfig() error handling must not overwrite
    overwrite the error code.  From Xiang Xiao.
  - TCP/UDP:  Fix a chicken and egg problem by eliminating the check of
    the arp/neighbor tables before packet transmission:
    1. For buffered TCP/UDP case, if CONFIG_NET_ARP_SEND /
       CONFIG_NET_ARP_IPIN / CONFIG_NET_ICMPv6_NEIGHBOR isn't enabled
       and the table doesn't contain the Ethernet address for the
       destination IP address yet, then the logic will skip the real
       transmission and then ARP/neighbor logic can't steal the final
       buffer to generate the ARP/ICMPV6 packet.
    2. For all other case, the TCP layer or user program should already
       contain the retransmit logic, the check is redundant and may
       generate many duplicated packets if ARP/ICMPV6 response is too
       slow because the cursor stop forward.  If user is still concerned
       about the very first packet lost, he could fix the issue by
       enabling CONFIG_NET_ARP_SEND / CONFIG_NET_ICMPv6_NEIGHBOR.
    From Xiang Xiao.
  - UDP sendto():  Add a check for the device that is polling.  In the
    multiple network device case, this check is necessary to prevent
    sending the UDP packet to the wrong device.  From Gregory Nutt.

* Wireless/Wireless Drivers:

  - MRF24J40:  Correct erroneous isolation of address mode field and
    subsequent bad comparison.  From Gregory Nutt.
  - GS2200M:  Add SPI_SELECT() to _read/write_data() in gs2200m.c
  - BCM43xx Wireless:  In the SDIO interface, the behavior of the DMA
    setup differs, depending on the hardware capability
    SDIO_CAPS_DMABEFOREWRITE.  If this capability is set, then the DMA
    setup much be done before the transfer setup.  Dave Marples
    modified this file for the i.MXRT USDHC which does have the
    SDIO_CAPS_DMABEFOREWRITE.  Xiao Xiang reports that this change
    breaks the Wifi on the Photon which does not report the
    SDIO_CAPS_DMABEFOREWRITE and suggests reverting the change.  In
    reality both changes are correct but must be conditioned on the
    DMA capability of the underlying SDIO device.  From Gregory Nutt.

* Common Drivers:

  - Various drivers (Cloned logic):  On error, memory was freed, but
    the error was not returned.  It just continued as though no error
    happened.  From Petro Karashchenko.
  - Serial:  Fix data corruption when outputting data in SMP mode  From
    Masayuki Ishikawa.
  - Serial:  serial_io.c used signal numbers, but did not include
    signal.h.  This has no problems but missing signal definitions have
    been seen in certain cases.  From David Sidrane.
  - Serial DMA:  Avoid uart_xmitchars_done() move the tail bigger then
    head.  If ioctl(TCOFLUSH) occurs between uart_xmitchars_dma() and
    uart_xmitchars_done(), TCOFLUSH will reset xmit buffer, then
    uart_xmitchars_done() will move the 'tail' ahead of 'head', then
    sends lots of wrong data.  From ligd.
  - mkfifo():  mkfifo() should return -1 and set errno on failure  From
    raiden00pl.
  - RAMLog: Fix ramlog readers never awakened up when using ramlog as
    syslog or console.  We also make an attempt to avoid the thundering
    herd problem if there are multiple readers/pollers. This change also
    removes forcing CONFIG_RAMLOG_CRLF in nuttx/syslog/ramlog.h as there
    is no point of wasting precious RAM for useless characters.  From
    Juha Niskanen.
  - USB CDC/ACM:  Fix memory leak of RX failsafe timer.  From Juha
    Niskanen.
  - USB HID Keyboard device:  Fix keyboard debounce algorithm used when
    CONFIG_HIDKBD_NODEBOUNCE is undefined.  From Jeff Theusch.
  - USB HID Keyboard:  Change default for CONFIG_HIDKBD_POLLUSEC per
    recommendation of Jeff Theusch.  From Gregory Nutt.
  - VL53L1X IOCTLs:  IOCTL commands for the VL53L1X did not follow the
    sequence.  Noted by Daniel Pereira de Carvalho.  From Gregory Nutt.
  - syslog:  syslog_force does not set errno so do not test against it.
    From Juha Niskanen.
  - syslog:  Fix assertion that assumes re-opened syslog file is the
    same.  Logic in syslog_file_channel() is calling syslog_initialize()
    for the default syslog device as a recovery action after failed
    syslog_dev_initialize().  From Juha Niskanen.

* Simulator:

  - Simulator HostFS:  Skip '.' and '..' in readdir'  From Xiang Xiao.
  - Simulator HostFS:  Fix warning: 'mapflags' may be used uninitialized
    in this function.  From Xiang Xiao.
  - Simulator Tickless:  Correct the calculation of the Tickless timer
    period.  Fix some missing initialization of globals and missing
    return values.  From Matias N.
  - Simulator:  Add -m32 to HOSTLDFLAGS if enable CONFIG_SIM_M32.  From
    Xiang Xiao.
  - Simulator PM:  Fixes compilation for sim target when enabling power
    management.  From Matias N.
  - Simulator Build:  Fixes missing recursion into sim board directory
    for dependency generation.  From Matias N.
  - Simulator SIMUART:  Remove CONFIG_SIM_UART_DATAPOST for arch/sim.
    It's very dangerous to call NuttX API from simuart_thread.  From
    Xiang Xiao.

* ARMv7-A

  - ARMv7-A:  Apply Masayuki Ishakawa's change for ARMv7-M to this SMP
    architecture as well.  From Gregory Nutt.

* ARMv7-M

  - ARMv7-M:  Fix a deadlock in up_sigdeliver() in SMP mode.  In
    previous implementation, up_disable_irq() was called before
    recovering local context. However, I noticed a deadlock happens in
    the following situation. For example, if up_sigdevliver() is in
    progress on CPU0 and CPU1 has called up_cpu_paused to CPU0, hence
    g_cpu_irqlock has been locked by CPU1, in this case, we would see a
    deadlock in later call of enter_critical_section() to restore
    irqcount.  To avoid this situation, we need to call
    enter_critical_section() to break the deadlock.  From Masayuki
    Ishikawa.

* Atmel SAM3/4 Boards:

  - SAM4CM:  Fix cpustart() implementation.  In Cortex-M, offset 0 in
    vector table stores initial stack pointer and offset 4 stores reset
    vector.  From Masayuki Ishikawa.

* Atmel SAMA5Dx Boards:

  - SAMA5D4-EK:  Fix bad conditional compilation for
    board_app_initialize().  Should depend only on CONFIG_LIB_BOARDCTL,
    CONFIG_BUILD_KERNEL is irrelevant.  From Gregory Nutt.

* Microchip i.MXRT:

  - i.MXRT WFI:  WFI needs to be disabled on i.MXRT.  We found the
    reason:  The imxrt1050 is configured to use SYSTICK for the kernel
    timer, but SYSTICK cannot wake up the MCU from low-power modes.
    Disable low-power modes on this MCU until we have support for an
    alternative timer.  Earlier versions of the board (EVK, not EVKB),
    had A0 silicon which by default did not enter low-power mode on a
    WFI.  With this change in place together with the previous one my
    system is stable, just using more power than it should.  From Dave
    Marples.

* Microchip i.MXRT Drivers:

  - i.MXRT Serial:  TC (Transmission complete) and TDRE (TX Buffer
    Empty) were transposed in imxrt_serial.c.  The end result was that
    for unoptimized code everything worked fine, but optimized code got
    itself into a real mess and continually fired interrupts.  From Dave
    Marples.

* Microchip i.MXRT Boards:

  - IMXRT1020-EVK:  Make naming of the LED consistent.  In most places
    it is referred to as LED1.  In board.h it is referred to as
    USERLED1.  The i.MXRT1020-EVK hardware user guide (HUG) uses the
    name USERLED.  This command makes all names internally consistent
    and consistent with the HUG.  Noted by Alin Jerpelea.  From Gregory
    Nutt.

* NXP/Freescale Kinetis Boards:

  - TWR-K60N512:  Suppress errors related to card detect GPIO
    configuration if SDHC support is not enabled.  From Gregory Nutt.

* NXP LPC17xx/40xx Drivers:

  - lpc17xx/40xx I2C:  Respect the I2C_M_NOSTART flag.  Sending a
    restart condition when not requested will break other drivers that
    depend on this behavior.  From Augusto Fraga Giachero.
  - LPC17xx/40xx Ethernet: Use usleep() instead of up_delay() for large
    wait times.  From Augusto Fraga Giachero.

* NXP LPC54xx:

  - LPC54 Clocking:  Fix PLL settings.  For the lpc54628 Rev. E board
    the PLL was not configured properly and the board would not boot
    correctly. I checked the startup files from the official IDE and
    inspected the assembly instructions for the libraries used.  From
    Andrei Stefanescu.

* NXP i.MXRT Boards:

  - IMXRT1060-EVK:  Fix FT5X06 CTRSTn pin configuration, increased
    number of pollwaiters for the FT5X06, tuned resolution during
    pointer dragging.  From Fabio Balzano.

* On Semiconductor Boards:

  - LC823450:  Fix cpustart() implementation.  In Cortex-M, offset 0 in
    vector table stores initial stack pointer and offset 4 stores reset
    vector.  From Masayuki Ishikawa.
  - LC823450-XGEVK:  Fix build error for posix_spawn.  From Masayuki
    Ishikawa.

* Sony CXD56xx:

  - CXD56xx Assertions:  Replace some assertions with error return
    values.  From Alin Jerpelea.
  - CXD56xx Interrupts:  Fix hang-up when error interrupt occurs.  From
    Alin Jerpelea.
  - CXD56xx Pin Configuration:  PIN_AP_CLK is used as a port selector of
    SDIO expander on the extension board, and is set output low in
    initialization.  Therefore, this pin cannot be used by the other
    board.  To avoid this restriction, remove this initial operation
    because this pin is pulled down by default on the extension board.
    From Alin Jerpelea.
  - CXD56xx:  Remove duplicate NVIC_SYSH redefinitions.  The NVIC_SYSH
    is already defined in nvicpri.h  From Alin Jerpelea.

* Sony CXD56xx Drivers:

  - CXD56xx SDHCI:  Fix initial value of semaphore in sdhci driver.
    From Alin Jerpelea.

* Sony CXD56xx Boards:

  - Spresense:  The SD Card TXS02612 port expander is hosted on the
    Extension board and should not be enabled if the extension board is
    not present.  From Alin Jerpelea.

* STMicro STM32:

  - STM32 F4 Pin Multiplex:  Ethernet pin ETH_RMII_REF_CLK is an input.
    From Gregory Nutt.
  - STM32 H7 ADC:  Fix typos in ADC register definitions.  From Markus
    Bernet.
  - STM32 H7:  Heap allocation, SRAM and SRAM1 are not continuous  From
    David Sidrane.
  - STM32 H7 CRC:  Add the CRC option in KConfig.  From Eduard Niesner.
  - STM32 H7 RCC: Add PLL3 Support and only enable PLLs if used.  From
    David Sidrane.
  - STM32 L4x6xx RCC:  This fix is needed if HSI clock is selected.
    Otherwise when waking up from STOP mode, the MSI clock is selected
    instead of the HSI clock.  From Matias N.

* STMicro STM32 Drivers:

  - STM32 USB Host:  There was no relationship between
    CONFIG_STM32_USBHOST and CONFIG_USBHOST, yet they they were used
    interchangeably.  This means that can (and did) get out of synch
    causing link time failures.  This change adds logic to select
    CONFIG_USBHOST when CONFIG_STM32_USBHOST is selected, keeping the
    two settings synchronized.  Furthermore, since CONFIG_STM32_USBHOST
    is the authoritative setting, all occurrences of CONFIG_USBHOST were
    replaced with CONFIG_STM32_USBHOST.  From Gregory Nutt.
  - STM32 SDIO:  SDIO Fix system hang on card eject.  From David Sidrane.
  - STM32 F7 Ethernet:  Large Ethernet packet can leads network halt.
    From Bazooka Joe.
  - STM32F7 OTGHOST:  OTGFS_EPTYPE_INTR should be OTG_EPTYPE_INTR.  From
    Gregory Nutt.
  - STM32 F7 SDMMC: SDMMC Fix system hang on card eject.  From David
    Sidrane.
  - STM32 L4 Firewall:  Correct a test to determine if an address lies
    in FLASH or not.  Improper mask caused test to always fail.  From
    Gregory Nutt.
  - STM32 H7 Ethernet:  Bazooka Joe's fix to the STM32 F7 Ethernet
    driver should be applied to the H7 as well.  The other STM32
    Ethernet drivers already have the change.  From Gregory Nutt.
  - STM32 H7 Ethernet:  Fix ETH_MACMDIOAR_CR_MASK bit mask.  From Markus
    Bernet.
  - STM32 H7 SDMMC: SDMMC Fix system hang on card eject.  From Gregory
    Nutt.
  - STM32 H7 FLASH:  Flash driver BUG fixes.  From David Sidrane.
  - STM32 H7 TIM:  Correct register bit definitions and alternate
    functions.  Fix other copy-paste definitions.  From Daniel Pereira
    Volpato.
  - STM32 L4 SDMMC:  SDMMC Fix system hang on card eject.  From David
    Sidrane.

* STMicro STM32 Boards:

  - STM32F4-Discovery:  Fix build error for posix_spawn.  From Masayuki
    Ishikawa.

* TI Tiva:

  - TIVA IRQs:  Fix wrong IRQ vector number.  From Nathan Hartman.
  - Tiva FLASH:  Fix several mistakes in tiva_write(). (1) Fix wrong
    use of && when & was intended. (2) Add compile- time warning
    directive because according to this function's interface, it is
    supposed to support unaligned writes and/or writes of arbitrary
    numbers of bytes to FLASH.  However, this function does NOT support
    that at this time. This needs to be fixed. (3) Fix wrong
    preprocessor conditional.  Was written to use the 32-word write
    buffer only for TM4C1294NCPDT.  This buffer is available on all
    M4C123 and TM4C129 parts. Now conditioned upon
    CONFIG_ARCH_CHIP_TM4C123 or CONFIG_ARCH_CHIP_TM4C129. (4) Add
    comments to document the intent of the above preprocessor logic.
    From Nathan Hartman.

* Xtensa

  - Xtensa:  Apply Masayuki Ishakawa's change for ARMv7-M to this SMP
    architecture as well.  From Gregory Nutt.

* Build System:

  - Makefiles:  Change ${shell pwd} to $(CURDIR) since pwd doesn't exist
    on Windows  From Xiang Xiao.
  - tools/Makefile.unix:  Fix build error when issue 'make -B':  "mkdir:
    cannot create directory 'staging': File exists:
    tools/Makefile.unix:269: recipe for target 'staging' failed".  From
    Xiang Xiao.
  - All ARM linker scripts:  Preface all _ebss definitions with '. =
    ALIGN(4)'.  Otherwise, the following .bss section may not be aligned
    properly.  From Gregory Nutt.
  - MIPS Linker Scripts:  The PIC32M* start-up code initializes .bss by
    writing 16 bytes at a time in a loop.  The start (_sbss) alignment
    is only required to be 4 bytes since the write is done with 4 store
    instructions.  From Gregory Nutt.
  - Top-level Kconfig:  Add some protection so that you cannot select an
    architecture-specific header file if the architecture does not
    provide the header file.  From Gregory Nutt.
  - libc Kconfig:  Should select the NuttX float.h file automatically
    if the NuttX math library is selected.  From Gregory Nutt.
  - tools/Makefile.unix:  Make COMMON_DIR work with
    CONFIG_ARCH_BOARD_CUSTOM.  From Xiang Xiao.
  - tools/ Make fragments:  Fix the various minor issue for NUTTXLIBS /
    USERLIBS:  (1) Remove libcxx duplication in FlatLibs.mk and from
    kernel space, (2) Remove libpass1 from KernelLibs.mk since kernel
    build doesn't support the two pass mode, and (3) Remove FSDIR
    related comment since file system cannot be disabled now  From Xiang
    Xiao.

* C Library/Header Files:

  - getcwd():  Remove stray sched_unlock().  Also fixes several typos.
    From Juha Niskanen.
  - date(), hostname():  Fix portability issue with date, hostname  From
    David Alessio.
  - libs/libxx/Kconfig: Automatically select CONFIG_CLOCK_MONOTONIC when
    CONFIG_LIBCXX is selected.  Removed hardcoded -DCLOCK_MONOTONIC from
    CFLAGS in Make.defs of several configurations.  That definition is
    now automatically adding this define when CONFIG_LIBCXX=y.  From
    Daniel Pereira Volpato.
  - libs/libxx/Kconfig:  CONFIG_LIBC_LOCALE is needed to build libcxx.
    A math library is also needed, however, there are various ways to
    provide a math library so CONFIG_LIBM is not now set.  From Matias
    N.
  - libs/libc/symtab:  Move symbol table generation into libc since the
    address in symbol table should come from userspace binary for
    PROTECTED build, not kernel binary.  From Xiang Xiao.
  - libs/libc/ Kconfig files:  Disable EXECFUNCS_HAVE_SYMTAB for kernel
    build.  The symbol table doesn't have any meaning for kernel build
    since all executable binary should be self contained.  From Xiang
    Xiao.

  - include/sys/time.h:  According to earlier standards, usage of
    select(), FD_CLR, FD_ISSET, FD_SET and FD_ZERO just need include
    headers: sys/time.h, sys/types.h and unistd.h.  So include
    sys/select.h in time.h to compatible with it.  Or mbedtls library
    would build break in calling select() and FD_* related functions.
    From liuhaitao.

* Tools:

  - tools/configure.sh and configure.c:  Do not remove CONFIG_SIM_M32 if
    host is specified.  From anchao.
  - tools/Directories.mk:  Remove FSDIRS/NOFSDIRS related logic/comments
    since the file system can no longer be disabled now.  From Xiang
    Xiao.
  - tools/Makefile.host:  Add missing binaries from clean target.  From
    Gregory Nutt.
  - tools/mkromfsimg.sh:  Use sed to add const to ROMFS declarations so
    that they lie in FLASH not RAM.  From Bernd Walter.
  - tools/nxstyle.c:  Correct detection of missing blank line following
    a block comment.  From Gregory Nutt.

* apps/ Build System:

  - Makefiles: Change ${shell pwd} to $(CURDIR) since pwd doesn't exist
    on Windows  From Xiang Xiao.
  - Makefile: Fix warning: jobserver unavailable: using -j1.  Add '+' to
    parent make rule.  From Xiang Xiao.
  - apps/Application.mk:  Correct an error in PATH usage.  Use of
    toolchain path causes make errors.  From Gregory Nutt.

* apps/tools:

  - tools/mkromfsimg.sh:  Use sed to add const to ROMFS declarations so
    that they like in FLASH not RAM.  From Bernd Walter.

* Examples: apps/examples:

  - apps/examples/mount:  Replace illegal call to ramdisk_register()
    with a call to boardctl(BOARDIOC_MKRD).  From Gregory Nutt.
  - apps/examples/nxlines/:  Correct nxlines example program name.  From
    Gregory Nutt.
  - apps/examples/nxterm/:  PROGNAME, PRIORITY, STACKSIZE variable
    names did not match declarations in Kconfig file.  From Gregory
    Nutt.
  - apps/examples/romfs:  Remove romfs_testdir.h.  That file is
    regenerated whenever the example is built and so should not be in
    the repository.  From Gregory Nutt.

* Testing: apps/testing:

  - apps/testing/cxxtest/:  Fix typo error in testing/cxxtest.  From
    Xiang Xiao.
  - apps/testing/unity/:  Fix the error when creating Make.dep.  From
    raiden00pl.

* NSH Library: apps/nshlib:

  - apps/nshlib:  Remove the inappropriate NSH_BUILTIN_APPS coupling.
    From Xiang Xiao.
  - apps/nshlib/:  The NSH mkrd command was in violation of the NuttX
    portable POSIX interface.  It was calling the internal OS function
    ramdisk_register() directly.  Not only is this a violation of the
    interface specification, but also prevents use of mkrd in PROTECTED
    or KERNEL builds. With this change, the NSH mkrd command now uses
    the BOARDIOC_MKRD boardctl() command.  This command is available in
    all build modes.  The effect of this change is to move the heart of
    the NSH mkrd command into to OS and provide user-space access via
    boardctl().  From Gregory Nutt.
  - apps/nshlib/:  Replace direct calls to romdisk_register() with
    indirect calls via boardioctl(BOARDIOC_ROMDISK).  This not only
    fixes the violation of the portable POSIX OS interface, but also
    permits use of ROM disks in PROTECTED and KERNEL modes.  From
    Gregory Nutt.
  - apps/nshlib/:  Add missing NSH_DISABLE_DMESG from Kconfig.  From
    Juha Niskanen.

* System Utilities: apps/system:

  - apps/system/cle/:  This change modifies the cle to use the streams
    file interface more consistently and has removed the observed race
    conditions.  It was previously a mix of streams and fileio.  It
    also simplifies the VT100 cursor position handling.  From Dave
    Marples.
  - apps/system/composite:  Remove usb serial loopback test code we can
    achieve the same effect by cat or dd command.  From Xiang Xiao.
  - apps/system/cu/: (1) Fix early exit.  getc(stdin) can return 0 the
    first time around.  (2) Set optind to zero.  getopt() was being
    left in a bad state, causing parsing errors on second use.  (3) Fix
    priority of cu_listen().  (4) Add suppor for -h.  From David
    Alessio.
  - apps/system/lzf/: Check the protection by CONFIG_SYSTEM_LZF !=
    CONFIG_m (not elf binary) instead of CONFIG_KERNEL_BUILD.  From
    Xiang Xiao.
  - apps/system/spi:  Correctly parse exch txdata args, if any. Should
    always call the board's deselect  From David Alessio.

* File System Utilities: apps/fsutils:

  - apps/fsutils/passwd/:  Use named semaphore by checking
    CONFIG_FS_NAMED_SEMAPHORES instead of CONFIG_KERNEL_BUILD.  From
    Xiang Xiao.

* Network Utilities: apps/netutils:

  - apps/netutils/cjson/Makefile:  Fix the error when creating
    Make.dep.  From raiden00pl.

* Graphics: apps/graphics:

  - apps/graphics/twm4nx/:  Fix a recently introduced error that broke
    all Twm4Nx configurations.  From Gregory Nutt.
  - apps/graphics/traveler/:  Replace direct calls to romdisk_register()
    with indirect calls via boardioctl(BOARDIOC_ROMDISK).  This not only
    fixes the violation of the portable POSIX OS interface, but also
    permits use of ROM disks in PROTECTED and KERNEL modes.  From
    Gregory Nutt.