NuttX-8.2 --------- The 133rd release of NuttX, Version 8.2, 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). 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: - STM32F0/L0/G0: Add support for STM32G070xx family. From Daniel Pereira Volpato. - STM32F0/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: Enable basic timers. Add TIMx clock frequencies to board.h. 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 GPIO configuration. 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. - 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() cannot 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_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 support 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.