1
2
3
4
5
6 #include <asm/asm-offsets.h>
7 #include <asm/ppc_asm.h>
8 #include <asm/reg.h>
9
10 #include "subcore.h"
11
12
13 _GLOBAL(split_core_secondary_loop)
14
15
16
17
18
19
20
21 mfmsr r12
22
23
24 li r4,0
25 ori r4,r4,MSR_EE|MSR_SE|MSR_BE|MSR_RI
26 andc r4,r12,r4
27 sync
28 mtmsrd r4
29
30
31 li r5, MSR_IR|MSR_DR
32 andc r5, r4, r5
33
34 LOAD_REG_ADDR(r4, real_mode)
35
36 mtspr SPRN_SRR0,r4
37 mtspr SPRN_SRR1,r5
38 rfid
39 b .
40
41 real_mode:
42
43 mfspr r6, SPRN_LDBAR
44 mfspr r7, SPRN_PMMAR
45 mfspr r8, SPRN_PMCR
46 mfspr r9, SPRN_RPR
47 mfspr r10, SPRN_SDR1
48
49
50 sync
51
52
53 li r4, SYNC_STEP_REAL_MODE
54 stb r4, 0(r3)
55
56 li r5, (HID0_POWER8_4LPARMODE | HID0_POWER8_2LPARMODE)@highest
57 sldi r5, r5, 48
58
59
60 1: mfspr r4, SPRN_HID0
61 and. r4, r4, r5
62 beq 1b
63
64
65
66
67
68
69
70 li r4, 0
71 mtspr SPRN_LPID, r4
72 mtspr SPRN_PCR, r4
73 mtspr SPRN_HDEC, r4
74
75
76 mtspr SPRN_LDBAR, r6
77 mtspr SPRN_PMMAR, r7
78 mtspr SPRN_PMCR, r8
79 mtspr SPRN_RPR, r9
80 mtspr SPRN_SDR1, r10
81
82 LOAD_REG_ADDR(r5, virtual_mode)
83
84
85 mtspr SPRN_SRR0,r5
86 mtspr SPRN_SRR1,r12
87 rfid
88 b .
89
90 virtual_mode:
91 blr