summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--nuttx/arch/arm/src/a1x/Make.defs3
-rw-r--r--nuttx/arch/arm/src/armv7-a/pgalloc.h15
-rw-r--r--nuttx/arch/arm/src/sama5/Make.defs3
-rw-r--r--nuttx/arch/arm/src/sama5/sam_pgalloc.c2
-rw-r--r--nuttx/arch/arm/src/sama5/sam_pgalloc.h4
5 files changed, 27 insertions, 0 deletions
diff --git a/nuttx/arch/arm/src/a1x/Make.defs b/nuttx/arch/arm/src/a1x/Make.defs
index 939ab357d..82ba23bc5 100644
--- a/nuttx/arch/arm/src/a1x/Make.defs
+++ b/nuttx/arch/arm/src/a1x/Make.defs
@@ -102,6 +102,9 @@ endif
ifeq ($(CONFIG_MM_PGALLOC),y)
CMN_CSRCS += arm_physpgaddr.c
+ifeq ($(CONFIG_ARCH_PGPOOL_MAPPING),y)
+CMN_CSRCS += arm_virtpgaddr.c
+endif
endif
ifeq ($(CONFIG_ELF),y)
diff --git a/nuttx/arch/arm/src/armv7-a/pgalloc.h b/nuttx/arch/arm/src/armv7-a/pgalloc.h
index ee39f100f..3991b92fe 100644
--- a/nuttx/arch/arm/src/armv7-a/pgalloc.h
+++ b/nuttx/arch/arm/src/armv7-a/pgalloc.h
@@ -43,6 +43,8 @@
#include <nuttx/config.h>
#include <stdint.h>
+#include <stdbool.h>
+#include <assert.h>
#include <nuttx/addrenv.h>
@@ -154,5 +156,18 @@ static inline bool arm_uservaddr(uintptr_t vaddr)
uintptr_t arm_physpgaddr(uintptr_t vaddr);
+/****************************************************************************
+ * Name: arm_virtpgaddr
+ *
+ * Description:
+ * Check if the physical address lies in the page pool and, if so
+ * get the mapping to the virtual address in the user data area.
+ *
+ ****************************************************************************/
+
+#ifdef CONFIG_ARCH_PGPOOL_MAPPING
+uintptr_t arm_virtpgaddr(uintptr_t paddr);
+#endif
+
#endif /* CONFIG_MM_PGALLOC */
#endif /* __ARCH_ARM_SRC_ARMV7_A_PGALLOC_H */
diff --git a/nuttx/arch/arm/src/sama5/Make.defs b/nuttx/arch/arm/src/sama5/Make.defs
index 6feae083d..ba8012837 100644
--- a/nuttx/arch/arm/src/sama5/Make.defs
+++ b/nuttx/arch/arm/src/sama5/Make.defs
@@ -104,6 +104,9 @@ endif
ifeq ($(CONFIG_MM_PGALLOC),y)
CMN_CSRCS += arm_physpgaddr.c
+ifeq ($(CONFIG_ARCH_PGPOOL_MAPPING),y)
+CMN_CSRCS += arm_virtpgaddr.c
+endif
endif
ifeq ($(CONFIG_ELF),y)
diff --git a/nuttx/arch/arm/src/sama5/sam_pgalloc.c b/nuttx/arch/arm/src/sama5/sam_pgalloc.c
index a90582cb3..5fbaac8a9 100644
--- a/nuttx/arch/arm/src/sama5/sam_pgalloc.c
+++ b/nuttx/arch/arm/src/sama5/sam_pgalloc.c
@@ -124,6 +124,7 @@ void up_allocate_pgheap(FAR void **heap_start, size_t *heap_size)
*
****************************************************************************/
+#ifndef CONFIG_ARCH_PGPOOL_MAPPING
uintptr_t sam_virtpgaddr(uintptr_t paddr)
{
uintptr_t poolstart;
@@ -146,5 +147,6 @@ uintptr_t sam_virtpgaddr(uintptr_t paddr)
return 0;
}
+#endif /* !CONFIG_ARCH_PGPOOL_MAPPING */
#endif /* CONFIG_MM_PGALLOC */
diff --git a/nuttx/arch/arm/src/sama5/sam_pgalloc.h b/nuttx/arch/arm/src/sama5/sam_pgalloc.h
index b79ba1a85..75f4f90f1 100644
--- a/nuttx/arch/arm/src/sama5/sam_pgalloc.h
+++ b/nuttx/arch/arm/src/sama5/sam_pgalloc.h
@@ -88,7 +88,11 @@ extern "C"
*
****************************************************************************/
+#ifdef CONFIG_ARCH_PGPOOL_MAPPING
+# define sam_virtpgaddr(vaddr) arm_virtpgaddr(vaddr)
+#else
uintptr_t sam_virtpgaddr(uintptr_t paddr);
+#endif
#undef EXTERN
#ifdef __cplusplus