You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by xi...@apache.org on 2022/09/21 11:57:34 UTC
[incubator-nuttx] branch master updated: arch: armv7-a: Remove the code for CONFIG_ARCH_PGPOOL_MAPPING=n
This is an automated email from the ASF dual-hosted git repository.
xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git
The following commit(s) were added to refs/heads/master by this push:
new ae378872c2 arch: armv7-a: Remove the code for CONFIG_ARCH_PGPOOL_MAPPING=n
ae378872c2 is described below
commit ae378872c2e08d6152049ceec6171bc459b4d63d
Author: Masayuki Ishikawa <ma...@gmail.com>
AuthorDate: Wed Sep 21 16:20:30 2022 +0900
arch: armv7-a: Remove the code for CONFIG_ARCH_PGPOOL_MAPPING=n
Summary:
- Currently, CONFIG_ARCH_PGPOOL_MAPPING=y is necessary for
CONFIG_BUILD_KERNEL=y.
- This commit removes the code for CONFIG_ARCH_PGPOOL_MAPPING=n
Impact:
- None
Testing:
- Tested with sabre-6quad:netknsh_smp
Signed-off-by: Masayuki Ishikawa <Ma...@jp.sony.com>
---
arch/arm/src/armv7-a/arm_addrenv.c | 23 ----------------
arch/arm/src/armv7-a/arm_addrenv_shm.c | 46 --------------------------------
arch/arm/src/armv7-a/arm_addrenv_utils.c | 39 ---------------------------
arch/arm/src/armv7-a/arm_pgalloc.c | 41 ----------------------------
arch/arm/src/armv7-a/arm_physpgaddr.c | 20 +-------------
arch/arm/src/armv7-a/arm_virtpgaddr.c | 4 +--
arch/arm/src/armv7-a/pgalloc.h | 41 +++-------------------------
7 files changed, 7 insertions(+), 207 deletions(-)
diff --git a/arch/arm/src/armv7-a/arm_addrenv.c b/arch/arm/src/armv7-a/arm_addrenv.c
index 0a5c078906..a4e633879e 100644
--- a/arch/arm/src/armv7-a/arm_addrenv.c
+++ b/arch/arm/src/armv7-a/arm_addrenv.c
@@ -149,26 +149,15 @@ static int up_addrenv_initdata(uintptr_t l2table)
irqstate_t flags;
uint32_t *virtptr;
uintptr_t paddr;
-#ifndef CONFIG_ARCH_PGPOOL_MAPPING
- uint32_t l1save;
-#endif
DEBUGASSERT(l2table);
flags = enter_critical_section();
-#ifdef CONFIG_ARCH_PGPOOL_MAPPING
/* Get the virtual address corresponding to the physical page table
* address
*/
virtptr = (uint32_t *)arm_pgvaddr(l2table);
-#else
- /* Temporarily map the page into the virtual address space */
-
- l1save = mmu_l1_getentry(ARCH_SCRATCH_VBASE);
- mmu_l1_setentry(l2table & ~SECTION_MASK, ARCH_SCRATCH_VBASE, MMU_MEMFLAGS);
- virtptr = (uint32_t *)(ARCH_SCRATCH_VBASE | (l2table & SECTION_MASK));
-#endif
/* Invalidate D-Cache so that we read from the physical memory */
@@ -180,16 +169,9 @@ static int up_addrenv_initdata(uintptr_t l2table)
paddr = (uintptr_t)(*virtptr) & PTE_SMALL_PADDR_MASK;
DEBUGASSERT(paddr);
-#ifdef CONFIG_ARCH_PGPOOL_MAPPING
/* Get the virtual address corresponding to the physical page address */
virtptr = (uint32_t *)arm_pgvaddr(paddr);
-#else
- /* Temporarily map the page into the virtual address space */
-
- mmu_l1_setentry(paddr & ~SECTION_MASK, ARCH_SCRATCH_VBASE, MMU_MEMFLAGS);
- virtptr = (uint32_t *)(ARCH_SCRATCH_VBASE | (paddr & SECTION_MASK));
-#endif
/* Finally, after of all of that, we can initialize the tiny region at
* the beginning of .bss/.data by setting it to zero.
@@ -204,11 +186,6 @@ static int up_addrenv_initdata(uintptr_t l2table)
up_flush_dcache((uintptr_t)virtptr,
(uintptr_t)virtptr + ARCH_DATA_RESERVE_SIZE);
-#ifndef CONFIG_ARCH_PGPOOL_MAPPING
- /* Restore the scratch section L1 page table entry */
-
- mmu_l1_restore(ARCH_SCRATCH_VBASE, l1save);
-#endif
leave_critical_section(flags);
return OK;
}
diff --git a/arch/arm/src/armv7-a/arm_addrenv_shm.c b/arch/arm/src/armv7-a/arm_addrenv_shm.c
index 04d711a514..b53822402b 100644
--- a/arch/arm/src/armv7-a/arm_addrenv_shm.c
+++ b/arch/arm/src/armv7-a/arm_addrenv_shm.c
@@ -71,9 +71,6 @@ int up_shmat(uintptr_t *pages, unsigned int npages, uintptr_t vaddr)
uint32_t *l2table;
irqstate_t flags;
uintptr_t paddr;
-#ifndef CONFIG_ARCH_PGPOOL_MAPPING
- uint32_t l1save;
-#endif
unsigned int nmapped;
unsigned int shmndx;
@@ -120,21 +117,11 @@ int up_shmat(uintptr_t *pages, unsigned int npages, uintptr_t vaddr)
flags = enter_critical_section();
group->tg_addrenv.shm[shmndx] = (uintptr_t *)paddr;
-#ifdef CONFIG_ARCH_PGPOOL_MAPPING
/* Get the virtual address corresponding to the physical page
* address.
*/
l2table = (uint32_t *)arm_pgvaddr(paddr);
-#else
- /* Temporarily map the page into the virtual address space */
-
- l1save = mmu_l1_getentry(ARCH_SCRATCH_VBASE);
- mmu_l1_setentry(paddr & ~SECTION_MASK, ARCH_SCRATCH_VBASE,
- MMU_MEMFLAGS);
- l2table = (uint32_t *)
- (ARCH_SCRATCH_VBASE | (paddr & SECTION_MASK));
-#endif
/* Initialize the page table */
@@ -149,21 +136,11 @@ int up_shmat(uintptr_t *pages, unsigned int npages, uintptr_t vaddr)
paddr = (uintptr_t)l1entry & ~SECTION_MASK;
flags = enter_critical_section();
-#ifdef CONFIG_ARCH_PGPOOL_MAPPING
/* Get the virtual address corresponding to the physical page\
* address.
*/
l2table = (uint32_t *)arm_pgvaddr(paddr);
-#else
- /* Temporarily map the page into the virtual address space */
-
- l1save = mmu_l1_getentry(ARCH_SCRATCH_VBASE);
- mmu_l1_setentry(paddr & ~SECTION_MASK, ARCH_SCRATCH_VBASE,
- MMU_MEMFLAGS);
- l2table = (uint32_t *)
- (ARCH_SCRATCH_VBASE | (paddr & SECTION_MASK));
-#endif
}
/* Map the virtual address to this physical address */
@@ -186,11 +163,6 @@ int up_shmat(uintptr_t *pages, unsigned int npages, uintptr_t vaddr)
(uintptr_t)l2table +
ENTRIES_PER_L2TABLE * sizeof(uint32_t));
-#ifndef CONFIG_ARCH_PGPOOL_MAPPING
- /* Restore the scratch section L1 page table entry */
-
- mmu_l1_restore(ARCH_SCRATCH_VBASE, l1save);
-#endif
leave_critical_section(flags);
}
@@ -222,9 +194,6 @@ int up_shmdt(uintptr_t vaddr, unsigned int npages)
uint32_t *l2table;
irqstate_t flags;
uintptr_t paddr;
-#ifndef CONFIG_ARCH_PGPOOL_MAPPING
- uint32_t l1save;
-#endif
unsigned int nunmapped;
unsigned int shmndx;
@@ -260,21 +229,11 @@ int up_shmdt(uintptr_t vaddr, unsigned int npages)
paddr = (uintptr_t)l1entry & ~SECTION_MASK;
flags = enter_critical_section();
-#ifdef CONFIG_ARCH_PGPOOL_MAPPING
/* Get the virtual address corresponding to the physical page
* address.
*/
l2table = (uint32_t *)arm_pgvaddr(paddr);
-#else
- /* Temporarily map the page into the virtual address space */
-
- l1save = mmu_l1_getentry(ARCH_SCRATCH_VBASE);
- mmu_l1_setentry(paddr & ~SECTION_MASK, ARCH_SCRATCH_VBASE,
- MMU_MEMFLAGS);
- l2table = (uint32_t *)
- (ARCH_SCRATCH_VBASE | (paddr & SECTION_MASK));
-#endif
/* Unmap this virtual page address.
*
@@ -304,11 +263,6 @@ int up_shmdt(uintptr_t vaddr, unsigned int npages)
(uintptr_t)l2table +
ENTRIES_PER_L2TABLE * sizeof(uint32_t));
-#ifndef CONFIG_ARCH_PGPOOL_MAPPING
- /* Restore the scratch section L1 page table entry */
-
- mmu_l1_restore(ARCH_SCRATCH_VBASE, l1save);
-#endif
leave_critical_section(flags);
}
diff --git a/arch/arm/src/armv7-a/arm_addrenv_utils.c b/arch/arm/src/armv7-a/arm_addrenv_utils.c
index 2eeb2aa859..19f6b5cb68 100644
--- a/arch/arm/src/armv7-a/arm_addrenv_utils.c
+++ b/arch/arm/src/armv7-a/arm_addrenv_utils.c
@@ -62,9 +62,6 @@ int arm_addrenv_create_region(uintptr_t **list, unsigned int listlen,
irqstate_t flags;
uintptr_t paddr;
uint32_t *l2table;
-#ifndef CONFIG_ARCH_PGPOOL_MAPPING
- uint32_t l1save;
-#endif
size_t nmapped;
unsigned int npages;
unsigned int i;
@@ -110,19 +107,9 @@ int arm_addrenv_create_region(uintptr_t **list, unsigned int listlen,
flags = enter_critical_section();
-#ifdef CONFIG_ARCH_PGPOOL_MAPPING
/* Get the virtual address corresponding to the physical page address */
l2table = (uint32_t *)arm_pgvaddr(paddr);
-#else
- /* Temporarily map the page into the virtual address space */
-
- l1save = mmu_l1_getentry(ARCH_SCRATCH_VBASE);
- mmu_l1_setentry(paddr & ~SECTION_MASK, ARCH_SCRATCH_VBASE,
- MMU_MEMFLAGS);
- l2table = (uint32_t *)(ARCH_SCRATCH_VBASE |
- (paddr & SECTION_MASK));
-#endif
/* Initialize the page table */
@@ -138,9 +125,6 @@ int arm_addrenv_create_region(uintptr_t **list, unsigned int listlen,
binfo("a new page (paddr=%x)\n", paddr);
if (!paddr)
{
-#ifndef CONFIG_ARCH_PGPOOL_MAPPING
- mmu_l1_restore(ARCH_SCRATCH_VBASE, l1save);
-#endif
leave_critical_section(flags);
return -ENOMEM;
}
@@ -160,11 +144,6 @@ int arm_addrenv_create_region(uintptr_t **list, unsigned int listlen,
(uintptr_t)l2table +
ENTRIES_PER_L2TABLE * sizeof(uint32_t));
-#ifndef CONFIG_ARCH_PGPOOL_MAPPING
- /* Restore the scratch section L1 page table entry */
-
- mmu_l1_restore(ARCH_SCRATCH_VBASE, l1save);
-#endif
leave_critical_section(flags);
}
@@ -185,9 +164,6 @@ void arm_addrenv_destroy_region(uintptr_t **list, unsigned int listlen,
irqstate_t flags;
uintptr_t paddr;
uint32_t *l2table;
-#ifndef CONFIG_ARCH_PGPOOL_MAPPING
- uint32_t l1save;
-#endif
int i;
int j;
@@ -206,21 +182,11 @@ void arm_addrenv_destroy_region(uintptr_t **list, unsigned int listlen,
{
flags = enter_critical_section();
-#ifdef CONFIG_ARCH_PGPOOL_MAPPING
/* Get the virtual address corresponding to the physical page
* address
*/
l2table = (uint32_t *)arm_pgvaddr(paddr);
-#else
- /* Temporarily map the page into the virtual address space */
-
- l1save = mmu_l1_getentry(ARCH_SCRATCH_VBASE);
- mmu_l1_setentry(paddr & ~SECTION_MASK, ARCH_SCRATCH_VBASE,
- MMU_MEMFLAGS);
- l2table = (uint32_t *)(ARCH_SCRATCH_VBASE |
- (paddr & SECTION_MASK));
-#endif
/* Return the allocated pages to the page allocator unless we were
* asked to keep the page data. We keep the page data only for
@@ -242,11 +208,6 @@ void arm_addrenv_destroy_region(uintptr_t **list, unsigned int listlen,
}
}
-#ifndef CONFIG_ARCH_PGPOOL_MAPPING
- /* Restore the scratch section L1 page table entry */
-
- mmu_l1_restore(ARCH_SCRATCH_VBASE, l1save);
-#endif
leave_critical_section(flags);
/* And free the L2 page table itself */
diff --git a/arch/arm/src/armv7-a/arm_pgalloc.c b/arch/arm/src/armv7-a/arm_pgalloc.c
index 8ced494326..0183ad631d 100644
--- a/arch/arm/src/armv7-a/arm_pgalloc.c
+++ b/arch/arm/src/armv7-a/arm_pgalloc.c
@@ -56,9 +56,6 @@ static uintptr_t alloc_pgtable(void)
irqstate_t flags;
uintptr_t paddr;
uint32_t *l2table;
-#ifndef CONFIG_ARCH_PGPOOL_MAPPING
- uint32_t l1save;
-#endif
/* Allocate one physical page for the L2 page table */
@@ -70,19 +67,9 @@ static uintptr_t alloc_pgtable(void)
flags = enter_critical_section();
-#ifdef CONFIG_ARCH_PGPOOL_MAPPING
/* Get the virtual address corresponding to the physical page address */
l2table = (uint32_t *)arm_pgvaddr(paddr);
-#else
- /* Temporarily map the page into the virtual address space */
-
- l1save = mmu_l1_getentry(ARCH_SCRATCH_VBASE);
- mmu_l1_setentry(paddr & ~SECTION_MASK, ARCH_SCRATCH_VBASE,
- MMU_MEMFLAGS);
- l2table = (uint32_t *)(ARCH_SCRATCH_VBASE |
- (paddr & SECTION_MASK));
-#endif
/* Initialize the page table */
@@ -95,11 +82,6 @@ static uintptr_t alloc_pgtable(void)
up_flush_dcache((uintptr_t)l2table,
(uintptr_t)l2table + MM_PGSIZE);
-#ifndef CONFIG_ARCH_PGPOOL_MAPPING
- /* Restore the scratch section page table entry */
-
- mmu_l1_restore(ARCH_SCRATCH_VBASE, l1save);
-#endif
leave_critical_section(flags);
}
@@ -205,9 +187,6 @@ uintptr_t pgalloc(uintptr_t brkaddr, unsigned int npages)
uint32_t *l2table;
irqstate_t flags;
uintptr_t paddr;
-#ifndef CONFIG_ARCH_PGPOOL_MAPPING
- uint32_t l1save;
-#endif
unsigned int index;
binfo("tcb->pid=%d tcb->group=%p\n", tcb->pid, tcb->group);
@@ -247,21 +226,9 @@ uintptr_t pgalloc(uintptr_t brkaddr, unsigned int npages)
flags = enter_critical_section();
-#ifdef CONFIG_ARCH_PGPOOL_MAPPING
/* Get the virtual address corresponding to the physical page address */
l2table = (uint32_t *)arm_pgvaddr(paddr);
-#else
- /* Temporarily map the level 2 page table into the "scratch" virtual
- * address space
- */
-
- l1save = mmu_l1_getentry(ARCH_SCRATCH_VBASE);
- mmu_l1_setentry(paddr & ~SECTION_MASK, ARCH_SCRATCH_VBASE,
- MMU_MEMFLAGS);
- l2table = (uint32_t *)(ARCH_SCRATCH_VBASE |
- (paddr & SECTION_MASK));
-#endif
/* Back up L2 entry with physical memory */
@@ -269,9 +236,6 @@ uintptr_t pgalloc(uintptr_t brkaddr, unsigned int npages)
binfo("a new page (paddr=%x)\n", paddr);
if (paddr == 0)
{
-#ifndef CONFIG_ARCH_PGPOOL_MAPPING
- mmu_l1_restore(ARCH_SCRATCH_VBASE, l1save);
-#endif
leave_critical_section(flags);
return 0;
}
@@ -296,11 +260,6 @@ uintptr_t pgalloc(uintptr_t brkaddr, unsigned int npages)
up_flush_dcache((uintptr_t)&l2table[index],
(uintptr_t)&l2table[index] + sizeof(uint32_t));
-#ifndef CONFIG_ARCH_PGPOOL_MAPPING
- /* Restore the scratch L1 page table entry */
-
- mmu_l1_restore(ARCH_SCRATCH_VBASE, l1save);
-#endif
leave_critical_section(flags);
}
diff --git a/arch/arm/src/armv7-a/arm_physpgaddr.c b/arch/arm/src/armv7-a/arm_physpgaddr.c
index 661aa27c5d..bf7aa9812c 100644
--- a/arch/arm/src/armv7-a/arm_physpgaddr.c
+++ b/arch/arm/src/armv7-a/arm_physpgaddr.c
@@ -57,9 +57,6 @@ uintptr_t arm_physpgaddr(uintptr_t vaddr)
uint32_t *l2table;
uintptr_t paddr;
uint32_t l1entry;
-#ifndef CONFIG_ARCH_PGPOOL_MAPPING
- uint32_t l1save;
-#endif
int index;
/* Check if this address is within the range of one of the virtualized user
@@ -81,19 +78,10 @@ uintptr_t arm_physpgaddr(uintptr_t vaddr)
paddr = ((uintptr_t)l1entry & PMD_PTE_PADDR_MASK);
-#ifdef CONFIG_ARCH_PGPOOL_MAPPING
/* Get the virtual address of the base of level 2 page table */
l2table = (uint32_t *)arm_pgvaddr(paddr);
-#else
- /* Temporarily map the page into the virtual address space */
-
- l1save = mmu_l1_getentry(ARCH_SCRATCH_VBASE);
- mmu_l1_setentry(paddr & ~SECTION_MASK,
- ARCH_SCRATCH_VBASE, MMU_MEMFLAGS);
- l2table = (uint32_t *)(ARCH_SCRATCH_VBASE |
- (paddr & SECTION_MASK));
-#endif
+
if (l2table)
{
/* Invalidate D-Cache line containing this virtual address so
@@ -112,12 +100,6 @@ uintptr_t arm_physpgaddr(uintptr_t vaddr)
paddr = ((uintptr_t)l2table[index] & PTE_SMALL_PADDR_MASK);
-#ifndef CONFIG_ARCH_PGPOOL_MAPPING
- /* Restore the scratch section L1 page table entry */
-
- mmu_l1_restore(ARCH_SCRATCH_VBASE, l1save);
-#endif
-
/* Add the correct offset and return the physical address
* corresponding to the virtual address.
*/
diff --git a/arch/arm/src/armv7-a/arm_virtpgaddr.c b/arch/arm/src/armv7-a/arm_virtpgaddr.c
index 3fe49502e8..2764d85bb6 100644
--- a/arch/arm/src/armv7-a/arm_virtpgaddr.c
+++ b/arch/arm/src/armv7-a/arm_virtpgaddr.c
@@ -26,7 +26,7 @@
#include "pgalloc.h"
-#if defined(CONFIG_MM_PGALLOC) && defined(CONFIG_ARCH_PGPOOL_MAPPING)
+#ifdef CONFIG_MM_PGALLOC
/****************************************************************************
* Public Functions
@@ -58,4 +58,4 @@ uintptr_t arm_virtpgaddr(uintptr_t paddr)
return 0;
}
-#endif /* CONFIG_MM_PGALLOC && CONFIG_ARCH_PGPOOL_MAPPING */
+#endif /* CONFIG_MM_PGALLOC */
diff --git a/arch/arm/src/armv7-a/pgalloc.h b/arch/arm/src/armv7-a/pgalloc.h
index 3cf6da744f..611f7de6fe 100644
--- a/arch/arm/src/armv7-a/pgalloc.h
+++ b/arch/arm/src/armv7-a/pgalloc.h
@@ -41,6 +41,10 @@
* Pre-processor Definitions
****************************************************************************/
+#ifndef CONFIG_ARCH_PGPOOL_MAPPING
+# error "ARMv7-A needs CONFIG_ARCH_PGPOOL_MAPPING"
+#endif
+
/****************************************************************************
* Public Data
****************************************************************************/
@@ -49,39 +53,6 @@
* Inline Functions
****************************************************************************/
-/****************************************************************************
- * Name: arm_pgmap
- *
- * Description:
- * Map one page to a temporary, scratch virtual memory address
- *
- ****************************************************************************/
-
-#if !defined(CONFIG_ARCH_PGPOOL_MAPPING) && defined(CONFIG_ARCH_USE_MMU)
-static inline uintptr_t arm_tmpmap(uintptr_t paddr, uint32_t *l1save)
-{
- *l1save = mmu_l1_getentry(ARCH_SCRATCH_VBASE);
- mmu_l1_setentry(paddr & ~SECTION_MASK, ARCH_SCRATCH_VBASE, MMU_MEMFLAGS);
- return ((uintptr_t)ARCH_SCRATCH_VBASE | (paddr & SECTION_MASK));
-}
-#endif
-
-/****************************************************************************
- * Name: arm_pgrestore
- *
- * Description:
- * Restore any previous L1 page table mapping that was in place when
- * arm_tmpmap() was called
- *
- ****************************************************************************/
-
-#if !defined(CONFIG_ARCH_PGPOOL_MAPPING) && defined(CONFIG_ARCH_USE_MMU)
-static inline void arm_tmprestore(uint32_t l1save)
-{
- mmu_l1_restore(ARCH_SCRATCH_VBASE, l1save);
-}
-#endif
-
/****************************************************************************
* Name: arm_pgvaddr
*
@@ -92,7 +63,6 @@ static inline void arm_tmprestore(uint32_t l1save)
*
****************************************************************************/
-#ifdef CONFIG_ARCH_PGPOOL_MAPPING
static inline uintptr_t arm_pgvaddr(uintptr_t paddr)
{
DEBUGASSERT(paddr >= CONFIG_ARCH_PGPOOL_PBASE &&
@@ -100,7 +70,6 @@ static inline uintptr_t arm_pgvaddr(uintptr_t paddr)
return paddr - CONFIG_ARCH_PGPOOL_PBASE + CONFIG_ARCH_PGPOOL_VBASE;
}
-#endif
/****************************************************************************
* Name: arm_uservaddr
@@ -228,9 +197,7 @@ uintptr_t arm_physpgaddr(uintptr_t vaddr);
*
****************************************************************************/
-#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 */