From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Sender: Grant Likely From: Grant Likely Subject: [v2 PATCH] of/flattree: Fix unhandled OF_DT_NOP tag when unflattening the device tree To: devicetree-discuss@lists.ozlabs.org, benh@kernel.crashing.org, monstr@monstr.eu, linuxppc-dev@lists.ozlabs.org Date: Fri, 19 Mar 2010 14:01:49 -0600 Message-ID: <20100319200049.5195.97171.stgit@angua> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Jason Gunthorpe NOPs within the property section are skipped, but NOPs between OF_DT_END_NODE and OF_DT_BEGIN_NODE were not. My firmware NOPs out entire nodes depending on various environment parameters. of_scan_flat_dt already handles NOP more generally. Signed-off-by: Jason Gunthorpe Signed-off-by: Grant Likely --- v2 - adapted to new location of unflatten_dt_node(). Jason, please test against 2.6.34-rc1 drivers/of/fdt.c | 7 +++++-- 1 files changed, 5 insertions(+), 2 deletions(-) diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c index 406757a..dee4fb5 100644 --- a/drivers/of/fdt.c +++ b/drivers/of/fdt.c @@ -376,8 +376,11 @@ unsigned long __init unflatten_dt_node(unsigned long mem, if (!np->type) np->type = ""; } - while (tag == OF_DT_BEGIN_NODE) { - mem = unflatten_dt_node(mem, p, np, allnextpp, fpsize); + while (tag == OF_DT_BEGIN_NODE || tag == OF_DT_NOP) { + if (tag == OF_DT_NOP) + *p += 4; + else + mem = unflatten_dt_node(mem, p, np, allnextpp, fpsize); tag = be32_to_cpup((__be32 *)(*p)); } if (tag != OF_DT_END_NODE) {