From 3ddeb07b2584315ed9b0f9e56b1a94c83825d424 Mon Sep 17 00:00:00 2001
From: David Sidrane <david_s5@nscdg.com>
Date: Mon, 12 Dec 2016 13:26:52 -1000
Subject: [PATCH] Changes to auav-x21 for upstream Nuttx and hardfault logging

---
 cmake/configs/nuttx_auav-x21_default.cmake |   9 +-
 nuttx-configs/auav-x21/include/board.h     |  70 +-
 nuttx-configs/auav-x21/nsh/Make.defs       |  27 +-
 nuttx-configs/auav-x21/nsh/appconfig       |  52 --
 nuttx-configs/auav-x21/nsh/defconfig       | 913 ++++++++++++++++-----
 nuttx-configs/auav-x21/src/Makefile        |   4 +
 src/drivers/boards/auav-x21/auav_can.c     |  23 +-
 src/drivers/boards/auav-x21/auav_init.c    | 400 ++++++++-
 src/drivers/boards/auav-x21/auav_spi.c     |  22 +-
 src/drivers/boards/auav-x21/board_config.h |  38 +-
 10 files changed, 1152 insertions(+), 406 deletions(-)
 delete mode 100644 nuttx-configs/auav-x21/nsh/appconfig

diff --git a/cmake/configs/nuttx_auav-x21_default.cmake b/cmake/configs/nuttx_auav-x21_default.cmake
index 952a56804d..fc48ab724d 100644
--- a/cmake/configs/nuttx_auav-x21_default.cmake
+++ b/cmake/configs/nuttx_auav-x21_default.cmake
@@ -1,5 +1,7 @@
 include(nuttx/px4_impl_nuttx)
 
+px4_nuttx_configure(HWCLASS m4 CONFIG nsh ROMFS y ROMFSROOT px4fmu_common)
+
 set(CMAKE_TOOLCHAIN_FILE ${PX4_SOURCE_DIR}/cmake/toolchains/Toolchain-arm-none-eabi.cmake)
 
 set(config_uavcan_num_ifaces 1)
