diff options
author | Kevin Cernekee <cernekee@gmail.com> | 2015-04-09 13:05:15 -0700 |
---|---|---|
committer | Rob Herring <robh@kernel.org> | 2015-04-14 19:35:44 -0500 |
commit | cc7837867a559feba70fdf68eb53c24a84e3712f (patch) | |
tree | 109ba477dbe16219c56245b46e0908d78aa4a583 | |
parent | 37786c7fee40771d13901de129af7e084ed48b55 (diff) | |
download | op-kernel-dev-cc7837867a559feba70fdf68eb53c24a84e3712f.zip op-kernel-dev-cc7837867a559feba70fdf68eb53c24a84e3712f.tar.gz |
of/fdt: Add endianness helper function for early init code
Provide a libfdt-based equivalent for of_device_is_big_endian(), suitable
for use in the early_init_* functions.
Signed-off-by: Kevin Cernekee <cernekee@gmail.com>
Reviewed-by: Peter Hurley <peter@hurleysoftware.com>
Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Rob Herring <robh@kernel.org>
-rw-r--r-- | drivers/of/fdt.c | 19 | ||||
-rw-r--r-- | include/linux/of_fdt.h | 2 |
2 files changed, 21 insertions, 0 deletions
diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c index 34bdc4d..4b15aa1 100644 --- a/drivers/of/fdt.c +++ b/drivers/of/fdt.c @@ -109,6 +109,25 @@ int of_fdt_is_compatible(const void *blob, } /** + * of_fdt_is_big_endian - Return true if given node needs BE MMIO accesses + * @blob: A device tree blob + * @node: node to test + * + * Returns true if the node has a "big-endian" property, or if the kernel + * was compiled for BE *and* the node has a "native-endian" property. + * Returns false otherwise. + */ +bool of_fdt_is_big_endian(const void *blob, unsigned long node) +{ + if (fdt_getprop(blob, node, "big-endian", NULL)) + return true; + if (IS_ENABLED(CONFIG_CPU_BIG_ENDIAN) && + fdt_getprop(blob, node, "native-endian", NULL)) + return true; + return false; +} + +/** * of_fdt_match - Return true if node matches a list of compatible values */ int of_fdt_match(const void *blob, unsigned long node, diff --git a/include/linux/of_fdt.h b/include/linux/of_fdt.h index 0ff360d..587ee50 100644 --- a/include/linux/of_fdt.h +++ b/include/linux/of_fdt.h @@ -33,6 +33,8 @@ extern void *of_fdt_get_property(const void *blob, extern int of_fdt_is_compatible(const void *blob, unsigned long node, const char *compat); +extern bool of_fdt_is_big_endian(const void *blob, + unsigned long node); extern int of_fdt_match(const void *blob, unsigned long node, const char *const *compat); extern void of_fdt_unflatten_tree(unsigned long *blob, |