From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from gate.crashing.org (gate.crashing.org [63.228.1.57]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id E9A12DDF0C for ; Tue, 3 Mar 2009 16:32:01 +1100 (EST) Subject: Re: [PATCH 1/1] Fix 64bit Mapple Host Bridge Address and Size Nodes From: Benjamin Herrenschmidt To: Tiejun Chen In-Reply-To: <7a800c8d0902261755s203ef8a1n52ffa12b51a5a12@mail.gmail.com> References: <1235642785-9684-1-git-send-email-tiejun.chen@windriver.com> <7a800c8d0902260208g4a65b07fi1bb287910c51b342@mail.gmail.com> <1235680139.7388.15.camel@pasglop> <7a800c8d0902261755s203ef8a1n52ffa12b51a5a12@mail.gmail.com> Content-Type: text/plain Date: Tue, 03 Mar 2009 16:31:45 +1100 Message-Id: <1236058305.20465.22.camel@pasglop> Mime-Version: 1.0 Cc: linuxppc-dev@ozlabs.org, akpm@linux-foundation.org List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Thanks. Now, is there any reason you can't fold the fix inside the existing fixup_device_tree_maple() fixup ? IE. Does it apply to any Maple board or only this ATCA6101 ? If not (if it does only apply to this specific board), then give the function a better name, such as fixup_device_tree_atca6101() and make it check for the /model property of the device-tree to make sure you only hit that board and nothing else. Cheers, Ben. On Fri, 2009-02-27 at 09:55 +0800, Tiejun Chen wrote: > > > 2009/2/27 Benjamin Herrenschmidt > On Thu, 2009-02-26 at 18:08 +0800, Tiejun Chen wrote: > > In the DTB tree created by firmware on Maple 64bit target, > host bridge > > parent > > node has specified both of these two properties to be 2. > However, the > > actual > > "cell" value for host bridge node is 1. we have to provide > one fixup > > function. > > > Hi ! > > Thanks for the patch. A couple of things tho: Can you make it > a bit > more robust by properly checking the board type first ? > > That is ATCA 6101 and the following is from the MOTLoad firmware. > ------ > Copyright Motorola Inc. 1999-2006, All Rights Reserved > MOTLoad RTOS Version 2.0, PAL Version 1.1 RM01 > Built on Tue Jun 13 10:31:56 EDT 2006 by q3316c > bbs 2.0 build 38 > > Part Number =01-W3930F04A > Serial Number =0000001 > > MPU-Type =PPC970FX DD3.1 > MPU-Int Clock Speed =1800MHz > Memory Speed =333MHz > > PCI bus instance 1 =64 bit, 100 MHz, PCI-X > PCI bus instance 2 =64 bit, 100 MHz, PCI-X > PCI bus instance 3 =64 bit, 100 MHz, PCI-X > PCI bus instance 4 =64 bit, 100 MHz, PCI-X > PCI bus instance 5 =32 bit, 33 MHz, PCI > > HT Link instance 1 =16 bit, 400 MHz > HT Link instance 2 = 8 bit, 600 MHz > HT Link instance 3 = 8 bit, 200 MHz > > MOTLoad FLASH Image =FLASH Bank A > > Local Memory Found =080000000 (&2147483648) > User Download Buffer =0611A5000:0613A4FFF > ------ > > Here is some board information I can know: > ------ > Board revision: 01 > Boot loader version: 2.0 > Silicon revision: 3.1 (pvr 003c 0301) > ------ > > > > > Also, what is this "hostbridge" node ? ie, what does it > represent ? > > That means IBM CPC925 system controller resided on the ATCA 6101. > > > > > Can you send me a full dump of /proc/device-tree from the > machine ? > (ie tar it up) > > See the attachment. > > > > Finally, it looks like your patch was whitespace damaged by > your mailer. > > After you confirm others is ok I will send v2 improved patch. > > Thanks & Best Regards > Tiejun > > > Cheers, > Ben. > > > > > Signed-off-by: Tiejun Chen > > --- > > arch/powerpc/kernel/prom_init.c | 42 > > +++++++++++++++++++++++++++++++++++++++ > > 1 files changed, 42 insertions(+), 0 deletions(-) > > > > diff --git a/arch/powerpc/kernel/prom_init.c > > b/arch/powerpc/kernel/prom_init.c > > index 2445945..9cd23b6 100644 > > --- a/arch/powerpc/kernel/prom_init.c > > +++ b/arch/powerpc/kernel/prom_init.c > > @@ -1948,8 +1948,49 @@ static void __init > > fixup_device_tree_maple(void) > > prom_setprop(isa, name, "ranges", > > isa_ranges, sizeof(isa_ranges)); > > } > > + > > +/* On Maple 64bit target host bridge parent node has > specified > > address and > > + * size properties to be 2. But the actual "cell" value for > host > > bridge node > > + * is 1 since early MOTLoad internal bug. */ > > +static void __init fixup_device_tree_maple_hb(void) > > +{ > > + phandle hb; > > + u32 hb_ranges[4]; > > + u32 size_cell, addr_cell; > > + struct prom_t *_prom = &RELOC(prom); > > + char *name; > > + > > + name = "/hostbridge@f8000000"; > > + hb = call_prom("finddevice", 1, 1, ADDR(name)); > > + if (!PHANDLE_VALID(hb)) > > + return; > > + > > + if (prom_getproplen(hb, "reg") != 8) > > + return; > > + > > + if (prom_getprop(hb, "reg", hb_ranges, > (sizeof(hb_ranges))/2) > > + == PROM_ERROR) > > + return; > > + > > + prom_getprop(_prom->root, "#address-cells", > &addr_cell, > > sizeof(addr_cell)); > > + prom_getprop(_prom->root, "#size-cells", &size_cell, > > sizeof(size_cell)); > > + > > + if ((addr_cell != 2) || (size_cell != 2) || > > + (hb_ranges[0] != 0xf8000000)) > > + return; > > + > > + prom_printf("Fixing up bogus HOSTBRIDGE reg on > > Maple/Apache...\n"); > > + > > + hb_ranges[3] = hb_ranges[1]; > > + hb_ranges[1] = hb_ranges[0]; > > + hb_ranges[0] = hb_ranges[2] = 0; > > + prom_setprop(hb, name, "reg", > > + hb_ranges, sizeof(hb_ranges)); > > +} > > + > > #else > > #define fixup_device_tree_maple() > > +#define fixup_device_tree_maple_hb() > > #endif > > > > #ifdef CONFIG_PPC_CHRP > > @@ -2190,6 +2231,7 @@ static void __init > fixup_device_tree_efika(void) > > static void __init fixup_device_tree(void) > > { > > fixup_device_tree_maple(); > > + fixup_device_tree_maple_hb(); > > fixup_device_tree_chrp(); > > fixup_device_tree_pmac(); > > fixup_device_tree_efika(); > > -- > > 1.5.6 > > > > > > > > >