Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 10 Mar 2015 16:01:43 +0000 (UTC)
From:      Nathan Whitehorn <nwhitehorn@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r279853 - head/sys/powerpc/powermac
Message-ID:  <201503101601.t2AG1heb098663@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: nwhitehorn
Date: Tue Mar 10 16:01:43 2015
New Revision: 279853
URL: https://svnweb.freebsd.org/changeset/base/279853

Log:
  Allow PowerMac systems to be booted from an FDT as well as Open Firmware.
  This is not complete yet: the gem(4) interface on my laptop seems to
  disappear from the PCI bus as a result of quiescing Open Firmware in the
  boot loader.

Modified:
  head/sys/powerpc/powermac/platform_powermac.c

Modified: head/sys/powerpc/powermac/platform_powermac.c
==============================================================================
--- head/sys/powerpc/powermac/platform_powermac.c	Tue Mar 10 14:55:05 2015	(r279852)
+++ head/sys/powerpc/powermac/platform_powermac.c	Tue Mar 10 16:01:43 2015	(r279853)
@@ -126,6 +126,8 @@ powermac_mem_regions(platform_t plat, st
 	int physacells = 1;
 
 	memory = OF_finddevice("/memory");
+	if (memory == -1)
+		memory = OF_finddevice("/memory@0");
 
 	/* "reg" has variable #address-cells, but #size-cells is always 1 */
 	OF_getprop(OF_parent(memory), "#address-cells", &physacells,
@@ -154,23 +156,32 @@ powermac_mem_regions(platform_t plat, st
 	/* "available" always has #address-cells = 1 */
 	propsize = OF_getprop(memory, "available", memoryprop,
 	    sizeof(memoryprop));
-	propsize /= sizeof(cell_t);
-	for (i = 0, j = 0; i < propsize; i += 2, j++) {
-		avail[j].mr_start = memoryprop[i];
-		avail[j].mr_size = memoryprop[i + 1];
-	}
+	if (propsize <= 0) {
+		for (i = 0; i < *physsz; i++) {
+			avail[i].mr_start = phys[i].mr_start;
+			avail[i].mr_size = phys[i].mr_size;
+		}
+
+		*availsz = *physsz;
+	} else {
+		propsize /= sizeof(cell_t);
+		for (i = 0, j = 0; i < propsize; i += 2, j++) {
+			avail[j].mr_start = memoryprop[i];
+			avail[j].mr_size = memoryprop[i + 1];
+		}
 
 #ifdef __powerpc64__
-	/* Add in regions above 4 GB to the available list */
-	for (i = 0; i < *physsz; i++) {
-		if (phys[i].mr_start > BUS_SPACE_MAXADDR_32BIT) {
-			avail[j].mr_start = phys[i].mr_start;
-			avail[j].mr_size = phys[i].mr_size;
-			j++;
+		/* Add in regions above 4 GB to the available list */
+		for (i = 0; i < *physsz; i++) {
+			if (phys[i].mr_start > BUS_SPACE_MAXADDR_32BIT) {
+				avail[j].mr_start = phys[i].mr_start;
+				avail[j].mr_size = phys[i].mr_size;
+				j++;
+			}
 		}
-	}
 #endif
-	*availsz = j;
+		*availsz = j;
+	}
 }
 
 static int



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201503101601.t2AG1heb098663>