@@ -56,6 +58,7 @@ set(config_module_list
 	systemcmds/dumpfile
 	systemcmds/esc_calib
 	systemcmds/mixer
+	systemcmds/hardfault_log
 	systemcmds/motor_ramp
 	systemcmds/mtd
 	systemcmds/nshterm
@@ -201,11 +204,13 @@ set(config_io_extra_libs
 add_custom_target(sercon)
 set_target_properties(sercon PROPERTIES
 	PRIORITY "SCHED_PRIORITY_DEFAULT"
-	MAIN "sercon" STACK_MAIN "2048"
+	MAIN "sercon"
+	STACK_MAIN "2048"
 	COMPILE_FLAGS "-Os")
 
 add_custom_target(serdis)
 set_target_properties(serdis PROPERTIES
 	PRIORITY "SCHED_PRIORITY_DEFAULT"
-	MAIN "serdis" STACK_MAIN "2048"
+	MAIN "serdis"
+	STACK_MAIN "2048"
 	COMPILE_FLAGS "-Os")
diff --git a/nuttx-configs/auav-x21/include/board.h b/nuttx-configs/auav-x21/include/board.h
index 791faf5c24..7d80dda9ba 100755
--- a/nuttx-configs/auav-x21/include/board.h
+++ b/nuttx-configs/auav-x21/include/board.h
@@ -148,11 +148,23 @@
 
 /* Timer Frequencies, if APBx is set to 1, frequency is same to APBx
  * otherwise frequency is 2xAPBx.
- * Note: TIM1,8 are on APB2, others on APB1
+ * Note: TIM1,8-11 are on APB2, others on APB1
  */
 
-#define STM32_TIM18_FREQUENCY   (2*STM32_PCLK2_FREQUENCY)
-#define STM32_TIM27_FREQUENCY   (2*STM32_PCLK1_FREQUENCY)
+#define BOARD_TIM1_FREQUENCY    STM32_APB2_TIM1_CLKIN
+#define BOARD_TIM2_FREQUENCY    STM32_APB1_TIM2_CLKIN
+#define BOARD_TIM3_FREQUENCY    STM32_APB1_TIM3_CLKIN
+#define BOARD_TIM4_FREQUENCY    STM32_APB1_TIM4_CLKIN
+#define BOARD_TIM5_FREQUENCY    STM32_APB1_TIM5_CLKIN
+#define BOARD_TIM6_FREQUENCY    STM32_APB1_TIM6_CLKIN
+#define BOARD_TIM7_FREQUENCY    STM32_APB1_TIM7_CLKIN
+#define BOARD_TIM8_FREQUENCY    STM32_APB2_TIM8_CLKIN
+#define BOARD_TIM9_FREQUENCY    STM32_APB2_TIM9_CLKIN
+#define BOARD_TIM10_FREQUENCY   STM32_APB2_TIM10_CLKIN
+#define BOARD_TIM11_FREQUENCY   STM32_APB2_TIM11_CLKIN
+#define BOARD_TIM12_FREQUENCY   STM32_APB1_TIM12_CLKIN
+#define BOARD_TIM13_FREQUENCY   STM32_APB1_TIM13_CLKIN
+#define BOARD_TIM14_FREQUENCY   STM32_APB1_TIM14_CLKIN
 
 /* SDIO dividers.  Note that slower clocking is required when DMA is disabled
  * in order to avoid RX overrun/TX underrun errors due to delayed responses
@@ -200,31 +212,33 @@
 /*
  * UARTs.
  */
-#define GPIO_USART1_RX	GPIO_USART1_RX_1	/* console in from IO */
-#define GPIO_USART1_TX	0			/* USART1 is RX-only */
+#define GPIO_USART1_RX   GPIO_USART1_RX_1    /* Console in from IO */
+#define GPIO_USART1_TX   0                   /* USART1 is RX-only */
 
-#define GPIO_USART2_RX	GPIO_USART2_RX_2
-#define GPIO_USART2_TX	GPIO_USART2_TX_2
-#define GPIO_USART2_RTS	GPIO_USART2_RTS_2
-#define GPIO_USART2_CTS	GPIO_USART2_CTS_2
+#define GPIO_USART2_RX   GPIO_USART2_RX_2
+#define GPIO_USART2_TX   GPIO_USART2_TX_2
+#define GPIO_USART2_RTS  GPIO_USART2_RTS_2
+#define GPIO_USART2_CTS  GPIO_USART2_CTS_2
 
-#define GPIO_USART3_RX	GPIO_USART3_RX_3
-#define GPIO_USART3_TX	GPIO_USART3_TX_3
-#define GPIO_USART3_RTS	GPIO_USART3_RTS_2
-#define GPIO_USART3_CTS	GPIO_USART3_CTS_2
+#define GPIO_USART3_RX   GPIO_USART3_RX_3
+#define GPIO_USART3_TX   GPIO_USART3_TX_3
+#define GPIO_USART3_RTS  GPIO_USART3_RTS_2
+#define GPIO_USART3_CTS  GPIO_USART3_CTS_2
 
-#define GPIO_UART4_RX	GPIO_UART4_RX_1
-#define GPIO_UART4_TX	GPIO_UART4_TX_1
+#define GPIO_UART4_RX    GPIO_UART4_RX_1
+#define GPIO_UART4_TX    GPIO_UART4_TX_1
 
-#define GPIO_USART6_RX	GPIO_USART6_RX_1
-#define GPIO_USART6_TX	GPIO_USART6_TX_1
+#define GPIO_USART6_RX   GPIO_USART6_RX_1
+#define GPIO_USART6_TX   GPIO_USART6_TX_1
+
+#define GPIO_UART7_RX    GPIO_UART7_RX_1
+#define GPIO_UART7_TX    GPIO_UART7_TX_1
 
-#define GPIO_UART7_RX	GPIO_UART7_RX_1
-#define GPIO_UART7_TX	GPIO_UART7_TX_1
 
 /* UART8 has no alternate pin config */
 
 /* UART RX DMA configurations */
+
 #define DMAMAP_USART1_RX DMAMAP_USART1_RX_2
 #define DMAMAP_USART6_RX DMAMAP_USART6_RX_2
 
@@ -253,17 +267,17 @@
  *
  * There are sensors on SPI1, and SPI2 is connected to the FRAM.
  */
-#define GPIO_SPI1_MISO	(GPIO_SPI1_MISO_1|GPIO_SPEED_50MHz)
-#define GPIO_SPI1_MOSI	(GPIO_SPI1_MOSI_1|GPIO_SPEED_50MHz)
-#define GPIO_SPI1_SCK	(GPIO_SPI1_SCK_1|GPIO_SPEED_50MHz)
+#define GPIO_SPI1_MISO   GPIO_SPI1_MISO_1
+#define GPIO_SPI1_MOSI   GPIO_SPI1_MOSI_1
+#define GPIO_SPI1_SCK    GPIO_SPI1_SCK_1
 
-#define GPIO_SPI2_MISO	(GPIO_SPI2_MISO_1|GPIO_SPEED_50MHz)
-#define GPIO_SPI2_MOSI	(GPIO_SPI2_MOSI_1|GPIO_SPEED_50MHz)
-#define GPIO_SPI2_SCK	(GPIO_SPI2_SCK_2|GPIO_SPEED_50MHz)
+#define GPIO_SPI2_MISO   GPIO_SPI2_MISO_1
+#define GPIO_SPI2_MOSI   GPIO_SPI2_MOSI_1
+#define GPIO_SPI2_SCK    GPIO_SPI2_SCK_2
 
-#define GPIO_SPI4_MISO	(GPIO_SPI4_MISO_1|GPIO_SPEED_50MHz)
-#define GPIO_SPI4_MOSI	(GPIO_SPI4_MOSI_1|GPIO_SPEED_50MHz)
-#define GPIO_SPI4_SCK	(GPIO_SPI4_SCK_1|GPIO_SPEED_50MHz)
+#define GPIO_SPI4_MISO	GPIO_SPI4_MISO_1
+#define GPIO_SPI4_MOSI	GPIO_SPI4_MOSI_1
+#define GPIO_SPI4_SCK	GPIO_SPI4_SCK_1
 
 /************************************************************************************
  * Public Data
diff --git a/nuttx-configs/auav-x21/nsh/Make.defs b/nuttx-configs/auav-x21/nsh/Make.defs
index 9ea398d6a4..7b3384c6be 100644
--- a/nuttx-configs/auav-x21/nsh/Make.defs
+++ b/nuttx-configs/auav-x21/nsh/Make.defs
@@ -35,14 +35,14 @@
 
 include ${TOPDIR}/.config
 include ${TOPDIR}/tools/Config.mk
-
 include $(TOPDIR)/PX4_Warnings.mk
+include $(TOPDIR)/PX4_Config.mk
 
 #
 # We only support building with the ARM bare-metal toolchain from
 # https://launchpad.net/gcc-arm-embedded on Windows, Linux or Mac OS.
 #
-CONFIG_ARMV7M_TOOLCHAIN	:= GNU_EABI
+CONFIG_ARMV7M_TOOLCHAIN	:= GNU_EABI${HOST_OS_FIRST_LETTER}
 
 include ${TOPDIR}/arch/arm/src/armv7-m/Toolchain.defs
 
@@ -62,17 +62,19 @@ ARCHCPUFLAGS		 = -mcpu=cortex-m4 \
 			   -mfpu=fpv4-sp-d16 \
 			   -mfloat-abi=hard
 
+# Enable precise stack overflow tracking
 
-# enable precise stack overflow tracking
 ifeq ($(CONFIG_ARMV7M_STACKCHECK),y)
 INSTRUMENTATIONDEFINES	 = -finstrument-functions -ffixed-r10
 endif
 
-# pull in *just* libm from the toolchain ... this is grody
+# Pull in *just* libm from the toolchain ... this is grody
+
 LIBM			 = "${shell $(CC) $(ARCHCPUFLAGS) -print-file-name=libm.a}"
 EXTRA_LIBS		+= $(LIBM)
 
-# use our linker script
+# Use our linker script
+
 LDSCRIPT		 = ld.script
 
 ifeq ($(WINTOOL),y)
@@ -94,18 +96,20 @@ else
     ARCHSCRIPT		 = -T$(TOPDIR)/configs/$(CONFIG_ARCH_BOARD)/scripts/$(LDSCRIPT)
   else
     # Linux/Cygwin-native toolchain
-    MKDEP		 = $(TOPDIR)/tools/mkdeps.sh
+    MKDEP		 = $(TOPDIR)/tools/mkdeps$(HOSTEXEEXT)
     ARCHINCLUDES	 = -I. -isystem $(TOPDIR)/include
     ARCHXXINCLUDES	 = -I. -isystem $(TOPDIR)/include -isystem $(TOPDIR)/include/cxx
     ARCHSCRIPT		 = -T$(TOPDIR)/configs/$(CONFIG_ARCH_BOARD)/scripts/$(LDSCRIPT)
   endif
 endif
 
-# tool versions
+# Tool versions
+
 ARCHCCVERSION		 = ${shell $(CC) -v 2>&1 | sed -n '/^gcc version/p' | sed -e 's/^gcc version \([0-9\.]\)/\1/g' -e 's/[-\ ].*//g' -e '1q'}
 ARCHCCMAJOR		 = ${shell echo $(ARCHCCVERSION) | cut -d'.' -f1}
 
-# optimisation flags
+# Optimization flags
+
 ARCHOPTIMIZATION	 = $(MAXOPTIMIZATION) \
 			   -fno-strict-aliasing \
 			   -fno-strength-reduce \
@@ -127,7 +131,8 @@ ARCHWARNINGSXX		 = $(ARCHWARNINGS) $(PX4_ARCHWARNINGSXX)
 ARCHDEFINES		 =
 ARCHPICFLAGS		 = -fpic -msingle-pic-base -mpic-register=r10
 
-# this seems to be the only way to add linker flags
+# This seems to be the only way to add linker flags
+
 EXTRA_LIBS		+= --warn-common \
 			   --gc-sections
 
@@ -146,8 +151,8 @@ OBJEXT			 = .o
 LIBEXT			 = .a
 EXEEXT			 =
 
+# Produce partially-linked $1 from files in $2
 
-# produce partially-linked $1 from files in $2
 define PRELINK
 	@echo "PRELINK: $1"
 	$(Q) $(LD) -Ur -o $1 $2 && $(OBJCOPY) --localize-hidden $1
@@ -156,4 +161,4 @@ endef
 HOSTCC			 = gcc
 HOSTINCLUDES		 = -I.
 HOSTCFLAGS		 = -Wall -Wstrict-prototypes -Wshadow -g -pipe
-HOSTLDFLAGS		 =
+HOSTLDFLAGS		 =
\ No newline at end of file
diff --git a/nuttx-configs/auav-x21/nsh/appconfig b/nuttx-configs/auav-x21/nsh/appconfig
deleted file mode 100644
index 4b312473dd..0000000000
--- a/nuttx-configs/auav-x21/nsh/appconfig
+++ /dev/null
@@ -1,52 +0,0 @@
-############################################################################
-# configs/auav_x2.1/nsh/appconfig
-#
-#   Copyright (C) 2011 Gregory Nutt. All rights reserved.
-#   Author: Gregory Nutt <gnutt@nuttx.org>
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# 1. Redistributions of source code must retain the above copyright
-#    notice, this list of conditions and the following disclaimer.
-# 2. Redistributions in binary form must reproduce the above copyright
-#    notice, this list of conditions and the following disclaimer in
-#    the documentation and/or other materials provided with the
-#    distribution.
-# 3. Neither the name NuttX nor the names of its contributors may be
-#    used to endorse or promote products derived from this software
-#    without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
-# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-# POSSIBILITY OF SUCH DAMAGE.
-#
-############################################################################
-
-# Path to example in apps/examples containing the user_start entry point
-
-CONFIGURED_APPS	+= examples/nsh
-
-# The NSH application library
-CONFIGURED_APPS += nshlib
-CONFIGURED_APPS += system/readline
-
-ifeq ($(CONFIG_CAN),y)
-CONFIGURED_APPS += examples/can
-endif
-
-#ifeq ($(CONFIG_USBDEV),y)
-#ifeq ($(CONFIG_CDCACM),y)
-CONFIGURED_APPS += examples/cdcacm
-#endif
-#endif
diff --git a/nuttx-configs/auav-x21/nsh/defconfig b/nuttx-configs/auav-x21/nsh/defconfig
index f17da61763..450bce07a2 100644
--- a/nuttx-configs/auav-x21/nsh/defconfig
+++ b/nuttx-configs/auav-x21/nsh/defconfig
@@ -2,14 +2,14 @@
 # Automatically generated file; DO NOT EDIT.
 # Nuttx/ Configuration
 #
-CONFIG_NUTTX_NEWCONFIG=y
 
 #
 # Build Setup
 #
 # CONFIG_EXPERIMENTAL is not set
-# CONFIG_HOST_LINUX is not set
-CONFIG_HOST_OSX=y
+# CONFIG_DEFAULT_SMALL is not set
+CONFIG_HOST_LINUX=y
+# CONFIG_HOST_OSX is not set
 # CONFIG_HOST_WINDOWS is not set
 # CONFIG_HOST_OTHER is not set
 
@@ -17,6 +17,7 @@ CONFIG_HOST_OSX=y
 # Build Configuration
 #
 CONFIG_APPS_DIR="../apps"
+CONFIG_BUILD_FLAT=y
 # CONFIG_BUILD_2PASS is not set
 
 #
@@ -26,49 +27,36 @@ CONFIG_APPS_DIR="../apps"
 # CONFIG_INTELHEX_BINARY is not set
 # CONFIG_MOTOROLA_SREC is not set
 CONFIG_RAW_BINARY=y
+# CONFIG_UBOOT_UIMAGE is not set
 
 #
 # Customize Header Files
 #
+# CONFIG_ARCH_STDINT_H is not set
 # CONFIG_ARCH_STDBOOL_H is not set
 CONFIG_ARCH_MATH_H=y
 # CONFIG_ARCH_FLOAT_H is not set
 # CONFIG_ARCH_STDARG_H is not set
+# CONFIG_ARCH_DEBUG_H is not set
 
 #
 # Debug Options
 #
-CONFIG_DEBUG=n
-CONFIG_DEBUG_VERBOSE=n
-
-#
-# Subsystem Debug Options
-#
-# CONFIG_DEBUG_MM is not set
-# CONFIG_DEBUG_SCHED is not set
-# CONFIG_DEBUG_USB is not set
-CONFIG_DEBUG_FS=y
-# CONFIG_DEBUG_LIB is not set
-# CONFIG_DEBUG_BINFMT is not set
-# CONFIG_DEBUG_GRAPHICS is not set
-
-#
-# Driver Debug Options
-#
-# CONFIG_DEBUG_ANALOG is not set
-# CONFIG_DEBUG_I2C is not set
-# CONFIG_DEBUG_SPI is not set
-# CONFIG_DEBUG_SDIO is not set
-# CONFIG_DEBUG_GPIO is not set
-CONFIG_DEBUG_DMA=y
-# CONFIG_DEBUG_WATCHDOG is not set
-# CONFIG_DEBUG_AUDIO is not set
+CONFIG_DEBUG_ALERT=y
+# CONFIG_DEBUG_FEATURES is not set
+CONFIG_ARCH_HAVE_STACKCHECK=y
+CONFIG_STACK_COLORATION=y
+CONFIG_ARCH_HAVE_HEAPCHECK=y
+# CONFIG_HEAP_COLORATION is not set
 CONFIG_DEBUG_SYMBOLS=y
+CONFIG_ARCH_HAVE_CUSTOMOPT=y
+CONFIG_DEBUG_NOOPT=y
+# CONFIG_DEBUG_CUSTOMOPT is not set
+# CONFIG_DEBUG_FULLOPT is not set
 
 #
 # System Type
 #
-# CONFIG_ARCH_8051 is not set
 CONFIG_ARCH_ARM=y
 # CONFIG_ARCH_AVR is not set
 # CONFIG_ARCH_HC is not set
@@ -84,43 +72,83 @@ CONFIG_ARCH="arm"
 #
 # ARM Options
 #
+# CONFIG_ARCH_CHIP_A1X is not set
 # CONFIG_ARCH_CHIP_C5471 is not set
 # CONFIG_ARCH_CHIP_CALYPSO is not set
 # CONFIG_ARCH_CHIP_DM320 is not set
-# CONFIG_ARCH_CHIP_IMX is not set
+# CONFIG_ARCH_CHIP_EFM32 is not set
+# CONFIG_ARCH_CHIP_IMX1 is not set
+# CONFIG_ARCH_CHIP_IMX6 is not set
 # CONFIG_ARCH_CHIP_KINETIS is not set
 # CONFIG_ARCH_CHIP_KL is not set
 # CONFIG_ARCH_CHIP_LM is not set
+# CONFIG_ARCH_CHIP_TIVA is not set
+# CONFIG_ARCH_CHIP_LPC11XX is not set
 # CONFIG_ARCH_CHIP_LPC17XX is not set
 # CONFIG_ARCH_CHIP_LPC214X is not set
 # CONFIG_ARCH_CHIP_LPC2378 is not set
 # CONFIG_ARCH_CHIP_LPC31XX is not set
 # CONFIG_ARCH_CHIP_LPC43XX is not set
 # CONFIG_ARCH_CHIP_NUC1XX is not set
+# CONFIG_ARCH_CHIP_SAMA5 is not set
+# CONFIG_ARCH_CHIP_SAMD is not set
+# CONFIG_ARCH_CHIP_SAML is not set
 # CONFIG_ARCH_CHIP_SAM34 is not set
+# CONFIG_ARCH_CHIP_SAMV7 is not set
 CONFIG_ARCH_CHIP_STM32=y
+# CONFIG_ARCH_CHIP_STM32F7 is not set
+# CONFIG_ARCH_CHIP_STM32L4 is not set
 # CONFIG_ARCH_CHIP_STR71X is not set
+# CONFIG_ARCH_CHIP_TMS570 is not set
+# CONFIG_ARCH_CHIP_MOXART is not set
+# CONFIG_ARCH_ARM7TDMI is not set
+# CONFIG_ARCH_ARM926EJS is not set
+# CONFIG_ARCH_ARM920T is not set
+# CONFIG_ARCH_CORTEXM0 is not set
+# CONFIG_ARCH_CORTEXM3 is not set
 CONFIG_ARCH_CORTEXM4=y
+# CONFIG_ARCH_CORTEXM7 is not set
+# CONFIG_ARCH_CORTEXA5 is not set
+# CONFIG_ARCH_CORTEXA8 is not set
+# CONFIG_ARCH_CORTEXA9 is not set
+# CONFIG_ARCH_CORTEXR4 is not set
+# CONFIG_ARCH_CORTEXR4F is not set
+# CONFIG_ARCH_CORTEXR5 is not set
+# CONFIG_ARCH_CORTEX5F is not set
+# CONFIG_ARCH_CORTEXR7 is not set
+# CONFIG_ARCH_CORTEXR7F is not set
 CONFIG_ARCH_FAMILY="armv7-m"
 CONFIG_ARCH_CHIP="stm32"
+# CONFIG_ARM_TOOLCHAIN_IAR is not set
+CONFIG_ARM_TOOLCHAIN_GNU=y
 CONFIG_ARMV7M_USEBASEPRI=y
 CONFIG_ARCH_HAVE_CMNVECTOR=y
 CONFIG_ARMV7M_CMNVECTOR=y
+# CONFIG_ARMV7M_LAZYFPU is not set
 CONFIG_ARCH_HAVE_FPU=y
+# CONFIG_ARCH_HAVE_DPFPU is not set
 CONFIG_ARCH_FPU=y
-CONFIG_ARCH_HAVE_MPU=y
-# CONFIG_ARMV7M_MPU is not set
-# CONFIG_DEBUG_HARDFAULT is not set
+# CONFIG_ARCH_HAVE_TRUSTZONE is not set
+CONFIG_ARM_HAVE_MPU_UNIFIED=y
+# CONFIG_ARM_MPU is not set
 
 #
 # ARMV7M Configuration Options
 #
+# CONFIG_ARMV7M_HAVE_ICACHE is not set
+# CONFIG_ARMV7M_HAVE_DCACHE is not set
+# CONFIG_ARMV7M_HAVE_ITCM is not set
+# CONFIG_ARMV7M_HAVE_DTCM is not set
+# CONFIG_ARMV7M_TOOLCHAIN_IARL is not set
 # CONFIG_ARMV7M_TOOLCHAIN_BUILDROOT is not set
-CONFIG_ARMV7M_TOOLCHAIN_GNU_EABI=y
-CONFIG_ARMV7M_STACKCHECK=n
+# CONFIG_ARMV7M_TOOLCHAIN_CODEREDL is not set
+# CONFIG_ARMV7M_TOOLCHAIN_CODESOURCERYL is not set
+CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIL=y
+CONFIG_ARMV7M_HAVE_STACKCHECK=y
+# CONFIG_ARMV7M_STACKCHECK is not set
+# CONFIG_ARMV7M_ITMSYSLOG is not set
 CONFIG_SERIAL_TERMIOS=y
 CONFIG_SDIO_DMA=y
-CONFIG_SDIO_DMAPRIO=0x00010000
 # CONFIG_SDIO_WIDTH_D1_ONLY is not set
 
 #
@@ -144,6 +172,8 @@ CONFIG_SDIO_DMAPRIO=0x00010000
 # CONFIG_ARCH_CHIP_STM32L152V6 is not set
 # CONFIG_ARCH_CHIP_STM32L152V8 is not set
 # CONFIG_ARCH_CHIP_STM32L152VB is not set
+# CONFIG_ARCH_CHIP_STM32L162ZD is not set
+# CONFIG_ARCH_CHIP_STM32L162VE is not set
 # CONFIG_ARCH_CHIP_STM32F100C8 is not set
 # CONFIG_ARCH_CHIP_STM32F100CB is not set
 # CONFIG_ARCH_CHIP_STM32F100R8 is not set
@@ -156,27 +186,70 @@ CONFIG_SDIO_DMAPRIO=0x00010000
 # CONFIG_ARCH_CHIP_STM32F100VC is not set
 # CONFIG_ARCH_CHIP_STM32F100VD is not set
 # CONFIG_ARCH_CHIP_STM32F100VE is not set
+# CONFIG_ARCH_CHIP_STM32F102CB is not set
+# CONFIG_ARCH_CHIP_STM32F103T8 is not set
+# CONFIG_ARCH_CHIP_STM32F103TB is not set
 # CONFIG_ARCH_CHIP_STM32F103C4 is not set
 # CONFIG_ARCH_CHIP_STM32F103C8 is not set
-# CONFIG_ARCH_CHIP_STM32F103RET6 is not set
-# CONFIG_ARCH_CHIP_STM32F103VCT6 is not set
-# CONFIG_ARCH_CHIP_STM32F103VET6 is not set
-# CONFIG_ARCH_CHIP_STM32F103ZET6 is not set
-# CONFIG_ARCH_CHIP_STM32F105VBT7 is not set
+# CONFIG_ARCH_CHIP_STM32F103CB is not set
+# CONFIG_ARCH_CHIP_STM32F103R8 is not set
+# CONFIG_ARCH_CHIP_STM32F103RB is not set
+# CONFIG_ARCH_CHIP_STM32F103RC is not set
+# CONFIG_ARCH_CHIP_STM32F103RD is not set
+# CONFIG_ARCH_CHIP_STM32F103RE is not set
+# CONFIG_ARCH_CHIP_STM32F103RG is not set
+# CONFIG_ARCH_CHIP_STM32F103V8 is not set
+# CONFIG_ARCH_CHIP_STM32F103VB is not set
+# CONFIG_ARCH_CHIP_STM32F103VC is not set
+# CONFIG_ARCH_CHIP_STM32F103VE is not set
+# CONFIG_ARCH_CHIP_STM32F103ZE is not set
+# CONFIG_ARCH_CHIP_STM32F105VB is not set
+# CONFIG_ARCH_CHIP_STM32F105RB is not set
 # CONFIG_ARCH_CHIP_STM32F107VC is not set
+# CONFIG_ARCH_CHIP_STM32F205RG is not set
 # CONFIG_ARCH_CHIP_STM32F207IG is not set
+# CONFIG_ARCH_CHIP_STM32F207ZE is not set
+# CONFIG_ARCH_CHIP_STM32F302K6 is not set
+# CONFIG_ARCH_CHIP_STM32F302K8 is not set
 # CONFIG_ARCH_CHIP_STM32F302CB is not set
 # CONFIG_ARCH_CHIP_STM32F302CC is not set
 # CONFIG_ARCH_CHIP_STM32F302RB is not set
 # CONFIG_ARCH_CHIP_STM32F302RC is not set
 # CONFIG_ARCH_CHIP_STM32F302VB is not set
 # CONFIG_ARCH_CHIP_STM32F302VC is not set
+# CONFIG_ARCH_CHIP_STM32F303K6 is not set
+# CONFIG_ARCH_CHIP_STM32F303K8 is not set
+# CONFIG_ARCH_CHIP_STM32F303C6 is not set
+# CONFIG_ARCH_CHIP_STM32F303C8 is not set
 # CONFIG_ARCH_CHIP_STM32F303CB is not set
 # CONFIG_ARCH_CHIP_STM32F303CC is not set
 # CONFIG_ARCH_CHIP_STM32F303RB is not set
 # CONFIG_ARCH_CHIP_STM32F303RC is not set
+# CONFIG_ARCH_CHIP_STM32F303RD is not set
+# CONFIG_ARCH_CHIP_STM32F303RE is not set
 # CONFIG_ARCH_CHIP_STM32F303VB is not set
 # CONFIG_ARCH_CHIP_STM32F303VC is not set
+# CONFIG_ARCH_CHIP_STM32F372C8 is not set
+# CONFIG_ARCH_CHIP_STM32F372R8 is not set
+# CONFIG_ARCH_CHIP_STM32F372V8 is not set
+# CONFIG_ARCH_CHIP_STM32F372CB is not set
+# CONFIG_ARCH_CHIP_STM32F372RB is not set
+# CONFIG_ARCH_CHIP_STM32F372VB is not set
+# CONFIG_ARCH_CHIP_STM32F372CC is not set
+# CONFIG_ARCH_CHIP_STM32F372RC is not set
+# CONFIG_ARCH_CHIP_STM32F372VC is not set
+# CONFIG_ARCH_CHIP_STM32F373C8 is not set
+# CONFIG_ARCH_CHIP_STM32F373R8 is not set
+# CONFIG_ARCH_CHIP_STM32F373V8 is not set
+# CONFIG_ARCH_CHIP_STM32F373CB is not set
+# CONFIG_ARCH_CHIP_STM32F373RB is not set
+# CONFIG_ARCH_CHIP_STM32F373VB is not set
+# CONFIG_ARCH_CHIP_STM32F373CC is not set
+# CONFIG_ARCH_CHIP_STM32F373RC is not set
+# CONFIG_ARCH_CHIP_STM32F373VC is not set
+# CONFIG_ARCH_CHIP_STM32F401RE is not set
+# CONFIG_ARCH_CHIP_STM32F411RE is not set
+# CONFIG_ARCH_CHIP_STM32F411VE is not set
 # CONFIG_ARCH_CHIP_STM32F405RG is not set
 # CONFIG_ARCH_CHIP_STM32F405VG is not set
 # CONFIG_ARCH_CHIP_STM32F405ZG is not set
@@ -189,24 +262,111 @@ CONFIG_SDIO_DMAPRIO=0x00010000
 CONFIG_ARCH_CHIP_STM32F427V=y
 # CONFIG_ARCH_CHIP_STM32F427Z is not set
 # CONFIG_ARCH_CHIP_STM32F427I is not set
+# CONFIG_ARCH_CHIP_STM32F429V is not set
+# CONFIG_ARCH_CHIP_STM32F429Z is not set
+# CONFIG_ARCH_CHIP_STM32F429I is not set
+# CONFIG_ARCH_CHIP_STM32F429B is not set
+# CONFIG_ARCH_CHIP_STM32F429N is not set
+# CONFIG_ARCH_CHIP_STM32F446M is not set
+# CONFIG_ARCH_CHIP_STM32F446R is not set
+# CONFIG_ARCH_CHIP_STM32F446V is not set
+# CONFIG_ARCH_CHIP_STM32F446Z is not set
+# CONFIG_ARCH_CHIP_STM32F469A is not set
+# CONFIG_ARCH_CHIP_STM32F469I is not set
+# CONFIG_ARCH_CHIP_STM32F469B is not set
+# CONFIG_ARCH_CHIP_STM32F469N is not set
+# CONFIG_STM32_FLASH_CONFIG_DEFAULT is not set
+# CONFIG_STM32_FLASH_CONFIG_4 is not set
+# CONFIG_STM32_FLASH_CONFIG_6 is not set
+# CONFIG_STM32_FLASH_CONFIG_8 is not set
+# CONFIG_STM32_FLASH_CONFIG_B is not set
+# CONFIG_STM32_FLASH_CONFIG_C is not set
+# CONFIG_STM32_FLASH_CONFIG_D is not set
+# CONFIG_STM32_FLASH_CONFIG_E is not set
+# CONFIG_STM32_FLASH_CONFIG_F is not set
+# CONFIG_STM32_FLASH_CONFIG_G is not set
+CONFIG_STM32_FLASH_CONFIG_I=y
 # CONFIG_STM32_STM32L15XX is not set
 # CONFIG_STM32_ENERGYLITE is not set
 # CONFIG_STM32_STM32F10XX is not set
 # CONFIG_STM32_VALUELINE is not set
 # CONFIG_STM32_CONNECTIVITYLINE is not set
 # CONFIG_STM32_PERFORMANCELINE is not set
+# CONFIG_STM32_USBACCESSLINE is not set
 # CONFIG_STM32_HIGHDENSITY is not set
 # CONFIG_STM32_MEDIUMDENSITY is not set
 # CONFIG_STM32_LOWDENSITY is not set
 # CONFIG_STM32_STM32F20XX is not set
+# CONFIG_STM32_STM32F205 is not set
+# CONFIG_STM32_STM32F207 is not set
 # CONFIG_STM32_STM32F30XX is not set
+# CONFIG_STM32_STM32F302 is not set
+# CONFIG_STM32_STM32F303 is not set
+# CONFIG_STM32_STM32F37XX is not set
 CONFIG_STM32_STM32F40XX=y
+# CONFIG_STM32_STM32F401 is not set
+# CONFIG_STM32_STM32F411 is not set
+# CONFIG_STM32_STM32F405 is not set
+# CONFIG_STM32_STM32F407 is not set
 CONFIG_STM32_STM32F427=y
+# CONFIG_STM32_STM32F429 is not set
+# CONFIG_STM32_STM32F446 is not set
+# CONFIG_STM32_STM32F469 is not set
 # CONFIG_STM32_DFU is not set
 
 #
 # STM32 Peripheral Support
 #
+CONFIG_STM32_HAVE_CCM=y
+# CONFIG_STM32_HAVE_USBDEV is not set
+CONFIG_STM32_HAVE_OTGFS=y
+CONFIG_STM32_HAVE_FSMC=y
+# CONFIG_STM32_HAVE_LTDC is not set
+CONFIG_STM32_HAVE_USART3=y
+CONFIG_STM32_HAVE_UART4=y
+CONFIG_STM32_HAVE_UART5=y
+CONFIG_STM32_HAVE_USART6=y
+CONFIG_STM32_HAVE_UART7=y
+CONFIG_STM32_HAVE_UART8=y
+CONFIG_STM32_HAVE_TIM1=y
+# CONFIG_STM32_HAVE_TIM2 is not set
+CONFIG_STM32_HAVE_TIM3=y
+CONFIG_STM32_HAVE_TIM4=y
+CONFIG_STM32_HAVE_TIM5=y
+CONFIG_STM32_HAVE_TIM6=y
+CONFIG_STM32_HAVE_TIM7=y
+CONFIG_STM32_HAVE_TIM8=y
+CONFIG_STM32_HAVE_TIM9=y
+CONFIG_STM32_HAVE_TIM10=y
+CONFIG_STM32_HAVE_TIM11=y
+CONFIG_STM32_HAVE_TIM12=y
+CONFIG_STM32_HAVE_TIM13=y
+CONFIG_STM32_HAVE_TIM14=y
+# CONFIG_STM32_HAVE_TIM15 is not set
+# CONFIG_STM32_HAVE_TIM16 is not set
+# CONFIG_STM32_HAVE_TIM17 is not set
+CONFIG_STM32_HAVE_ADC2=y
+CONFIG_STM32_HAVE_ADC3=y
+# CONFIG_STM32_HAVE_ADC4 is not set
+CONFIG_STM32_HAVE_ADC1_DMA=y
+# CONFIG_STM32_HAVE_ADC2_DMA is not set
+# CONFIG_STM32_HAVE_ADC3_DMA is not set
+# CONFIG_STM32_HAVE_ADC4_DMA is not set
+CONFIG_STM32_HAVE_CAN1=y
+CONFIG_STM32_HAVE_CAN2=y
+CONFIG_STM32_HAVE_DAC1=y
+CONFIG_STM32_HAVE_DAC2=y
+CONFIG_STM32_HAVE_RNG=y
+CONFIG_STM32_HAVE_ETHMAC=y
+CONFIG_STM32_HAVE_I2C2=y
+CONFIG_STM32_HAVE_I2C3=y
+CONFIG_STM32_HAVE_SPI2=y
+CONFIG_STM32_HAVE_SPI3=y
+CONFIG_STM32_HAVE_SPI4=y
+CONFIG_STM32_HAVE_SPI5=y
+CONFIG_STM32_HAVE_SPI6=y
+# CONFIG_STM32_HAVE_SAIPLL is not set
+# CONFIG_STM32_HAVE_I2SPLL is not set
 CONFIG_STM32_ADC1=y
 # CONFIG_STM32_ADC2 is not set
 # CONFIG_STM32_ADC3 is not set
@@ -266,6 +426,7 @@ CONFIG_STM32_WWDG=y
 CONFIG_STM32_ADC=y
 CONFIG_STM32_SPI=y
 CONFIG_STM32_I2C=y
+# CONFIG_STM32_NOEXT_VECTORS is not set
 
 #
 # Alternate Pin Mapping
@@ -279,7 +440,14 @@ CONFIG_STM32_DISABLE_IDLE_SLEEP_DURING_DEBUG=y
 # CONFIG_STM32_FORCEPOWER is not set
 # CONFIG_ARCH_BOARD_STM32_CUSTOM_CLOCKCONFIG is not set
 # CONFIG_STM32_CCMEXCLUDE is not set
+# CONFIG_STM32_CCM_PROCFS is not set
 CONFIG_STM32_DMACAPABLE=y
+
+#
+# Timer Configuration
+#
+# CONFIG_STM32_ONESHOT is not set
+# CONFIG_STM32_FREERUN is not set
 # CONFIG_STM32_TIM1_PWM is not set
 # CONFIG_STM32_TIM3_PWM is not set
 # CONFIG_STM32_TIM4_PWM is not set
@@ -289,29 +457,68 @@ CONFIG_STM32_DMACAPABLE=y
 # CONFIG_STM32_TIM1_ADC is not set
 # CONFIG_STM32_TIM3_ADC is not set
 # CONFIG_STM32_TIM4_ADC is not set
+# CONFIG_STM32_TIM1_CAP is not set
+# CONFIG_STM32_TIM3_CAP is not set
+# CONFIG_STM32_TIM4_CAP is not set
+# CONFIG_STM32_TIM5_CAP is not set
+# CONFIG_STM32_TIM8_CAP is not set
+# CONFIG_STM32_TIM9_CAP is not set
+# CONFIG_STM32_TIM10_CAP is not set
+# CONFIG_STM32_TIM11_CAP is not set
+# CONFIG_STM32_TIM12_CAP is not set
+# CONFIG_STM32_TIM13_CAP is not set
+# CONFIG_STM32_TIM14_CAP is not set
+
+#
+# ADC Configuration
+#
+# CONFIG_STM32_ADC1_DMA is not set
 CONFIG_STM32_USART=y
+CONFIG_STM32_SERIALDRIVER=y
 
 #
 # U[S]ART Configuration
 #
-# Hot fix for lost data
-CONFIG_STM32_RXDMA_BUFFER_SIZE_OVERRIDE=256
+
+#
+# U[S]ART Device Configuration
+#
+CONFIG_STM32_USART1_SERIALDRIVER=y
+# CONFIG_STM32_USART1_1WIREDRIVER is not set
 # CONFIG_USART1_RS485 is not set
 CONFIG_USART1_RXDMA=y
+CONFIG_STM32_USART2_SERIALDRIVER=y
+# CONFIG_STM32_USART2_1WIREDRIVER is not set
 # CONFIG_USART2_RS485 is not set
 CONFIG_USART2_RXDMA=y
+CONFIG_STM32_USART3_SERIALDRIVER=y
+# CONFIG_STM32_USART3_1WIREDRIVER is not set
 # CONFIG_USART3_RS485 is not set
 CONFIG_USART3_RXDMA=y
+CONFIG_STM32_UART4_SERIALDRIVER=y
+# CONFIG_STM32_UART4_1WIREDRIVER is not set
 # CONFIG_UART4_RS485 is not set
 CONFIG_UART4_RXDMA=y
-CONFIG_UART5_RXDMA=y
+CONFIG_STM32_USART6_SERIALDRIVER=y
+# CONFIG_STM32_USART6_1WIREDRIVER is not set
 # CONFIG_USART6_RS485 is not set
 CONFIG_USART6_RXDMA=y
+CONFIG_STM32_UART7_SERIALDRIVER=y
+# CONFIG_STM32_UART7_1WIREDRIVER is not set
 # CONFIG_UART7_RS485 is not set
 CONFIG_UART7_RXDMA=y
+CONFIG_STM32_UART8_SERIALDRIVER=y
+# CONFIG_STM32_UART8_1WIREDRIVER is not set
 # CONFIG_UART8_RS485 is not set
 CONFIG_UART8_RXDMA=y
+
+#
+# Serial Driver Configuration
+#
 CONFIG_SERIAL_DISABLE_REORDERING=y
+CONFIG_STM32_FLOWCONTROL_BROKEN=y
+CONFIG_STM32_USART_BREAKS=y
+CONFIG_STM32_SERIALBRK_BSDCOMPAT=y
 CONFIG_STM32_USART_SINGLEWIRE=y
 
 #
@@ -323,26 +530,42 @@ CONFIG_STM32_USART_SINGLEWIRE=y
 #
 # I2C Configuration
 #
+# CONFIG_STM32_I2C_ALT is not set
 # CONFIG_STM32_I2C_DYNTIMEO is not set
 CONFIG_STM32_I2CTIMEOSEC=0
 CONFIG_STM32_I2CTIMEOMS=10
+CONFIG_STM32_I2CTIMEOTICKS=10
 # CONFIG_STM32_I2C_DUTY16_9 is not set
 
 #
 # SDIO Configuration
 #
-CONFIG_SDIO_PRI=128
+CONFIG_SDIO_DMAPRIO=0x00010000
+CONFIG_STM32_BBSRAM=y
+CONFIG_STM32_BBSRAM_FILES=4
+CONFIG_STM32_SAVE_CRASHDUMP=y
+# CONFIG_STM32_HAVE_RTC_COUNTER is not set
+# CONFIG_STM32_HAVE_RTC_SUBSECONDS is not set
+CONFIG_RTC_MAGIC_REG=1
+CONFIG_RTC_MAGIC=0xfacefeee
+# CONFIG_RTC_LSECLOCK is not set
+# CONFIG_RTC_LSICLOCK is not set
+CONFIG_RTC_HSECLOCK=y
 
 #
-# USB Host Configuration
+# USB FS Host Configuration
 #
 
 #
-# USB Device Configuration
+# USB HS Host Configuration
 #
 
 #
-# External Memory Configuration
+# USB Host Debug Configuration
+#
+
+#
+# USB Device Configuration
 #
 
 #
@@ -351,12 +574,24 @@ CONFIG_SDIO_PRI=128
 # CONFIG_ARCH_NOINTC is not set
 # CONFIG_ARCH_VECNOTIRQ is not set
 CONFIG_ARCH_DMA=y
-# CONFIG_ARCH_IRQPRIO is not set
-# CONFIG_CUSTOM_STACK is not set
-# CONFIG_ADDRENV is not set
+CONFIG_ARCH_HAVE_IRQPRIO=y
+# CONFIG_ARCH_L2CACHE is not set
+# CONFIG_ARCH_HAVE_COHERENT_DCACHE is not set
+# CONFIG_ARCH_HAVE_ADDRENV is not set
+# CONFIG_ARCH_NEED_ADDRENV_MAPPING is not set
+# CONFIG_ARCH_HAVE_MULTICPU is not set
 CONFIG_ARCH_HAVE_VFORK=y
+# CONFIG_ARCH_HAVE_MMU is not set
+CONFIG_ARCH_HAVE_MPU=y
+# CONFIG_ARCH_NAND_HWECC is not set
+# CONFIG_ARCH_HAVE_EXTCLK is not set
+# CONFIG_ARCH_HAVE_POWEROFF is not set
+CONFIG_ARCH_HAVE_RESET=y
+# CONFIG_ARCH_USE_MPU is not set
+CONFIG_ARCH_IRQPRIO=y
 CONFIG_ARCH_STACKDUMP=y
 # CONFIG_ENDIAN_BIG is not set
+# CONFIG_ARCH_IDLE_CUSTOM is not set
 # CONFIG_ARCH_HAVE_RAMFUNCS is not set
 CONFIG_ARCH_HAVE_RAMVECTORS=y
 # CONFIG_ARCH_RAMVECTORS is not set
@@ -366,11 +601,14 @@ CONFIG_ARCH_HAVE_RAMVECTORS=y
 #
 CONFIG_BOARD_LOOPSPERMSEC=16717
 # CONFIG_ARCH_CALIBRATION is not set
-CONFIG_DRAM_START=0x20000000
-CONFIG_DRAM_SIZE=262144
+
+#
+# Interrupt options
+#
 CONFIG_ARCH_HAVE_INTERRUPTSTACK=y
-# The actual usage is 420 bytes
-CONFIG_ARCH_INTERRUPTSTACK=750
+CONFIG_ARCH_INTERRUPTSTACK=670
+CONFIG_ARCH_HAVE_HIPRI_INTERRUPT=y
+CONFIG_ARCH_HIPRI_INTERRUPT=y
 
 #
 # Boot options
@@ -381,50 +619,118 @@ CONFIG_BOOT_RUNFROMFLASH=y
 # CONFIG_BOOT_RUNFROMSDRAM is not set
 # CONFIG_BOOT_COPYTORAM is not set
 
+#
+# Boot Memory Configuration
+#
+CONFIG_RAM_START=0x20000000
+CONFIG_RAM_SIZE=262144
+# CONFIG_ARCH_HAVE_SDRAM is not set
+
 #
 # Board Selection
 #
 CONFIG_ARCH_BOARD_AUAV_X21=y
 CONFIG_ARCH_BOARD="auav_x21"
 
+#
+# Custom Board Configuration
+#
+# CONFIG_BOARD_CUSTOM_LEDS is not set
+# CONFIG_BOARD_CUSTOM_BUTTONS is not set
+CONFIG_BOARD_HAS_PROBES=y
+# CONFIG_BOARD_USE_PROBES is not set
+
 #
 # Common Board Options
 #
-CONFIG_NSH_MMCSDMINOR=0
-CONFIG_NSH_MMCSDSLOTNO=0
-CONFIG_MMCSD_HAVE_SDIOWAIT_WRCOMPLETE=y
+
 #
 # Board-Specific Options
 #
+CONFIG_BOARD_CRASHDUMP=y
+CONFIG_BOARD_RESET_ON_CRASH=y
+CONFIG_LIB_BOARDCTL=y
+# CONFIG_BOARDCTL_RESET is not set
+# CONFIG_BOARDCTL_UNIQUEID is not set
+CONFIG_BOARDCTL_USBDEVCTRL=y
+# CONFIG_BOARDCTL_TSCTEST is not set
+# CONFIG_BOARDCTL_ADCTEST is not set
+# CONFIG_BOARDCTL_PWMTEST is not set
+# CONFIG_BOARDCTL_GRAPHICS is not set
+# CONFIG_BOARDCTL_IOCTL is not set
 
 #
 # RTOS Features
 #
-# CONFIG_BOARD_INITIALIZE is not set
-CONFIG_MSEC_PER_TICK=1
+# CONFIG_DISABLE_OS_API is not set
+
+#
+# Clocks and Timers
+#
+CONFIG_ARCH_HAVE_TICKLESS=y
+# CONFIG_SCHED_TICKLESS is not set
+CONFIG_USEC_PER_TICK=1000
+# CONFIG_SYSTEM_TIME64 is not set
+# CONFIG_CLOCK_MONOTONIC is not set
+CONFIG_ARCH_HAVE_TIMEKEEPING=y
+# CONFIG_JULIAN_TIME is not set
+CONFIG_MAX_WDOGPARMS=2
+CONFIG_PREALLOC_WDOGS=50
+CONFIG_WDOG_INTRESERVE=4
+CONFIG_PREALLOC_TIMERS=50
+
+#
+# Tasks and Scheduling
+#
+# CONFIG_INIT_NONE is not set
+CONFIG_INIT_ENTRYPOINT=y
+# CONFIG_INIT_FILEPATH is not set
+CONFIG_USER_ENTRYPOINT="nsh_main"
 CONFIG_RR_INTERVAL=0
-CONFIG_SCHED_INSTRUMENTATION=y
+# CONFIG_SCHED_SPORADIC is not set
 CONFIG_TASK_NAME_SIZE=24
+CONFIG_MAX_TASKS=32
 # CONFIG_SCHED_HAVE_PARENT is not set
-# CONFIG_JULIAN_TIME is not set
-CONFIG_START_YEAR=1970
-CONFIG_START_MONTH=1
-CONFIG_START_DAY=1
-CONFIG_DEV_CONSOLE=y
+CONFIG_SCHED_WAITPID=y
+
+#
+# Pthread Options
+#
 # CONFIG_MUTEX_TYPES is not set
-CONFIG_PRIORITY_INHERITANCE=y
-CONFIG_SEM_PREALLOCHOLDERS=0
-CONFIG_SEM_NNESTPRIO=8
+CONFIG_NPTHREAD_KEYS=4
+
+#
+# Performance Monitoring
+#
+# CONFIG_SCHED_CPULOAD is not set
+CONFIG_SCHED_INSTRUMENTATION=y
+# CONFIG_SCHED_INSTRUMENTATION_PREEMPTION is not set
+# CONFIG_SCHED_INSTRUMENTATION_CSECTION is not set
+# CONFIG_SCHED_INSTRUMENTATION_BUFFER is not set
+
+#
+# Files and I/O
+#
+CONFIG_DEV_CONSOLE=y
 # CONFIG_FDCLONE_DISABLE is not set
 CONFIG_FDCLONE_STDIO=y
 CONFIG_SDCLONE_DISABLE=y
-CONFIG_SCHED_WAITPID=y
+CONFIG_NFILE_DESCRIPTORS=51
+CONFIG_NFILE_STREAMS=8
+CONFIG_NAME_MAX=32
+CONFIG_PRIORITY_INHERITANCE=y
+CONFIG_SEM_PREALLOCHOLDERS=0
+CONFIG_SEM_NNESTPRIO=8
+
+#
+# RTOS hooks
+#
+# CONFIG_BOARD_INITIALIZE is not set
 # CONFIG_SCHED_STARTHOOK is not set
 CONFIG_SCHED_ATEXIT=y
 CONFIG_SCHED_ATEXIT_MAX=1
 # CONFIG_SCHED_ONEXIT is not set
-CONFIG_USER_ENTRYPOINT="nsh_main"
-# CONFIG_DISABLE_OS_API is not set
+# CONFIG_SIG_EVTHREAD is not set
 
 #
 # Signal Numbers
@@ -436,27 +742,35 @@ CONFIG_SIG_SIGCONDTIMEDOUT=16
 CONFIG_SIG_SIGWORK=4
 
 #
-# Sizes of configurable things (0 disables)
+# POSIX Message Queue Options
 #
-CONFIG_MAX_TASKS=32
-CONFIG_MAX_TASK_ARGS=10
-CONFIG_NPTHREAD_KEYS=4
-CONFIG_NFILE_DESCRIPTORS=51
-CONFIG_NFILE_STREAMS=8
-CONFIG_NAME_MAX=32
 CONFIG_PREALLOC_MQ_MSGS=4
 CONFIG_MQ_MAXMSGSIZE=32
-CONFIG_MAX_WDOGPARMS=2
-CONFIG_PREALLOC_WDOGS=50
-CONFIG_PREALLOC_TIMERS=50
+# CONFIG_MODULE is not set
+
+#
+# Work queue support
+#
+CONFIG_SCHED_WORKQUEUE=y
+CONFIG_SCHED_HPWORK=y
+CONFIG_SCHED_HPWORKPRIORITY=192
+CONFIG_SCHED_HPWORKPERIOD=5000
+CONFIG_SCHED_HPWORKSTACKSIZE=1800
+CONFIG_SCHED_LPWORK=y
+CONFIG_SCHED_LPNTHREADS=1
+CONFIG_SCHED_LPWORKPRIORITY=50
+CONFIG_SCHED_LPWORKPRIOMAX=176
+CONFIG_SCHED_LPWORKPERIOD=50000
+CONFIG_SCHED_LPWORKSTACKSIZE=1800
 
 #
 # Stack and heap information
 #
-CONFIG_IDLETHREAD_STACKSIZE=1000
+CONFIG_IDLETHREAD_STACKSIZE=500
 CONFIG_USERMAIN_STACKSIZE=2500
 CONFIG_PTHREAD_STACK_MIN=512
 CONFIG_PTHREAD_STACK_DEFAULT=2048
+# CONFIG_LIB_SYSCALL is not set
 
 #
 # Device Drivers
@@ -464,31 +778,74 @@ CONFIG_PTHREAD_STACK_DEFAULT=2048
 # CONFIG_DISABLE_POLL is not set
 CONFIG_DEV_NULL=y
 # CONFIG_DEV_ZERO is not set
-# CONFIG_LOOP is not set
+# CONFIG_DEV_URANDOM is not set
+# CONFIG_DEV_LOOP is not set
+
+#
+# Buffering
+#
+# CONFIG_DRVR_WRITEBUFFER is not set
+# CONFIG_DRVR_READAHEAD is not set
 # CONFIG_RAMDISK is not set
 # CONFIG_CAN is not set
+# CONFIG_ARCH_HAVE_PWM_PULSECOUNT is not set
+# CONFIG_ARCH_HAVE_PWM_MULTICHAN is not set
 # CONFIG_PWM is not set
+CONFIG_ARCH_HAVE_I2CRESET=y
 CONFIG_I2C=y
 # CONFIG_I2C_SLAVE is not set
-CONFIG_I2C_TRANSFER=y
-# CONFIG_I2C_WRITEREAD is not set
 # CONFIG_I2C_POLLED is not set
-# CONFIG_I2C_TRACE is not set
-CONFIG_ARCH_HAVE_I2CRESET=y
 CONFIG_I2C_RESET=y
+# CONFIG_I2C_TRACE is not set
+# CONFIG_I2C_DRIVER is not set
 CONFIG_SPI=y
-# CONFIG_SPI_OWNBUS is not set
+# CONFIG_SPI_SLAVE is not set
 CONFIG_SPI_EXCHANGE=y
 # CONFIG_SPI_CMDDATA is not set
+# CONFIG_SPI_CALLBACK is not set
+# CONFIG_SPI_BITBANG is not set
+# CONFIG_SPI_HWFEATURES is not set
+# CONFIG_SPI_CRCGENERATION is not set
+# CONFIG_SPI_CS_CONTROL is not set
+# CONFIG_SPI_CS_DELAY_CONTROL is not set
+# CONFIG_I2S is not set
+
+#
+# Timer Driver Support
+#
+# CONFIG_TIMER is not set
 CONFIG_RTC=y
 CONFIG_RTC_DATETIME=y
-CONFIG_RTC_HSECLOCK=y
+# CONFIG_RTC_ALARM is not set
+# CONFIG_RTC_DRIVER is not set
+# CONFIG_RTC_EXTERNAL is not set
 CONFIG_WATCHDOG=y
+CONFIG_WATCHDOG_DEVPATH="/dev/watchdog0"
+# CONFIG_TIMERS_CS2100CP is not set
 # CONFIG_ANALOG is not set
 # CONFIG_AUDIO_DEVICES is not set
+# CONFIG_VIDEO_DEVICES is not set
 # CONFIG_BCH is not set
 # CONFIG_INPUT is not set
+
+#
+# IO Expander/GPIO Support
+#
+# CONFIG_IOEXPANDER is not set
+# CONFIG_DEV_GPIO is not set
+
+#
+# LCD Driver Support
+#
 # CONFIG_LCD is not set
+# CONFIG_SLCD is not set
+
+#
+# LED Support
+#
+# CONFIG_RGBLED is not set
+# CONFIG_PCA9635PW is not set
+# CONFIG_NCP5623C is not set
 CONFIG_MMCSD=y
 CONFIG_MMCSD_NSLOTS=1
 # CONFIG_MMCSD_READONLY is not set
@@ -496,48 +853,94 @@ CONFIG_MMCSD_MULTIBLOCK_DISABLE=y
 # CONFIG_MMCSD_MMCSUPPORT is not set
 # CONFIG_MMCSD_HAVECARDDETECT is not set
 # CONFIG_MMCSD_SPI is not set
+CONFIG_ARCH_HAVE_SDIO=y
+CONFIG_ARCH_HAVE_SDIOWAIT_WRCOMPLETE=y
 CONFIG_MMCSD_SDIO=y
+CONFIG_SDIO_PREFLIGHT=y
 # CONFIG_SDIO_MUXBUS is not set
+CONFIG_MMCSD_SDIOWAIT_WRCOMPLETE=y
 # CONFIG_SDIO_BLOCKSETUP is not set
+# CONFIG_MODEM is not set
 CONFIG_MTD=y
 
 #
 # MTD Configuration
 #
 CONFIG_MTD_PARTITION=y
+# CONFIG_MTD_SECT512 is not set
+# CONFIG_MTD_PARTITION_NAMES is not set
 CONFIG_MTD_BYTE_WRITE=y
+# CONFIG_MTD_PROGMEM is not set
+# CONFIG_MTD_CONFIG is not set
 
 #
 # MTD Device Drivers
 #
+# CONFIG_MTD_NAND is not set
 # CONFIG_RAMMTD is not set
+# CONFIG_FILEMTD is not set
 # CONFIG_MTD_AT24XX is not set
+# CONFIG_MTD_AT25 is not set
 # CONFIG_MTD_AT45DB is not set
+# CONFIG_MTD_IS25XP is not set
 # CONFIG_MTD_M25P is not set
+# CONFIG_MTD_S25FL1 is not set
+# CONFIG_MTD_N25QXXX is not set
 # CONFIG_MTD_SMART is not set
 CONFIG_MTD_RAMTRON=y
+CONFIG_RAMTRON_WRITEWAIT=y
+CONFIG_RAMTRON_SETSPEED=y
 # CONFIG_MTD_SST25 is not set
+# CONFIG_MTD_SST25XX is not set
+# CONFIG_MTD_SST26 is not set
 # CONFIG_MTD_SST39FV is not set
 # CONFIG_MTD_W25 is not set
+# CONFIG_EEPROM is not set
 CONFIG_PIPES=y
+CONFIG_DEV_PIPE_MAXSIZE=1024
+CONFIG_DEV_PIPE_SIZE=1024
+CONFIG_DEV_FIFO_SIZE=0
 # CONFIG_PM is not set
 # CONFIG_POWER is not set
 # CONFIG_SENSORS is not set
+# CONFIG_SERCOMM_CONSOLE is not set
 CONFIG_SERIAL=y
 # CONFIG_DEV_LOWCONSOLE is not set
 CONFIG_SERIAL_REMOVABLE=y
+CONFIG_SERIAL_CONSOLE=y
 # CONFIG_16550_UART is not set
-CONFIG_ARCH_HAVE_UART4=y
-CONFIG_ARCH_HAVE_UART7=y
-CONFIG_ARCH_HAVE_UART8=y
-CONFIG_ARCH_HAVE_USART1=y
-CONFIG_ARCH_HAVE_USART2=y
-CONFIG_ARCH_HAVE_USART3=y
-CONFIG_ARCH_HAVE_USART6=y
+# CONFIG_UART_SERIALDRIVER is not set
+# CONFIG_UART0_SERIALDRIVER is not set
+# CONFIG_UART1_SERIALDRIVER is not set
+# CONFIG_UART2_SERIALDRIVER is not set
+# CONFIG_UART3_SERIALDRIVER is not set
+CONFIG_UART4_SERIALDRIVER=y
+# CONFIG_UART5_SERIALDRIVER is not set
+# CONFIG_UART6_SERIALDRIVER is not set
+CONFIG_UART7_SERIALDRIVER=y
+CONFIG_UART8_SERIALDRIVER=y
+# CONFIG_SCI0_SERIALDRIVER is not set
+# CONFIG_SCI1_SERIALDRIVER is not set
+# CONFIG_USART0_SERIALDRIVER is not set
+CONFIG_USART1_SERIALDRIVER=y
+CONFIG_USART2_SERIALDRIVER=y
+CONFIG_USART3_SERIALDRIVER=y
+# CONFIG_USART4_SERIALDRIVER is not set
+# CONFIG_USART5_SERIALDRIVER is not set
+CONFIG_USART6_SERIALDRIVER=y
+# CONFIG_USART7_SERIALDRIVER is not set
+# CONFIG_USART8_SERIALDRIVER is not set
+# CONFIG_OTHER_UART_SERIALDRIVER is not set
 CONFIG_MCU_SERIAL=y
 CONFIG_STANDARD_SERIAL=y
 CONFIG_SERIAL_NPOLLWAITERS=2
-# CONFIG_SERIAL_TIOCSERGSTRUCT is not set
+CONFIG_SERIAL_IFLOWCONTROL=y
+CONFIG_SERIAL_OFLOWCONTROL=y
+# CONFIG_SERIAL_DMA is not set
+CONFIG_SERIAL_IFLOWCONTROL_WATERMARKS=y
+CONFIG_SERIAL_IFLOWCONTROL_LOWER_WATERMARK=10
+CONFIG_SERIAL_IFLOWCONTROL_UPPER_WATERMARK=90
+CONFIG_ARCH_HAVE_SERIAL_TERMIOS=y
 # CONFIG_USART1_SERIAL_CONSOLE is not set
 # CONFIG_USART2_SERIAL_CONSOLE is not set
 # CONFIG_USART3_SERIAL_CONSOLE is not set
@@ -545,6 +948,7 @@ CONFIG_SERIAL_NPOLLWAITERS=2
 # CONFIG_USART6_SERIAL_CONSOLE is not set
 CONFIG_UART7_SERIAL_CONSOLE=y
 # CONFIG_UART8_SERIAL_CONSOLE is not set
+# CONFIG_OTHER_SERIAL_CONSOLE is not set
 # CONFIG_NO_SERIAL_CONSOLE is not set
 
 #
@@ -558,6 +962,7 @@ CONFIG_USART1_PARITY=0
 CONFIG_USART1_2STOP=0
 # CONFIG_USART1_IFLOWCONTROL is not set
 # CONFIG_USART1_OFLOWCONTROL is not set
+# CONFIG_USART1_DMA is not set
 
 #
 # USART2 Configuration
@@ -570,6 +975,7 @@ CONFIG_USART2_PARITY=0
 CONFIG_USART2_2STOP=0
 CONFIG_USART2_IFLOWCONTROL=y
 CONFIG_USART2_OFLOWCONTROL=y
+# CONFIG_USART2_DMA is not set
 
 #
 # USART3 Configuration
@@ -582,6 +988,7 @@ CONFIG_USART3_PARITY=0
 CONFIG_USART3_2STOP=0
 CONFIG_USART3_IFLOWCONTROL=y
 CONFIG_USART3_OFLOWCONTROL=y
+# CONFIG_USART3_DMA is not set
 
 #
 # UART4 Configuration
@@ -594,6 +1001,7 @@ CONFIG_UART4_PARITY=0
 CONFIG_UART4_2STOP=0
 # CONFIG_UART4_IFLOWCONTROL is not set
 # CONFIG_UART4_OFLOWCONTROL is not set
+# CONFIG_UART4_DMA is not set
 
 #
 # USART6 Configuration
@@ -606,6 +1014,7 @@ CONFIG_USART6_PARITY=0
 CONFIG_USART6_2STOP=0
 # CONFIG_USART6_IFLOWCONTROL is not set
 # CONFIG_USART6_OFLOWCONTROL is not set
+# CONFIG_USART6_DMA is not set
 
 #
 # UART7 Configuration
@@ -618,6 +1027,7 @@ CONFIG_UART7_PARITY=0
 CONFIG_UART7_2STOP=0
 # CONFIG_UART7_IFLOWCONTROL is not set
 # CONFIG_UART7_OFLOWCONTROL is not set
+# CONFIG_UART7_DMA is not set
 
 #
 # UART8 Configuration
@@ -630,8 +1040,8 @@ CONFIG_UART8_PARITY=0
 CONFIG_UART8_2STOP=0
 # CONFIG_UART8_IFLOWCONTROL is not set
 # CONFIG_UART8_OFLOWCONTROL is not set
-CONFIG_SERIAL_IFLOWCONTROL=y
-CONFIG_SERIAL_OFLOWCONTROL=y
+# CONFIG_UART8_DMA is not set
+# CONFIG_PSEUDOTERM is not set
 CONFIG_USBDEV=y
 
 #
@@ -643,6 +1053,7 @@ CONFIG_USBDEV=y
 CONFIG_USBDEV_BUSPOWERED=y
 CONFIG_USBDEV_MAXPOWER=500
 # CONFIG_USBDEV_DMA is not set
+# CONFIG_ARCH_USBDEV_STALLQUEUE is not set
 # CONFIG_USBDEV_TRACE is not set
 
 #
@@ -662,8 +1073,8 @@ CONFIG_CDCACM_EPBULKOUT_HSSIZE=512
 CONFIG_CDCACM_EPBULKIN=2
 CONFIG_CDCACM_EPBULKIN_FSSIZE=64
 CONFIG_CDCACM_EPBULKIN_HSSIZE=512
-CONFIG_CDCACM_NWRREQS=4
 CONFIG_CDCACM_NRDREQS=4
+CONFIG_CDCACM_NWRREQS=4
 CONFIG_CDCACM_BULKIN_REQLEN=96
 CONFIG_CDCACM_RXBUFSIZE=600
 CONFIG_CDCACM_TXBUFSIZE=8000
@@ -673,22 +1084,35 @@ CONFIG_CDCACM_VENDORSTR="AUAV"
 CONFIG_CDCACM_PRODUCTSTR="PX4 AUAV X2.1"
 # CONFIG_USBMSC is not set
 # CONFIG_USBHOST is not set
-# CONFIG_WIRELESS is not set
-
-#
-# System Logging Device Options
-#
+# CONFIG_HAVE_USBTRACE is not set
+# CONFIG_DRIVERS_WIRELESS is not set
 
 #
 # System Logging
 #
+# CONFIG_ARCH_SYSLOG is not set
 # CONFIG_RAMLOG is not set
+# CONFIG_SYSLOG_INTBUFFER is not set
+# CONFIG_SYSLOG_TIMESTAMP is not set
+CONFIG_SYSLOG_SERIAL_CONSOLE=y
+# CONFIG_SYSLOG_CHAR is not set
+CONFIG_SYSLOG_CONSOLE=y
+# CONFIG_SYSLOG_NONE is not set
+# CONFIG_SYSLOG_FILE is not set
+# CONFIG_SYSLOG_CHARDEV is not set
 
 #
 # Networking Support
 #
+# CONFIG_ARCH_HAVE_NET is not set
+# CONFIG_ARCH_HAVE_PHY is not set
 # CONFIG_NET is not set
 
+#
+# Crypto API
+#
+# CONFIG_CRYPTO is not set
+
 #
 # File Systems
 #
@@ -697,23 +1121,39 @@ CONFIG_CDCACM_PRODUCTSTR="PX4 AUAV X2.1"
 # File system configuration
 #
 # CONFIG_DISABLE_MOUNTPOINT is not set
+# CONFIG_FS_AUTOMOUNTER is not set
+# CONFIG_DISABLE_PSEUDOFS_OPERATIONS is not set
+CONFIG_FS_READABLE=y
+CONFIG_FS_WRITABLE=y
+# CONFIG_FS_AIO is not set
+# CONFIG_FS_NAMED_SEMAPHORES is not set
+CONFIG_FS_MQUEUE_MPATH="/var/mqueue"
 # CONFIG_FS_RAMMAP is not set
 CONFIG_FS_FAT=y
 CONFIG_FAT_LCNAMES=y
 CONFIG_FAT_LFN=y
 CONFIG_FAT_MAXFNAME=32
 CONFIG_FS_FATTIME=y
+# CONFIG_FAT_FORCE_INDIRECT is not set
 CONFIG_FAT_DMAMEMORY=y
+CONFIG_FAT_DIRECT_RETRY=y
 # CONFIG_FS_NXFFS is not set
 CONFIG_FS_ROMFS=y
+# CONFIG_FS_TMPFS is not set
 # CONFIG_FS_SMARTFS is not set
 CONFIG_FS_BINFS=y
+CONFIG_FS_PROCFS=y
+CONFIG_FS_PROCFS_REGISTER=y
 
 #
-# System Logging
+# Exclude individual procfs entries
 #
-# CONFIG_SYSLOG_ENABLE is not set
-# CONFIG_SYSLOG is not set
+# CONFIG_FS_PROCFS_EXCLUDE_PROCESS is not set
+# CONFIG_FS_PROCFS_EXCLUDE_UPTIME is not set
+# CONFIG_FS_PROCFS_EXCLUDE_MOUNTS is not set
+# CONFIG_FS_PROCFS_EXCLUDE_MTD is not set
+# CONFIG_FS_PROCFS_EXCLUDE_PARTITIONS is not set
+# CONFIG_FS_UNIONFS is not set
 
 #
 # Graphics Support
@@ -723,13 +1163,12 @@ CONFIG_FS_BINFS=y
 #
 # Memory Management
 #
-# CONFIG_MM_MULTIHEAP is not set
 # CONFIG_MM_SMALL is not set
 CONFIG_MM_REGIONS=2
+# CONFIG_ARCH_HAVE_HEAP2 is not set
 CONFIG_GRAN=y
 # CONFIG_GRAN_SINGLE is not set
-# CONFIG_GRAN_INTR is not set
-# CONFIG_DEBUG_GRAN is not set
+CONFIG_GRAN_INTR=y
 
 #
 # Audio Support
@@ -737,7 +1176,11 @@ CONFIG_GRAN=y
 # CONFIG_AUDIO is not set
 
 #
-# Binary Formats
+# Wireless Support
+#
+
+#
+# Binary Loader
 #
 # CONFIG_BINFMT_DISABLE is not set
 # CONFIG_BINFMT_EXEPATH is not set
@@ -760,6 +1203,8 @@ CONFIG_NUNGET_CHARS=2
 CONFIG_LIB_HOMEDIR="/"
 # CONFIG_NOPRINTF_FIELDWIDTH is not set
 CONFIG_LIBC_FLOATINGPOINT=y
+CONFIG_LIBC_LONG_LONG=y
+# CONFIG_LIBC_IOCTL_VARIADIC is not set
 CONFIG_LIB_RAND_ORDER=1
 # CONFIG_EOL_IS_CR is not set
 # CONFIG_EOL_IS_LF is not set
@@ -771,7 +1216,11 @@ CONFIG_TASK_SPAWN_DEFAULT_STACKSIZE=2048
 CONFIG_LIBC_STRERROR=y
 # CONFIG_LIBC_STRERROR_SHORT is not set
 # CONFIG_LIBC_PERROR_STDOUT is not set
+CONFIG_LIBC_TMPDIR="/tmp"
+CONFIG_LIBC_MAX_TMPFILE=32
 CONFIG_ARCH_LOWPUTC=y
+# CONFIG_LIBC_LOCALTIME is not set
+CONFIG_TIME_EXTENDED=y
 CONFIG_LIB_SENDFILE_BUFSIZE=512
 # CONFIG_ARCH_ROMGETC is not set
 CONFIG_ARCH_OPTIMIZED_FUNCTIONS=y
@@ -787,21 +1236,18 @@ CONFIG_ARCH_MEMCPY=y
 # CONFIG_ARCH_STRLEN is not set
 # CONFIG_ARCH_STRNLEN is not set
 # CONFIG_ARCH_BZERO is not set
+CONFIG_ARCH_HAVE_TLS=y
+# CONFIG_TLS is not set
+# CONFIG_LIBC_NETDB is not set
+# CONFIG_NETDB_HOSTFILE is not set
 
 #
 # Non-standard Library Support
 #
-CONFIG_SCHED_WORKQUEUE=y
-CONFIG_SCHED_HPWORK=y
-CONFIG_SCHED_WORKPRIORITY=192
-CONFIG_SCHED_WORKPERIOD=5000
-CONFIG_SCHED_WORKSTACKSIZE=1600
-CONFIG_SCHED_LPWORK=y
-CONFIG_SCHED_LPWORKPRIORITY=50
-CONFIG_SCHED_LPWORKPERIOD=50000
-CONFIG_SCHED_LPWORKSTACKSIZE=1600
+# CONFIG_LIB_CRC64_FAST is not set
 # CONFIG_LIB_KBDCODEC is not set
 # CONFIG_LIB_SLCDCODEC is not set
+# CONFIG_LIB_HEX2BIN is not set
 
 #
 # Basic CXX Support
@@ -825,238 +1271,267 @@ CONFIG_HAVE_CXXINITIALIZE=y
 #
 CONFIG_BUILTIN_PROXY_STACKSIZE=1024
 
+#
+# CAN Utilities
+#
+# CONFIG_CANUTILS_LIBUAVCAN is not set
+
 #
 # Examples
 #
-# CONFIG_EXAMPLES_BUTTONS is not set
-# CONFIG_EXAMPLES_CAN is not set
-CONFIG_EXAMPLES_CDCACM=y
-# CONFIG_EXAMPLES_COMPOSITE is not set
+# CONFIG_EXAMPLES_CHAT is not set
+# CONFIG_EXAMPLES_CONFIGDATA is not set
+# CONFIG_EXAMPLES_CPUHOG is not set
 # CONFIG_EXAMPLES_CXXTEST is not set
 # CONFIG_EXAMPLES_DHCPD is not set
 # CONFIG_EXAMPLES_ELF is not set
+# CONFIG_EXAMPLES_FSTEST is not set
 # CONFIG_EXAMPLES_FTPC is not set
 # CONFIG_EXAMPLES_FTPD is not set
 # CONFIG_EXAMPLES_HELLO is not set
 # CONFIG_EXAMPLES_HELLOXX is not set
-# CONFIG_EXAMPLES_JSON is not set
 # CONFIG_EXAMPLES_HIDKBD is not set
-# CONFIG_EXAMPLES_KEYPADTEST is not set
 # CONFIG_EXAMPLES_IGMP is not set
-# CONFIG_EXAMPLES_LCDRW is not set
+# CONFIG_EXAMPLES_JSON is not set
+# CONFIG_EXAMPLES_KEYPADTEST is not set
+# CONFIG_EXAMPLES_MEDIA is not set
 # CONFIG_EXAMPLES_MM is not set
 # CONFIG_EXAMPLES_MODBUS is not set
 CONFIG_EXAMPLES_MOUNT=y
+# CONFIG_EXAMPLES_MOUNT_BLOCKDEVICE is not set
+CONFIG_EXAMPLES_MOUNT_NSECTORS=2048
+CONFIG_EXAMPLES_MOUNT_SECTORSIZE=512
+CONFIG_EXAMPLES_MOUNT_RAMDEVNO=0
+# CONFIG_EXAMPLES_MTDPART is not set
 # CONFIG_EXAMPLES_NRF24L01TERM is not set
 CONFIG_EXAMPLES_NSH=y
+# CONFIG_EXAMPLES_NSH_CXXINITIALIZE is not set
 # CONFIG_EXAMPLES_NULL is not set
-# CONFIG_EXAMPLES_NX is not set
-# CONFIG_EXAMPLES_NXCONSOLE is not set
 # CONFIG_EXAMPLES_NXFFS is not set
-# CONFIG_EXAMPLES_NXFLAT is not set
 # CONFIG_EXAMPLES_NXHELLO is not set
 # CONFIG_EXAMPLES_NXIMAGE is not set
+# CONFIG_EXAMPLES_NX is not set
 # CONFIG_EXAMPLES_NXLINES is not set
+# CONFIG_EXAMPLES_NXTERM is not set
 # CONFIG_EXAMPLES_NXTEXT is not set
 # CONFIG_EXAMPLES_OSTEST is not set
-# CONFIG_EXAMPLES_PASHELLO is not set
+# CONFIG_EXAMPLES_PCA9635 is not set
 # CONFIG_EXAMPLES_PIPE is not set
 # CONFIG_EXAMPLES_POSIXSPAWN is not set
-# CONFIG_EXAMPLES_QENCODER is not set
+# CONFIG_EXAMPLES_PPPD is not set
+# CONFIG_EXAMPLES_RGBLED is not set
 # CONFIG_EXAMPLES_RGMP is not set
 # CONFIG_EXAMPLES_ROMFS is not set
 # CONFIG_EXAMPLES_SENDMAIL is not set
+# CONFIG_EXAMPLES_SERIALBLASTER is not set
+# CONFIG_EXAMPLES_SERIALRX is not set
 # CONFIG_EXAMPLES_SERLOOP is not set
 # CONFIG_EXAMPLES_SLCD is not set
-# CONFIG_EXAMPLES_SMART_TEST is not set
 # CONFIG_EXAMPLES_SMART is not set
+# CONFIG_EXAMPLES_SMART_TEST is not set
+# CONFIG_EXAMPLES_SMP is not set
 # CONFIG_EXAMPLES_TCPECHO is not set
 # CONFIG_EXAMPLES_TELNETD is not set
 # CONFIG_EXAMPLES_THTTPD is not set
 # CONFIG_EXAMPLES_TIFF is not set
 # CONFIG_EXAMPLES_TOUCHSCREEN is not set
-# CONFIG_EXAMPLES_UDP is not set
-# CONFIG_EXAMPLES_UIP is not set
+# CONFIG_EXAMPLES_UNIONFS is not set
 # CONFIG_EXAMPLES_USBSERIAL is not set
-# CONFIG_EXAMPLES_USBMSC is not set
 # CONFIG_EXAMPLES_USBTERM is not set
 # CONFIG_EXAMPLES_WATCHDOG is not set
+# CONFIG_EXAMPLES_WEBSERVER is not set
+
+#
+# File System Utilities
+#
+# CONFIG_FSUTILS_FLASH_ERASEALL is not set
+# CONFIG_FSUTILS_INIFILE is not set
+# CONFIG_FSUTILS_PASSWD is not set
+
+#
+# GPS Utilities
+#
+# CONFIG_GPSUTILS_MINMEA_LIB is not set
 
 #
 # Graphics Support
 #
 # CONFIG_TIFF is not set
+# CONFIG_GRAPHICS_TRAVELER is not set
 
 #
 # Interpreters
 #
+# CONFIG_INTERPRETERS_BAS is not set
 # CONFIG_INTERPRETERS_FICL is not set
+# CONFIG_INTERPRETERS_MICROPYTHON is not set
 # CONFIG_INTERPRETERS_PCODE is not set
 
 #
-# Network Utilities
+# FreeModBus
 #
+# CONFIG_MODBUS is not set
 
 #
-# Networking Utilities
+# Network Utilities
 #
+# CONFIG_NETUTILS_CHAT is not set
 # CONFIG_NETUTILS_CODECS is not set
-# CONFIG_NETUTILS_DHCPC is not set
-# CONFIG_NETUTILS_DHCPD is not set
+# CONFIG_NETUTILS_ESP8266 is not set
 # CONFIG_NETUTILS_FTPC is not set
-# CONFIG_NETUTILS_FTPD is not set
 # CONFIG_NETUTILS_JSON is not set
-# CONFIG_NETUTILS_RESOLV is not set
 # CONFIG_NETUTILS_SMTP is not set
-# CONFIG_NETUTILS_TELNETD is not set
-# CONFIG_NETUTILS_TFTPC is not set
 # CONFIG_NETUTILS_THTTPD is not set
-# CONFIG_NETUTILS_UIPLIB is not set
-# CONFIG_NETUTILS_WEBCLIENT is not set
 
 #
-# FreeModBus
+# NSH Library
 #
-# CONFIG_MODBUS is not set
+CONFIG_NSH_LIBRARY=y
+# CONFIG_NSH_MOTD is not set
 
 #
-# NSH Library
+# Command Line Configuration
 #
-CONFIG_NSH_LIBRARY=y
+CONFIG_NSH_READLINE=y
+# CONFIG_NSH_CLE is not set
+CONFIG_NSH_LINELEN=128
+# CONFIG_NSH_DISABLE_SEMICOLON is not set
+CONFIG_NSH_CMDPARMS=y
+CONFIG_NSH_MAXARGUMENTS=12
+CONFIG_NSH_ARGCAT=y
+CONFIG_NSH_NESTDEPTH=8
+# CONFIG_NSH_DISABLEBG is not set
 CONFIG_NSH_BUILTIN_APPS=y
 
 #
 # Disable Individual commands
 #
+CONFIG_NSH_DISABLE_ADDROUTE=y
+CONFIG_NSH_DISABLE_BASENAME=y
 # CONFIG_NSH_DISABLE_CAT is not set
 # CONFIG_NSH_DISABLE_CD is not set
 # CONFIG_NSH_DISABLE_CP is not set
-# CONFIG_NSH_DISABLE_DD is not set
+CONFIG_NSH_DISABLE_CMP=y
+# CONFIG_NSH_DISABLE_DATE is not set
+CONFIG_NSH_DISABLE_DD=y
+# CONFIG_NSH_DISABLE_DF is not set
+CONFIG_NSH_DISABLE_DELROUTE=y
+CONFIG_NSH_DISABLE_DIRNAME=y
 # CONFIG_NSH_DISABLE_ECHO is not set
 # CONFIG_NSH_DISABLE_EXEC is not set
 # CONFIG_NSH_DISABLE_EXIT is not set
 # CONFIG_NSH_DISABLE_FREE is not set
 # CONFIG_NSH_DISABLE_GET is not set
 # CONFIG_NSH_DISABLE_HELP is not set
-# CONFIG_NSH_DISABLE_HEXDUMP is not set
-# CONFIG_NSH_DISABLE_IFCONFIG is not set
+CONFIG_NSH_DISABLE_HEXDUMP=y
+CONFIG_NSH_DISABLE_IFCONFIG=y
+CONFIG_NSH_DISABLE_IFUPDOWN=y
 # CONFIG_NSH_DISABLE_KILL is not set
-# CONFIG_NSH_DISABLE_LOSETUP is not set
+CONFIG_NSH_DISABLE_LOSETUP=y
+CONFIG_NSH_DISABLE_LOSMART=y
 # CONFIG_NSH_DISABLE_LS is not set
-# CONFIG_NSH_DISABLE_MB is not set
+CONFIG_NSH_DISABLE_MB=y
 # CONFIG_NSH_DISABLE_MKDIR is not set
 # CONFIG_NSH_DISABLE_MKFATFS is not set
-# CONFIG_NSH_DISABLE_MKFIFO is not set
-# CONFIG_NSH_DISABLE_MKRD is not set
-# CONFIG_NSH_DISABLE_MH is not set
+CONFIG_NSH_DISABLE_MKFIFO=y
+CONFIG_NSH_DISABLE_MKRD=y
+CONFIG_NSH_DISABLE_MH=y
 # CONFIG_NSH_DISABLE_MOUNT is not set
+# CONFIG_NSH_DISABLE_MV is not set
 # CONFIG_NSH_DISABLE_MW is not set
-# CONFIG_NSH_DISABLE_NSFMOUNT is not set
 # CONFIG_NSH_DISABLE_PS is not set
-# CONFIG_NSH_DISABLE_PING is not set
-# CONFIG_NSH_DISABLE_PUT is not set
+CONFIG_NSH_DISABLE_PSSTACKUSAGE=y
+CONFIG_NSH_DISABLE_PUT=y
 # CONFIG_NSH_DISABLE_PWD is not set
 # CONFIG_NSH_DISABLE_RM is not set
 # CONFIG_NSH_DISABLE_RMDIR is not set
 # CONFIG_NSH_DISABLE_SET is not set
 # CONFIG_NSH_DISABLE_SH is not set
 # CONFIG_NSH_DISABLE_SLEEP is not set
+# CONFIG_NSH_DISABLE_TIME is not set
 # CONFIG_NSH_DISABLE_TEST is not set
 # CONFIG_NSH_DISABLE_UMOUNT is not set
+CONFIG_NSH_DISABLE_UNAME=y
 # CONFIG_NSH_DISABLE_UNSET is not set
 # CONFIG_NSH_DISABLE_USLEEP is not set
-# CONFIG_NSH_DISABLE_WGET is not set
-# CONFIG_NSH_DISABLE_XD is not set
+CONFIG_NSH_DISABLE_WGET=y
+CONFIG_NSH_DISABLE_XD=y
+CONFIG_NSH_MMCSDMINOR=0
+CONFIG_NSH_MMCSDSLOTNO=0
 
 #
 # Configure Command Options
 #
 # CONFIG_NSH_CMDOPT_DF_H is not set
 CONFIG_NSH_CODECS_BUFSIZE=128
+CONFIG_NSH_PROC_MOUNTPOINT="/proc"
 CONFIG_NSH_FILEIOSIZE=512
 CONFIG_NSH_STRERROR=y
-CONFIG_NSH_LINELEN=128
-CONFIG_NSH_MAXARGUMENTS=12
-CONFIG_NSH_NESTDEPTH=8
+
+#
+# Scripting Support
+#
 # CONFIG_NSH_DISABLESCRIPT is not set
-# CONFIG_NSH_DISABLEBG is not set
+# CONFIG_NSH_DISABLE_ITEF is not set
+# CONFIG_NSH_DISABLE_LOOPS is not set
 CONFIG_NSH_ROMFSETC=y
 # CONFIG_NSH_ROMFSRC is not set
 CONFIG_NSH_ROMFSMOUNTPT="/etc"
 CONFIG_NSH_INITSCRIPT="init.d/rcS"
 CONFIG_NSH_ROMFSDEVNO=0
 CONFIG_NSH_ROMFSSECTSIZE=128
+# CONFIG_NSH_DEFAULTROMFS is not set
 CONFIG_NSH_ARCHROMFS=y
+# CONFIG_NSH_CUSTOMROMFS is not set
 CONFIG_NSH_FATDEVNO=1
 CONFIG_NSH_FATSECTSIZE=512
 CONFIG_NSH_FATNSECTORS=1024
 CONFIG_NSH_FATMOUNTPT="/tmp"
-CONFIG_NSH_CONSOLE=y
-# CONFIG_NSH_USBCONSOLE is not set
 
 #
-# USB Trace Support
+# Console Configuration
 #
-# CONFIG_NSH_USBDEV_TRACE is not set
-# CONFIG_NSH_CONDEV is not set
+CONFIG_NSH_CONSOLE=y
+# CONFIG_NSH_USBCONSOLE is not set
+# CONFIG_NSH_ALTCONDEV is not set
 CONFIG_NSH_ARCHINIT=y
+# CONFIG_NSH_LOGIN is not set
+# CONFIG_NSH_CONSOLE_LOGIN is not set
 
 #
 # NxWidgets/NxWM
 #
 
 #
-# System NSH Add-Ons
+# Platform-specific Support
 #
+# CONFIG_PLATFORM_CONFIGDATA is not set
 
 #
-# Custom Free Memory Command
+# System Libraries and NSH Add-Ons
 #
+CONFIG_SYSTEM_CDCACM=y
+CONFIG_SYSTEM_CDCACM_DEVMINOR=0
+# CONFIG_SYSTEM_CLE is not set
+CONFIG_SYSTEM_CUTERM=y
+CONFIG_SYSTEM_CUTERM_DEFAULT_DEVICE="/dev/ttyS0"
+CONFIG_SYSTEM_CUTERM_DEFAULT_BAUD=57600
+CONFIG_SYSTEM_CUTERM_STACKSIZE=2048
+CONFIG_SYSTEM_CUTERM_PRIORITY=100
+# CONFIG_SYSTEM_FLASH_ERASEALL is not set
 # CONFIG_SYSTEM_FREE is not set
-
-#
-# I2C tool
-#
+# CONFIG_SYSTEM_HEX2BIN is not set
+# CONFIG_SYSTEM_HEXED is not set
 # CONFIG_SYSTEM_I2CTOOL is not set
-
-#
-# FLASH Program Installation
-#
 # CONFIG_SYSTEM_INSTALL is not set
-
-#
-# FLASH Erase-all Command
-#
-# CONFIG_SYSTEM_FLASH_ERASEALL is not set
-
-#
-# readline()
-#
+# CONFIG_SYSTEM_RAMTEST is not set
+CONFIG_READLINE_HAVE_EXTMATCH=y
 CONFIG_SYSTEM_READLINE=y
 CONFIG_READLINE_ECHO=y
-
-#
-# Power Off
-#
-# CONFIG_SYSTEM_POWEROFF is not set
-
-#
-# RAMTRON
-#
-# CONFIG_SYSTEM_RAMTRON is not set
-
-#
-# SD Card
-#
-# CONFIG_SYSTEM_SDCARD is not set
-
-#
-# Sysinfo
-#
-CONFIG_SYSTEM_SYSINFO=y
-
-#
-# USB Monitor
-#
-
-CONFIG_NSOCKET_DESCRIPTORS=0
+# CONFIG_READLINE_TABCOMPLETION is not set
+# CONFIG_READLINE_CMD_HISTORY is not set
+# CONFIG_SYSTEM_STACKMONITOR is not set
+# CONFIG_SYSTEM_SUDOKU is not set
+# CONFIG_SYSTEM_UBLOXMODEM is not set
+# CONFIG_SYSTEM_VI is not set
+# CONFIG_SYSTEM_ZMODEM is not set
diff --git a/nuttx-configs/auav-x21/src/Makefile b/nuttx-configs/auav-x21/src/Makefile
index f51b12d230..e6b8c50098 100644
--- a/nuttx-configs/auav-x21/src/Makefile
+++ b/nuttx-configs/auav-x21/src/Makefile
@@ -80,4 +80,8 @@ distclean: clean
 	$(call DELFILE, Make.dep)
 	$(call DELFILE, .depend)
 
+ifneq ($(BOARD_CONTEXT),y)
+context:
+endif
+
 -include Make.dep
diff --git a/src/drivers/boards/auav-x21/auav_can.c b/src/drivers/boards/auav-x21/auav_can.c
index 75c9b62f28..fed283d1a6 100644
--- a/src/drivers/boards/auav-x21/auav_can.c
+++ b/src/drivers/boards/auav-x21/auav_can.c
@@ -46,15 +46,15 @@
 #include <errno.h>
 #include <debug.h>
 
-#include <nuttx/can.h>
+#include <nuttx/drivers/can.h>
 #include <arch/board/board.h>
 
-#include "board_config.h"
 #include "chip.h"
 #include "up_arch.h"
 
 #include "stm32.h"
 #include "stm32_can.h"
+#include "board_config.h"
 
 #ifdef CONFIG_CAN
 
@@ -74,21 +74,6 @@
 #  define CAN_PORT 2
 #endif
 
-/* Debug ***************************************************************************/
-/* Non-standard debug that may be enabled just for testing CAN */
-
-#ifdef CONFIG_DEBUG_CAN
-#  define candbg    dbg
-#  define canvdbg   vdbg
-#  define canlldbg  lldbg
-#  define canllvdbg llvdbg
-#else
-#  define candbg(x...)
-#  define canvdbg(x...)
-#  define canlldbg(x...)
-#  define canllvdbg(x...)
-#endif
-
 /************************************************************************************
  * Private Functions
  ************************************************************************************/
@@ -121,7 +106,7 @@ int can_devinit(void)
 		can = stm32_caninitialize(CAN_PORT);
 
 		if (can == NULL) {
-			candbg("ERROR:  Failed to get CAN interface\n");
+			canerr("ERROR:  Failed to get CAN interface\n");
 			return -ENODEV;
 		}
 
@@ -130,7 +115,7 @@ int can_devinit(void)
 		ret = can_register("/dev/can0", can);
 
 		if (ret < 0) {
-			candbg("ERROR: can_register failed: %d\n", ret);
+			canerr("ERROR: can_register failed: %d\n", ret);
 			return ret;
 		}
 
diff --git a/src/drivers/boards/auav-x21/auav_init.c b/src/drivers/boards/auav-x21/auav_init.c
index 5f790c3fcb..c6079f524c 100644
--- a/src/drivers/boards/auav-x21/auav_init.c
+++ b/src/drivers/boards/auav-x21/auav_init.c
@@ -35,10 +35,10 @@
  * @file auav_init.c
  *
  * PX4FMU-specific early startup code.  This file implements the
- * nsh_archinitialize() function that is called early by nsh during startup.
+ * board_app_initialize() function that is called early by nsh during startup.
  *
  * Code here is run before the rcS script is invoked; it should start required
- * subsystems and perform board-specific initialisation.
+ * subsystems and perform board-specific initialization.
  */
 
 /****************************************************************************
@@ -49,17 +49,20 @@
 
 #include <stdbool.h>
 #include <stdio.h>
+#include <string.h>
 #include <debug.h>
 #include <errno.h>
 
 #include <nuttx/arch.h>
-#include <nuttx/spi.h>
-#include <nuttx/i2c.h>
+#include <nuttx/board.h>
+#include <nuttx/spi/spi.h>
+#include <nuttx/i2c/i2c_master.h>
 #include <nuttx/sdio.h>
 #include <nuttx/mmcsd.h>
 #include <nuttx/analog/adc.h>
 
 #include <stm32.h>
+#include "board_config.h"
 #include <stm32_uart.h>
 
 #include <arch/board/board.h>
@@ -67,11 +70,14 @@
 #include <drivers/drv_hrt.h>
 #include <drivers/drv_led.h>
 
+#include <systemlib/px4_macros.h>
 #include <systemlib/cpuload.h>
 #include <systemlib/perf_counter.h>
 #include <systemlib/err.h>
 
-#include "board_config.h"
+#include <systemlib/hardfault_log.h>
+
+#include <systemlib/systemlib.h>
 
 /****************************************************************************
  * Pre-Processor Definitions
@@ -83,13 +89,13 @@
 
 #ifdef CONFIG_CPP_HAVE_VARARGS
 #  ifdef CONFIG_DEBUG
-#    define message(...) lowsyslog(__VA_ARGS__)
+#    define message(...) syslog(__VA_ARGS__)
 #  else
 #    define message(...) printf(__VA_ARGS__)
 #  endif
 #else
 #  ifdef CONFIG_DEBUG
-#    define message lowsyslog
+#    define message syslog
 #  else
 #    define message printf
 #  endif
@@ -123,8 +129,8 @@ __END_DECLS
 __EXPORT void board_peripheral_reset(int ms)
 {
 	/* set the peripheral rails off */
-	px4_arch_configgpio(GPIO_VDD_5V_PERIPH_EN);
-	px4_arch_gpiowrite(GPIO_VDD_5V_PERIPH_EN, 1);
+	stm32_configgpio(GPIO_VDD_5V_PERIPH_EN);
+	stm32_gpiowrite(GPIO_VDD_5V_PERIPH_EN, 1);
 
 	/* wait for the peripheral rail to reach GND */
 	usleep(ms * 1000);
@@ -133,7 +139,7 @@ __EXPORT void board_peripheral_reset(int ms)
 	/* re-enable power */
 
 	/* switch the peripheral rail back on */
-	px4_arch_gpiowrite(GPIO_VDD_5V_PERIPH_EN, 0);
+	stm32_gpiowrite(GPIO_VDD_5V_PERIPH_EN, 0);
 }
 
 /************************************************************************************
@@ -149,31 +155,12 @@ __EXPORT void board_peripheral_reset(int ms)
 __EXPORT void
 stm32_boardinitialize(void)
 {
-	/* configure SPI interfaces */
-	stm32_spiinitialize();
-
 	/* configure LEDs */
-	up_ledinit();
-}
-
-/****************************************************************************
- * Name: nsh_archinitialize
- *
- * Description:
- *   Perform architecture specific initialization
- *
- ****************************************************************************/
-
-static struct spi_dev_s *spi1;
-static struct spi_dev_s *spi2;
-static struct sdio_dev_s *sdio;
-
-#include <math.h>
 
