summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGregory Nutt <gnutt@nuttx.org>2014-09-03 07:29:49 -0600
committerGregory Nutt <gnutt@nuttx.org>2014-09-03 07:29:49 -0600
commitbe76882595c6bfd71918cde558c059d311795755 (patch)
treed9e62ed016be3d2935d829949bb64a3ea4a7b841
parent0ff5f99be5aa5e93138df7921694003598ccb4ce (diff)
downloadnuttx-be76882595c6bfd71918cde558c059d311795755.tar.gz
nuttx-be76882595c6bfd71918cde558c059d311795755.tar.bz2
nuttx-be76882595c6bfd71918cde558c059d311795755.zip
SAMA5D4-EK: Restructure initialization slightly to better support kernel mode
-rw-r--r--nuttx/configs/sama5d4-ek/kernel/defconfig2
-rw-r--r--nuttx/configs/sama5d4-ek/src/Makefile7
-rw-r--r--nuttx/configs/sama5d4-ek/src/sam_boot.c9
-rw-r--r--nuttx/configs/sama5d4-ek/src/sam_bringup.c185
-rw-r--r--nuttx/configs/sama5d4-ek/src/sam_nsh.c136
-rw-r--r--nuttx/configs/sama5d4-ek/src/sama5d4-ek.h10
6 files changed, 211 insertions, 138 deletions
diff --git a/nuttx/configs/sama5d4-ek/kernel/defconfig b/nuttx/configs/sama5d4-ek/kernel/defconfig
index c9a209a06..91823afa6 100644
--- a/nuttx/configs/sama5d4-ek/kernel/defconfig
+++ b/nuttx/configs/sama5d4-ek/kernel/defconfig
@@ -398,7 +398,7 @@ CONFIG_NAME_MAX=32
#
# RTOS hooks
#
-# CONFIG_BOARD_INITIALIZE is not set
+CONFIG_BOARD_INITIALIZE=y
# CONFIG_SCHED_STARTHOOK is not set
# CONFIG_SCHED_ATEXIT is not set
# CONFIG_SCHED_ONEXIT is not set
diff --git a/nuttx/configs/sama5d4-ek/src/Makefile b/nuttx/configs/sama5d4-ek/src/Makefile
index 4ede75871..169e95931 100644
--- a/nuttx/configs/sama5d4-ek/src/Makefile
+++ b/nuttx/configs/sama5d4-ek/src/Makefile
@@ -121,7 +121,12 @@ CSRCS += sam_maxtouch.c
endif
ifeq ($(CONFIG_NSH_ARCHINIT),y)
-CSRCS += sam_nsh.c
+CSRCS += sam_nsh.c sam_bringup.c
+else
+ifeq ($(CONFIG_BOARD_INITIALIZE),y)
+CSRCS += sam_bringup.c
+endif
+
endif
ifeq ($(CONFIG_ADC),y)
diff --git a/nuttx/configs/sama5d4-ek/src/sam_boot.c b/nuttx/configs/sama5d4-ek/src/sam_boot.c
index fb6f32cfe..d994bd52d 100644
--- a/nuttx/configs/sama5d4-ek/src/sam_boot.c
+++ b/nuttx/configs/sama5d4-ek/src/sam_boot.c
@@ -146,13 +146,8 @@ void sam_boardinitialize(void)
#ifdef CONFIG_BOARD_INITIALIZE
void board_initialize(void)
{
- /* Perform NSH initialization here instead of from the NSH. This
- * alternative NSH initialization is necessary when NSH is ran in user-space
- * but the initialization function must run in kernel space.
- */
+ /* Perform board initialization */
-#if defined(CONFIG_NSH_LIBRARY) && !defined(CONFIG_NSH_ARCHINIT)
- (void)nsh_archinitialize();
-#endif
+ (void)sam_bringup();
}
#endif /* CONFIG_BOARD_INITIALIZE */
diff --git a/nuttx/configs/sama5d4-ek/src/sam_bringup.c b/nuttx/configs/sama5d4-ek/src/sam_bringup.c
new file mode 100644
index 000000000..8e8491877
--- /dev/null
+++ b/nuttx/configs/sama5d4-ek/src/sam_bringup.c
@@ -0,0 +1,185 @@
+/****************************************************************************
+ * config/sama5d4-ek/src/sam_bringup.c
+ *
+ * Copyright (C) 2014 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.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <sys/mount.h>
+
+#include <stdbool.h>
+#include <stdio.h>
+#include <errno.h>
+#include <debug.h>
+
+#ifdef CONFIG_SYSTEM_USBMONITOR
+# include <apps/usbmonitor.h>
+#endif
+
+#include "sama5d4-ek.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/* Debug ********************************************************************/
+
+#ifdef CONFIG_CPP_HAVE_VARARGS
+# define message(...) syslog(__VA_ARGS__)
+#else
+# define message syslog
+#endif
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: sam_bringup
+ *
+ * Description:
+ * Bring up board features
+ *
+ ****************************************************************************/
+
+int sam_bringup(void)
+{
+#if defined(HAVE_NAND) || defined(HAVE_AT25) || defined(HAVE_HSMCI) || \
+ defined(HAVE_USBHOST) || defined(HAVE_USBMONITOR) || defined(HAVE_WM8904) || \
+ defined(HAVE_AUTOMOUNTER)
+ int ret;
+#endif
+
+#ifdef HAVE_NAND
+ /* Initialize the NAND driver */
+
+ ret = sam_nand_automount(NAND_MINOR);
+ if (ret < 0)
+ {
+ message("ERROR: sam_nand_automount failed: %d\n", ret);
+ }
+#endif
+
+#ifdef HAVE_AT25
+ /* Initialize the AT25 driver */
+
+ ret = sam_at25_automount(AT25_MINOR);
+ if (ret < 0)
+ {
+ message("ERROR: sam_at25_automount failed: %d\n", ret);
+ }
+#endif
+
+#ifdef HAVE_HSMCI
+#ifdef CONFIG_SAMA5_HSMCI0
+ /* Initialize the HSMCI0 driver */
+
+ ret = sam_hsmci_initialize(HSMCI0_SLOTNO, HSMCI0_MINOR);
+ if (ret < 0)
+ {
+ message("ERROR: sam_hsmci_initialize(%d,%d) failed: %d\n",
+ HSMCI0_SLOTNO, HSMCI0_MINOR, ret);
+ }
+#endif
+
+#ifdef CONFIG_SAMA5_HSMCI1
+ /* Initialize the HSMCI1 driver */
+
+ ret = sam_hsmci_initialize(HSMCI1_SLOTNO, HSMCI1_MINOR);
+ if (ret < 0)
+ {
+ message("ERROR: sam_hsmci_initialize(%d,%d) failed: %d\n",
+ HSMCI1_SLOTNO, HSMCI1_MINOR, ret);
+ }
+#endif
+#endif
+
+#ifdef HAVE_AUTOMOUNTER
+ /* Initialize the auto-mounter */
+
+ sam_automount_initialize();
+#endif
+
+#ifdef HAVE_USBHOST
+ /* Initialize USB host operation. sam_usbhost_initialize() starts a thread
+ * will monitor for USB connection and disconnection events.
+ */
+
+ ret = sam_usbhost_initialize();
+ if (ret != OK)
+ {
+ message("ERROR: Failed to initialize USB host: %d\n", ret);
+ }
+#endif
+
+#ifdef HAVE_USBMONITOR
+ /* Start the USB Monitor */
+
+ ret = usbmonitor_start(0, NULL);
+ if (ret != OK)
+ {
+ message("ERROR: Failed to start the USB monitor: %d\n", ret);
+ }
+#endif
+
+#ifdef HAVE_WM8904
+ /* Configure WM8904 audio */
+
+ ret = sam_wm8904_initialize(0);
+ if (ret != OK)
+ {
+ message("ERROR: Failed to initialize WM8904 audio: %d\n", ret);
+ }
+#endif
+
+#ifdef HAVE_AUDIO_NULL
+ /* Configure the NULL audio device */
+
+ ret = sam_audio_null_initialize(0);
+ if (ret != OK)
+ {
+ message("ERROR: Failed to initialize the NULL audio device: %d\n", ret);
+ }
+#endif
+
+ /* If we got here then perhaps not all initialization was successful, but
+ * at least enough succeeded to bring-up NSH with perhaps reduced
+ * capabilities.
+ */
+
+ return OK;
+}
diff --git a/nuttx/configs/sama5d4-ek/src/sam_nsh.c b/nuttx/configs/sama5d4-ek/src/sam_nsh.c
index 8a4a3efb8..234e8b0a7 100644
--- a/nuttx/configs/sama5d4-ek/src/sam_nsh.c
+++ b/nuttx/configs/sama5d4-ek/src/sam_nsh.c
@@ -39,39 +39,14 @@
#include <nuttx/config.h>
-#include <sys/mount.h>
-
-#include <stdbool.h>
-#include <stdio.h>
-#include <errno.h>
-#include <debug.h>
-
-#ifdef CONFIG_SYSTEM_USBMONITOR
-# include <apps/usbmonitor.h>
-#endif
-
#include "sama5d4-ek.h"
+#ifndef CONFIG_BUILD_KERNEL
+
/****************************************************************************
* Pre-Processor Definitions
****************************************************************************/
-/* Debug ********************************************************************/
-
-#ifdef CONFIG_CPP_HAVE_VARARGS
-# ifdef CONFIG_DEBUG
-# define message(...) syslog(__VA_ARGS__)
-# else
-# define message(...) printf(__VA_ARGS__)
-# endif
-#else
-# ifdef CONFIG_DEBUG
-# define message syslog
-# else
-# define message printf
-# endif
-#endif
-
/****************************************************************************
* Public Functions
****************************************************************************/
@@ -86,108 +61,11 @@
int nsh_archinitialize(void)
{
-#if defined(HAVE_NAND) || defined(HAVE_AT25) || defined(HAVE_HSMCI) || \
- defined(HAVE_USBHOST) || defined(HAVE_USBMONITOR) || defined(HAVE_WM8904) || \
- defined(HAVE_AUTOMOUNTER)
- int ret;
-#endif
-
-#ifdef HAVE_NAND
- /* Initialize the NAND driver */
-
- ret = sam_nand_automount(NAND_MINOR);
- if (ret < 0)
- {
- message("ERROR: sam_nand_automount failed: %d\n", ret);
- }
-#endif
-
-#ifdef HAVE_AT25
- /* Initialize the AT25 driver */
-
- ret = sam_at25_automount(AT25_MINOR);
- if (ret < 0)
- {
- message("ERROR: sam_at25_automount failed: %d\n", ret);
- }
-#endif
-
-#ifdef HAVE_HSMCI
-#ifdef CONFIG_SAMA5_HSMCI0
- /* Initialize the HSMCI0 driver */
-
- ret = sam_hsmci_initialize(HSMCI0_SLOTNO, HSMCI0_MINOR);
- if (ret < 0)
- {
- message("ERROR: sam_hsmci_initialize(%d,%d) failed: %d\n",
- HSMCI0_SLOTNO, HSMCI0_MINOR, ret);
- }
-#endif
-
-#ifdef CONFIG_SAMA5_HSMCI1
- /* Initialize the HSMCI1 driver */
+#ifndef CONFIG_BOARD_INITIALIZE
+ /* Perform board initialization */
- ret = sam_hsmci_initialize(HSMCI1_SLOTNO, HSMCI1_MINOR);
- if (ret < 0)
- {
- message("ERROR: sam_hsmci_initialize(%d,%d) failed: %d\n",
- HSMCI1_SLOTNO, HSMCI1_MINOR, ret);
- }
+ (void)sam_bringup();
#endif
-#endif
-
-#ifdef HAVE_AUTOMOUNTER
- /* Initialize the auto-mounter */
-
- sam_automount_initialize();
-#endif
-
-#ifdef HAVE_USBHOST
- /* Initialize USB host operation. sam_usbhost_initialize() starts a thread
- * will monitor for USB connection and disconnection events.
- */
-
- ret = sam_usbhost_initialize();
- if (ret != OK)
- {
- message("ERROR: Failed to initialize USB host: %d\n", ret);
- }
-#endif
-
-#ifdef HAVE_USBMONITOR
- /* Start the USB Monitor */
-
- ret = usbmonitor_start(0, NULL);
- if (ret != OK)
- {
- message("ERROR: Failed to start the USB monitor: %d\n", ret);
- }
-#endif
-
-#ifdef HAVE_WM8904
- /* Configure WM8904 audio */
-
- ret = sam_wm8904_initialize(0);
- if (ret != OK)
- {
- message("ERROR: Failed to initialize WM8904 audio: %d\n", ret);
- }
-#endif
-
-#ifdef HAVE_AUDIO_NULL
- /* Configure the NULL audio device */
-
- ret = sam_audio_null_initialize(0);
- if (ret != OK)
- {
- message("ERROR: Failed to initialize the NULL audio device: %d\n", ret);
- }
-#endif
-
- /* If we got here then perhaps not all initialization was successful, but
- * at least enough succeeded to bring-up NSH with perhaps reduced
- * capabilities.
- */
-
- return OK;
}
+
+#endif /* CONFIG_BUILD_KERNEL */
diff --git a/nuttx/configs/sama5d4-ek/src/sama5d4-ek.h b/nuttx/configs/sama5d4-ek/src/sama5d4-ek.h
index 1b19946eb..ee898be3e 100644
--- a/nuttx/configs/sama5d4-ek/src/sama5d4-ek.h
+++ b/nuttx/configs/sama5d4-ek/src/sama5d4-ek.h
@@ -892,6 +892,16 @@ void sam_sdram_config(void);
#endif
/****************************************************************************
+ * Name: sam_bringup
+ *
+ * Description:
+ * Bring up board features
+ *
+ ****************************************************************************/
+
+int sam_bringup(void);
+
+/****************************************************************************
* Name: sam_nand_automount
*
* Description: