of/flattree: Reorder unflatten_dt_node
Move unflatten_dt_node to be grouped with non-__init functions. Signed-off-by: Stephen Neuendorffer <stephen.neuendorffer@xilinx.com> Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
This commit is contained in:
parent
a40d6c4cf1
commit
57d00ecf90
218
drivers/of/fdt.c
218
drivers/of/fdt.c
@ -97,115 +97,6 @@ int of_fdt_is_compatible(struct boot_param_header *blob,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Everything below here references initial_boot_params directly. */
|
|
||||||
int __initdata dt_root_addr_cells;
|
|
||||||
int __initdata dt_root_size_cells;
|
|
||||||
|
|
||||||
struct boot_param_header *initial_boot_params;
|
|
||||||
|
|
||||||
#ifdef CONFIG_OF_EARLY_FLATTREE
|
|
||||||
|
|
||||||
/**
|
|
||||||
* of_scan_flat_dt - scan flattened tree blob and call callback on each.
|
|
||||||
* @it: callback function
|
|
||||||
* @data: context data pointer
|
|
||||||
*
|
|
||||||
* This function is used to scan the flattened device-tree, it is
|
|
||||||
* used to extract the memory information at boot before we can
|
|
||||||
* unflatten the tree
|
|
||||||
*/
|
|
||||||
int __init of_scan_flat_dt(int (*it)(unsigned long node,
|
|
||||||
const char *uname, int depth,
|
|
||||||
void *data),
|
|
||||||
void *data)
|
|
||||||
{
|
|
||||||
unsigned long p = ((unsigned long)initial_boot_params) +
|
|
||||||
be32_to_cpu(initial_boot_params->off_dt_struct);
|
|
||||||
int rc = 0;
|
|
||||||
int depth = -1;
|
|
||||||
|
|
||||||
do {
|
|
||||||
u32 tag = be32_to_cpup((__be32 *)p);
|
|
||||||
char *pathp;
|
|
||||||
|
|
||||||
p += 4;
|
|
||||||
if (tag == OF_DT_END_NODE) {
|
|
||||||
depth--;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (tag == OF_DT_NOP)
|
|
||||||
continue;
|
|
||||||
if (tag == OF_DT_END)
|
|
||||||
break;
|
|
||||||
if (tag == OF_DT_PROP) {
|
|
||||||
u32 sz = be32_to_cpup((__be32 *)p);
|
|
||||||
p += 8;
|
|
||||||
if (be32_to_cpu(initial_boot_params->version) < 0x10)
|
|
||||||
p = ALIGN(p, sz >= 8 ? 8 : 4);
|
|
||||||
p += sz;
|
|
||||||
p = ALIGN(p, 4);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (tag != OF_DT_BEGIN_NODE) {
|
|
||||||
pr_err("Invalid tag %x in flat device tree!\n", tag);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
depth++;
|
|
||||||
pathp = (char *)p;
|
|
||||||
p = ALIGN(p + strlen(pathp) + 1, 4);
|
|
||||||
if ((*pathp) == '/') {
|
|
||||||
char *lp, *np;
|
|
||||||
for (lp = NULL, np = pathp; *np; np++)
|
|
||||||
if ((*np) == '/')
|
|
||||||
lp = np+1;
|
|
||||||
if (lp != NULL)
|
|
||||||
pathp = lp;
|
|
||||||
}
|
|
||||||
rc = it(p, pathp, depth, data);
|
|
||||||
if (rc != 0)
|
|
||||||
break;
|
|
||||||
} while (1);
|
|
||||||
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* of_get_flat_dt_root - find the root node in the flat blob
|
|
||||||
*/
|
|
||||||
unsigned long __init of_get_flat_dt_root(void)
|
|
||||||
{
|
|
||||||
unsigned long p = ((unsigned long)initial_boot_params) +
|
|
||||||
be32_to_cpu(initial_boot_params->off_dt_struct);
|
|
||||||
|
|
||||||
while (be32_to_cpup((__be32 *)p) == OF_DT_NOP)
|
|
||||||
p += 4;
|
|
||||||
BUG_ON(be32_to_cpup((__be32 *)p) != OF_DT_BEGIN_NODE);
|
|
||||||
p += 4;
|
|
||||||
return ALIGN(p + strlen((char *)p) + 1, 4);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* of_get_flat_dt_prop - Given a node in the flat blob, return the property ptr
|
|
||||||
*
|
|
||||||
* This function can be used within scan_flattened_dt callback to get
|
|
||||||
* access to properties
|
|
||||||
*/
|
|
||||||
void *__init of_get_flat_dt_prop(unsigned long node, const char *name,
|
|
||||||
unsigned long *size)
|
|
||||||
{
|
|
||||||
return of_fdt_get_property(initial_boot_params, node, name, size);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* of_flat_dt_is_compatible - Return true if given node has compat in compatible list
|
|
||||||
* @node: node to test
|
|
||||||
* @compat: compatible string to compare with compatible list.
|
|
||||||
*/
|
|
||||||
int __init of_flat_dt_is_compatible(unsigned long node, const char *compat)
|
|
||||||
{
|
|
||||||
return of_fdt_is_compatible(initial_boot_params, node, compat);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void *unflatten_dt_alloc(unsigned long *mem, unsigned long size,
|
static void *unflatten_dt_alloc(unsigned long *mem, unsigned long size,
|
||||||
unsigned long align)
|
unsigned long align)
|
||||||
{
|
{
|
||||||
@ -421,6 +312,115 @@ unsigned long unflatten_dt_node(struct boot_param_header *blob,
|
|||||||
return mem;
|
return mem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Everything below here references initial_boot_params directly. */
|
||||||
|
int __initdata dt_root_addr_cells;
|
||||||
|
int __initdata dt_root_size_cells;
|
||||||
|
|
||||||
|
struct boot_param_header *initial_boot_params;
|
||||||
|
|
||||||
|
#ifdef CONFIG_OF_EARLY_FLATTREE
|
||||||
|
|
||||||
|
/**
|
||||||
|
* of_scan_flat_dt - scan flattened tree blob and call callback on each.
|
||||||
|
* @it: callback function
|
||||||
|
* @data: context data pointer
|
||||||
|
*
|
||||||
|
* This function is used to scan the flattened device-tree, it is
|
||||||
|
* used to extract the memory information at boot before we can
|
||||||
|
* unflatten the tree
|
||||||
|
*/
|
||||||
|
int __init of_scan_flat_dt(int (*it)(unsigned long node,
|
||||||
|
const char *uname, int depth,
|
||||||
|
void *data),
|
||||||
|
void *data)
|
||||||
|
{
|
||||||
|
unsigned long p = ((unsigned long)initial_boot_params) +
|
||||||
|
be32_to_cpu(initial_boot_params->off_dt_struct);
|
||||||
|
int rc = 0;
|
||||||
|
int depth = -1;
|
||||||
|
|
||||||
|
do {
|
||||||
|
u32 tag = be32_to_cpup((__be32 *)p);
|
||||||
|
char *pathp;
|
||||||
|
|
||||||
|
p += 4;
|
||||||
|
if (tag == OF_DT_END_NODE) {
|
||||||
|
depth--;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (tag == OF_DT_NOP)
|
||||||
|
continue;
|
||||||
|
if (tag == OF_DT_END)
|
||||||
|
break;
|
||||||
|
if (tag == OF_DT_PROP) {
|
||||||
|
u32 sz = be32_to_cpup((__be32 *)p);
|
||||||
|
p += 8;
|
||||||
|
if (be32_to_cpu(initial_boot_params->version) < 0x10)
|
||||||
|
p = ALIGN(p, sz >= 8 ? 8 : 4);
|
||||||
|
p += sz;
|
||||||
|
p = ALIGN(p, 4);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (tag != OF_DT_BEGIN_NODE) {
|
||||||
|
pr_err("Invalid tag %x in flat device tree!\n", tag);
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
depth++;
|
||||||
|
pathp = (char *)p;
|
||||||
|
p = ALIGN(p + strlen(pathp) + 1, 4);
|
||||||
|
if ((*pathp) == '/') {
|
||||||
|
char *lp, *np;
|
||||||
|
for (lp = NULL, np = pathp; *np; np++)
|
||||||
|
if ((*np) == '/')
|
||||||
|
lp = np+1;
|
||||||
|
if (lp != NULL)
|
||||||
|
pathp = lp;
|
||||||
|
}
|
||||||
|
rc = it(p, pathp, depth, data);
|
||||||
|
if (rc != 0)
|
||||||
|
break;
|
||||||
|
} while (1);
|
||||||
|
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* of_get_flat_dt_root - find the root node in the flat blob
|
||||||
|
*/
|
||||||
|
unsigned long __init of_get_flat_dt_root(void)
|
||||||
|
{
|
||||||
|
unsigned long p = ((unsigned long)initial_boot_params) +
|
||||||
|
be32_to_cpu(initial_boot_params->off_dt_struct);
|
||||||
|
|
||||||
|
while (be32_to_cpup((__be32 *)p) == OF_DT_NOP)
|
||||||
|
p += 4;
|
||||||
|
BUG_ON(be32_to_cpup((__be32 *)p) != OF_DT_BEGIN_NODE);
|
||||||
|
p += 4;
|
||||||
|
return ALIGN(p + strlen((char *)p) + 1, 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* of_get_flat_dt_prop - Given a node in the flat blob, return the property ptr
|
||||||
|
*
|
||||||
|
* This function can be used within scan_flattened_dt callback to get
|
||||||
|
* access to properties
|
||||||
|
*/
|
||||||
|
void *__init of_get_flat_dt_prop(unsigned long node, const char *name,
|
||||||
|
unsigned long *size)
|
||||||
|
{
|
||||||
|
return of_fdt_get_property(initial_boot_params, node, name, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* of_flat_dt_is_compatible - Return true if given node has compat in compatible list
|
||||||
|
* @node: node to test
|
||||||
|
* @compat: compatible string to compare with compatible list.
|
||||||
|
*/
|
||||||
|
int __init of_flat_dt_is_compatible(unsigned long node, const char *compat)
|
||||||
|
{
|
||||||
|
return of_fdt_is_compatible(initial_boot_params, node, compat);
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_BLK_DEV_INITRD
|
#ifdef CONFIG_BLK_DEV_INITRD
|
||||||
/**
|
/**
|
||||||
* early_init_dt_check_for_initrd - Decode initrd location from flat tree
|
* early_init_dt_check_for_initrd - Decode initrd location from flat tree
|
||||||
|
Loading…
Reference in New Issue
Block a user