<br><br><div class="gmail_quote">2009/2/27 Benjamin Herrenschmidt <span dir="ltr">&lt;<a href="mailto:benh@kernel.crashing.org">benh@kernel.crashing.org</a>&gt;</span><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div class="Ih2E3d">On Thu, 2009-02-26 at 18:08 +0800, Tiejun Chen wrote:<br>
&gt; In the DTB tree created by firmware on Maple 64bit target, host bridge<br>
&gt; parent<br>
&gt; node has specified both of these two properties to be 2. However, the<br>
&gt; actual<br>
&gt; &quot;cell&quot; value for host bridge node is 1. we have to provide one fixup<br>
&gt; function.<br>
<br>
</div>Hi !<br>
<br>
Thanks for the patch. A couple of things tho: Can you make it a bit<br>
more robust by properly checking the board type first ?</blockquote><div><br>That is ATCA 6101 and the following is from the MOTLoad firmware.<br>------<br>Copyright Motorola Inc. 1999-2006, All Rights Reserved<br>MOTLoad RTOS Version 2.0,  PAL Version 1.1 RM01<br>
Built on Tue Jun 13 10:31:56 EDT 2006 by q3316c<br>bbs 2.0 build 38<br><br>Part Number          =01-W3930F04A<br>Serial Number        =0000001<br><br>MPU-Type             =PPC970FX DD3.1<br>MPU-Int Clock Speed  =1800MHz<br>
Memory Speed         =333MHz<br><br>PCI bus instance 1   =64 bit, 100 MHz, PCI-X<br>PCI bus instance 2   =64 bit, 100 MHz, PCI-X<br>PCI bus instance 3   =64 bit, 100 MHz, PCI-X<br>PCI bus instance 4   =64 bit, 100 MHz, PCI-X<br>
PCI bus instance 5   =32 bit, 33 MHz, PCI<br><br>HT Link instance 1   =16 bit, 400 MHz<br>HT Link instance 2   = 8 bit, 600 MHz<br>HT Link instance 3   = 8 bit, 200 MHz<br><br>MOTLoad FLASH Image  =FLASH Bank A<br><br>Local Memory Found   =080000000 (&amp;2147483648)<br>
User Download Buffer =0611A5000:0613A4FFF<br>------<br><br>Here is some board information I can know:<br>------<br>Board revision: 01<br>Boot loader version: 2.0<br>Silicon revision: 3.1 (pvr 003c 0301) <br>------<br><br>
</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br>
<br>
Also, what is this &quot;hostbridge&quot; node ? ie, what does it represent ?</blockquote><div><br> That means IBM CPC925 system controller resided on the ATCA 6101.<br><br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>
<br>
Can you send me a full dump of /proc/device-tree from the machine ?<br>
(ie tar it up)<br>
</blockquote><div><br>See the attachment.<br> <br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br>
Finally, it looks like your patch was whitespace damaged by your mailer.<br>
</blockquote><div><br>After you confirm others is ok I will send v2 improved patch.<br><br>Thanks &amp; Best Regards<br>Tiejun<br> </div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>
Cheers,<br>
Ben.<br>
<div><div></div><div class="Wj3C7c"><br>
<br>
&gt; Signed-off-by: Tiejun Chen &lt;<a href="mailto:tiejun.china@gmail.com">tiejun.china@gmail.com</a>&gt;<br>
&gt; ---<br>
&gt;  arch/powerpc/kernel/prom_init.c |   42<br>
&gt; +++++++++++++++++++++++++++++++++++++++<br>
&gt;  1 files changed, 42 insertions(+), 0 deletions(-)<br>
&gt;<br>
&gt; diff --git a/arch/powerpc/kernel/prom_init.c<br>
&gt; b/arch/powerpc/kernel/prom_init.c<br>
&gt; index 2445945..9cd23b6 100644<br>
&gt; --- a/arch/powerpc/kernel/prom_init.c<br>
&gt; +++ b/arch/powerpc/kernel/prom_init.c<br>
&gt; @@ -1948,8 +1948,49 @@ static void __init<br>
&gt; fixup_device_tree_maple(void)<br>
&gt;        prom_setprop(isa, name, &quot;ranges&quot;,<br>
&gt;                        isa_ranges, sizeof(isa_ranges));<br>
&gt;  }<br>
&gt; +<br>
&gt; +/* On Maple 64bit target host bridge parent node has specified<br>
&gt; address and<br>
&gt; + * size properties to be 2. But the actual &quot;cell&quot; value for host<br>
&gt; bridge node<br>
&gt; + * is 1 since early MOTLoad internal bug. */<br>
&gt; +static void __init fixup_device_tree_maple_hb(void)<br>
&gt; +{<br>
&gt; +       phandle hb;<br>
&gt; +       u32 hb_ranges[4];<br>
&gt; +       u32 size_cell, addr_cell;<br>
&gt; +       struct prom_t *_prom = &amp;RELOC(prom);<br>
&gt; +       char *name;<br>
&gt; +<br>
&gt; +       name = &quot;/hostbridge@f8000000&quot;;<br>
&gt; +       hb = call_prom(&quot;finddevice&quot;, 1, 1, ADDR(name));<br>
&gt; +       if (!PHANDLE_VALID(hb))<br>
&gt; +               return;<br>
&gt; +<br>
&gt; +       if (prom_getproplen(hb, &quot;reg&quot;) != 8)<br>
&gt; +               return;<br>
&gt; +<br>
&gt; +       if (prom_getprop(hb, &quot;reg&quot;, hb_ranges, (sizeof(hb_ranges))/2)<br>
&gt; +               == PROM_ERROR)<br>
&gt; +               return;<br>
&gt; +<br>
&gt; +       prom_getprop(_prom-&gt;root, &quot;#address-cells&quot;, &amp;addr_cell,<br>
&gt; sizeof(addr_cell));<br>
&gt; +       prom_getprop(_prom-&gt;root, &quot;#size-cells&quot;, &amp;size_cell,<br>
&gt; sizeof(size_cell));<br>
&gt; +<br>
&gt; +       if ((addr_cell != 2) || (size_cell != 2) ||<br>
&gt; +               (hb_ranges[0] != 0xf8000000))<br>
&gt; +               return;<br>
&gt; +<br>
&gt; +       prom_printf(&quot;Fixing up bogus HOSTBRIDGE reg on<br>
&gt; Maple/Apache...\n&quot;);<br>
&gt; +<br>
&gt; +       hb_ranges[3] = hb_ranges[1];<br>
&gt; +       hb_ranges[1] = hb_ranges[0];<br>
&gt; +       hb_ranges[0] = hb_ranges[2] = 0;<br>
&gt; +       prom_setprop(hb, name, &quot;reg&quot;,<br>
&gt; +               hb_ranges, sizeof(hb_ranges));<br>
&gt; +}<br>
&gt; +<br>
&gt;  #else<br>
&gt;  #define fixup_device_tree_maple()<br>
&gt; +#define fixup_device_tree_maple_hb()<br>
&gt;  #endif<br>
&gt;<br>
&gt;  #ifdef CONFIG_PPC_CHRP<br>
&gt; @@ -2190,6 +2231,7 @@ static void __init fixup_device_tree_efika(void)<br>
&gt;  static void __init fixup_device_tree(void)<br>
&gt;  {<br>
&gt;        fixup_device_tree_maple();<br>
&gt; +       fixup_device_tree_maple_hb();<br>
&gt;        fixup_device_tree_chrp();<br>
&gt;        fixup_device_tree_pmac();<br>
&gt;        fixup_device_tree_efika();<br>
&gt; --<br>
&gt; 1.5.6<br>
&gt;<br>
&gt;<br>
&gt;<br>
<br>
</div></div></blockquote></div><br>