of/flattree: Make the kernel accept ePAPR style phandle information
Currently when processing flattened device trees, the kernel expects the phandle in a property called "linux,phandle". The ePAPR spec - not being Linux specific - instead requires phandles to be encoded in a property named simply "phandle". This patch makes the kernel accept either form when unflattening the device tree. Signed-off-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
This commit is contained in:
parent
087f79c48c
commit
04b954a673
|
@ -310,10 +310,19 @@ unsigned long __init unflatten_dt_node(unsigned long mem,
|
||||||
pp = unflatten_dt_alloc(&mem, sizeof(struct property),
|
pp = unflatten_dt_alloc(&mem, sizeof(struct property),
|
||||||
__alignof__(struct property));
|
__alignof__(struct property));
|
||||||
if (allnextpp) {
|
if (allnextpp) {
|
||||||
if (strcmp(pname, "linux,phandle") == 0) {
|
/* We accept flattened tree phandles either in
|
||||||
|
* ePAPR-style "phandle" properties, or the
|
||||||
|
* legacy "linux,phandle" properties. If both
|
||||||
|
* appear and have different values, things
|
||||||
|
* will get weird. Don't do that. */
|
||||||
|
if ((strcmp(pname, "phandle") == 0) ||
|
||||||
|
(strcmp(pname, "linux,phandle") == 0)) {
|
||||||
if (np->phandle == 0)
|
if (np->phandle == 0)
|
||||||
np->phandle = *((u32 *)*p);
|
np->phandle = *((u32 *)*p);
|
||||||
}
|
}
|
||||||
|
/* And we process the "ibm,phandle" property
|
||||||
|
* used in pSeries dynamic device tree
|
||||||
|
* stuff */
|
||||||
if (strcmp(pname, "ibm,phandle") == 0)
|
if (strcmp(pname, "ibm,phandle") == 0)
|
||||||
np->phandle = *((u32 *)*p);
|
np->phandle = *((u32 *)*p);
|
||||||
pp->name = pname;
|
pp->name = pname;
|
||||||
|
|
Loading…
Reference in New Issue