-__EXPORT int nsh_archinitialize(void)
-{
+	board_autoled_initialize();
 
 	/* configure ADC pins */
+
 	px4_arch_configgpio(GPIO_ADC1_IN2);	/* BATT_VOLTAGE_SENS */
 	px4_arch_configgpio(GPIO_ADC1_IN3);	/* BATT_CURRENT_SENS */
 	px4_arch_configgpio(GPIO_ADC1_IN4);	/* VDD_5V_SENS */
@@ -195,6 +182,62 @@ __EXPORT int nsh_archinitialize(void)
 	px4_arch_configgpio(GPIO_GPIO4_OUTPUT);
 	px4_arch_configgpio(GPIO_GPIO5_OUTPUT);
 
+	/* configure SPI interfaces */
+
+	stm32_spiinitialize();
+
+	/* configure USB interface */
+
+	stm32_usbinitialize();
+
+}
+
+/****************************************************************************
+ * Name: board_app_initialize
+ *
+ * Description:
+ *   Perform application specific initialization.  This function is never
+ *   called directly from application code, but only indirectly via the
+ *   (non-standard) boardctl() interface using the command BOARDIOC_INIT.
+ *
+ * Input Parameters:
+ *   arg - The boardctl() argument is passed to the board_app_initialize()
+ *         implementation without modification.  The argument has no
+ *         meaning to NuttX; the meaning of the argument is a contract
+ *         between the board-specific initalization logic and the the
+ *         matching application logic.  The value cold be such things as a
+ *         mode enumeration value, a set of DIP switch switch settings, a
+ *         pointer to configuration data read from a file or serial FLASH,
+ *         or whatever you would like to do with it.  Every implementation
+ *         should accept zero/NULL as a default configuration.
+ *
+ * Returned Value:
+ *   Zero (OK) is returned on success; a negated errno value is returned on
+ *   any failure to indicate the nature of the failure.
+ *
+ ****************************************************************************/
+
+
+static struct spi_dev_s *spi1;
+static struct spi_dev_s *spi2;
+static struct sdio_dev_s *sdio;
+
+__EXPORT int board_app_initialize(uintptr_t arg)
+{
+#if defined(CONFIG_HAVE_CXX) && defined(CONFIG_HAVE_CXXINITIALIZE)
+
+	/* run C++ ctors before we go any further */
+
+	up_cxxinitialize();
+
+#	if defined(CONFIG_EXAMPLES_NSH_CXXINITIALIZE)
+#  		error CONFIG_EXAMPLES_NSH_CXXINITIALIZE Must not be defined! Use CONFIG_HAVE_CXX and CONFIG_HAVE_CXXINITIALIZE.
+#	endif
+
+#else
+#  error platform is dependent on c++ both CONFIG_HAVE_CXX and CONFIG_HAVE_CXXINITIALIZE must be defined.
+#endif
+
 	/* configure the high-resolution time/callout interface */
 	hrt_init();
 
@@ -226,6 +269,140 @@ __EXPORT int nsh_archinitialize(void)
 		       (hrt_callout)stm32_serial_dma_poll,
 		       NULL);
 
