Author: jhibbits
Date: Fri Nov 17 04:10:52 2017
New Revision: 325926
URL: https://svnweb.freebsd.org/changeset/base/325926

Log:
  Stop special casing 32-bit AIM in memory parsing
  
  There's no need to special case 32-bit AIM to short circuit processing.
  Some AIM CPUs can handle 36 bit addresses, and 64-bit CPUs can run 32-bit
  OSes, so this will allow us to expand for that in the future if we desire.

Modified:
  head/sys/powerpc/ofw/ofw_machdep.c

Modified: head/sys/powerpc/ofw/ofw_machdep.c
==============================================================================
--- head/sys/powerpc/ofw/ofw_machdep.c  Fri Nov 17 02:59:28 2017        
(r325925)
+++ head/sys/powerpc/ofw/ofw_machdep.c  Fri Nov 17 04:10:52 2017        
(r325926)
@@ -184,14 +184,6 @@ parse_ofw_memory(phandle_t node, const char *prop, str
        i = 0;
        j = 0;
        while (i < sz/sizeof(cell_t)) {
-             #if !defined(__powerpc64__) && !defined(BOOKE)
-               /* On 32-bit PPC (OEA), ignore regions starting above 4 GB */
-               if (address_cells > 1 && OFmem[i] > 0) {
-                       i += address_cells + size_cells;
-                       continue;
-               }
-             #endif
-
                output[j].mr_start = OFmem[i++];
                if (address_cells == 2) {
                        output[j].mr_start <<= 32;
@@ -204,19 +196,20 @@ parse_ofw_memory(phandle_t node, const char *prop, str
                        output[j].mr_size += OFmem[i++];
                }
 
-             #if !defined(__powerpc64__) && !defined(BOOKE)
-               /* Book-E can support 36-bit addresses. */
+               if (output[j].mr_start > BUS_SPACE_MAXADDR)
+                       continue;
+
                /*
-                * Check for memory regions extending above 32-bit
-                * memory space, and restrict them to stay there.
+                * Constrain memory to that which we can access.
+                * 32-bit AIM can only reference 32 bits of address currently,
+                * but Book-E can access 36 bits.
                 */
                if (((uint64_t)output[j].mr_start +
-                   (uint64_t)output[j].mr_size) >
-                   BUS_SPACE_MAXADDR_32BIT) {
-                       output[j].mr_size = BUS_SPACE_MAXADDR_32BIT -
-                           output[j].mr_start;
+                   (uint64_t)output[j].mr_size - 1) >
+                   BUS_SPACE_MAXADDR) {
+                       output[j].mr_size = BUS_SPACE_MAXADDR -
+                           output[j].mr_start + 1;
                }
-             #endif
 
                j++;
        }
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to