Lines Matching refs:ch_flt

118 static void cpu_log_diag_info(ch_async_flt_t *ch_flt);
119 static void cpu_queue_one_event(ch_async_flt_t *ch_flt, char *reason,
121 static int cpu_flt_in_memory_one_event(ch_async_flt_t *ch_flt,
125 static int cpu_ecache_line_valid(ch_async_flt_t *ch_flt);
133 static void cpu_flush_ecache_line(ch_async_flt_t *ch_flt);
165 static void cpu_dcache_parity_info(ch_async_flt_t *ch_flt);
166 static void cpu_dcache_parity_check(ch_async_flt_t *ch_flt, int index);
167 static void cpu_record_dc_data_parity(ch_async_flt_t *ch_flt,
169 static void cpu_icache_parity_info(ch_async_flt_t *ch_flt);
170 static void cpu_icache_parity_check(ch_async_flt_t *ch_flt, int index);
171 static void cpu_pcache_parity_info(ch_async_flt_t *ch_flt);
172 static void cpu_pcache_parity_check(ch_async_flt_t *ch_flt, int index);
1189 ch_async_flt_t ch_flt;
1196 bzero(&ch_flt, sizeof (ch_async_flt_t));
1202 ch_flt.afar2 = clop->clo_data.chd_afar2;
1214 aflt = (struct async_flt *)&ch_flt;
1216 ch_flt.afsr_ext = t_afsr_ext;
1217 ch_flt.afsr_errs = t_afsr_errs;
1234 if (cpu_queue_events(&ch_flt, NULL, t_afsr_errs, clop) == 0) {
1235 ch_flt.flt_type = CPU_INV_AFSR;
1237 (void *)&ch_flt, sizeof (ch_async_flt_t), ue_queue,
1343 ch_async_flt_t ch_flt;
1348 bzero(&ch_flt, sizeof (ch_async_flt_t));
1354 ch_flt.flt_diag_data.chd_afar = LOGOUT_INVALID;
1361 ch_flt.afar2 = cpu_error_regs.afar2;
1368 ch_flt.afar2 = clop->clo_data.chd_afar2;
1382 aflt = (struct async_flt *)&ch_flt;
1384 ch_flt.afsr_ext = t_afsr_ext;
1385 ch_flt.afsr_errs = t_afsr_errs;
1445 if (cpu_queue_events(&ch_flt, pr_reason, t_afsr_errs, clop) == 0 ||
1447 ch_flt.flt_type = CPU_INV_AFSR;
1449 (void *)&ch_flt, sizeof (ch_async_flt_t), ue_queue,
1475 if (clear_errors(&ch_flt)) {
1476 aflt->flt_panic |= ((ch_flt.afsr_errs &
1478 (void) cpu_queue_events(&ch_flt, pr_reason, ch_flt.afsr_errs,
1632 ch_async_flt_t ch_flt;
1638 bzero(&ch_flt, sizeof (ch_async_flt_t));
1646 ch_flt.flt_diag_data.chd_afar = LOGOUT_INVALID;
1653 ch_flt.afar2 = cpu_error_regs.afar2;
1661 ch_flt.afar2 = clop->clo_data.chd_afar2;
1675 aflt = (struct async_flt *)&ch_flt;
1676 ch_flt.afsr_ext = t_afsr_ext;
1677 ch_flt.afsr_errs = t_afsr_errs;
1692 ch_flt.flt_trapped_ce = CE_CEEN_DEFER | CE_CEEN_TRAPPED;
1694 ch_flt.flt_trapped_ce = CE_CEEN_NODEFER | CE_CEEN_TRAPPED;
1699 cpu_log_and_clear_ce(&ch_flt);
1709 if (ch_flt.flt_trapped_ce & CE_CEEN_NODEFER)
1711 if (clear_errors(&ch_flt)) {
1712 (void) cpu_queue_events(&ch_flt, pr_reason, ch_flt.afsr_errs,
1740 ch_async_flt_t ch_flt;
1762 bzero(&ch_flt, sizeof (ch_async_flt_t));
1770 ch_flt.flt_diag_data.chd_afar = LOGOUT_INVALID;
1777 ch_flt.afar2 = cpu_error_regs.afar2;
1786 ch_flt.afar2 = clop->clo_data.chd_afar2;
1810 aflt = (struct async_flt *)&ch_flt;
1814 ch_flt.afsr_ext = t_afsr_ext;
1815 ch_flt.afsr_errs = t_afsr_errs;
1916 cpu_queue_events(&ch_flt, pr_reason, log_afsr, clop) == 0) ||
1918 ch_flt.flt_type = CPU_INV_AFSR;
1920 (void *)&ch_flt, sizeof (ch_async_flt_t), ue_queue,
1960 if (aflt->flt_panic && cpu_flt_in_memory(&ch_flt, C_AFSR_UE)) {
1969 cpu_error_ecache_flush(&ch_flt);
1998 if (aflt->flt_panic && cpu_flt_in_memory(&ch_flt, C_AFSR_UE)) {
2008 cpu_error_ecache_flush(&ch_flt);
2024 if (clear_errors(&ch_flt)) {
2029 if (cpu_check_secondary_errors(&ch_flt, t_afsr_errs,
2031 aflt->flt_panic |= ((ch_flt.afsr_errs &
2034 (void) cpu_queue_events(&ch_flt, pr_reason, ch_flt.afsr_errs,
2085 ch_async_flt_t ch_flt;
2105 bzero(&ch_flt, sizeof (ch_async_flt_t));
2106 aflt = (struct async_flt *)&ch_flt;
2118 ch_flt.flt_type = iparity ? CPU_IC_PARITY : CPU_DC_PARITY;
2121 cpu_icache_parity_info(&ch_flt);
2122 if (ch_flt.parity_data.ipe.cpl_off != -1)
2124 else if (ch_flt.parity_data.ipe.cpl_way != -1)
2130 cpu_dcache_parity_info(&ch_flt);
2131 if (ch_flt.parity_data.dpe.cpl_off != -1) {
2137 way = ch_flt.parity_data.dpe.cpl_way;
2179 } else if (ch_flt.parity_data.dpe.cpl_way != -1)
2188 cpu_pcache_parity_info(&ch_flt);
2189 if (ch_flt.parity_data.dpe.cpl_cache == CPU_PC_PARITY) {
2197 cpu_errorq_dispatch(error_class, (void *)&ch_flt,
2283 cpu_async_log_ic_parity_err(ch_async_flt_t *ch_flt)
2285 int way = ch_flt->parity_data.ipe.cpl_way;
2286 int offset = ch_flt->parity_data.ipe.cpl_off;
2288 struct async_flt *aflt = (struct async_flt *)ch_flt;
2295 tag_index = ch_flt->parity_data.ipe.cpl_ic[way].ic_idx;
2297 ch_flt->parity_data.ipe.cpl_ic[way].ic_way =
2300 ch_flt->parity_data.ipe.cpl_ic[way].ic_way =
2302 ch_flt->parity_data.ipe.cpl_ic[way].ic_logflag =
2310 tag_index = ch_flt->parity_data.ipe.cpl_ic[way].ic_idx;
2312 ch_flt->parity_data.ipe.cpl_ic[way].ic_way =
2315 ch_flt->parity_data.ipe.cpl_ic[way].ic_way =
2317 ch_flt->parity_data.ipe.cpl_ic[way].ic_logflag =
2328 cpu_async_log_dc_parity_err(ch_async_flt_t *ch_flt)
2330 int way = ch_flt->parity_data.dpe.cpl_way;
2331 int offset = ch_flt->parity_data.dpe.cpl_off;
2342 if (ch_flt->parity_data.dpe.cpl_cache == CPU_PC_PARITY) {
2343 tag_index = ch_flt->parity_data.dpe.cpl_pc[way].pc_idx;
2344 ch_flt->parity_data.dpe.cpl_pc[way].pc_way =
2346 ch_flt->parity_data.dpe.cpl_pc[way].pc_logflag =
2349 tag_index = ch_flt->parity_data.dpe.cpl_dc[way].dc_idx;
2350 ch_flt->parity_data.dpe.cpl_dc[way].dc_way =
2352 ch_flt->parity_data.dpe.cpl_dc[way].dc_logflag =
2359 tag_index = ch_flt->parity_data.dpe.cpl_dc[way].dc_idx;
2360 ch_flt->parity_data.dpe.cpl_dc[way].dc_way =
2362 ch_flt->parity_data.dpe.cpl_dc[way].dc_logflag =
2381 ch_async_flt_t *ch_flt = (ch_async_flt_t *)flt;
2386 switch (ch_flt->flt_type) {
2406 cpu_page_retire(ch_flt);
2430 if ((ch_flt->afsr_errs &
2435 if (ch_flt->flt_trapped_ce & CE_CEEN_DEFER) {
2505 if (!panicstr && (ch_flt->afsr_errs &
2540 (void *)aflt, ch_flt->flt_type);
2549 cpu_page_retire(ch_flt);
2568 cpu_page_retire(ch_async_flt_t *ch_flt)
2570 struct async_flt *aflt = (struct async_flt *)ch_flt;
2607 ch_async_flt_t *ch_flt = (ch_async_flt_t *)aflt;
2609 if (cpu_error_is_ecache_data(aflt->flt_inst, ch_flt->flt_bit))
2617 ch_flt->afsr_errs, ch_flt->flt_bit);
2623 afar_status = afsr_to_afar_status(ch_flt->afsr_errs,
2624 ch_flt->flt_bit);
2629 aflt->flt_synd, ch_flt->flt_bit);
2651 ch_flt->flt_bit);
2658 cpu_log_diag_info(ch_flt);
2668 if (ch_flt->flt_trapped_ce & CE_CEEN_DEFER) {
3376 ch_async_flt_t ch_flt;
3388 bzero(&ch_flt, sizeof (ch_async_flt_t));
3389 aflt = (struct async_flt *)&ch_flt;
3399 ch_flt.afsr_ext = cpu_error_regs.afsr_ext;
3400 ch_flt.afsr_errs = afsr_errs;
3402 ch_flt.afar2 = cpu_error_regs.afar2;
3404 (void) cpu_queue_events(&ch_flt, NULL, afsr_errs, NULL);
3708 clear_errors(ch_async_flt_t *ch_flt)
3710 struct async_flt *aflt = (struct async_flt *)ch_flt;
3715 if (ch_flt != NULL) {
3718 ch_flt->afsr_ext = cpu_error_regs.afsr_ext;
3719 ch_flt->afsr_errs = (cpu_error_regs.afsr & C_AFSR_ALL_ERRS) |
3722 ch_flt->afar2 = cpu_error_regs.afar2;
3833 cpu_flush_ecache_line(ch_async_flt_t *ch_flt)
3835 struct async_flt *aflt = (struct async_flt *)ch_flt;
3875 cpu_ecache_line_valid(ch_async_flt_t *ch_flt)
3877 struct async_flt *aflt = (struct async_flt *)ch_flt;
3880 ch_ec_data_t *ecp = &ch_flt->flt_diag_data.chd_ec_data[0];
3969 cpu_dcache_parity_info(ch_async_flt_t *ch_flt)
3978 if (ch_flt->parity_data.dpe.cpl_lcnt == 0) {
3979 ch_flt->parity_data.dpe.cpl_way = -1;
3980 ch_flt->parity_data.dpe.cpl_off = -1;
3983 cpu_dcache_parity_check(ch_flt, index);
3990 cpu_dcache_parity_check(ch_async_flt_t *ch_flt, int index)
3996 ch_dc_data_t *dcp = &ch_flt->parity_data.dpe.cpl_dc[0];
4016 if (ch_flt->parity_data.dpe.cpl_lcnt == 0) {
4017 ch_flt->parity_data.dpe.cpl_way = way;
4018 ch_flt->parity_data.dpe.cpl_cache =
4020 ch_flt->parity_data.dpe.cpl_tag |= CHP_DC_TAG;
4024 ch_flt->parity_data.dpe.cpl_tag |=
4026 ch_flt->parity_data.dpe.cpl_lcnt++;
4032 ch_flt->parity_data.dpe.cpl_lcnt++;
4051 ch_flt, dcp, &tmp_dcp, way,
4072 cpu_record_dc_data_parity(ch_flt, dcp,
4081 cpu_record_dc_data_parity(ch_async_flt_t *ch_flt,
4088 if (ch_flt->parity_data.dpe.cpl_lcnt == 0) {
4089 ch_flt->parity_data.dpe.cpl_way = way;
4090 ch_flt->parity_data.dpe.cpl_cache = CPU_DC_PARITY;
4091 ch_flt->parity_data.dpe.cpl_off = word * 8;
4094 ch_flt->parity_data.dpe.cpl_lcnt++;
4103 cpu_icache_parity_info(ch_async_flt_t *ch_flt)
4118 ch_flt->parity_data.ipe.cpl_way = -1;
4119 ch_flt->parity_data.ipe.cpl_off = -1;
4122 cpu_icache_parity_check(ch_flt, index);
4129 cpu_icache_parity_check(ch_async_flt_t *ch_flt, int index)
4135 struct async_flt *aflt = (struct async_flt *)ch_flt;
4136 ch_ic_data_t *icp = &ch_flt->parity_data.ipe.cpl_ic[0];
4193 ch_flt->parity_data.ipe.cpl_way = way;
4194 ch_flt->parity_data.ipe.cpl_tag |= CHP_IC_TAG;
4198 ch_flt->parity_data.ipe.cpl_tag |=
4200 ch_flt->parity_data.ipe.cpl_lcnt++;
4204 ch_flt->parity_data.ipe.cpl_lcnt++;
4226 ch_flt->parity_data.ipe.cpl_way = way;
4227 ch_flt->parity_data.ipe.cpl_off =
4230 ch_flt->parity_data.ipe.cpl_lcnt++;
4241 cpu_pcache_parity_info(ch_async_flt_t *ch_flt)
4250 if (ch_flt->parity_data.dpe.cpl_lcnt == 0) {
4251 ch_flt->parity_data.dpe.cpl_way = -1;
4252 ch_flt->parity_data.dpe.cpl_off = -1;
4255 cpu_pcache_parity_check(ch_flt, index);
4262 cpu_pcache_parity_check(ch_async_flt_t *ch_flt, int index)
4267 ch_pc_data_t *pcp = &ch_flt->parity_data.dpe.cpl_pc[0];
4302 if (ch_flt->parity_data.dpe.cpl_lcnt == 0) {
4303 ch_flt->parity_data.dpe.cpl_way = way;
4304 ch_flt->parity_data.dpe.cpl_cache =
4306 ch_flt->parity_data.dpe.cpl_off =
4311 ch_flt->parity_data.dpe.cpl_lcnt++;
4324 ch_async_flt_t *ch_flt = (ch_async_flt_t *)aflt;
4337 if (ch_flt->flt_type == CPU_DC_PARITY)
4342 if (ch_flt->flt_type == CPU_DC_PARITY)
4343 dcp = &ch_flt->parity_data.dpe.cpl_dc[i];
4345 dcp = &ch_flt->flt_diag_data.chd_dc_data;
4371 ch_async_flt_t *ch_flt = (ch_async_flt_t *)aflt;
4384 if (ch_flt->flt_type == CPU_IC_PARITY)
4389 if (ch_flt->flt_type == CPU_IC_PARITY)
4390 icp = &ch_flt->parity_data.ipe.cpl_ic[i];
4392 icp = &ch_flt->flt_diag_data.chd_ic_data;
4420 ch_async_flt_t *ch_flt = (ch_async_flt_t *)aflt;
4431 ecp = &ch_flt->flt_diag_data.chd_ec_data[i];
4463 ecp = &ch_flt->flt_diag_data.chd_l2_data[i];
4507 ch_async_flt_t *ch_flt = (ch_async_flt_t *)aflt;
4509 switch (ch_flt->flt_type) {
4521 ch_flt->flt_bit))
4554 ch_async_flt_t *ch_flt = (ch_async_flt_t *)aflt;
4566 DATA_TYPE_UINT64, ch_flt->afsr_ext, NULL);
4570 *afar_status = afsr_to_afar_status(ch_flt->afsr_errs,
4571 ch_flt->flt_bit);
4610 ch_flt->afsr_errs, ch_flt->flt_bit);
4646 (uint32_t *)&ch_flt->flt_fpdata, NULL);
4690 aflt->flt_synd, ch_flt->flt_bit);
4729 ch_async_flt_t *ch_flt = (ch_async_flt_t *)aflt;
4730 ch_ec_data_t *ecp = &ch_flt->flt_diag_data.chd_ec_data[0];
4731 ch_ec_data_t *l2p = &ch_flt->flt_diag_data.chd_l2_data[0];
4751 cpu_flt_in_memory(ch_async_flt_t *ch_flt, uint64_t t_afsr_bit)
4753 struct async_flt *aflt = (struct async_flt *)ch_flt;
4756 afsr_to_afar_status(ch_flt->afsr_errs, t_afsr_bit) ==
4766 cpu_flt_in_memory_one_event(ch_async_flt_t *ch_flt, uint64_t t_afsr_bit)
4768 struct async_flt *aflt = (struct async_flt *)ch_flt;
4776 afsr_errs = ch_flt->afsr_errs;
4813 cpu_log_diag_info(ch_async_flt_t *ch_flt)
4815 struct async_flt *aflt = (struct async_flt *)ch_flt;
4816 ch_dc_data_t *dcp = &ch_flt->flt_diag_data.chd_dc_data;
4817 ch_ic_data_t *icp = &ch_flt->flt_diag_data.chd_ic_data;
4818 ch_ec_data_t *ecp = &ch_flt->flt_diag_data.chd_ec_data[0];
4826 if (ch_flt->flt_diag_data.chd_afar == LOGOUT_INVALID ||
4827 ch_flt->flt_data_incomplete)
4832 i = cpu_ecache_line_valid(ch_flt);
4843 pn_cpu_log_diag_l2_info(ch_flt);
4924 cpu_queue_one_event(ch_async_flt_t *ch_flt, char *reason,
4927 struct async_flt *aflt = (struct async_flt *)ch_flt;
4934 ch_flt->flt_bit = eccp->ec_afsr_bit;
4935 ch_flt->flt_type = eccp->ec_flt_type;
4937 ch_flt->flt_diag_data = *cdp;
4939 ch_flt->flt_diag_data.chd_afar = LOGOUT_INVALID;
4941 cpu_flt_in_memory_one_event(ch_flt, ch_flt->flt_bit);
4943 if (ch_flt->flt_bit & C_AFSR_MSYND_ERRS)
4945 else if (ch_flt->flt_bit & (C_AFSR_ESYND_ERRS | C_AFSR_EXT_ESYND_ERRS))
4955 (void *)ch_flt, sizeof (ch_async_flt_t), ue_queue,
4959 (void *)ch_flt, sizeof (ch_async_flt_t), ce_queue,
4969 cpu_queue_events(ch_async_flt_t *ch_flt, char *reason, uint64_t t_afsr_errs,
4972 struct async_flt *aflt = (struct async_flt *)ch_flt;
4979 uint64_t primary_afsr_ext = ch_flt->afsr_ext;
4980 uint64_t primary_afsr_errs = ch_flt->afsr_errs;
4999 aflt->flt_addr = ch_flt->flt_sdw_afar = cdp->chd_afar;
5000 aflt->flt_stat = ch_flt->flt_sdw_afsr = cdp->chd_afsr;
5001 ch_flt->afsr_ext = ch_flt->flt_sdw_afsr_ext = cdp->chd_afsr_ext;
5002 ch_flt->afsr_errs = (cdp->chd_afsr_ext & C_AFSR_EXT_ALL_ERRS) |
5010 (primary_afsr_errs != ch_flt->afsr_errs)) {
5022 (ch_flt->afsr_errs & t_afsr_errs)) &&
5024 cpu_queue_one_event(ch_flt, reason, eccp, cdp);
5061 aflt->flt_addr = ch_flt->afar2;
5071 ch_flt->afsr_ext = primary_afsr_ext;
5072 ch_flt->afsr_errs = primary_afsr_errs;
5073 cpu_queue_one_event(ch_flt, reason, eccp, cdp);
5095 aflt->flt_addr = ch_flt->afar2;
5105 ch_flt->afsr_ext = primary_afsr_ext;
5106 ch_flt->afsr_errs = primary_afsr_errs;
5107 cpu_queue_one_event(ch_flt, reason, eccp, cdp);
6319 ch_async_flt_t ch_flt;
6323 bzero(&ch_flt, sizeof (ch_async_flt_t));
6324 ch_flt.flt_trapped_ce = flag;
6325 aflt = (struct async_flt *)&ch_flt;
6327 ch_flt.afsr_ext = cpu_error_regs->afsr_ext;
6328 ch_flt.afsr_errs = (cpu_error_regs->afsr_ext & C_AFSR_EXT_ALL_ERRS) |
6332 ch_flt.afar2 = cpu_error_regs->afar2;
6338 cpu_log_and_clear_ce(&ch_flt);
6343 if (clear_errors(&ch_flt)) {
6345 (void) cpu_queue_events(&ch_flt, pr_reason, ch_flt.afsr_errs,
6354 cpu_log_and_clear_ce(ch_async_flt_t *ch_flt)
6362 aflt = (struct async_flt *)ch_flt;
6364 afsr_errs = ch_flt->afsr_errs;
6378 ch_flt->flt_diag_data.chd_afar = LOGOUT_INVALID;
6383 if (clop && ch_flt->flt_trapped_ce & CE_CEEN_TIMEOUT) {
6398 ch_flt->flt_data_incomplete = 1;
6420 (cpu_flt_in_memory(ch_flt, (afsr & C_AFSR_CE)) ||
6421 cpu_flt_in_memory(ch_flt, (afsr & C_AFSR_RCE)))) {
6431 if (cpu_flt_in_memory(ch_flt, (afsr & C_AFSR_CE)) ||
6432 cpu_flt_in_memory(ch_flt, (afsr & C_AFSR_EMC))) {
6448 if (cpu_queue_events(ch_flt, pr_reason, afsr_errs, clop) == 0 ||
6450 ch_flt->flt_type = CPU_INV_AFSR;
6452 (void *)ch_flt, sizeof (ch_async_flt_t), ue_queue,
6475 cpu_error_ecache_flush(ch_flt);
6484 cpu_error_ecache_flush_required(ch_async_flt_t *ch_flt)
6488 uint64_t afsr_errs = ch_flt->afsr_errs;
6490 aflt = (struct async_flt *)ch_flt;
6575 cpu_error_ecache_flush(ch_async_flt_t *ch_flt)
6578 cpu_error_ecache_flush_required(ch_flt);
6586 cpu_flush_ecache_line(ch_flt);
6670 ch_async_flt_t *ch_flt = (ch_async_flt_t *)aflt;
6759 aflt->flt_synd, ch_flt->flt_bit);
6765 plat_ecc_ch_flt.ecaf_sdw_afar = ch_flt->flt_sdw_afar;
6766 plat_ecc_ch_flt.ecaf_sdw_afsr = ch_flt->flt_sdw_afsr;
6767 plat_ecc_ch_flt.ecaf_afsr_ext = ch_flt->afsr_ext;
6769 ch_flt->flt_sdw_afsr_ext;
6987 ch_async_flt_t ch_flt;
6988 struct async_flt *aflt = (struct async_flt *)&ch_flt;
7007 bzero(&ch_flt, sizeof (ch_async_flt_t));
7013 ch_flt.flt_type = CPU_FPUERR;
7036 ch_flt.flt_fpdata[i] = *sip ^ *cip;
7038 cpu_errorq_dispatch(FM_EREPORT_CPU_USIII_FPU_HWCOPY, (void *)&ch_flt,
7123 * Return 1 if the errors in ch_flt's AFSR are secondary errors caused by
7149 cpu_check_secondary_errors(ch_async_flt_t *ch_flt, uint64_t t_afsr_errs,
7154 struct async_flt *aflt = (struct async_flt *)ch_flt;
7166 if ((ch_flt->afsr_errs &
7186 if ((ch_flt->afsr_errs & ~(C_AFSR_EDU|C_AFSR_WDU)) != 0)
7218 ch_async_flt_t *ch_flt = (ch_async_flt_t *)aflt;
7220 switch (ch_flt->flt_bit) {
7274 switch (ch_flt->flt_type) {
7280 if (ch_flt->parity_data.dpe.cpl_cache ==