summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorian <ian@FreeBSD.org>2015-05-24 15:29:56 +0000
committerian <ian@FreeBSD.org>2015-05-24 15:29:56 +0000
commite7adedb422865fbd63ed6f10518eb0a9e16abe7b (patch)
treebdb89dc58a5aaf5283713380e57b05b9379bd254
parentbc7a934b2f608b2cafea753820dc7736ae469a83 (diff)
downloadFreeBSD-src-e7adedb422865fbd63ed6f10518eb0a9e16abe7b.zip
FreeBSD-src-e7adedb422865fbd63ed6f10518eb0a9e16abe7b.tar.gz
MFC r280194:
Fix fdt_platform_fixups() mem region handling.
-rw-r--r--sys/boot/uboot/fdt/uboot_fdt.c18
-rw-r--r--sys/boot/uboot/lib/glue.h2
2 files changed, 9 insertions, 11 deletions
diff --git a/sys/boot/uboot/fdt/uboot_fdt.c b/sys/boot/uboot/fdt/uboot_fdt.c
index 3765242..86f46e9 100644
--- a/sys/boot/uboot/fdt/uboot_fdt.c
+++ b/sys/boot/uboot/fdt/uboot_fdt.c
@@ -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);
}
diff --git a/sys/boot/uboot/lib/glue.h b/sys/boot/uboot/lib/glue.h
index 1504c93..2e818ba 100644
--- a/sys/boot/uboot/lib/glue.h
+++ b/sys/boot/uboot/lib/glue.h
@@ -40,7 +40,7 @@ void *syscall_ptr;
int api_search_sig(struct api_signature **sig);
-#define UB_MAX_MR 5 /* max mem regions number */
+#define UB_MAX_MR 16 /* max mem regions number */
#define UB_MAX_DEV 6 /* max devices number */
/*
OpenPOWER on IntegriCloud