]> xenbits.xensource.com Git - people/julieng/freebsd.git/commitdiff
Fix fdt_platform_fixups() mem region handling. It turns out u-boot puts
authorian <ian@FreeBSD.org>
Tue, 17 Mar 2015 21:15:24 +0000 (21:15 +0000)
committerian <ian@FreeBSD.org>
Tue, 17 Mar 2015 21:15:24 +0000 (21:15 +0000)
several types of data into the mem-info array (DRAM, SRAM, flash).  We
need to extract just the DRAM entries for translation into fdt memory
properties.

Also, increase the number of regions we can handle from 5 to 16.

Submitted by: Michal Meloun

sys/boot/uboot/fdt/uboot_fdt.c
sys/boot/uboot/lib/glue.h

index 37652426e6451d9a6a2e5acec58cd6c7e5ba58bd..86f46e9c95ec5c8133dcf41a87556f697d2b6ebb 100644 (file)
@@ -88,7 +88,7 @@ fdt_platform_load_dtb(void)
 void
 fdt_platform_fixups(void)
 {
-       struct fdt_mem_region regions[3];
+       static struct fdt_mem_region regions[UB_MAX_MR];
        const char *env, *str;
        char *end, *ethstr;
        int eth_no, i, len, n;
@@ -165,17 +165,15 @@ fdt_platform_fixups(void)
        /* Modify cpu(s) and bus clock frequenties in /cpus node [Hz] */
        fdt_fixup_cpubusfreqs(si->clk_cpu, si->clk_bus);
 
-       /* Copy the data into a useful form */
-       for (i = 0; i < si->mr_no; i++) {
-               if (i > nitems(regions)) {
-                       i = nitems(regions);
-                       break;
+       /* Extract the DRAM regions into fdt_mem_region format. */
+       for (i = 0, n = 0; i < si->mr_no && n < nitems(regions); i++) {
+               if (si->mr[i].flags == MR_ATTR_DRAM) {
+                       regions[n].start = si->mr[i].start;
+                       regions[n].size = si->mr[i].size;
+                       n++;
                }
-
-               regions[i].start = si->mr[i].start;
-               regions[i].size = si->mr[i].size;
        }
 
        /* Fixup memory regions */
-       fdt_fixup_memory(regions, i);
+       fdt_fixup_memory(regions, n);
 }
index 1504c9391614d7b248fba42b813586e3f22e7014..2e818ba6193a98f6500ed2a5dfaf6d93f321466d 100644 (file)
@@ -40,7 +40,7 @@ void *syscall_ptr;
 
 int api_search_sig(struct api_signature **sig);
 
-#define        UB_MAX_MR                     /* max mem regions number */
+#define        UB_MAX_MR       16              /* max mem regions number */
 #define        UB_MAX_DEV      6               /* max devices number */
 
 /*