Merge branch 'master' of git://git.denx.de/u-boot-fdt

* 'master' of git://git.denx.de/u-boot-fdt:
  powerpc/85xx: use fdt_create_phandle() to create the Fman firmware phandles
  fdt: update fdt_alloc_phandle to use fdt_get_phandle
  fdt: check for fdt errors in fdt_create_phandle
  fdt: Add a do_fixup_by_path_string() function
This commit is contained in:
Wolfgang Denk 2011-10-15 22:00:01 +02:00
commit 7bf5228ce1
3 changed files with 21 additions and 11 deletions

View File

@ -504,9 +504,8 @@ void fdt_fixup_fman_firmware(void *blob)
fdt_strerror(rc)); fdt_strerror(rc));
return; return;
} }
phandle = fdt_alloc_phandle(blob); phandle = fdt_create_phandle(blob, fwnode);
rc = fdt_setprop_cell(blob, fwnode, "linux,phandle", phandle); if (!phandle) {
if (rc < 0) {
char s[64]; char s[64];
fdt_get_path(blob, fwnode, s, sizeof(s)); fdt_get_path(blob, fwnode, s, sizeof(s));
printf("Could not add phandle property to node %s: %s\n", s, printf("Could not add phandle property to node %s: %s\n", s,

View File

@ -1182,14 +1182,11 @@ int fdt_node_offset_by_compat_reg(void *blob, const char *compat,
*/ */
int fdt_alloc_phandle(void *blob) int fdt_alloc_phandle(void *blob)
{ {
int offset, len, phandle = 0; int offset, phandle = 0;
const u32 *val;
for (offset = fdt_next_node(blob, -1, NULL); offset >= 0; for (offset = fdt_next_node(blob, -1, NULL); offset >= 0;
offset = fdt_next_node(blob, offset, NULL)) { offset = fdt_next_node(blob, offset, NULL)) {
val = fdt_getprop(blob, offset, "linux,phandle", &len); phandle = max(phandle, fdt_get_phandle(blob, offset));
if (val)
phandle = max(*val, phandle);
} }
return phandle + 1; return phandle + 1;
@ -1241,15 +1238,22 @@ int fdt_set_phandle(void *fdt, int nodeoffset, uint32_t phandle)
* @fdt: ptr to device tree * @fdt: ptr to device tree
* @nodeoffset: node to update * @nodeoffset: node to update
*/ */
int fdt_create_phandle(void *fdt, int nodeoffset) unsigned int fdt_create_phandle(void *fdt, int nodeoffset)
{ {
/* see if there is a phandle already */ /* see if there is a phandle already */
int phandle = fdt_get_phandle(fdt, nodeoffset); int phandle = fdt_get_phandle(fdt, nodeoffset);
/* if we got 0, means no phandle so create one */ /* if we got 0, means no phandle so create one */
if (phandle == 0) { if (phandle == 0) {
int ret;
phandle = fdt_alloc_phandle(fdt); phandle = fdt_alloc_phandle(fdt);
fdt_set_phandle(fdt, nodeoffset, phandle); ret = fdt_set_phandle(fdt, nodeoffset, phandle);
if (ret < 0) {
printf("Can't set phandle %u: %s\n", phandle,
fdt_strerror(ret));
return 0;
}
} }
return phandle; return phandle;

View File

@ -36,6 +36,13 @@ void do_fixup_by_path(void *fdt, const char *path, const char *prop,
const void *val, int len, int create); const void *val, int len, int create);
void do_fixup_by_path_u32(void *fdt, const char *path, const char *prop, void do_fixup_by_path_u32(void *fdt, const char *path, const char *prop,
u32 val, int create); u32 val, int create);
static inline void do_fixup_by_path_string(void *fdt, const char *path,
const char *prop, const char *status)
{
do_fixup_by_path(fdt, path, prop, status, strlen(status) + 1, 1);
}
void do_fixup_by_prop(void *fdt, void do_fixup_by_prop(void *fdt,
const char *pname, const void *pval, int plen, const char *pname, const void *pval, int plen,
const char *prop, const void *val, int len, const char *prop, const void *val, int len,
@ -90,7 +97,7 @@ int fdt_node_offset_by_compat_reg(void *blob, const char *compat,
phys_addr_t compat_off); phys_addr_t compat_off);
int fdt_alloc_phandle(void *blob); int fdt_alloc_phandle(void *blob);
int fdt_set_phandle(void *fdt, int nodeoffset, uint32_t phandle); int fdt_set_phandle(void *fdt, int nodeoffset, uint32_t phandle);
int fdt_create_phandle(void *fdt, int nodeoffset); unsigned int fdt_create_phandle(void *fdt, int nodeoffset);
int fdt_add_edid(void *blob, const char *compat, unsigned char *buf); int fdt_add_edid(void *blob, const char *compat, unsigned char *buf);
int fdt_verify_alias_address(void *fdt, int anode, const char *alias, int fdt_verify_alias_address(void *fdt, int anode, const char *alias,