diff options
author | Nicholas Piggin <npiggin@gmail.com> | 2016-09-21 03:43:55 -0400 |
---|---|---|
committer | Michael Ellerman <mpe@ellerman.id.au> | 2016-10-03 22:07:10 -0400 |
commit | 792cbddd628282027f99f5499f2899613e07f8f9 (patch) | |
tree | e211722373d03f45b577a29660c3f194402f3352 /arch/powerpc/kernel/exceptions-64s.S | |
parent | d1a0ca9c8bdadb76f08e80f6ebf9f64a69f5b6d1 (diff) |
powerpc/64s: Consolidate VSX Unavailable 0xf40 interrupt
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Diffstat (limited to 'arch/powerpc/kernel/exceptions-64s.S')
-rw-r--r-- | arch/powerpc/kernel/exceptions-64s.S | 74 |
1 files changed, 36 insertions, 38 deletions
diff --git a/arch/powerpc/kernel/exceptions-64s.S b/arch/powerpc/kernel/exceptions-64s.S index 5b81ecf7c1a7..f8015d22657f 100644 --- a/arch/powerpc/kernel/exceptions-64s.S +++ b/arch/powerpc/kernel/exceptions-64s.S | |||
@@ -1074,6 +1074,42 @@ END_FTR_SECTION_IFSET(CPU_FTR_ALTIVEC) | |||
1074 | 1074 | ||
1075 | 1075 | ||
1076 | __EXC_REAL_OOL(vsx_unavailable, 0xf40, 0xf60) | 1076 | __EXC_REAL_OOL(vsx_unavailable, 0xf40, 0xf60) |
1077 | __TRAMP_REAL_REAL_OOL(vsx_unavailable, 0xf40) | ||
1078 | __EXC_VIRT_OOL(vsx_unavailable, 0x4f40, 0x4f60) | ||
1079 | __TRAMP_REAL_VIRT_OOL(vsx_unavailable, 0xf40) | ||
1080 | TRAMP_KVM(PACA_EXGEN, 0xf40) | ||
1081 | EXC_COMMON_BEGIN(vsx_unavailable_common) | ||
1082 | EXCEPTION_PROLOG_COMMON(0xf40, PACA_EXGEN) | ||
1083 | #ifdef CONFIG_VSX | ||
1084 | BEGIN_FTR_SECTION | ||
1085 | beq 1f | ||
1086 | #ifdef CONFIG_PPC_TRANSACTIONAL_MEM | ||
1087 | BEGIN_FTR_SECTION_NESTED(69) | ||
1088 | /* Test if 2 TM state bits are zero. If non-zero (ie. userspace was in | ||
1089 | * transaction), go do TM stuff | ||
1090 | */ | ||
1091 | rldicl. r0, r12, (64-MSR_TS_LG), (64-2) | ||
1092 | bne- 2f | ||
1093 | END_FTR_SECTION_NESTED(CPU_FTR_TM, CPU_FTR_TM, 69) | ||
1094 | #endif | ||
1095 | b load_up_vsx | ||
1096 | #ifdef CONFIG_PPC_TRANSACTIONAL_MEM | ||
1097 | 2: /* User process was in a transaction */ | ||
1098 | bl save_nvgprs | ||
1099 | RECONCILE_IRQ_STATE(r10, r11) | ||
1100 | addi r3,r1,STACK_FRAME_OVERHEAD | ||
1101 | bl vsx_unavailable_tm | ||
1102 | b ret_from_except | ||
1103 | #endif | ||
1104 | 1: | ||
1105 | END_FTR_SECTION_IFSET(CPU_FTR_VSX) | ||
1106 | #endif | ||
1107 | bl save_nvgprs | ||
1108 | RECONCILE_IRQ_STATE(r10, r11) | ||
1109 | addi r3,r1,STACK_FRAME_OVERHEAD | ||
1110 | bl vsx_unavailable_exception | ||
1111 | b ret_from_except | ||
1112 | |||
1077 | 1113 | ||
1078 | __EXC_REAL_OOL(facility_unavailable, 0xf60, 0xf80) | 1114 | __EXC_REAL_OOL(facility_unavailable, 0xf60, 0xf80) |
1079 | 1115 | ||
@@ -1205,9 +1241,6 @@ END_FTR_SECTION_IFSET(CPU_FTR_CFAR) | |||
1205 | #endif | 1241 | #endif |
1206 | 1242 | ||
1207 | /* moved from 0xf00 */ | 1243 | /* moved from 0xf00 */ |
1208 | __TRAMP_REAL_REAL_OOL(vsx_unavailable, 0xf40) | ||
1209 | TRAMP_KVM(PACA_EXGEN, 0xf40) | ||
1210 | |||
1211 | __TRAMP_REAL_REAL_OOL(facility_unavailable, 0xf60) | 1244 | __TRAMP_REAL_REAL_OOL(facility_unavailable, 0xf60) |
1212 | TRAMP_KVM(PACA_EXGEN, 0xf60) | 1245 | TRAMP_KVM(PACA_EXGEN, 0xf60) |
1213 | 1246 | ||
@@ -1358,8 +1391,6 @@ EXC_COMMON(altivec_assist_common, 0x1700, unknown_exception) | |||
1358 | * come here. | 1391 | * come here. |
1359 | */ | 1392 | */ |
1360 | 1393 | ||
1361 | __EXC_VIRT_OOL(vsx_unavailable, 0x4f40, 0x4f60) | ||
1362 | |||
1363 | __EXC_VIRT_OOL(facility_unavailable, 0x4f60, 0x4f80) | 1394 | __EXC_VIRT_OOL(facility_unavailable, 0x4f60, 0x4f80) |
1364 | 1395 | ||
1365 | __EXC_VIRT_OOL_HV(h_facility_unavailable, 0x4f80, 0x4fa0) | 1396 | __EXC_VIRT_OOL_HV(h_facility_unavailable, 0x4f80, 0x4fa0) |
@@ -1387,40 +1418,7 @@ EXC_VIRT_NONE(0x5800, 0x5900) | |||
1387 | EXC_COMMON_BEGIN(ppc64_runlatch_on_trampoline) | 1418 | EXC_COMMON_BEGIN(ppc64_runlatch_on_trampoline) |
1388 | b __ppc64_runlatch_on | 1419 | b __ppc64_runlatch_on |
1389 | 1420 | ||
1390 | EXC_COMMON_BEGIN(vsx_unavailable_common) | ||
1391 | EXCEPTION_PROLOG_COMMON(0xf40, PACA_EXGEN) | ||
1392 | #ifdef CONFIG_VSX | ||
1393 | BEGIN_FTR_SECTION | ||
1394 | beq 1f | ||
1395 | #ifdef CONFIG_PPC_TRANSACTIONAL_MEM | ||
1396 | BEGIN_FTR_SECTION_NESTED(69) | ||
1397 | /* Test if 2 TM state bits are zero. If non-zero (ie. userspace was in | ||
1398 | * transaction), go do TM stuff | ||
1399 | */ | ||
1400 | rldicl. r0, r12, (64-MSR_TS_LG), (64-2) | ||
1401 | bne- 2f | ||
1402 | END_FTR_SECTION_NESTED(CPU_FTR_TM, CPU_FTR_TM, 69) | ||
1403 | #endif | ||
1404 | b load_up_vsx | ||
1405 | #ifdef CONFIG_PPC_TRANSACTIONAL_MEM | ||
1406 | 2: /* User process was in a transaction */ | ||
1407 | bl save_nvgprs | ||
1408 | RECONCILE_IRQ_STATE(r10, r11) | ||
1409 | addi r3,r1,STACK_FRAME_OVERHEAD | ||
1410 | bl vsx_unavailable_tm | ||
1411 | b ret_from_except | ||
1412 | #endif | ||
1413 | 1: | ||
1414 | END_FTR_SECTION_IFSET(CPU_FTR_VSX) | ||
1415 | #endif | ||
1416 | bl save_nvgprs | ||
1417 | RECONCILE_IRQ_STATE(r10, r11) | ||
1418 | addi r3,r1,STACK_FRAME_OVERHEAD | ||
1419 | bl vsx_unavailable_exception | ||
1420 | b ret_from_except | ||
1421 | |||
1422 | /* Equivalents to the above handlers for relocation-on interrupt vectors */ | 1421 | /* Equivalents to the above handlers for relocation-on interrupt vectors */ |
1423 | __TRAMP_REAL_VIRT_OOL(vsx_unavailable, 0xf40) | ||
1424 | __TRAMP_REAL_VIRT_OOL(facility_unavailable, 0xf60) | 1422 | __TRAMP_REAL_VIRT_OOL(facility_unavailable, 0xf60) |
1425 | __TRAMP_REAL_VIRT_OOL_HV(h_facility_unavailable, 0xf80) | 1423 | __TRAMP_REAL_VIRT_OOL_HV(h_facility_unavailable, 0xf80) |
1426 | 1424 | ||