1/* $Id: ttable.S,v 1.36.2.1 2002/03/03 10:31:56 davem Exp $ 2 * ttable.S: Sparc V9 Trap Table(s) with SpitFire/Cheetah extensions. 3 * 4 * Copyright (C) 1996, 2001 David S. Miller (davem@caip.rutgers.edu) 5 */ 6 7#include <linux/config.h> 8 9 .globl sparc64_ttable_tl0, sparc64_ttable_tl1 10 .globl tl0_icpe, tl1_icpe 11 .globl tl0_dcpe, tl1_dcpe 12 .globl tl0_fecc, tl1_fecc 13 .globl tl0_cee, tl1_cee 14 .globl tl0_iae, tl1_iae 15 .globl tl0_dae, tl1_dae 16 17sparc64_ttable_tl0: 18tl0_resv000: BOOT_KERNEL BTRAP(0x1) BTRAP(0x2) BTRAP(0x3) 19tl0_resv004: BTRAP(0x4) BTRAP(0x5) BTRAP(0x6) BTRAP(0x7) 20tl0_iax: membar #Sync 21 TRAP_NOSAVE_7INSNS(__spitfire_insn_access_exception) 22tl0_resv009: BTRAP(0x9) 23tl0_iae: membar #Sync 24 TRAP_NOSAVE_7INSNS(__spitfire_access_error) 25tl0_resv00b: BTRAP(0xb) BTRAP(0xc) BTRAP(0xd) BTRAP(0xe) BTRAP(0xf) 26tl0_ill: membar #Sync 27 TRAP_7INSNS(do_illegal_instruction) 28tl0_privop: TRAP(do_privop) 29tl0_resv012: BTRAP(0x12) BTRAP(0x13) BTRAP(0x14) BTRAP(0x15) BTRAP(0x16) BTRAP(0x17) 30tl0_resv018: BTRAP(0x18) BTRAP(0x19) BTRAP(0x1a) BTRAP(0x1b) BTRAP(0x1c) BTRAP(0x1d) 31tl0_resv01e: BTRAP(0x1e) BTRAP(0x1f) 32tl0_fpdis: TRAP_NOSAVE(do_fpdis) 33tl0_fpieee: TRAP_SAVEFPU(do_fpieee) 34tl0_fpother: TRAP_NOSAVE(do_fpother_check_fitos) 35tl0_tof: TRAP(do_tof) 36tl0_cwin: CLEAN_WINDOW 37tl0_div0: TRAP(do_div0) 38tl0_resv029: BTRAP(0x29) BTRAP(0x2a) BTRAP(0x2b) BTRAP(0x2c) BTRAP(0x2d) BTRAP(0x2e) 39tl0_resv02f: BTRAP(0x2f) 40tl0_dax: TRAP_NOSAVE(__spitfire_data_access_exception) 41tl0_resv031: BTRAP(0x31) 42tl0_dae: membar #Sync 43 TRAP_NOSAVE_7INSNS(__spitfire_access_error) 44tl0_resv033: BTRAP(0x33) 45tl0_mna: TRAP_NOSAVE(do_mna) 46tl0_lddfmna: TRAP_NOSAVE(do_lddfmna) 47tl0_stdfmna: TRAP_NOSAVE(do_stdfmna) 48tl0_privact: TRAP_NOSAVE(__do_privact) 49tl0_resv038: BTRAP(0x38) BTRAP(0x39) BTRAP(0x3a) BTRAP(0x3b) BTRAP(0x3c) BTRAP(0x3d) 50tl0_resv03e: BTRAP(0x3e) BTRAP(0x3f) BTRAP(0x40) 51#ifdef CONFIG_SMP 52tl0_irq1: TRAP_IRQ(smp_call_function_client, 1) 53tl0_irq2: TRAP_IRQ(smp_receive_signal_client, 2) 54tl0_irq3: TRAP_IRQ(smp_penguin_jailcell, 3) 55#else 56tl0_irq1: BTRAP(0x41) 57tl0_irq2: BTRAP(0x42) 58tl0_irq3: BTRAP(0x43) 59#endif 60tl0_irq4: TRAP_IRQ(handler_irq, 4) 61tl0_irq5: TRAP_IRQ(handler_irq, 5) TRAP_IRQ(handler_irq, 6) 62tl0_irq7: TRAP_IRQ(handler_irq, 7) TRAP_IRQ(handler_irq, 8) 63tl0_irq9: TRAP_IRQ(handler_irq, 9) TRAP_IRQ(handler_irq, 10) 64tl0_irq11: TRAP_IRQ(handler_irq, 11) TRAP_IRQ(handler_irq, 12) 65tl0_irq13: TRAP_IRQ(handler_irq, 13) 66#ifndef CONFIG_SMP 67tl0_irq14: TRAP_IRQ(handler_irq, 14) 68#else 69tl0_irq14: TICK_SMP_IRQ 70#endif 71tl0_irq15: TRAP_IRQ(handler_irq, 15) 72tl0_resv050: BTRAP(0x50) BTRAP(0x51) BTRAP(0x52) BTRAP(0x53) BTRAP(0x54) BTRAP(0x55) 73tl0_resv056: BTRAP(0x56) BTRAP(0x57) BTRAP(0x58) BTRAP(0x59) BTRAP(0x5a) BTRAP(0x5b) 74tl0_resv05c: BTRAP(0x5c) BTRAP(0x5d) BTRAP(0x5e) BTRAP(0x5f) 75tl0_ivec: TRAP_IVEC 76tl0_paw: TRAP(do_paw) 77tl0_vaw: TRAP(do_vaw) 78tl0_cee: membar #Sync 79 TRAP_NOSAVE_7INSNS(__spitfire_cee_trap) 80tl0_iamiss: 81#include "itlb_base.S" 82tl0_damiss: 83#include "dtlb_base.S" 84tl0_daprot: 85#include "dtlb_prot.S" 86tl0_fecc: BTRAP(0x70) /* Fast-ECC on Cheetah */ 87tl0_dcpe: BTRAP(0x71) /* D-cache Parity Error on Cheetah+ */ 88tl0_icpe: BTRAP(0x72) /* I-cache Parity Error on Cheetah+ */ 89tl0_resv073: BTRAP(0x73) BTRAP(0x74) BTRAP(0x75) 90tl0_resv076: BTRAP(0x76) BTRAP(0x77) BTRAP(0x78) BTRAP(0x79) BTRAP(0x7a) BTRAP(0x7b) 91tl0_resv07c: BTRAP(0x7c) BTRAP(0x7d) BTRAP(0x7e) BTRAP(0x7f) 92tl0_s0n: SPILL_0_NORMAL 93tl0_s1n: SPILL_1_NORMAL 94tl0_s2n: SPILL_2_NORMAL 95tl0_s3n: SPILL_3_NORMAL 96tl0_s4n: SPILL_4_NORMAL 97tl0_s5n: SPILL_5_NORMAL 98tl0_s6n: SPILL_6_NORMAL 99tl0_s7n: SPILL_7_NORMAL 100tl0_s0o: SPILL_0_OTHER 101tl0_s1o: SPILL_1_OTHER 102tl0_s2o: SPILL_2_OTHER 103tl0_s3o: SPILL_3_OTHER 104tl0_s4o: SPILL_4_OTHER 105tl0_s5o: SPILL_5_OTHER 106tl0_s6o: SPILL_6_OTHER 107tl0_s7o: SPILL_7_OTHER 108tl0_f0n: FILL_0_NORMAL 109tl0_f1n: FILL_1_NORMAL 110tl0_f2n: FILL_2_NORMAL 111tl0_f3n: FILL_3_NORMAL 112tl0_f4n: FILL_4_NORMAL 113tl0_f5n: FILL_5_NORMAL 114tl0_f6n: FILL_6_NORMAL 115tl0_f7n: FILL_7_NORMAL 116tl0_f0o: FILL_0_OTHER 117tl0_f1o: FILL_1_OTHER 118tl0_f2o: FILL_2_OTHER 119tl0_f3o: FILL_3_OTHER 120tl0_f4o: FILL_4_OTHER 121tl0_f5o: FILL_5_OTHER 122tl0_f6o: FILL_6_OTHER 123tl0_f7o: FILL_7_OTHER 124tl0_sunos: SUNOS_SYSCALL_TRAP 125tl0_bkpt: BREAKPOINT_TRAP 126tl0_divz: TRAP(do_div0) 127tl0_flushw: FLUSH_WINDOW_TRAP 128tl0_resv104: BTRAP(0x104) BTRAP(0x105) BTRAP(0x106) BTRAP(0x107) 129 .globl tl0_solaris 130tl0_solaris: SOLARIS_SYSCALL_TRAP 131tl0_netbsd: NETBSD_SYSCALL_TRAP 132tl0_resv10a: BTRAP(0x10a) BTRAP(0x10b) BTRAP(0x10c) BTRAP(0x10d) BTRAP(0x10e) 133tl0_resv10f: BTRAP(0x10f) 134tl0_linux32: LINUX_32BIT_SYSCALL_TRAP 135tl0_oldlinux64: LINUX_64BIT_SYSCALL_TRAP 136tl0_resv112: TRAP_UTRAP(UT_TRAP_INSTRUCTION_18,0x112) TRAP_UTRAP(UT_TRAP_INSTRUCTION_19,0x113) 137tl0_resv114: TRAP_UTRAP(UT_TRAP_INSTRUCTION_20,0x114) TRAP_UTRAP(UT_TRAP_INSTRUCTION_21,0x115) 138tl0_resv116: TRAP_UTRAP(UT_TRAP_INSTRUCTION_22,0x116) TRAP_UTRAP(UT_TRAP_INSTRUCTION_23,0x117) 139tl0_resv118: TRAP_UTRAP(UT_TRAP_INSTRUCTION_24,0x118) TRAP_UTRAP(UT_TRAP_INSTRUCTION_25,0x119) 140tl0_resv11a: TRAP_UTRAP(UT_TRAP_INSTRUCTION_26,0x11a) TRAP_UTRAP(UT_TRAP_INSTRUCTION_27,0x11b) 141tl0_resv11c: TRAP_UTRAP(UT_TRAP_INSTRUCTION_28,0x11c) TRAP_UTRAP(UT_TRAP_INSTRUCTION_29,0x11d) 142tl0_resv11e: TRAP_UTRAP(UT_TRAP_INSTRUCTION_30,0x11e) TRAP_UTRAP(UT_TRAP_INSTRUCTION_31,0x11f) 143tl0_getcc: GETCC_TRAP 144tl0_setcc: SETCC_TRAP 145tl0_getpsr: TRAP(do_getpsr) 146tl0_resv123: BTRAP(0x123) BTRAP(0x124) BTRAP(0x125) BTRAP(0x126) 147tl0_solindir: INDIRECT_SOLARIS_SYSCALL(156) 148tl0_resv128: BTRAP(0x128) BTRAP(0x129) BTRAP(0x12a) BTRAP(0x12b) BTRAP(0x12c) 149tl0_resv12d: BTRAP(0x12d) BTRAP(0x12e) BTRAP(0x12f) BTRAP(0x130) BTRAP(0x131) 150tl0_resv132: BTRAP(0x132) BTRAP(0x133) BTRAP(0x134) BTRAP(0x135) BTRAP(0x136) 151tl0_resv137: BTRAP(0x137) BTRAP(0x138) BTRAP(0x139) BTRAP(0x13a) BTRAP(0x13b) 152tl0_resv13c: BTRAP(0x13c) BTRAP(0x13d) BTRAP(0x13e) BTRAP(0x13f) BTRAP(0x140) 153tl0_resv141: BTRAP(0x141) BTRAP(0x142) BTRAP(0x143) BTRAP(0x144) BTRAP(0x145) 154tl0_resv146: BTRAP(0x146) BTRAP(0x147) BTRAP(0x148) BTRAP(0x149) BTRAP(0x14a) 155tl0_resv14b: BTRAP(0x14b) BTRAP(0x14c) BTRAP(0x14d) BTRAP(0x14e) BTRAP(0x14f) 156tl0_resv150: BTRAP(0x150) BTRAP(0x151) BTRAP(0x152) BTRAP(0x153) BTRAP(0x154) 157tl0_resv155: BTRAP(0x155) BTRAP(0x156) BTRAP(0x157) BTRAP(0x158) BTRAP(0x159) 158tl0_resv15a: BTRAP(0x15a) BTRAP(0x15b) BTRAP(0x15c) BTRAP(0x15d) BTRAP(0x15e) 159tl0_resv15f: BTRAP(0x15f) BTRAP(0x160) BTRAP(0x161) BTRAP(0x162) BTRAP(0x163) 160tl0_resv164: BTRAP(0x164) BTRAP(0x165) BTRAP(0x166) BTRAP(0x167) BTRAP(0x168) 161tl0_resv169: BTRAP(0x169) BTRAP(0x16a) BTRAP(0x16b) BTRAP(0x16c) 162tl0_linux64: LINUX_64BIT_SYSCALL_TRAP 163tl0_gsctx: TRAP(sparc64_get_context) TRAP(sparc64_set_context) 164tl0_resv170: BTRAP(0x170) BTRAP(0x171) BTRAP(0x172) 165tl0_resv173: BTRAP(0x173) BTRAP(0x174) BTRAP(0x175) BTRAP(0x176) BTRAP(0x177) 166tl0_resv178: BTRAP(0x178) BTRAP(0x179) BTRAP(0x17a) BTRAP(0x17b) BTRAP(0x17c) 167tl0_resv17d: BTRAP(0x17d) BTRAP(0x17e) BTRAP(0x17f) 168#define BTRAPS(x) BTRAP(x) BTRAP(x+1) BTRAP(x+2) BTRAP(x+3) BTRAP(x+4) BTRAP(x+5) BTRAP(x+6) BTRAP(x+7) 169tl0_resv180: BTRAPS(0x180) BTRAPS(0x188) 170tl0_resv190: BTRAPS(0x190) BTRAPS(0x198) 171tl0_resv1a0: BTRAPS(0x1a0) BTRAPS(0x1a8) 172tl0_resv1b0: BTRAPS(0x1b0) BTRAPS(0x1b8) 173tl0_resv1c0: BTRAPS(0x1c0) BTRAPS(0x1c8) 174tl0_resv1d0: BTRAPS(0x1d0) BTRAPS(0x1d8) 175tl0_resv1e0: BTRAPS(0x1e0) BTRAPS(0x1e8) 176tl0_resv1f0: BTRAPS(0x1f0) BTRAPS(0x1f8) 177 178sparc64_ttable_tl1: 179tl1_resv000: BOOT_KERNEL BTRAPTL1(0x1) BTRAPTL1(0x2) BTRAPTL1(0x3) 180tl1_resv004: BTRAPTL1(0x4) BTRAPTL1(0x5) BTRAPTL1(0x6) BTRAPTL1(0x7) 181tl1_iax: TRAP_NOSAVE(__spitfire_insn_access_exception_tl1) 182tl1_resv009: BTRAPTL1(0x9) 183tl1_iae: membar #Sync 184 TRAP_NOSAVE_7INSNS(__spitfire_access_error) 185tl1_resv00b: BTRAPTL1(0xb) BTRAPTL1(0xc) BTRAPTL1(0xd) BTRAPTL1(0xe) BTRAPTL1(0xf) 186tl1_ill: TRAPTL1(do_ill_tl1) 187tl1_privop: BTRAPTL1(0x11) 188tl1_resv012: BTRAPTL1(0x12) BTRAPTL1(0x13) BTRAPTL1(0x14) BTRAPTL1(0x15) 189tl1_resv016: BTRAPTL1(0x16) BTRAPTL1(0x17) BTRAPTL1(0x18) BTRAPTL1(0x19) 190tl1_resv01a: BTRAPTL1(0x1a) BTRAPTL1(0x1b) BTRAPTL1(0x1c) BTRAPTL1(0x1d) 191tl1_resv01e: BTRAPTL1(0x1e) BTRAPTL1(0x1f) 192tl1_fpdis: TRAP_NOSAVE(do_fpdis) 193tl1_fpieee: TRAPTL1(do_fpieee_tl1) 194tl1_fpother: TRAPTL1(do_fpother_tl1) 195tl1_tof: TRAPTL1(do_tof_tl1) 196tl1_cwin: CLEAN_WINDOW 197tl1_div0: TRAPTL1(do_div0_tl1) 198tl1_resv029: BTRAPTL1(0x29) BTRAPTL1(0x2a) BTRAPTL1(0x2b) BTRAPTL1(0x2c) 199tl1_resv02d: BTRAPTL1(0x2d) BTRAPTL1(0x2e) BTRAPTL1(0x2f) 200tl1_dax: TRAP_NOSAVE(__spitfire_data_access_exception_tl1) 201tl1_resv031: BTRAPTL1(0x31) 202tl1_dae: membar #Sync 203 TRAP_NOSAVE_7INSNS(__spitfire_access_error) 204tl1_resv033: BTRAPTL1(0x33) 205tl1_mna: TRAP_NOSAVE(do_mna) 206tl1_lddfmna: TRAPTL1(do_lddfmna_tl1) 207tl1_stdfmna: TRAPTL1(do_stdfmna_tl1) 208tl1_privact: BTRAPTL1(0x37) 209tl1_resv038: BTRAPTL1(0x38) BTRAPTL1(0x39) BTRAPTL1(0x3a) BTRAPTL1(0x3b) 210tl1_resv03c: BTRAPTL1(0x3c) BTRAPTL1(0x3d) BTRAPTL1(0x3e) BTRAPTL1(0x3f) 211tl1_resv040: BTRAPTL1(0x40) 212tl1_irq1: TRAP_IRQ(do_irq_tl1, 1) TRAP_IRQ(do_irq_tl1, 2) TRAP_IRQ(do_irq_tl1, 3) 213tl1_irq4: TRAP_IRQ(do_irq_tl1, 4) TRAP_IRQ(do_irq_tl1, 5) TRAP_IRQ(do_irq_tl1, 6) 214tl1_irq7: TRAP_IRQ(do_irq_tl1, 7) TRAP_IRQ(do_irq_tl1, 8) TRAP_IRQ(do_irq_tl1, 9) 215tl1_irq10: TRAP_IRQ(do_irq_tl1, 10) TRAP_IRQ(do_irq_tl1, 11) 216tl1_irq12: TRAP_IRQ(do_irq_tl1, 12) TRAP_IRQ(do_irq_tl1, 13) 217tl1_irq14: TRAP_IRQ(do_irq_tl1, 14) TRAP_IRQ(do_irq_tl1, 15) 218tl1_resv050: BTRAPTL1(0x50) BTRAPTL1(0x51) BTRAPTL1(0x52) BTRAPTL1(0x53) 219tl1_resv054: BTRAPTL1(0x54) BTRAPTL1(0x55) BTRAPTL1(0x56) BTRAPTL1(0x57) 220tl1_resv058: BTRAPTL1(0x58) BTRAPTL1(0x59) BTRAPTL1(0x5a) BTRAPTL1(0x5b) 221tl1_resv05c: BTRAPTL1(0x5c) BTRAPTL1(0x5d) BTRAPTL1(0x5e) BTRAPTL1(0x5f) 222tl1_ivec: TRAP_IVEC 223tl1_paw: TRAPTL1(do_paw_tl1) 224tl1_vaw: TRAPTL1(do_vaw_tl1) 225 226 /* The grotty trick to save %g1 into 227 * current->thread.kernel_cntd0 is because when we take this 228 * trap we could be interrupting trap code already using the 229 * trap alternate global registers. It is better to corrupt 230 * a performance counter than corrupt trap register state. 231 * We cross our fingers and pray that this store/load does 232 * not cause yet another CEE trap. 233 */ 234tl1_cee: membar #Sync 235 stx %g1, [%g6 + AOFF_task_thread + AOFF_thread_kernel_cntd0] 236 ldxa [%g0] ASI_AFSR, %g1 237 membar #Sync 238 stxa %g1, [%g0] ASI_AFSR 239 membar #Sync 240 ldx [%g6 + AOFF_task_thread + AOFF_thread_kernel_cntd0], %g1 241 retry 242 243tl1_iamiss: BTRAPTL1(0x64) BTRAPTL1(0x65) BTRAPTL1(0x66) BTRAPTL1(0x67) 244tl1_damiss: 245#include "dtlb_backend.S" 246tl1_daprot: 247#include "dtlb_prot.S" 248tl1_fecc: BTRAPTL1(0x70) /* Fast-ECC on Cheetah */ 249tl1_dcpe: BTRAPTL1(0x71) /* D-cache Parity Error on Cheetah+ */ 250tl1_icpe: BTRAPTL1(0x72) /* I-cache Parity Error on Cheetah+ */ 251tl1_resv073: BTRAPTL1(0x73) 252tl1_resv074: BTRAPTL1(0x74) BTRAPTL1(0x75) BTRAPTL1(0x76) BTRAPTL1(0x77) 253tl1_resv078: BTRAPTL1(0x78) BTRAPTL1(0x79) BTRAPTL1(0x7a) BTRAPTL1(0x7b) 254tl1_resv07c: BTRAPTL1(0x7c) BTRAPTL1(0x7d) BTRAPTL1(0x7e) BTRAPTL1(0x7f) 255tl1_s0n: SPILL_0_NORMAL 256tl1_s1n: SPILL_1_NORMAL 257tl1_s2n: SPILL_2_NORMAL 258tl1_s3n: SPILL_3_NORMAL 259tl1_s4n: SPILL_4_NORMAL 260tl1_s5n: SPILL_5_NORMAL 261tl1_s6n: SPILL_6_NORMAL 262tl1_s7n: SPILL_7_NORMAL 263tl1_s0o: SPILL_0_OTHER 264tl1_s1o: SPILL_1_OTHER 265tl1_s2o: SPILL_2_OTHER 266tl1_s3o: SPILL_3_OTHER 267tl1_s4o: SPILL_4_OTHER 268tl1_s5o: SPILL_5_OTHER 269tl1_s6o: SPILL_6_OTHER 270tl1_s7o: SPILL_7_OTHER 271tl1_f0n: FILL_0_NORMAL 272tl1_f1n: FILL_1_NORMAL 273tl1_f2n: FILL_2_NORMAL 274tl1_f3n: FILL_3_NORMAL 275tl1_f4n: FILL_4_NORMAL 276tl1_f5n: FILL_5_NORMAL 277tl1_f6n: FILL_6_NORMAL 278tl1_f7n: FILL_7_NORMAL 279tl1_f0o: FILL_0_OTHER 280tl1_f1o: FILL_1_OTHER 281tl1_f2o: FILL_2_OTHER 282tl1_f3o: FILL_3_OTHER 283tl1_f4o: FILL_4_OTHER 284tl1_f5o: FILL_5_OTHER 285tl1_f6o: FILL_6_OTHER 286tl1_f7o: FILL_7_OTHER 287