Skip to content
ReleaseNotes 791 KiB
Newer Older
Gregory Nutt's avatar
Gregory Nutt committed
12001 12002 12003 12004 12005 12006 12007 12008 12009 12010 12011 12012 12013 12014 12015 12016 12017 12018 12019 12020 12021 12022 12023 12024 12025 12026 12027 12028 12029 12030 12031 12032 12033 12034 12035 12036 12037 12038 12039 12040 12041 12042 12043 12044 12045 12046 12047 12048 12049 12050 12051 12052 12053 12054 12055 12056 12057 12058 12059 12060 12061 12062 12063 12064 12065 12066 12067 12068 12069 12070 12071 12072 12073 12074 12075 12076 12077 12078 12079 12080 12081 12082 12083 12084 12085 12086 12087 12088 12089 12090 12091 12092 12093 12094 12095 12096 12097 12098 12099 12100 12101 12102 12103 12104 12105 12106 12107 12108 12109 12110 12111 12112 12113 12114 12115 12116 12117 12118 12119 12120 12121 12122 12123 12124 12125 12126 12127 12128 12129 12130 12131 12132 12133 12134 12135 12136 12137 12138 12139 12140 12141 12142 12143 12144 12145 12146 12147 12148 12149 12150 12151 12152 12153 12154 12155 12156 12157 12158 12159 12160 12161 12162 12163 12164 12165 12166 12167 12168 12169 12170 12171 12172 12173 12174 12175 12176 12177 12178 12179 12180 12181 12182 12183 12184 12185 12186 12187 12188 12189 12190 12191 12192 12193 12194 12195 12196 12197 12198 12199 12200 12201 12202 12203 12204 12205 12206 12207 12208 12209 12210 12211 12212 12213 12214 12215 12216 12217 12218 12219 12220 12221 12222 12223 12224 12225 12226 12227 12228 12229 12230 12231 12232 12233 12234 12235 12236 12237 12238 12239 12240 12241 12242 12243 12244 12245 12246 12247 12248 12249 12250 12251 12252 12253 12254 12255 12256 12257 12258 12259 12260 12261 12262 12263 12264 12265 12266 12267 12268 12269 12270 12271 12272 12273 12274 12275 12276 12277 12278 12279 12280 12281 12282 12283 12284 12285 12286 12287 12288 12289 12290 12291 12292 12293 12294 12295 12296
      forks from the main repositories, albeit with many interruptions.
      The completion of this wireless feature will postponed until at
      least NuttX-7.19.

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

    * Core OS:

      - Explicitly initialize the group tg_exitsem with sem_init().  The
        existing logic worked because the correct initialization value is
        all zero, but it is better to initialize the semaphore explicitly.
      - The TCB nchildren field should not be incremented when pthreads are
        created.
      - Move fields related to parent/child task relationship out of TCB
        into group structure where they belong.  Child is a group, not a
        thread.
      - mq_send() was not setting the errno value on certain failures to
        allocate a message.
      - Define 'group' even if HAVE_GROUPID is not set.  From Mateusz
        Szafoni.
      - Vector table should have dimension NR_IRQS, not NR_IRQS+1. From
        Sagitta Li.
      - pthreads:  When a pthread is started, there is a small bit
        of logic that will run on the thread of execution of the new
        pthread.  In the case where the new pthread has a lower
        priority than the parent thread, then this could cause both the
        parent thread and the new pthread to be blocked at the priority of
        the lower priority pthread (assuming that CONFIG_PRIORITY_INHERITANCE
        is not selected). This change temporarily boosts the priority of the
        new pthread to at least the priority of the new pthread to at least
        the priority of the parent thread.  When that bit of logic has
        executed on the thread of execution of the new pthread, it will then
        drop to the correct priority (if necessary) before calling into the
        new pthread's entry point.

    * File System/Block Drivers/MTD Drivers:

      - FAT performance improvement. In large files, seeking to a
        position from the beginning of the file can be very time consuming.
        ftell does lssek(fd, 0, SET_CURR).  In that case, that is wasted
        time since we are going to seek to the same position.  This fix
        short-circuits fat_seek() in all cases where we attempt to seek to
        current position.  Suggested by Nate Weibley.
      - MTD: Fixed cloned typos in several FLASH drivers.  From Aleksandr
        Vyhovanec.
      - mount: Corrects a bad assertion noted by Pierre-noel Bouteville.
        Also fixes a reference counting problem in an error condition:
        When the mountpoint inode is found but is not an appropriate
        mountpoint, the reference count on the inode was not being
        decremented.

    * Common Drivers:

      - Various serial drivers: Fix FIONWRITE and add FIONSPACE.  All
        implementations of FIONWRITE were wrong.  FIONWRITE should return
        the number of bytes waiting in the outgoing send queue, not the free
        space.  Rather, FIONSPACE should return the free space in the send
        queue.
      - Add missing prototype for btn_lower_initialize().
      - Make DAC sample structure packed.  From Marc Rechté.

    * Networking:

      - TCP:  tcp_ipvX_bind() not actually using the port selected with
        port==0.  Also removes duplicate call to pkt_input().  Issues noted
        by Pascal Speck.
      - drivers/net: NET_TUN=y => NET_MULTIBUFFER=y.  From Vladimir
        Komendantskiy.
      - slip driver: Fix calculations using MSEC_PER_TICK.  If
        USEC_PER_TICK is less than 1000, then MSEC_PER_TICK will be
        zero.  It will be inaccurate in any case.

    * Atmel SAM3/4 Drivers:

      - SAM3/4 GPIO: Enable peripheral clock for GPIO port when GPIO is
        configured as input. The value of a GPIO input is only sampled when
        the peripheral clock for the port controller the GPIO resides in is
        enabled.  Therefore we need to enable the clock even when polling a
        GPIO.  From Wolfgang Reissnegger.
      - All SAM Ethernet Drivers: Add support so that the drivers can be
        built with CONFIG_NET_MULTIBUFFER=y.
      - SAM3/4: Fix GPIO pull-up/down code. Enabling the pull-down resistor
        while the pull-up resistor is still enabled is not possible. In this
        case, the write of PIO_PPDER for the relevant I/O line is discarded.
        Likewise, enabling the pull-up resistor while the pull-down resistor
        is still enabled is not possible. In this case, the write of
        PIO_PUER for the relevant I/O line is discarded.  From Wolfgang
        Reißnegger.

    * Atmel SAMV7 Drivers:

      - All SAM Ethernet Drivers: Add support so that the drivers can be
        built with CONFIG_NET_MULTIBUFFER=y.
      - SAM GPIO: Apply Wolfgang's change for SAM3/4 to SAMA5 and SAMV7.

    * Atmel SAMA5:

      - Add missing oneshot max_delay method.
      - All SAM Ethernet Drivers: Add support so that the drivers can be
        built with CONFIG_NET_MULTIBUFFER=y.
      - SAM GPIO: Apply Wolfgang's change for SAM3/4 to SAMA5 and SAMV7.

    * NXP Freescale LPC43xx Drivers:

      - LPC43xx serial: Fix typos in LPC43 serial driver.  Found by Vytautas
        Lukenskas.
      - LPC43xx Serial: There are some small problems in LPC43xx RS485 mode
        configuration. In particular: (1) UART0,2,3 do not have DTR pins
        (different from UART1), so, Kconfig needs to be adjusted. (2)
        lpc43_uart.c in RS485 mode only configures DIR pin, but doesn't
        enable pin output for UART0,2,3. (3) should be option to reverse DIR
        control pin output polarity. (4) lpc43xx/chip/lpc43_uart.h doesn't
        have USART3 definitions.  NOTE: I didn't modified and didn't tested
        USART1, as it has different hardware.  From Vytautas Lukenskas.
        From Vytautas Lukenskas.

    * SiLabs EFM32 Drivers:

      - EFM32 SPI drivers adopted incompatible conventions (See STM32 for
        details of the issue).

    * STMicro STM32 Drivers:

      - STM32, STM32 L4, and EFM32 SPI drivers adopted incompatible
        conventions somewhere along the line.  They set the number of bits
        to negative when calling SPI_SETBITS which had the magical side-
        effect of setting LSB first order of bit transmission.  This is not
        only a hokey way to pass control information but is supported by no
        other SPI drivers.  This change three things:  (1) It adds
        HWFEAT_LSBFIRST as a new H/W feature. (2) It changes the
        implementations of SPI_SETBITS in the STM32 and EFM32 drivers so
        that negated bit numbers are simply errors and it adds the
        SPI_HWFEATURES method that can set the LSB bit order, and
        (3) It changes all calls with negative number of bits from all
        drivers: The number of bits is now always positive and
        SPI_HWFEATURES is called with HWFEAT_LSBFIRST to set the bit order.
      - Add missing SPI2 and SPI3 support for STM32F3F3.  Add STM32F37XX DMA
        channel configuration.  For STM32F37XX, SYSCFG_EXTICR_PORTE defined
        twice.  From Alan Carvalho de Assis.
      - STM32: Make stm32_pwr_enablebkp thread safe.  From Max Neklyudov.
      - Fix bad pllmul values for STM32F1XX connectivity line. STM32F1XX
        connectivity line supports only x4, x5, x6, x7, x8, x9 and x6.5
        values. From Michal Lyszczek.
      - STM32F3 SPI:  Fix the number of bit setting for the F3.  That and
        data packing work differently on the STM32F3 than for other STM32
        parts.
      - STM32 and STM32 L4: Enabling SPI DMA loses other bits in CR2.
      - STM32F3 SPI:  Cannot write always 16-bit value to DR register
        because of how the F3 implements data packing.
      - STM32F411 and STM32F446 map i2c2_sda_4 to different alternate
        function numbers.  From Konstantin Berezenko.
      - STM32 DMA Fix: Change stm32 adc dma callback to send channel
        number instead of index.  From Konstantin Berezenko.
      - STM32 OTGFS device: Fix for lost first word from FIFO

        1) Do not overwrite Reserved Bits in GINTSTS (per ref manual)*
        2) Acknowledge all pending int on entry to ISR that are Only rc_w1*
        3) Do not disable RXFVL*
        4) Loop until RXFVL is cleared*
        5) Only clear the NAK on the endpoint on the OTGFS_GRXSTSD_PKTSTS_SETUPDONE to not loose the first WORD of FIFO all the data  (Bug Fix)

        Changed marked *are just driver clean up and ensure ints are not lost. The bug fix is #5

        Test case open putty and observer the Set/Get LineCoding. Without this fix #5 the Get will not match the Set, and in fact the data might be skewed by 4 bytes, that are lost from the FIFO if the OTGFS_DOEPCTL0_CNAK bit is set in the OTGFS_GRXSTSD_PKTSTS_SETUPRECVD as opposed to the OTGFS_GRXSTSD_PKTSTS_SETUPDONE

        Set Line Coding DATA1: 4B | 00 c2 01 00 00 00 08 | c8 1B
        Get Line Coding DATA1: 4B | .. .. .. .. 00 00 08   c8 .. 00 00 07 | 7a 72

        From David Sidrane.
      - STM32 L4 OTGFS device: Apply stm32 fix to stm32l4.  From Sebastien
        Lorquet.
      - STM32 F7: Remove duplicate call to pkt_input from Ethernet driver.
        Issues noted by Pascal Speck.
      - STM32 L4: Add support for USART3-USART5.  For STM32L4 parts, the
        higher number USART ports supported varies.  Add the HAVE_USARTx
        definitions to the configuration to allow enabling the higher
        numbered USART ports. From Jim Wylder.
      - STM32 USB: Set USB address to avoid a failed assertion.  From
        Pierre-noel Bouteville.
      - STM32 L4 and L7 USB: Pierre's assertion-avoidance change should
        also be applied to STM32 F7 and L4.
      - STM32, L4, and F7:  Remove GPIO_ETH_RMII_TX_CLK. TX_CLK is not
        present in RMII. Mateusz Szafoni.
      - STM32 Ethernet: Correct typo in conditional logic.  From Neil
        Hancock.
      - STM32 L4 USB Device: Fixed L4 USB Driver by avoiding SETUPDONE and
        EPOUT_SETUP.  From David Sidrane.
      - STM32 SPI: stm32_modifycr2 should be available on all platforms if
        DMA is enabled.
      - STM32 DMA2D: fix an error in up_dma2dcreatelayer where an invalid
        pointer was returned when a certain underlying function failed.
        From Jens Gräf.

    * TI Tiva Drivers:

      - Fix two bugs of tiva pwm lower-half driver implementation. From
        Young.
      - Tiva Ethernet:  Needs support for CONFIG_NET_MULTIBUFFER=y.

    * C Library/Header Files:

      - lib_dumpbuffer() now prints a large on-stack buffer first to avoid
        problems when the syslog output is prefixed with time.  From
        Pierre-noel Bouteville.
      - libc/math: This fixes the following libc/math issues: (1) asin[f l]()
        use Newton’s method to converge on a solution. But Newton’s method
        converges very slowly (> 500,000 iterations) for values of x close to
        1.0; and, in the case of asinl(), sometimes fails to converge (loops
        forever). The attached patch uses an trig identity for values of
        x > sqrt(2). The resultant functions converge in no more than 5
        iterations, 6 for asinl().  (2) The NuttX erf[f l]() functions are
        based on Chebyshev fitting to a good guess. The problem there’s a
        bug in the implementation that causes the functions to blow up with
        x near -3.0. This patch fixes that problem. It should be noted that
        this method returns the error function erf(x) with fractional error
        less than 1.2E-07 and that’s fine for the float version erff(), but
        the same method is used for double and long double version which
        will yield only slightly better precision. This patch doesn't
        address the issue of lower precision for erf() and erfl(). (3) a
        faster version of copysignf() for floats is included. From David S.
        Alessio.
      - strtod() was not returning endptr on error conditions.
      - libc/math: floor(), floorf(), and floorl():  Fix logic error.  Was
        not correctly handling negative integral value.
      - isatty() should be prototyped in unstid.h, not termios.h.  From
        Sebastien Lorquet.
      - nxglib: Fix handling of near-horizontal lines of width 1 in
        nxgl_splitline().  Missing handling for degenerate condition caused
        width 1 lines such as (0, 0) - (100, 10) to have gaps in the
        drawing. From Petteri Aimonen.

    * Build/Configuration System:

      - Top-Level Makefiles:  Fix a chicken-and-egg problem. In the menuconfig
        target, the context dependency was executed before kconfig-mconf.  That
        was necessary because the link at apps/platform/board needed to be set
        up before creating the apps/Kconfig file.  Otherwise, the platform
        Kconfig files would not be included.  But this introduces the chicken-
        and-egg problem in some configurations. In particular:  (1) An NX
        graphics configuration is used that requires auto-generation of
        source files using cpp, (2) the configuration is set for Linux, but
        (3) we are running under Cygwin with (4) a Windows native toolchain.
        In this case, POSIX-style symbolic links are set up but the Windows
        native toolchain cannot follow them. The reason we are running
        'make menuconfig' is to change from Linux to Cygwin, but the target
        fails.  During the context phase, NX runs CPP to generate source files
        but that fails because the Windows native toolchain cannot follow
        the links.  Checkmate.  This was fixed by changing all of the make
        menuconfig (and related) targets.  They no longer depend on context
        being run.  Instead, they depend only on the dirlinks target.  The
        dirlinks target only sets up the directory links but does not try
        to run all of the context setup; the compiler is never invoked; no
        code is autogenerated and things work.
      - CXXFLAGS: add -fcheck-new whenever -fno-exceptions is used. From
        Beat Küng.

    * Tools

      - tools/refresh.sh: Recent complexities added to apps/ means that
        configuration needs the correct Make.defs file in place in order to
        configure properly.
      - tools/kconfig2html.c: Update to handle absolute paths when sourcing
        Kconfig files.
      - tools/mkfsdata.pl was still generating the old-style apps/include
        inclusion paths.

    * Application Build/Configuration System:

      - Add DIRLINK and DIRUNLINK tool definitions to apps/Make.defs.

    * apps/nshlib:

      - Fix FIFO_SIZE vs PIPE_SIZE.
      - Fix hex representation of IP address in Kconfig.  Noted by Michal
        Lyszczek.
      - nsh_syscmds.c: missing semicolon.  From Mateusz Szafoni.
      - In system command, don't try to flush output streams if stdio
        buffered I/O is not supported.

    * apps/canutils:

      - libuavcan: Under certain circumstances, DELIM is not be defined in
        Makefile.
      - Add definition for APPNAME in apps/canutils/canlib.  From Sebastien
        Lorquet.

    * apps/gpsutils:

      - Fix an error minmea.  From Aleksandr Vyhovanec.

    * apps/examples:

      - apps/examples/oneshot:  If the requested delay is > max_delay, then
        break the delay up into several pieces.

