Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4bf3f3cb authored by Robin Getz's avatar Robin Getz Committed by Bryan Wu
Browse files

Blackfin arch: update ANOMALY handling



update lists for 533, 537, and add SSYNC workaround into assembly files.

Signed-off-by: default avatarRobin Getz <robin.getz@analog.com>
Signed-off-by: default avatarBryan Wu <bryan.wu@analog.com>
parent 0864a4e2
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -61,7 +61,12 @@ ENTRY(_memcmp)

	LSETUP (.Lquad_loop_s, .Lquad_loop_e) LC0=P1;
.Lquad_loop_s:
#ifdef ANOMALY_05000202
	R0 = [P0++];
	R1 = [I0++];
#else
	MNOP || R0 = [P0++] || R1 = [I0++];
#endif
	CC = R0 == R1;
	IF !CC JUMP .Lquad_different;
.Lquad_loop_e:
+10 −3
Original line number Diff line number Diff line
@@ -94,13 +94,20 @@ ENTRY(_memcpy)
.Lmore_than_seven:
	/* There's at least eight bytes to copy. */
	P2 += -1;	/* because we unroll one iteration */
	LSETUP(.Lword_loop, .Lword_loop) LC0=P2;
	LSETUP(.Lword_loops, .Lword_loope) LC0=P2;
	R0 = R1;
	I1 = P1;
	R3 = [I1++];
.Lword_loop:
#ifdef ANOMALY_05000202
.Lword_loops:
	[P0++] = R3;
.Lword_loope:
	R3 = [I1++];
#else
.Lword_loops:
.Lword_loope:
	MNOP || [P0++] = R3 || R3 = [I1++];

#endif
	[P0++] = R3;
	/* Any remaining bytes to copy? */
	R3 = 0x3;
+15 −2
Original line number Diff line number Diff line
@@ -69,8 +69,17 @@ ENTRY(_memmove)
	P2 = R2;                  /* set remainder */
	R1 = [I0++];

	LSETUP (.Lquad_loop, .Lquad_loop) LC0=P1;
.Lquad_loop: MNOP || [P0++] = R1 || R1 = [I0++];
	LSETUP (.Lquad_loops, .Lquad_loope) LC0=P1;
#ifdef ANOMALY_05000202
.Lquad_loops:
	[P0++] = R1;
.Lquad_loope:
	R1 = [I0++];
#else
.Lquad_loops:
.Lquad_loope:
	 MNOP || [P0++] = R1 || R1 = [I0++];
#endif
	[P0++] = R1;

	CC = P2 == 0;             /* any remaining bytes? */
@@ -93,6 +102,10 @@ ENTRY(_memmove)
	R1 = B[P3--] (Z);
	CC = P2 == 0;
	IF CC JUMP .Lno_loop;
#ifdef ANOMALY_05000245
	NOP;
	NOP;
#endif
	LSETUP (.Lol_s, .Lol_e) LC0 = P2;
.Lol_s:    B[P0--] = R1;
.Lol_e:    R1 = B[P3--] (Z);
+10 −10
Original line number Diff line number Diff line
@@ -123,14 +123,14 @@ ENTRY(_blackfin_icache_flush_range)
	R2 = R0 & R2;
	P0 = R2;
	P1 = R1;
	CSYNC;
	CSYNC(R3);
	IFLUSH [P0];
1:
	IFLUSH [P0++];
	CC = P0 < P1 (iu);
	IF CC JUMP 1b (bp);
	IFLUSH [P0];
	SSYNC;
	SSYNC(R3);
	RTS;
ENDPROC(_blackfin_icache_flush_range)

@@ -148,7 +148,7 @@ ENTRY(_blackfin_icache_dcache_flush_range)
	R2 = R0 & R2;
	P0 = R2;
	P1 = R1;
	CSYNC;
	CSYNC(R3);
	IFLUSH [P0];
1:
	FLUSH [P0];
@@ -157,7 +157,7 @@ ENTRY(_blackfin_icache_dcache_flush_range)
	IF CC JUMP 1b (bp);
	IFLUSH [P0];
	FLUSH [P0];
	SSYNC;
	SSYNC(R3);
	RTS;
ENDPROC(_blackfin_icache_dcache_flush_range)

@@ -174,7 +174,7 @@ ENTRY(_blackfin_dcache_invalidate_range)
	R2 = R0 & R2;
	P0 = R2;
	P1 = R1;
	CSYNC;
	CSYNC(R3);
	FLUSHINV[P0];
1:
	FLUSHINV[P0++];
@@ -186,7 +186,7 @@ ENTRY(_blackfin_dcache_invalidate_range)
	 * so do one more.
	 */
	FLUSHINV[P0];
	SSYNC;
	SSYNC(R3);
	RTS;
ENDPROC(_blackfin_dcache_invalidate_range)

@@ -235,7 +235,7 @@ ENTRY(_blackfin_dcache_flush_range)
	R2 = R0 & R2;
	P0 = R2;
	P1 = R1;
	CSYNC;
	CSYNC(R3);
	FLUSH[P0];
1:
	FLUSH[P0++];
@@ -247,17 +247,17 @@ ENTRY(_blackfin_dcache_flush_range)
	 * one more.
	 */
	FLUSH[P0];
	SSYNC;
	SSYNC(R3);
	RTS;
ENDPROC(_blackfin_dcache_flush_range)

ENTRY(_blackfin_dflush_page)
	P1 = 1 << (PAGE_SHIFT - L1_CACHE_SHIFT);
	P0 = R0;
	CSYNC;
	CSYNC(R3);
	FLUSH[P0];
	LSETUP (.Lfl1, .Lfl1) LC0 = P1;
.Lfl1:	FLUSH [P0++];
	SSYNC;
	SSYNC(R3);
	RTS;
ENDPROC(_blackfin_dflush_page)
+1 −1
Original line number Diff line number Diff line
@@ -139,7 +139,7 @@ __common_int_entry:
	fp = 0;
#endif

#ifdef	ANOMALY_05000283
#if defined (ANOMALY_05000283) || defined (ANOMALY_05000315)
	cc = r7 == r7;
	p5.h = 0xffc0;
	p5.l = 0x0014;
Loading