<br><font size=2 face="sans-serif">Hello Nelson.</font>
<br><font size=2 face="sans-serif">Thanks for your reply.</font>
<br>
<br><font size=2 face="sans-serif">cbe-oss-dev-bounces+takashi02_yamamoto=hq.scei.sony.co.jp@ozlabs.org wrote on 2007/08/15 05:16:02:<br>
&gt; Yamamoto-san,<br>
&gt; <br>
&gt; On Friday 10 August 2007 03:13:29 am Takashi02 Yamamoto wrote:<br>
&gt; &gt; This patch fixes the cbe pm signal routing problem.<br>
&gt; <br>
&gt; Is this a documented problem? &nbsp;Where? &nbsp;I haven't seen anything mentioned<br>
&gt; previously.</font>
<br>
<br><font size=2 face="sans-serif">Sorry. My explanation was not enough.</font>
<br><font size=2 face="sans-serif">The word0-3 fields of debug_bus_control register and the group_0-1 fields of group_control register</font>
<br><font size=2 face="sans-serif">are not set correctly. And the target signal is not routed to the correct counter.</font>
<br><font size=2 face="sans-serif">I used OProfile on QS20 and found this problem.</font>
<br><font size=2 face="sans-serif"><br>
&gt; &gt;<br>
&gt; &gt; We can confirm the fix by the following oprofile event parameter.<br>
&gt; &gt; &quot;opcontrol --event=cache_hit:10000:0x42&quot;<br>
&gt; <br>
&gt; Why are you setting the unit mask? &nbsp;This is not something you should be <br>
&gt; doing<br>
&gt; in general, you should use the default values for the unit mask.</font>
<br>
<br><font size=2 face="sans-serif">I usually don't set the unit mask.</font>
<br><font size=2 face="sans-serif">But 0x42(unit mask) is good to reproduce the problem and confirm the fix.</font>
<br><font size=2 face="sans-serif"><br>
&gt; &gt;<br>
&gt; &gt; Signed-off-by: Takashi Yamamoto <br>
&gt; &lt;Takashi02_Yamamoto@hq.scei.sony.co.jp&gt;<br>
&gt; &gt;<br>
&gt; &gt; Index: linux-2.6.22.1/arch/powerpc/oprofile/op_model_cell.c<br>
&gt; &gt; ===================================================================<br>
&gt; &gt; --- linux-2.6.22.1.orig/arch/powerpc/oprofile/op_model_cell.c<br>
&gt; &gt; +++ linux-2.6.22.1/arch/powerpc/oprofile/op_model_cell.c<br>
&gt; &gt; @@ -291,13 +291,13 @@ static void set_pm_event(u32 ctr, int ev<br>
&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; for (i = 0; i &lt; NUM_TRACE_BUS_WORDS; i++) {<br>
&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (bus_word &amp; (1 &lt;&lt; i)) {<br>
&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pm_regs.debug_bus_control |=<br>
&gt; &gt; - &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (bus_type &lt;&lt; (31 - (2 * i) + 1));<br>
</font>
<br><font size=2 face="sans-serif">If i is 0, &nbsp;bus_type overflows.</font>
<br>
<br><font size=2 face="sans-serif">&gt; &gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (bus_type &lt;&lt; (30 - (2 * i)));<br>
&gt; &gt;<br>
&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for (j = 0; j &lt; NUM_INPUT_BUS_WORDS; j++) {<br>
&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (input_bus[j] == 0xff) {<br>
&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; input_bus[j] = i;<br>
&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pm_regs.group_control |=<br>
&gt; &gt; - &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (i &lt;&lt; (31 - i));<br>
</font>
<br><font size=2 face="sans-serif">If i is 0, the group_0 field(bit0 and bit1) is not set correctly.</font>
<br>
<br><font size=2 face="sans-serif">&gt; &gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (input_bus[j] &lt;&lt; (30 - (2 <br>
&gt; *<br>
&gt; &gt; j)));<br>
&gt; I think your change may work for your particular testcase setting the <br>
&gt; unit<br>
&gt; mask, but it looks to me like it is going to break almost everything <br>
&gt; else. &nbsp;I<br>
&gt; am going to take a more thorough look at the module but I can't see how <br>
&gt; this<br>
&gt; doesn't change/break some case(s) other than your test above.</font>
<br>
<br><font size=2 face="sans-serif">The default unit mask uses word_0, and </font>
<br><font size=2 face="sans-serif">it seems to work well without setting the word0 field of debug_bus_control register.</font>
<br><font size=2 face="sans-serif">So, it is difficult for us to find this problem.</font>
<br>
<br><font size=2 face="sans-serif">Thanks.</font>
<br><font size=2 face="sans-serif">Takashi Yamamoto.</font>