Author: myles
Date: 2009-01-09 15:17:06 +0100 (Fri, 09 Jan 2009)
New Revision: 1112

Modified:
   coreboot-v3/device/device.c
Log:
This patch adds the domain's resources and all links to the tree traversal for
constraining resources.  Build and boot tested on qemu, serengeti, and
alix2c3.

Signed-off-by: Myles Watson <[email protected]>
Acked-by: Ward Vandewege <[email protected]>


Modified: coreboot-v3/device/device.c
===================================================================
--- coreboot-v3/device/device.c 2009-01-08 20:07:21 UTC (rev 1111)
+++ coreboot-v3/device/device.c 2009-01-09 14:17:06 UTC (rev 1112)
@@ -705,41 +705,42 @@
 #define MEM_TYPE (IORESOURCE_MEM)
 #define IO_TYPE (IORESOURCE_IO)
 
-       /* Descend into every child and look for fixed resources. */
-       for (child=dev->link[0].children; child; child = child->sibling) {
-               constrain_resources(child, limits);
-               for (i = 0; i<child->resources; i++) {
-                       res = &child->resource[i];
-                       if (!(res->flags & IORESOURCE_FIXED))
-                               continue;
+       /* Constrain limits based on the fixed resources of this device. */
+       for (i = 0; i<dev->resources; i++) {
+               res = &dev->resource[i];
+               if (!(res->flags & IORESOURCE_FIXED))
+                       continue;
 
-                       /* PREFETCH, MEM, or I/O - skip any others. */
-                       if ((res->flags & MEM_MASK) == PREF_TYPE)
-                               lim = &limits->pref;
-                       else if ((res->flags & MEM_MASK) == MEM_TYPE)
-                               lim = &limits->mem;
-                       else if ((res->flags & IO_MASK) == IO_TYPE)
-                               lim = &limits->io;
-                       else
-                               continue;
+               /* PREFETCH, MEM, or I/O - skip any others. */
+               if ((res->flags & MEM_MASK) == PREF_TYPE)
+                       lim = &limits->pref;
+               else if ((res->flags & MEM_MASK) == MEM_TYPE)
+                       lim = &limits->mem;
+               else if ((res->flags & IO_MASK) == IO_TYPE)
+                       lim = &limits->io;
+               else
+                       continue;
 
-                       /* Is it already outside the limits? */
-                       if (res->size &&
-                           (((res->base + res->size -1) < lim->base) ||
-                            (res->base > lim->limit)))
-                               continue;
+               /* Is it already outside the limits? */
+               if (res->size && (((res->base + res->size -1) < lim->base) ||
+                                 (res->base > lim->limit)))
+                       continue;
 
-                       /* Choose to be above or below fixed resources.  This
-                        * check is signed so that "negative" amounts of space
-                        * are handled correctly.
-                        */
-                       if ((s64)(lim->limit - (res->base + res->size -1)) >
-                           (s64)(res->base - lim->base))
-                               lim->base = res->base + res->size;
-                       else
-                               lim->limit = res->base -1;
-               }
+               /* Choose to be above or below fixed resources.  This
+                * check is signed so that "negative" amounts of space
+                * are handled correctly.
+                */
+               if ((s64)(lim->limit - (res->base + res->size -1)) >
+                   (s64)(res->base - lim->base))
+                       lim->base = res->base + res->size;
+               else
+                       lim->limit = res->base -1;
        }
+
+       /* Descend into every child and look for fixed resources. */
+       for (i = 0; i< dev->links; i++)
+               for (child=dev->link[i].children; child; child = child->sibling)
+                       constrain_resources(child, limits);
 }
 
 static void avoid_fixed_resources(struct device *dev)


--
coreboot mailing list: [email protected]
http://www.coreboot.org/mailman/listinfo/coreboot

Reply via email to