| /* SPDX-License-Identifier: GPL-2.0-only */ |
| /* |
| * Copyright 2014, Michael Ellerman, IBM Corp. |
| */ |
| |
| #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 |