summaryrefslogtreecommitdiff
path: root/components
diff options
context:
space:
mode:
Diffstat (limited to 'components')
-rw-r--r--components/mm/mm_aspace.c17
-rw-r--r--components/mm/mm_aspace.h5
-rw-r--r--components/mm/mm_kmem.c32
-rw-r--r--components/mm/mm_page.c2
4 files changed, 48 insertions, 8 deletions
diff --git a/components/mm/mm_aspace.c b/components/mm/mm_aspace.c
index df296b1782..6a969074dc 100644
--- a/components/mm/mm_aspace.c
+++ b/components/mm/mm_aspace.c
@@ -31,10 +31,6 @@
#include <mmu.h>
#include <tlb.h>
-#ifndef RT_USING_SMART
-#define PV_OFFSET 0
-#endif
-
static void _aspace_unmap(rt_aspace_t aspace, void *addr, rt_size_t length);
static void *_find_free(rt_aspace_t aspace, void *prefer, rt_size_t req_size,
void *limit_start, rt_size_t limit_size,
@@ -488,6 +484,7 @@ int rt_aspace_map_phy_static(rt_aspace_t aspace, rt_varea_t varea,
varea->start = hint->prefer;
varea->size = hint->map_size;
hint->flags |= MMF_MAP_FIXED;
+ LOG_D("%s: start %p size %p phy at %p", __func__, varea->start, varea->size, pa_off << MM_PAGE_SHIFT);
err = _mm_aspace_map_phy(aspace, varea, hint, attr, pa_off, ret_va);
}
else
@@ -743,8 +740,16 @@ int rt_aspace_traversal(rt_aspace_t aspace,
static int _dump(rt_varea_t varea, void *arg)
{
- rt_kprintf("%s[%p - %p]\n", varea->mem_obj->get_name(varea), varea->start,
- varea->start + varea->size);
+ if (varea->mem_obj && varea->mem_obj->get_name)
+ {
+ rt_kprintf("[%p - %p] %s\n", varea->start, varea->start + varea->size,
+ varea->mem_obj->get_name(varea));
+ }
+ else
+ {
+ rt_kprintf("[%p - %p] phy-map\n", varea->start, varea->start + varea->size);
+ rt_kprintf("\t\\_ paddr = %p\n", varea->offset << MM_PAGE_SHIFT);
+ }
return 0;
}
diff --git a/components/mm/mm_aspace.h b/components/mm/mm_aspace.h
index a8cf6e8339..8687f9a093 100644
--- a/components/mm/mm_aspace.h
+++ b/components/mm/mm_aspace.h
@@ -20,6 +20,7 @@
#define MM_PAGE_SHIFT 12
#define MM_PA_TO_OFF(pa) ((uintptr_t)(pa) >> MM_PAGE_SHIFT)
+#define PV_OFFSET (rt_kmem_pvoff())
#ifndef RT_USING_SMP
typedef rt_spinlock_t mm_spinlock;
@@ -201,4 +202,8 @@ void rt_varea_free_pages(rt_varea_t varea);
void rt_varea_offload_page(rt_varea_t varea, void *vaddr, rt_size_t size);
+rt_ubase_t rt_kmem_pvoff(void);
+
+void rt_kmem_pvoff_set(rt_ubase_t pvoff);
+
#endif /* __MM_ASPACE_H__ */
diff --git a/components/mm/mm_kmem.c b/components/mm/mm_kmem.c
new file mode 100644
index 0000000000..4d7854f04a
--- /dev/null
+++ b/components/mm/mm_kmem.c
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2006-2022, RT-Thread Development Team
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date Author Notes
+ * 2022-11-14 WangXiaoyao the first version
+ */
+
+#include "mm_aspace.h"
+#include "mm_private.h"
+
+static void list_kernel_space(void)
+{
+ rt_aspace_print_all(&rt_kernel_space);
+}
+MSH_CMD_EXPORT(list_kernel_space, List varea in kernel space);
+
+void rt_kmem_list_varea(void) __attribute__((alias("list_kernel_space")));
+
+static rt_ubase_t rt_pv_offset;
+
+rt_ubase_t rt_kmem_pvoff(void)
+{
+ return rt_pv_offset;
+}
+
+void rt_kmem_pvoff_set(rt_ubase_t pvoff)
+{
+ rt_pv_offset = pvoff;
+}
diff --git a/components/mm/mm_page.c b/components/mm/mm_page.c
index 2da22457a8..bacade4f5e 100644
--- a/components/mm/mm_page.c
+++ b/components/mm/mm_page.c
@@ -40,8 +40,6 @@ CT_ASSERT(order_huge_pg, RT_PAGE_MAX_ORDER > ARCH_PAGE_SHIFT - 2);
CT_ASSERT(size_width, sizeof(rt_size_t) == sizeof(rt_size_t));
#endif /* ARCH_CPU_64BIT */
-#else
-#define PV_OFFSET 0
#endif /* RT_USING_SMART */
static rt_size_t init_mpr_align_start;