NuttX-7.19 Release Notes
------------------------

The 119th release of NuttX, Version 7.19, was made on December 26, 2016,
and is available for download from the Bitbucket.org website.  Note
that release consists of two tarballs:  nuttx-7.19.tar.gz and
apps-7.19.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:

      - sched/semaphore, sched/phread/, libc/semaphore, libc/pthread: Add
        pthread_mutexattr_get/set_protocol and non-standard
        sem_get/set_protocol. These may use to enable or disable priority
        inheritance on a single semaphore.
      - Spinlocks:  Added capability to provide architecture-specific memory
        barriers.
      - SMP: Add spin_trylock().  Use this in conditions where other CPUs need
        to stopped but we cannot call enter_critical_section().
      - sched note:  Extend OS instrumentation to include some SMP events.
        Also add spinlock instrumentation;  In SMP configurations, add a
        filter mask to log only notes from certain CPUs.
      - sched note:  Permit spinlock and critical section notes in in-memory
        buffer iff sched_not_get() interfaces is disabled.
      - sched note:  Add additional note to see if/when CPU is started in SMP
        mode.
      - sched note:  Record ID enumeration now results on constant values; ID
        values do not change with configuration.  This makes writing post-processing software much easier.
      - boardctl:  Add new boardctl() command, BOARDIOC_NX_START, to start the
        NX server as a kernel thread.
      - pthreads:  Add pthread_cleanup_push() and pthread_cleanup_pop().
      - pthreads: Added pthread_setcanceltype() and pthread_testcancel().
      - pthreads: Add support for cancellation points.
      - task_delete() now obeys all cancellation point semantics.
      - Add task_setcancelstate(), task_setcanceltype(), and
        task_testcancel().  These are non-standard interfaces analogous to the
        correponding pthread_ interfaces that provide cancellation controls
        for tasks.

    * Graphics/Display Drivers:

      - boardctl:  Add new boardctl() command, BOARDIOC_NX_START, to start the
        NX server as a kernel thread.

    * Networking/Network Drivers:

      - Network drivers:  Add option to use low-priority work queue to all
        Ethernet and MAC level drivers.
      - Network Drivers:  Adapt all Ethernet (and other MAC) drivers to work
        as though CONFIG_NET_MULTIBUFFER were set.  Remove all references to
        CONFIG_NET_MULTIBUFFER.
      - Eliminate CONFIG_NO_NOINTS.  There is no longer any support for
        interrupt level processing of the network stack. Lots of files changed.

    * Other Common Device Drivers:

      - Vishay VEML6070:  Add Vishay VEML6070 driver.  From Alan Carvalho de
        Assis.

    * ARMv7-A

      - ARMv7-A/i.MX6:  Add SCU register definitions.  Add some controls to
        enable SMP cache coherency in SMP mode.  Makes no difference, however
        -- cache still incoherent on i.MX6.
      - ARMv7 GIC: SGIs are non-maskable but go through the same path as
        other, maskable interrupts.  Added logic to serialize SGI processing
        when necessary.

    * Atmel SAM3/4:

      - SAM3/4:  Add SMP support for the dual-core SAM4CM.  From Masayuki
        Ishikawa.

    * Atmel SAM3/4 Drivers:

      - Add support for the SAM5CMP-DB board.  From Masayuki Ishikawa.

    * Atmel SAM3/4 Boards:

      - SAM4CMP-DB:  Add support for the Atmel SAM4CMP-DB board running in an
        SMP configuration.  From Masayuki Ishikawa.
      - SAM4CMP-DB: Add hooks to auto-mount the procfs file system on startup
        in board bring-up logic.

    * Atmel SAMV7 Drivers:

      - SAMv7:  Register the watchdog device at the configured device path
        CONFIG_WATCHDOG_DEVPATH vs. hard-coded /dev/wdt.  From Frank Benkert.

    * Calypso

      - Calyps: Remove all Calypso board configurations.  Remove Calypso
        architecture support and support for Calypso SERCOMM driver.

    * Misoc LM32:

      - Misoc LM32:  Adds basic support for the Misoc procoessors and the LM32
        in particular.  From Ramtin Amin.
      - Misoc LM32:  Add signal handling logic.  From Ramtin Amin.
      - Misoc LM32:  Add logic to flush/invalidate caches.  From Ramtin Amin.

    * Misoc LM32 Drivers:

      - Misoc LM32 Serial:  Add interrupting Misoc serial driver.  From Ramtin
        Amin.
      - Misoc LM32 Timer:  Add timer driver.  From Ramtin Amin.
      - Misoc LM32:  Add Misoc Ethernet driver  From Ramtin Amin.

    * Misoc LM32 Boards:

      - Misoc LM32 Qemu:  Board support for testing Misoc LM32 with Qemu. From
        Ramtin Amin.
      - Misoc LM32 Qemu:  Integrate network support into configs/misoc/hello.
        From Ramtin Amin.
      - Misoc LM32 Qemu:  Remove configs/misoc/include/generated directory.  I
        suppose the intent now is that this is a symbolic link?  DANGER!
