aboutsummaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
Diffstat (limited to 'common')
-rw-r--r--common/main.c10
-rw-r--r--common/mem.c16
-rw-r--r--common/pmem.c6
3 files changed, 27 insertions, 5 deletions
diff --git a/common/main.c b/common/main.c
index 5248d2a..9eb6414 100644
--- a/common/main.c
+++ b/common/main.c
@@ -23,11 +23,17 @@
* Sets up all kernel subsystems and jumps into \c init program, does not
* return.
*
- * @param fdt Global FDT pointer.
+ * @param fdt Global FDT pointer in physical memory.
+ * @param ram_base RAM base.
* @return Should not.
*/
-void __main main(void *fdt)
+void __main main(void *fdt, uintptr_t ram_base)
{
+ set_ram_base(ram_base);
+
+ /* convert physical address to virtual address */
+ fdt = __va(fdt);
+
/* dbg uses direct mapping at this point */
init_dbg(fdt);
setup_dmap_dbg();
diff --git a/common/mem.c b/common/mem.c
index 69ba4d6..e3f98e7 100644
--- a/common/mem.c
+++ b/common/mem.c
@@ -17,6 +17,12 @@ size_t __mm_sizes[10];
size_t __mm_page_shift;
enum mm_order __mm_max_order;
+/**
+ * RAM base address. Not sure if it should be provided through a macro
+ * like __mm_*.
+ */
+pm_t ram_base;
+
enum mm_order nearest_order(size_t size)
{
for (enum mm_order order = max_order(); order >= MM_MIN; --order)
@@ -41,3 +47,13 @@ void init_mem(size_t max_order, size_t bits[10], size_t page_shift)
__mm_sizes[i] = 1UL << __mm_shifts[i];
}
}
+
+void set_ram_base(uintptr_t base)
+{
+ ram_base = base;
+}
+
+uintptr_t get_ram_base()
+{
+ return ram_base;
+}
diff --git a/common/pmem.c b/common/pmem.c
index 16e6adf..22a1493 100644
--- a/common/pmem.c
+++ b/common/pmem.c
@@ -609,8 +609,8 @@ void init_pmem(void *fdt)
stat_pmem_conf(fdt, &max_order, &base_bits, bits);
init_mem(max_order, bits, base_bits);
- pm_t ram_size = __get_ramtop(fdt) - RAM_BASE;
- pm_t ram_base = (pm_t)__va(RAM_BASE);
+ pm_t ram_size = __get_ramtop(fdt) - get_ram_base();
+ pm_t ram_base = (pm_t)__va(get_ram_base());
pm_t initrd_top = get_initrdtop(fdt);
pm_t fdt_top = __get_fdttop(fdt);
@@ -629,7 +629,7 @@ void init_pmem(void *fdt)
/* mark init stack, this should be unmapped once we get to executing
* processes */
- __mark_area_used((pm_t)__va(PM_STACK_BASE), (pm_t)__va(PM_STACK_TOP));
+ __mark_area_used(VM_STACK_BASE, VM_STACK_TOP);
/* mark kernel */
/* this could be made more explicit, I suppose. */