Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/powerpc/kernel/epapr_hcalls.S
26424 views
1
/* SPDX-License-Identifier: GPL-2.0-or-later */
2
/*
3
* Copyright (C) 2012 Freescale Semiconductor, Inc.
4
*/
5
6
#include <linux/export.h>
7
#include <linux/threads.h>
8
#include <asm/epapr_hcalls.h>
9
#include <asm/reg.h>
10
#include <asm/page.h>
11
#include <asm/cputable.h>
12
#include <asm/thread_info.h>
13
#include <asm/ppc_asm.h>
14
#include <asm/asm-compat.h>
15
#include <asm/asm-offsets.h>
16
17
#ifndef CONFIG_PPC64
18
/* epapr_ev_idle() was derived from e500_idle() */
19
_GLOBAL(epapr_ev_idle)
20
PPC_LL r4, TI_LOCAL_FLAGS(r2) /* set napping bit */
21
ori r4, r4,_TLF_NAPPING /* so when we take an exception */
22
PPC_STL r4, TI_LOCAL_FLAGS(r2) /* it will return to our caller */
23
24
#ifdef CONFIG_BOOKE
25
wrteei 1
26
#else
27
mfmsr r4
28
ori r4, r4, MSR_EE
29
mtmsr r4
30
#endif
31
32
idle_loop:
33
LOAD_REG_IMMEDIATE(r11, EV_HCALL_TOKEN(EV_IDLE))
34
35
.global epapr_ev_idle_start
36
epapr_ev_idle_start:
37
li r3, -1
38
nop
39
nop
40
nop
41
42
/*
43
* Guard against spurious wakeups from a hypervisor --
44
* only interrupt will cause us to return to LR due to
45
* _TLF_NAPPING.
46
*/
47
b idle_loop
48
#endif
49
50
/* Hypercall entry point. Will be patched with device tree instructions. */
51
.global epapr_hypercall_start
52
epapr_hypercall_start:
53
li r3, -1
54
nop
55
nop
56
nop
57
blr
58
EXPORT_SYMBOL(epapr_hypercall_start)
59
60