12421 12422 12423 12424 12425 12426 12427 12428 12429 12430 12431 12432 12433 12434 12435 12436 12437 12438 12439 12440 12441 12442 12443 12444 12445 12446 12447 12448 12449 12450 12451 12452 12453 12454 12455 12456 12457 12458 12459 12460 12461 12462 12463 12464 12465 12466 12467 12468 12469 12470 12471 12472 12473 12474 12475 12476 12477 12478 12479 12480 12481 12482 12483 12484 12485 12486 12487 12488 12489 12490 12491 12492 12493 12494 12495 12496 12497 12498 12499 12500 12501 12502 12503 12504 12505 12506 12507 12508 12509 12510 12511 12512 12513 12514 12515 12516 12517 12518 12519 12520 12521 12522 12523 12524 12525 12526 12527 12528 12529 12530 12531 12532 12533 12534 12535 12536 12537 12538 12539 12540 12541 12542 12543 12544 12545 12546 12547 12548 12549 12550 12551 12552 12553 12554 12555 12556 12557 12558 12559 12560 12561 12562 12563 12564 12565 12566 12567 12568 12569 12570 12571 12572 12573 12574 12575 12576 12577 12578 12579 12580 12581 12582 12583 12584 12585 12586 12587 12588 12589 12590 12591 12592 12593 12594 12595 12596 12597 12598 12599 12600 12601 12602 12603 12604 12605 12606 12607 12608 12609 12610 12611 12612 12613 12614 12615 12616 12617 12618 12619 12620 12621 12622 12623 12624 12625 12626 12627 12628 12629 12630 12631 12632 12633 12634 12635 12636 12637 12638 12639 12640 12641 12642 12643 12644 12645 12646 12647 12648 12649 12650 12651 12652 12653 12654 12655 12656 12657 12658 12659 12660 12661 12662 12663 12664 12665 12666 12667 12668 12669 12670 12671 12672 12673 12674 12675 12676 12677 12678 12679 12680 12681 12682 12683 12684 12685 12686 12687 12688 12689 12690 12691 12692 12693 12694 12695 12696 12697 12698 12699 12700 12701 12702 12703 12704 12705 12706 12707 12708 12709 12710 12711 12712 12713 12714 12715 12716 12717 12718 12719 12720 12721 12722 12723 12724 12725 12726 12727 12728 12729 12730 12731 12732 12733 12734 12735 12736 12737 12738 12739 12740 12741 12742 12743 12744 12745 12746 12747 12748 12749 12750 12751 12752 12753 12754 12755 12756 12757 12758 12759 12760 12761 12762 12763 12764 12765 12766 12767 12768 12769 12770 12771 12772 12773 12774 12775 12776 12777 12778 12779 12780 12781 12782 12783 12784 12785 12786 12787 12788 12789 12790 12791 12792 12793 12794 12795 12796 12797 12798 12799 12800 12801 12802 12803 12804 12805 12806 12807 12808 12809 12810 12811 12812 12813 12814 12815 12816 12817 12818 12819 12820 12821 12822 12823 12824 12825 12826 12827 12828 12829 12830 12831 12832 12833 12834 12835 12836 12837 12838 12839 12840 12841 12842 12843 12844 12845 12846 12847 12848 12849 12850 12851 12852 12853 12854 12855 12856 12857 12858 12859 12860 12861 12862 12863 12864 12865 12866 12867 12868 12869 12870 12871 12872 12873 12874 12875 12876 12877 12878 12879 12880 12881 12882 12883 12884 12885 12886 12887 12888 12889 12890 12891 12892 12893 12894 12895 12896 12897 12898 12899 12900 12901 12902 12903 12904 12905 12906 12907 12908 12909 12910 12911 12912 12913 12914 12915 12916 12917 12918 12919 12920 12921 12922 12923 12924 12925 12926 12927 12928 12929 12930 12931 12932 12933 12934 12935 12936 12937 12938 12939 12940 12941 12942 12943 12944 12945 12946 12947 12948 12949 12950 12951 12952 12953 12954 12955 12956 12957 12958 12959 12960 12961 12962 12963 12964 12965 12966 12967 12968 12969 12970 12971 12972 12973 12974 12975 12976 12977 12978 12979 12980 12981 12982 12983 12984 12985 12986 12987 12988 12989 12990 12991 12992 12993 12994 12995 12996 12997 12998 12999 13000
        This means that you cannot compile this code with first generating
        these files a providing a symbolic link to this location!   There is a
        sample directory containing generated sources.  This is really only
        useful for performing test builds.  You really must generate the Misoc
        architecture for a real-life build.  From Ramtin Amin.

    * NXP Freescale i.MX6 Drivers:

      - i.MX6:  Add an untested SPI driver taken directly from the i.MX1 port.

    * NXP Freescale Kinetis:

      - Kinetis:  Added missing headers.  Kinetis broke out SPI to
        kinetis/kinetis_spi.h. Broke out DMA to use the modern Nuttx chip
        inclusion - still STUBS.  Add Kinetis support for ARMV7-M Common
        Vector and FPU.  Allow CONFIG_ARMV7M_CMNVECTOR,
        CONFIG_STACK_COLORATION, CONFIG_ARCH_FPU.  Fix  i2c driver offset
        swapped for value in kinetis_i2c_putreg.  From David Sidrane.

    * NXP Freescale Kinetis Drivers:

      - Kinetis: Add UID Unique ID.  From Neil Hancock.

    * NXP Freescale Kinetis Boards:

      - Freedom-K64F board: Add support for UID Unique ID.  From Neil Hancock.

    * NXP Freescale LPC17xx Boards:

      - Olimex-LPC1766-STK:  Enable procfs in NSH configuration. Automount
        /proc on startup.

    * NXP Freescale LPC43xx Drivers:

      - LPC43xx: Add timer driver:  From Alan Carvalho de Assis.
      - LPC43xx GPDMA driver:  The GPDMA block is basically the same as the
        LPC17xx.  Only the clock configuration is different and LPC43xx has
        four different DMA request sources, where LPC17xx has only two. From
        Alan Carvalho de Assis.

    * NXP Freescale LPC43xx Boards:

      - Bambino 200E:  Add basic support to Micromint Bambino 200E board.
        This includes contributions from Jim Wolfman.  From Alan Carvalho de
        Assis.
      - Bambino 200E:  Add support for timer driver.  From Alan Carvalho de
        Assis.

    * RGMP:

      - Remove RGMP and RGMP drivers.

    * RISC-V:

      - RISC-V: Add support for the RISC-V architecture and
        configs/nr5m100-nexys4 board.  The board support on this is pretty
        thin, but it seems like maybe a good idea to get the base RISC-V stuff
        in since there are people interested in it.  From Ken Pettit.

    * STMicro STM32 Drivers:

      - STM32 F3:  Implemention of the STM32 F37xx SDADC module. There are
        also changes to ADC, DAC modules. SDADC has only been tested in DMA
        mode and does not support external TIMER triggers. This is a work in
        progress.  From  Marc Rechté.
      - STM32 F3:  Add PWM driver support for STMF37xx.  The changes have been
        tested successfuly for TIM4 and TIM17 (different IPs).  From  Marc
        Rechté.
      - STM32 F4:  Support oversampling by 8 for the STM32 F4. From David
        Sidrane.
      - STM32 F4:  Added Timers 2-5 and control of SAI and I2S PLLs.  Added
        support for stmf469 SAI and I2S PLL configuration and STM446 fixes.
        From David Sidrane.
      - STM32 F4:  Expanded OTGFS support to stm32F469 and stm32f446.  Added
        missing bit definitions, Used stm32F469 and stm32f446 bit
        definitions,  Removed unsed header file.  From David Sidrane.
      - STM32 F4:  Allow dma in 1 bit mode in STM32F4xxx.  From David Sidrane.
      - STM32 F7:  Allow the config to override the clock edge setting.  From
        David Sidrane.
      - STM32 L4:  Support Complementary PWM outputs on STM32L4.  From
        Sebastien Lorquet.
      - STM32 L4:  Add implementation of dumpgpio for stm32l4, was required
        for pwm debug. From Sebastien Lorquet.

    * STMicro STM32 Boards:

      - STM32F103 Minimum:  Add button support.  From Alan Carvalho de Assis.
      - STM32F103 Minimum:  Add support to PWM on STM32F103-Minimum board.
        From Alan Carvalho de Assis.
      - STM32F103 Minimum:  Add RGB LED support on STM32F103 Minimum board.
        From Alan Carvalho de Assis.
      - STM32F103 Minimum:  Add Vishay VEML6070 driver support to the
        STM32F103-Minimum board.  From Alan Carvalho de Assis.
      - Nucleo-F303RE:  Add STM32 F303RE hello configuration.   From Marc
        Rechté.
      - Nucleo-L476:  Support PWM testing on board Nucleo L476.  From
        Sebastien Lorquet.
      - Nucleo L476:  Add support for timers to Nucleo L476.  From Sebastien
        Lorquet.
      - Hymini STM32v:  Enable CONFIG_RTC in the hymini-stm32v/nsh2
        (kitchensink) config. From Maciej Wójcik.
      - Olimex STM32-p407:  Add support for the Olimex STM32 P407 board.

    * TI Tiva Drivers:

      - Tiva PWM: Support PWM_PULSECOUNT feature for TI tiva.  From Young.Mu.

    * Xtensa/ESP32

      - Xtensa ESP32:  Basic architectural support for Xtensa processors and
        the Expressif. ESP32 added.
      - Xtensa ESP32:  Add EXPERIMENTAL hooks to support lazy Xtensa
        co-processor state restore in the future.
      - Xtensa ESP32:  Basic port is function in both single CPU and dual CPU
        SMP configurations.  There is an NSH configuration for each CPU
        configuration.  Outstanding issues include missing clock configuration
        logic, missing partition tables to support correct configuration from
        FLASH, and some serial driver pin configuration issues.
      - Xtensa ESP32: Add stack checking logic.

    * Xtensa/ESP32 Boards:

      - ESP32 Core v2:  Basic support for Expressif ESP32 Core v2 board
        added.  The initial release includes an NSH and an SMP test
        configuration.
      - ESP32 Core v2:  Add configuration to support linking NuttX for
        execution out of IRAM.
      - ESP32 Core v2:  Automatically mount /proc at start-up.
      - ESP32 Core v2:  Add an OS test to verify the port.

    * C Library/Header Files:

      - libc/locale:  Add a dummy setlocale() function to avoid drawing the
        function from newlib.  Add clocale header file.
      - include/locale.h:  Modify locale.h to add localeconv() and lconv
        structure.  From Alan Carvalho de Assis.
      - libc/locale:  Allows c++ code to compile with or without
        CONFIG_LIBC_LOCALE and will generate a link error if
        CONFIG_LIBC_LOCALE is not defined and setlocale is referenced. With
        CONFIG_LIBC_LOCALE defined setlocale will act as if MB string is not
        supported and return "C" for POSIX. C and "". From David Sidrane.
      - libc/wchar:  Add wcslen, wmemchr, wmemcmp, wmemcpy wmemset, btowc,
        mbrtowc, mbtowc, wcscmp, wcscoll, and wmemmove to NuttX.  From Alan
        Carvalho de Assis.
      - libc/wctype:  Add functions wcrtomb, wcslcpy, wcsxfrm, wctob, wctomb,
        wctype, localeconv, strcoll, strxfrm, swctype, towlower, towupper and
        wcsftime.   Add wctype.h; Move lib_wctype.c to libc/wctype.  From Alan
        Carvalho de Assis.
      - include/ctype.h : Add isblank() macro to ctype.h.  From Alan Carvalho
        de Assis.
      - lic/stdlib:   Add strtof() and strtold() as simply a copy of strtod
        with types and limits changed.
      - sscanf():  Use strtof() instead of strtod() if a short floating point
        value was requested.  The should help performance with MCUs with
        32-bit FPU support with some additional code size.
      - sscanf(): Add scansets to the scanf function. Enabled
        CONFIG_LIBC_SCANSET option.  From  Aleksandr Vyhovanec.
      - include/inttypes.h: Add architecture-specific inttypes.h.  From Paul
        A. Patience.
      - C Library:  Allow option to enable IP address conversions even when
        the IP address family is not supported.

    * Build/Configuration System:

      - The Smoothie project needs to compile C++ inside config/boardname/src/
        to use with High Priority Interruption, then I modified the board
        configs Makefile to support it.  It works fine for the first time
        compilation, but if we execute "touch config/boardname/src/Pin.cxx"
        and execute "make" it will not detect that Pin.cxx was modified. I
        think there is some other place I should modify, but I didn't find
        it.  From Alan Carvalho de Assis.

    * Tools:

      - tools/: Add tools/showsize.sh.

    * NSH: apps/nshlib:

      - NSH: dd command will show statistics.  From  Masayuki Ishikawa.

    * Applications: apps/system:

      - apps/system/sched_note:  Extend to include additions to instumentation
        for SMP.
      - apps/system/sched_note:  Add support for spinlock notes.
      - apps/system/sched_note:  Add support for new scheduler instrumentation.

    * Platforms: apps/platform:

      - ESP32 Core v2:  Add platform support for the ESP32 core v2 board.
      - Olimex STM32-p407: Add platform support for the Olimex STM32 P407.

    * Graphics: apps/graphics

      - graphics/traveler/tcledit and libwld:  Add an X11 Tcl/Tk tool that can
        be used to edit Traveler world files.
      - Graphics: Remove all NX server taks.  Instead, call boardctl() to the
        NX server kernel thread.

    * Applications: apps/examples:

      - examples/buttons:  Add a new buttons example that uses the button
        character driver instead of the architecture buttons directly. From
        Alan Carvalho de Assis.
      - examples/cctype:  Add an example to verify cctype functions.
      - Remove RGMP example.
      - examples/ostest:  Extend the pthread cancellation test to exercise
        pthread_cleanup_push() (and pthread_cleanup_pop() indirectly via
        pthread_cancel() and pthread_exit().
      - examples/ostest: enhance pthread cancellation test some.

Works-In-Progress:

    * IEEE802.14.5/6LowPAN.  Hooks and framework for this effort were
      introduced in NuttX-7.15.  Work has continued on this effort on
      forks from the main repositories, albeit with many interruptions.
      The completion of this wireless feature will postponed until at
      least NuttX-7.20.

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

    * Core OS:

      - sched/semaphore: Within the OS, when a thread obtains a semaphore
        count it must call sem_addholder() if CONFIG_PRIORITY_INHERITANCE is
        enabled.  If a count is available, then sem_wait() calls
        sem_addholder(), otherwise it waited for the semaphore and called
        sem_addholder() when it eventually received the count.  This caused a
        problem when the thread calling sem_wait() was very low priority.
        When it received the count, there may be higher priority threads
        "hogging" the CPU that prevent the lower priority task from running
        and, as a result, the sem_addholder() may be delayed indefinitely.
        The fix was to have sem_post() call sem_addholder() just before
        restarting the thread waiting for the semaphore count.  This problem
        was noted by Benix Vincent who also suggested the solution.
      - Many files: Make sure that priority inheritance is not enabled for
        semaphores whose primary use is signaling (vs locking of resources) by
        calling sem_setprotocol().
      - sched/semaphore:  sem_trywait() no longer modifies the errno value
        UNLESS an error occurs.  This allows these functions to be used
        internally without clobbering the errno value.  From Freddie Chopin.
      - sched/clock: Correct clock initialization.  The correct range for the
        month is 0-11 but is entered as 1-12 in the .config file.  Add ranges
        to START_YEAR, MONTH, and DAY in sched/Kconfig.
      - sched/clock:  Correct calculation for the case of Tickless mode with a
        32-bit timer.  In that case, the calculation was returning millisecond
        accuracy.  That is not good when the timer accuracy is < 1 msec.  From
        Rajan Gill.
      - Work Queue:  When queuing new LP work, don't signal any threads if
        they are all busy.  From Heesub Shin.
      - Work Queue: Signal sent from work_signal() may interrupt the low
        priority worker thread that is already running. For example, the
        worker thread that is waiting for a semaphore could be woken up by the
        signal and break any synchronization assumption as a result. It also
        does not make any sense to send signal if it is already running and
        busy. This change fixes it.  From Heesub Shin.
      - Fix DEBUGASSERT() in group_signal.c.  From Masayuki Ishikawa.
      - Eliminate bad boardctl() commands:  Remove all references to
        BOARDIOC_PWMSETUP and board_pwm_setup(). Remove all references to
        BOARDIOC_ADCSETUP and board_adc_setup(). Remove
        BOARDIOC_CAN_INITIALIZE.  CAN initialization is now done in the board
        initialization logic just like every other device driver.
      - pthreads:  Fix an error in pthread_mutex_destroy().  An error could
        occur while destroying a mutex after a pthread has been canceled while
        holding the mutex.
      - task_restart: Make sure new task starts with pre-emption disabled and
        not in a critical section.
      - Enter/leave Critical Sections.  Major redeign to
        enter/leave_critical_section logic to deal with the case where
        interrupts are disabled only on the local CPU.  In this case, some
        rather complex spinlocks must be used to maintain the critical section
        accross all CPUs.
      - SMP Critical Sections:  Fixes for the SMP case: (1) Change order for
        SMP case in enter_critical_section:  (1) Disable local interrupts
        BEFORE taking spinlock and (2) If SMP is enabled, if any interrupt
        handler calls enter_critical_section(), it should take the spinlock.
      - SMP wdogs:  Wdog timers use a tasking interface that to manipulate
        wdogs, and a different interface in the timer interrupt handling logic
        to manage wdog expirations.  In the single CPU case, this is fine.
        Since the tasking level code calls enter_critical_section, interrupts
        are disabled and no conflicts can occur.  But that may not be the case
        in the SMP case.  Most architectures do not permit disabling
        interrupts on other CPUs so enter_critical_section must work
        differently:  Locks are required to protect code. this change adds
        locking (via enter_critical section) to wdog expiration logic for the
        the case if the SMP configuration.
      - SMP vfork():  Fix a race condition in the SMP case.  Existing logic
        depended on the fact that the child would not run until waitpid was
        called because the child had the same priority as the parent.  BUT in
        the SMP case that is not true... the child may run immediately on a
        different CPU.
      - SMP: This change adds a new internal interfaces and fixes a problem
        with three APIs in the SMP configuration.  The new internal interface
        is sched_cpu_pause(tcb).  This function will pause a CPU if the task
        associated with 'tcb' is running on that CPU.  This allows a different
        CPU to modify that OS data stuctures associated with the CPU.  When
        the other CPU is resumed, those modifications can safely take place.
        The three fixes are to handle cases in the SMP configuration where one
        CPU does need to make modifications to TCB and data structures on a
        task that could be running running on another CPU.  Those three cases
        are task_delete(), task_restart(), and execution of signal handlers.
        In all three cases the solutions is basically the same:  (1) Call
        sched_cpu_pause(tcb) to pause the CPU on which the task is running,
        (2) perform the necessary operations, then (3) call up_cpu_resume() to
        restart the paused CPU.
      - SMP: Add logic to avoid a deadlock condition when CPU1 is hung waiting
        for g_cpu_irqlock with interrupts interrupts and CPU0 is waiting for
        g_cpu_paused.
      - SMP: Enforce this rule: Tasks which are normally restored when
        sched_unlock() is called must remain pending (1) if we are in a
        critical section, i.e., g_cpu_irqlock is locked , or (2) other CPUs
        still have pre-emption disabled, i.e., g_cpu_schedlock is locked.  In
        those cases, the release of the pending tasks must be deferred until
        those conditions are met.

    * File System/Block Drivers/MTD Drivers:

      - AT24XX EEPROM MTD driver:  Added EEPROM timeout.  Fromo Aleksandr
        Vyhovanec.
      - fs/procfs:  Fix procfs status for SMP case.

    * Graphics/Graphic Drivers:

      - Fonts:  Correct some default font IDs.  From Pierre-Noel Bouteville.

    * Common Drivers:

      - usbhost/enumerate:  Fix possible buffer overwrite.  From Janne Rosberg.
      - usbhost/composite:  Fix compile; missing semicolons.  From Jann Rosberg.
      - syslog:  Fixes required for file syslog output.  From Max Kriegleder.
      - SPI configuration:  Fix Kconfig warning.  This change moves the
        ARCH_HAVE_SPI options outside the check for SPI.  Those options don't
        depend on SPI, and Kconfig files  in arch/ enable them even if SPI
        isn't  enabled.  Source the driver's Kconfig in drivers/Kconfig only
        if support for the driver is enabled prevents us from defining these
        ARCH_HAVE options in the driver's Kconfig. We should probably remove
        the other checks in drivers/Kconfig and check if the drivers are
        enabled only in their Kconfig.  From Paul A. Patience.
      - drivers/timer:  Remove the timer driver TIOC_SETHANDLER IOCTL call.
        This calls directly from the timer driver into application code.  That
        is non-standard, non-portable, and cannot be supported.  Instead, add
        timer driver hooks to support signal notification of timer
        expiration.  Signal notification logic added by Sebastien Lorquet.
      - All timer lower half drivers.  Port Sebastien's changes to all other
        implementations of the timer lower half.
      - USB MSC Device:  Fix length of mode6 sense reply packet.  From
        Wolfgang Reißnegger.
      - USB Composite Host:  Fix end offset in usbhost_copyinterface().  From
        Janne Rosberg.
      - USB CDC/ACM Host:   Add CDC_SUBCLASS_ACM and CDC_PROTO_ATM to
        supported class and proto.  From Janne Rosberg.
      - SSD1306:  Fix errors in SPI mode configuration.  From Gong Darcy.
      - CDC/ACM Device Class:  uart_ops_s portion of cdcacm will not be
        initalized with correct functions if CONFIG_SERIAL_DMA is selected.

    * Networking/Network Drivers:

      - drivers/net/tun.c: Fix bug in TUN interface driver.  From  Max Nekludov.

    * ARMv7-A:

      - ARMv7-A SMP: Add SMP logic to signal handling.

    * ARMv7-M:

      - ARMv7-M: Fix double allocation of MPU region in mmu.h.

    * ARMv7-R:

      - ARMv7-R:  Fix compilation error.  This change fixes compilation errors
        on MPU support for ARMv7-R.  From Heesub Shin.
      - ARMv7-R: fix invalid drbar handling.  In ARMv7-R, [31:5] bits of DRBAR
        is physical base address and other bits are reserved and SBZ. Thus,
        there is no point in passing other than the base address.  From Heesub
        Shin.
      - ARMv7-R:  Remove the redundant update on SCTLR. mpu_control() is
        invoking cp15_wrsctlr() around SCTLR update redundantly.  From Heesub
        Shin.
      - ARMv7-R: add new Kconfig entries for d/i-cache. Unlike in ARMv7-A/M,
        Kconfig entries for data and instruction caches are currently missing
        in ARMv7-R. This change adds those missing Kconfig entries. Actual
        implmenetation for those functions will be added in the subsequent
        patches.  From Heesub Shin.
      - ARMv7-R: Add cache handling functions.  This change adds functions for
        enabling and disabling d/i-caches which were missing for ARMv7-R.
        From Heesub Shin.
      - ARMv7-R: Fix typo in mpu support.  s/ARMV7M/ARMV7R/g. From Heesub Shin.
      - ARMv7-R: Fix CPSR corruption after exception handling.  A sporadic
        hang with consequent crash was observed when booting. It seemed to be
        caused by the corrupted or wrong CPSR restored on return from
        exception. NuttX restores the context using code like this:  msr spsr,
        r1.  GCC translates this to:  msr spsr_fc, r1.  As a result, not all
        SPSR fields are updated on exception return.  This should be: msr
        spsr_fsxc, r1.  On some evaluation boards, spsr_svc may have totally
        invalid value at power-on-reset. As it is not initialized at boot, the
        code above may result in the corruption of cpsr and thus unexpected
        behavior. From Heesub Shin.
      - ARMv7-R: Fix to restore the Thumb flag in CPSR.  Thumb flag in CPSR is
        not restored back when the context switch occurs while executing thumb
        instruction.  From Heesub Shin.

    * Atmel SAM3/4 Drivers:

      - SAM3/4 UDP:  Add delay between setting and clearing the endpoint RESET
        bit in sam_ep_resume().  We need to add a delay between setting and
        clearing the endpoint reset bit in SAM_UDP_RSTEP. Without the delay
        the USB controller will (may?) not reset the endpoint.  If the
        endpoint is not being reset, the Data Toggle (DTGLE) bit will not to
        be cleared which will cause the next transaction to fail if DTGLE is
        1. If that happens the host will time-out and reset the bus.  Adding
        this delay may also fix the USBMSC_STALL_RACEWAR in usbmsc_scsi.c,
        however this has not been verified yet.  From Wolfgang Reißnegger.
      - SAM3/4: Remove unused 'halted' flag from UDP driver.  From Wolfgang
        Reißnegger.
      - SAM3/4: Remove 'stalled' flag from the UDP driver.  This flag is not
        necessary because the state of the endpoint can be determined using
        'epstate' instead. From Wolfgang Reißnegger.

    * Atmel SAM3/4 Boards:

      - SAM4S Xplained Pro: Configuration uses old, improper timer interface.
        CONFIG_TIMER disabled in configuration.  Remove obsolete timer
        initialization logic.

    * Atmel SAMV7 Drivers:

      - SAMv7 USBDEVHS:  A problem occurred with the SAMV7 USBDEVHS driver  if
        the USB cable is unplugged while a large amount of data is send over
        an IN endpoint using DMA. If the USB cable is plugged in again after a
        few seconds it is not possible to send data over this IN endpoint
        again, all other endpoints work as expected.  The problem occurs
        because if the USB cable is unplugged while an DMA transfer is in
        flight the transfer is canceled but the register SAM_USBHS_DEVDMACTRL
        is left in an undefined state.  The problem was fixed the problem by
        resetting the register SAM_USBHS_DEVDMACTRL to a known state.
        Additionally all pending interrupts are cleared.  From Stefan Kolb.
      - SAMV7 MCAN: Prevent Interrupt-Flooding of ACKE when not connected to
        CAN-BUS. An Acknowledge-Error will occur every time no other CAN Node
        acknowledges the message sent. This will also occur if the device is
        not connected to the can-bus. The CAN-Standard declares, that the Chip
        has to retry a given message as long as it is not sent successfully
        (or it is not cancelled by the application). Every time the chip tries
        to resend the message an Acknowledge-Error-Interrupt is generated. At
        high baud rates this can lead in extremely high CPU load just for
        handling the interrupts (and possibly the error handling in the
        application). To prevent this Interrupt-Flooding we disable the ACKE
        once it is seen as long we didn't transfer at least one message
        successfully.  From Frank Benkert.
      - SAMV7 MCAN:  Make delete_filter functions more robust.  From Frank
        Benkert.

    * Atmel SAMA5 Drivers:

      - SAMA5 PWM:  Driver does not build when executing from SDRAM before
        board frequencies are not constant.  Rather, the bootloader configures
        the clocking and we must derive the clocking from the MCK left by the
        bootloader.  This means lots more computations.  This is untested on
        initial change because I don't have a good PWM test setup right now.

    * Misoc LM32:

      - Misoc LM32: Corrects a bug that never occured in qemu on simulation or
        real fpga. The error was that the r1 register was being modified out
        of context switching and not restoring it.  From Ramtin Amin

    * NXP Freescale i.MX6:

      - i.MX6 interrupt handling:  Additional logic needed to handle nested
        interrupts when an interrupt stack is used.  Nesting can occur because
        SGI interrupts are non-maskable.

    * NXP Freescale LPC43xx Drivers:

      - LPC43xx serial: Fix a typo in ioctl TIOCSRS485 ioctl.  From Vytautas
        Lukenskas.
      - LPC43xx serial:  Restore RS485 mode on serial port open (if RS485 is
        enabled via menuconfig).  From Vytautas Lukenskas.
      - LPC43xx SD/MMC:  Correct some definitions on SMMC control register in
        lpc43_sdmmc.h.  From Alan Carvalho de Assis.
      - LPC43xx SD card:  Correct pin configuration options needed for SD card
        pins.  From Alan Carvalho de Assis.

    * SiLabs EFM32:

      - EFM32: Fix a compilation error.  From Pierre-noel Bouteville.

    * STMicro STM32 Drivers:

      - STM32 CHxN channels are always outputs.  From Sebastien Lorquet.
      - STM32 DAC:  Fix shift value whenever there are is a DAC2 and, hence,
        up to three interfaces.  From Marc Rechté.
      - STM32 F1:  Add TIM8 to STM32F103V pinmap.  From Maciej Wójcik.
      - STM32 F1: Fix for F1 RTC Clock, tested on F103.  From Maciej Wójcik.
      - STM32 F3:  STM32F303xB and STM32F303xC chips have 4 ADCs.  From Paul
        A. Patience.
      - STM32 F4:  A new implementation of the STM32 F4 I2C bottom half.  The
        common I2C as this did not handled correctly in the current
        implementation (see also https://github.com/PX4/NuttX/issues/54).  The
        changes almost exclusively affect the ISR.  From Max Kriegleder.
      - STM32 F4  OTGHS Host:  If STM32F446 increase number of channels to
        16.  From Janne Rosberg.
      - STM32 F4:  I think, that Size is (highest address+1 - Base address).
        Base address has been removed and if address+count >= size we are
        outside of the Flash.  From David Sidrane.
      - STM32 F4:  Fix ADC compilation error when DMA isn't enabled. From Paul
        A. Patience.
      - STM32 F4:  STM32F427 was rebooting. Over reached family.  From David
        Sidrane.
      - STM32 F4:  Added STM32F469 RAM size and deliberated STM32F446 size.
        From David Sidrane.
      - STM32 F4:  Typo in stm32f76xxxx_pinmap.h edited online with
        Bitbucket.  From David Sidrane.
      - STM32 F7:  stm32_i2c.c Dejavu.  Fixes a bug previously found in the
        F4. From David Sidrane.
      - STM32 F7:  OTGDEV fixed typo.  From David Sidrane.
      - STM32 F7:  Fix to SPI-Master driver.  Without this the chip select
        decoding feature will not work properly.  From Michael Spahlinger.
      - STM32 F7:  STM32F7 SD/MMC driver depends on CONFIG_SDIO_DMA which is
        only defined in stm32/Kconfig.  Changed to CONFIG_STM32F7_SDMMC_DMA
        and defined in stm32f7/Kconfig.
      - STM32 F7:  Fix some STM32F7 copy paste errors.  From David Sidrane.
      - STM32 L4:  Complementary PWM outputs on STM32L4"  (1) too many
        parentheses when calculating max chan count and (2) channel 4 does not
        have a complementary output. From Sebastien Lorquet.
      - STM32 L4:  Fix I2C devices RCC registers.  From Sebastien Lorquet.
      - STM32 L4:  Enable and renaming for 32l4 UARTs 4 and 5. From Sebastien
        Lorquet.
      - STM32 L4:  Change the way to configure quadrature encoder prescalers.
        From Sebastien Lorquet.
      - STM32 L4:  Correct USART1/2 definitions.  Use default mbed UART4
        settings.  From Sebastien Lorquet.

    * STMicro STM32 Boards:

      - STM32F103 Minimum: Fix Timers 2 to 7 clock frequencies. From Alan
        Carvalho de Assis.
      - Nucleo-F303RE:  Remove duplicate setting from board.h.   From  Marc
        Rechté.
      - Nucleo F303RE: Various fixes to get the ADC configuration building
        again after PR.  Refresh all configurations.
      - Nucleo L476RG: Add better selection of timer.

    * TI Tiva Boards:

      - DK-TM4C129x: Typo fix.  From Wolfgang Reißnegger.

    * Xtensa ESP32:

      - ESP32 core v2:  Flush the UART TX buffer in the esp32 serial shutdown
        routine. The ROM bootloader does not flush the FIFO before handing
        over to user code, so some of this output is not currently seen when
        the UART is reconfigured in early stages of startup.  From Angus
        Gratton.
      - Xtensa ESP32:  Corrects a problem with dispatching to signal
        handlers:  Cannot vector directly to the signal handling function as
        in other ABIs under the Xtensa Window ABI.  In that case, we need to
        go through a tiny hook when performs the correct window call (call4)
        otherwise registers will be scrambled in the signal handler.

    * Xtensa ESP32 Boards:

      - ESP32 core v2:  Changes the openocd config file's default flash
        voltage from 1.8V to 3.3V. This is not necessary right now, but may
        save some hard-to-debug moments down the track (3.3V-only flash
        running at 1.8V often half-works and does weird things...).  From
        Angus Gratton.

    * C Library/Header Files:

      - libc/stdio:  Fixes sscanf() %sn where strlen(data) < n.  From David
        Sidrane.
      - libc/stdio:  Include wchar.h in lib_libvsprintf.c to fix compilation
        error.  From Alan Carvalho de Assis.
      - include/sys/time.h: timersub macro modified per recommendations of
        phreakuencies.
      - include/ctype.h and cxx/cctype:  Implement ctype.h functions as inline
        if possible.  cctype can then properly select namespace.
      - include/: Fix a number of header files with mismatched 'extern C {'