Module Name: src Committed By: matt Date: Tue Apr 30 00:18:02 UTC 2013
Modified Files: src/sys/arch/evbarm/beagle: beagle.h beagle_machdep.c beagle_start.S Log Message: Map EMIF0 for TIAM335X and use to probe memory size. To generate a diff of this commit: cvs rdiff -u -r1.9 -r1.10 src/sys/arch/evbarm/beagle/beagle.h cvs rdiff -u -r1.38 -r1.39 src/sys/arch/evbarm/beagle/beagle_machdep.c cvs rdiff -u -r1.12 -r1.13 src/sys/arch/evbarm/beagle/beagle_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/beagle/beagle.h diff -u src/sys/arch/evbarm/beagle/beagle.h:1.9 src/sys/arch/evbarm/beagle/beagle.h:1.10 --- src/sys/arch/evbarm/beagle/beagle.h:1.9 Thu Dec 13 01:16:39 2012 +++ src/sys/arch/evbarm/beagle/beagle.h Tue Apr 30 00:18:01 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: beagle.h,v 1.9 2012/12/13 01:16:39 matt Exp $ */ +/* $NetBSD: beagle.h,v 1.10 2013/04/30 00:18:01 matt Exp $ */ /* * Copyright (c) 2007 Microsoft * All rights reserved. @@ -80,6 +80,8 @@ #define OMAP_L4_PERIPHERAL_SIZE TI_AM335X_L4_PERIPHERAL_SIZE #define OMAP_L4_FAST_BASE TI_AM335X_L4_FAST_BASE #define OMAP_L4_FAST_SIZE TI_AM335X_L4_FAST_SIZE +#define OMAP_EMIF_BASE TI_AM335X_EMIF0_BASE +#define OMAP_EMIF_SIZE TI_AM335X_EMIF0_SIZE #endif #ifdef TI_DM37XX @@ -112,7 +114,8 @@ #define OMAP_L4_CORE_VBASE OMAP_KERNEL_IO_VBASE #define OMAP_L4_PERIPHERAL_VBASE (OMAP_L4_CORE_VBASE + OMAP_L4_CORE_SIZE) #define OMAP_L4_FAST_VBASE (OMAP_L4_PERIPHERAL_VBASE + OMAP_L4_PERIPHERAL_SIZE) -#define OMAP_KERNEL_IO_VEND (OMAP_L4_FAST_VBASE + OMAP_L4_FAST_SIZE) +#define OMAP_EMIF_VBASE (OMAP_L4_FAST_VBASE + OMAP_L4_FAST_SIZE) +#define OMAP_KERNEL_IO_VEND (OMAP_EMIF_VBASE + OMAP_EMIF_SIZE) #define CONSADDR_VA ((CONSADDR - OMAP_L4_CORE_BASE) + OMAP_L4_CORE_VBASE) #elif defined(TI_DM37XX) #define OMAP_L4_CORE_VBASE OMAP_KERNEL_IO_VBASE Index: src/sys/arch/evbarm/beagle/beagle_machdep.c diff -u src/sys/arch/evbarm/beagle/beagle_machdep.c:1.38 src/sys/arch/evbarm/beagle/beagle_machdep.c:1.39 --- src/sys/arch/evbarm/beagle/beagle_machdep.c:1.38 Mon Apr 15 18:56:38 2013 +++ src/sys/arch/evbarm/beagle/beagle_machdep.c Tue Apr 30 00:18:01 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: beagle_machdep.c,v 1.38 2013/04/15 18:56:38 bouyer Exp $ */ +/* $NetBSD: beagle_machdep.c,v 1.39 2013/04/30 00:18:01 matt Exp $ */ /* * Machine dependent functions for kernel setup for TI OSK5912 board. @@ -125,7 +125,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: beagle_machdep.c,v 1.38 2013/04/15 18:56:38 bouyer Exp $"); +__KERNEL_RCSID(0, "$NetBSD: beagle_machdep.c,v 1.39 2013/04/30 00:18:01 matt Exp $"); #include "opt_machdep.h" #include "opt_ddb.h" @@ -234,6 +234,7 @@ static void omap4_cpu_clk(void); #endif #if defined(TI_AM335X) static void am335x_cpu_clk(void); +static psize_t am335x_memprobe(void); #endif #if defined(OMAP_3430) || defined(OMAP_3530) @@ -316,6 +317,18 @@ static const struct pmap_devmap devmap[] .pd_cache = PTE_NOCACHE }, #endif +#ifdef OMAP_EMIF_BASE + { + /* + * Map all of the L4 EMIF area + */ + .pd_va = _A(OMAP_EMIF_VBASE), + .pd_pa = _A(OMAP_EMIF_BASE), + .pd_size = _S(OMAP_EMIF_SIZE), + .pd_prot = VM_PROT_READ|VM_PROT_WRITE, + .pd_cache = PTE_NOCACHE + }, +#endif #ifdef OMAP_L4_ABE_BASE { /* @@ -461,6 +474,9 @@ initarm(void *arg) #if defined(OMAP_3430) || defined(OMAP_3530) ram_size = omap3530_memprobe(); #endif +#if defined(TI_AM335X) + ram_size = am335x_memprobe(); +#endif /* * If MEMSIZE specified less than what we really have, limit ourselves * to that. @@ -689,6 +705,19 @@ am335x_cpu_clk(void) __func__, curcpu()->ci_data.cpu_cc_freq, sys_clk, m, n, n+1, m2); } + +static psize_t +am335x_memprobe(void) +{ + const vaddr_t emif_base = OMAP_EMIF_VBASE; + const uint32_t sdram_config = *(const volatile uint32_t *)(emif_base + EMIF_SDRAM_CONFIG); + const u_int ibank = __SHIFTOUT(sdram_config, SDRAM_CONFIG_IBANK); + const u_int rsize = 9 + __SHIFTOUT(sdram_config, SDRAM_CONFIG_RSIZE); + const u_int pagesize = 8 + __SHIFTOUT(sdram_config, SDRAM_CONFIG_PAGESIZE); + const u_int width = 2 - __SHIFTOUT(sdram_config, SDRAM_CONFIG_WIDTH); + printf("sdram_config = %#x\n", sdram_config); + return 1L << (ibank + rsize + pagesize + width); +} #endif #if defined(OMAP_3430) || defined(OMAP_3530) Index: src/sys/arch/evbarm/beagle/beagle_start.S diff -u src/sys/arch/evbarm/beagle/beagle_start.S:1.12 src/sys/arch/evbarm/beagle/beagle_start.S:1.13 --- src/sys/arch/evbarm/beagle/beagle_start.S:1.12 Thu Dec 13 01:16:39 2012 +++ src/sys/arch/evbarm/beagle/beagle_start.S Tue Apr 30 00:18:02 2013 @@ -98,7 +98,7 @@ #define INIT_MEMSIZE 128 #endif -RCSID("$NetBSD: beagle_start.S,v 1.12 2012/12/13 01:16:39 matt Exp $") +RCSID("$NetBSD: beagle_start.S,v 1.13 2013/04/30 00:18:02 matt Exp $") #define Invalidate_I_cache(reg) \ mcr p15, 0, reg, c7, c5, 0 /* Invalidate Entire I cache */ @@ -303,6 +303,13 @@ mmu_init_table: L1_S_PROTO | L1_S_APv7_KRW) #endif +#ifdef OMAP_EMIF_BASE + /* Map first 1MB of EMIF0 (so we can probe memory size) */ + MMU_INIT(OMAP_EMIF_VBASE, OMAP_EMIF_BASE, + (OMAP_EMIF_SIZE + L1_S_SIZE - 1) / L1_S_SIZE, + L1_S_PROTO | L1_S_APv7_KRW) +#endif + #ifdef OMAP_SDRC_BASE /* Map 64KB SDRAM Controller (SDRC) */ MMU_INIT(OMAP_SDRC_VBASE, OMAP_SDRC_BASE,