+#if defined(CONFIG_STM32_BBSRAM)
+
+	if (hardfault_check_status) {
+		/* NB. the use of the console requires the hrt running
+		 * to poll the DMA
+		 */
+
+		/* Using Battery Backed Up SRAM */
+
+		int filesizes[CONFIG_STM32_BBSRAM_FILES + 1] = BSRAM_FILE_SIZES;
+
+		stm32_bbsraminitialize(BBSRAM_PATH, filesizes);
+
+#if defined(CONFIG_STM32_SAVE_CRASHDUMP)
+
+		/* Panic Logging in Battery Backed Up Files */
+
+		/*
+		 * In an ideal world, if a fault happens in flight the
+		 * system save it to BBSRAM will then reboot. Upon
+		 * rebooting, the system will log the fault to disk, recover
+		 * the flight state and continue to fly.  But if there is
+		 * a fault on the bench or in the air that prohibit the recovery
+		 * or committing the log to disk, the things are too broken to
+		 * fly. So the question is:
+		 *
+		 * Did we have a hard fault and not make it far enough
+		 * through the boot sequence to commit the fault data to
+		 * the SD card?
+		 */
+
+		/* Do we have an uncommitted hard fault in BBSRAM?
+		 *  - this will be reset after a successful commit to SD
+		 */
+		int hadCrash = hardfault_check_status("boot");
+
+		if (hadCrash == OK) {
+
+			message("[boot] There is a hard fault logged. Hold down the SPACE BAR," \
+				" while booting to halt the system!\n");
+
+			/* Yes. So add one to the boot count - this will be reset after a successful
+			 * commit to SD
+			 */
+
+			int reboots = hardfault_increment_reboot("boot", false);
+
+			/* Also end the misery for a user that holds for a key down on the console */
+
+			int bytesWaiting;
+			ioctl(fileno(stdin), FIONREAD, (unsigned long)((uintptr_t) &bytesWaiting));
+
+			if (reboots > 2 || bytesWaiting != 0) {
+
+				/* Since we can not commit the fault dump to disk. Display it
+				 * to the console.
+				 */
+
+				hardfault_write("boot", fileno(stdout), HARDFAULT_DISPLAY_FORMAT, false);
+
+				message("[boot] There were %d reboots with Hard fault that were not committed to disk - System halted %s\n",
+					reboots,
+					(bytesWaiting == 0 ? "" : " Due to Key Press\n"));
+
+
+				/* For those of you with a debugger set a break point on up_assert and
+				 * then set dbgContinue = 1 and go.
+				 */
+
+				/* Clear any key press that got us here */
+
+				static volatile bool dbgContinue = false;
+				int c = '>';
+
+				while (!dbgContinue) {
+
+					switch (c) {
+
+					case EOF:
+
+
+					case '\n':
+					case '\r':
+					case ' ':
+						continue;
+
+					default:
+
+						putchar(c);
+						putchar('\n');
+
+						switch (c) {
+
+						case 'D':
+						case 'd':
+							hardfault_write("boot", fileno(stdout), HARDFAULT_DISPLAY_FORMAT, false);
+							break;
+
+						case 'C':
+						case 'c':
+							hardfault_rearm("boot");
+							hardfault_increment_reboot("boot", true);
+							break;
+
+						case 'B':
+						case 'b':
+							dbgContinue = true;
+							break;
+
+						default:
+							break;
+						} // Inner Switch
+
+						message("\nEnter B - Continue booting\n" \
+							"Enter C - Clear the fault log\n" \
+							"Enter D - Dump fault log\n\n?>");
+						fflush(stdout);
+
+						if (!dbgContinue) {
+							c = getchar();
+						}
+
+						break;
+
+					} // outer switch
+				} // for
+
+			} // inner if
+		} // outer if
+	} // hardfault_check_status
+
+#endif // CONFIG_STM32_SAVE_CRASHDUMP
+#endif // CONFIG_STM32_BBSRAM
+
 	/* initial LED state */
 	drv_led_start();
 	led_off(LED_AMBER);
