layout: page released: true apache: false title: 8.1 date: 2019-09-25 summary: > Release v8.1

artifact-root: “https://bitbucket.org/nuttx/nuttx/downloads/” checksum-root: "" key-file: ""

source-os-dist: - “nuttx-8.1.tar.gz” source-app-dist: - “apps-8.1.tar.gz”


{% include JB/setup %}

NuttX-8.1 Release Notes

The 132nd release of NuttX, Version 8.1, was made on September 15, 2019, and is available for download from the Bitbucket.org website. Note that release consists of two tarballs: nuttx-8.1.tar.gz and apps-8.1.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).

The major release version number is only incremented when there is a major change to the OS that makes it more-or-less incompatible with preceding versions. This release bumps the major version number from 7 to 8 due primarily to a major reorganization in the what was the configs/ directory in nuttx-7.31. That directory has been renamed boards/ and now has a directory structure that mirrors the organization of the arch/ directory for the most part:

board/ - Holds all board-related information
board/<arch> - Holds board-related information for all boards that use
  the same CPU architecture.  For example, all ARM-based boards will be
  found under board/arm
board/<arch>/<chip> - Holds board-related information for all boards
  that use the same MCU chip family.  For example, all STM32-based
  boards will be found under board/arm/stm32
board/<arch>/<chip>/<board> - Holds board-related information for a
  specific board.  This is analogous to the configs/<board> directory in
  nuttx-7.31.  So, for example, the STM32F4-Discovery board support that
  was at configs/stm32f4disovery can now be found under
  boards/arm/stm32/stm32f4discovery.
boards/<arch>/<chip>/<board>/<configs> - All configurations for a
  specific board can now be found together in this configs/
  subdirectory.  So, continuing the example, the STM32F4-Discovery NSH
  configuration can now be found at
  boards/arm/stm32/stm32f4discovery/configs/nsh.

In additional, common MCU logic can be found at board///common and MCU common drivers can be found at board///common. Related changes include changes to tools/, comments, and documentation that depend on the board directory structure.

This re-organization is the work of Alin Jerpelea. Not only did Alin do this major directory re-organization, but he ran the code standard compliance tool and corrected every .c and .h file under boards/ so that they all correctly follow the NuttX coding style. These changes were very extensive and, hence, will not be addressed individually in the ReleaseNotes.

You have to give Alin credit for his effort to take on really big jobs and stick with it until it is finished. Kudos!

A more constrained re-organization of the drivers/ directory was also contributed by Augusto Fraga Giachero. Augusto reorganized some driver directories to make better functional associations and also to make space for a new set of RF-related drivers.

Additional new features and extended functionality:

