Module Name: src
Committed By: reinoud
Date: Mon Apr 14 19:45:40 UTC 2014
Modified Files:
src/sys/arch/evbarm/odroid: odroid_machdep.c odroid_start.S
Log Message:
For Exynos4 platforms, re-implement PoP detection so we can detect 1Gb
systems.
To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 src/sys/arch/evbarm/odroid/odroid_machdep.c
cvs rdiff -u -r1.1 -r1.2 src/sys/arch/evbarm/odroid/odroid_start.S
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/evbarm/odroid/odroid_machdep.c
diff -u src/sys/arch/evbarm/odroid/odroid_machdep.c:1.4 src/sys/arch/evbarm/odroid/odroid_machdep.c:1.5
--- src/sys/arch/evbarm/odroid/odroid_machdep.c:1.4 Sun Apr 13 20:53:35 2014
+++ src/sys/arch/evbarm/odroid/odroid_machdep.c Mon Apr 14 19:45:40 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: odroid_machdep.c,v 1.4 2014/04/13 20:53:35 reinoud Exp $ */
+/* $NetBSD: odroid_machdep.c,v 1.5 2014/04/14 19:45:40 reinoud Exp $ */
/*
* Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: odroid_machdep.c,v 1.4 2014/04/13 20:53:35 reinoud Exp $");
+__KERNEL_RCSID(0, "$NetBSD: odroid_machdep.c,v 1.5 2014/04/14 19:45:40 reinoud Exp $");
#include "opt_evbarm_boardtype.h"
#include "opt_exynos.h"
@@ -265,6 +265,7 @@ initarm(void *arg)
const struct pmap_devmap const *devmap;
bus_addr_t rambase;
const psize_t ram_reserve = 0x200000;
+ psize_t ram_size;
/* allocate/map our basic memory mapping */
switch (EXYNOS_PRODUCT_FAMILY(exynos_soc_id)) {
@@ -344,20 +345,25 @@ curcpu()->ci_data.cpu_cc_freq = 1*1000*1
bootconfig.dram[0].address = rambase;
/*
- * Determine physical memory by looking at the PoP package
+ * Determine physical memory by looking at the PoP package. This PoP
+ * package ID seems to be only available on Exynos4
+ *
+ * First assume the default 2Gb of memory, dictated by mapping too
*/
+ ram_size = (psize_t) 0xC0000000 - 0x40000000;
- psize_t ram_size = (psize_t) 0xC0000000 - 0x40000000;
-#if 0
+#if defined(EXYNOS4)
switch (exynos_pop_id) {
case EXYNOS_PACKAGE_ID_2_GIG:
- ram_size = (psize_t) 2*1024*1024*1024;
+ KASSERT(ram_size <= 2UL*1024*1024*1024);
break;
default:
- printf("Unknown PoP package id 0x%08x\n", exynos_pop_id);
+ printf("Unknown PoP package id 0x%08x, assuming 1Gb\n",
+ exynos_pop_id);
ram_size = (psize_t) 0x10000000;
}
#endif
+
/*
* Configure DMA tags
*/
Index: src/sys/arch/evbarm/odroid/odroid_start.S
diff -u src/sys/arch/evbarm/odroid/odroid_start.S:1.1 src/sys/arch/evbarm/odroid/odroid_start.S:1.2
--- src/sys/arch/evbarm/odroid/odroid_start.S:1.1 Sun Apr 13 02:26:26 2014
+++ src/sys/arch/evbarm/odroid/odroid_start.S Mon Apr 14 19:45:40 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: odroid_start.S,v 1.1 2014/04/13 02:26:26 matt Exp $ */
+/* $NetBSD: odroid_start.S,v 1.2 2014/04/14 19:45:40 reinoud Exp $ */
/*-
* Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -46,7 +46,7 @@
#include <evbarm/odroid/platform.h>
-RCSID("$NetBSD: odroid_start.S,v 1.1 2014/04/13 02:26:26 matt Exp $")
+RCSID("$NetBSD: odroid_start.S,v 1.2 2014/04/14 19:45:40 reinoud Exp $")
#if defined(VERBOSE_INIT_ARM)
@@ -110,10 +110,20 @@ _C_LABEL(odroid_start):
movt r4, #:upper16:exynos_soc_id
sub r4, r4, #KERNEL_BASE_VOFFSET
str r0, [r4] // save soc_id
+ mov r5, r0 // save soc_id
+
+#ifdef EXYNOS4
+ ldr r0, [r6, #EXYNOS_PACKAGE_ID_OFFSET] // load pop_id
+
+ movw r4, #:lower16:exynos_pop_id
+ movt r4, #:upper16:exynos_pop_id
+ sub r4, r4, #KERNEL_BASE_VOFFSET
+ str r0, [r4] // save pop_id
+#endif
/* Pick uart address and initial MMU table for the SoC */
mov r2, #0
- ubfx r1, r0, #24, #8
+ ubfx r1, r5, #24, #8
cmp r1, #0xe5
movteq r2, #:upper16:(EXYNOS_CORE_PBASE + EXYNOS5_UART2_OFFSET)
cmp r1, #0xe4