@@ -236,7 +413,7 @@ __EXPORT int nsh_archinitialize(void)
 
 	if (!spi1) {
 		message("[boot] FAILED to initialize SPI port 1\n");
-		up_ledon(LED_AMBER);
+		board_autoled_on(LED_AMBER);
 		return -ENODEV;
 	}
 
@@ -255,7 +432,7 @@ __EXPORT int nsh_archinitialize(void)
 
 	if (!spi2) {
 		message("[boot] FAILED to initialize SPI port 2\n");
-		up_ledon(LED_AMBER);
+		board_autoled_on(LED_AMBER);
 		return -ENODEV;
 	}
 
@@ -295,3 +472,160 @@ __EXPORT int nsh_archinitialize(void)
 
 	return OK;
 }
+
+static void copy_reverse(stack_word_t *dest, stack_word_t *src, int size)
+{
+	while (size--) {
+		*dest++ = *src--;
+	}
+}
+
+__EXPORT void board_crashdump(uintptr_t currentsp, FAR void *tcb, FAR const uint8_t *filename, int lineno)
+{
+	if (hardfault_check_status) {
+		/* We need a chunk of ram to save the complete context in.
+		 * Since we are going to reboot we will use &_sdata
+		 * which is the lowest memory and the amount we will save
+		 * _should be_ below any resources we need herein.
+		 * Unfortunately this is hard to test. See dead below
+		 */
+
+		fullcontext_s *pdump = (fullcontext_s *)&_sdata;
+
+		(void)enter_critical_section();
+
+		struct tcb_s *rtcb = (struct tcb_s *)tcb;
+
+		/* Zero out everything */
+
+		memset(pdump, 0, sizeof(fullcontext_s));
+
+		/* Save Info */
+
+		pdump->info.lineno = lineno;
+
+		if (filename) {
+
+			int offset = 0;
+			unsigned int len = strlen((char *)filename) + 1;
+
+			if (len > sizeof(pdump->info.filename)) {
+				offset = len - sizeof(pdump->info.filename) ;
+			}
+
+			strncpy(pdump->info.filename, (char *)&filename[offset], sizeof(pdump->info.filename));
+		}
+
+		/* Save the value of the pointer for current_regs as debugging info.
+		 * It should be NULL in case of an ASSERT and will aid in cross
+		 * checking the validity of system memory at the time of the
+		 * fault.
+		 */
+
+		pdump->info.current_regs = (uintptr_t) CURRENT_REGS;
+
+		/* Save Context */
+
+
+#if CONFIG_TASK_NAME_SIZE > 0
+		strncpy(pdump->info.name, rtcb->name, CONFIG_TASK_NAME_SIZE);
+#endif
+
+		pdump->info.pid = rtcb->pid;
+
+
+		/* If  current_regs is not NULL then we are in an interrupt context
+		 * and the user context is in current_regs else we are running in
+		 * the users context
+		 */
+
+		if (CURRENT_REGS) {
+			pdump->info.stacks.interrupt.sp = currentsp;
+
+			pdump->info.flags |= (eRegsPresent | eUserStackPresent | eIntStackPresent);
+			memcpy(pdump->info.regs, (void *)CURRENT_REGS, sizeof(pdump->info.regs));
+			pdump->info.stacks.user.sp = pdump->info.regs[REG_R13];
+
+		} else {
+
+			/* users context */
+			pdump->info.flags |= eUserStackPresent;
+
+			pdump->info.stacks.user.sp = currentsp;
+		}
+
+		if (pdump->info.pid == 0) {
+
+			pdump->info.stacks.user.top = g_idle_topstack - 4;
+			pdump->info.stacks.user.size = CONFIG_IDLETHREAD_STACKSIZE;
+
+		} else {
+			pdump->info.stacks.user.top = (uint32_t) rtcb->adj_stack_ptr;
+			pdump->info.stacks.user.size = (uint32_t) rtcb->adj_stack_size;;
+		}
+
+#if CONFIG_ARCH_INTERRUPTSTACK > 3
+
+		/* Get the limits on the interrupt stack memory */
+
+		pdump->info.stacks.interrupt.top = (uint32_t)&g_intstackbase;
+		pdump->info.stacks.interrupt.size  = (CONFIG_ARCH_INTERRUPTSTACK & ~3);
+
+		/* If In interrupt Context save the interrupt stack data centered
+		 * about the interrupt stack pointer
+		 */
+
+		if ((pdump->info.flags & eIntStackPresent) != 0) {
+			stack_word_t *ps = (stack_word_t *) pdump->info.stacks.interrupt.sp;
+			copy_reverse(pdump->istack, &ps[arraySize(pdump->istack) / 2], arraySize(pdump->istack));
+		}
+
+		/* Is it Invalid? */
+
+		if (!(pdump->info.stacks.interrupt.sp <= pdump->info.stacks.interrupt.top &&
+		      pdump->info.stacks.interrupt.sp > pdump->info.stacks.interrupt.top - pdump->info.stacks.interrupt.size)) {
+			pdump->info.flags |= eInvalidIntStackPrt;
+		}
+
+#endif
+
+		/* If In interrupt context or User save the user stack data centered
+		 * about the user stack pointer
+		 */
+		if ((pdump->info.flags & eUserStackPresent) != 0) {
+			stack_word_t *ps = (stack_word_t *) pdump->info.stacks.user.sp;
+			copy_reverse(pdump->ustack, &ps[arraySize(pdump->ustack) / 2], arraySize(pdump->ustack));
+		}
+
+		/* Is it Invalid? */
+
+		if (!(pdump->info.stacks.user.sp <= pdump->info.stacks.user.top &&
+		      pdump->info.stacks.user.sp > pdump->info.stacks.user.top - pdump->info.stacks.user.size)) {
+			pdump->info.flags |= eInvalidUserStackPtr;
+		}
+
+		int rv = stm32_bbsram_savepanic(HARDFAULT_FILENO, (uint8_t *)pdump, sizeof(fullcontext_s));
+
+		/* Test if memory got wiped because of using _sdata */
+
+		if (rv == -ENXIO) {
+			char *dead = "Memory wiped - dump not saved!";
+
+			while (*dead) {
+				up_lowputc(*dead++);
+			}
+
+		} else if (rv == -ENOSPC) {
+
+			/* hard fault again */
+
+			up_lowputc('!');
+		}
+
+
+#if defined(CONFIG_BOARD_RESET_ON_CRASH)
+		px4_systemreset(false);
+#endif
+	} // hardfault_check_status
+
+}
diff --git a/src/drivers/boards/auav-x21/auav_spi.c b/src/drivers/boards/auav-x21/auav_spi.c
index 86477d1239..f8c02bdf9c 100644
--- a/src/drivers/boards/auav-x21/auav_spi.c
+++ b/src/drivers/boards/auav-x21/auav_spi.c
@@ -47,15 +47,16 @@
 #include <stdbool.h>
 #include <debug.h>
 #include <unistd.h>