* Core OS:

  - POSIX Message Queues:  Add a test to verify that message queue is
    closed by the same task group that opened it.  If not, then list
    corruption would result.  This test is only performed if
    CONFIG_DEBUG_FEATURES is enabled since it should not normally be an
    issue:  It would be a strange programming practice to open a
    message queue in open task group, then close it in another.  From
    김정찬.
  - Signal Notifications:  Add configuration option to select either the
    high-priority or low-priority work queue for SIG_EVTHREA
    notifications.  From ligd.
  - System Calls:  In order to support built-in in function in protected
    mode, a task_spawn() system call must be supported.  task_spawn()
    and posix_spawn() are NuttX OS interfaces.  In PROTECTED and KERNEL
    build modes, then can be reached from applications only via a system
    call.  Unfortunately this is overly complex because there is a (soft)
    limit of 6 parameters in a system call; task_spawn has seven
    parameters.  This is a soft limit but still difficult to extend
    because it involves assembly language changes to numerous
    architectures.  Better to get more creative.  Rather than extend the
    maximum number of parameters across all architectures, I opted
    instead to marshal the seven parameters into a structure and pass
    only a single parameter:  A pointer to the structure containing the
    seven marshaled parameters.  From Gregory Nutt.
  - /etc/passwd and /etc/group:  Improve the format of the /etc/passwd
    file as used in the sim:nsh configuration.  It is now a little
    more similar to other systems and includes user and group IDs.  Add
    also an /etc/group file to support future testing.  From Gregory
    Nutt.
  - User/Group IDs:  Implement 'real' setuid, getuid, setgid, and getgid
    interfaces is so configured (otherwise fall back to stubs that
    support only the 'root' user ID and group.  Once set, these IDs will
    be inherited by all child task groups.  From Gregory Nutt.
  - Debug Output:  Add debug macros for contactless.  The various
    contactless device drivers currently define device specific debug
    macros within their local header files.  This patch adds generic
    ctls[info|warn|err] macros for the overall contactless subsystem to
    be used in future drivers.  Ported the existing contactless device
    drivers to use these generic logging macros and fixed some logging
    bugs along the way.  From Michael Jung.
  - IOB instrumentation.  Introduces producer/consumer id to every IOB
    call.  This is so that the calls can be instrumented to monitor the
    IOB resources and to collect usage statistics.  From Anthony
    Merlino.
  - IOB ProcFS:  Adding ProcFS support at /proc/iobinfo to show the data
    collected from the IOB instrumentation.  From Anthony Merlino.
  - Versioning:  Report GIT information via ProcFS.  GIT info reported:
    branch, version, GIT hash, hostname, user, build date.  Integrates
    into existing .version and ProcFS.  From David Alessio.

* File System/Block and MTD Drivers:

  - BinFS:  The BinFS file system uses the same built-in library and
    built-in arrays as does NSH.  The built-in arrays are simple name-
    value pairs that map built-in function names with the user-space
    entry point.  In the FLAT build, the built-in arrays are available
    everywhere via the backdoor left open by the FLAT address space.
    In the PROTECTED build, however, the kernel must maintain its own
    reference to the user-space built-in array.  This commit adds those
    kernel globals and a new boardctl(BOARDIOC_BUILTINS) that can be
    used by applications to the provide the built-in list reference to
    the kernel.  From Gregory Nutt.
  - MMC/SD:  Added support for MMC (eMMC) bigger than 2 GB (Tested with
    IMXRT1050EVKB and samsung eMMC 16GB).
  - AT24CSxx:  Register a character driver for UUID of AT24CSxx chips.
    Allows the UUID to read as a file or displayed from an nsh prompt with:
    nsh> hexdump /dev/eeprom.uuid  From David Alessio.
  - Macronix FLASH:  Add support for 4-byte addressing on >128Mb
    Macronix flash parts  From jjlange.
  - MX25Rxx:  Add support for 512B sectors.  From Simon Piriou.
  - SST26:  Accept the 16MBit Flash when reading the JEDEC-ID at
    initialization time.  From Ouss4.

* Network/Network Drivers:

  - IPv4 Options:  Now handles reception of IPv4 packets with larger
    IPv4 headers containing options.  From Gregory Nutt.
  - Sockets:  Re-order the content of all address-family socket
    'connection' structures so that they begin with a common prologue.
    This permits better use of logic for different address family
    types.  From Gregory Nutt.
  - TCP:  Make RTO and WAIT_TIME configurable.  This fix is not really
    correct:  TCP RTO really should be calculated dynamically for each
    TCP connection:  http://sgros.blogspot.com/2012/02/calculating-tcp-rto.html.
    From zhangyuan7.
  - IP Forwarding:  Check if interface is up early on when forwarding to
    avoid extra work.  As noticed in a previous wireless commit, when
    forwarding is enabled and a packet comes in, the packet is attempted
    to be sent on each other netdev without regard for whether it is in
    the UP state.  Of course this is eventually caught, but it can be
    caught earlier to avoid unnecessary work, especially in the 6LoWPAN
    case where a useless packet conversion will occur.  From Anthony
    Merlino.
  - RNDIS:  Expose option to change the number of write requests that
    can be in flight.  From Anthony Merlino.
  - GS2200M:  Add UDP support.  From Masayuki Ishakawa
  - GS2200M:  Implement GS2200M_IOC_IFREQ IOCTL command.  From Masayuki
    Ishikawa.
  - GS2200M:  Enable NuttX's DHCP client instead of GS2200M's DHCP
    client.  From Masayuki Ishikawa.
  - GS2200M:  GS2200M now supports SIOCGIFHWADDR  From Masayuki
    Ishikawa.

* Wireless/Wireless Drivers:

  - IEEE802.15.4 Network Driver:  Allow 64-bit prefix to be configurable
    when auto-configuring the IPv6 address during bring-up.  Previously,
    only the link-local prefix fe80::/64 was used.  Also, put the
    network in the DOWN state at the end of initialization.  From
    Anthony Merlino.
  - IEEE 802.15.4 MAC:  Adds support for energy detect.  Adds support
    for energy detect by introducing a new radio call/callback, as the
    PHY layer is required to perform the energy detect.  From Anthony
    Merlino.
  - IEEE 802.15.4 MAC:  Adds support for getting/setting
    macMaxFrameRetries via IOCTL.  Add get support for rxonidle
    attribute  From Anthony Merlino.
  - IEEE 802.15.4 MAC:  Move the global iobuffer into the macnet struct
    so that more than one macnet device can exist.  From Anthony
    Merlino.
  - IEEE 802.15.4 MAC:  Defer handling of extracting association
    response to LPWORK queue.  From Anthony Merlino.
  - IEEE 802.15.4 Radios:  Support dynamic FCS length.  Adds
    IEEE802154_ATTR_PHY_FCSLEN.  This change introduces
    IEEE802154_ATTR_PHY_FCSLEN which the radio layer can support to
    set/get the FCS length that's added to the end of the frame.  One
    use case, in promiscuous mode, is to add back in the FCS of the
    received frame by increasing the iob->io_len by the FCS length.
    From Anthony Merlino.
  - Xbee:  Support "WR" AT command for writing parameters to non-
    volatile memory.  From Anthony Merlino.
  - Xbee:  Add configuration option for setting the default prefix
    to use when bringing up the network and setting the IP address.
    From Anthony Merlino.

* Other Common Device Drivers:

  - RTC:  If the RTC time is successfully set, then update the current
    system time to match.  From ligd.
  - ADT7320:  Add support for the ADT7320 temperature sensor.  From
    Augusto Fraga Giachero.
  - DAC7554:  Add support to the DAC7554 digital-to-analog converter.
    From Augusto Fraga Giachero.
  - DAT-31R5-SP+: Add support to the DAT-31R5-SP+ digital attenuator.
    Creates a the new device driver directory drivers/rf/ to support
    drivers related to RF peripherals.  It also adds support for the
    DAT-31R5-SP+ digital attenuator.  From Augusto Fraga Giachero.
  - ISL29023:  Add basic driver of ISL29023 ambient light sensor.  The
    basic driver can set operational mode, range, and resolution.  It
    can also read lux value in continuous mode. Interrupt and the alarm
    is not implemented.  From Matous Pokorny.
  - SHT3x:  Add Sensirion SHT3x driver.  From Markus Bernet.

* Simulator:

  - Simulator Build:  Even though the simulation has no "chips", it
    needs to have CONFIG_ARCH_CHIP and chip sub-directories.  Otherwise,
    we would have to treat it as a special case in the build system
    after the changes to the boards/ directory.  From Gregory Nutt.

* Microchip PIC32MZ:

  - PIC32MZ.  Make the PLL input clock configurable.  From Ouss4.

* ARMv7-M

  - Add ARMv7-M setjmp/longjump functions.  From David S. Alessio.

* NXP i.MXRT:

  - i.MXRT Clocking:  Enable TRACE clocks if the divider has been
    defined in the board's board.h file.  From Dave Marples.

* NXP i.MXRT Drivers:

  - i.MXRT QEncoder:  Adds quadrature encoder driver for IMXRT.  From
    Nicholas Chin.
  - i.MXRT uSDHC:  This change completes SDIO support for IMXRT, and
    also adds support for WiFi using the AP6212A module based on Simon
    Piriou's rather excellent work. The patch should also address
    DavidS's concern about width setting for USDHC1 and 2.  Testing of
    the WiFi is minimal so far but functionality is proven.  I'm
    specifically not happy that the driver doesn't recover elegantly
    from a DMA data checksum failure, but that is an issue that can be
    dealt with in due course ... I'm trying to get the rest of the
    interfaces fleshed out and the hardware proven so it can go for pre-
    production build. I _think_ there's only Bluetooth and USB-device
    left to implement now.  From Dave Marples.
  - i.MXRT uSDHC:  IMXRT uSDHC driver cmd line reset logic modified.
    From Ivan Ucherdzhiev.

* NXP/Freescale Kinetis Drivers:

  - Kinetis Serial:  Add possibility to specify pull-up instead of
    open drain for serial single-wire mode.  From Beat Küng.

* NXP LPC17xx/40xx:

  - LPC17xx/40xx Build:  Cortex-M system reset is applicable to
    LPC17xx/40xx too.  From Pavel Pisa.

* NXP LPC17xx/40xx Drivers:

  - LPC17xx/40xx Ethernet:  Follow the procedure listed in the
    LPC176x/5x User Manual when reading from and writing to the PHY's
    registers (section 10.11.14). I couldn't see any behavioral change
    after this commit, but nonetheless is a good practice to follow the
    manufacturer's recommended procedure.  From Augusto Fraga Giachero.

* NXP S31K1xx:

  - Added architecture support for the NXP S32K1xx family.  Basic
    support includes the boot up logic, clock configuration, LPUART
    console, Systick timer, GPIO controls, and eDMA (unverified).

* NXP S31K1xx Drivers:

  - S32K1xx eDMA  Leverage eDMA logic from i.MXRT to S32K1XX.  Appears
    to be the same IP but with fewer channels and features than the
    i.MXRT implementation.  From Gregory Nutt.
  - S32K1xx LPUART:  Bring in the LPUART from i.MXRT.  It is the same
    IP.  From Gregory Nutt.
  - S32K1xx SysTick:  Bring in Cortex-M0+ SysTick and interrupt handling
    from samd2l2; bring in Cortex-M4F Systick and interrupt handling
    from LPC54xx.  From Gregory Nutt.
  - S32K1xx GPIO:  Bring in GPIO logic from Kinetis.  Looks like similar
    IP.  From Gregory Nutt.
  - S32K1xx Ethernet:  Unverified port of the i.MXRT Ethernet driver to
    the S32K1xx.  The i.MXRT uses the same IP.  From Gregory Nutt.
  - S32K1xx LPSPI and LPI2C:  Brings in the LPSPI and LPI2C peripheral
    drivers from the i.MXRT which used the identical IP.  From Gregory
    Nutt.

* NXP S31K1xx Boards:

  - S32K118EVB.  This commit adds initial board support for the NXP
    S32K118EVB development board.  Currently supports only a minimal
    NSH configuration.  From Gregory Nutt.
  - S32K118EVB:  Implement board support for on-board LEDs and buttons.
    This is taken from the Freedom-K66f with has the same LED and
    button configuration as the S32K116EVB and uses the same GPIO IP.
    LEDs, but not buttons, have have been verified.  From Gregory Nutt.
  - S32K146EVB:  Adds initial board support for the S32K146EVB
    development board.  Currently supports a NSH configuration with a
    richer feature set than the minimal configuration of the S32K118EVB.
    From Gregory Nutt.
  - S32K146EVB:  Add support for execution out of SRAM.  This is helpful
    for bring-up when you want to avoid putting a lethal image in FLASH.
    From Gregory Nutt.
  - S32K148EVB:  Add support for the NXP S32K148EVB development board.
    Very similar to the S32K146EVB but with more on-chip memory and
    hardware features.

* Sony CXD56xx

  - CXD56xx:  Migrate CXD56xx common code to the common/ directory:
    Boot code, FLASH code, I2C driver, UID.  From Alin Jerpelea.
  - CXD56xx:  Add SPH.  The SPH is used by the ASMP implementation from
    the SDK.  From Alin Jerpelea.

* Sony CXD56xx Drivers:

  - CXD56xx:  Add sensors connected to the SCU on Spresense board:
    o Avago APDS9930 Proximity and Ambient light Sensor.
    o Rohm BH1721FVC Ambient Light Sensor.
    o Rohm BH1745NUC Color Sensor.
    o Rohm BM1383GLV/BM1383AGLV Pressure Sensor.
    o Rohm BM1422GMV/BM1422AGMV Magnetic Sensor.
    o Bosch BMI160 Sensor support.
    o Bosch BMP280 Barometic Pressure Sensor.
    o Kionix KX022/KX122 Acceleration Sensor.
    o Murata LT1PA01 Proximity and Ambient light Sensor.
    o Rohm RPR0521RS Proximity and Ambient light Sensor.
    o BMI160: add optional I2C address.
    From Alin Jerpelea.
  - CXD56xx:  Add the sensor initialization for CXD56xx boards in the
    common board folder:
    o APDS9930: typo fix
    o cxd56_ak09912 initialization.
    o cxd56_bmi160 initialization.
    o cxd56_apds9960 initialization.
    o cxd56_bh1721fvc initialization.
    o cxd56_bh1745nuc initialization.
    o cxd56_bm1383glv initialization.
    o cxd56_bm1422gmv initialization.
    o cxd56_bmi160 initialization.
    o cxd56_bmp280 initialization.
    o cxd56_kx022 initialization.
    o cxd56_lt1pa01 initialization.
    o cxd56_rpr0521rs initialization.
    o cxd56_sensors initialization.
    o Backup Log driver.
    o crashlog driver.
    o Move gs2200m initialization.
    o Move ili9340 initialization.
    o Move lpm013m091a initialization.
    From Alin Jerpelea.

* Sony CXD56xx Spresense Board:

  - Spresense:  Enable SmartFS and UDP support  From Masayuki Ishikawa.

* STMicro STM32:

  - STM32F4 PLLI2S:  Add support to enable the I2S Phase Locked Loop on
    STM32F427 and STM32F437 MCUs.  From Michael Jung.

* STMicro STM32 Drivers:

  - STM32 ADC:  Add ADC calibration procedure for IP_ADC_V1.  Tested on
    STM32F100, and it magically increased result accuracy.  STM32F103
    has the same calibration procedure.  I am not sure about others.
    From Matous Pokorny.
  - STM32 SPI:  TI Synchronous Serial Frame Format.  The SPI macros on
    STM32 MCUs now support the Texas Instruments Synchronous Serial
    Frame Format protocol (TI protocol).  Defined a new SPIDEV_MODETI
    and add support for it in stm32_spi.c.  From Michael Jung.
  - STM32 UART:  Serial add HW HS on UART 4 & 5.  From David Sidrane.
  - STM32 PWM:  Configure multi-channel duty only if channel specified.
    This allows you to update duty cycle for a single channel.   From
    Mateusz Szafoni.
  - STM32F7 Ethernet:  Add a timeout on MAC reset  From David Sidrane.
  - STM32F7 FLASH:  Exposes stm32_flash_xxx functions.  From Anthony
    Merlino.
  - STM32F7 PWM:  Configure multi-channel duty only if channel specified.
    This allows you to update duty cycle for a single channel.   From
    Mateusz Szafoni.
  - STM32F7 UART:  Serial add HW HS on UART 4 & 5.  From David Sidrane.
  - STM32H7 ADC:  Fix internal channel numbers.  From Markus Bernet.
  - STM32H7 BBSRAM:  Add BBSRAM support.  From David Sidrane.
  - STM32H7 DTCM:  Port DTCM from F7  From David Sidrane.
  - STM32H7 I2C:  Select ARCH_HAVE_I2CRESET in configuration.  From
    David Sidrane.
  - STM32H7 PWM:  Configure multi-channel duty only if channel
    specified.  This allows you to update duty cycle for a single
    channel.  From Mateusz Szafoni.
  - STM32H7 RCC:  Fix RCC register definitions and typos for ADC/UART.
    From Markus Bernet.
  - STM32H7 RTC:  Ported over F7 RTC.  From David Sidrane.
  - STM32H7 SPI:  Allow more clock sources.  From David Sidrane.
  - STM32H7 UART:  Serial add HW HS on UART 4 & 5.  From David Sidrane.
  - STM32H7 UART:  Fix typo in UART8 configuration.  From Markus Bernet.
  - STM32H7 UID:  Ported UID from F7  From David Sidrane.
  - STM32L4 PWM:  Configure multi-channel duty only if channel specified.
    This allows you to update duty cycle for a single channel.   From
    Mateusz Szafoni.
  - STM32L4 UART:  Serial add HW HS on UART 4 & 5.  From David Sidrane.

* STMicro STM32 Boards:

  - B-L475E-IOT01A:  Add mx25rxx memory chip and smartfs support in NSH
    configuration.  From Simon Piriou.
  - LX_CPU:  Add support for the PIKRON LX_CPU board.  From Pavel Pisa.
  - Nucleo-F303RE:  Add basic NSH configuration.  From Mateusz Szafoni.
  - Nucleo-F303RE:  Enable console on UART2 and set entry point to
    nsh_main() in the PWM configuration.  From Mateusz Szafoni.
  - Nucleo-H743ZI:  Add RTC support.  From David Sidrane.
  - Nucleo-L432KC:  Added GPIO drivers for use with /apps/examples/gpio.
    From Daniel P. Carvalho.
  - Nucleo-L432KC:  Added Zero Cross sensor to nucleo-l432kc.  From
    Daniel P. Carvalho.

* TI Tiva:

  - Tiva:  Add support for Tiva TM4C123AH6PM.  From Nathan Hartman.
  - Tiva Configuration:  Modify preprocessor logic to support
    configurations with no UART.  Now similar to logic for other
    architectures.  From Nathan Hartman.
  - Tiva Interrupts:  Add handling for IRQs 128 thru 159.  From Nathan
    Hartman.

* TI Tiva Drivers:

  - TM4C QEncoder:  Reinstate TM4C qencoder driver and expand its
    ioctls. Add TIVA_HAVE_QEI0, TIVA_HAVE_QEI1 as applicable to each
    ARCH_CHIP_TM4C12*.  Rewrite tiva_qe_setup().  Replace tiva_qe_ppr()
    with tiva_qe_resetatppr().  Add tiva_qe_resetatmaxpos() and
    tiva_qe_resetatindex().  Add missing definitions:
    SIGMODE_QUADRATURE, SIGMODE_CLK_AND_DIR, SWAP_NO_SWAP, SWAP_PHA_PHB.
    Rename TIVA QEI ioctl QEIOC_PPR to QEIOC_RESETATPPR; add TIVA QEI
    ioctl identifiers QEIOC_RESETATMAXPOS, QEIOC_RESETATINDEX.  From
    Nathan Hartman.

* TI Tiva Boards:

  - TM4C1294-Launchpad:  Enables /dev/userleds in board bring-up for
    tm4c1294-launchpad by calling userled_lower_initialize() in
    tm4c_bringup().  From Nathan Hartman.

* TI Tiva Drivers:

  - Tiva GPTM timers:  Implement 16-bit PWM mode.  Add
    tiva_pwm16_sel_event() to choose GPTMCTL.TnEVENT value.  Implement
    tiva_pwm_mode16().  This also involved numerous corrections to the
    16-bit timer logic.  Add tiva_timer16pwm_setperiodduty() to set
    initial period, duty cycle, and enable interrupts if requested in
    GPTM peripheral. Interrupts are not enabled in NVIC until
    tiva_timer16_start() is called.  Add tiva_timer16pwm_setduty() to
    update duty cycle at any time.  Add new TIMER_FLAG_* configuration
    flags to enable configuring the 16-bit PWM feature.  Extend type of
    "flags" in tiva_timer32config_s and tiva_timer16config_s from 8- to
    32-bits to allow more flags.  From Nathan Hartman.

* Build System:

  - Export Build:  Export all variables/files to support architecture
    independent build against NSH.  From Pavel Pisa.
  - Application Export:  This change too build tools allows to export
    built-in applications registry into temporarily created directory
    where export archive content is prepared.  If the Makefile in apps/
    directory does not define export:  target then error is print but
    export continues without interruption. It would be more logical to
    print warning but there is no way instruct apps make to not print
    error.  From Pavel Pisa.
  - boards/Board.mk:  Add support to pass dependency paths.  From
    Gregory Nutt.

* Libraries/Header Files:

  - libs/libc/libc.csv:  Add some missing C library functions.  From
    Pavel Pisa.
  - libs/libc/libc.csv: Add ioctl() to fs_ioctl() wrapper for varidic
    case.  From Pavel Pisa.
  - libs/libc/builtin/:  Moves shared built-in information out of
    binfmt/libbuiltin and into libs/libc/builtin where it can be shared
    with applications.  This should permit built-in application in the
    PROTECTED build where binfmt/libbuiltin was not available in user
    space.  From Gregory Nutt.
  - libs/libc/dirent/:  Added alphasort() implemenation, scandir()
    implementation and DT_* definitions to include/dirent.h.  Apparently
    those definitions are not required by POSIX, but are part of
    4.3BSD and available in glibc as well.  From Michael Jung.
  - libs/libc/grp/:  Added stubbed implementations of getgrgid,
    getgrgid_r, getgrnam, getgrnam_r, and initgroups.  These functions
    are essentially stubs pretending that NuttX supported groups and
    that the only configured group in the system was 'root' with gid 0.
    The intend is not to provide meaningful new features, but to ease
    porting of foreign source code to NuttX.  From Michael Jung.
  - libs/libc/machine/arm/armv7-m/:  Add Cortex M4F machine optimized
    fabsf and sqrtf.  From David S. Alessio.
  - libs/libc/pwd/:  Added stubbed implementations.  Added stubbed
    implementations of getpwuid, getpwuid_r, getpwnam, and getpwnam_r.
    These functions are essentially stubs pretending that NuttX
    supported users and that the only configured user in the system
    was 'root' with uid 0.  The intend is not to provide meaningful
    new features, but to ease porting of foreign source code to NuttX.
    From Michael Jung.
  - libs/libc/pwd and libs/libc/grp/:  Modify to get user/group data
    from /etc/passwd and /etc/group if so configured.  From Gregory
    Nutt.
  - libs/libc/stdio/:  Add support for the size_t integer qualifier 'z'
    to the printf family.  This is kind of tricky due the variety of
    sizeof(size_t) on different platforms.  From David Sidrane.
  - libs/libc/unistd.h:  Added stubbed implementations of setuid() and
    setgid().  These functions are essentially stubs pretending that
    NuttX supported users and groups and that the only configured user
    and group in the system were both 'root' with a uid and a gid of 0,
    respectively.  The intent is not to provide meaningful new features,
    but to ease porting of foreign source code to NuttX.  From Michael
    Jung.
  - libs/libc/unistd/:  Add getuid() and getgid() stubs to match
    MichaelJung's setuid() and setgid().  From Gregory Nutt.
  - libc/libc/unistd/:  Add stubs for geteuid(), getegid(), seteuid(),
    setegid(), setreuid(), and setregid().  NuttX does not currently
    support effective user/group IDs, but these stubs will support
    linkage of applications that expect these POSIX standard interfaces.
    From Gregory Nutt.

* Symbol Tables:

  - NuttX provides lists of available syscalls and library functions and
    tools to process them.  The lists can be used to build symbol table
    which allows runtime program loading which can reuse functions
    already compiled into NuttX system image.  List processing,
    compilation and linking to the final system image has been possible
    only under manual control until now.  Provided changes add option
    (CONFIG_EXECFUNCS_GENERATE_SYSTEM_SYMTAB) to build complete list of
    available functions and syscalls automatically.  The symbolic table
    is generated in form libsymtab.a which can be reused by application
    or directly pull in when "g_symtab" and "g_nsymbols" variables are
    requested by EXECFUNCS configuration.  I have tried to follow
    mechanisms for library compilation in different kernel protection
    modes but tested only flat no-MMU build. The basic assumption is
    that this library and libraries providing syscall stubs and C-
    library functions are available in user-space context and initial
    application (usually NSH) registers the symbol table through IOCTL.
    The table can be reused then by another applications in their
    address space as kernel allows. Simple for flat or protected mode,
    I am not sure if really support in MMU mode. It is highly probable
    that I have made some mistake, overlooked something, but the
    functionality is optional (should not cause troubles in any mode if
    disabled) and main purpose is to lower memory overhead when more
    applications are loaded on memory constrained system which usually
    use direct kernel calling without protection or address space
    separation. If the table should be provided by kernel to
    applications then makefiles has to be adjusted.  From Pavel Pisa.

* Tools:

  - tools/:  Change preferred argument of configurations tools to use
    ':' as the delimiter between <board-name> and <config-name>.  This
    is to emphasize that this is not a path; it is configuration
    specification.  The legacy '/' delimiter is still supported but
    not recommend and not advertised.  Updated configurations
    instructions in README.txt files to show ':' delimiter vs '/'
    delimiter.  Update all configuration-related tools to accept ':'
    separator between board and configuration name.  From Gregory Nutt.

* apps/ General:

  - Makefile:  Added support for application-specific export target.
    Used by nuttx/tools/mkexport.sh.  From Pavel Pisa.
  - apps/builtins:  Move apps/builtins/builtin_forindex.c to
    nuttx/libs/libc/builtin since it is required by kernel logic as
    well.  Other changes account for movement of builtin.h from
    nuttx/include/nuttx/binfmt/built.h to nuttx/include/lib/builtin.h.
    From Gregory Nutt.

* Examples/Tests: apps/examples:

  - apps/examples/uid:  Demo used to verify PASSWD and GROUP interfaces.
    From Gregory Nutt.
  - apps/examples/webserver/:  Initialilze network and run forever only
    if not built-in app.  Infer from CONFIG_NSH_BUILTIN_APPS if we are a
    NSH built-in app or not.  If built-in app (CONFIG_NSH_BUILTIN_APPS
    defined) then we assume network is initialized prior to webserver
    starting and we exit on webserver failure.  If running standalone
    (CONFIG_NSH_BUILTIN_APPS is undefined) then behavior is unchanged:
    webserver initializes network and runs forever.  From Nathan Hartman.

* Network Utilities: apps/fsutils:

  - apps/fsutils/passwd:  Handle the improved the format of the
    /etc/passwd file.  It is now a little more similar to other systems.
    From Gregory Nutt.

* Network Utilities: apps/netutils:

  - apps/netutils/dhcpc:  Add host name support to DHCP client.  From
    Masayuki Ishikawa.

* Network Utilities: apps/wireless

  - apps/wireless/ieee802154/i8sak:  I8sak improvements:  (1) Adds
    support for getting/setting maxretries and promsicuous mode from
    i8sak, (2) Fixes a build warning and handles a few cases where a
    fault can occur due to not catching missing arguments.  From
    Anthony Merlino.
  - apps/wireless/ieee802154/i8sak:  Allow setting the endpoint PAN ID.
    From Anthony Merlino.
  - apps/wireless/ieee802154/i8sak:  Adds support for energy scan result
    printout.  From Anthony Merlino.
  - apps/wireless/ieee802154/i8shark:  Adds support for intentionally
    suppressing passing the FCS so that Wireshark doesn't try to
    validate it.  From Anthony Merlino.
  - apps/wireless/ieee802154/libmac:  Adds support for getting/setting
    the FCS length  From Anthony Merlino.
  - apps/wireless/gs2200m:  Add UDP support to the GS2200M driver.  From
    Masayuki Ishikawa.
  - apps/wireless/gs2200m:  Add DHCP client handling in ioctl_request().
    From Masayuki Ishikawa.
  - apps/wireless/gs2200m:  ioctl_request() supports SIOCGIFHWADDR.
    From Masayuki Ishikawa.

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:

  - Priority Inheritance:  Fix a race in telnet with PRIORITY_INHERITANCE
    and SCHED_HPWORK.  Sometimes causes an assertion to fire incorrectly.
    From David S. Alessio.
  - Task Groups:  Correct some naming.  The NuttX task groups have been
    using the acronym 'gid' and also the type 'gid_t' for the the task
    group ID.  That is incorrect.  Than naming is reserved for use with
    group permissions.  So these were all named to grpid and grpid_t so
    that it is clearer that these refer to NuttX task group IDs, and not
    to group permissions.  From Gregory Nutt.
  - Task Termination:  nxtask_signalparent() in task_exithook.c may
    invalidate the group's parent task ID (tg_ppid) too soon.  The
    tg_ppid field is use only to remember the parent tasks ID so that it
    can send the SIGCHLD signal to it.  So it must stay valid until
    SIGCHLD has been sent.  In nxtask_signalparent(), it calls
    nxtask_sigchild() to send SIGCHLD to the parent, then invalidates
    tg_ppid.  That would be okay, except that the SIGCHLD is only sent
    when the last member of the group terminates. That is incorrect;
    tg_ppid can be invalidated too soon and, as a consequence, SIGCHLD
    would never be sent.  Noted by Jeongchan Kim in the Google group:
    https://groups.google.com/forum/#!topic/nuttx/SXd8fVwVKBk  From
    Gregory Nutt.
  - sched_get_rr_interval():  sched_get_rr_interval() should return
    {0,0} if round-robin scheduling is not selected for the task.  From
    Gregory Nutt.
  - SMP Type Collision:  The non-standard, non-portable type cpu_set_t
    was created specifically to support the NuttX internal, SMP
    implementation.  Any resemblance to any other cpu_set_t would be
    purely coincidental.  However it appears that that coincidence has
    occurred.  cpu_set_t has an equivalent, non-standard, non-portable
    type in the GNU C library.  Compilation of libgnat expects this
    non-standard type to be defined.  Who am I to stand in the way of
    progress?  This commit removes the conditioning on CONFIG_SMP so
    that cpu_set_t is typed (as a uint8_t) even if CONFIG_SMP is not
    defined.  Reference:  Bitbucket issue 164.  From Gregory Nutt.
  - Binary Loader:  Change some debug macros from berr() to binfo()
    when dumping module data.  The report of problems is important
    during development but when it enables complete informative output
    about load binaries then the important information can be easily
    overlooked.  The huge output sent to serial terminal slows loading
    significantly as well.  From Pavel Pisa.
  - Power Management:  Fix g_pmcount 16-bits overflow when
    CONFIG_PM_XXENTER_COUNT set big value.  From ligd.
  - Timekeeping:  Fix cases in time conversion that must be >=
    NSEC_PER_SEC, not > NSEC_PER_SEC.  From Gregory Nutt.

* File System/Block and MTD Drivers:

  - opendir():  opendir() set errno to a negative value in one error
    case.  From Michael Jung.
  - SmartFS:  Update smartfs smart_scan() function.  From Simon Piriou.
  - ProcFS:  Add missing LF to cpuload procfs output  From David Alessio.
  - MMC/SD:  Copy/paste error fix in the SDIO-based block driver for
    MMC.  From Ivan Ucherdzhiev.
  - MMC/SD:  Correct a misplaced #endif in the SDIO-based driver.  From
    Gregory Nutt.

* Networking/Network Drivers:

  - Ethernet Configuration:  Ethernet packet buffer size cannot be
    permitted to go below 1294 if IPv6 is selected.  From Gregory Nutt.
  - TCP RST:  Fix outgoing RST packet with wrong ack number.  From
    biantao.
  - TCP Close:  Fix TCP close flow; free the connection after all TCP
    close process finished.  From zhangyuan7.
  - UDP Broadcast:  Remove net stack dependency from CONFIG_NET_BROADCAST.
    This change allows us to use CONFIG_NET_BROADCAST without network
    stack (i.e. usrsock application can use broadcast)  From Masayuki
    Ishikawa.
  - UDP:  Fixes a UDP send copy-paste error in the new SO_LINGER code:
    CONFIG_TCP_NOTIFIER to CONFIG_UDP_NOTIFIER.  From Juha Niskanen.
  - TCP and UDP:  Fix errors in the new implementation of SO_LINGER.
    The tcp_drain() and udp_drain() functions were casting the working
    argument to the wrong type, resulting in hangs and abnormal
    behavior.  There is a complexity in the TCP drain logic when the
    remote peer closes the socket before all Tx data has been flushed.
    Sometimes we are not notified of this case and wait the entire
    timeout unnecessarily.  There is a workaround in place in
    tcp_txdrain(), but this really should be revisited.  From Gregory
    Nutt.
  - 6LoWPAN:  Removes unnecessary conversions that were happening due to
    a misunderstanding of byte ordering with EUI-64.  From Anthony
    Merlino.
  - RNDIS:  Fix issue with DEBUGASSERT when using composite device and
    endpoint numbers not being the default.  From Anthony Merlino.

* Wireless/Wireless Drivers:

  - wireless network devices:  Attach radio to d_buf before registering
    device to handle forwarding case.  When CONFIG_NET_IPFORWARD is
    enabled, and CONFIG_NET_6LOWPAN is being used, a packet that
    attempts to get forwarded on the 6LoWPAN interface will require
    that the radio's buffer be attached to d_buf. Otherwise an assertion
    will fire.  The underlying "radio" in this case is the
    mac802154_netdev.  This behavior has probably not been observed
    because the buffer is normally attached in the periodic txpoll
    worker.  However, in my case, the 6LoWPAN interface was not UP yet,
    and therefore the worker hadn't run yet.  From Anthony Merlino.
  - IEEE 802.15.4 MAC:  Fixes issues with extended address. 1) Extended
    address should be read-only. 2) Extended address should be placed
    in frame in "reverse-canonical" order.  The extended address is a
    read-only attribute and thus an attempt to write the extended
    address should be denied. Instead, the extended address should
    really be either set by the PHY/radio itself, or provided at board
    bring-up time to the radio layer. The MAC layer now pulls in the
    extended address from the radio any time the MAC is reset.  The
    extended address is also supposed to be sent in the frame in
    reverse-canonical order. This is very confusing in the standard and
    it wasn't until I realized it was backwards in Wireshark that I
    researched this further. Searching online I find documents from the
    committee for suggestions/feedback on the future standard.  It isn't
    in the 2015 standard but a newer version of the standard will
    presumably clarify this. It says that the extended address should be
    written in reverse-canonical form, meaning the OUI comes last, not
    first inside the frame.  From Anthony Merlino.
  - IEEE 802.15.4 MAC:  Frame Version should have been 1, but was being
    set to 3 when payload exceeds version 0 capabilities.  Adds warning
    to build to indicate what is noted in the menu for
    CONFIG_MAC802154_NTXDESC  From Anthony Merlino.
  - IEEE 802.15.4 MAC:  Fixes issue where the txdesc's ackreq flag was
    not being set, despite the frame containing a Frame Control field
    with ACKREQ bit set.  From Anthony Merlino.
  - Xbee:  Fix logic to prevent deadlock scenario when there are no
    available IOBs  From Anthony Merlino (2018-12-21).
  - Xbee:  Change assumption about destination address mode for incoming
    frames.  If a short address has been assigned to our radio, then
    assume we were addressed using that.  Otherwise we were addressed
    using our extended address.  From Anthony Merlino.
  - Xbee:  Initialize the short address to the unspecified address and
    query for the extended address on initialization.  From Anthony
    Merlino.
  - Xbee:  Adds CONFIG_XBEE_LOCKUP_WORKAROUND option and corresponding
    logic to workaround an issue where the XBee locks up and stops
    responding.  This typically happens when there is a lot of data
    being received over the link.  When the XBee stops responding, many
    times, querying the XBee kicks it out of this state.  However,
    occasionally the XBee is completely locked up and the XBee has to
    be reset.  This change handles these conditions by periodically
    (if not naturally occurring) querying the XBee.  If during any
    query, the XBee does not respond within a certain number of
    attempts, the XBee is reset.  From Anthony Merlino.
  - Xbee:  Cancel query timeout upon receiving the expected response.
    Add protection for race condition that can cause association
    timeout to continue firing repeatedly  From Anthony Merlino.
  - Xbee:  Detect lockup and reset XBee in xbee_req_data  From Anthony
    Merlino.
  - Xbee:  Fixes one instance of the use of IOBUSER_WIRELESS_MAC802154
    which isn't available without the software MAC layer.  Instead we
    use IOBUSER_WIRELESS_RAD802154 throughout the whole driver since it
    is always available when IEEE 802.15.4 support is enable.  From
    Anthony Merlino.

