Module Name:    src
Committed By:   jmcneill
Date:           Fri Apr 21 21:13:04 UTC 2017

Modified Files:
        src/sys/arch/arm/nvidia: tegra_mc.c tegra_reg.h tegra_var.h
        src/sys/arch/evbarm/tegra: tegra_machdep.c

Log Message:
Get the physical memory layout from the /memory node instead of reading
from the memory controller registers.


To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 src/sys/arch/arm/nvidia/tegra_mc.c
cvs rdiff -u -r1.21 -r1.22 src/sys/arch/arm/nvidia/tegra_reg.h
cvs rdiff -u -r1.31 -r1.32 src/sys/arch/arm/nvidia/tegra_var.h
cvs rdiff -u -r1.38 -r1.39 src/sys/arch/evbarm/tegra/tegra_machdep.c

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/arm/nvidia/tegra_mc.c
diff -u src/sys/arch/arm/nvidia/tegra_mc.c:1.6 src/sys/arch/arm/nvidia/tegra_mc.c:1.7
--- src/sys/arch/arm/nvidia/tegra_mc.c:1.6	Wed Apr 12 00:39:28 2017
+++ src/sys/arch/arm/nvidia/tegra_mc.c	Fri Apr 21 21:13:04 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: tegra_mc.c,v 1.6 2017/04/12 00:39:28 jmcneill Exp $ */
+/* $NetBSD: tegra_mc.c,v 1.7 2017/04/21 21:13:04 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2015 Jared D. McNeill <jmcne...@invisible.ca>
@@ -29,7 +29,7 @@
 #include "locators.h"
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tegra_mc.c,v 1.6 2017/04/12 00:39:28 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tegra_mc.c,v 1.7 2017/04/21 21:13:04 jmcneill Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -145,24 +145,3 @@ tegra_mc_intr(void *v)
 
 	return status;
 }
-
-psize_t
-tegra_mc_memsize(void)
-{
-	bus_space_tag_t bst;
-	bus_space_handle_t bsh;
-
-	if (mc_softc) {
-		bst = mc_softc->sc_bst;
-		bsh = mc_softc->sc_bsh;
-	} else {
-		bst = &armv7_generic_bs_tag;
-		bus_space_subregion(bst, tegra_apb_bsh,
-		    TEGRA_MC_OFFSET, TEGRA_MC_SIZE, &bsh);
-	}
-
-	const uint32_t emem_cfg = bus_space_read_4(bst, bsh, MC_EMEM_CFG_0_REG);
-	const psize_t nmb = __SHIFTOUT(emem_cfg, MC_EMEM_CFG_0_EMEM_SIZE_MB);
-
-	return nmb * 1024 * 1024;
-}

Index: src/sys/arch/arm/nvidia/tegra_reg.h
diff -u src/sys/arch/arm/nvidia/tegra_reg.h:1.21 src/sys/arch/arm/nvidia/tegra_reg.h:1.22
--- src/sys/arch/arm/nvidia/tegra_reg.h:1.21	Sat Mar 26 09:07:31 2016
+++ src/sys/arch/arm/nvidia/tegra_reg.h	Fri Apr 21 21:13:04 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: tegra_reg.h,v 1.21 2016/03/26 09:07:31 skrll Exp $ */
+/* $NetBSD: tegra_reg.h,v 1.22 2017/04/21 21:13:04 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2015 Jared D. McNeill <jmcne...@invisible.ca>
@@ -31,8 +31,6 @@
 
 #define CONSADDR_VA	(CONSADDR - TEGRA_APB_BASE + TEGRA_APB_VBASE)
 
-#define TEGRA_EXTMEM_BASE	0x80000000
-
 #define TEGRA_PCIE_OFFSET	0x01000000
 #define TEGRA_PCIE_SIZE		0x3f000000
 #define TEGRA_PCIE_RPCONF_BASE	0x01000000

Index: src/sys/arch/arm/nvidia/tegra_var.h
diff -u src/sys/arch/arm/nvidia/tegra_var.h:1.31 src/sys/arch/arm/nvidia/tegra_var.h:1.32
--- src/sys/arch/arm/nvidia/tegra_var.h:1.31	Fri Apr 14 00:19:34 2017
+++ src/sys/arch/arm/nvidia/tegra_var.h	Fri Apr 21 21:13:04 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: tegra_var.h,v 1.31 2017/04/14 00:19:34 jmcneill Exp $ */
+/* $NetBSD: tegra_var.h,v 1.32 2017/04/21 21:13:04 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2015 Jared D. McNeill <jmcne...@invisible.ca>
@@ -85,8 +85,6 @@ void	tegra_pmc_power(u_int, bool);
 void	tegra_pmc_remove_clamping(u_int);
 void	tegra_pmc_hdmi_enable(void);
 
-psize_t	tegra_mc_memsize(void);
-
 uint32_t tegra_fuse_read(u_int);
 
 void	tegra_xusbpad_sata_enable(void);

Index: src/sys/arch/evbarm/tegra/tegra_machdep.c
diff -u src/sys/arch/evbarm/tegra/tegra_machdep.c:1.38 src/sys/arch/evbarm/tegra/tegra_machdep.c:1.39
--- src/sys/arch/evbarm/tegra/tegra_machdep.c:1.38	Sat Mar 26 09:07:31 2016
+++ src/sys/arch/evbarm/tegra/tegra_machdep.c	Fri Apr 21 21:13:04 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: tegra_machdep.c,v 1.38 2016/03/26 09:07:31 skrll Exp $ */
+/* $NetBSD: tegra_machdep.c,v 1.39 2017/04/21 21:13:04 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2015 Jared D. McNeill <jmcne...@invisible.ca>
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tegra_machdep.c,v 1.38 2016/03/26 09:07:31 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tegra_machdep.c,v 1.39 2017/04/21 21:13:04 jmcneill Exp $");
 
 #include "opt_tegra.h"
 #include "opt_machdep.h"
@@ -157,7 +157,6 @@ static const struct pmap_devmap devmap[]
 
 #ifdef PMAP_NEED_ALLOC_POOLPAGE
 static struct boot_physmem bp_lowgig = {
-	.bp_start = TEGRA_EXTMEM_BASE / NBPG,
 	.bp_pages = (KERNEL_VM_BASE - KERNEL_BASE) / NBPG,
 	.bp_freelist = VM_FREELIST_ISADMA,
 	.bp_flags = 0
@@ -232,6 +231,8 @@ extern void cortex_mpstart(void);
 u_int
 initarm(void *arg)
 {
+	bus_addr_t memory_addr;
+	bus_size_t memory_size;
 	psize_t ram_size = 0;
 	DPRINT("initarm:");
 
@@ -305,7 +306,15 @@ initarm(void *arg)
 	DPRINTF("KERNEL_BASE=0x%x, KERNEL_VM_BASE=0x%x, KERNEL_VM_BASE - KERNEL_BASE=0x%x, KERNEL_BASE_VOFFSET=0x%x\n",
 		KERNEL_BASE, KERNEL_VM_BASE, KERNEL_VM_BASE - KERNEL_BASE, KERNEL_BASE_VOFFSET);
 
-	ram_size = tegra_mc_memsize();
+	const int memory = OF_finddevice("/memory");
+	if (fdtbus_get_reg(memory, 0, &memory_addr, &memory_size) != 0)
+		panic("Cannot determine memory size");
+
+	DPRINTF("FDT memory node = %d, addr %llx, size %llu\n",
+	    memory, (unsigned long long)memory_addr,
+	    (unsigned long long)memory_size);
+
+	ram_size = memory_size;
 
 #ifdef __HAVE_MM_MD_DIRECT_MAPPED_PHYS
 	const bool mapallmem_p = true;
@@ -338,7 +347,7 @@ initarm(void *arg)
 
 	/* Fake bootconfig structure for the benefit of pmap.c. */
 	bootconfig.dramblocks = 1;
-	bootconfig.dram[0].address = TEGRA_EXTMEM_BASE; /* DDR PHY addr */
+	bootconfig.dram[0].address = memory_addr;
 	bootconfig.dram[0].pages = ram_size / PAGE_SIZE;
 
 	KASSERT((armreg_pfr1_read() & ARM_PFR1_SEC_MASK) != 0);
@@ -361,6 +370,7 @@ initarm(void *arg)
 	evbarm_device_register = tegra_device_register;
 
 #ifdef PMAP_NEED_ALLOC_POOLPAGE
+	bp_lowgig.bp_start = memory_addr / NBPG;
 	if (atop(ram_size) > bp_lowgig.bp_pages) {
 		arm_poolpage_vmfreelist = bp_lowgig.bp_freelist;
 		return initarm_common(KERNEL_VM_BASE, KERNEL_VM_SIZE,

Reply via email to