17c478bd9Sstevel@tonic-gate /* 27c478bd9Sstevel@tonic-gate * CDDL HEADER START 37c478bd9Sstevel@tonic-gate * 47c478bd9Sstevel@tonic-gate * The contents of this file are subject to the terms of the 538e9bdffSmikechr * Common Development and Distribution License (the "License"). 638e9bdffSmikechr * You may not use this file except in compliance with the License. 77c478bd9Sstevel@tonic-gate * 87c478bd9Sstevel@tonic-gate * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 97c478bd9Sstevel@tonic-gate * or http://www.opensolaris.org/os/licensing. 107c478bd9Sstevel@tonic-gate * See the License for the specific language governing permissions 117c478bd9Sstevel@tonic-gate * and limitations under the License. 127c478bd9Sstevel@tonic-gate * 137c478bd9Sstevel@tonic-gate * When distributing Covered Code, include this CDDL HEADER in each 147c478bd9Sstevel@tonic-gate * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 157c478bd9Sstevel@tonic-gate * If applicable, add the following below this CDDL HEADER, with the 167c478bd9Sstevel@tonic-gate * fields enclosed by brackets "[]" replaced with your own identifying 177c478bd9Sstevel@tonic-gate * information: Portions Copyright [yyyy] [name of copyright owner] 187c478bd9Sstevel@tonic-gate * 197c478bd9Sstevel@tonic-gate * CDDL HEADER END 207c478bd9Sstevel@tonic-gate */ 217c478bd9Sstevel@tonic-gate /* 22*b9e93c10SJonathan Haslam * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 237c478bd9Sstevel@tonic-gate * Use is subject to license terms. 247c478bd9Sstevel@tonic-gate */ 257c478bd9Sstevel@tonic-gate 267c478bd9Sstevel@tonic-gate #ifndef _SYS_US3_MODULE_H 277c478bd9Sstevel@tonic-gate #define _SYS_US3_MODULE_H 287c478bd9Sstevel@tonic-gate 297c478bd9Sstevel@tonic-gate #include <sys/async.h> 307c478bd9Sstevel@tonic-gate 317c478bd9Sstevel@tonic-gate #ifdef __cplusplus 327c478bd9Sstevel@tonic-gate extern "C" { 337c478bd9Sstevel@tonic-gate #endif 347c478bd9Sstevel@tonic-gate 357c478bd9Sstevel@tonic-gate #ifdef _KERNEL 367c478bd9Sstevel@tonic-gate 377c478bd9Sstevel@tonic-gate /* 387c478bd9Sstevel@tonic-gate * Macros to access the "cheetah cpu private" data structure. 397c478bd9Sstevel@tonic-gate */ 407c478bd9Sstevel@tonic-gate #define CPU_PRIVATE_PTR(cp, x) (&(((cheetah_private_t *)CPU_PRIVATE(cp))->x)) 417c478bd9Sstevel@tonic-gate #define CPU_PRIVATE_VAL(cp, x) (((cheetah_private_t *)CPU_PRIVATE(cp))->x) 427c478bd9Sstevel@tonic-gate 437c478bd9Sstevel@tonic-gate #define CHP_WORD_TO_OFF(word, off) (((word) * 8) == off) 447c478bd9Sstevel@tonic-gate 457c478bd9Sstevel@tonic-gate #if defined(JALAPENO) || defined(SERRANO) 467c478bd9Sstevel@tonic-gate /* JP J_REQ errors */ 477c478bd9Sstevel@tonic-gate #define C_AFSR_JREQ_ERRS (C_AFSR_RUE | C_AFSR_BP | C_AFSR_WBP | \ 487c478bd9Sstevel@tonic-gate C_AFSR_RCE | C_AFSR_TO | C_AFSR_BERR | C_AFSR_UMS) 497c478bd9Sstevel@tonic-gate /* JP AID errors */ 507c478bd9Sstevel@tonic-gate #define C_AFSR_AID_ERRS (C_AFSR_CPU | C_AFSR_FRU | C_AFSR_CPC | \ 517c478bd9Sstevel@tonic-gate C_AFSR_FRC) 527c478bd9Sstevel@tonic-gate 537c478bd9Sstevel@tonic-gate #if defined(SERRANO) 547c478bd9Sstevel@tonic-gate /* SERRANO AFSR bits from Disrupting (Corrected) ECC error Trap (Trap 0x63) */ 557c478bd9Sstevel@tonic-gate #define C_AFSR_CECC_ERRS (C_AFSR_UMS | C_AFSR_IVPE | C_AFSR_CPC | \ 567c478bd9Sstevel@tonic-gate C_AFSR_CPU | C_AFSR_WDC | C_AFSR_WDU | C_AFSR_EDC | \ 577c478bd9Sstevel@tonic-gate C_AFSR_CE | C_AFSR_RCE | C_AFSR_WBP | C_AFSR_FRC | \ 587c478bd9Sstevel@tonic-gate C_AFSR_FRU | C_AFSR_EDU | C_AFSR_ETI | C_AFSR_ETC) 597c478bd9Sstevel@tonic-gate 607c478bd9Sstevel@tonic-gate #else /* SERRANO */ 617c478bd9Sstevel@tonic-gate /* JP AFSR bits from Disrupting (Corrected) ECC error Trap (Trap 0x63) */ 627c478bd9Sstevel@tonic-gate #define C_AFSR_CECC_ERRS (C_AFSR_UMS | C_AFSR_IVPE | C_AFSR_CPC | \ 637c478bd9Sstevel@tonic-gate C_AFSR_CPU | C_AFSR_WDC | C_AFSR_WDU | C_AFSR_EDC | \ 647c478bd9Sstevel@tonic-gate C_AFSR_CE | C_AFSR_RCE | C_AFSR_WBP | C_AFSR_FRC | \ 657c478bd9Sstevel@tonic-gate C_AFSR_FRU | C_AFSR_EDU) 667c478bd9Sstevel@tonic-gate #endif /* SERRANO */ 677c478bd9Sstevel@tonic-gate 687c478bd9Sstevel@tonic-gate #if defined(SERRANO) 697c478bd9Sstevel@tonic-gate /* 707c478bd9Sstevel@tonic-gate * SERRANO AFSR bits from {Instruction,Data}_access_error traps 717c478bd9Sstevel@tonic-gate * (Traps 0xa, 0x32) 727c478bd9Sstevel@tonic-gate */ 737c478bd9Sstevel@tonic-gate #define C_AFSR_ASYNC_ERRS (C_AFSR_OM | C_AFSR_TO | C_AFSR_BERR | \ 747c478bd9Sstevel@tonic-gate C_AFSR_UE | C_AFSR_RUE | C_AFSR_EDU | C_AFSR_BP | \ 757c478bd9Sstevel@tonic-gate C_AFSR_ETU | C_AFSR_ETS) 767c478bd9Sstevel@tonic-gate #else /* SERRANO */ 777c478bd9Sstevel@tonic-gate /* JP AFSR bits from {Instruction,Data}_access_error traps (Traps 0xa, 0x32) */ 787c478bd9Sstevel@tonic-gate #define C_AFSR_ASYNC_ERRS (C_AFSR_OM | C_AFSR_TO | C_AFSR_BERR | \ 797c478bd9Sstevel@tonic-gate C_AFSR_UE | C_AFSR_RUE | C_AFSR_EDU | C_AFSR_BP) 807c478bd9Sstevel@tonic-gate #endif /* SERRANO */ 817c478bd9Sstevel@tonic-gate 827c478bd9Sstevel@tonic-gate #if defined(SERRANO) 837c478bd9Sstevel@tonic-gate /* SERRANO AFSR bits from Fast_ECC_error trap (Trap 0x70) */ 847c478bd9Sstevel@tonic-gate #define C_AFSR_FECC_ERRS (C_AFSR_UCU | C_AFSR_UCC | C_AFSR_ETI | \ 857c478bd9Sstevel@tonic-gate C_AFSR_ETC) 867c478bd9Sstevel@tonic-gate 877c478bd9Sstevel@tonic-gate #else /* SERRANO */ 887c478bd9Sstevel@tonic-gate /* JP AFSR bits from Fast_ECC_error trap (Trap 0x70) */ 897c478bd9Sstevel@tonic-gate #define C_AFSR_FECC_ERRS (C_AFSR_UCU | C_AFSR_UCC) 907c478bd9Sstevel@tonic-gate #endif /* SERRANO */ 917c478bd9Sstevel@tonic-gate 927c478bd9Sstevel@tonic-gate #if defined(SERRANO) 937c478bd9Sstevel@tonic-gate /* SERRANO AFSR bits from Fatal errors (processor asserts ERROR pin) */ 947c478bd9Sstevel@tonic-gate #define C_AFSR_FATAL_ERRS (C_AFSR_JETO | C_AFSR_SCE | C_AFSR_JEIC | \ 957c478bd9Sstevel@tonic-gate C_AFSR_JEIT | C_AFSR_JEIS | C_AFSR_IERR | \ 967c478bd9Sstevel@tonic-gate C_AFSR_ISAP | C_AFSR_EFES | C_AFSR_ETS | C_AFSR_ETU) 977c478bd9Sstevel@tonic-gate 987c478bd9Sstevel@tonic-gate #else /* SERRANO */ 997c478bd9Sstevel@tonic-gate /* JP AFSR bits from Fatal errors (processor asserts ERROR pin) */ 1007c478bd9Sstevel@tonic-gate #define C_AFSR_FATAL_ERRS (C_AFSR_JETO | C_AFSR_SCE | C_AFSR_JEIC | \ 1017c478bd9Sstevel@tonic-gate C_AFSR_JEIT | C_AFSR_JEIS | C_AFSR_IERR | \ 1027c478bd9Sstevel@tonic-gate C_AFSR_ISAP | C_AFSR_ETP) 1037c478bd9Sstevel@tonic-gate #endif /* SERRANO */ 1047c478bd9Sstevel@tonic-gate 1057c478bd9Sstevel@tonic-gate /* JP AFSR all valid error status bits */ 1067c478bd9Sstevel@tonic-gate #define C_AFSR_ALL_ERRS (C_AFSR_FATAL_ERRS | C_AFSR_FECC_ERRS | \ 1077c478bd9Sstevel@tonic-gate C_AFSR_CECC_ERRS | C_AFSR_ASYNC_ERRS | C_AFSR_ME) 1087c478bd9Sstevel@tonic-gate 1097c478bd9Sstevel@tonic-gate #if defined(SERRANO) 1107c478bd9Sstevel@tonic-gate /* SERRANO AFSR all ME status bits */ 1117c478bd9Sstevel@tonic-gate #define C_AFSR_ALL_ME_ERRS (C_AFSR_ISAP | C_AFSR_UE | C_AFSR_UCU | \ 1127c478bd9Sstevel@tonic-gate C_AFSR_EDU | C_AFSR_WDU | C_AFSR_CPU | C_AFSR_UCC | \ 1137c478bd9Sstevel@tonic-gate C_AFSR_BERR | C_AFSR_TO | C_AFSR_ETU | C_AFSR_OM | \ 1147c478bd9Sstevel@tonic-gate C_AFSR_UMS | C_AFSR_IVPE | C_AFSR_RUE | C_AFSR_BP | \ 1157c478bd9Sstevel@tonic-gate C_AFSR_WBP | C_AFSR_FRU | C_AFSR_JETO | C_AFSR_SCE | \ 1167c478bd9Sstevel@tonic-gate C_AFSR_JEIC | C_AFSR_JEIT | C_AFSR_JEIS | \ 1177c478bd9Sstevel@tonic-gate C_AFSR_ETC | C_AFSR_ETI) 1187c478bd9Sstevel@tonic-gate 1197c478bd9Sstevel@tonic-gate #else /* SERRANO */ 1207c478bd9Sstevel@tonic-gate /* JP AFSR all ME status bits */ 1217c478bd9Sstevel@tonic-gate #define C_AFSR_ALL_ME_ERRS (C_AFSR_ISAP | C_AFSR_UE | C_AFSR_UCU | \ 1227c478bd9Sstevel@tonic-gate C_AFSR_EDU | C_AFSR_WDU | C_AFSR_CPU | C_AFSR_UCC | \ 1237c478bd9Sstevel@tonic-gate C_AFSR_BERR | C_AFSR_TO | C_AFSR_ETP | C_AFSR_OM | \ 1247c478bd9Sstevel@tonic-gate C_AFSR_UMS | C_AFSR_IVPE | C_AFSR_RUE | C_AFSR_BP | \ 1257c478bd9Sstevel@tonic-gate C_AFSR_WBP | C_AFSR_FRU | C_AFSR_JETO | C_AFSR_SCE | \ 1267c478bd9Sstevel@tonic-gate C_AFSR_JEIC | C_AFSR_JEIT | C_AFSR_JEIS) 1277c478bd9Sstevel@tonic-gate #endif /* SERRANO */ 1287c478bd9Sstevel@tonic-gate 1297c478bd9Sstevel@tonic-gate /* JP AFSR bits due to a Memory error */ 1307c478bd9Sstevel@tonic-gate #define C_AFSR_MEMORY (C_AFSR_UE | C_AFSR_CE | C_AFSR_FRC | C_AFSR_FRU |\ 1317c478bd9Sstevel@tonic-gate C_AFSR_RCE | C_AFSR_RUE) 1327c478bd9Sstevel@tonic-gate 1337c478bd9Sstevel@tonic-gate /* JP AFSR bits due to parity errors and have a valid BSYND */ 1347c478bd9Sstevel@tonic-gate #define C_AFSR_MSYND_ERRS (C_AFSR_IVPE | C_AFSR_BP | C_AFSR_WBP) 1357c478bd9Sstevel@tonic-gate 1367c478bd9Sstevel@tonic-gate /* JP AFSR bits with a valid ESYND field */ 1377c478bd9Sstevel@tonic-gate #define C_AFSR_ESYND_ERRS (C_AFSR_UE | C_AFSR_CE | \ 1387c478bd9Sstevel@tonic-gate C_AFSR_UCU | C_AFSR_UCC | C_AFSR_EDU | C_AFSR_EDC | \ 1397c478bd9Sstevel@tonic-gate C_AFSR_WDU | C_AFSR_WDC | C_AFSR_CPU | C_AFSR_CPC | \ 1407c478bd9Sstevel@tonic-gate C_AFSR_FRC | C_AFSR_FRU) 1417c478bd9Sstevel@tonic-gate 1427c478bd9Sstevel@tonic-gate /* JP AFSR error bits for AFT Level 1 messages (uncorrected + TO + BERR) */ 1437c478bd9Sstevel@tonic-gate #define C_AFSR_LEVEL1 (C_AFSR_UE | C_AFSR_RUE | C_AFSR_UCU | C_AFSR_EDU | \ 1447c478bd9Sstevel@tonic-gate C_AFSR_WDU | C_AFSR_CPU | C_AFSR_IVPE | C_AFSR_TO | \ 1457c478bd9Sstevel@tonic-gate C_AFSR_BERR | C_AFSR_UMS | C_AFSR_OM | C_AFSR_WBP | \ 1467c478bd9Sstevel@tonic-gate C_AFSR_FRU | C_AFSR_BP) 1477c478bd9Sstevel@tonic-gate 1487c478bd9Sstevel@tonic-gate #elif defined(CHEETAH_PLUS) 1497c478bd9Sstevel@tonic-gate 1507c478bd9Sstevel@tonic-gate /* Ch+ AFSR bits from Disrupting (Corrected) ECC error Trap (Trap 0x63) */ 1517c478bd9Sstevel@tonic-gate #define C_AFSR_CECC_ERRS (C_AFSR_CE | C_AFSR_EMC | C_AFSR_EDU | \ 1527c478bd9Sstevel@tonic-gate C_AFSR_EDC | C_AFSR_WDU | C_AFSR_WDC | C_AFSR_CPU | \ 1537c478bd9Sstevel@tonic-gate C_AFSR_CPC | C_AFSR_IVU | C_AFSR_IVC | C_AFSR_DUE | \ 1547c478bd9Sstevel@tonic-gate C_AFSR_THCE | C_AFSR_DBERR | C_AFSR_DTO | C_AFSR_IMU | \ 1557c478bd9Sstevel@tonic-gate C_AFSR_IMC) 1567c478bd9Sstevel@tonic-gate 1577c478bd9Sstevel@tonic-gate /* Ch+ AFSR bits from {Instruction,Data}_access_error traps (Traps 0xa, 0x32) */ 1587c478bd9Sstevel@tonic-gate #define C_AFSR_ASYNC_ERRS (C_AFSR_UE | C_AFSR_EMU | C_AFSR_EDU | \ 1597c478bd9Sstevel@tonic-gate C_AFSR_TO | C_AFSR_BERR) 1607c478bd9Sstevel@tonic-gate 1617c478bd9Sstevel@tonic-gate /* Ch+ AFSR bits from Fast_ECC_error trap (Trap 0x70) */ 1627c478bd9Sstevel@tonic-gate #define C_AFSR_FECC_ERRS (C_AFSR_UCU | C_AFSR_UCC | C_AFSR_TSCE) 1637c478bd9Sstevel@tonic-gate 1647c478bd9Sstevel@tonic-gate /* Ch+ AFSR bits from Fatal errors (processor asserts ERROR pin) */ 1657c478bd9Sstevel@tonic-gate #define C_AFSR_FATAL_ERRS (C_AFSR_PERR | C_AFSR_IERR | C_AFSR_ISAP | \ 1667c478bd9Sstevel@tonic-gate C_AFSR_TUE | C_AFSR_TUE_SH | C_AFSR_IMU | C_AFSR_EMU) 1677c478bd9Sstevel@tonic-gate 1687c478bd9Sstevel@tonic-gate /* Ch+ AFSR all valid error status bits */ 1697c478bd9Sstevel@tonic-gate #define C_AFSR_ALL_ERRS (C_AFSR_FATAL_ERRS | C_AFSR_FECC_ERRS | \ 1707c478bd9Sstevel@tonic-gate C_AFSR_CECC_ERRS | C_AFSR_ASYNC_ERRS | C_AFSR_ME) 1717c478bd9Sstevel@tonic-gate 1727c478bd9Sstevel@tonic-gate /* Ch+ AFSR all errors that set ME bit, in both AFSR and AFSR_EXT */ 1737c478bd9Sstevel@tonic-gate #define C_AFSR_ALL_ME_ERRS (C_AFSR_TUE_SH | C_AFSR_IMU | C_AFSR_DTO | \ 1747c478bd9Sstevel@tonic-gate C_AFSR_DBERR | C_AFSR_TSCE | C_AFSR_TUE | C_AFSR_DUE | \ 1757c478bd9Sstevel@tonic-gate C_AFSR_ISAP | C_AFSR_EMU | C_AFSR_IVU | C_AFSR_TO | \ 1767c478bd9Sstevel@tonic-gate C_AFSR_BERR | C_AFSR_UCC | C_AFSR_UCU | C_AFSR_CPU | \ 1777c478bd9Sstevel@tonic-gate C_AFSR_WDU | C_AFSR_EDU | C_AFSR_UE | \ 1787c478bd9Sstevel@tonic-gate C_AFSR_L3_TUE_SH | C_AFSR_L3_TUE | C_AFSR_L3_EDU | \ 1797c478bd9Sstevel@tonic-gate C_AFSR_L3_UCC | C_AFSR_L3_UCU | C_AFSR_L3_CPU | \ 1807c478bd9Sstevel@tonic-gate C_AFSR_L3_WDU) 1817c478bd9Sstevel@tonic-gate 18238e9bdffSmikechr /* Ch+ AFSR bits due to an Ecache data error */ 18338e9bdffSmikechr #define C_AFSR_EC_DATA_ERRS (C_AFSR_UCU | C_AFSR_UCC | C_AFSR_EDU | \ 18438e9bdffSmikechr C_AFSR_EDC | C_AFSR_WDU | C_AFSR_WDC | C_AFSR_CPU | \ 18538e9bdffSmikechr C_AFSR_CPC) 1867c478bd9Sstevel@tonic-gate 1877c478bd9Sstevel@tonic-gate /* Ch+ AFSR bits due to a Memory error */ 1887c478bd9Sstevel@tonic-gate #define C_AFSR_MEMORY (C_AFSR_UE | C_AFSR_CE | C_AFSR_EMU | C_AFSR_EMC | \ 1897c478bd9Sstevel@tonic-gate C_AFSR_DUE) 1907c478bd9Sstevel@tonic-gate 1917c478bd9Sstevel@tonic-gate /* Ch+ AFSR bits due to an Mtag error and have a valid MSYND */ 1927c478bd9Sstevel@tonic-gate #define C_AFSR_MSYND_ERRS (C_AFSR_EMU | C_AFSR_EMC | C_AFSR_IMU | \ 1937c478bd9Sstevel@tonic-gate C_AFSR_IMC) 1947c478bd9Sstevel@tonic-gate 1957c478bd9Sstevel@tonic-gate /* Ch+ AFSR bits with a valid ESYND field */ 1967c478bd9Sstevel@tonic-gate #define C_AFSR_ESYND_ERRS (C_AFSR_UE | C_AFSR_CE | \ 1977c478bd9Sstevel@tonic-gate C_AFSR_UCU | C_AFSR_UCC | C_AFSR_EDU | C_AFSR_EDC | \ 1987c478bd9Sstevel@tonic-gate C_AFSR_WDU | C_AFSR_WDC | C_AFSR_CPU | C_AFSR_CPC | \ 1997c478bd9Sstevel@tonic-gate C_AFSR_IVU | C_AFSR_IVC | C_AFSR_DUE) 2007c478bd9Sstevel@tonic-gate 2017c478bd9Sstevel@tonic-gate /* Ch+ AFSR error bits for AFT Level 1 messages (uncorrected + TO + BERR) */ 2027c478bd9Sstevel@tonic-gate #define C_AFSR_LEVEL1 (C_AFSR_UE | C_AFSR_UCU | C_AFSR_EMU | C_AFSR_EDU | \ 2037c478bd9Sstevel@tonic-gate C_AFSR_WDU | C_AFSR_CPU | C_AFSR_IVU | C_AFSR_TO | \ 2047c478bd9Sstevel@tonic-gate C_AFSR_BERR | C_AFSR_DUE | C_AFSR_TUE | C_AFSR_DTO | \ 2057c478bd9Sstevel@tonic-gate C_AFSR_DBERR | C_AFSR_TUE_SH | C_AFSR_IMU) 2067c478bd9Sstevel@tonic-gate 2077c478bd9Sstevel@tonic-gate #else /* CHEETAH_PLUS */ 2087c478bd9Sstevel@tonic-gate 2097c478bd9Sstevel@tonic-gate /* AFSR bits from Disrupting (Corrected) ECC error Trap (Trap 0x63) */ 2107c478bd9Sstevel@tonic-gate #define C_AFSR_CECC_ERRS (C_AFSR_CE | C_AFSR_EMC | C_AFSR_EDU | \ 2117c478bd9Sstevel@tonic-gate C_AFSR_EDC | C_AFSR_WDU | C_AFSR_WDC | C_AFSR_CPU | \ 2127c478bd9Sstevel@tonic-gate C_AFSR_CPC | C_AFSR_IVU | C_AFSR_IVC) 2137c478bd9Sstevel@tonic-gate 2147c478bd9Sstevel@tonic-gate /* AFSR bits from {Instruction,Data}_access_error traps (Traps 0xa, 0x32) */ 2157c478bd9Sstevel@tonic-gate #define C_AFSR_ASYNC_ERRS (C_AFSR_UE | C_AFSR_EMU | C_AFSR_EDU | \ 2167c478bd9Sstevel@tonic-gate C_AFSR_TO | C_AFSR_BERR) 2177c478bd9Sstevel@tonic-gate 2187c478bd9Sstevel@tonic-gate /* AFSR bits from Fast_ECC_error trap (Trap 0x70) */ 2197c478bd9Sstevel@tonic-gate #define C_AFSR_FECC_ERRS (C_AFSR_UCU | C_AFSR_UCC) 2207c478bd9Sstevel@tonic-gate 2217c478bd9Sstevel@tonic-gate /* AFSR bits from Fatal errors (processor asserts ERROR pin) */ 2227c478bd9Sstevel@tonic-gate #define C_AFSR_FATAL_ERRS (C_AFSR_PERR | C_AFSR_IERR | C_AFSR_ISAP | \ 2237c478bd9Sstevel@tonic-gate C_AFSR_EMU) 2247c478bd9Sstevel@tonic-gate 2257c478bd9Sstevel@tonic-gate /* AFSR all valid error status bits */ 2267c478bd9Sstevel@tonic-gate #define C_AFSR_ALL_ERRS (C_AFSR_FATAL_ERRS | C_AFSR_FECC_ERRS | \ 2277c478bd9Sstevel@tonic-gate C_AFSR_CECC_ERRS | C_AFSR_ASYNC_ERRS | C_AFSR_ME) 2287c478bd9Sstevel@tonic-gate 2297c478bd9Sstevel@tonic-gate /* AFSR all ME status bits */ 2307c478bd9Sstevel@tonic-gate #define C_AFSR_ALL_ME_ERRS (C_AFSR_ISAP | C_AFSR_UE | C_AFSR_IVU | \ 2317c478bd9Sstevel@tonic-gate C_AFSR_EMU | C_AFSR_UCU | C_AFSR_EDU | C_AFSR_WDU | \ 2327c478bd9Sstevel@tonic-gate C_AFSR_CPU | C_AFSR_UCC | C_AFSR_BERR | C_AFSR_TO) 2337c478bd9Sstevel@tonic-gate 2347c478bd9Sstevel@tonic-gate /* AFSR bits due to an Ecache error */ 23538e9bdffSmikechr #define C_AFSR_EC_DATA_ERRS (C_AFSR_UCU | C_AFSR_UCC | C_AFSR_EDU | \ 23638e9bdffSmikechr C_AFSR_EDC | C_AFSR_WDU | C_AFSR_WDC | C_AFSR_CPU | \ 23738e9bdffSmikechr C_AFSR_CPC) 2387c478bd9Sstevel@tonic-gate 2397c478bd9Sstevel@tonic-gate /* AFSR bits due to a Memory error */ 2407c478bd9Sstevel@tonic-gate #define C_AFSR_MEMORY (C_AFSR_UE | C_AFSR_CE | C_AFSR_EMU | C_AFSR_EMC) 2417c478bd9Sstevel@tonic-gate 2427c478bd9Sstevel@tonic-gate /* AFSR bits due to an Mtag error and have a valid MSYND */ 2437c478bd9Sstevel@tonic-gate #define C_AFSR_MSYND_ERRS (C_AFSR_EMU | C_AFSR_EMC) 2447c478bd9Sstevel@tonic-gate 2457c478bd9Sstevel@tonic-gate /* AFSR bits with a valid ESYND field */ 2467c478bd9Sstevel@tonic-gate #define C_AFSR_ESYND_ERRS (C_AFSR_UE | C_AFSR_CE | \ 2477c478bd9Sstevel@tonic-gate C_AFSR_UCU | C_AFSR_UCC | C_AFSR_EDU | C_AFSR_EDC | \ 2487c478bd9Sstevel@tonic-gate C_AFSR_WDU | C_AFSR_WDC | C_AFSR_CPU | C_AFSR_CPC | \ 2497c478bd9Sstevel@tonic-gate C_AFSR_IVU | C_AFSR_IVC) 2507c478bd9Sstevel@tonic-gate 2517c478bd9Sstevel@tonic-gate /* AFSR error bits for AFT Level 1 messages (uncorrected + TO + BERR) */ 2527c478bd9Sstevel@tonic-gate #define C_AFSR_LEVEL1 (C_AFSR_UE | C_AFSR_UCU | C_AFSR_EMU | C_AFSR_EDU | \ 2537c478bd9Sstevel@tonic-gate C_AFSR_WDU | C_AFSR_CPU | C_AFSR_IVU | C_AFSR_TO | \ 2547c478bd9Sstevel@tonic-gate C_AFSR_BERR) 2557c478bd9Sstevel@tonic-gate 2567c478bd9Sstevel@tonic-gate #endif /* CHEETAH_PLUS */ 2577c478bd9Sstevel@tonic-gate 2587c478bd9Sstevel@tonic-gate #if defined(JALAPENO) || defined(SERRANO) 2597c478bd9Sstevel@tonic-gate /* AFSR all valid bits (except for ETW) */ 2607c478bd9Sstevel@tonic-gate #define C_AFSR_MASK (C_AFSR_ALL_ERRS | C_AFSR_PRIV | C_AFSR_B_SYND | \ 2617c478bd9Sstevel@tonic-gate C_AFSR_E_SYND | C_AFSR_AID | C_AFSR_JREQ) 2627c478bd9Sstevel@tonic-gate #else /* JALAPENO || SERRANO */ 2637c478bd9Sstevel@tonic-gate /* AFSR all valid bits */ 2647c478bd9Sstevel@tonic-gate #define C_AFSR_MASK (C_AFSR_ALL_ERRS | C_AFSR_PRIV | C_AFSR_M_SYND | \ 2657c478bd9Sstevel@tonic-gate C_AFSR_E_SYND) 2667c478bd9Sstevel@tonic-gate #endif /* JALAPENO || SERRANO */ 2677c478bd9Sstevel@tonic-gate 2687c478bd9Sstevel@tonic-gate /* 2697c478bd9Sstevel@tonic-gate * Panther AFSR_EXT bits from Disrupting (Corrected) ECC error Trap 2707c478bd9Sstevel@tonic-gate * (Trap 0x63) 2717c478bd9Sstevel@tonic-gate */ 2727c478bd9Sstevel@tonic-gate #define C_AFSR_EXT_CECC_ERRS (C_AFSR_L3_EDU | C_AFSR_L3_EDC | \ 2737c478bd9Sstevel@tonic-gate C_AFSR_L3_WDU | C_AFSR_L3_WDC | C_AFSR_L3_CPU | \ 2747c478bd9Sstevel@tonic-gate C_AFSR_L3_CPC | C_AFSR_L3_THCE) 2757c478bd9Sstevel@tonic-gate 2767c478bd9Sstevel@tonic-gate /* 2777c478bd9Sstevel@tonic-gate * Panther AFSR_EXT bits from {Instruction,Data}_access_error traps 2787c478bd9Sstevel@tonic-gate * (Traps 0xa, 0x32) 2797c478bd9Sstevel@tonic-gate */ 2807c478bd9Sstevel@tonic-gate #define C_AFSR_EXT_ASYNC_ERRS (C_AFSR_L3_EDU) 2817c478bd9Sstevel@tonic-gate 2827c478bd9Sstevel@tonic-gate /* Panther AFSR_EXT bits from Fast_ECC_error trap (Trap 0x70) */ 2837c478bd9Sstevel@tonic-gate #define C_AFSR_EXT_FECC_ERRS (C_AFSR_L3_UCU | C_AFSR_L3_UCC) 2847c478bd9Sstevel@tonic-gate 2857c478bd9Sstevel@tonic-gate /* Panther AFSR_EXT bits from Fatal errors (processor asserts ERROR pin) */ 2867c478bd9Sstevel@tonic-gate #define C_AFSR_EXT_FATAL_ERRS (C_AFSR_L3_TUE | C_AFSR_L3_TUE_SH | \ 2877c478bd9Sstevel@tonic-gate C_AFSR_RED_ERR | C_AFSR_EFA_PAR_ERR) 2887c478bd9Sstevel@tonic-gate 2897c478bd9Sstevel@tonic-gate /* Panther AFSR_EXT all valid error status bits */ 2907c478bd9Sstevel@tonic-gate #define C_AFSR_EXT_ALL_ERRS (C_AFSR_EXT_FATAL_ERRS | \ 2917c478bd9Sstevel@tonic-gate C_AFSR_EXT_FECC_ERRS | C_AFSR_EXT_CECC_ERRS | \ 2927c478bd9Sstevel@tonic-gate C_AFSR_EXT_ASYNC_ERRS | C_AFSR_L3_MECC) 2937c478bd9Sstevel@tonic-gate 294b9048f8aSmb91622 /* Panther AFSR_EXT bits for errors to report a L3 cache data resource */ 29538e9bdffSmikechr #define C_AFSR_EXT_L3_DATA_ERRS (C_AFSR_L3_WDU | C_AFSR_L3_WDC | \ 2967c478bd9Sstevel@tonic-gate C_AFSR_L3_CPU | C_AFSR_L3_CPC | C_AFSR_L3_UCU | \ 297b9048f8aSmb91622 C_AFSR_L3_UCC | C_AFSR_L3_EDU | C_AFSR_L3_EDC | \ 298b9048f8aSmb91622 C_AFSR_L3_MECC) 2997c478bd9Sstevel@tonic-gate 3007c478bd9Sstevel@tonic-gate /* Panther AFSR_EXT bits with a valid ESYND field */ 3017c478bd9Sstevel@tonic-gate #define C_AFSR_EXT_ESYND_ERRS (C_AFSR_L3_UCU | C_AFSR_L3_UCC | \ 3027c478bd9Sstevel@tonic-gate C_AFSR_L3_EDU | C_AFSR_L3_EDC | C_AFSR_L3_WDU | \ 3037c478bd9Sstevel@tonic-gate C_AFSR_L3_WDC | C_AFSR_L3_CPU | C_AFSR_L3_CPC) 3047c478bd9Sstevel@tonic-gate 3057c478bd9Sstevel@tonic-gate /* PANTHER AFSR_EXT error bits for AFT Level 1 messages (uncorrected) */ 3067c478bd9Sstevel@tonic-gate #define C_AFSR_EXT_LEVEL1 (C_AFSR_L3_UCU | C_AFSR_L3_EDU | \ 3077c478bd9Sstevel@tonic-gate C_AFSR_L3_WDU | C_AFSR_L3_CPU | C_AFSR_L3_TUE | \ 3087c478bd9Sstevel@tonic-gate C_AFSR_L3_TUE_SH) 3097c478bd9Sstevel@tonic-gate 3107c478bd9Sstevel@tonic-gate /* 3117c478bd9Sstevel@tonic-gate * AFSR / AFSR_EXT bits for which we need to panic the system. 3127c478bd9Sstevel@tonic-gate */ 3137c478bd9Sstevel@tonic-gate #define C_AFSR_PANIC(errs) (((errs) & (C_AFSR_FATAL_ERRS | \ 3147c478bd9Sstevel@tonic-gate C_AFSR_EXT_FATAL_ERRS)) != 0) 3157c478bd9Sstevel@tonic-gate 3167c478bd9Sstevel@tonic-gate /* 3177c478bd9Sstevel@tonic-gate * For the Fast ECC TL1 handler, we are limited in how many registers 3187c478bd9Sstevel@tonic-gate * we can use, so we need to store the AFSR_EXT bits within the AFSR 3197c478bd9Sstevel@tonic-gate * register using some of the AFSR reserved bits. 3207c478bd9Sstevel@tonic-gate */ 3217c478bd9Sstevel@tonic-gate #define AFSR_EXT_IN_AFSR_MASK C_AFSR_EXT_ALL_ERRS 3227c478bd9Sstevel@tonic-gate #define AFSR_EXT_IN_AFSR_SHIFT 20 3237c478bd9Sstevel@tonic-gate 3247c478bd9Sstevel@tonic-gate /* 3257c478bd9Sstevel@tonic-gate * Defines for the flag field in the CPU logout structure. See the 3267c478bd9Sstevel@tonic-gate * definition of ch_cpu_logout_t for further description. 3277c478bd9Sstevel@tonic-gate */ 3287c478bd9Sstevel@tonic-gate #define CLO_FLAGS_TT_MASK 0xff000 3297c478bd9Sstevel@tonic-gate #define CLO_FLAGS_TT_SHIFT 12 3307c478bd9Sstevel@tonic-gate #define CLO_FLAGS_TL_MASK 0xf00 3317c478bd9Sstevel@tonic-gate #define CLO_FLAGS_TL_SHIFT 8 3327c478bd9Sstevel@tonic-gate #define CLO_NESTING_MAX 20 /* Arbitrary maximum value */ 3337c478bd9Sstevel@tonic-gate 3347c478bd9Sstevel@tonic-gate #define C_M_SYND_SHIFT 16 3357c478bd9Sstevel@tonic-gate #define GET_M_SYND(afsr) (((afsr) & C_AFSR_M_SYND) >> C_M_SYND_SHIFT) 3367c478bd9Sstevel@tonic-gate #define GET_E_SYND(afsr) ((afsr) & C_AFSR_E_SYND) 3377c478bd9Sstevel@tonic-gate 3387c478bd9Sstevel@tonic-gate /* 3397c478bd9Sstevel@tonic-gate * Bits of Cheetah Asynchronous Fault Address Register 3407c478bd9Sstevel@tonic-gate */ 3417c478bd9Sstevel@tonic-gate #define C_AFAR_PA INT64_C(0x000007fffffffff0) /* PA<42:4> physical address */ 3427c478bd9Sstevel@tonic-gate 3437c478bd9Sstevel@tonic-gate /* 3447c478bd9Sstevel@tonic-gate * Defines for the different types of dcache_flush 3457c478bd9Sstevel@tonic-gate * it is stored in dflush_type 3467c478bd9Sstevel@tonic-gate */ 3477c478bd9Sstevel@tonic-gate #define FLUSHALL_TYPE 0x0 /* blasts all cache lines */ 3487c478bd9Sstevel@tonic-gate #define FLUSHMATCH_TYPE 0x1 /* flush entire cache but check each */ 3497c478bd9Sstevel@tonic-gate /* each line for a match */ 3507c478bd9Sstevel@tonic-gate #define FLUSHPAGE_TYPE 0x2 /* flush only one page and check */ 3517c478bd9Sstevel@tonic-gate /* each line for a match */ 3527c478bd9Sstevel@tonic-gate 3537c478bd9Sstevel@tonic-gate /* 3547c478bd9Sstevel@tonic-gate * D-Cache Tag Data Register 3557c478bd9Sstevel@tonic-gate * 3567c478bd9Sstevel@tonic-gate * +----------+--------+----------+ 3577c478bd9Sstevel@tonic-gate * | Reserved | DC_Tag | DC_Valid | 3587c478bd9Sstevel@tonic-gate * +----------+--------+----------+ 3597c478bd9Sstevel@tonic-gate * 63 31 30 1 0 3607c478bd9Sstevel@tonic-gate * 3617c478bd9Sstevel@tonic-gate */ 3627c478bd9Sstevel@tonic-gate #define ICACHE_FLUSHSZ 0x20 /* one line in i$ */ 3637c478bd9Sstevel@tonic-gate #define CHEETAH_DC_VBIT_SHIFT 1 3647c478bd9Sstevel@tonic-gate #define CHEETAH_DC_VBIT_MASK 0x1 3657c478bd9Sstevel@tonic-gate 3667c478bd9Sstevel@tonic-gate /* 3677c478bd9Sstevel@tonic-gate * Define for max size of "reason" string in panic flows. Since this is on 3687c478bd9Sstevel@tonic-gate * the stack, we want to keep it as small as is reasonable. 3697c478bd9Sstevel@tonic-gate */ 3707c478bd9Sstevel@tonic-gate #define MAX_REASON_STRING 40 3717c478bd9Sstevel@tonic-gate 3727c478bd9Sstevel@tonic-gate /* 3737c478bd9Sstevel@tonic-gate * These error types are specific to Cheetah and are used internally for the 3747c478bd9Sstevel@tonic-gate * Cheetah fault structure flt_type field. 3757c478bd9Sstevel@tonic-gate */ 3767c478bd9Sstevel@tonic-gate #define CPU_TO 1 /* Timeout */ 3777c478bd9Sstevel@tonic-gate #define CPU_BERR 2 /* Bus Error */ 3787c478bd9Sstevel@tonic-gate #define CPU_CE 3 /* Correctable Memory Error */ 3797c478bd9Sstevel@tonic-gate #define CPU_UE 4 /* Uncorrectable Memory Error */ 3807c478bd9Sstevel@tonic-gate #define CPU_CE_ECACHE 5 /* Correctable Ecache Error */ 3817c478bd9Sstevel@tonic-gate #define CPU_UE_ECACHE 6 /* Uncorrectable Ecache Error */ 3827c478bd9Sstevel@tonic-gate #define CPU_EMC 7 /* Correctable Mtag Error */ 3837c478bd9Sstevel@tonic-gate #define CPU_FATAL 8 /* Fatal Error */ 3847c478bd9Sstevel@tonic-gate #define CPU_ORPH 9 /* Orphaned UCC/UCU error */ 3857c478bd9Sstevel@tonic-gate #define CPU_IV 10 /* IVU or IVC */ 3867c478bd9Sstevel@tonic-gate #define CPU_INV_AFSR 11 /* Invalid AFSR */ 3877c478bd9Sstevel@tonic-gate #define CPU_UE_ECACHE_RETIRE 12 /* Uncorrectable Ecache, retire page */ 3887c478bd9Sstevel@tonic-gate #define CPU_IC_PARITY 13 /* Icache parity error trap */ 3897c478bd9Sstevel@tonic-gate #define CPU_DC_PARITY 14 /* Dcache parity error trap */ 3907c478bd9Sstevel@tonic-gate #define CPU_DUE 15 /* Disrupting UE */ 3917c478bd9Sstevel@tonic-gate #define CPU_FPUERR 16 /* FPU Error */ 3927c478bd9Sstevel@tonic-gate /* 3937c478bd9Sstevel@tonic-gate * These next six error types (17-22) are only used in Jalapeno code 3947c478bd9Sstevel@tonic-gate */ 3957c478bd9Sstevel@tonic-gate #define CPU_RCE 17 /* Correctable remote memory error */ 3967c478bd9Sstevel@tonic-gate #define CPU_RUE 18 /* Uncorrectable remote memory error */ 3977c478bd9Sstevel@tonic-gate #define CPU_FRC 19 /* Correctable foreign memory error */ 3987c478bd9Sstevel@tonic-gate #define CPU_FRU 20 /* Uncorrectable foreign memory error */ 3997c478bd9Sstevel@tonic-gate #define CPU_BPAR 21 /* Bus parity (BP or WBP) errorrs */ 4007c478bd9Sstevel@tonic-gate #define CPU_UMS 22 /* Unsupported memory store */ 4017c478bd9Sstevel@tonic-gate /* 4027c478bd9Sstevel@tonic-gate * These next four error types (23-26) are only used in Panther code 4037c478bd9Sstevel@tonic-gate */ 4047c478bd9Sstevel@tonic-gate #define CPU_PC_PARITY 23 /* Pcache parity error */ 4057c478bd9Sstevel@tonic-gate #define CPU_ITLB_PARITY 24 /* Panther ITLB parity error */ 4067c478bd9Sstevel@tonic-gate #define CPU_DTLB_PARITY 25 /* Panther DTLB parity error */ 4077c478bd9Sstevel@tonic-gate #define CPU_L3_ADDR_PE 26 /* Panther L3$ address parity error */ 4087c478bd9Sstevel@tonic-gate 4097c478bd9Sstevel@tonic-gate /* 4107c478bd9Sstevel@tonic-gate * Sets trap table entry ttentry by overwriting eight instructions from ttlabel 4117c478bd9Sstevel@tonic-gate */ 4127c478bd9Sstevel@tonic-gate #define CH_SET_TRAP(ttentry, ttlabel) \ 4137c478bd9Sstevel@tonic-gate bcopy((const void *)&ttlabel, &ttentry, 32); \ 4147c478bd9Sstevel@tonic-gate flush_instr_mem((caddr_t)&ttentry, 32); 4157c478bd9Sstevel@tonic-gate 4167c478bd9Sstevel@tonic-gate /* 4177c478bd9Sstevel@tonic-gate * Return values for implementation specific error logging in the routine 4187c478bd9Sstevel@tonic-gate * cpu_impl_async_log_err() 4197c478bd9Sstevel@tonic-gate */ 4207c478bd9Sstevel@tonic-gate #define CH_ASYNC_LOG_DONE 0 /* finished logging the error */ 4217c478bd9Sstevel@tonic-gate #define CH_ASYNC_LOG_CONTINUE 1 /* continue onto handle panicker */ 4227c478bd9Sstevel@tonic-gate #define CH_ASYNC_LOG_UNKNOWN 2 /* unknown error type */ 4237c478bd9Sstevel@tonic-gate #define CH_ASYNC_LOG_RECIRC 3 /* suppress logging of error */ 4247c478bd9Sstevel@tonic-gate 4257c478bd9Sstevel@tonic-gate #ifndef _ASM 4267c478bd9Sstevel@tonic-gate 4277c478bd9Sstevel@tonic-gate /* 4287c478bd9Sstevel@tonic-gate * Define Cheetah family (UltraSPARC-III) specific asynchronous error structure 4297c478bd9Sstevel@tonic-gate */ 4307c478bd9Sstevel@tonic-gate typedef struct cheetah_async_flt { 4317c478bd9Sstevel@tonic-gate struct async_flt cmn_asyncflt; /* common - see sun4u/sys/async.h */ 4327c478bd9Sstevel@tonic-gate ushort_t flt_type; /* types of faults - cpu specific */ 4337c478bd9Sstevel@tonic-gate uint64_t flt_bit; /* fault bit for this log msg */ 4347c478bd9Sstevel@tonic-gate uint64_t afsr_ext; /* Panther has an AFSR_EXT register */ 4357c478bd9Sstevel@tonic-gate uint64_t afsr_errs; /* Store all AFSR error bits together */ 4367c478bd9Sstevel@tonic-gate uint64_t afar2; /* Serrano has an AFAR2 for FRC/FRU */ 4377c478bd9Sstevel@tonic-gate ch_diag_data_t flt_diag_data; /* Diagnostic data */ 4387c478bd9Sstevel@tonic-gate int flt_data_incomplete; /* Diagnostic data is incomplete */ 4397c478bd9Sstevel@tonic-gate int flt_trapped_ce; /* CEEN fault caught by trap handler */ 4407c478bd9Sstevel@tonic-gate #if defined(CPU_IMP_L1_CACHE_PARITY) 4417c478bd9Sstevel@tonic-gate ch_l1_parity_log_t parity_data; /* L1$ Parity error logging info */ 4427c478bd9Sstevel@tonic-gate #endif /* CPU_IMP_L1_CACHE_PARITY */ 4437c478bd9Sstevel@tonic-gate pn_tlb_logout_t tlb_diag_data; /* TLB parity error Diagnostic data */ 4447c478bd9Sstevel@tonic-gate uint32_t flt_fpdata[16]; /* Data from fpras failure */ 4457c478bd9Sstevel@tonic-gate uint64_t flt_sdw_afar; /* Shadow AFAR */ 4467c478bd9Sstevel@tonic-gate uint64_t flt_sdw_afsr; /* Shadow AFSR */ 4477c478bd9Sstevel@tonic-gate uint64_t flt_sdw_afsr_ext; /* Shadow Extended AFSR */ 4487c478bd9Sstevel@tonic-gate } ch_async_flt_t; 4497c478bd9Sstevel@tonic-gate 4507c478bd9Sstevel@tonic-gate #define ECC_ALL_TRAPS (ECC_D_TRAP | ECC_I_TRAP | ECC_C_TRAP | ECC_F_TRAP) 4517c478bd9Sstevel@tonic-gate #define ECC_ORPH_TRAPS (ECC_D_TRAP | ECC_I_TRAP | ECC_C_TRAP) 4527c478bd9Sstevel@tonic-gate #define ECC_ASYNC_TRAPS (ECC_D_TRAP | ECC_I_TRAP) 4537c478bd9Sstevel@tonic-gate #define ECC_MECC_TRAPS (ECC_D_TRAP | ECC_C_TRAP | ECC_F_TRAP) 4547c478bd9Sstevel@tonic-gate 4557c478bd9Sstevel@tonic-gate /* 4567c478bd9Sstevel@tonic-gate * Error type table struct. 4577c478bd9Sstevel@tonic-gate */ 4587c478bd9Sstevel@tonic-gate typedef struct ecc_type_to_info { 4597c478bd9Sstevel@tonic-gate uint64_t ec_afsr_bit; /* AFSR bit of error */ 4607c478bd9Sstevel@tonic-gate char *ec_reason; /* Short error description */ 4617c478bd9Sstevel@tonic-gate uint_t ec_flags; /* Trap type error should be seen at */ 4627c478bd9Sstevel@tonic-gate int ec_flt_type; /* Used by cpu_async_log_err */ 4637c478bd9Sstevel@tonic-gate char *ec_desc; /* Long error description */ 4647c478bd9Sstevel@tonic-gate uint64_t ec_err_payload; /* FM ereport payload information */ 4657c478bd9Sstevel@tonic-gate char *ec_err_class; /* FM ereport class */ 4667c478bd9Sstevel@tonic-gate } ecc_type_to_info_t; 4677c478bd9Sstevel@tonic-gate 4687c478bd9Sstevel@tonic-gate typedef struct bus_config_eclk { 4697c478bd9Sstevel@tonic-gate uint_t divisor; 4707c478bd9Sstevel@tonic-gate uint64_t mask; 4717c478bd9Sstevel@tonic-gate } bus_config_eclk_t; 4727c478bd9Sstevel@tonic-gate 4737c478bd9Sstevel@tonic-gate #endif /* _ASM */ 4747c478bd9Sstevel@tonic-gate 4757c478bd9Sstevel@tonic-gate #endif /* _KERNEL */ 4767c478bd9Sstevel@tonic-gate 4777c478bd9Sstevel@tonic-gate #ifndef _ASM 4787c478bd9Sstevel@tonic-gate 4797c478bd9Sstevel@tonic-gate #include <sys/cpuvar.h> 4807c478bd9Sstevel@tonic-gate 4817c478bd9Sstevel@tonic-gate /* 4827c478bd9Sstevel@tonic-gate * Since all the US3_* files share a bunch of routines between each other 4837c478bd9Sstevel@tonic-gate * we will put all the "extern" definitions in this header file so that we 4847c478bd9Sstevel@tonic-gate * don't have to repeat it all in every file. 4857c478bd9Sstevel@tonic-gate */ 4867c478bd9Sstevel@tonic-gate 4877c478bd9Sstevel@tonic-gate /* 4887c478bd9Sstevel@tonic-gate * functions that are defined in the US3 cpu module: 4897c478bd9Sstevel@tonic-gate * ------------------------------------------------- 4907c478bd9Sstevel@tonic-gate */ 4917c478bd9Sstevel@tonic-gate extern uint64_t get_safari_config(void); 4927c478bd9Sstevel@tonic-gate extern void set_safari_config(uint64_t safari_config); 4937c478bd9Sstevel@tonic-gate extern void shipit(int, int); 4947c478bd9Sstevel@tonic-gate extern void cpu_aflt_log(int ce_code, int tagnum, ch_async_flt_t *aflt, 4957c478bd9Sstevel@tonic-gate uint_t logflags, const char *endstr, const char *fmt, ...); 4967c478bd9Sstevel@tonic-gate extern uint8_t flt_to_trap_type(struct async_flt *aflt); 4977c478bd9Sstevel@tonic-gate extern void cpu_log_err(struct async_flt *aflt); 4987c478bd9Sstevel@tonic-gate extern void cpu_page_retire(ch_async_flt_t *ch_flt); 4997c478bd9Sstevel@tonic-gate extern int clear_errors(ch_async_flt_t *ch_flt); 5007c478bd9Sstevel@tonic-gate extern void cpu_init_ecache_scrub_dr(struct cpu *cp); 5017c478bd9Sstevel@tonic-gate extern void get_cpu_error_state(ch_cpu_errors_t *); 5027c478bd9Sstevel@tonic-gate extern void set_cpu_error_state(ch_cpu_errors_t *); 5037c478bd9Sstevel@tonic-gate extern int cpu_flt_in_memory(ch_async_flt_t *ch_flt, uint64_t t_afsr_bit); 5047c478bd9Sstevel@tonic-gate extern int cpu_queue_events(ch_async_flt_t *ch_flt, char *reason, 5057c478bd9Sstevel@tonic-gate uint64_t t_afsr, ch_cpu_logout_t *clop); 5067c478bd9Sstevel@tonic-gate extern void cpu_error_ecache_flush(ch_async_flt_t *); 5077c478bd9Sstevel@tonic-gate extern void cpu_clearphys(struct async_flt *aflt); 5087c478bd9Sstevel@tonic-gate extern void cpu_async_log_ic_parity_err(ch_async_flt_t *); 5097c478bd9Sstevel@tonic-gate extern void cpu_async_log_dc_parity_err(ch_async_flt_t *); 5107c478bd9Sstevel@tonic-gate extern uint64_t get_ecache_ctrl(void); 5117c478bd9Sstevel@tonic-gate extern uint64_t get_jbus_config(void); 5127c478bd9Sstevel@tonic-gate extern void set_jbus_config(uint64_t jbus_config); 5137c478bd9Sstevel@tonic-gate extern uint64_t get_mcu_ctl_reg1(void); 5147c478bd9Sstevel@tonic-gate extern void set_mcu_ctl_reg1(uint64_t mcu_ctl); 5157c478bd9Sstevel@tonic-gate extern void cpu_init_trap(void); 5167c478bd9Sstevel@tonic-gate extern int cpu_ecache_nway(void); 5177c478bd9Sstevel@tonic-gate extern void cpu_delayed_logout(size_t, ch_cpu_logout_t *); 5187c478bd9Sstevel@tonic-gate extern void cpu_payload_add_pcache(struct async_flt *, nvlist_t *); 5197c478bd9Sstevel@tonic-gate extern void cpu_payload_add_tlb(struct async_flt *, nvlist_t *); 5207c478bd9Sstevel@tonic-gate extern int cpu_scrub_cpu_setup(cpu_setup_t, int, void *); 5217c478bd9Sstevel@tonic-gate #if defined(JALAPENO) || defined(SERRANO) 5227c478bd9Sstevel@tonic-gate extern int afsr_to_jaid_status(uint64_t afsr, uint64_t afsr_bit); 5237c478bd9Sstevel@tonic-gate #endif /* JALAPENO || SERRANO */ 5247c478bd9Sstevel@tonic-gate /* 5257c478bd9Sstevel@tonic-gate * Address of the level 15 interrupt handler preamble, used to log Fast ECC 5267c478bd9Sstevel@tonic-gate * at TL>0 errors, which will be moved to the trap table address above. 5277c478bd9Sstevel@tonic-gate */ 5287c478bd9Sstevel@tonic-gate extern void ch_pil15_interrupt_instr(); 5297c478bd9Sstevel@tonic-gate #ifdef CHEETAHPLUS_ERRATUM_25 5307c478bd9Sstevel@tonic-gate extern int mondo_recover(uint16_t, int); 5317c478bd9Sstevel@tonic-gate #endif /* CHEETAHPLUS_ERRATUM_25 */ 5327c478bd9Sstevel@tonic-gate /* 5337c478bd9Sstevel@tonic-gate * Adddresses of the Fast ECC Error trap handler preambles which will be 5347c478bd9Sstevel@tonic-gate * moved to the appropriate trap table addresses. 5357c478bd9Sstevel@tonic-gate */ 5367c478bd9Sstevel@tonic-gate extern void fecc_err_instr(void); 5377c478bd9Sstevel@tonic-gate extern void fecc_err_tl1_instr(void); 5387c478bd9Sstevel@tonic-gate extern void fecc_err_tl1_cont_instr(void); 5397c478bd9Sstevel@tonic-gate 5407c478bd9Sstevel@tonic-gate extern int afsr_to_overw_status(uint64_t afsr, uint64_t afsr_bit, 5417c478bd9Sstevel@tonic-gate uint64_t *ow_bits); 5427c478bd9Sstevel@tonic-gate #if defined(CHEETAH_PLUS) 5437c478bd9Sstevel@tonic-gate extern int afsr_to_pn_esynd_status(uint64_t afsr, uint64_t afsr_bit); 5447c478bd9Sstevel@tonic-gate #endif /* CHEETAH_PLUS */ 5457c478bd9Sstevel@tonic-gate extern void flush_ecache(uint64_t physaddr, size_t ecachesize, size_t linesize); 5467c478bd9Sstevel@tonic-gate extern void flush_dcache(void); 5477c478bd9Sstevel@tonic-gate extern void flush_icache(void); 5487c478bd9Sstevel@tonic-gate extern void flush_pcache(void); 5497c478bd9Sstevel@tonic-gate extern void flush_ipb(void); 5507c478bd9Sstevel@tonic-gate extern uint64_t get_dcu(void); 5517c478bd9Sstevel@tonic-gate extern void set_dcu(uint64_t ncc); 5527c478bd9Sstevel@tonic-gate extern void scrubphys(uint64_t paddr, int ecache_set_size); 5537c478bd9Sstevel@tonic-gate extern void clearphys(uint64_t paddr, int ecache_set_size, int ecache_linesize); 5547c478bd9Sstevel@tonic-gate extern void stick_adj(int64_t skew); 5557c478bd9Sstevel@tonic-gate extern void stick_timestamp(int64_t *ts); 5567c478bd9Sstevel@tonic-gate extern void icache_inval_all(void); 5577c478bd9Sstevel@tonic-gate extern void dcache_inval_line(int index); 5587c478bd9Sstevel@tonic-gate extern void ecache_flush_line(uint64_t flushaddr, int ec_size); 5597c478bd9Sstevel@tonic-gate extern int ecache_get_lineinfo(uint32_t ecache_index, uint64_t *tag, 5607c478bd9Sstevel@tonic-gate uint64_t *data); 5617c478bd9Sstevel@tonic-gate #if defined(CPU_IMP_L1_CACHE_PARITY) 5627c478bd9Sstevel@tonic-gate extern void get_dcache_dtag(uint32_t dcache_idx, uint64_t *data); 5637c478bd9Sstevel@tonic-gate extern void get_icache_dtag(uint32_t icache_idx, uint64_t *data); 5647c478bd9Sstevel@tonic-gate extern void get_pcache_dtag(uint32_t pcache_idx, uint64_t *data); 5657c478bd9Sstevel@tonic-gate extern void correct_dcache_parity(size_t dcache_size, size_t dcache_linesize); 5667c478bd9Sstevel@tonic-gate #endif /* CPU_IMP_L1_CACHE_PARITY */ 5677c478bd9Sstevel@tonic-gate extern void cpu_check_block(caddr_t, uint_t); 5687c478bd9Sstevel@tonic-gate extern uint32_t us3_gen_ecc(uint64_t data_low, uint64_t data_high); 5697c478bd9Sstevel@tonic-gate extern int cpu_impl_async_log_err(void *, errorq_elem_t *); 5707c478bd9Sstevel@tonic-gate extern void cpu_fast_ecc_error(struct regs *rp, ulong_t p_clo_flags); 5717c478bd9Sstevel@tonic-gate extern void cpu_tl1_error(struct regs *rp, int panic); 5727c478bd9Sstevel@tonic-gate extern void cpu_tl1_err_panic(struct regs *rp, ulong_t flags); 5737c478bd9Sstevel@tonic-gate extern void cpu_disrupting_error(struct regs *rp, ulong_t p_clo_flags); 5747c478bd9Sstevel@tonic-gate extern void cpu_deferred_error(struct regs *rp, ulong_t p_clo_flags); 5757c478bd9Sstevel@tonic-gate #if defined(CPU_IMP_L1_CACHE_PARITY) 5767c478bd9Sstevel@tonic-gate extern void cpu_parity_error(struct regs *rp, uint_t flags, caddr_t tpc); 5777c478bd9Sstevel@tonic-gate #endif /* CPU_IMP_L1_CACHE_PARITY */ 5787c478bd9Sstevel@tonic-gate extern void claimlines(uint64_t startpa, size_t len, int stride); 5797c478bd9Sstevel@tonic-gate extern void copy_tsb_entry(uintptr_t src, uintptr_t dest); 5807c478bd9Sstevel@tonic-gate extern void hwblkpagecopy(const void *src, void *dst); 5817c478bd9Sstevel@tonic-gate #if defined(CHEETAH_PLUS) 5827c478bd9Sstevel@tonic-gate extern void pn_cpu_log_diag_l2_info(ch_async_flt_t *ch_flt); 5837c478bd9Sstevel@tonic-gate extern void set_afsr_ext(uint64_t afsr_ext); 5847c478bd9Sstevel@tonic-gate #endif 5857c478bd9Sstevel@tonic-gate extern void cpu_tlb_parity_error(struct regs *rp, ulong_t trap_va, 5867c478bd9Sstevel@tonic-gate ulong_t tlb_info); 5877c478bd9Sstevel@tonic-gate extern void log_flt_func(struct async_flt *aflt, char *unum); 5887c478bd9Sstevel@tonic-gate extern uint64_t pn_get_tlb_index(uint64_t va, uint64_t pg_sz); 5897c478bd9Sstevel@tonic-gate extern int popc64(uint64_t val); 5907c478bd9Sstevel@tonic-gate 5917c478bd9Sstevel@tonic-gate /* 5927c478bd9Sstevel@tonic-gate * variables and structures that are defined in the US3 cpu module: 5937c478bd9Sstevel@tonic-gate * ---------------------------------------------------------------- 5947c478bd9Sstevel@tonic-gate */ 5957c478bd9Sstevel@tonic-gate extern bus_config_eclk_t bus_config_eclk[]; 5967c478bd9Sstevel@tonic-gate extern ecc_type_to_info_t ecc_type_to_info[]; 5977c478bd9Sstevel@tonic-gate extern uint64_t ch_err_tl1_paddrs[]; 5987c478bd9Sstevel@tonic-gate extern uchar_t ch_err_tl1_pending[]; 5997c478bd9Sstevel@tonic-gate #ifdef CHEETAHPLUS_ERRATUM_25 6007c478bd9Sstevel@tonic-gate /* 6017c478bd9Sstevel@tonic-gate * Tunable defined in us3_common.c 6027c478bd9Sstevel@tonic-gate */ 6037c478bd9Sstevel@tonic-gate extern int cheetah_sendmondo_recover; 6047c478bd9Sstevel@tonic-gate #endif /* CHEETAHPLUS_ERRATUM_25 */ 6057c478bd9Sstevel@tonic-gate /* 6067c478bd9Sstevel@tonic-gate * The following allows for a one time calculation of the number of dcache 6077c478bd9Sstevel@tonic-gate * lines vs. calculating the number every time through the scrub routine. 6087c478bd9Sstevel@tonic-gate */ 6097c478bd9Sstevel@tonic-gate int dcache_nlines; /* max number of D$ lines */ 6107c478bd9Sstevel@tonic-gate 6117c478bd9Sstevel@tonic-gate extern uint64_t afar_overwrite[]; 6127c478bd9Sstevel@tonic-gate extern uint64_t esynd_overwrite[]; 6137c478bd9Sstevel@tonic-gate extern uint64_t msynd_overwrite[]; 6147c478bd9Sstevel@tonic-gate 6157c478bd9Sstevel@tonic-gate #if defined(JALAPENO) || defined(SERRANO) 6167c478bd9Sstevel@tonic-gate extern uint64_t jreq_overwrite[]; 6177c478bd9Sstevel@tonic-gate #if defined(SERRANO) 6187c478bd9Sstevel@tonic-gate extern uint64_t afar2_overwrite[]; 6197c478bd9Sstevel@tonic-gate #endif /* SERRANO */ 6207c478bd9Sstevel@tonic-gate #endif /* JALAPENO || SERRANO */ 6217c478bd9Sstevel@tonic-gate 6227c478bd9Sstevel@tonic-gate /* 6237c478bd9Sstevel@tonic-gate * variables and structures that are defined outside the US3 cpu module: 6247c478bd9Sstevel@tonic-gate * --------------------------------------------------------------------- 6257c478bd9Sstevel@tonic-gate */ 6267c478bd9Sstevel@tonic-gate extern uint64_t xc_tick_limit; 6277c478bd9Sstevel@tonic-gate extern uint64_t xc_tick_jump_limit; 6287c478bd9Sstevel@tonic-gate extern struct kmem_cache *ch_private_cache; 6297c478bd9Sstevel@tonic-gate 6307c478bd9Sstevel@tonic-gate #if defined(CPU_IMP_L1_CACHE_PARITY) 6317c478bd9Sstevel@tonic-gate /* 6327c478bd9Sstevel@tonic-gate * Addresses of the Dcache and Icache parity error trap table entries. 6337c478bd9Sstevel@tonic-gate * If L1 cache parity protection is implemented, need to replace Dcache and 6347c478bd9Sstevel@tonic-gate * Icache parity error handlers. 6357c478bd9Sstevel@tonic-gate */ 6367c478bd9Sstevel@tonic-gate extern void *tt0_dperr; 6377c478bd9Sstevel@tonic-gate extern void *tt1_dperr; 6387c478bd9Sstevel@tonic-gate extern void *tt1_swtrap1; 6397c478bd9Sstevel@tonic-gate extern void *tt0_iperr; 6407c478bd9Sstevel@tonic-gate extern void *tt1_iperr; 6417c478bd9Sstevel@tonic-gate extern void *tt1_swtrap2; 6427c478bd9Sstevel@tonic-gate /* 6437c478bd9Sstevel@tonic-gate * Addresses of the Dcache and Icache parity error trap preambles, which will 6447c478bd9Sstevel@tonic-gate * be moved to the appropriate trap table addresses. 6457c478bd9Sstevel@tonic-gate */ 6467c478bd9Sstevel@tonic-gate extern void dcache_parity_instr(); 6477c478bd9Sstevel@tonic-gate extern void dcache_parity_tl1_instr(); 6487c478bd9Sstevel@tonic-gate extern void dcache_parity_tl1_cont_instr(); 6497c478bd9Sstevel@tonic-gate extern void icache_parity_instr(); 6507c478bd9Sstevel@tonic-gate extern void icache_parity_tl1_instr(); 6517c478bd9Sstevel@tonic-gate extern void icache_parity_tl1_cont_instr(); 6527c478bd9Sstevel@tonic-gate #endif /* CPU_IMP_L1_CACHE_PARITY */ 6537c478bd9Sstevel@tonic-gate 6547c478bd9Sstevel@tonic-gate /* 6557c478bd9Sstevel@tonic-gate * Addresses of the Fast ECC error trap table entries. 6567c478bd9Sstevel@tonic-gate */ 6577c478bd9Sstevel@tonic-gate extern void *tt0_fecc; 6587c478bd9Sstevel@tonic-gate extern void *tt1_fecc; 6597c478bd9Sstevel@tonic-gate extern void *tt1_swtrap0; 6607c478bd9Sstevel@tonic-gate /* 6617c478bd9Sstevel@tonic-gate * Address of trap table level 15 interrupt handler in the trap table. 6627c478bd9Sstevel@tonic-gate */ 663*b9e93c10SJonathan Haslam extern void *pil15_epilogue; 6647c478bd9Sstevel@tonic-gate /* 6657c478bd9Sstevel@tonic-gate * D$ and I$ global parameters. 6667c478bd9Sstevel@tonic-gate */ 6677c478bd9Sstevel@tonic-gate extern int dcache_size; 6687c478bd9Sstevel@tonic-gate extern int dcache_linesize; 6697c478bd9Sstevel@tonic-gate extern int icache_size; 6707c478bd9Sstevel@tonic-gate extern int icache_linesize; 6717c478bd9Sstevel@tonic-gate 6727c478bd9Sstevel@tonic-gate /* 6737c478bd9Sstevel@tonic-gate * Set of all offline cpus 6747c478bd9Sstevel@tonic-gate */ 6757c478bd9Sstevel@tonic-gate extern cpuset_t cpu_offline_set; 6767c478bd9Sstevel@tonic-gate 6777c478bd9Sstevel@tonic-gate #endif /* _ASM */ 6787c478bd9Sstevel@tonic-gate 6797c478bd9Sstevel@tonic-gate #ifdef __cplusplus 6807c478bd9Sstevel@tonic-gate } 6817c478bd9Sstevel@tonic-gate #endif 6827c478bd9Sstevel@tonic-gate 6837c478bd9Sstevel@tonic-gate #endif /* _SYS_US3_MODULE_H */ 684