* Common Drivers:

  - pipes:  Use inode reference counter instead of device reference
    counter to handle dup().  I found that if I dup() a pipe, the
    reference counter d_refs is not increased.  If I close any of the
    fd, backed by the same pipe, the pipe will be freed.  This causes
    any further usage on the fd referencing a non existent pipe.  This
    change uses the inode reference counter, which is properly
    maintained during dup().  From Yang ChungFan.
  - SPI Bitbang:  Fix build error when the SPI bitbang variable width
    support is enabled.  From Augusto Fraga Giachero.
  - GPIO Lower Half:  Remove limitation when pintype >
    GPIO_INTERRUPT_PIN.  From ligd.

* ARMv4/ARMv5

  - Classic ARM7/ARM9:  When performing stability test, the application
    would cause kernel crash. When I trace the stack, I find that
    register R1 has been changed, and its value is the same as register
    CPSR.  In up_fullcontextrestore.S, the restoration of R0 and R1 is
    not atomic:  'msr cpsr r1 will enable interrupts and the recovery of
    r0 and r1 may be interrupted and the value or R1 may be changed.
    Fix is to use a single ldmia to restore R0, R1, and return via R15.
    From Loyen Wang.

* ARMv7-A

  - ARMv7-A:  Fix typo and missing quotation for ARMv7-A.  From Oki
    Minabe.
  - ARMv7-A:  Fix double increment in armv7-a's
    arm_addrenv_destroy_region().  From Oki Minabe.
  - ARMv7-A:  Fix L2 page table mask for ARMv7-A page allocator.  From
    Oki Minabe.

* ARMv7-M

  - Interrupts.  Removes the architecture-common
    CONFIG_ARCH_INT_DISABLEALL configuration option (but which was
    supported only by ARMv7-M).  In the normal course of things,
    interrupts must occasionally be disabled using the up_irq_save()
    inline function to prevent contention in use of resources that may
    be shared between interrupt level and non-interrupt level logic.
    Now the question arises, if we are using BASEPRI to disable
    interrupts and have high priority interrupts enabled
    (CONFIG_ARCH_HIPRI_INTERRUPT=y), do we disable all interrupts except
    SVCall (we cannot disable SVCall interrupts).  Or do we only disable
    the "normal" interrupts?  If we are using the BASEPRI register to
    disable interrupts, then the answer is that we must disable ONLY the
    "normal interrupts".  That is because we cannot disable SVCALL
    interrupts and we cannot permit SVCAll interrupts running at a
    higher priority than the high priority interrupts (otherwise, they
    will introduce jitter in the high priority interrupt response time.)
    Hence, if you need to disable the high priority interrupt, you will
    have to disable the interrupt either at the peripheral that
    generates the interrupt or at the NVIC.  Disabling global interrupts
    via the BASEPRI register cannot effect high priority interrupts.
    From Gregory Nutt.
  - ARMv7-M Priorities:  In the 'normal' case, the priority of the
    SVCALL interrupt was the same as the priority of the high priority
    interrupt.  This means that SVCALL interrupt processing can defer
    the high priority interrupt and result in the jitter in that
    interrupt response.  Fix is to raise the priority of the high
    priority interrupt above the priority of the SVCALL interrupt.
    Suggested by Nathan Hartman.  From Gregory Nutt.

