summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGregory Nutt <gnutt@nuttx.org>2015-02-24 09:30:30 -0600
committerGregory Nutt <gnutt@nuttx.org>2015-02-24 09:30:30 -0600
commitd8874e37bdd21f45cb03cf33596fafe00d45288f (patch)
tree24d5eca3dfb0a7ac80d19a7a81dfdfe38a727a71
parent39191816f6701970928e9d8da7ddc4f5b5929e39 (diff)
downloadnuttx-d8874e37bdd21f45cb03cf33596fafe00d45288f.tar.gz
nuttx-d8874e37bdd21f45cb03cf33596fafe00d45288f.tar.bz2
nuttx-d8874e37bdd21f45cb03cf33596fafe00d45288f.zip
PIC32MZ: Add beginnings of CPU initialization logic. Still some bad logic for setting up peripheral clocking
-rw-r--r--nuttx/arch/mips/src/pic32mx/pic32mx-internal.h2
-rw-r--r--nuttx/arch/mips/src/pic32mz/Make.defs1
-rw-r--r--nuttx/arch/mips/src/pic32mz/chip/pic32mz-memorymap.h6
-rw-r--r--nuttx/arch/mips/src/pic32mz/chip/pic32mz-prefetch.h82
-rw-r--r--nuttx/arch/mips/src/pic32mz/pic32mz-lowconsole.h123
-rw-r--r--nuttx/arch/mips/src/pic32mz/pic32mz-lowinit.c209
-rw-r--r--nuttx/arch/mips/src/pic32mz/pic32mz-lowinit.h102
7 files changed, 521 insertions, 4 deletions
diff --git a/nuttx/arch/mips/src/pic32mx/pic32mx-internal.h b/nuttx/arch/mips/src/pic32mx/pic32mx-internal.h
index 09289287d..91a3de396 100644
--- a/nuttx/arch/mips/src/pic32mx/pic32mx-internal.h
+++ b/nuttx/arch/mips/src/pic32mx/pic32mx-internal.h
@@ -189,7 +189,7 @@ extern "C"
void pic32mx_lowinit(void);
/************************************************************************************
- * Name: pic32mx_lowsetup
+ * Name: pic32mx_consoleinit
*
* Description:
* Performs low level initialization of the console UART. This UART done early so
diff --git a/nuttx/arch/mips/src/pic32mz/Make.defs b/nuttx/arch/mips/src/pic32mz/Make.defs
index 53e5a961f..6187bf357 100644
--- a/nuttx/arch/mips/src/pic32mz/Make.defs
+++ b/nuttx/arch/mips/src/pic32mz/Make.defs
@@ -64,5 +64,6 @@ endif
# Required PIC32MZ files
CHIP_ASRCS =
+CHIP_CSRCS = pic32mz-lowinit.c
# Configuration-dependent PIC32MZ files
diff --git a/nuttx/arch/mips/src/pic32mz/chip/pic32mz-memorymap.h b/nuttx/arch/mips/src/pic32mz/chip/pic32mz-memorymap.h
index cc01d6126..a03adba1a 100644
--- a/nuttx/arch/mips/src/pic32mz/chip/pic32mz-memorymap.h
+++ b/nuttx/arch/mips/src/pic32mz/chip/pic32mz-memorymap.h
@@ -42,10 +42,10 @@
#include <nuttx/config.h>
-#if defined(CHIP_PIC32MZEC)
-# include <chip/pic32mzec-memorymap.h>
+#if defined(CONFIG_ARCH_CHIP_PIC32MZEC)
+# include "chip/pic32mzec-memorymap.h"
#else
-# error "Unknown PIC32MZ family
+# error Unknown PIC32MZ family
#endif
#endif /* __ARCH_MIPS_SRC_PIC32MZ_CHIP_PIC32MZ_MEMORYMAP_H */
diff --git a/nuttx/arch/mips/src/pic32mz/chip/pic32mz-prefetch.h b/nuttx/arch/mips/src/pic32mz/chip/pic32mz-prefetch.h
new file mode 100644
index 000000000..636b788c9
--- /dev/null
+++ b/nuttx/arch/mips/src/pic32mz/chip/pic32mz-prefetch.h
@@ -0,0 +1,82 @@
+/********************************************************************************************
+ * arch/mips/src/pic32mz/chip/pic32mz-prefetch.h
+ *
+ * Copyright (C) 2015 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.
+ *
+ ********************************************************************************************/
+
+#ifndef __ARCH_MIPS_SRC_PIC32MZ_CHIP_PIC32MZ_PREFETCH_H
+#define __ARCH_MIPS_SRC_PIC32MZ_CHIP_PIC32MZ_PREFETCH_H
+
+/********************************************************************************************
+ * Included Files
+ ********************************************************************************************/
+
+#include <nuttx/config.h>
+
+#include "pic32mz-memorymap.h"
+
+/********************************************************************************************
+ * Pre-processor Definitions
+ ********************************************************************************************/
+/* Prefetch register offsets ****************************************************************/
+
+#define PIC32MZ_PREFETCH_PRECON_OFFSET 0x0000 /* Prefetch module control register */
+#define PIC32MZ_PREFETCH_PRESTAT_OFFSET 0x0000 /* Prefetch module status register */
+
+/* Prefetch register addresses **************************************************************/
+
+#define PIC32MZ_PREFETCH_PRECON (PIC32MZ_PREFETCH_K1BASE+PIC32MZ_PREFETCH_PRECON_OFFSET)
+#define PIC32MZ_PREFETCH_PRESTAT (PIC32MZ_PREFETCH_K1BASE+PIC32MZ_PREFETCH_PRESTAT_OFFSET)
+
+/* Prefetch register bit field definitions **************************************************/
+
+/* Prefetch module control register */
+
+#define PREFETCH_PRECON_PFMWS_SHIFT (0) /* Bits 0-2: PFM Access Time */
+#define PREFETCH_PRECON_PFMWS_MASK (7 << PREFETCH_PRECON_PFMWS_SHIFT)
+# define PREFETCH_PRECON_PFMWS(n) ((uint32_t)(n) << PREFETCH_PRECON_PFMWS_SHIFT) /* n wait states, n=0..7 */
+#define PREFETCH_PRECON_PREFEN_SHIFT (4) /* Bit 4-5: Predictive Prefetch Enable */
+#define PREFETCH_PRECON_PREFEN_MASK (3 << PREFETCH_PRECON_PREFEN_SHIFT)
+# define PREFETCH_PRECON_PREFEN_DISABLE (0 << PREFETCH_PRECON_PREFEN_SHIFT) /* Disable predictive prefetch */
+# define PREFETCH_PRECON_PREFEN_CPUI (1 << PREFETCH_PRECON_PREFEN_SHIFT) /* Predictive prefetch CPU instructions */
+# define PREFETCH_PRECON_PREFEN_CPUID (2 << PREFETCH_PRECON_PREFEN_SHIFT) /* Predictive prefetch CPU instructions and data */
+# define PREFETCH_PRECON_PREFEN_ANY (3 << PREFETCH_PRECON_PREFEN_SHIFT) /* Predictive prefetch any address */
+#define PREFETCH_PRECON_PFMSECEN (1 << 26) /* Bit 26: Flash SEC Interrupt Enable */
+
+/* Prefetch module status register */
+
+#define PREFETCH_PRESTAT_PFMSECCNT_SHIFT (0) /* Bits 0-7: Flash SEC Count bits */
+#define PREFETCH_PRESTAT_PFMSECCNT_MASK (0xff << PREFETCH_PRESTAT_PFMSECCNT_SHIFT)
+#define PREFETCH_PRESTAT_PFMSEC (1 << 26) /* Bit 26: Flash Single-bit Error Corrected Status */
+#define PREFETCH_PRESTAT_PFMDED (1 << 27) /* Bit 27: Flash Double-bit Error Detected Status */
+
+#endif /* __ARCH_MIPS_SRC_PIC32MZ_CHIP_PIC32MZ_PREFETCH_H */
diff --git a/nuttx/arch/mips/src/pic32mz/pic32mz-lowconsole.h b/nuttx/arch/mips/src/pic32mz/pic32mz-lowconsole.h
new file mode 100644
index 000000000..9382bac81
--- /dev/null
+++ b/nuttx/arch/mips/src/pic32mz/pic32mz-lowconsole.h
@@ -0,0 +1,123 @@
+/************************************************************************************
+ * arch/mips/src/pic32mz/pic32mz-lowconsole.h
+ *
+ * Copyright (C) 2015 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.
+ *
+ ************************************************************************************/
+
+#ifndef __ARCH_MIPS_SRC_PIC32MZ_PIC32MZ_LOWCONSOLE_H
+#define __ARCH_MIPS_SRC_PIC32MZ_PIC32MZ_LOWCONSOLE_H
+
+/************************************************************************************
+ * Included Files
+ ************************************************************************************/
+
+#include <nuttx/config.h>
+#include <nuttx/compiler.h>
+
+#include <stdint.h>
+#include <stdbool.h>
+
+/************************************************************************************
+ * Pre-processor Definitions
+ ************************************************************************************/
+
+/************************************************************************************
+ * Public Types
+ ************************************************************************************/
+
+#ifndef __ASSEMBLY__
+
+/************************************************************************************
+ * Public Data
+ ************************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+#define EXTERN extern "C"
+extern "C"
+{
+#else
+#define EXTERN extern
+#endif
+
+/************************************************************************************
+ * Public Function Prototypes
+ ************************************************************************************/
+
+/************************************************************************************
+ * Name: pic32mz_consoleinit
+ *
+ * Description:
+ * Performs low level initialization of the console UART. This UART done early so
+ * that the serial console is available for debugging very early in the boot
+ * sequence.
+ *
+ ************************************************************************************/
+
+#ifdef HAVE_SERIAL_CONSOLE
+void pic32mz_consoleinit(void);
+#else
+# define pic32mz_consoleinit()
+#endif
+
+/******************************************************************************
+ * Name: pic32mz_uartreset
+ *
+ * Description:
+ * Reset a UART.
+ *
+ ******************************************************************************/
+
+#ifdef HAVE_UART_DEVICE
+void pic32mz_uartreset(uintptr_t uart_base);
+#endif
+
+/******************************************************************************
+ * Name: pic32mz_uartconfigure
+ *
+ * Description:
+ * Configure a UART as a RS-232 UART.
+ *
+ ******************************************************************************/
+
+#ifdef HAVE_UART_DEVICE
+void pic32mz_uartconfigure(uintptr_t uart_base, uint32_t baudrate,
+ unsigned int parity, unsigned int nbits, bool stop2);
+#endif
+
+#undef EXTERN
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* __ASSEMBLY__ */
+#endif /* __ARCH_MIPS_SRC_PIC32MZ_PIC32MZ_LOWCONSOLE_H */
diff --git a/nuttx/arch/mips/src/pic32mz/pic32mz-lowinit.c b/nuttx/arch/mips/src/pic32mz/pic32mz-lowinit.c
new file mode 100644
index 000000000..455cac21c
--- /dev/null
+++ b/nuttx/arch/mips/src/pic32mz/pic32mz-lowinit.c
@@ -0,0 +1,209 @@
+/****************************************************************************
+ * arch/mips/src/pic32/pic32mz-lowinit.c
+ *
+ * Copyright (C) 2015 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 <assert.h>
+
+#include <arch/pic32mz/cp0.h>
+#include <arch/board/board.h>
+
+#include "up_internal.h"
+#include "up_arch.h"
+
+#include "chip/pic32mz-prefetch.h"
+
+#include "pic32mz-lowconsole.h"
+#include "pic32mz-lowinit.h"
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+/* Maximum Frequencies ******************************************************/
+
+#define MAX_FLASH_ECC_HZ 66000000 /* Maximum FLASH speed (Hz) with ECC */
+#define MAX_FLASH_NOECC_HZ 83000000 /* Maximum FLASH speed (Hz) without ECC */
+#define MAX_PBCLOCK 80000000 /* Max peripheral bus speed (Hz) */
+
+/* Sanity checks ************************************************************/
+
+/* Make sure that the selected clock parameters are sane */
+
+#define CALC_SYSCLOCK (((BOARD_PLL_INPUT / BOARD_PLL_IDIV) * BOARD_PLL_MULT) / BOARD_PLL_ODIV)
+#if CALC_SYSCLOCK != BOARD_CPU_CLOCK
+# error "Bad BOARD_CPU_CLOCK calculcation in board.h"
+#endif
+
+#define CALC_PBCLOCK (CALC_SYSCLOCK / BOARD_PBDIV)
+#if CALC_PBCLOCK != BOARD_PBCLOCK
+# error "Bad BOARD_PBCLOCK calculcation in board.h"
+#endif
+
+#if CALC_PBCLOCK > MAX_PBCLOCK
+# error "PBCLOCK exceeds maximum value"
+#endif
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Function Prototypes
+ ****************************************************************************/
+
+/****************************************************************************
+ * Global Variables
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Variables
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: pic32mz_prefetch
+ *
+ * Description:
+ * Configure the prefetch module setting:
+ *
+ * 1. The optimal number of FLASH wait states.
+ * 2. Enable prefetch on CPU instructions and data
+ *
+ * Assumptions:
+ * Interrupts are disabled.
+ *
+ ****************************************************************************/
+
+static inline void pic32mz_prefetch(void)
+{
+ unsigned int nwaits;
+ unsigned int residual;
+ uint32_t regval;
+
+
+ /* Configure pre-fetch cache FLASH wait states (assuming ECC is enabled) */
+
+ residual = BOARD_CPU_CLOCK;
+ nwaits = 0;
+
+ while (residual > MAX_FLASH_ECC_HZ)
+ {
+ nwaits++;
+ residual -= MAX_FLASH_ECC_HZ;
+ }
+
+ DEBUGASSERT(nwaits < 8);
+
+ /* Set the FLASH wait states and enabled prefetch on CPU instructions and
+ * data.
+ */
+
+ regval = (PREFETCH_PRECON_PREFEN_CPUID | PREFETCH_PRECON_PFMWS(nwaits));
+ putreg32(regval, PIC32MZ_PREFETCH_PRECON);
+}
+
+/****************************************************************************
+ * Name: pic32mz_k0cache
+ *
+ * Description:
+ * Enable caching in KSEG0.
+ *
+ * Assumptions:
+ * Interrupts are disabled.
+ *
+ ****************************************************************************/
+
+static inline void pic32mz_k0cache(void)
+{
+ register uint32_t regval;
+
+ /* Enable cache on KSEG 0 in the CP0 CONFIG register*/
+
+ asm("\tmfc0 %0,$16,0\n" : "=r"(regval));
+ regval &= ~CP0_CONFIG_K23_MASK;
+ regval |= CP0_CONFIG_K23_CACHEABLE;
+ asm("\tmtc0 %0,$16,0\n" : : "r" (regval));
+
+ UNUSED(regval);
+}
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: pic32mz_lowinit
+ *
+ * Description:
+ * This performs basic low-level initialization of the system.
+ *
+ * Assumptions:
+ * Interrupts have not yet been enabled.
+ *
+ ****************************************************************************/
+
+void pic32mz_lowinit(void)
+{
+ /* Initialize FLASH wait states */
+
+ pic32mz_prefetch();
+
+ /* Enable caching in KSEG0 */
+
+ pic32mz_k0cache();;
+
+ /* Initialize a console (probably a serial console) */
+
+ pic32mz_consoleinit();
+
+ /* Perform early serial initialization (so that we will have debug output
+ * available as soon as possible).
+ */
+
+#ifdef USE_EARLYSERIALINIT
+ up_earlyserialinit();
+#endif
+
+ /* Perform board-level initialization */
+
+ pic32mz_boardinitialize();
+}
diff --git a/nuttx/arch/mips/src/pic32mz/pic32mz-lowinit.h b/nuttx/arch/mips/src/pic32mz/pic32mz-lowinit.h
new file mode 100644
index 000000000..369ef9ebb
--- /dev/null
+++ b/nuttx/arch/mips/src/pic32mz/pic32mz-lowinit.h
@@ -0,0 +1,102 @@
+/************************************************************************************
+ * arch/mips/src/pic32mz/pic32mz-lowinit.h
+ *
+ * Copyright (C) 2015 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.
+ *
+ ************************************************************************************/
+
+#ifndef __ARCH_MIPS_SRC_PIC32MZ_PIC32MZ_LOWINIT_H
+#define __ARCH_MIPS_SRC_PIC32MZ_PIC32MZ_LOWINIT_H
+
+/************************************************************************************
+ * Included Files
+ ************************************************************************************/
+
+#include <nuttx/config.h>
+#include <nuttx/compiler.h>
+
+#include <stdbool.h>
+
+/************************************************************************************
+ * Pre-processor Definitions
+ ************************************************************************************/
+
+/************************************************************************************
+ * Public Types
+ ************************************************************************************/
+
+#ifndef __ASSEMBLY__
+
+/************************************************************************************
+ * Public Data
+ ************************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+#define EXTERN extern "C"
+extern "C"
+{
+#else
+#define EXTERN extern
+#endif
+
+/************************************************************************************
+ * Public Function Prototypes
+ ************************************************************************************/
+
+/************************************************************************************
+ * Name: pic32mz_lowinit
+ *
+ * Description:
+ * This performs basic low-level initialization of the system.
+ *
+ ************************************************************************************/
+
+void pic32mz_lowinit(void);
+
+/************************************************************************************
+ * Name: pic32mz_boardinitialize
+ *
+ * Description:
+ * This function must be provided by the board-specific logic in the directory
+ * <nuttx>/configs/<board-name>/pic32mz_boot.c.
+ *
+ ************************************************************************************/
+
+void pic32mz_boardinitialize(void);
+
+#undef EXTERN
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* __ASSEMBLY__ */
+#endif /* __ARCH_MIPS_SRC_PIC32MZ_PIC32MZ_LOWINIT_H */