diff options
Diffstat (limited to 'common/image-fdt.c')
| -rw-r--r-- | common/image-fdt.c | 23 | 
1 files changed, 15 insertions, 8 deletions
| diff --git a/common/image-fdt.c b/common/image-fdt.c index d50e1ba3feb..06dce92a28a 100644 --- a/common/image-fdt.c +++ b/common/image-fdt.c @@ -75,18 +75,20 @@ static const image_header_t *image_get_fdt(ulong fdt_addr)  #endif  static void boot_fdt_reserve_region(struct lmb *lmb, uint64_t addr, -				    uint64_t size) +				    uint64_t size, enum lmb_flags flags)  {  	long ret; -	ret = lmb_reserve(lmb, addr, size); +	ret = lmb_reserve_flags(lmb, addr, size, flags);  	if (ret >= 0) { -		debug("   reserving fdt memory region: addr=%llx size=%llx\n", -		      (unsigned long long)addr, (unsigned long long)size); +		debug("   reserving fdt memory region: addr=%llx size=%llx flags=%x\n", +		      (unsigned long long)addr, +		      (unsigned long long)size, flags);  	} else {  		puts("ERROR: reserving fdt memory region failed "); -		printf("(addr=%llx size=%llx)\n", -		       (unsigned long long)addr, (unsigned long long)size); +		printf("(addr=%llx size=%llx flags=%x)\n", +		       (unsigned long long)addr, +		       (unsigned long long)size, flags);  	}  } @@ -106,6 +108,7 @@ void boot_fdt_add_mem_rsv_regions(struct lmb *lmb, void *fdt_blob)  	int i, total, ret;  	int nodeoffset, subnode;  	struct fdt_resource res; +	enum lmb_flags flags;  	if (fdt_check_header(fdt_blob) != 0)  		return; @@ -115,7 +118,7 @@ void boot_fdt_add_mem_rsv_regions(struct lmb *lmb, void *fdt_blob)  	for (i = 0; i < total; i++) {  		if (fdt_get_mem_rsv(fdt_blob, i, &addr, &size) != 0)  			continue; -		boot_fdt_reserve_region(lmb, addr, size); +		boot_fdt_reserve_region(lmb, addr, size, LMB_NONE);  	}  	/* process reserved-memory */ @@ -127,9 +130,13 @@ void boot_fdt_add_mem_rsv_regions(struct lmb *lmb, void *fdt_blob)  			ret = fdt_get_resource(fdt_blob, subnode, "reg", 0,  					       &res);  			if (!ret && fdtdec_get_is_enabled(fdt_blob, subnode)) { +				flags = LMB_NONE; +				if (fdtdec_get_bool(fdt_blob, subnode, +						    "no-map")) +					flags = LMB_NOMAP;  				addr = res.start;  				size = res.end - res.start + 1; -				boot_fdt_reserve_region(lmb, addr, size); +				boot_fdt_reserve_region(lmb, addr, size, flags);  			}  			subnode = fdt_next_subnode(fdt_blob, subnode); | 
