diff --git a/arch/arm/src/lpc313x/lpc313x_allocateheap.c b/arch/arm/src/lpc313x/lpc313x_allocateheap.c
index cd3ccdc0d10d9e46dc8cda61827a00fc6dc693bc..ec0d924b8a7a095c4e50aad90137c4539e26f8d2 100755
--- a/arch/arm/src/lpc313x/lpc313x_allocateheap.c
+++ b/arch/arm/src/lpc313x/lpc313x_allocateheap.c
@@ -53,6 +53,62 @@
  * Pre-processor Definitions
  ************************************************************************/
 
+/* Configuration ********************************************************/
+
+/* Some sanity checking.  If external memory regions are defined, verify
+ * that CONFIG_MM_REGIONS is set to match, exactly, the number of external
+ * memory regions that we have been asked to add to the heap.
+ */
+
+#if defined(CONFIG_LPC313X_EXTSRAM0) && defined(CONFIG_LPC313X_EXTSRAM0HEAP)
+#  if defined(CONFIG_LPC313X_EXTSRAM1) && defined(CONFIG_LPC313X_EXTSRAM1HEAP)
+#    if defined(CONFIG_LPC313X_EXTSDRAM) && defined(CONFIG_LPC313X_EXTSDRAMHEAP)
+#      /* SRAM+EXTSRAM0+EXTSRAM1+EXTSDRAM */
+#      define LPC313X_NEXT_REGIONS 4
+#    else
+#      /* SRAM+EXTSRAM0+EXTSRAM1 */
+#      define LPC313X_NEXT_REGIONS 3
+#    endif
+#  elif defined(CONFIG_LPC313X_EXTSDRAM) && defined(CONFIG_LPC313X_EXTSDRAMHEAP)
+#      /* SRAM+EXTSRAM0+EXTSDRAM */
+#      define LPC313X_NEXT_REGIONS 3
+#  else
+#      /* SRAM+EXTSRAM0 */
+#      define LPC313X_NEXT_REGIONS 2
+#  endif
+#elif defined(CONFIG_LPC313X_EXTSRAM1) && defined(CONFIG_LPC313X_EXTSRAM1HEAP)
+#  if defined(CONFIG_LPC313X_EXTSDRAM) && defined(CONFIG_LPC313X_EXTSDRAMHEAP)
+#      /* SRAM+EXTSRAM1+EXTSDRAM */
+#      define LPC313X_NEXT_REGIONS 3
+#  else
+#      /* SRAM+EXTSRAM1 */
+#      define LPC313X_NEXT_REGIONS 2
+#  endif
+#elif defined(CONFIG_LPC313X_EXTSDRAM) && defined(CONFIG_LPC313X_EXTSDRAMHEAP)
+#      /* SRAM+EXTSDRAM */
+#      define LPC313X_NEXT_REGIONS 2
+#else
+#      /* SRAM */
+#      define LPC313X_NEXT_REGIONS 1
+#endif
+
+#if CONFIG_MM_REGIONS != LPC313X_NEXT_REGIONS
+#  if CONFIG_MM_REGIONS < LPC313X_NEXT_REGIONS
+#    error "CONFIG_MM_REGIONS is large enough for the selected memory regions"
+#  else
+#    error "CONFIG_MM_REGIONS is too large for the selected memory regions"
+#  endif
+#  if defined(CONFIG_LPC313X_EXTSRAM0) && defined(CONFIG_LPC313X_EXTSRAM0HEAP)
+#    error "External SRAM0 is selected for heap"
+#  endif
+#  if defined(CONFIG_LPC313X_EXTSRAM1) && defined(CONFIG_LPC313X_EXTSRAM1HEAP)
+#    error "External SRAM1 is selected for heap"
+#  endif
+#  if defined(CONFIG_LPC313X_EXTSDRAM) && defined(CONFIG_LPC313X_EXTSDRAMHEAP)
+#    error "External SRAM1 is selected for heap"
+#  endif
+#endif
+
 /************************************************************************
  * Private Data
  ************************************************************************/