-#include <nuttx/spi.h>
+
+#include <nuttx/spi/spi.h>
 #include <arch/board/board.h>
 
 #include <up_arch.h>
 #include <chip.h>
 #include <stm32.h>
+#include "board_config.h"
 #include <systemlib/err.h>
 
-#include "board_config.h"
 
 /************************************************************************************
  * Public Functions
@@ -77,21 +78,12 @@ __EXPORT void stm32_spiinitialize(void)
 	px4_arch_configgpio(GPIO_SPI_CS_BARO);
 	px4_arch_configgpio(GPIO_SPI_CS_MPU);
 
-	/* De-activate all peripherals,
-	 * required for some peripheral
-	 * state machines
-	 */
-	px4_arch_gpiowrite(GPIO_SPI_CS_ICM_20608_G, 1);
-	px4_arch_gpiowrite(GPIO_SPI_CS_BARO, 1);
-	px4_arch_gpiowrite(GPIO_SPI_CS_MPU, 1);
-
 	px4_arch_configgpio(GPIO_EXTI_MPU_DRDY);
 	px4_arch_configgpio(GPIO_EXTI_ICM_20608_G_DRDY);
 #endif
 
 #ifdef CONFIG_STM32_SPI2
 	px4_arch_configgpio(GPIO_SPI_CS_FRAM);
