diff options
Diffstat (limited to 'arch/powerpc/cpu/mpc85xx/portals.c')
| -rw-r--r-- | arch/powerpc/cpu/mpc85xx/portals.c | 36 | 
1 files changed, 22 insertions, 14 deletions
| diff --git a/arch/powerpc/cpu/mpc85xx/portals.c b/arch/powerpc/cpu/mpc85xx/portals.c index d529095ee..672edde45 100644 --- a/arch/powerpc/cpu/mpc85xx/portals.c +++ b/arch/powerpc/cpu/mpc85xx/portals.c @@ -128,24 +128,32 @@ static int fdt_qportal(void *blob, int off, int id, char *name,  	childoff = fdt_subnode_offset(blob, off, name);  	if (create) { -		if (childoff <= 0) -			childoff = fdt_add_subnode(blob, off, name); +		char handle[64], *p; -		if (childoff > 0) { -			char handle[64], *p; +		strncpy(handle, name, sizeof(handle)); +		p = strchr(handle, '@'); +		if (!strncmp(name, "fman", 4)) { +			*p = *(p + 1); +			p++; +		} +		*p = '\0'; -			strncpy(handle, name, sizeof(handle)); -			p = strchr(handle, '@'); -			if (!strncmp(name, "fman", 4)) { -				*p = *(p + 1); -				p++; -			} -			*p = '\0'; +		dev_off = fdt_path_offset(blob, handle); +		/* skip this node if alias is not found */ +		if (dev_off == -FDT_ERR_BADPATH) +			return 0; +		if (dev_off < 0) +			return dev_off; -			dev_off = fdt_path_offset(blob, handle); -			if (dev_off < 0) -				return dev_off; +		if (childoff <= 0) +			childoff = fdt_add_subnode(blob, off, name); +		/* need to update the dev_off after adding a subnode */ +		dev_off = fdt_path_offset(blob, handle); +		if (dev_off < 0) +			return dev_off; + +		if (childoff > 0) {  			dev_handle = fdt_get_phandle(blob, dev_off);  			if (dev_handle <= 0) {  				dev_handle = fdt_alloc_phandle(blob); |