diff options
| author | Simon Glass <sjg@chromium.org> | 2013-03-19 04:58:51 +0000 | 
|---|---|---|
| committer | Simon Glass <sjg@chromium.org> | 2013-03-19 08:45:36 -0700 | 
| commit | 4397a2a80baefadc7454c70282c14d2af16ffe30 (patch) | |
| tree | c7c7382e91c3cc808ce9f381ed73b4f765469f1f /lib/fdtdec.c | |
| parent | 0ce033d2582129243aca10d3072a221386bbba44 (diff) | |
| download | olio-uboot-2014.01-4397a2a80baefadc7454c70282c14d2af16ffe30.tar.xz olio-uboot-2014.01-4397a2a80baefadc7454c70282c14d2af16ffe30.zip | |
fdt: Add fdtdec_get_addr_size() to read reg properties
It is common to have a "reg = <address size>" property in the FDT.
Add a function to handle this, similar to the existing
fdtdec_get_addr();
Signed-off-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'lib/fdtdec.c')
| -rw-r--r-- | lib/fdtdec.c | 25 | 
1 files changed, 20 insertions, 5 deletions
| diff --git a/lib/fdtdec.c b/lib/fdtdec.c index 43f29f5c6..cffba94bf 100644 --- a/lib/fdtdec.c +++ b/lib/fdtdec.c @@ -68,25 +68,40 @@ const char *fdtdec_get_compatible(enum fdt_compat_id id)  	return compat_names[id];  } -fdt_addr_t fdtdec_get_addr(const void *blob, int node, -		const char *prop_name) +fdt_addr_t fdtdec_get_addr_size(const void *blob, int node, +		const char *prop_name, fdt_size_t *sizep)  {  	const fdt_addr_t *cell;  	int len;  	debug("%s: %s: ", __func__, prop_name);  	cell = fdt_getprop(blob, node, prop_name, &len); -	if (cell && (len == sizeof(fdt_addr_t) || -			len == sizeof(fdt_addr_t) * 2)) { +	if (cell && ((!sizep && len == sizeof(fdt_addr_t)) || +		     len == sizeof(fdt_addr_t) * 2)) {  		fdt_addr_t addr = fdt_addr_to_cpu(*cell); +		if (sizep) { +			const fdt_size_t *size; -		debug("%p\n", (void *)addr); +			size = (fdt_size_t *)((char *)cell + +					sizeof(fdt_addr_t)); +			*sizep = fdt_size_to_cpu(*size); +			debug("addr=%p, size=%p\n", (void *)addr, +			      (void *)*sizep); +		} else { +			debug("%p\n", (void *)addr); +		}  		return addr;  	}  	debug("(not found)\n");  	return FDT_ADDR_T_NONE;  } +fdt_addr_t fdtdec_get_addr(const void *blob, int node, +		const char *prop_name) +{ +	return fdtdec_get_addr_size(blob, node, prop_name, NULL); +} +  s32 fdtdec_get_int(const void *blob, int node, const char *prop_name,  		s32 default_val)  { |