-	px4_arch_gpiowrite(GPIO_SPI_CS_FRAM, 1);
 #endif
 
 }
@@ -196,14 +188,6 @@ __EXPORT void board_spi_reset(int ms)
 	px4_arch_configgpio(GPIO_SPI_CS_BARO);
 	px4_arch_configgpio(GPIO_SPI_CS_MPU);
 
-	/* De-activate all peripherals,
-	 * required for some peripheral
-	 * state machines
-	 */
-	px4_arch_gpiowrite(GPIO_SPI_CS_ICM_20608_G, 1);
-	px4_arch_gpiowrite(GPIO_SPI_CS_BARO, 1);
-	px4_arch_gpiowrite(GPIO_SPI_CS_MPU, 1);
-
 	px4_arch_configgpio(GPIO_SPI1_SCK);
 	px4_arch_configgpio(GPIO_SPI1_MISO);
 	px4_arch_configgpio(GPIO_SPI1_MOSI);
diff --git a/src/drivers/boards/auav-x21/board_config.h b/src/drivers/boards/auav-x21/board_config.h
index 7760f3946c..b261426d4e 100644
--- a/src/drivers/boards/auav-x21/board_config.h
+++ b/src/drivers/boards/auav-x21/board_config.h
@@ -47,10 +47,6 @@
 #include <nuttx/compiler.h>
 #include <stdint.h>
 
