dm: core: Add address operations on device tree references

Add functions to add addresses in the device tree using ofnode references.

Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Simon Glass 2017-05-18 20:09:01 -06:00
parent ec002119cf
commit bed774969c
2 changed files with 49 additions and 1 deletions

View File

@ -11,6 +11,7 @@
#include <fdt_support.h>
#include <libfdt.h>
#include <dm/of_access.h>
#include <dm/of_addr.h>
#include <dm/ofnode.h>
#include <linux/err.h>
@ -195,6 +196,32 @@ int ofnode_read_size(ofnode node, const char *propname)
return -EINVAL;
}
fdt_addr_t ofnode_get_addr_index(ofnode node, int index)
{
if (ofnode_is_np(node)) {
const __be32 *prop_val;
uint flags;
u64 size;
prop_val = of_get_address(
(struct device_node *)ofnode_to_np(node), index,
&size, &flags);
if (!prop_val)
return FDT_ADDR_T_NONE;
return be32_to_cpup(prop_val);
} else {
return fdt_get_base_address(gd->fdt_blob,
ofnode_to_offset(node));
}
return FDT_ADDR_T_NONE;
}
fdt_addr_t ofnode_get_addr(ofnode node)
{
return ofnode_get_addr_index(node, 0);
}
int ofnode_stringlist_search(ofnode node, const char *property,
const char *string)
{

View File

@ -245,7 +245,7 @@ int ofnode_read_s32_default(ofnode node, const char *propname, s32 def);
const char *ofnode_read_string(ofnode node, const char *propname);
/**
* ofnode_read_u32_array - Find and read an array of 32 bit integers
* ofnode_read_u32_array() - Find and read an array of 32 bit integers
*
* @node: valid node reference to read property from
* @propname: name of the property to read
@ -316,6 +316,27 @@ const char *ofnode_get_name(ofnode node);
*/
int ofnode_read_size(ofnode node, const char *propname);
/**
* ofnode_get_addr_index() - get an address from a node
*
* This reads the register address from a node
*
* @node: node to read from
* @index: Index of address to read (0 for first)
* @return address, or FDT_ADDR_T_NONE if not present or invalid
*/
phys_addr_t ofnode_get_addr_index(ofnode node, int index);
/**
* ofnode_get_addr() - get an address from a node
*
* This reads the register address from a node
*
* @node: node to read from
* @return address, or FDT_ADDR_T_NONE if not present or invalid
*/
phys_addr_t ofnode_get_addr(ofnode node);
/**
* ofnode_stringlist_search() - find a string in a string list and return index
*