At present we add a new resource entry for every range entry. But some range
entries refer to configuration regions. To make this work, avoid adding two
regions of the same time. The later ranges will overwrite the earlier
(configuration) ones.

There does not seem to be a way to distinguish the configuration ranges
other than by ordering.

Signed-off-by: Simon Glass <[email protected]>
---

 drivers/pci/pci-uclass.c | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/drivers/pci/pci-uclass.c b/drivers/pci/pci-uclass.c
index 6dda056..a59e468 100644
--- a/drivers/pci/pci-uclass.c
+++ b/drivers/pci/pci-uclass.c
@@ -698,6 +698,7 @@ static int decode_regions(struct pci_controller *hose, 
const void *blob,
                int space_code;
                u32 flags;
                int type;
+               int pos;
 
                if (len < cells_per_record)
                        break;
@@ -720,9 +721,15 @@ static int decode_regions(struct pci_controller *hose, 
const void *blob,
                } else {
                        continue;
                }
-               debug(" - type=%d\n", type);
-               pci_set_region(hose->regions + hose->region_count++, pci_addr,
-                              addr, size, type);
+               pos = -1;
+               for (i = 0; i < hose->region_count; i++) {
+                       if (hose->regions[i].flags == type)
+                               pos = i;
+               }
+               if (pos == -1)
+                       pos = hose->region_count++;
+               debug(" - type=%d, pos=%d\n", type, pos);
+               pci_set_region(hose->regions + pos, pci_addr, addr, size, type);
        }
 
        /* Add a region for our local memory */
-- 
2.6.0.rc2.230.g3dd15c0

_______________________________________________
U-Boot mailing list
[email protected]
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to