-#include <stm32.h>
-#include <arch/board/board.h>
-
-#define UDID_START		0x1FFF7A10
 /****************************************************************************************************
  * Definitions
  ****************************************************************************************************/
@@ -254,40 +250,36 @@ __BEGIN_DECLS
 /****************************************************************************************************
  * Public Functions
  ****************************************************************************************************/
-
 /****************************************************************************************************
- * Name: stm32_spiinitialize
+ * Name: board_spi_reset board_peripheral_reset
  *
  * Description:
- *   Called to configure SPI chip select GPIO pins for the PX4FMU board.
+ *   Called to reset SPI and the perferal bus
  *
  ****************************************************************************************************/
 
-extern void stm32_spiinitialize(void);
 extern void board_spi_reset(int ms);
-
-extern void stm32_usbinitialize(void);
-
 extern void board_peripheral_reset(int ms);
 
-/****************************************************************************
- * Name: nsh_archinitialize
+/****************************************************************************************************
+ * Name: stm32_usbinitialize
  *
  * Description:
- *   Perform architecture specific initialization for NSH.
+ *   Called to configure USB IO.
  *
- *   CONFIG_NSH_ARCHINIT=y :
- *     Called from the NSH library
+ ****************************************************************************************************/
+
+extern void stm32_usbinitialize(void);
+
+/****************************************************************************************************
+ * Name: stm32_spiinitialize
  *
- *   CONFIG_BOARD_INITIALIZE=y, CONFIG_NSH_LIBRARY=y, &&
- *   CONFIG_NSH_ARCHINIT=n :
- *     Called from board_initialize().
+ * Description:
+ *   Called to configure SPI chip select GPIO pins for the PX4FMU board.
  *
- ****************************************************************************/
+ ****************************************************************************************************/
 
-#ifdef CONFIG_NSH_LIBRARY
-int nsh_archinitialize(void);
-#endif
+extern void stm32_spiinitialize(void);
 
 #include "../common/board_common.h"
 
-- 
GitLab