(toppers-users 4418) Re: TOPPERS/FMP(Cyclone V)の第2コアの処理速度が遅い件について

Shinya Honda honda @ ertl.jp
2015年 9月 1日 (火) 15:21:30 JST


$B=)5H$5$s(B

$BK\ED$G$9!%(B

$B$*CN$i$;$"$j$,$H$&$4$6$$$^$9!%(B

$B$3$A$i$G$b0c$&%?!<%2%C%H$G3NG'$7$^$7$?$,!$3N$+$K%3%"(B2$B0J9_$N @ -G=$,Dc$$7k(B
$B2L$H$J$j$^$7$?!%(B

$BD4::$7$?7k2L!$%3%"(B2$B0J9_$OJ,4tM=B,$,M-8z$K$J$C$F$$$^$;$s$G$7$?!%(B

$B%Q%C%A$rAw$j$^$9$N$G!$$3$A$i$G;n$7$F$b$i$($J$$$G$7$g$&$+!%=$@5$7$?%3!<%I(B
$B$r6a$$$&$A$K%j%j!<%9$7$^$9!%(B

===================================================================
--- arm_armcc/mpcore/mpcore_tool.h      ($B%j%S%8%g%s(B 1108)
+++ arm_armcc/mpcore/mpcore_tool.h      ($B:n6H%3%T!<(B)
@@ -75,6 +75,11 @@
        cp15_icache_invalidate = 0;
            \ } while(false)

+#define CP15_ICACHE_INVALIDATE() do {
            \+       register uint32_t cp15_branchip_invalidate
__asm("cp15:0:c7:c5:6");     \
+       cp15_branchip_invalidate = 0;
            \+} while(false)
+
 #if __TARGET_ARCH_ARM == 6

 #define CP15_DCACHE_INVALIDATE() do {
            \Index: arm_gcc/mpcore/mpcore.c
===================================================================
--- arm_gcc/mpcore/mpcore.c     (a?aa??a?$B8c(B?$B'c(B?3 1122)
+++ arm_gcc/mpcore/mpcore.c     ($Bd=(B?$Bf%-c(B?$B3c(B??a??)
@@ -477,6 +477,9 @@

        mpcore_dcache_invalidate();

+       CP15_DATA_SYNC_BARRIER();
+       CP15_PBUFFER_FLUSH();
+
        bits |= CP15_CONTROL_C_BIT;
        CP15_CONTROL_WRITE(bits);
 }
@@ -501,6 +504,9 @@
        else{
                mpcore_dcache_invalidate();
        }
+
+       CP15_DATA_SYNC_BARRIER();
+       CP15_PBUFFER_FLUSH();
 }

 /*
@@ -515,13 +521,18 @@
        /*
         *  $B$9$G$KM-8z$J$i%j%?!<%s(B
         */
-       if(bits & CP15_CONTROL_I_BIT){
+       if((bits & (CP15_CONTROL_I_BIT|CP15_CONTROL_Z_BIT))
+          == (CP15_CONTROL_I_BIT|CP15_CONTROL_Z_BIT)){
                return;
        }

        mpcore_icache_invalidate();
+       CP15_BRANCHP_INVALIDATE();

-       bits |= CP15_CONTROL_I_BIT;
+       CP15_DATA_SYNC_BARRIER();
+       CP15_PBUFFER_FLUSH();
+
+       bits |= CP15_CONTROL_I_BIT|CP15_CONTROL_Z_BIT;
        CP15_CONTROL_WRITE(bits);
 }

@@ -538,6 +549,9 @@
        CP15_CONTROL_WRITE(bits);

        mpcore_icache_invalidate();
+
+       CP15_DATA_SYNC_BARRIER();
+       CP15_PBUFFER_FLUSH();
 }

 /*
@@ -658,7 +672,7 @@
        mpcore_pbuffer_flash();

        /*
-        * TTBR0$B$rMQ$$$kMQ$K;XDj(B
+        * TTBR0$B$rMQ$$$kMM$K;XDj(B
         */
        CP15_TTBCR_WRITE(0);

Index: arm_gcc/mpcore/mpcore.h
===================================================================
--- arm_gcc/mpcore/mpcore.h     ($B%j%S%8%g%s(B 1122)
+++ arm_gcc/mpcore/mpcore.h     ($B:n6H%3%T!<(B)
@@ -61,6 +61,7 @@
 #define CP15_CONTROL_XP_BIT   (1 << 23)
 #define CP15_CONTROL_V_BIT    (1 << 13)
 #define CP15_CONTROL_I_BIT    (1 << 12)
+#define CP15_CONTROL_Z_BIT    (1 << 11)
 #define CP15_CONTROL_C_BIT    (1 <<  2)
 #define CP15_CONTROL_M_BIT    (1 <<  0)

Index: arm_gcc/mpcore/mpcore_tool.h
===================================================================
--- arm_gcc/mpcore/mpcore_tool.h        ($B%j%S%8%g%s(B 1122)
+++ arm_gcc/mpcore/mpcore_tool.h        ($B:n6H%3%T!<(B)
@@ -57,6 +57,8 @@
 #define CP15_AUXILIARY_WRITE(x)  Asm("mcr p15, 0, %0, c1, c0, 1"::"r"(x))

 #define CP15_ICACHE_INVALIDATE()           Asm("mcr p15, 0, %0, c7, c5,
0"::"r"(0))
+#define CP15_BRANCHP_INVALIDATE()          Asm("mcr p15, 0, %0, c7, c5,
6"::"r"(0))
+
 #if __TARGET_ARCH_ARM == 6
 #define CP15_DCACHE_INVALIDATE()           Asm("mcr p15, 0, %0, c7, c6,
0"::"r"(0))
 #define CP15_DCACHE_CLEAN_AND_INVALIDATE() Asm("MCR p15, 0, %0, c7,
c14, 0"::"r"(0))


On 2015/08/31 18:44, y.akiyoshi @ screen.co.jp wrote:
> TOPPERS$B%W%m%8%'%/%H$N$_$J$5$^(B
> 
> $B3t<02q<R(BSCREEN$B%[!<%k%G%#%s%0%9$N=)5H$H?=$7$^$9!#(B
> 
> $B0JA0!"%"%k%F%iHG(BDS-5$B$G$N%3%s%U%#%0%l!<%?8F$S=P$7$K$D$$$F<ALd$5$;$F$$$?$@$$(B
> $B$?$b$N$G$9$,!"(B
> MDK-ARM$B$NNc$r;29M$K$7$FF0:n$5$;$k$3$H$,$G$-$^$7$?!#$"$j$,$H$&$4$6$$$^$7$?(B
> $B!#(B
> 
> 
> $B:#!"(BCyclone V SoC$BMQ$N(BFMP$B4J0W%Q%C%1!<%8(B(1.3.0/2015-02-17)$B$r;HMQ$7$F$$$k$N$G(B
> $B$9$,!"(B
> $B%3%"(B1$B$H%3%"(B2$B$KF1$8=hM}$r$5$;$F<B9T;~4V$rB,$C$F$_$k$HBh#2%3%"$,CY$$$H$$$&7k(B
> $B2L$K$J$C$F$7$^$$$^$9!#(B
> 
> $B=hM}$O%P%V%k%=!<%H$rJ#?t2s7+$jJV$9$@$1$N$b$N$G!"<B9T;~4V$O(Bget_tim$B$GB,$k$H(B
> $B%3%"(B2$B$G=hM}$7$?>l9g$NJ}$,(B
> 3$B3d$[$ICY$$7k2L$K$J$j$^$7$?!#!JB>$N=hM}$G$O(B2$BG\6a$/CY$$>l9g$b$"$j$^$9!K(B
> 
> $B$3$l$i$N=hM}$OJBNsF0:n$5$;$F$*$i$:!"%=!<%H%?%9%/$@$1$,F0$$$F$$$k>u67$G$9!#(B
> $B$^$?!"$=$l$>$l$N(Bget_tim$B$O$[$\F1$8B.EY$GF0$$$F$$$^$9!#(B
> $B%Z%j%U%'%i%k$N @ _Dj$O4pK\E*$K%5%s%W%k$HF1$8$G!"(Bsample1.c$B$N%?%9%/$rA4$F:o=|(B
> $B$7$F%3%"#1(B/2$B$K$=$l$>$l%?%9%/$rN)$F$F$$$^$9(B
> 
> $B860x$O$3$l$+$i @ Z$jJ,$1$F$$$/$H$3$m$G$9$,!"(BTOPPERS/FMP$BB&$G2?$+860x$K$J$j$&(B
> $B$k$h$&$J=hM}$O$"$k$N$G$7$g$&$+!#(B
> $B$4B8CN$NJ}$,$$$i$C$7$c$$$^$7$?$i!"$I$&$>$h$m$7$/$*4j$$$7$^$9!#(B
> 
> 
> $B3t<02q<R(BSCREEN$B%[!<%k%G%#%s%0%9(B
> $B=)5HJ]5*(B
>