aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/of/base.c
diff options
context:
space:
mode:
authorJeremy Kerr <jeremy.kerr@canonical.com>2010-01-30 03:45:26 -0500
committerGrant Likely <grant.likely@secretlab.ca>2010-02-09 10:34:10 -0500
commit337148812f97368a8ec4a69f1691e4c5ce3af494 (patch)
tree3fa2e5477c657cb2ebc40db9182d0989a5d60e13 /drivers/of/base.c
parent2e89e685a8fd0e8334de967739d11e2e28c1a4dd (diff)
of: assume big-endian properties, adding conversions where necessary
Properties in the device tree are specified as big-endian. At present, the only platforms to support device trees are also big-endian, so we've been acessing the properties as raw values. We'd like to add device tree support to little-endian platforms too, so add endian conversion to the sites where we access property values in the common of code. Compiled on powerpc (ppc44x_defconfig & ppc64_defconfig) and arm (fdt support only for now). Signed-off-by: Jeremy Kerr <jeremy.kerr@canonical.com> Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
Diffstat (limited to 'drivers/of/base.c')
-rw-r--r--drivers/of/base.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/drivers/of/base.c b/drivers/of/base.c
index 524645ab42a4..873479a21c80 100644
--- a/drivers/of/base.c
+++ b/drivers/of/base.c
@@ -38,7 +38,7 @@ int of_n_addr_cells(struct device_node *np)
38 np = np->parent; 38 np = np->parent;
39 ip = of_get_property(np, "#address-cells", NULL); 39 ip = of_get_property(np, "#address-cells", NULL);
40 if (ip) 40 if (ip)
41 return *ip; 41 return be32_to_cpup(ip);
42 } while (np->parent); 42 } while (np->parent);
43 /* No #address-cells property for the root node */ 43 /* No #address-cells property for the root node */
44 return OF_ROOT_NODE_ADDR_CELLS_DEFAULT; 44 return OF_ROOT_NODE_ADDR_CELLS_DEFAULT;
@@ -54,7 +54,7 @@ int of_n_size_cells(struct device_node *np)
54 np = np->parent; 54 np = np->parent;
55 ip = of_get_property(np, "#size-cells", NULL); 55 ip = of_get_property(np, "#size-cells", NULL);
56 if (ip) 56 if (ip)
57 return *ip; 57 return be32_to_cpup(ip);
58 } while (np->parent); 58 } while (np->parent);
59 /* No #size-cells property for the root node */ 59 /* No #size-cells property for the root node */
60 return OF_ROOT_NODE_SIZE_CELLS_DEFAULT; 60 return OF_ROOT_NODE_SIZE_CELLS_DEFAULT;
@@ -696,8 +696,8 @@ int of_parse_phandles_with_args(struct device_node *np, const char *list_name,
696 const void **out_args) 696 const void **out_args)
697{ 697{
698 int ret = -EINVAL; 698 int ret = -EINVAL;
699 const u32 *list; 699 const __be32 *list;
700 const u32 *list_end; 700 const __be32 *list_end;
701 int size; 701 int size;
702 int cur_index = 0; 702 int cur_index = 0;
703 struct device_node *node = NULL; 703 struct device_node *node = NULL;
@@ -711,7 +711,7 @@ int of_parse_phandles_with_args(struct device_node *np, const char *list_name,
711 list_end = list + size / sizeof(*list); 711 list_end = list + size / sizeof(*list);
712 712
713 while (list < list_end) { 713 while (list < list_end) {
714 const u32 *cells; 714 const __be32 *cells;
715 const phandle *phandle; 715 const phandle *phandle;
716 716
717 phandle = list++; 717 phandle = list++;
@@ -735,7 +735,7 @@ int of_parse_phandles_with_args(struct device_node *np, const char *list_name,
735 goto err1; 735 goto err1;
736 } 736 }
737 737
738 list += *cells; 738 list += be32_to_cpup(cells);
739 if (list > list_end) { 739 if (list > list_end) {
740 pr_debug("%s: insufficient arguments length\n", 740 pr_debug("%s: insufficient arguments length\n",
741 np->full_name); 741 np->full_name);