* Microchip i.MXRT Drivers:

  - i.MXRT ENC:  Fix some errors in register bit definitions.  Noted by
    Arie de Muijnck.  From Gregory Nutt.
  - i.MXRT LPI2C:  Slave addresses are now correctly shifted when
    sending START.  TX/RX FIFOs now discarded on error to prevent FIFO
    underflow errors.  Fixes error checking to use priv structure and
    removes checking of BBF flag as it is not an error.  From Nicholas
    Chin.

* Microchip PIC32MZ Drivers:

  - PIC32MZ SPI:  Fix SPI Mode selection.  CKE is the inversion of the
    CPHA.  From Ouss4.

* Microchip/Atmel SAMD2x/SAML2x Drivers:

  - SAMD2/L2 I2C:  Correct time calculation.  From Bernd Walter.

* Microchip/Atmel SAM3/SAM4:

  - SAM3/4:  Add missing DMA configuration Kconfig setting.  From Bernd
    Walter.

* NXP LPC17xx/40xx Drivers:

  - LPC17xx/40xx ADC:  Only use PCLKSEL0 for ADC on LPC176x family.
    From jjlange.
  - LPC17xx/40xx Ethernet:  Set speed back to 10Mbps if 10Mmbps link
    negotiated.  From Augusto Fraga Giachero.
  - LPC17xx/40xx I2C:  Abort I2C transfers if a timeout has occurred.
    If a timeout has occurred in the middle of a I2C transfer, the next
    I2C interrupt should abort any transfers and send a stop condition
    to the corresponding I2C bus.  Failure to do so will result in
    memory corruption / undefined behavior as priv->msgs points to a
    region of memory it doesn't owns anymore after lpc17_40_i2c_start
    returns.  From Augusto Fraga Giachero.
  - LPC17xx/40xx I2C:  Calculate the appropriate timeout for I2C
    transfers.  Depending on the bus frequency and transfer size, I2C
    transactions can take quite a bit, so a fixed timeout is not a
    good solution.  Calculating the timeout at run time poses some
    overhead but still better than aborting long transactions.  From
    Augusto Fraga Giachero.

* NXP/Freescale Kinetis Drivers:

  - Kinetis I2C:  i2c transfer ensure correct result returned.
    kinetis_i2c_transfer released the mutex then fetched the state,
    this resulted in returning the correct results.  From David
    Sidrane.

* NXP LPC17xx/40xx Drivers:

  - LPC17xx/40xx CAN:  If BOARD_CCLKSEL_DIVIDER is not equal to 1 on
    LPC178x or LPC40xx then base clock rate is calculated incorrectly
    because CCLK frequency does not correspond to PLL0 clock which is
    used for PCLK.  This  is partially workaround solution.  It would
    be probably better to define BOARD_PCLK_FREQUENCY even for LPC176x
    targets and use that to replace divisor by base_clock in up_dev_s.
    From Pavel Pisa.

* NXP LPC17xx/40xx Boards:

  - LPC17xx/40xx Ethernet:  Add missing LPC17_40_PHY_CEMENT_DISABLE
    variable to the lpc17xx/40xx Kconfig file.  For some reason this
    setting was not referenced anywhere except in the Ethernet driver.
    From Augusto Fraga Giachero.
  - LPC17xx/40xx Ethernet:  Fix the initialization for DP83848x PHYs.
    The DP83848x requires the RMII mode to be manually enabled through
    the MII_DP83848C_RBR register. Before querying the speed and mode
    it should wait for the link to be established.  From Augusto Fraga
    Giachero.

