diff options
Diffstat (limited to 'arch/powerpc/kernel/epapr_hcalls.S')
| -rw-r--r-- | arch/powerpc/kernel/epapr_hcalls.S | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/arch/powerpc/kernel/epapr_hcalls.S b/arch/powerpc/kernel/epapr_hcalls.S index 697b390ebfd8..62c0dc237826 100644 --- a/arch/powerpc/kernel/epapr_hcalls.S +++ b/arch/powerpc/kernel/epapr_hcalls.S | |||
| @@ -8,13 +8,41 @@ | |||
| 8 | */ | 8 | */ |
| 9 | 9 | ||
| 10 | #include <linux/threads.h> | 10 | #include <linux/threads.h> |
| 11 | #include <asm/epapr_hcalls.h> | ||
| 11 | #include <asm/reg.h> | 12 | #include <asm/reg.h> |
| 12 | #include <asm/page.h> | 13 | #include <asm/page.h> |
| 13 | #include <asm/cputable.h> | 14 | #include <asm/cputable.h> |
| 14 | #include <asm/thread_info.h> | 15 | #include <asm/thread_info.h> |
| 15 | #include <asm/ppc_asm.h> | 16 | #include <asm/ppc_asm.h> |
| 17 | #include <asm/asm-compat.h> | ||
| 16 | #include <asm/asm-offsets.h> | 18 | #include <asm/asm-offsets.h> |
| 17 | 19 | ||
| 20 | /* epapr_ev_idle() was derived from e500_idle() */ | ||
| 21 | _GLOBAL(epapr_ev_idle) | ||
| 22 | CURRENT_THREAD_INFO(r3, r1) | ||
| 23 | PPC_LL r4, TI_LOCAL_FLAGS(r3) /* set napping bit */ | ||
| 24 | ori r4, r4,_TLF_NAPPING /* so when we take an exception */ | ||
| 25 | PPC_STL r4, TI_LOCAL_FLAGS(r3) /* it will return to our caller */ | ||
| 26 | |||
| 27 | wrteei 1 | ||
| 28 | |||
| 29 | idle_loop: | ||
| 30 | LOAD_REG_IMMEDIATE(r11, EV_HCALL_TOKEN(EV_IDLE)) | ||
| 31 | |||
| 32 | .global epapr_ev_idle_start | ||
| 33 | epapr_ev_idle_start: | ||
| 34 | li r3, -1 | ||
| 35 | nop | ||
| 36 | nop | ||
| 37 | nop | ||
| 38 | |||
| 39 | /* | ||
| 40 | * Guard against spurious wakeups from a hypervisor -- | ||
| 41 | * only interrupt will cause us to return to LR due to | ||
| 42 | * _TLF_NAPPING. | ||
| 43 | */ | ||
| 44 | b idle_loop | ||
| 45 | |||
| 18 | /* Hypercall entry point. Will be patched with device tree instructions. */ | 46 | /* Hypercall entry point. Will be patched with device tree instructions. */ |
| 19 | .global epapr_hypercall_start | 47 | .global epapr_hypercall_start |
| 20 | epapr_hypercall_start: | 48 | epapr_hypercall_start: |
