core: ofnode: Add ofnode_get_addr_size_index

Add ofnode_get_addr_size_index function to fetch the address
and size of the reg space based on index.

Signed-off-by: Keerthy <j-keerthy@ti.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Keerthy 2019-04-24 17:19:53 +05:30 committed by Simon Glass
parent 3a9a62a18e
commit e679d03b08
2 changed files with 24 additions and 3 deletions

View File

@ -251,7 +251,7 @@ int ofnode_read_size(ofnode node, const char *propname)
return -EINVAL; return -EINVAL;
} }
fdt_addr_t ofnode_get_addr_index(ofnode node, int index) fdt_addr_t ofnode_get_addr_size_index(ofnode node, int index, fdt_size_t *size)
{ {
int na, ns; int na, ns;
@ -260,7 +260,7 @@ fdt_addr_t ofnode_get_addr_index(ofnode node, int index)
uint flags; uint flags;
prop_val = of_get_address(ofnode_to_np(node), index, prop_val = of_get_address(ofnode_to_np(node), index,
NULL, &flags); (u64 *)size, &flags);
if (!prop_val) if (!prop_val)
return FDT_ADDR_T_NONE; return FDT_ADDR_T_NONE;
@ -277,12 +277,19 @@ fdt_addr_t ofnode_get_addr_index(ofnode node, int index)
ns = ofnode_read_simple_size_cells(ofnode_get_parent(node)); ns = ofnode_read_simple_size_cells(ofnode_get_parent(node));
return fdtdec_get_addr_size_fixed(gd->fdt_blob, return fdtdec_get_addr_size_fixed(gd->fdt_blob,
ofnode_to_offset(node), "reg", ofnode_to_offset(node), "reg",
index, na, ns, NULL, true); index, na, ns, size, true);
} }
return FDT_ADDR_T_NONE; return FDT_ADDR_T_NONE;
} }
fdt_addr_t ofnode_get_addr_index(ofnode node, int index)
{
fdt_size_t size;
return ofnode_get_addr_size_index(node, index, &size);
}
fdt_addr_t ofnode_get_addr(ofnode node) fdt_addr_t ofnode_get_addr(ofnode node)
{ {
return ofnode_get_addr_index(node, 0); return ofnode_get_addr_index(node, 0);

View File

@ -354,6 +354,20 @@ ofnode ofnode_get_by_phandle(uint phandle);
*/ */
int ofnode_read_size(ofnode node, const char *propname); int ofnode_read_size(ofnode node, const char *propname);
/**
* ofnode_get_addr_size_index() - get an address/size from a node
* based on index
*
* This reads the register address/size from a node based on index
*
* @node: node to read from
* @index: Index of address to read (0 for first)
* @size: Pointer to size of the address
* @return address, or FDT_ADDR_T_NONE if not present or invalid
*/
phys_addr_t ofnode_get_addr_size_index(ofnode node, int index,
fdt_size_t *size);
/** /**
* ofnode_get_addr_index() - get an address from a node * ofnode_get_addr_index() - get an address from a node
* *