0001
0002
0003
0004
0005
0006 #include <asm/asm-offsets.h>
0007 #include <asm/ppc_asm.h>
0008 #include <asm/reg.h>
0009
0010 #include "subcore.h"
0011
0012
0013 _GLOBAL(split_core_secondary_loop)
0014
0015
0016
0017
0018
0019
0020
0021 mfmsr r12
0022
0023
0024 li r4,0
0025 ori r4,r4,MSR_EE|MSR_SE|MSR_BE|MSR_RI
0026 andc r4,r12,r4
0027 sync
0028 mtmsrd r4
0029
0030
0031 li r5, MSR_IR|MSR_DR
0032 andc r5, r4, r5
0033
0034 LOAD_REG_ADDR(r4, real_mode)
0035
0036 mtspr SPRN_SRR0,r4
0037 mtspr SPRN_SRR1,r5
0038 rfid
0039 b .
0040
0041 real_mode:
0042
0043 mfspr r6, SPRN_LDBAR
0044 mfspr r7, SPRN_PMMAR
0045 mfspr r8, SPRN_PMCR
0046 mfspr r9, SPRN_RPR
0047 mfspr r10, SPRN_SDR1
0048
0049
0050 sync
0051
0052
0053 li r4, SYNC_STEP_REAL_MODE
0054 stb r4, 0(r3)
0055
0056 li r5, (HID0_POWER8_4LPARMODE | HID0_POWER8_2LPARMODE)@highest
0057 sldi r5, r5, 48
0058
0059
0060 1: mfspr r4, SPRN_HID0
0061 and. r4, r4, r5
0062 beq 1b
0063
0064
0065
0066
0067
0068
0069
0070 li r4, 0
0071 mtspr SPRN_LPID, r4
0072 mtspr SPRN_PCR, r4
0073 mtspr SPRN_HDEC, r4
0074
0075
0076 mtspr SPRN_LDBAR, r6
0077 mtspr SPRN_PMMAR, r7
0078 mtspr SPRN_PMCR, r8
0079 mtspr SPRN_RPR, r9
0080 mtspr SPRN_SDR1, r10
0081
0082 LOAD_REG_ADDR(r5, virtual_mode)
0083
0084
0085 mtspr SPRN_SRR0,r5
0086 mtspr SPRN_SRR1,r12
0087 rfid
0088 b .
0089
0090 virtual_mode:
0091 blr