Mercurial > illumos > illumos-gate
changeset 5080:047a93194dc4
6605138 OPL prtdiag missing memory config details
author | wh31274 |
---|---|
date | Mon, 17 Sep 2007 22:02:09 -0700 |
parents | 2505799f46a8 |
children | ed68bde17499 |
files | usr/src/lib/libprtdiag_psr/sparc/opl/common/opl.c usr/src/uts/sun4u/opl/io/mc-opl.c |
diffstat | 2 files changed, 380 insertions(+), 341 deletions(-) [+] |
line wrap: on
line diff
--- a/usr/src/lib/libprtdiag_psr/sparc/opl/common/opl.c Mon Sep 17 17:55:55 2007 -0700 +++ b/usr/src/lib/libprtdiag_psr/sparc/opl/common/opl.c Mon Sep 17 22:02:09 2007 -0700 @@ -104,7 +104,7 @@ static void opl_disp_environ(void); static void opl_disp_hw_revisions(Sys_tree *tree, Prom_node *root); static uint64_t print_opl_memory_line(int lsb, struct cs_status *cs_stat, - int ngrps); + int ngrps, int mirror_mode); static uint64_t get_opl_mem_regs(Board_node *bnode); void add_node(Sys_tree *root, Prom_node *pnode); static int get_prop_size(Prop *prop); @@ -571,11 +571,19 @@ cs_size = get_prop_size(find_prop(pnode, "cs-status")); if (cs_size > 0) { + int *mirror_mode = NULL; + int mode = 0; /* OBP returns lists of 7 ints */ cs_stat = (struct cs_status *)get_prop_val (find_prop(pnode, "cs-status")); + mirror_mode = (int *)(get_prop_val + (find_prop(pnode, "mirror-mode"))); + + if (mirror_mode != NULL) + mode = (*mirror_mode); + /* * The units of cs_size will be either number of bytes * or number of int array elements as this is derived @@ -598,8 +606,9 @@ } if (cs_stat != NULL) { - total_mem += print_opl_memory_line( - bnode->board_num, cs_stat, ngrps); + total_mem += + print_opl_memory_line(bnode->board_num, + cs_stat, ngrps, mode); } } @@ -617,21 +626,25 @@ { Board_node *bnode = tree->bd_list; uint64_t total_mem = 0, total_sys_mem = 0; - char *hdrfmt = "\n%-5.5s %-6.6s %-18.18s %-10.10s %-8.8s %-10.10s"; + char *hdrfmt = "\n%-5.5s %-6.6s %-18.18s %-10.10s" + " %-6.6s %-5.5s %-7.7s %-10.10s"; (void) textdomain(TEXT_DOMAIN); - log_printf("======================", 0); + log_printf("============================", 0); log_printf(gettext(" Memory Configuration "), 0); - log_printf("======================", 0); + log_printf("============================", 0); log_printf("\n", 0); - log_printf(hdrfmt, "", + log_printf(hdrfmt, + "", gettext("Memory"), gettext("Available"), gettext("Memory"), gettext("DIMM"), - gettext("Number of"), + gettext("# of"), + gettext("Mirror"), + gettext("Interleave"), 0); log_printf(hdrfmt, @@ -640,11 +653,13 @@ gettext("Size"), gettext("Status"), gettext("Size"), - gettext("DIMMs"), 0); + gettext("DIMMs"), + gettext("Mode"), + gettext("Factor"), 0); log_printf(hdrfmt, "---", "-------", "------------------", "-------", "------", - "---------", 0); + "-----", "-------", "----------", 0); log_printf("\n", 0); @@ -673,13 +688,36 @@ * information that get_opl_mem_regs() has gathered. */ static uint64_t -print_opl_memory_line(int lsb, struct cs_status *cs_stat, int ngrps) +print_opl_memory_line(int lsb, struct cs_status *cs_stat, int ngrps, + int mirror_mode) { int i; uint64_t total_board_mem = 0; + int i_factor = 2; /* default to non-mirror mode */ + int interleave; (void) textdomain(TEXT_DOMAIN); + if (mirror_mode) + i_factor *= 2; + + /* + * Interleave factor calculation: + * Obtain "mirror-mode" property from pseudo-mc. + * cs_stat[0].dimms/i_factor represents interleave factor per + * pseudo-mc node. Must use cs_stat[0].dimms since this will yield + * interleave factor even if some DIMMs are isolated. + * + * Mirror mode: + * interleave factor = (# of DIMMs on cs_stat[0]/4) + * + * Non-mirror mode: + * interleave factor = (# of DIMMs on cs_stat[0]/2) + */ + + interleave = cs_stat[0].dimms/i_factor; + + for (i = 0; i < ngrps; i++) { uint64_t mem_size; @@ -713,7 +751,19 @@ + cs_stat[i].dimm_lo)/MBYTE, 0); /* Number of DIMMs */ - log_printf(" %2d\n", cs_stat[i].dimms); + log_printf(" %2d", cs_stat[i].dimms); + + /* Mirror Mode */ + if (mirror_mode) { + log_printf("%-4.4s", " yes"); + } else + log_printf("%-4.4s", " no "); + + /* Interleave Factor */ + if (interleave) + log_printf(" %d-way\n", interleave); + else + log_printf(" None\n"); } return (total_board_mem); }
--- a/usr/src/uts/sun4u/opl/io/mc-opl.c Mon Sep 17 17:55:55 2007 -0700 +++ b/usr/src/uts/sun4u/opl/io/mc-opl.c Mon Sep 17 22:02:09 2007 -0700 @@ -40,6 +40,7 @@ #include <sys/ksynch.h> #include <sys/ddi.h> #include <sys/sunddi.h> +#include <sys/sunndi.h> #include <sys/ddifm.h> #include <sys/fm/protocol.h> #include <sys/fm/util.h> @@ -505,10 +506,10 @@ if (mc_timeout_period == 0) { mc_patrol_interval_sec = (int)ddi_getprop(DDI_DEV_T_ANY, devi, - DDI_PROP_DONTPASS, "mc-timeout-interval-sec", - mc_patrol_interval_sec); - mc_timeout_period = drv_usectohz( - 1000000 * mc_patrol_interval_sec / OPL_MAX_BOARDS); + DDI_PROP_DONTPASS, "mc-timeout-interval-sec", + mc_patrol_interval_sec); + mc_timeout_period = drv_usectohz(1000000 * + mc_patrol_interval_sec / OPL_MAX_BOARDS); } /* set informations in mc state */ @@ -525,7 +526,7 @@ mutex_enter(&mc_polling_lock); if (!mc_pollthr_running) { (void) thread_create(NULL, 0, (void (*)())mc_polling_thread, - NULL, 0, &p0, TS_RUN, mc_poll_priority); + NULL, 0, &p0, TS_RUN, mc_poll_priority); } mutex_exit(&mc_polling_lock); ddi_report_dev(devi); @@ -638,7 +639,7 @@ int bank0, bank1; MC_LOG("mcaddr /LSB%d/B%d/%x\n", maddr->ma_bd, bank, - maddr->ma_dimm_addr); + maddr->ma_dimm_addr); /* loc validity check */ ASSERT(maddr->ma_bd >= 0 && OPL_BOARD_MAX > maddr->ma_bd); @@ -685,15 +686,14 @@ * there is no need to check ma_bd because it is generated from * mcp. They are the same. */ - if ((bank0 == bank1) && - (maddr->ma_dimm_addr == maddr1.ma_dimm_addr)) { + if ((bank0 == bank1) && (maddr->ma_dimm_addr == + maddr1.ma_dimm_addr)) { return (0); } else { cmn_err(CE_WARN, "Translation error source /LSB%d/B%d/%x, " - "PA %lx, target /LSB%d/B%d/%x\n", - maddr->ma_bd, bank, maddr->ma_dimm_addr, - *pa, maddr1.ma_bd, maddr1.ma_bank, - maddr1.ma_dimm_addr); + "PA %lx, target /LSB%d/B%d/%x\n", maddr->ma_bd, bank, + maddr->ma_dimm_addr, *pa, maddr1.ma_bd, maddr1.ma_bank, + maddr1.ma_dimm_addr); return (-1); } } @@ -795,8 +795,8 @@ maddr->ma_phys_bd = mcp->mc_phys_board_num; maddr->ma_bank = pa_to_bank(mcp, pa_offset); maddr->ma_dimm_addr = pa_to_dimm(mcp, pa_offset); - MC_LOG("pa %lx -> mcaddr /LSB%d/B%d/%x\n", - pa_offset, maddr->ma_bd, maddr->ma_bank, maddr->ma_dimm_addr); + MC_LOG("pa %lx -> mcaddr /LSB%d/B%d/%x\n", pa_offset, maddr->ma_bd, + maddr->ma_bank, maddr->ma_dimm_addr); return (0); } @@ -856,8 +856,7 @@ i = BD_BK_SLOT_TO_INDEX(sb, bank, 0); j = (cs == 0) ? i : i + 2; memb_num = mc_ff_dimm_unum_table[i][0], - snprintf(buf, buflen, - "/%s/%s%c/MEM%s MEM%s", + snprintf(buf, buflen, "/%s/%s%c/MEM%s MEM%s", model_names[plat_model].unit_name, model_names[plat_model].mem_name, memb_num, &mc_ff_dimm_unum_table[j][1], @@ -913,44 +912,41 @@ /* * Encode all the common data into the ereport. */ - (void) snprintf(buf, FM_MAX_CLASS, "%s.%s-%s", - MC_OPL_ERROR_CLASS, - mc_aflt->mflt_is_ptrl ? MC_OPL_PTRL_SUBCLASS : - MC_OPL_MI_SUBCLASS, - mc_aflt->mflt_erpt_class); + (void) snprintf(buf, FM_MAX_CLASS, "%s.%s-%s", MC_OPL_ERROR_CLASS, + mc_aflt->mflt_is_ptrl ? MC_OPL_PTRL_SUBCLASS : MC_OPL_MI_SUBCLASS, + mc_aflt->mflt_erpt_class); MC_LOG("mc_ereport_post: ereport %s\n", buf); fm_ereport_set(ereport, FM_EREPORT_VERSION, buf, - fm_ena_generate(mc_aflt->mflt_id, FM_ENA_FMT1), - detector, NULL); + fm_ena_generate(mc_aflt->mflt_id, FM_ENA_FMT1), detector, NULL); /* * Set payload. */ fm_payload_set(ereport, MC_OPL_BOARD, DATA_TYPE_UINT32, - flt_stat->mf_flt_maddr.ma_bd, NULL); + flt_stat->mf_flt_maddr.ma_bd, NULL); fm_payload_set(ereport, MC_OPL_PA, DATA_TYPE_UINT64, - flt_stat->mf_flt_paddr, NULL); + flt_stat->mf_flt_paddr, NULL); if (flt_stat->mf_type == FLT_TYPE_PERMANENT_CE) { - fm_payload_set(ereport, MC_OPL_FLT_TYPE, - DATA_TYPE_UINT8, ECC_STICKY, NULL); + fm_payload_set(ereport, MC_OPL_FLT_TYPE, DATA_TYPE_UINT8, + ECC_STICKY, NULL); } for (i = 0; i < nflts; i++) values[i] = mc_aflt->mflt_stat[i]->mf_flt_maddr.ma_bank; - fm_payload_set(ereport, MC_OPL_BANK, DATA_TYPE_UINT32_ARRAY, - nflts, values, NULL); + fm_payload_set(ereport, MC_OPL_BANK, DATA_TYPE_UINT32_ARRAY, nflts, + values, NULL); for (i = 0; i < nflts; i++) values[i] = mc_aflt->mflt_stat[i]->mf_cntl; - fm_payload_set(ereport, MC_OPL_STATUS, DATA_TYPE_UINT32_ARRAY, - nflts, values, NULL); + fm_payload_set(ereport, MC_OPL_STATUS, DATA_TYPE_UINT32_ARRAY, nflts, + values, NULL); for (i = 0; i < nflts; i++) values[i] = mc_aflt->mflt_stat[i]->mf_err_add; @@ -960,14 +956,14 @@ offset = values[0]; } - fm_payload_set(ereport, MC_OPL_ERR_ADD, DATA_TYPE_UINT32_ARRAY, - nflts, values, NULL); + fm_payload_set(ereport, MC_OPL_ERR_ADD, DATA_TYPE_UINT32_ARRAY, nflts, + values, NULL); for (i = 0; i < nflts; i++) values[i] = mc_aflt->mflt_stat[i]->mf_err_log; - fm_payload_set(ereport, MC_OPL_ERR_LOG, DATA_TYPE_UINT32_ARRAY, - nflts, values, NULL); + fm_payload_set(ereport, MC_OPL_ERR_LOG, DATA_TYPE_UINT32_ARRAY, nflts, + values, NULL); for (i = 0; i < nflts; i++) { flt_stat = mc_aflt->mflt_stat[i]; @@ -982,14 +978,14 @@ } } - fm_payload_set(ereport, MC_OPL_ERR_SYND, - DATA_TYPE_UINT32_ARRAY, nflts, synd, NULL); - - fm_payload_set(ereport, MC_OPL_ERR_DIMMSLOT, - DATA_TYPE_UINT32_ARRAY, nflts, dslot, NULL); - - fm_payload_set(ereport, MC_OPL_ERR_DRAM, - DATA_TYPE_UINT32_ARRAY, nflts, values, NULL); + fm_payload_set(ereport, MC_OPL_ERR_SYND, DATA_TYPE_UINT32_ARRAY, nflts, + synd, NULL); + + fm_payload_set(ereport, MC_OPL_ERR_DIMMSLOT, DATA_TYPE_UINT32_ARRAY, + nflts, dslot, NULL); + + fm_payload_set(ereport, MC_OPL_ERR_DRAM, DATA_TYPE_UINT32_ARRAY, nflts, + values, NULL); device_path[0] = 0; p = &device_path[0]; @@ -1002,9 +998,9 @@ flt_stat = mc_aflt->mflt_stat[i]; bank = flt_stat->mf_flt_maddr.ma_bank; - ret = mc_set_mem_unum(p + strlen(p), blen, - flt_stat->mf_flt_maddr.ma_phys_bd, bank, - flt_stat->mf_type, flt_stat->mf_dimm_slot); + ret = mc_set_mem_unum(p + strlen(p), blen, + flt_stat->mf_flt_maddr.ma_phys_bd, bank, flt_stat->mf_type, + flt_stat->mf_dimm_slot); if (ret != 0) { cmn_err(CE_WARN, @@ -1031,12 +1027,12 @@ } } - (void) fm_fmri_mem_set(resource, FM_MEM_SCHEME_VERSION, - NULL, device_path, (ret == 0) ? sid : NULL, - (ret == 0) ? offset : (uint64_t)-1); - - fm_payload_set(ereport, MC_OPL_RESOURCE, DATA_TYPE_NVLIST, - resource, NULL); + (void) fm_fmri_mem_set(resource, FM_MEM_SCHEME_VERSION, NULL, + device_path, (ret == 0) ? sid : NULL, (ret == 0) ? offset : + (uint64_t)-1); + + fm_payload_set(ereport, MC_OPL_RESOURCE, DATA_TYPE_NVLIST, resource, + NULL); if (panicstr) { errorq_commit(ereport_errorq, eqep, ERRORQ_SYNC); @@ -1056,8 +1052,7 @@ uint64_t pa = (uint64_t)(-1); int i; - MC_LOG("mc_err_drain: %s\n", - mc_aflt->mflt_erpt_class); + MC_LOG("mc_err_drain: %s\n", mc_aflt->mflt_erpt_class); /* * we come here only when we have: * In mirror mode: MUE, SUE @@ -1065,7 +1060,7 @@ */ for (i = 0; i < mc_aflt->mflt_nflts; i++) { rv = mcaddr_to_pa(mc_aflt->mflt_mcp, - &(mc_aflt->mflt_stat[i]->mf_flt_maddr), &pa); + &(mc_aflt->mflt_stat[i]->mf_flt_maddr), &pa); /* Ensure the pa is valid (not in isolated memory block) */ if (rv == 0 && pa_is_valid(mc_aflt->mflt_mcp, pa)) @@ -1088,7 +1083,7 @@ */ if (mc_aflt->mflt_stat[0]->mf_type != FLT_TYPE_PERMANENT_CE) { MC_LOG("offline page at pa %lx error %x\n", pa, - mc_aflt->mflt_pr); + mc_aflt->mflt_pr); (void) page_retire(pa, mc_aflt->mflt_pr); } break; @@ -1142,7 +1137,7 @@ if (!mc_rangecheck_pa(mcp, pa)) { /* pa is not on this board, just retry */ cmn_err(CE_WARN, "restart_patrol: invalid address %lx " - "on board %d\n", pa, mcp->mc_board_num); + "on board %d\n", pa, mcp->mc_board_num); MAC_PTRL_START(mcp, bank); return (0); } @@ -1166,51 +1161,55 @@ int wrapcount = 0; uint64_t origpa = pa; while (wrapcount < 2) { - if (!pa_is_valid(mcp, pa)) { - /* - * Not in physinstall - advance to the - * next memory isolation blocksize - */ - MC_LOG("Invalid PA\n"); - pa = roundup(pa + 1, mc_isolation_bsize); - } else { - int rv; - if ((rv = page_retire_check(pa, NULL)) != 0 && - rv != EAGAIN) { + if (!pa_is_valid(mcp, pa)) { /* - * The page is "good" (not retired), we will - * use automatic HW restart algorithm if - * this is the original current starting page + * Not in physinstall - advance to the + * next memory isolation blocksize */ - if (pa == origpa) { - MC_LOG("Page has no error. Auto restart\n"); - MAC_PTRL_START(mcp, bank); - return (0); - } else { - /* found a subsequent good page */ - break; + MC_LOG("Invalid PA\n"); + pa = roundup(pa + 1, mc_isolation_bsize); + } else { + int rv; + if ((rv = page_retire_check(pa, NULL)) != 0 && + rv != EAGAIN) { + /* + * The page is "good" (not retired), + * we will use automatic HW restart + * algorithm if this is the original + * current starting page. + */ + if (pa == origpa) { + MC_LOG("Page has no error. " + "Auto restart\n"); + MAC_PTRL_START(mcp, bank); + return (0); + } else { + /* + * found a subsequent good page + */ + break; + } } + + /* + * Skip to the next page + */ + pa = roundup(pa + 1, PAGESIZE); + MC_LOG("Skipping bad page to %lx\n", pa); } - /* - * Skip to the next page - */ - pa = roundup(pa + 1, PAGESIZE); - MC_LOG("Skipping bad page to %lx\n", pa); - } - - /* Check to see if we hit the end of the memory range */ - if (pa >= (mcp->mc_start_address + mcp->mc_size)) { - MC_LOG("Wrap around\n"); - pa = mcp->mc_start_address; - wrapcount++; - } + /* Check to see if we hit the end of the memory range */ + if (pa >= (mcp->mc_start_address + mcp->mc_size)) { + MC_LOG("Wrap around\n"); + pa = mcp->mc_start_address; + wrapcount++; + } } if (wrapcount > 1) { - MC_LOG("Failed to find a good page. Just restart\n"); - MAC_PTRL_START(mcp, bank); - return (0); + MC_LOG("Failed to find a good page. Just restart\n"); + MAC_PTRL_START(mcp, bank); + return (0); } } @@ -1280,7 +1279,7 @@ bad: /* This is bad. Just reset the circuit */ cmn_err(CE_WARN, "mc-opl rewrite timeout on /LSB%d/B%d\n", - mcp->mc_board_num, bank); + mcp->mc_board_num, bank); cntl = MAC_CNTL_REW_END; MAC_CMD(mcp, bank, MAC_CNTL_PTRL_RESET); MAC_CLEAR_ERRS(mcp, bank, MAC_CNTL_REW_ERRS); @@ -1295,42 +1294,46 @@ int bank; for (bank = 0; bank < BANKNUM_PER_SB; bank++) { - while ((p = mcp->mc_scf_log[bank]) != NULL && - (n < mc_max_errlog_processed)) { - ASSERT(bank == p->sl_bank); - count = 0; - while ((LD_MAC_REG(MAC_STATIC_ERR_ADD(mcp, p->sl_bank)) - & MAC_STATIC_ERR_VLD)) { - if (count++ >= (mc_max_scf_loop)) { - break; + while ((p = mcp->mc_scf_log[bank]) != NULL && + (n < mc_max_errlog_processed)) { + ASSERT(bank == p->sl_bank); + count = 0; + while ((LD_MAC_REG(MAC_STATIC_ERR_ADD(mcp, p->sl_bank)) + & MAC_STATIC_ERR_VLD)) { + if (count++ >= (mc_max_scf_loop)) { + break; + } + drv_usecwait(mc_scf_delay); } - drv_usecwait(mc_scf_delay); + + if (count < mc_max_scf_loop) { + ST_MAC_REG(MAC_STATIC_ERR_LOG(mcp, p->sl_bank), + p->sl_err_log); + + ST_MAC_REG(MAC_STATIC_ERR_ADD(mcp, p->sl_bank), + p->sl_err_add|MAC_STATIC_ERR_VLD); + mcp->mc_scf_retry[bank] = 0; + } else { + /* + * if we try too many times, just drop the req + */ + if (mcp->mc_scf_retry[bank]++ <= + mc_max_scf_retry) { + return; + } else { + if ((++mc_pce_dropped & 0xff) == 0) { + cmn_err(CE_WARN, "Cannot " + "report Permanent CE to " + "SCF\n"); + } + } + } + n++; + mcp->mc_scf_log[bank] = p->sl_next; + mcp->mc_scf_total[bank]--; + ASSERT(mcp->mc_scf_total[bank] >= 0); + kmem_free(p, sizeof (scf_log_t)); } - - if (count < mc_max_scf_loop) { - ST_MAC_REG(MAC_STATIC_ERR_LOG(mcp, p->sl_bank), - p->sl_err_log); - - ST_MAC_REG(MAC_STATIC_ERR_ADD(mcp, p->sl_bank), - p->sl_err_add|MAC_STATIC_ERR_VLD); - mcp->mc_scf_retry[bank] = 0; - } else { - /* if we try too many times, just drop the req */ - if (mcp->mc_scf_retry[bank]++ <= mc_max_scf_retry) { - return; - } else { - if ((++mc_pce_dropped & 0xff) == 0) { - cmn_err(CE_WARN, - "Cannot report Permanent CE to SCF\n"); - } - } - } - n++; - mcp->mc_scf_log[bank] = p->sl_next; - mcp->mc_scf_total[bank]--; - ASSERT(mcp->mc_scf_total[bank] >= 0); - kmem_free(p, sizeof (scf_log_t)); - } } } void @@ -1340,7 +1343,7 @@ if (mcp->mc_scf_total[bank] >= mc_max_scf_logs) { if ((++mc_pce_dropped & 0xff) == 0) { - cmn_err(CE_WARN, "Too many Permanent CE requests.\n"); + cmn_err(CE_WARN, "Too many Permanent CE requests.\n"); } return; } @@ -1457,7 +1460,7 @@ mc_read_ptrl_reg(mc_opl_t *mcp, int bank, mc_flt_stat_t *flt_stat) { flt_stat->mf_cntl = LD_MAC_REG(MAC_PTRL_CNTL(mcp, bank)) & - MAC_CNTL_PTRL_ERRS; + MAC_CNTL_PTRL_ERRS; flt_stat->mf_err_add = LD_MAC_REG(MAC_PTRL_ERR_ADD(mcp, bank)); flt_stat->mf_err_log = LD_MAC_REG(MAC_PTRL_ERR_LOG(mcp, bank)); flt_stat->mf_flt_maddr.ma_bd = mcp->mc_board_num; @@ -1471,19 +1474,16 @@ { uint32_t status, old_status; - status = LD_MAC_REG(MAC_PTRL_CNTL(mcp, bank)) & - MAC_CNTL_MI_ERRS; + status = LD_MAC_REG(MAC_PTRL_CNTL(mcp, bank)) & MAC_CNTL_MI_ERRS; old_status = 0; /* we keep reading until the status is stable */ while (old_status != status) { old_status = status; - flt_stat->mf_err_add = - LD_MAC_REG(MAC_MI_ERR_ADD(mcp, bank)); - flt_stat->mf_err_log = - LD_MAC_REG(MAC_MI_ERR_LOG(mcp, bank)); + flt_stat->mf_err_add = LD_MAC_REG(MAC_MI_ERR_ADD(mcp, bank)); + flt_stat->mf_err_log = LD_MAC_REG(MAC_MI_ERR_LOG(mcp, bank)); status = LD_MAC_REG(MAC_PTRL_CNTL(mcp, bank)) & - MAC_CNTL_MI_ERRS; + MAC_CNTL_MI_ERRS; if (status == old_status) { break; } @@ -1539,15 +1539,15 @@ int rv = 0; MC_LOG("process mirror errors cntl[0] = %x, cntl[1] = %x\n", - flt_stat[0].mf_cntl, flt_stat[1].mf_cntl); + flt_stat[0].mf_cntl, flt_stat[1].mf_cntl); if (ptrl_error) { - if (((flt_stat[0].mf_cntl | flt_stat[1].mf_cntl) - & MAC_CNTL_PTRL_ERRS) == 0) + if (((flt_stat[0].mf_cntl | flt_stat[1].mf_cntl) & + MAC_CNTL_PTRL_ERRS) == 0) return (0); } else { - if (((flt_stat[0].mf_cntl | flt_stat[1].mf_cntl) - & MAC_CNTL_MI_ERRS) == 0) + if (((flt_stat[0].mf_cntl | flt_stat[1].mf_cntl) & + MAC_CNTL_MI_ERRS) == 0) return (0); } @@ -1558,9 +1558,9 @@ for (i = 0; i < 2; i++) { if (IS_CE_ONLY(flt_stat[i].mf_cntl, ptrl_error)) { MC_LOG("CE detected on bank %d\n", - flt_stat[i].mf_flt_maddr.ma_bank); + flt_stat[i].mf_flt_maddr.ma_bank); mc_scrub_ce(mcp, flt_stat[i].mf_flt_maddr.ma_bank, - &flt_stat[i], ptrl_error); + &flt_stat[i], ptrl_error); rv = 1; } } @@ -1596,7 +1596,7 @@ } if (IS_UE(flt_stat[0].mf_cntl, ptrl_error) && - IS_UE(flt_stat[1].mf_cntl, ptrl_error)) { + IS_UE(flt_stat[1].mf_cntl, ptrl_error)) { /* Both side are UE's */ MAC_SET_ERRLOG_INFO(&flt_stat[0]); @@ -1615,7 +1615,9 @@ /* Now the only case is UE/CE, UE/OK, or don't care */ for (i = 0; i < 2; i++) { - if (IS_UE(flt_stat[i].mf_cntl, ptrl_error)) { + if (!IS_UE(flt_stat[i].mf_cntl, ptrl_error)) { + continue; + } /* rewrite can clear the one side UE error */ @@ -1633,7 +1635,6 @@ mc_err_drain(mc_aflt); /* Once we hit a UE/CE or UE/OK case, done */ return (1); - } } } else { @@ -1642,41 +1643,42 @@ * on the 2 banks are not related at all. */ for (i = 0; i < 2; i++) { - if (IS_CMPE(flt_stat[i].mf_cntl, ptrl_error)) { - flt_stat[i].mf_type = FLT_TYPE_CMPE; - mc_aflt->mflt_erpt_class = MC_OPL_CMPE; - mc_aflt->mflt_nflts = 1; - mc_aflt->mflt_stat[0] = &flt_stat[i]; - mc_aflt->mflt_pr = PR_UE; - /* - * Compare error is result of MAC internal error, so - * simply log it instead of publishing an ereport. SCF - * diagnoses all the MAC internal and its i/f error. - * mc_err_drain(mc_aflt); - */ - MC_LOG("cmpe error detected\n"); - /* no more report on this bank */ - flt_stat[i].mf_cntl = 0; - rv = 1; - } + if (IS_CMPE(flt_stat[i].mf_cntl, ptrl_error)) { + flt_stat[i].mf_type = FLT_TYPE_CMPE; + mc_aflt->mflt_erpt_class = MC_OPL_CMPE; + mc_aflt->mflt_nflts = 1; + mc_aflt->mflt_stat[0] = &flt_stat[i]; + mc_aflt->mflt_pr = PR_UE; + /* + * Compare error is result of MAC internal + * error, so simply log it instead of + * publishing an ereport. SCF diagnoses all + * the MAC internal and its interface error. + * mc_err_drain(mc_aflt); + */ + MC_LOG("cmpe error detected\n"); + /* no more report on this bank */ + flt_stat[i].mf_cntl = 0; + rv = 1; + } } /* rewrite can clear the one side UE error */ for (i = 0; i < 2; i++) { - if (IS_UE(flt_stat[i].mf_cntl, ptrl_error)) { - (void) do_rewrite(mcp, - flt_stat[i].mf_flt_maddr.ma_bank, - flt_stat[i].mf_flt_maddr.ma_dimm_addr); - flt_stat[i].mf_type = FLT_TYPE_UE; - MAC_SET_ERRLOG_INFO(&flt_stat[i]); - mc_aflt->mflt_erpt_class = MC_OPL_SUE; - mc_aflt->mflt_stat[0] = &flt_stat[i]; - mc_aflt->mflt_nflts = 1; - mc_aflt->mflt_pr = PR_MCE; - mc_err_drain(mc_aflt); - rv = 1; - } + if (IS_UE(flt_stat[i].mf_cntl, ptrl_error)) { + (void) do_rewrite(mcp, + flt_stat[i].mf_flt_maddr.ma_bank, + flt_stat[i].mf_flt_maddr.ma_dimm_addr); + flt_stat[i].mf_type = FLT_TYPE_UE; + MAC_SET_ERRLOG_INFO(&flt_stat[i]); + mc_aflt->mflt_erpt_class = MC_OPL_SUE; + mc_aflt->mflt_stat[0] = &flt_stat[i]; + mc_aflt->mflt_nflts = 1; + mc_aflt->mflt_pr = PR_MCE; + mc_err_drain(mc_aflt); + rv = 1; + } } } return (rv); @@ -1717,24 +1719,21 @@ rsaddr->mi_restartaddr = flt_stat[i].mf_flt_maddr; MC_LOG("ptrl registers cntl %x add %x log %x\n", - flt_stat[i].mf_cntl, - flt_stat[i].mf_err_add, - flt_stat[i].mf_err_log); + flt_stat[i].mf_cntl, flt_stat[i].mf_err_add, + flt_stat[i].mf_err_log); /* MI registers */ mc_read_mi_reg(mcp, bank, &mi_flt_stat[i]); MC_LOG("MI registers cntl %x add %x log %x\n", - mi_flt_stat[i].mf_cntl, - mi_flt_stat[i].mf_err_add, - mi_flt_stat[i].mf_err_log); + mi_flt_stat[i].mf_cntl, mi_flt_stat[i].mf_err_add, + mi_flt_stat[i].mf_err_log); bank = bank^1; } /* clear errors once we read all the registers */ - MAC_CLEAR_ERRS(mcp, bank, - (MAC_CNTL_PTRL_ERRS|MAC_CNTL_MI_ERRS)); + MAC_CLEAR_ERRS(mcp, bank, (MAC_CNTL_PTRL_ERRS|MAC_CNTL_MI_ERRS)); MAC_CLEAR_ERRS(mcp, bank ^ 1, (MAC_CNTL_PTRL_ERRS|MAC_CNTL_MI_ERRS)); @@ -1742,26 +1741,24 @@ /* if not error mode, cntl1 is 0 */ if ((mi_flt_stat[0].mf_err_add & MAC_ERR_ADD_INVALID) || - (mi_flt_stat[0].mf_err_log & MAC_ERR_LOG_INVALID)) + (mi_flt_stat[0].mf_err_log & MAC_ERR_LOG_INVALID)) mi_flt_stat[0].mf_cntl = 0; if ((mi_flt_stat[1].mf_err_add & MAC_ERR_ADD_INVALID) || - (mi_flt_stat[1].mf_err_log & MAC_ERR_LOG_INVALID)) + (mi_flt_stat[1].mf_err_log & MAC_ERR_LOG_INVALID)) mi_flt_stat[1].mf_cntl = 0; mc_aflt.mflt_is_ptrl = 0; mi_valid = mc_process_error_mir(mcp, &mc_aflt, &mi_flt_stat[0]); if ((((flt_stat[0].mf_cntl & MAC_CNTL_PTRL_ERRS) >> - MAC_CNTL_PTRL_ERR_SHIFT) == - ((mi_flt_stat[0].mf_cntl & MAC_CNTL_MI_ERRS) >> - MAC_CNTL_MI_ERR_SHIFT)) && - (flt_stat[0].mf_err_add == mi_flt_stat[0].mf_err_add) && - (((flt_stat[1].mf_cntl & MAC_CNTL_PTRL_ERRS) >> - MAC_CNTL_PTRL_ERR_SHIFT) == - ((mi_flt_stat[1].mf_cntl & MAC_CNTL_MI_ERRS) >> - MAC_CNTL_MI_ERR_SHIFT)) && - (flt_stat[1].mf_err_add == mi_flt_stat[1].mf_err_add)) { + MAC_CNTL_PTRL_ERR_SHIFT) == ((mi_flt_stat[0].mf_cntl & + MAC_CNTL_MI_ERRS) >> MAC_CNTL_MI_ERR_SHIFT)) && + (flt_stat[0].mf_err_add == mi_flt_stat[0].mf_err_add) && + (((flt_stat[1].mf_cntl & MAC_CNTL_PTRL_ERRS) >> + MAC_CNTL_PTRL_ERR_SHIFT) == ((mi_flt_stat[1].mf_cntl & + MAC_CNTL_MI_ERRS) >> MAC_CNTL_MI_ERR_SHIFT)) && + (flt_stat[1].mf_err_add == mi_flt_stat[1].mf_err_add)) { #ifdef DEBUG MC_LOG("discarding PTRL error because " "it is the same as MI\n"); @@ -1771,11 +1768,11 @@ } /* if not error mode, cntl1 is 0 */ if ((flt_stat[0].mf_err_add & MAC_ERR_ADD_INVALID) || - (flt_stat[0].mf_err_log & MAC_ERR_LOG_INVALID)) + (flt_stat[0].mf_err_log & MAC_ERR_LOG_INVALID)) flt_stat[0].mf_cntl = 0; if ((flt_stat[1].mf_err_add & MAC_ERR_ADD_INVALID) || - (flt_stat[1].mf_err_log & MAC_ERR_LOG_INVALID)) + (flt_stat[1].mf_err_log & MAC_ERR_LOG_INVALID)) flt_stat[1].mf_cntl = 0; mc_aflt.mflt_is_ptrl = 1; @@ -1812,9 +1809,8 @@ } rv = 1; } - MC_LOG("mc_process_error: fault type %x erpt %s\n", - flt_stat->mf_type, - mc_aflt->mflt_erpt_class); + MC_LOG("mc_process_error: fault type %x erpt %s\n", flt_stat->mf_type, + mc_aflt->mflt_erpt_class); if (mc_aflt->mflt_erpt_class) { mc_aflt->mflt_stat[0] = flt_stat; mc_aflt->mflt_nflts = 1; @@ -1843,35 +1839,30 @@ ASSERT(rsaddr); rsaddr->mi_restartaddr = flt_stat.mf_flt_maddr; - MC_LOG("ptrl registers cntl %x add %x log %x\n", - flt_stat.mf_cntl, - flt_stat.mf_err_add, - flt_stat.mf_err_log); + MC_LOG("ptrl registers cntl %x add %x log %x\n", flt_stat.mf_cntl, + flt_stat.mf_err_add, flt_stat.mf_err_log); /* MI registers */ mc_read_mi_reg(mcp, bank, &mi_flt_stat); - MC_LOG("MI registers cntl %x add %x log %x\n", - mi_flt_stat.mf_cntl, - mi_flt_stat.mf_err_add, - mi_flt_stat.mf_err_log); + MC_LOG("MI registers cntl %x add %x log %x\n", mi_flt_stat.mf_cntl, + mi_flt_stat.mf_err_add, mi_flt_stat.mf_err_log); /* clear errors once we read all the registers */ MAC_CLEAR_ERRS(mcp, bank, (MAC_CNTL_PTRL_ERRS|MAC_CNTL_MI_ERRS)); mc_aflt.mflt_is_ptrl = 0; if ((mi_flt_stat.mf_cntl & MAC_CNTL_MI_ERRS) && - ((mi_flt_stat.mf_err_add & MAC_ERR_ADD_INVALID) == 0) && - ((mi_flt_stat.mf_err_log & MAC_ERR_LOG_INVALID) == 0)) { + ((mi_flt_stat.mf_err_add & MAC_ERR_ADD_INVALID) == 0) && + ((mi_flt_stat.mf_err_log & MAC_ERR_LOG_INVALID) == 0)) { mi_valid = mc_process_error(mcp, bank, &mc_aflt, &mi_flt_stat); } if ((((flt_stat.mf_cntl & MAC_CNTL_PTRL_ERRS) >> - MAC_CNTL_PTRL_ERR_SHIFT) == - ((mi_flt_stat.mf_cntl & MAC_CNTL_MI_ERRS) >> - MAC_CNTL_MI_ERR_SHIFT)) && - (flt_stat.mf_err_add == mi_flt_stat.mf_err_add)) { + MAC_CNTL_PTRL_ERR_SHIFT) == ((mi_flt_stat.mf_cntl & + MAC_CNTL_MI_ERRS) >> MAC_CNTL_MI_ERR_SHIFT)) && + (flt_stat.mf_err_add == mi_flt_stat.mf_err_add)) { #ifdef DEBUG MC_LOG("discarding PTRL error because " "it is the same as MI\n"); @@ -1882,10 +1873,10 @@ mc_aflt.mflt_is_ptrl = 1; if ((flt_stat.mf_cntl & MAC_CNTL_PTRL_ERRS) && - ((flt_stat.mf_err_add & MAC_ERR_ADD_INVALID) == 0) && - ((flt_stat.mf_err_log & MAC_ERR_LOG_INVALID) == 0)) { - rsaddr->mi_valid = mc_process_error(mcp, bank, - &mc_aflt, &flt_stat); + ((flt_stat.mf_err_add & MAC_ERR_ADD_INVALID) == 0) && + ((flt_stat.mf_err_log & MAC_ERR_LOG_INVALID) == 0)) { + rsaddr->mi_valid = mc_process_error(mcp, bank, &mc_aflt, + &flt_stat); } } /* @@ -1935,8 +1926,7 @@ if (mc_debug_show_all || stat) { MC_LOG("/LSB%d/B%d stat %x cntl %x\n", - mcp->mc_board_num, i, - stat, cntl); + mcp->mc_board_num, i, stat, cntl); } /* @@ -1947,13 +1937,13 @@ MAC_CLEAR_MAX(mcp, i); mcp->mc_period[ebk]++; if (IS_MIRROR(mcp, i)) - MC_LOG("mirror mc period %ld on " - "/LSB%d/B%d\n", mcp->mc_period[ebk], - mcp->mc_board_num, i); + MC_LOG("mirror mc period %ld on " + "/LSB%d/B%d\n", mcp->mc_period[ebk], + mcp->mc_board_num, i); else { - MC_LOG("mc period %ld on " - "/LSB%d/B%d\n", mcp->mc_period[ebk], - mcp->mc_board_num, i); + MC_LOG("mc period %ld on " + "/LSB%d/B%d\n", mcp->mc_period[ebk], + mcp->mc_board_num, i); } } @@ -1986,29 +1976,34 @@ * wrapped (counted as completing a 'period'). */ if (mcp->mc_speedup_period[ebk] > 0) { - if (wrapped && - (--mcp->mc_speedup_period[ebk] == 0)) { - /* - * We did try to speed up. - * The speed up period has expired - * and the HW patrol is still running. - * The errors must be intermittent. - * We have no choice but to ignore - * them, reset the scan speed to normal - * and clear the MI error bits. For - * mirror mode, we need to clear errors - * on both banks. - */ - MC_LOG("Clearing MI errors\n"); - MAC_CLEAR_ERRS(mcp, i, - MAC_CNTL_MI_ERRS); - - if (IS_MIRROR(mcp, i)) { - MC_LOG("Clearing Mirror MI errs\n"); - MAC_CLEAR_ERRS(mcp, i^1, - MAC_CNTL_MI_ERRS); + if (wrapped && + (--mcp->mc_speedup_period[ebk] == + 0)) { + /* + * We did try to speed up. + * The speed up period has + * expired and the HW patrol + * is still running. The + * errors must be intermittent. + * We have no choice but to + * ignore them, reset the scan + * speed to normal and clear + * the MI error bits. For + * mirror mode, we need to + * clear errors on both banks. + */ + MC_LOG("Clearing MI errors\n"); + MAC_CLEAR_ERRS(mcp, i, + MAC_CNTL_MI_ERRS); + + if (IS_MIRROR(mcp, i)) { + MC_LOG("Clearing " + "Mirror MI errs\n"); + MAC_CLEAR_ERRS(mcp, + i^1, + MAC_CNTL_MI_ERRS); + } } - } } else if (stat & MAC_STAT_MI_ERRS) { /* * MI errors detected but we cannot @@ -2033,9 +2028,10 @@ rsaddr_info.mi_valid = 0; rsaddr_info.mi_injectrestart = 0; if (IS_MIRROR(mcp, i)) { - mc_error_handler_mir(mcp, i, &rsaddr_info); + mc_error_handler_mir(mcp, i, + &rsaddr_info); } else { - mc_error_handler(mcp, i, &rsaddr_info); + mc_error_handler(mcp, i, &rsaddr_info); } error_count++; @@ -2127,7 +2123,7 @@ int len; if (ddi_getlongprop(DDI_DEV_T_ANY, mcp->mc_dip, DDI_PROP_DONTPASS, - "sb-mem-ranges", (caddr_t)&mem_range, &len) != DDI_SUCCESS) { + "sb-mem-ranges", (caddr_t)&mem_range, &len) != DDI_SUCCESS) { return (DDI_FAILURE); } @@ -2159,8 +2155,8 @@ static int mc_rangecheck_pa(mc_opl_t *mcp, uint64_t pa) { - if ((pa < mcp->mc_start_address) || - (mcp->mc_start_address + mcp->mc_size <= pa)) + if ((pa < mcp->mc_start_address) || (mcp->mc_start_address + + mcp->mc_size <= pa)) return (0); else return (1); @@ -2238,7 +2234,7 @@ * splitting an memlist entry. */ nl = kmem_alloc(sizeof (struct memlist), - KM_SLEEP); + KM_SLEEP); nl->address = end; nl->size = mend - nl->address; if ((nl->next = nlp) != NULL) @@ -2288,8 +2284,8 @@ startpa = mcp->mc_start_address + mcp->mc_size; endpa = ptob(physmax + 1); if (endpa > startpa) { - mlist = mc_memlist_del_span(mlist, - startpa, endpa - startpa); + mlist = mc_memlist_del_span(mlist, startpa, + endpa - startpa); } } @@ -2308,6 +2304,8 @@ uint32_t mirr; int nbanks = 0; uint64_t nbytes = 0; + int mirror_mode = 0; + int ret; /* * Get configurations from "pseudo-mc" node which includes: @@ -2317,7 +2315,7 @@ * to physical address or vice versa. */ mcp->mc_board_num = (int)ddi_getprop(DDI_DEV_T_ANY, mcp->mc_dip, - DDI_PROP_DONTPASS, "board#", -1); + DDI_PROP_DONTPASS, "board#", -1); if (mcp->mc_board_num == -1) { return (DDI_FAILURE); @@ -2335,8 +2333,8 @@ for (i = 0; i < MC_TT_CS; i++) { len = MC_TT_ENTRIES; cc = ddi_getlongprop_buf(DDI_DEV_T_ANY, mcp->mc_dip, - DDI_PROP_DONTPASS, mc_tbl_name[i], - (caddr_t)mcp->mc_trans_table[i], &len); + DDI_PROP_DONTPASS, mc_tbl_name[i], + (caddr_t)mcp->mc_trans_table[i], &len); if (cc != DDI_SUCCESS) { bzero(mcp->mc_trans_table[i], MC_TT_ENTRIES); @@ -2348,14 +2346,14 @@ /* initialize bank informations */ cc = ddi_getlongprop(DDI_DEV_T_ANY, mcp->mc_dip, DDI_PROP_DONTPASS, - "mc-addr", (caddr_t)&macaddr, &len); + "mc-addr", (caddr_t)&macaddr, &len); if (cc != DDI_SUCCESS) { cmn_err(CE_WARN, "Cannot get mc-addr. err=%d\n", cc); return (DDI_FAILURE); } cc = ddi_getlongprop(DDI_DEV_T_ANY, mcp->mc_dip, DDI_PROP_DONTPASS, - "cs-status", (caddr_t)&cs_status, &len1); + "cs-status", (caddr_t)&cs_status, &len1); if (cc != DDI_SUCCESS) { if (len > 0) @@ -2377,7 +2375,7 @@ for (i = 0; i < len1 / sizeof (cs_status_t); i++) { nbytes += ((uint64_t)cs_status[i].cs_avail_hi << 32) | - ((uint64_t)cs_status[i].cs_avail_low); + ((uint64_t)cs_status[i].cs_avail_low); } if (len1 > 0) kmem_free(cs_status, len1); @@ -2474,16 +2472,16 @@ mirr = LD_MAC_REG(MAC_MIRR(mcp, bk)); if (mirr & MAC_MIRR_MIRROR_MODE) { - MC_LOG("Mirror -> /LSB%d/B%d\n", - mcp->mc_board_num, bk); + MC_LOG("Mirror -> /LSB%d/B%d\n", mcp->mc_board_num, + bk); bankp->mcb_status |= BANK_MIRROR_MODE; + mirror_mode = 1; /* * The following bit is only used for * error injection. We should clear it */ if (mirr & MAC_MIRR_BANK_EXCLUSIVE) - ST_MAC_REG(MAC_MIRR(mcp, bk), - 0); + ST_MAC_REG(MAC_MIRR(mcp, bk), 0); } /* @@ -2491,23 +2489,28 @@ * of the mirror is not running */ if (!(mirr & MAC_MIRR_MIRROR_MODE) || - !(mcp->mc_bank[bk^1].mcb_status & - BANK_PTRL_RUNNING)) { - MC_LOG("Starting up /LSB%d/B%d\n", - mcp->mc_board_num, bk); + !(mcp->mc_bank[bk^1].mcb_status & BANK_PTRL_RUNNING)) { + MC_LOG("Starting up /LSB%d/B%d\n", mcp->mc_board_num, + bk); get_ptrl_start_address(mcp, bk, &rsaddr.mi_restartaddr); rsaddr.mi_valid = 0; rsaddr.mi_injectrestart = 0; restart_patrol(mcp, bk, &rsaddr); } else { MC_LOG("Not starting up /LSB%d/B%d\n", - mcp->mc_board_num, bk); + mcp->mc_board_num, bk); } bankp->mcb_status |= BANK_PTRL_RUNNING; } if (len > 0) kmem_free(macaddr, len); + ret = ndi_prop_update_int(DDI_DEV_T_NONE, mcp->mc_dip, "mirror-mode", + mirror_mode); + if (ret != DDI_PROP_SUCCESS) { + cmn_err(CE_WARN, "Unable to update mirror-mode property"); + } + mcp->mc_dimm_list = mc_get_dimm_list(mcp); /* @@ -2547,11 +2550,11 @@ /* just throw away all the scf logs */ for (i = 0; i < BANKNUM_PER_SB; i++) { - while ((p = mcp->mc_scf_log[i]) != NULL) { - mcp->mc_scf_log[i] = p->sl_next; - mcp->mc_scf_total[i]--; - kmem_free(p, sizeof (scf_log_t)); - } + while ((p = mcp->mc_scf_log[i]) != NULL) { + mcp->mc_scf_log[i] = p->sl_next; + mcp->mc_scf_total[i]--; + kmem_free(p, sizeof (scf_log_t)); + } } if (mcp->mlist) @@ -2670,7 +2673,7 @@ continue; /* if mac patrol is suspended, we cannot rely on it */ if (!(mcp->mc_status & MC_POLL_RUNNING) || - (mcp->mc_status & MC_SOFT_SUSPENDED)) + (mcp->mc_status & MC_SOFT_SUSPENDED)) continue; if (mc_rangecheck_pa(mcp, pa)) { return (mcp); @@ -2709,7 +2712,7 @@ mutex_enter(&mcmutex); if (((mcp = mc_pa_to_mcp(flt_addr)) == NULL) || - (!pa_is_valid(mcp, flt_addr))) { + (!pa_is_valid(mcp, flt_addr))) { mutex_exit(&mcmutex); if (snprintf(buf, buflen, "UNKNOWN") >= buflen) { return (ENOSPC); @@ -2792,7 +2795,7 @@ mutex_enter(&mcmutex); if (mc_instances[mcp->mc_board_num] != NULL) { MC_LOG("mc-opl instance for board# %d already exists\n", - mcp->mc_board_num); + mcp->mc_board_num); } mc_instances[mcp->mc_board_num] = mcp; mutex_exit(&mcmutex); @@ -2814,8 +2817,7 @@ tte_t tte; vtag_flushpage(new_va, (uint64_t)ksfmmup); - sfmmu_memtte(&tte, pa >> PAGESHIFT, - PROC_DATA|HAT_NOSYNC, TTE8K); + sfmmu_memtte(&tte, pa >> PAGESHIFT, PROC_DATA|HAT_NOSYNC, TTE8K); tte.tte_intlo |= TTE_LCK_INT; sfmmu_dtlb_ld_kva(new_va, &tte); } @@ -2882,8 +2884,8 @@ dimm_addr = pa_to_dimm(mcp, pa0); - MC_LOG("injecting error to /LSB%d/B%d/%x\n", - mcp->mc_board_num, bank, dimm_addr); + MC_LOG("injecting error to /LSB%d/B%d/%x\n", mcp->mc_board_num, bank, + dimm_addr); switch (error_type) { @@ -2900,8 +2902,8 @@ if (both_sides) { ST_MAC_REG(MAC_EG_CNTL(mcp, bank^1), 0); - ST_MAC_REG(MAC_EG_ADD(mcp, bank^1), - dimm_addr & MAC_EG_ADD_MASK); + ST_MAC_REG(MAC_EG_ADD(mcp, bank^1), dimm_addr & + MAC_EG_ADD_MASK); } switch (error_type) { @@ -2911,25 +2913,22 @@ case MC_INJECT_UE: case MC_INJECT_MUE: if (flags & MC_INJECT_FLAG_PATH) { - cntl = MAC_EG_ADD_FIX - |MAC_EG_FORCE_READ00|MAC_EG_FORCE_READ16 - |MAC_EG_RDERR_ONCE; + cntl = MAC_EG_ADD_FIX | MAC_EG_FORCE_READ00 | + MAC_EG_FORCE_READ16 | MAC_EG_RDERR_ONCE; } else { - cntl = MAC_EG_ADD_FIX|MAC_EG_FORCE_DERR00 - |MAC_EG_FORCE_DERR16|MAC_EG_DERR_ONCE; + cntl = MAC_EG_ADD_FIX | MAC_EG_FORCE_DERR00 | + MAC_EG_FORCE_DERR16 | MAC_EG_DERR_ONCE; } flags |= MC_INJECT_FLAG_ST; break; case MC_INJECT_INTERMITTENT_CE: case MC_INJECT_INTERMITTENT_MCE: if (flags & MC_INJECT_FLAG_PATH) { - cntl = MAC_EG_ADD_FIX - |MAC_EG_FORCE_READ00 - |MAC_EG_RDERR_ONCE; + cntl = MAC_EG_ADD_FIX |MAC_EG_FORCE_READ00 | + MAC_EG_RDERR_ONCE; } else { - cntl = MAC_EG_ADD_FIX - |MAC_EG_FORCE_DERR16 - |MAC_EG_DERR_ONCE; + cntl = MAC_EG_ADD_FIX | MAC_EG_FORCE_DERR16 | + MAC_EG_DERR_ONCE; } extra_injection_needed = 1; flags |= MC_INJECT_FLAG_ST; @@ -2937,13 +2936,11 @@ case MC_INJECT_PERMANENT_CE: case MC_INJECT_PERMANENT_MCE: if (flags & MC_INJECT_FLAG_PATH) { - cntl = MAC_EG_ADD_FIX - |MAC_EG_FORCE_READ00 - |MAC_EG_RDERR_ALWAYS; + cntl = MAC_EG_ADD_FIX | MAC_EG_FORCE_READ00 | + MAC_EG_RDERR_ALWAYS; } else { - cntl = MAC_EG_ADD_FIX - |MAC_EG_FORCE_DERR16 - |MAC_EG_DERR_ALWAYS; + cntl = MAC_EG_ADD_FIX | MAC_EG_FORCE_DERR16 | + MAC_EG_DERR_ALWAYS; } flags |= MC_INJECT_FLAG_ST; break; @@ -2974,7 +2971,7 @@ if (both_sides) { ST_MAC_REG(MAC_EG_CNTL(mcp, bank^1), cntl & - MAC_EG_SETUP_MASK); + MAC_EG_SETUP_MASK); ST_MAC_REG(MAC_EG_CNTL(mcp, bank^1), cntl); } } @@ -3008,7 +3005,7 @@ caddr_t va, va1; va = ppmapin(pp, PROT_READ|PROT_WRITE, - (caddr_t)-1); + (caddr_t)-1); kpreempt_disable(); mc_lock_va((uint64_t)pa, va); va1 = va + (pa & (PAGESIZE - 1)); @@ -3024,7 +3021,7 @@ extra_injection_needed = 1; } else { cmn_err(CE_WARN, "Cannot find page structure" - " for PA %lx\n", pa); + " for PA %lx\n", pa); } } else { MC_LOG("Reading from %lx\n", pa); @@ -3044,13 +3041,13 @@ * is running. */ ST_MAC_REG(MAC_EG_CNTL(mcp, bank), - cntl & MAC_EG_SETUP_MASK); + cntl & MAC_EG_SETUP_MASK); ST_MAC_REG(MAC_EG_CNTL(mcp, bank), cntl); if (both_sides) { - ST_MAC_REG(MAC_EG_CNTL(mcp, bank^1), cntl & - MAC_EG_SETUP_MASK); - ST_MAC_REG(MAC_EG_CNTL(mcp, bank^1), cntl); + ST_MAC_REG(MAC_EG_CNTL(mcp, bank^1), cntl & + MAC_EG_SETUP_MASK); + ST_MAC_REG(MAC_EG_CNTL(mcp, bank^1), cntl); } data = 0xf0e0d0c0; MC_LOG("Writing %x to %lx\n", data, pa); @@ -3612,7 +3609,7 @@ if (arg != NULL) { if (ddi_copyin((const void *)arg, (void *)&pa, - sizeof (uint64_t), 0) < 0) { + sizeof (uint64_t), 0) < 0) { rv = EFAULT; return (rv); } @@ -3630,36 +3627,28 @@ switch (cmd) { case MCI_CE: - mc_inject_error(MC_INJECT_INTERMITTENT_CE, pa, - flags); + mc_inject_error(MC_INJECT_INTERMITTENT_CE, pa, flags); break; case MCI_PERM_CE: - mc_inject_error(MC_INJECT_PERMANENT_CE, pa, - flags); + mc_inject_error(MC_INJECT_PERMANENT_CE, pa, flags); break; case MCI_UE: - mc_inject_error(MC_INJECT_UE, pa, - flags); + mc_inject_error(MC_INJECT_UE, pa, flags); break; case MCI_M_CE: - mc_inject_error(MC_INJECT_INTERMITTENT_MCE, pa, - flags); + mc_inject_error(MC_INJECT_INTERMITTENT_MCE, pa, flags); break; case MCI_M_PCE: - mc_inject_error(MC_INJECT_PERMANENT_MCE, pa, - flags); + mc_inject_error(MC_INJECT_PERMANENT_MCE, pa, flags); break; case MCI_M_UE: - mc_inject_error(MC_INJECT_MUE, pa, - flags); + mc_inject_error(MC_INJECT_MUE, pa, flags); break; case MCI_CMP: - mc_inject_error(MC_INJECT_CMPE, pa, - flags); + mc_inject_error(MC_INJECT_CMPE, pa, flags); break; case MCI_NOP: - mc_inject_error(MC_INJECT_NOP, pa, flags); - break; + mc_inject_error(MC_INJECT_NOP, pa, flags); break; case MCI_SHOW_ALL: mc_debug_show_all = 1; break; @@ -3675,7 +3664,7 @@ for (i = 0; i < flags; i++) { buf = kmem_alloc(512 * 1024 * 1024, KM_SLEEP); cmn_err(CE_NOTE, "kmem buf %llx PA %llx\n", - (u_longlong_t)buf, (u_longlong_t)va_to_pa(buf)); + (u_longlong_t)buf, (u_longlong_t)va_to_pa(buf)); } break; case MCI_SUSPEND: