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