@@ -91,3 +147,29 @@ void up_allocate_heap(FAR void **heap_start, size_t *heap_size)
   *heap_start = (FAR void*)g_heapbase;
   *heap_size  = (LPC313X_SRAM_VADDR + CONFIG_DRAM_SIZE) - g_heapbase;
 }
+
+/************************************************************************
+ * Name: up_addregion
+ *
+ * Description:
+ *   Memory may be added in non-contiguous chunks.  Additional chunks are
+ *   added by calling this function.
+ *
+ ************************************************************************/
+
+#if CONFIG_MM_REGIONS > 1
+void up_addregion(void)
+{
+#if defined(CONFIG_LPC313X_EXTSRAM0) && defined(CONFIG_LPC313X_EXTSRAM0HEAP)
+  mm_addregion((FAR void*)LPC313X_EXTSRAM0_VSECTION, CONFIG_LPC313X_EXTSRAM0SIZE);
+#endif
+
+#if defined(CONFIG_LPC313X_EXTSRAM1) && defined(CONFIG_LPC313X_EXTSRAM1HEAP)
+  mm_addregion((FAR void*)LPC313X_EXTSRAM1_VSECTION, CONFIG_LPC313X_EXTSRAM1SIZE);
+#endif
+
+#if defined(CONFIG_LPC313X_EXTSDRAM) && defined(CONFIG_LPC313X_EXTSDRAMHEAP)
+  mm_addregion((FAR void*)LPC313X_EXTSDRAM_VSECTION, CONFIG_LPC313X_EXTSDRAMSIZE);
+#endif
+}
+#endif
diff --git a/configs/ea3131/ostest/defconfig b/configs/ea3131/ostest/defconfig
index aa04a397da685c127fb60c9055f8afc84579be63..86fa0ecdfee80f4aaecaed61f32cb36c60965a78 100755
--- a/configs/ea3131/ostest/defconfig
+++ b/configs/ea3131/ostest/defconfig
@@ -105,6 +105,35 @@ CONFIG_LPC313X_MCI=n
 CONFIG_LPC313X_SPI=n
 CONFIG_LPC313X_UART=y
 
+#
+# Exernal memory available on the board (see also CONFIG_MM_REGIONS)
+#
+# CONFIG_LPC313X_EXTSRAM0 - Select if external SRAM0 is present
+# CONFIG_LPC313X_EXTSRAM0HEAP - Select if external SRAM0 should be
+#   configured as part of the NuttX heap.
+# CONFIG_LPC313X_EXTSRAM0SIZE - Size (in bytes) of the installed
+#   external SRAM0 memory
+# CONFIG_LPC313X_EXTSRAM1 - Select if external SRAM1 is present
+# CONFIG_LPC313X_EXTSRAM1HEAP - Select if external SRAM1 should be
+#   configured as part of the NuttX heap.
+# CONFIG_LPC313X_EXTSRAM1SIZE - Size (in bytes) of the installed
+#   external SRAM1 memory
+# CONFIG_LPC313X_EXTSDRAM - Select if external SDRAM is present
+# CONFIG_LPC313X_EXTSDRAMHEAP - Select if external SDRAM should be
+#   configured as part of the NuttX heap.
+# CONFIG_LPC313X_EXTSDRAMSIZE - Size (in bytes) of the installed
+#   external SDRAM memory
+#
+CONFIG_LPC313X_EXTSRAM0=n
+CONFIG_LPC313X_EXTSRAM0HEAP=n
+CONFIG_LPC313X_EXTSRAM0SIZE=(128*1024)
+CONFIG_LPC313X_EXTSRAM1=n
+CONFIG_LPC313X_EXTSRAM1HEAP=n
+CONFIG_LPC313X_EXTSRAM1SIZE=(128*1024)
+CONFIG_LPC313X_EXTSDRAM=n
+CONFIG_LPC313X_EXTSDRAMHEAP=n
+CONFIG_LPC313X_EXTSDRAMSIZE=(64*1024*1024)
+
 #
 # LPC313X specific device driver settings
 #