11 #include <linux/module.h>
12 #include <linux/sched.h>
13 #include <linux/linkage.h>
14 #include <linux/kernel.h>
15 #include <linux/signal.h>
21 #include <linux/reboot.h>
25 #include <asm/delay.h>
26 #include <asm/ptrace.h>
27 #include <asm/oplib.h>
29 #include <asm/pgtable.h>
30 #include <asm/unistd.h>
31 #include <asm/uaccess.h>
39 #include <asm/processor.h>
40 #include <asm/timer.h>
44 #include <asm/cacheflush.h>
69 "dumping track stack.\n", p->
tl);
71 limit = (
tlb_type == hypervisor) ? 2 : 4;
72 for (i = 0; i <
limit; i++) {
74 "TRAPLOG: Trap level %d TSTATE[%016lx] TPC[%016lx] "
75 "TNPC[%016lx] TT[%lx]\n",
89 0, lvl,
SIGTRAP) == NOTIFY_STOP)
93 sprintf(buffer,
"Bad hw trap %lx at tl0\n", lvl);
99 sprintf(buffer,
"Kernel bad sw trap %lx", lvl);
102 if (test_thread_flag(TIF_32BIT)) {
103 regs->tpc &= 0xffffffff;
104 regs->tnpc &= 0xffffffff;
109 info.si_addr = (
void __user *)regs->tpc;
110 info.si_trapno = lvl;
119 0, lvl,
SIGTRAP) == NOTIFY_STOP)
122 dump_tl1_traplog((
struct tl1_traplog *)(regs + 1));
124 sprintf (buffer,
"Bad trap %lx at tl>0", lvl);
128 #ifdef CONFIG_DEBUG_BUGVERBOSE
132 printk(
"kernel BUG at %s:%d!\n", file, line);
140 static int sprintf_dimm(
int synd_code,
unsigned long paddr,
char *
buf,
int buflen)
147 ret = dimm_handler(synd_code, paddr, buf, buflen);
155 spin_unlock_irqrestore(&dimm_handler_lock, flags);
170 spin_unlock_irqrestore(&dimm_handler_lock, flags);
181 if (dimm_handler == func)
183 spin_unlock_irqrestore(&dimm_handler_lock, flags);
192 0, 0x8,
SIGTRAP) == NOTIFY_STOP)
196 printk(
"spitfire_insn_access_exception: SFSR[%016lx] "
197 "SFAR[%016lx], going.\n", sfsr, sfar);
200 if (test_thread_flag(TIF_32BIT)) {
201 regs->tpc &= 0xffffffff;
202 regs->tnpc &= 0xffffffff;
207 info.si_addr = (
void __user *)regs->tpc;
215 0, 0x8,
SIGTRAP) == NOTIFY_STOP)
218 dump_tl1_traplog((
struct tl1_traplog *)(regs + 1));
224 unsigned short type = (type_ctx >> 16);
225 unsigned short ctx = (type_ctx & 0xffff);
229 0, 0x8,
SIGTRAP) == NOTIFY_STOP)
233 printk(
"sun4v_insn_access_exception: ADDR[%016lx] "
234 "CTX[%04x] TYPE[%04x], going.\n",
239 if (test_thread_flag(TIF_32BIT)) {
240 regs->tpc &= 0xffffffff;
241 regs->tnpc &= 0xffffffff;
246 info.si_addr = (
void __user *) addr;
254 0, 0x8,
SIGTRAP) == NOTIFY_STOP)
257 dump_tl1_traplog((
struct tl1_traplog *)(regs + 1));
266 0, 0x30,
SIGTRAP) == NOTIFY_STOP)
276 #ifdef DEBUG_EXCEPTIONS
277 printk(
"Exception: PC<%016lx> faddr<UNKNOWN>\n", regs->tpc);
278 printk(
"EX_TABLE: insn<%016lx> fixup<%016lx>\n",
279 regs->tpc, entry->
fixup);
281 regs->tpc = entry->
fixup;
282 regs->tnpc = regs->tpc + 4;
286 printk(
"spitfire_data_access_exception: SFSR[%016lx] "
287 "SFAR[%016lx], going.\n", sfsr, sfar);
294 info.si_addr = (
void __user *)sfar;
302 0, 0x30,
SIGTRAP) == NOTIFY_STOP)
305 dump_tl1_traplog((
struct tl1_traplog *)(regs + 1));
311 unsigned short type = (type_ctx >> 16);
312 unsigned short ctx = (type_ctx & 0xffff);
316 0, 0x8,
SIGTRAP) == NOTIFY_STOP)
326 #ifdef DEBUG_EXCEPTIONS
327 printk(
"Exception: PC<%016lx> faddr<UNKNOWN>\n", regs->tpc);
328 printk(
"EX_TABLE: insn<%016lx> fixup<%016lx>\n",
329 regs->tpc, entry->
fixup);
331 regs->tpc = entry->
fixup;
332 regs->tnpc = regs->tpc + 4;
335 printk(
"sun4v_data_access_exception: ADDR[%016lx] "
336 "CTX[%04x] TYPE[%04x], going.\n",
341 if (test_thread_flag(TIF_32BIT)) {
342 regs->tpc &= 0xffffffff;
343 regs->tnpc &= 0xffffffff;
348 info.si_addr = (
void __user *) addr;
356 0, 0x8,
SIGTRAP) == NOTIFY_STOP)
359 dump_tl1_traplog((
struct tl1_traplog *)(regs + 1));
364 #include "pci_impl.h"
368 static void spitfire_clean_and_reenable_l1_caches(
void)
376 for (va = 0; va < (
PAGE_SIZE << 1); va += 32) {
377 spitfire_put_icache_tag(va, 0x0);
378 spitfire_put_dcache_tag(va, 0x0);
382 __asm__ __volatile__(
"flush %%g6\n\t"
384 "stxa %0, [%%g0] %1\n\t"
393 static void spitfire_enable_estate_errors(
void)
395 __asm__ __volatile__(
"stxa %0, [%%g0] %1\n\t"
402 static char ecc_syndrome_table[] = {
403 0x4c, 0x40, 0x41, 0x48, 0x42, 0x48, 0x48, 0x49,
404 0x43, 0x48, 0x48, 0x49, 0x48, 0x49, 0x49, 0x4a,
405 0x44, 0x48, 0x48, 0x20, 0x48, 0x39, 0x4b, 0x48,
406 0x48, 0x25, 0x31, 0x48, 0x28, 0x48, 0x48, 0x2c,
407 0x45, 0x48, 0x48, 0x21, 0x48, 0x3d, 0x04, 0x48,
408 0x48, 0x4b, 0x35, 0x48, 0x2d, 0x48, 0x48, 0x29,
409 0x48, 0x00, 0x01, 0x48, 0x0a, 0x48, 0x48, 0x4b,
410 0x0f, 0x48, 0x48, 0x4b, 0x48, 0x49, 0x49, 0x48,
411 0x46, 0x48, 0x48, 0x2a, 0x48, 0x3b, 0x27, 0x48,
412 0x48, 0x4b, 0x33, 0x48, 0x22, 0x48, 0x48, 0x2e,
413 0x48, 0x19, 0x1d, 0x48, 0x1b, 0x4a, 0x48, 0x4b,
414 0x1f, 0x48, 0x4a, 0x4b, 0x48, 0x4b, 0x4b, 0x48,
415 0x48, 0x4b, 0x24, 0x48, 0x07, 0x48, 0x48, 0x36,
416 0x4b, 0x48, 0x48, 0x3e, 0x48, 0x30, 0x38, 0x48,
417 0x49, 0x48, 0x48, 0x4b, 0x48, 0x4b, 0x16, 0x48,
418 0x48, 0x12, 0x4b, 0x48, 0x49, 0x48, 0x48, 0x4b,
419 0x47, 0x48, 0x48, 0x2f, 0x48, 0x3f, 0x4b, 0x48,
420 0x48, 0x06, 0x37, 0x48, 0x23, 0x48, 0x48, 0x2b,
421 0x48, 0x05, 0x4b, 0x48, 0x4b, 0x48, 0x48, 0x32,
422 0x26, 0x48, 0x48, 0x3a, 0x48, 0x34, 0x3c, 0x48,
423 0x48, 0x11, 0x15, 0x48, 0x13, 0x4a, 0x48, 0x4b,
424 0x17, 0x48, 0x4a, 0x4b, 0x48, 0x4b, 0x4b, 0x48,
425 0x49, 0x48, 0x48, 0x4b, 0x48, 0x4b, 0x1e, 0x48,
426 0x48, 0x1a, 0x4b, 0x48, 0x49, 0x48, 0x48, 0x4b,
427 0x48, 0x08, 0x0d, 0x48, 0x02, 0x48, 0x48, 0x49,
428 0x03, 0x48, 0x48, 0x49, 0x48, 0x4b, 0x4b, 0x48,
429 0x49, 0x48, 0x48, 0x49, 0x48, 0x4b, 0x10, 0x48,
430 0x48, 0x14, 0x4b, 0x48, 0x4b, 0x48, 0x48, 0x4b,
431 0x49, 0x48, 0x48, 0x49, 0x48, 0x4b, 0x18, 0x48,
432 0x48, 0x1c, 0x4b, 0x48, 0x4b, 0x48, 0x48, 0x4b,
433 0x4a, 0x0c, 0x09, 0x48, 0x0e, 0x48, 0x48, 0x4b,
434 0x0b, 0x48, 0x48, 0x4b, 0x48, 0x4b, 0x4b, 0x4a
437 static char *syndrome_unknown =
"<Unknown>";
439 static void spitfire_log_udb_syndrome(
unsigned long afar,
unsigned long udbh,
unsigned long udbl,
unsigned long bit)
441 unsigned short scode;
442 char memmod_str[64], *
p;
445 scode = ecc_syndrome_table[udbl & 0xff];
446 if (sprintf_dimm(scode, afar, memmod_str,
sizeof(memmod_str)) < 0)
447 p = syndrome_unknown;
451 "Memory Module \"%s\"\n",
456 scode = ecc_syndrome_table[udbh & 0xff];
457 if (sprintf_dimm(scode, afar, memmod_str,
sizeof(memmod_str)) < 0)
458 p = syndrome_unknown;
462 "Memory Module \"%s\"\n",
468 static void spitfire_cee_log(
unsigned long afsr,
unsigned long afar,
unsigned long udbh,
unsigned long udbl,
int tl1,
struct pt_regs *
regs)
472 "AFSR[%lx] AFAR[%016lx] UDBL[%lx] UDBH[%lx] TL>1[%d]\n",
475 spitfire_log_udb_syndrome(afar, udbh, udbl,
UDBE_CE);
486 spitfire_enable_estate_errors();
489 static void spitfire_ue_log(
unsigned long afsr,
unsigned long afar,
unsigned long udbh,
unsigned long udbl,
unsigned long tt,
int tl1,
struct pt_regs *regs)
494 "AFAR[%lx] UDBL[%lx] UDBH[%ld] TT[%lx] TL>1[%d]\n",
501 spitfire_log_udb_syndrome(afar, udbh, udbl,
UDBE_UE);
511 dump_tl1_traplog((
struct tl1_traplog *)(regs + 1));
520 spitfire_clean_and_reenable_l1_caches();
521 spitfire_enable_estate_errors();
523 if (test_thread_flag(TIF_32BIT)) {
524 regs->tpc &= 0xffffffff;
525 regs->tnpc &= 0xffffffff;
530 info.si_addr = (
void *)0;
537 unsigned long afsr,
tt, udbh, udbl;
549 spitfire_clean_and_reenable_l1_caches();
550 spitfire_enable_estate_errors();
553 regs->tnpc = regs->tpc + 4;
559 spitfire_ue_log(afsr, afar, udbh, udbl, tt, tl1, regs);
565 if (afsr & SFAFSR_UE) {
568 "stxa %0, [%1] %2\n\t"
571 :
"r" (udbh & UDBE_CE),
574 if (udbl & UDBE_CE) {
576 "stxa %0, [%1] %2\n\t"
579 :
"r" (udbl & UDBE_CE),
584 spitfire_cee_log(afsr, afar, udbh, udbl, tl1, regs);
594 printk(
"CHEETAH: Enabling P-Cache on cpu %d.\n",
597 __asm__ __volatile__(
"ldxa [%%g0] %1, %0"
601 __asm__ __volatile__(
"stxa %0, [%%g0] %1\n\t"
608 static unsigned long ecache_flush_physbase;
609 static unsigned long ecache_flush_linesize;
610 static unsigned long ecache_flush_size;
621 static const char CHAFSR_PERR_msg[] =
622 "System interface protocol error";
623 static const char CHAFSR_IERR_msg[] =
624 "Internal processor error";
625 static const char CHAFSR_ISAP_msg[] =
626 "System request parity error on incoming address";
627 static const char CHAFSR_UCU_msg[] =
628 "Uncorrectable E-cache ECC error for ifetch/data";
629 static const char CHAFSR_UCC_msg[] =
630 "SW Correctable E-cache ECC error for ifetch/data";
631 static const char CHAFSR_UE_msg[] =
632 "Uncorrectable system bus data ECC error for read";
633 static const char CHAFSR_EDU_msg[] =
634 "Uncorrectable E-cache ECC error for stmerge/blkld";
635 static const char CHAFSR_EMU_msg[] =
636 "Uncorrectable system bus MTAG error";
637 static const char CHAFSR_WDU_msg[] =
638 "Uncorrectable E-cache ECC error for writeback";
639 static const char CHAFSR_CPU_msg[] =
640 "Uncorrectable ECC error for copyout";
641 static const char CHAFSR_CE_msg[] =
642 "HW corrected system bus data ECC error for read";
643 static const char CHAFSR_EDC_msg[] =
644 "HW corrected E-cache ECC error for stmerge/blkld";
645 static const char CHAFSR_EMC_msg[] =
646 "HW corrected system bus MTAG ECC error";
647 static const char CHAFSR_WDC_msg[] =
648 "HW corrected E-cache ECC error for writeback";
649 static const char CHAFSR_CPC_msg[] =
650 "HW corrected ECC error for copyout";
651 static const char CHAFSR_TO_msg[] =
652 "Unmapped error from system bus";
653 static const char CHAFSR_BERR_msg[] =
654 "Bus error response from system bus";
655 static const char CHAFSR_IVC_msg[] =
656 "HW corrected system bus data ECC error for ivec read";
657 static const char CHAFSR_IVU_msg[] =
658 "Uncorrectable system bus data ECC error for ivec read";
682 static const char CHPAFSR_DTO_msg[] =
683 "System bus unmapped error for prefetch/storequeue-read";
684 static const char CHPAFSR_DBERR_msg[] =
685 "System bus error for prefetch/storequeue-read";
686 static const char CHPAFSR_THCE_msg[] =
687 "Hardware corrected E-cache Tag ECC error";
688 static const char CHPAFSR_TSCE_msg[] =
689 "SW handled correctable E-cache Tag ECC error";
690 static const char CHPAFSR_TUE_msg[] =
691 "Uncorrectable E-cache Tag ECC error";
692 static const char CHPAFSR_DUE_msg[] =
693 "System bus uncorrectable data ECC error due to prefetch/store-fill";
723 static const char JPAFSR_JETO_msg[] =
724 "System interface protocol error, hw timeout caused";
725 static const char JPAFSR_SCE_msg[] =
726 "Parity error on system snoop results";
727 static const char JPAFSR_JEIC_msg[] =
728 "System interface protocol error, illegal command detected";
729 static const char JPAFSR_JEIT_msg[] =
730 "System interface protocol error, illegal ADTYPE detected";
731 static const char JPAFSR_OM_msg[] =
732 "Out of range memory error has occurred";
733 static const char JPAFSR_ETP_msg[] =
734 "Parity error on L2 cache tag SRAM";
735 static const char JPAFSR_UMS_msg[] =
736 "Error due to unsupported store";
737 static const char JPAFSR_RUE_msg[] =
738 "Uncorrectable ECC error from remote cache/memory";
739 static const char JPAFSR_RCE_msg[] =
740 "Correctable ECC error from remote cache/memory";
741 static const char JPAFSR_BP_msg[] =
742 "JBUS parity error on returned read data";
743 static const char JPAFSR_WBP_msg[] =
744 "JBUS parity error on data for writeback or block store";
745 static const char JPAFSR_FRC_msg[] =
746 "Foreign read to DRAM incurring correctable ECC error";
747 static const char JPAFSR_FRU_msg[] =
748 "Foreign read to DRAM incurring uncorrectable ECC error";
783 static unsigned long cheetah_afsr_errors;
787 static inline struct cheetah_err_info *cheetah_get_error_log(
unsigned long afsr)
792 if (!cheetah_error_log)
795 p = cheetah_error_log + (cpu * 2);
816 unsigned long largest_size, smallest_linesize,
order,
ver;
824 smallest_linesize = ~0
UL;
826 for (i = 0; i <
NR_CPUS; i++) {
833 if (val > largest_size)
837 if (val < smallest_linesize)
838 smallest_linesize =
val;
842 if (largest_size == 0
UL || smallest_linesize == ~0
UL) {
843 prom_printf(
"cheetah_ecache_flush_init: Cannot probe cpu E-cache "
848 ecache_flush_size = (2 * largest_size);
849 ecache_flush_linesize = smallest_linesize;
853 if (ecache_flush_physbase == ~0
UL) {
854 prom_printf(
"cheetah_ecache_flush_init: Cannot find %ld byte "
855 "contiguous physical memory.\n",
862 for (order = 0; order <
MAX_ORDER; order++) {
868 if (!cheetah_error_log) {
869 prom_printf(
"cheetah_ecache_flush_init: Failed to allocate "
870 "error logging scoreboard (%d bytes).\n", sz);
878 for (i = 0; i < 2 *
NR_CPUS; i++)
881 __asm__ (
"rdpr %%ver, %0" :
"=r" (ver));
884 cheetah_error_table = &__jalapeno_error_table[0];
886 }
else if ((ver >> 32) == 0x003e0015) {
887 cheetah_error_table = &__cheetah_plus_error_table[0];
890 cheetah_error_table = &__cheetah_error_table[0];
895 memcpy(tl0_fecc, cheetah_fecc_trap_vector, (8 * 4));
896 memcpy(tl1_fecc, cheetah_fecc_trap_vector_tl1, (8 * 4));
897 memcpy(tl0_cee, cheetah_cee_trap_vector, (8 * 4));
898 memcpy(tl1_cee, cheetah_cee_trap_vector_tl1, (8 * 4));
899 memcpy(tl0_iae, cheetah_deferred_trap_vector, (8 * 4));
900 memcpy(tl1_iae, cheetah_deferred_trap_vector_tl1, (8 * 4));
901 memcpy(tl0_dae, cheetah_deferred_trap_vector, (8 * 4));
902 memcpy(tl1_dae, cheetah_deferred_trap_vector_tl1, (8 * 4));
904 memcpy(tl0_dcpe, cheetah_plus_dcpe_trap_vector, (8 * 4));
905 memcpy(tl1_dcpe, cheetah_plus_dcpe_trap_vector_tl1, (8 * 4));
906 memcpy(tl0_icpe, cheetah_plus_icpe_trap_vector, (8 * 4));
907 memcpy(tl1_icpe, cheetah_plus_icpe_trap_vector_tl1, (8 * 4));
912 static void cheetah_flush_ecache(
void)
914 unsigned long flush_base = ecache_flush_physbase;
915 unsigned long flush_linesize = ecache_flush_linesize;
916 unsigned long flush_size = ecache_flush_size;
918 __asm__ __volatile__(
"1: subcc %0, %4, %0\n\t"
919 " bne,pt %%xcc, 1b\n\t"
920 " ldxa [%2 + %0] %3, %%g0\n\t"
922 :
"0" (flush_size),
"r" (flush_base),
926 static void cheetah_flush_ecache_line(
unsigned long physaddr)
930 physaddr &= ~(8
UL - 1
UL);
931 physaddr = (ecache_flush_physbase +
932 (physaddr & ((ecache_flush_size>>1
UL) - 1
UL)));
933 alias = physaddr + (ecache_flush_size >> 1
UL);
934 __asm__ __volatile__(
"ldxa [%0] %2, %%g0\n\t"
935 "ldxa [%1] %2, %%g0\n\t"
938 :
"r" (physaddr),
"r" (
alias),
947 static void __cheetah_flush_icache(
void)
949 unsigned int icache_size, icache_line_size;
956 for (addr = 0; addr < icache_size; addr += icache_line_size) {
957 __asm__ __volatile__(
"stxa %%g0, [%0] %1\n\t"
960 :
"r" (addr | (2 << 3)),
965 static void cheetah_flush_icache(
void)
967 unsigned long dcu_save;
970 __asm__ __volatile__(
"ldxa [%%g0] %1, %0\n\t"
971 "or %0, %2, %%g1\n\t"
972 "stxa %%g1, [%%g0] %1\n\t"
978 __cheetah_flush_icache();
981 __asm__ __volatile__(
"stxa %0, [%%g0] %1\n\t"
987 static void cheetah_flush_dcache(
void)
989 unsigned int dcache_size, dcache_line_size;
995 for (addr = 0; addr < dcache_size; addr += dcache_line_size) {
996 __asm__ __volatile__(
"stxa %%g0, [%0] %1\n\t"
1008 static void cheetah_plus_zap_dcache_parity(
void)
1010 unsigned int dcache_size, dcache_line_size;
1016 for (addr = 0; addr < dcache_size; addr += dcache_line_size) {
1017 unsigned long tag = (addr >> 14);
1020 __asm__ __volatile__(
"membar #Sync\n\t"
1021 "stxa %0, [%1] %2\n\t"
1024 :
"r" (tag),
"r" (addr),
1026 for (line = addr; line < addr + dcache_line_size; line += 8)
1027 __asm__ __volatile__(
"membar #Sync\n\t"
1028 "stxa %%g0, [%0] %1\n\t"
1061 static unsigned char cheetah_ecc_syntab[] = {
1062 NONE,
C0,
C1,
M2,
C2,
M2,
M3, 47,
C3,
M2,
M2, 53,
M2, 41, 29,
M,
1063 C4,
M,
M, 50,
M2, 38, 25,
M2,
M2, 33, 24,
M2, 11,
M,
M2, 16,
1064 C5,
M,
M, 46,
M2, 37, 19,
M2,
M, 31, 32,
M, 7,
M2,
M2, 10,
1065 M2, 40, 13,
M2, 59,
M,
M2, 66,
M,
M2,
M2, 0,
M2, 67, 71,
M,
1066 C6,
M,
M, 43,
M, 36, 18,
M,
M2, 49, 15,
M, 63,
M2,
M2, 6,
1067 M2, 44, 28,
M2,
M,
M2,
M2, 52, 68,
M2,
M2, 62,
M2,
M3,
M3,
M4,
1068 M2, 26, 106,
M2, 64,
M,
M2, 2, 120,
M,
M2,
M3,
M,
M3,
M3,
M4,
1069 116,
M2,
M2,
M3,
M2,
M3,
M,
M4,
M2, 58, 54,
M2,
M,
M4,
M4,
M3,
1070 C7,
M2,
M, 42,
M, 35, 17,
M2,
M, 45, 14,
M2, 21,
M2,
M2, 5,
1071 M, 27,
M,
M, 99,
M,
M, 3, 114,
M2,
M2, 20,
M2,
M3,
M3,
M,
1072 M2, 23, 113,
M2, 112,
M2,
M, 51, 95,
M,
M2,
M3,
M2,
M3,
M3,
M2,
1073 103,
M,
M2,
M3,
M2,
M3,
M3,
M4,
M2, 48,
M,
M, 73,
M2,
M,
M3,
1074 M2, 22, 110,
M2, 109,
M2,
M, 9, 108,
M2,
M,
M3,
M2,
M3,
M3,
M,
1075 102,
M2,
M,
M,
M2,
M3,
M3,
M,
M2,
M3,
M3,
M2,
M,
M4,
M,
M3,
1076 98,
M,
M2,
M3,
M2,
M,
M3,
M4,
M2,
M3,
M3,
M4,
M3,
M,
M,
M,
1077 M2,
M3,
M3,
M,
M3,
M,
M,
M, 56,
M4,
M,
M3,
M4,
M,
M,
M,
1078 C8,
M,
M2, 39,
M, 34, 105,
M2,
M, 30, 104,
M, 101,
M,
M, 4,
1079 M,
M, 100,
M, 83,
M,
M2, 12, 87,
M,
M, 57,
M2,
M,
M3,
M,
1080 M2, 97, 82,
M2, 78,
M2,
M2, 1, 96,
M,
M,
M,
M,
M,
M3,
M2,
1081 94,
M,
M2,
M3,
M2,
M,
M3,
M,
M2,
M, 79,
M, 69,
M,
M4,
M,
1082 M2, 93, 92,
M, 91,
M,
M2, 8, 90,
M2,
M2,
M,
M,
M,
M,
M4,
1083 89,
M,
M,
M3,
M2,
M3,
M3,
M,
M,
M,
M3,
M2,
M3,
M2,
M,
M3,
1084 86,
M,
M2,
M3,
M2,
M,
M3,
M,
M2,
M,
M3,
M,
M3,
M,
M,
M3,
1085 M,
M,
M3,
M2,
M3,
M2,
M4,
M, 60,
M,
M2,
M3,
M4,
M,
M,
M2,
1086 M2, 88, 85,
M2, 84,
M,
M2, 55, 81,
M2,
M2,
M3,
M2,
M3,
M3,
M4,
1087 77,
M,
M,
M,
M2,
M3,
M,
M,
M2,
M3,
M3,
M4,
M3,
M2,
M,
M,
1088 74,
M,
M2,
M3,
M,
M,
M3,
M,
M,
M,
M3,
M,
M3,
M,
M4,
M3,
1089 M2, 70, 107,
M4, 65,
M2,
M2,
M, 127,
M,
M,
M,
M2,
M3,
M3,
M,
1090 80,
M2,
M2, 72,
M, 119, 118,
M,
M2, 126, 76,
M, 125,
M,
M4,
M3,
1091 M2, 115, 124,
M, 75,
M,
M,
M3, 61,
M,
M4,
M,
M4,
M,
M,
M,
1092 M, 123, 122,
M4, 121,
M4,
M,
M3, 117,
M2,
M2,
M3,
M4,
M3,
M,
M,
1093 111,
M,
M,
M,
M4,
M3,
M3,
M,
M,
M,
M3,
M,
M3,
M2,
M, M
1095 static unsigned char cheetah_mtag_syntab[] = {
1107 static inline unsigned long cheetah_get_hipri(
unsigned long afsr)
1109 unsigned long tmp = 0;
1112 for (i = 0; cheetah_error_table[
i].
mask; i++) {
1113 if ((tmp = (afsr & cheetah_error_table[i].
mask)) != 0
UL)
1119 static const char *cheetah_get_string(
unsigned long bit)
1123 for (i = 0; cheetah_error_table[
i].
mask; i++) {
1124 if ((bit & cheetah_error_table[i].
mask) != 0
UL)
1125 return cheetah_error_table[
i].
name;
1131 unsigned long afsr,
unsigned long afar,
int recoverable)
1133 unsigned long hipri;
1136 printk(
"%s" "ERROR(%d): Cheetah error trap taken afsr[%016lx] afar[%016lx] TL1(%d)\n",
1140 printk(
"%s" "ERROR(%d): TPC[%lx] TNPC[%lx] O7[%lx] TSTATE[%lx]\n",
1142 regs->tpc, regs->tnpc, regs->
u_regs[
UREG_I7], regs->tstate);
1143 printk(
"%s" "ERROR(%d): ",
1145 printk(
"TPC<%pS>\n", (
void *) regs->tpc);
1146 printk(
"%s" "ERROR(%d): M_SYND(%lx), E_SYND(%lx)%s%s\n",
1150 (afsr &
CHAFSR_ME) ?
", Multiple Errors" :
"",
1152 hipri = cheetah_get_hipri(afsr);
1153 printk(
"%s" "ERROR(%d): Highest priority error (%016lx) \"%s\"\n",
1155 hipri, cheetah_get_string(hipri));
1158 #define ESYND_ERRORS (CHAFSR_IVC | CHAFSR_IVU | \
1159 CHAFSR_CPC | CHAFSR_CPU | \
1160 CHAFSR_UE | CHAFSR_CE | \
1161 CHAFSR_EDC | CHAFSR_EDU | \
1162 CHAFSR_UCC | CHAFSR_UCU | \
1163 CHAFSR_WDU | CHAFSR_WDC)
1164 #define MSYND_ERRORS (CHAFSR_EMC | CHAFSR_EMU)
1165 if (afsr & ESYND_ERRORS) {
1170 syndrome = cheetah_ecc_syntab[syndrome];
1171 ret = sprintf_dimm(syndrome, afar, unum,
sizeof(unum));
1173 printk(
"%s" "ERROR(%d): AFAR E-syndrome [%s]\n",
1176 }
else if (afsr & MSYND_ERRORS) {
1181 syndrome = cheetah_mtag_syntab[syndrome];
1182 ret = sprintf_dimm(syndrome, afar, unum,
sizeof(unum));
1184 printk(
"%s" "ERROR(%d): AFAR M-syndrome [%s]\n",
1190 printk(
"%s" "ERROR(%d): D-cache idx[%x] tag[%016llx] utag[%016llx] stag[%016llx]\n",
1196 printk(
"%s" "ERROR(%d): D-cache data0[%016llx] data1[%016llx] data2[%016llx] data3[%016llx]\n",
1202 printk(
"%s" "ERROR(%d): I-cache idx[%x] tag[%016llx] utag[%016llx] stag[%016llx] "
1203 "u[%016llx] l[%016llx]\n",
1211 printk(
"%s" "ERROR(%d): I-cache INSN0[%016llx] INSN1[%016llx] INSN2[%016llx] INSN3[%016llx]\n",
1217 printk(
"%s" "ERROR(%d): I-cache INSN4[%016llx] INSN5[%016llx] INSN6[%016llx] INSN7[%016llx]\n",
1223 printk(
"%s" "ERROR(%d): E-cache idx[%x] tag[%016llx]\n",
1226 printk(
"%s" "ERROR(%d): E-cache data0[%016llx] data1[%016llx] data2[%016llx] data3[%016llx]\n",
1233 afsr = (afsr & ~hipri) & cheetah_afsr_errors;
1234 while (afsr != 0
UL) {
1235 unsigned long bit = cheetah_get_hipri(afsr);
1237 printk(
"%s" "ERROR: Multiple-error (%016lx) \"%s\"\n",
1239 bit, cheetah_get_string(bit));
1245 printk(KERN_CRIT
"ERROR: This condition is not recoverable.\n");
1253 __asm__ __volatile__(
"ldxa [%%g0] %1, %0\n\t"
1256 if ((afsr & cheetah_afsr_errors) != 0) {
1258 __asm__ __volatile__(
"ldxa [%%g0] %1, %0\n\t"
1266 __asm__ __volatile__(
"stxa %0, [%%g0] %1\n\t"
1279 cheetah_flush_ecache();
1281 p = cheetah_get_error_log(afsr);
1283 prom_printf(
"ERROR: Early Fast-ECC error afsr[%016lx] afar[%016lx]\n",
1285 prom_printf(
"ERROR: CPU(%d) TPC[%016lx] TNPC[%016lx] TSTATE[%016lx]\n",
1291 memcpy(&local_snapshot, p,
sizeof(local_snapshot));
1300 if (p->
afsr != afsr || p->
afar != afar)
1305 cheetah_flush_icache();
1306 cheetah_flush_dcache();
1309 __asm__ __volatile__(
"ldxa [%%g0] %0, %%g1\n\t"
1310 "or %%g1, %1, %%g1\n\t"
1311 "stxa %%g1, [%%g0] %0\n\t"
1319 __asm__ __volatile__(
"ldxa [%%g0] %0, %%g1\n\t"
1320 "or %%g1, %1, %%g1\n\t"
1321 "stxa %%g1, [%%g0] %0\n\t"
1338 if (cheetah_recheck_errors(&local_snapshot)) {
1339 unsigned long new_afsr = local_snapshot.
afsr;
1350 cheetah_log_errors(regs, &local_snapshot, afsr, afar, recoverable);
1353 panic(
"Irrecoverable Fast-ECC error trap.\n");
1356 cheetah_flush_ecache();
1363 static int cheetah_fix_ce(
unsigned long physaddr)
1365 unsigned long orig_estate;
1366 unsigned long alias1, alias2;
1370 __asm__ __volatile__(
"ldxa [%%g0] %2, %0\n\t"
1371 "andn %0, %1, %%g1\n\t"
1372 "stxa %%g1, [%%g0] %2\n\t"
1374 :
"=&r" (orig_estate)
1386 physaddr &= ~(8
UL - 1
UL);
1387 alias1 = (ecache_flush_physbase +
1388 (physaddr & ((ecache_flush_size >> 1) - 1)));
1389 alias2 = alias1 + (ecache_flush_size >> 1);
1390 __asm__ __volatile__(
"ldxa [%0] %3, %%g0\n\t"
1391 "ldxa [%1] %3, %%g0\n\t"
1392 "casxa [%2] %3, %%g0, %%g0\n\t"
1393 "ldxa [%0] %3, %%g0\n\t"
1394 "ldxa [%1] %3, %%g0\n\t"
1397 :
"r" (alias1),
"r" (alias2),
1401 if (cheetah_recheck_errors(
NULL)) {
1403 __asm__ __volatile__(
"ldxa [%0] %1, %%g0\n\t"
1406 if (cheetah_recheck_errors(
NULL))
1416 __asm__ __volatile__(
"stxa %0, [%%g0] %1\n\t"
1424 static int cheetah_check_main_memory(
unsigned long paddr)
1428 if (vaddr > (
unsigned long) high_memory)
1437 int recoverable, is_memory;
1439 p = cheetah_get_error_log(afsr);
1441 prom_printf(
"ERROR: Early CEE error afsr[%016lx] afar[%016lx]\n",
1443 prom_printf(
"ERROR: CPU(%d) TPC[%016lx] TNPC[%016lx] TSTATE[%016lx]\n",
1449 memcpy(&local_snapshot, p,
sizeof(local_snapshot));
1458 if (p->
afsr != afsr || p->
afar != afar)
1463 is_memory = cheetah_check_main_memory(afar);
1469 cheetah_fix_ce(afar);
1473 int flush_all, flush_line;
1475 flush_all = flush_line = 0;
1477 if ((afsr & cheetah_afsr_errors) == CHAFSR_EDC)
1482 if ((afsr & cheetah_afsr_errors) == CHAFSR_CPC)
1489 cheetah_flush_icache();
1492 __asm__ __volatile__(
"ldxa [%%g0] %0, %%g1\n\t"
1493 "or %%g1, %1, %%g1\n\t"
1494 "stxa %%g1, [%%g0] %0\n\t"
1502 cheetah_flush_ecache();
1503 else if (flush_line)
1504 cheetah_flush_ecache_line(afar);
1508 __asm__ __volatile__(
"ldxa [%%g0] %0, %%g1\n\t"
1509 "or %%g1, %1, %%g1\n\t"
1510 "stxa %%g1, [%%g0] %0\n\t"
1525 (
void) cheetah_recheck_errors(&local_snapshot);
1528 cheetah_log_errors(regs, &local_snapshot, afsr, afar, recoverable);
1531 panic(
"Irrecoverable Correctable-ECC error trap.\n");
1537 int recoverable, is_memory;
1542 cheetah_flush_icache();
1543 cheetah_flush_dcache();
1546 __asm__ __volatile__(
"ldxa [%%g0] %0, %%g1\n\t"
1547 "or %%g1, %1, %%g1\n\t"
1548 "stxa %%g1, [%%g0] %0\n\t"
1556 __asm__ __volatile__(
"ldxa [%%g0] %0, %%g1\n\t"
1557 "or %%g1, %1, %%g1\n\t"
1558 "stxa %%g1, [%%g0] %0\n\t"
1565 (
void) cheetah_recheck_errors(
NULL);
1569 regs->tnpc = regs->tpc + 4;
1574 p = cheetah_get_error_log(afsr);
1576 prom_printf(
"ERROR: Early deferred error afsr[%016lx] afar[%016lx]\n",
1578 prom_printf(
"ERROR: CPU(%d) TPC[%016lx] TNPC[%016lx] TSTATE[%016lx]\n",
1584 memcpy(&local_snapshot, p,
sizeof(local_snapshot));
1593 if (p->
afsr != afsr || p->
afar != afar)
1598 is_memory = cheetah_check_main_memory(afar);
1601 int flush_all, flush_line;
1603 flush_all = flush_line = 0;
1605 if ((afsr & cheetah_afsr_errors) == CHAFSR_EDU)
1610 if ((afsr & cheetah_afsr_errors) == CHAFSR_BERR)
1616 cheetah_flush_icache();
1617 cheetah_flush_dcache();
1620 __asm__ __volatile__(
"ldxa [%%g0] %0, %%g1\n\t"
1621 "or %%g1, %1, %%g1\n\t"
1622 "stxa %%g1, [%%g0] %0\n\t"
1630 cheetah_flush_ecache();
1631 else if (flush_line)
1632 cheetah_flush_ecache_line(afar);
1636 __asm__ __volatile__(
"ldxa [%%g0] %0, %%g1\n\t"
1637 "or %%g1, %1, %%g1\n\t"
1638 "stxa %%g1, [%%g0] %0\n\t"
1655 if (cheetah_recheck_errors(&local_snapshot)) {
1656 unsigned long new_afsr = local_snapshot.
afsr;
1667 cheetah_log_errors(regs, &local_snapshot, afsr, afar, recoverable);
1681 if (recoverable && is_memory) {
1708 regs->tpc = entry->
fixup;
1709 regs->tnpc = regs->tpc + 4;
1718 panic(
"Irrecoverable deferred error trap.\n");
1732 __cheetah_flush_icache();
1734 cheetah_plus_zap_dcache_parity();
1735 cheetah_flush_dcache();
1738 __asm__ __volatile__(
"ldxa [%%g0] %0, %%g1\n\t"
1739 "or %%g1, %1, %%g1\n\t"
1740 "stxa %%g1, [%%g0] %0\n\t"
1748 printk(
KERN_EMERG "CPU[%d]: Cheetah+ %c-cache parity error at TPC[%016lx]\n",
1750 (type & 0x1) ?
'I' :
'D',
1753 panic(
"Irrecoverable Cheetah+ parity error.");
1758 (type & 0x1) ?
'I' :
'D',
1774 #define SUN4V_ERR_TYPE_UNDEFINED 0
1775 #define SUN4V_ERR_TYPE_UNCORRECTED_RES 1
1776 #define SUN4V_ERR_TYPE_PRECISE_NONRES 2
1777 #define SUN4V_ERR_TYPE_DEFERRED_NONRES 3
1778 #define SUN4V_ERR_TYPE_SHUTDOWN_RQST 4
1779 #define SUN4V_ERR_TYPE_DUMP_CORE 5
1780 #define SUN4V_ERR_TYPE_SP_STATE_CHANGE 6
1781 #define SUN4V_ERR_TYPE_NUM 7
1785 #define SUN4V_ERR_ATTRS_PROCESSOR 0x00000001
1786 #define SUN4V_ERR_ATTRS_MEMORY 0x00000002
1787 #define SUN4V_ERR_ATTRS_PIO 0x00000004
1788 #define SUN4V_ERR_ATTRS_INT_REGISTERS 0x00000008
1789 #define SUN4V_ERR_ATTRS_FPU_REGISTERS 0x00000010
1790 #define SUN4V_ERR_ATTRS_SHUTDOWN_RQST 0x00000020
1791 #define SUN4V_ERR_ATTRS_ASR 0x00000040
1792 #define SUN4V_ERR_ATTRS_ASI 0x00000080
1793 #define SUN4V_ERR_ATTRS_PRIV_REG 0x00000100
1794 #define SUN4V_ERR_ATTRS_SPSTATE_MSK 0x00000600
1795 #define SUN4V_ERR_ATTRS_SPSTATE_SHFT 9
1796 #define SUN4V_ERR_ATTRS_MODE_MSK 0x03000000
1797 #define SUN4V_ERR_ATTRS_MODE_SHFT 24
1798 #define SUN4V_ERR_ATTRS_RES_QUEUE_FULL 0x80000000
1800 #define SUN4V_ERR_SPSTATE_FAULTED 0
1801 #define SUN4V_ERR_SPSTATE_AVAILABLE 1
1802 #define SUN4V_ERR_SPSTATE_NOT_PRESENT 2
1804 #define SUN4V_ERR_MODE_USER 1
1805 #define SUN4V_ERR_MODE_PRIV 2
1826 #define SUN4V_ERR_ASR_VALID 0x8000
1836 static const char *sun4v_err_type_to_str(
u8 type)
1840 "uncorrected resumable",
1841 "precise nonresumable",
1842 "deferred nonresumable",
1854 static void sun4v_emit_err_attr_strings(
u32 attrs)
1856 static const char *attr_names[] = {
1867 static const char *sp_states[] = {
1871 "sp-state-reserved",
1873 static const char *modes[] = {
1882 for (i = 0; i <
ARRAY_SIZE(attr_names); i++) {
1883 if (attrs & (1
U << i)) {
1884 const char *
s = attr_names[
i];
1892 pr_cont(
"%s ", sp_states[sp_state]);
1909 static void sun4v_report_real_raddr(
const char *pfx,
struct pt_regs *regs)
1917 insn = *(
unsigned int *) regs->tpc;
1921 printk(
"%s: insn effective address [0x%016llx]\n",
1928 u64 *raw_ptr = (
u64 *) ent;
1932 printk(
"%s: Reporting on cpu %d\n", pfx, cpu);
1933 printk(
"%s: TPC [0x%016lx] <%pS>\n",
1934 pfx, regs->tpc, (
void *) regs->tpc);
1936 printk(
"%s: RAW [%016llx:%016llx:%016llx:%016llx\n",
1937 pfx, raw_ptr[0], raw_ptr[1], raw_ptr[2], raw_ptr[3]);
1938 printk(
"%s: %016llx:%016llx:%016llx:%016llx]\n",
1939 pfx, raw_ptr[4], raw_ptr[5], raw_ptr[6], raw_ptr[7]);
1941 printk(
"%s: handle [0x%016llx] stick [0x%016llx]\n",
1944 printk(
"%s: type [%s]\n", pfx, sun4v_err_type_to_str(ent->
err_type));
1947 printk(
"%s: attrs [0x%08x] < ", pfx, attrs);
1948 sun4v_emit_err_attr_strings(attrs);
1960 sun4v_report_real_raddr(pfx, regs);
1979 printk(
"%s: reg [0x%04x]\n",
1987 printk(
"%s: Queue overflowed %d times.\n",
1999 unsigned long paddr;
2022 pr_info(
"Shutdown request, %u seconds...\n",
2028 sun4v_log_error(regs, &local_copy, cpu,
2030 &sun4v_resum_oflow_cnt);
2049 unsigned long paddr;
2071 regs->tnpc = regs->tpc + 4;
2076 sun4v_log_error(regs, &local_copy, cpu,
2078 &sun4v_nonresum_oflow_cnt);
2080 panic(
"Non-resumable error.");
2103 dump_tl1_traplog((
struct tl1_traplog *)(regs + 1));
2112 "pte[%lx] error[%lx]\n",
2113 sun4v_err_itlb_vaddr, sun4v_err_itlb_ctx,
2114 sun4v_err_itlb_pte, sun4v_err_itlb_error);
2127 dump_tl1_traplog((
struct tl1_traplog *)(regs + 1));
2136 "pte[%lx] error[%lx]\n",
2137 sun4v_err_dtlb_vaddr, sun4v_err_dtlb_ctx,
2138 sun4v_err_dtlb_pte, sun4v_err_dtlb_error);
2145 printk(KERN_CRIT
"SUN4V: TLB hv call error %lu for op %lu\n",
2151 printk(KERN_CRIT
"SUN4V: XCALL TLB hv call error %lu for op %lu\n",
2158 regs->tpc = regs->tnpc;
2164 if (test_thread_flag(TIF_32BIT)) {
2165 regs->tpc &= 0xffffffff;
2166 regs->tnpc &= 0xffffffff;
2170 info.si_addr = (
void __user *)regs->tpc;
2173 if ((fsr & 0x1c000) == (1 << 14)) {
2176 else if (fsr & 0x08)
2178 else if (fsr & 0x04)
2180 else if (fsr & 0x02)
2182 else if (fsr & 0x01)
2192 0, 0x24,
SIGFPE) == NOTIFY_STOP)
2206 0, 0x25,
SIGFPE) == NOTIFY_STOP)
2225 0, 0x26,
SIGEMT) == NOTIFY_STOP)
2229 die_if_kernel(
"Penguin overflow trap from kernel mode", regs);
2230 if (test_thread_flag(TIF_32BIT)) {
2231 regs->tpc &= 0xffffffff;
2232 regs->tnpc &= 0xffffffff;
2237 info.si_addr = (
void __user *)regs->tpc;
2247 0, 0x28,
SIGFPE) == NOTIFY_STOP)
2252 if (test_thread_flag(TIF_32BIT)) {
2253 regs->tpc &= 0xffffffff;
2254 regs->tnpc &= 0xffffffff;
2259 info.si_addr = (
void __user *)regs->tpc;
2264 static void instruction_dump(
unsigned int *
pc)
2268 if ((((
unsigned long) pc) & 3))
2271 printk(
"Instruction DUMP:");
2272 for (i = -3; i < 6; i++)
2273 printk(
"%c%08x%c",i?
' ':
'<',pc[i],i?
' ':
'>');
2277 static void user_instruction_dump(
unsigned int __user *pc)
2280 unsigned int buf[9];
2282 if ((((
unsigned long) pc) & 3))
2288 printk(
"Instruction DUMP:");
2289 for (i = 0; i < 9; i++)
2290 printk(
"%c%08x%c",i==3?
' ':
'<',buf[i],i==3?
' ':
'>');
2296 unsigned long fp, ksp;
2299 #ifdef CONFIG_FUNCTION_GRAPH_TRACER
2303 ksp = (
unsigned long) _ksp;
2309 asm(
"mov %%fp, %0" :
"=r" (ksp));
2324 if (!kstack_valid(tp, fp))
2327 regs = (
struct pt_regs *) (sf + 1);
2329 if (kstack_is_trap_frame(tp, regs)) {
2336 fp = (
unsigned long)sf->
fp + STACK_BIAS;
2339 printk(
" [%016lx] %pS\n", pc, (
void *) pc);
2340 #ifdef CONFIG_FUNCTION_GRAPH_TRACER
2342 int index = tsk->curr_ret_stack;
2343 if (tsk->ret_stack && index >= graph) {
2344 pc = tsk->ret_stack[index - graph].ret;
2345 printk(
" [%016lx] %pS\n", pc, (
void *) pc);
2350 }
while (++count < 16);
2360 static inline struct reg_window *kernel_stack_up(
struct reg_window *
rw)
2362 unsigned long fp = rw->ins[6];
2367 return (
struct reg_window *) (fp +
STACK_BIAS);
2372 static int die_counter;
2378 " \"@'/ .. \\`@\"\n"
2384 __asm__ __volatile__(
"flushw");
2389 struct reg_window *rw = (
struct reg_window *)
2397 kstack_valid(tp, (
unsigned long) rw)) {
2398 printk(
"Caller[%016lx]: %pS\n", rw->ins[7],
2399 (
void *) rw->ins[7]);
2401 rw = kernel_stack_up(rw);
2403 instruction_dump ((
unsigned int *) regs->tpc);
2405 if (test_thread_flag(TIF_32BIT)) {
2406 regs->tpc &= 0xffffffff;
2407 regs->tnpc &= 0xffffffff;
2409 user_instruction_dump ((
unsigned int __user *) regs->tpc);
2417 #define VIS_OPCODE_MASK ((0x3 << 30) | (0x3f << 19))
2418 #define VIS_OPCODE_VAL ((0x2 << 30) | (0x36 << 19))
2425 unsigned long pc = regs->tpc;
2426 unsigned long tstate = regs->tstate;
2431 0, 0x10,
SIGILL) == NOTIFY_STOP)
2436 if (test_thread_flag(TIF_32BIT))
2439 if ((insn & 0xc1ffc000) == 0x81700000) {
2442 }
else if ((insn & 0xc1580000) == 0xc1100000) {
2445 }
else if (
tlb_type == hypervisor) {
2465 info.si_addr = (
void __user *)pc;
2477 0, 0x34,
SIGSEGV) == NOTIFY_STOP)
2487 info.si_addr = (
void __user *)sfar;
2497 0, 0x34,
SIGSEGV) == NOTIFY_STOP)
2507 info.si_addr = (
void __user *) addr;
2517 0, 0x11,
SIGILL) == NOTIFY_STOP)
2520 if (test_thread_flag(TIF_32BIT)) {
2521 regs->tpc &= 0xffffffff;
2522 regs->tnpc &= 0xffffffff;
2527 info.si_addr = (
void __user *)regs->tpc;
2545 dump_tl1_traplog((
struct tl1_traplog *)(regs + 1));
2551 dump_tl1_traplog((
struct tl1_traplog *)(regs + 1));
2557 dump_tl1_traplog((
struct tl1_traplog *)(regs + 1));
2563 dump_tl1_traplog((
struct tl1_traplog *)(regs + 1));
2569 dump_tl1_traplog((
struct tl1_traplog *)(regs + 1));
2575 dump_tl1_traplog((
struct tl1_traplog *)(regs + 1));
2581 dump_tl1_traplog((
struct tl1_traplog *)(regs + 1));
2587 dump_tl1_traplog((
struct tl1_traplog *)(regs + 1));
2593 dump_tl1_traplog((
struct tl1_traplog *)(regs + 1));
2599 dump_tl1_traplog((
struct tl1_traplog *)(regs + 1));
2605 dump_tl1_traplog((
struct tl1_traplog *)(regs + 1));
2616 dump_tl1_traplog((
struct tl1_traplog *)(regs + 1));
2627 dump_tl1_traplog((
struct tl1_traplog *)(regs + 1));
2633 dump_tl1_traplog((
struct tl1_traplog *)(regs + 1));
2640 regs->tpc = regs->tnpc;
2642 if (test_thread_flag(TIF_32BIT)) {
2643 regs->tpc &= 0xffffffff;
2644 regs->tnpc &= 0xffffffff;
2700 (TI_FPREGS & (64 - 1)));