* NXP i.MXRT Drivers:

  - i.MXRT LPUART:  Fix some errors in the LPUART register definition
    files.  Correct naming of a function:  up_earlyserialinit() should
    be imxrt_earlyserialinit().  Remove prototypes for non-existent
    serial initialization functions.  From Gregory Nutt.
  - i.MXRT USDHC:  uSDHC typo fixes and command transfer error handling
    modified.  From Ivan Ucherdzhiev.

* SiLabs EFM32 Drivers:

  - EFM32 OTG host:  Adam Porter's various fixex for STM32 FS/HS
    probably should be applied to EFM32 host which which has very
    similar IP.  From Gregory Nutt.

* STMicro STM32:

  - STM327F Configuration:  Kconfig add depends on BBSRAM.  From David
    Sidrane.
  - STM32F7 Interrupts:  Fix overwritten IRQ enable.  System boot order
    calls clock_initialize() then up_initalize().  clock_initialize()
    was setting up the alarm IRQ up_initalize is initializing the NVIC.
    This most likely worked in the past due to a bug in the NVIC
    initialization code that failed to clear the Interrupt enables.
  - STM32H7:  Rix BBSRAM name in memory map.  From David Sidrane.
  - STM32H7:  Removed f7 in file path.  From David Sidrane.

* STMicro STM32 Drivers:

  - STM32H7 BBSRAM:  Fix issues causing no writes and hardfaults.  From
    David Sidrane.
  - STM32H7 BBSRAM:  Convince compiler to perform 32 bit write.  From
    David Sidrane.
  - STM32F7 OTGHS:  Fixes bad preprocessor logic preventing USB OTG HS
    to work when used without external ULPI.  From Anthony Merlino.
  - STM32 OTGH[FS|HS] Host  STM32 host only initiates transfer if
    buflenl > 0.  From Adam Porter.
  - STM32F7/H7/L4 OTG host:  Adam Porter's fix for STM32 FS/HS probably
    should be applied to STM32 F7, H7, and L4 OTG host which are very
    similar.  From Gregory Nutt.
  - STM32/F7/H7/L4:  This change was required to get my devices
    (CDC-MBIM) to enumerate.  Initially the system timed out retrieving
    the USB configuration descriptor.  Ctrl IN requests got nothing but
    NAKs.  I found that the initial SETUP packet and corresponding IN
    transfer were fine; it was the Status OUT phase that was getting the
    NAK.  After receiving a NAK on the Status OUT, the code would loop
    back and issue another ctrl IN, which will always fail because the
    data was already transferred before. Thus the entire transfer would
    'timeout'.  The fix I implemented moves the DATANAK timeout loop to
    only apply to the Status OUT.  Both the ctrl IN and the Status OUT
    need their own retry loops.  From Adam Porter.
  - STM32F7 SDMMC:  If there is only one SDMMC it is slot 0  From David
    Sidrane.
  - STM32F7 USART1:  USART1_RXDMA is dependent on STM32F7_DMA2 not
    STM32F7_DMA1  From Anthony Merlino.
  - STM32H7 DBGMCU:  Memory Map DBGMCU is @ 0x5c001000  From David
    Sidrane.
  - STM32F7 SDMMC:  Fix warning when DMA is not enabled.  From David
    Sidrane.
  - STM32H7 Ethernet:  Fix some errors in Ethernet MAC configuration.
    From Markus Bernet.
  - STM32H7 Ethernet:  Correct stm32h7 mac address filtering.  Correct
    the MAC address 0 register definition and remove the 'receive all'
    flag.  Now the Ethernet driver only receives packets addressed to
    correct MAC.  From Jukka Laitinen.
  - STM32H7 Ethernet:  Correct memory corruption error.  The Ethernet
    driver initialization incorrectly wrote to DMACRXCR instead of
    DMACSR when trying to clear the stopped flags.  This caused
    invalid buffer length in the DMACRXCR, causing DMA to overflow the
    RX buffers when large packets are sent to the device.  From Jukka
    Laitinen.
  - STM32H7 PWR:  Ensure data is flushed on backup domain access
    changes.  From David Sidrane.
  - STM32H7 Serial:  Serial fix undefined with TERMIOS  From David
    Sidrane.
  - STM32H7 UARTs:  Fix UART7/8 typos.  Fix bug in ETH_MACQTXFCR
    configuration.  From Markus Bernet.

* STMicro STM32 Boards:

  - Multiple STM32 Boards:  If CONFIG_SCHED_CRITMONITOR is selected,
    then make sure that ITM and DWT resources are enabled before
    accessing ITM and DWT registers.  By default, these registers are
    disabled.  Suggested by Juha Niskanen.  From Gregory Nutt.
  - Nucleo-H743ZI:  Correct logic that determines if the RTC driver is
    available.  Find in build testing.  From Gregory Nutt.
  - Nucleo-G071RB:  Fix linker script to avoid .ARM.exidx section
    overlap with .data  From Daniel Pereira Volpato.
  - Modify all linker scripts (all boards, all architectures) to use
    solution from Daniel P. Volpato.  From Alan Carvalho de Assis.
  - Nucleo-L432KC ADC:  Change analog pins definitions and correct DMA
    related issue.  From Daniel P. Carvalho.

