Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / tools / testing / selftests / powerpc / pmu / ebb / busy_loop.S
diff --git a/kernel/tools/testing/selftests/powerpc/pmu/ebb/busy_loop.S b/kernel/tools/testing/selftests/powerpc/pmu/ebb/busy_loop.S
new file mode 100644 (file)
index 0000000..c7e4093
--- /dev/null
@@ -0,0 +1,271 @@
+/*
+ * Copyright 2014, Michael Ellerman, IBM Corp.
+ * Licensed under GPLv2.
+ */
+
+#include <ppc-asm.h>
+
+       .text
+
+FUNC_START(core_busy_loop)
+       stdu    %r1, -168(%r1)
+       std     r14, 160(%r1)
+       std     r15, 152(%r1)
+       std     r16, 144(%r1)
+       std     r17, 136(%r1)
+       std     r18, 128(%r1)
+       std     r19, 120(%r1)
+       std     r20, 112(%r1)
+       std     r21, 104(%r1)
+       std     r22, 96(%r1)
+       std     r23, 88(%r1)
+       std     r24, 80(%r1)
+       std     r25, 72(%r1)
+       std     r26, 64(%r1)
+       std     r27, 56(%r1)
+       std     r28, 48(%r1)
+       std     r29, 40(%r1)
+       std     r30, 32(%r1)
+       std     r31, 24(%r1)
+
+       li       r3, 0x3030
+       std      r3, -96(%r1)
+       li       r4, 0x4040
+       std      r4, -104(%r1)
+       li       r5, 0x5050
+       std      r5, -112(%r1)
+       li       r6, 0x6060
+       std      r6, -120(%r1)
+       li       r7, 0x7070
+       std      r7, -128(%r1)
+       li       r8, 0x0808
+       std      r8, -136(%r1)
+       li       r9, 0x0909
+       std      r9, -144(%r1)
+       li      r10, 0x1010
+       std     r10, -152(%r1)
+       li      r11, 0x1111
+       std     r11, -160(%r1)
+       li      r14, 0x1414
+       std     r14, -168(%r1)
+       li      r15, 0x1515
+       std     r15, -176(%r1)
+       li      r16, 0x1616
+       std     r16, -184(%r1)
+       li      r17, 0x1717
+       std     r17, -192(%r1)
+       li      r18, 0x1818
+       std     r18, -200(%r1)
+       li      r19, 0x1919
+       std     r19, -208(%r1)
+       li      r20, 0x2020
+       std     r20, -216(%r1)
+       li      r21, 0x2121
+       std     r21, -224(%r1)
+       li      r22, 0x2222
+       std     r22, -232(%r1)
+       li      r23, 0x2323
+       std     r23, -240(%r1)
+       li      r24, 0x2424
+       std     r24, -248(%r1)
+       li      r25, 0x2525
+       std     r25, -256(%r1)
+       li      r26, 0x2626
+       std     r26, -264(%r1)
+       li      r27, 0x2727
+       std     r27, -272(%r1)
+       li      r28, 0x2828
+       std     r28, -280(%r1)
+       li      r29, 0x2929
+       std     r29, -288(%r1)
+       li      r30, 0x3030
+       li      r31, 0x3131
+
+       li      r3, 0
+0:     addi    r3, r3, 1
+       cmpwi   r3, 100
+       blt     0b
+
+       /* Return 1 (fail) unless we get through all the checks */
+       li      r3, 1
+
+       /* Check none of our registers have been corrupted */
+       cmpwi   r4,  0x4040
+       bne     1f
+       cmpwi   r5,  0x5050
+       bne     1f
+       cmpwi   r6,  0x6060
+       bne     1f
+       cmpwi   r7,  0x7070
+       bne     1f
+       cmpwi   r8,  0x0808
+       bne     1f
+       cmpwi   r9,  0x0909
+       bne     1f
+       cmpwi   r10, 0x1010
+       bne     1f
+       cmpwi   r11, 0x1111
+       bne     1f
+       cmpwi   r14, 0x1414
+       bne     1f
+       cmpwi   r15, 0x1515
+       bne     1f
+       cmpwi   r16, 0x1616
+       bne     1f
+       cmpwi   r17, 0x1717
+       bne     1f
+       cmpwi   r18, 0x1818
+       bne     1f
+       cmpwi   r19, 0x1919
+       bne     1f
+       cmpwi   r20, 0x2020
+       bne     1f
+       cmpwi   r21, 0x2121
+       bne     1f
+       cmpwi   r22, 0x2222
+       bne     1f
+       cmpwi   r23, 0x2323
+       bne     1f
+       cmpwi   r24, 0x2424
+       bne     1f
+       cmpwi   r25, 0x2525
+       bne     1f
+       cmpwi   r26, 0x2626
+       bne     1f
+       cmpwi   r27, 0x2727
+       bne     1f
+       cmpwi   r28, 0x2828
+       bne     1f
+       cmpwi   r29, 0x2929
+       bne     1f
+       cmpwi   r30, 0x3030
+       bne     1f
+       cmpwi   r31, 0x3131
+       bne     1f
+
+       /* Load junk into all our registers before we reload them from the stack. */
+       li      r3,  0xde
+       li      r4,  0xad
+       li      r5,  0xbe
+       li      r6,  0xef
+       li      r7,  0xde
+       li      r8,  0xad
+       li      r9,  0xbe
+       li      r10, 0xef
+       li      r11, 0xde
+       li      r14, 0xad
+       li      r15, 0xbe
+       li      r16, 0xef
+       li      r17, 0xde
+       li      r18, 0xad
+       li      r19, 0xbe
+       li      r20, 0xef
+       li      r21, 0xde
+       li      r22, 0xad
+       li      r23, 0xbe
+       li      r24, 0xef
+       li      r25, 0xde
+       li      r26, 0xad
+       li      r27, 0xbe
+       li      r28, 0xef
+       li      r29, 0xdd
+
+       ld      r3,     -96(%r1)
+       cmpwi   r3,  0x3030
+       bne     1f
+       ld      r4,     -104(%r1)
+       cmpwi   r4,  0x4040
+       bne     1f
+       ld      r5,     -112(%r1)
+       cmpwi   r5,  0x5050
+       bne     1f
+       ld      r6,     -120(%r1)
+       cmpwi   r6,  0x6060
+       bne     1f
+       ld      r7,     -128(%r1)
+       cmpwi   r7,  0x7070
+       bne     1f
+       ld      r8,     -136(%r1)
+       cmpwi   r8,  0x0808
+       bne     1f
+       ld      r9,     -144(%r1)
+       cmpwi   r9,  0x0909
+       bne     1f
+       ld      r10, -152(%r1)
+       cmpwi   r10, 0x1010
+       bne     1f
+       ld      r11, -160(%r1)
+       cmpwi   r11, 0x1111
+       bne     1f
+       ld      r14, -168(%r1)
+       cmpwi   r14, 0x1414
+       bne     1f
+       ld      r15, -176(%r1)
+       cmpwi   r15, 0x1515
+       bne     1f
+       ld      r16, -184(%r1)
+       cmpwi   r16, 0x1616
+       bne     1f
+       ld      r17, -192(%r1)
+       cmpwi   r17, 0x1717
+       bne     1f
+       ld      r18, -200(%r1)
+       cmpwi   r18, 0x1818
+       bne     1f
+       ld      r19, -208(%r1)
+       cmpwi   r19, 0x1919
+       bne     1f
+       ld      r20, -216(%r1)
+       cmpwi   r20, 0x2020
+       bne     1f
+       ld      r21, -224(%r1)
+       cmpwi   r21, 0x2121
+       bne     1f
+       ld      r22, -232(%r1)
+       cmpwi   r22, 0x2222
+       bne     1f
+       ld      r23, -240(%r1)
+       cmpwi   r23, 0x2323
+       bne     1f
+       ld      r24, -248(%r1)
+       cmpwi   r24, 0x2424
+       bne     1f
+       ld      r25, -256(%r1)
+       cmpwi   r25, 0x2525
+       bne     1f
+       ld      r26, -264(%r1)
+       cmpwi   r26, 0x2626
+       bne     1f
+       ld      r27, -272(%r1)
+       cmpwi   r27, 0x2727
+       bne     1f
+       ld      r28, -280(%r1)
+       cmpwi   r28, 0x2828
+       bne     1f
+       ld      r29, -288(%r1)
+       cmpwi   r29, 0x2929
+       bne     1f
+
+       /* Load 0 (success) to return */
+       li      r3, 0
+
+1:     ld      r14, 160(%r1)
+       ld      r15, 152(%r1)
+       ld      r16, 144(%r1)
+       ld      r17, 136(%r1)
+       ld      r18, 128(%r1)
+       ld      r19, 120(%r1)
+       ld      r20, 112(%r1)
+       ld      r21, 104(%r1)
+       ld      r22, 96(%r1)
+       ld      r23, 88(%r1)
+       ld      r24, 80(%r1)
+       ld      r25, 72(%r1)
+       ld      r26, 64(%r1)
+       ld      r27, 56(%r1)
+       ld      r28, 48(%r1)
+       ld      r29, 40(%r1)
+       ld      r30, 32(%r1)
+       ld      r31, 24(%r1)
+       addi    %r1, %r1, 168
+       blr