diff options
author | Simon Glass <sjg@chromium.org> | 2017-07-25 08:29:55 -0600 |
---|---|---|
committer | Simon Glass <sjg@chromium.org> | 2017-07-28 12:02:47 -0600 |
commit | dcf988525f6e2045b9122ba7c3bf6a9bf44f146e (patch) | |
tree | 066e1e3e7a3f2aaceb5e407f85cf2a39ff1b486d /drivers/core/ofnode.c | |
parent | c61d0009feb966e0e93254a8c435a1889085e6b8 (diff) | |
download | u-boot-dcf988525f6e2045b9122ba7c3bf6a9bf44f146e.tar.gz |
dm: core: Add ofnode_read_resource()
We sometimes need to read a resource from an arbitrary node. In any case
for consistency we should not put the live-tree switching code in
a dev_read_...() function. Update this to suit.
Signed-off-by: Simon Glass <sjg@chromium.org>
Tested-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
Tested-on: Beaver, Jetson-TK1
Tested-by: Stephen Warren <swarren@nvidia.com>
Diffstat (limited to 'drivers/core/ofnode.c')
-rw-r--r-- | drivers/core/ofnode.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/drivers/core/ofnode.c b/drivers/core/ofnode.c index fd068b06ef..e4b2a85f19 100644 --- a/drivers/core/ofnode.c +++ b/drivers/core/ofnode.c @@ -14,6 +14,7 @@ #include <dm/of_addr.h> #include <dm/ofnode.h> #include <linux/err.h> +#include <linux/ioport.h> int ofnode_read_u32(ofnode node, const char *propname, u32 *outp) { @@ -593,3 +594,23 @@ bool ofnode_pre_reloc(ofnode node) return false; } + +int ofnode_read_resource(ofnode node, uint index, struct resource *res) +{ + if (ofnode_is_np(node)) { + return of_address_to_resource(ofnode_to_np(node), index, res); + } else { + struct fdt_resource fres; + int ret; + + ret = fdt_get_resource(gd->fdt_blob, ofnode_to_offset(node), + "reg", index, &fres); + if (ret < 0) + return -EINVAL; + memset(res, '\0', sizeof(*res)); + res->start = fres.start; + res->end = fres.end; + + return 0; + } +} |