* TI Tiva:

  - Tiva Configuration:  Rename TM4C123GH6PMI identifiers to
    TM4C123GH6PM.  Rationale: In terms of firmware programming, there
    is no functional difference between these parts:  TM4C123GH6PMI7,
    TM4C123GH6PMI7R, TM4C123GH6PMT7, and TM4C123GH6PMT7R.  From a
    programming standpoint, all of the above parts are TM4C123GH6PM,
    which means it doesn't make sense to differentiate between PM and
    PMI. (The PM means 64-LQFP. The I means temperature range -40C to
    +85C. It could be T meaning -40C to +105C. The R means it ships in
    Tape and Reel packaging as opposed to Tray.)  From Nathan Hartman.
  - Tiva Configuration:  Rename TM4C1294NC identifiers to TM4C1294NCPDT.
    Rationale: TM4C1294NC is ambiguous: TM4C1294NCPDT is a 128-TQFP,
    TM4C1294NCZAD is a 212-NFBGA.  The TM4C1294NC part currently
    supported by NuttX is the TM4C1294NCPDT used on the TI EK-TM4C1294XL
    "Connected LaunchPad" (see configs/tm4c1294-launchpad).  To ensure
    the correct part is fully specified, this commit updates all
    TM4C1294NC identifiers to TM4C1294NCPDT.  From Nathan Hartman.
  - Tiva Configuration:  Fix TM4C129XNCZAD part number in Kconfig and
    identifiers.  Rationale: Fully specify that this is the 212-pin BGA
    package (ZAD ending) and for consistency with earlier changes to
    other Tiva TM4C12x part numbers in Kconfig names and identifiers.
    From Nathan Hartman.

* TI Tiva Drivers:

  - Tiva TM4C 1-Wire:  Fix wrong description on define TIVA_1WIRE_BASE:
    Was "EEPROM and Key Locker" (same as the item above). Now "1-Wire
    Master Module." Make DMACTL symbols visible for TM4C123:  Remove
    "#ifdef CONFIG_ARCH_CHIP_TM4C129" guard around UART DMA Control
    (DMACTL) symbols.  These bits are valid on TM4C123 devices, as well
    as on TM4C129. Also, improve the comment on UART_DMACTL_DMAERR.
    From Nathan Hartman.
  - Tiva GPIO Interrupts:  LM3S, LM4F, TM4C: Fix GPIO IRQ error, ports
    R, S, T.  Preprocessor logic for CONFIG_TIVA_GPIOx_IRQS was setting/
    clearing port Q defines when it should act on ports R, S, T.
    gpioport2irq() was missing handling for port T.  From Nathan
    Hartman.
  - Tiva Timers:  Fix minor errors in tiva_timerlib.c.  Fix incorrect
    preprocessor conditionals related to Kconfig defines:
    CONFIG_TIVA_TIMER32_EDGECOUNT -> CONFIG_TIVA_TIMER16_EDGECOUNT,
    CONFIG_TIVA_TIMER32_TIMECAP -> CONFIG_TIVA_TIMER16_TIMECAP,
    CONFIG_TIVA_TIMER32_PWM -> CONFIG_TIVA_TIMER16_PWM.  From Nathan
    Hartman.
  - Tiva Timers: Fix errors in low-level timer support.
    tiva_gptm_configure() and tiva_gptm_release() were calling
    tiva_emac_periphrdy() instead of tiva_gptm_periphrdy().  Fix
    error in "abcde" description of bit flag defines.  From Nathan
    Hartman.
  - Tiva Timers:  Fix one code error and some comment errors.
    tiva_timer16_setinterval(): Was DEBUGASSERTing on mode !=
    TIMER16_MODE.  Fixed to DEBUGASSERT on mode == TIMER16_MODE.
    From Nathan Hartman.

* ZiLOG Z80 Boards:

  - z80sim Serial:  Fix uart_dev_t initializer:  pollfds[] is a array of
    pointers and, hence, the NULL initializer must be included in braces.
    Noted by Paul Osmialowski in Issue #160.  From Gregory Nutt.
  - z80sim Interrupts:  Missed a name change up_irqinitialize to
    z80_irq_initialize.  From Gregory Nutt.

* C Library/Header Files:

  - include/netinet/in.h:  Rename __pad member to sin_zero in struct
    sockaddr_in.  Libwebsockets initializes the 'sin_zero' member of
    sockaddr_in objects to zeros.  Apparently, judging from mailing list
    entries, there are platforms on which not doing this causes
    undefined behavior.  On NuttX compiling respective code is broken,
    as the corresponding member variable is called '__pad'.  Neither in
    the 'nuttx' nor in the 'apps' repository did I find any reference to
    this identifier.  Thus, I believe its a safe bet to just rename it.
    UNIX Network Programming states in this regard:  "The POSIX
    specification requires only three members in the structure:
    sin_family, sin_addr, and sin_port. It is acceptable for a POSIX-
    compliant implementation to define additional structure members, and
    this is normal for an Internet socket address structure. Almost all
    implementations add the sin_zero member so that all socket address
    structures are at least 16 bytes in size."  From Michael Jung.

  - libs/libc/libc.csv:  Correct dependency of setlocale on
    CONFIG_LIBC_LOCALE.  From Pavel Pisa.
  - libs/libc/machine/arm/armv7-m:  Fix build error for ELF.  From
    Masayuki Ishikawa.
  - libs/libc/math.csv:  Correct format of some function entries.  From
    Pavel Pisa.

* Tools:

  - tools/:  Change all occurrences of /bin/(ba)sh in shell scripts to
    /usr/bin/env bash which appears more portable  From Manuel Stühn.

* NSH Library: apps/nshlib:

  - apps/nshlib/:  As noted by David S. Alessio, 'cat' should not output
    any additional newline at the end of the cat'ed file content.  This
    additional newline was added to assure that the NSH prompt was
    presented on a new line.  However, that is not the correct behavior
    of 'cat' per the IEEE std:  "The standard output shall contain the
    sequence of bytes read from the input files. Nothing else shall be
    written to the standard output."  Reference:
    https://pubs.opengroup.org/onlinepubs/009695399/utilities/cat.html.
    This commit changes the function nsh_catfile() which underlies the
    'cat' command and well as other NSH commands.  Although this is the
    correct behavior for 'cat' it may not be the correct behavior for
    other commands implemented via nsh_catfile().  That remains to be
    determined.  From Gregory Nutt.

* System Utilities: apps/system:

  - apps/system/cle/:  ASCII DEL should be treated by Delete-Left.  From
    Dave Marples.
  - apps/system/i2ctool:  (1) Friendlier I2C "knock-knock" uses only
    read request.  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 patch 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].  (2) Modify get/set
    to prevent write of reg index if not specifed  From David Alessio.

* Network Utilities: apps/netutils:

  - apps/netutils/dhcpd:  Fixes bug where hwaddr was being used instead
    of ipaddr in the ARP update.  This bug seems to have been introduced
    three years ago during a rewrite to remove a direct OS call to arp.
    I'm not sure how others have not run into issues with this.  The
    behavior I was observing was that the DHCPD would go to offer an IP
    address, but then send a ARP request for the IP instead because it
    didn't know where to send the data.  From Anthony Merlino.
  - apps/netutils/netinit/:  Remove warnings.  Unhook PHY notification
    signal handler when cleaning up, if an error occurs after the signal
    handler is put into place.  From Nathan Hartman.

* Wireless Utilities: apps/wireless:

  - apps/wireless/ieee802154/i8sak:  Fixes conversion from extended
    address to IPv6 address.  From Anthony Merlino.