Lines Matching refs:mc

102 mc_snapshot_destroy(mc_t *mc)  in mc_snapshot_destroy()  argument
106 if (mc->mc_snapshot == NULL) in mc_snapshot_destroy()
109 kmem_free(mc->mc_snapshot, mc->mc_snapshotsz); in mc_snapshot_destroy()
110 mc->mc_snapshot = NULL; in mc_snapshot_destroy()
111 mc->mc_snapshotsz = 0; in mc_snapshot_destroy()
112 mc->mc_snapshotgen++; in mc_snapshot_destroy()
116 mc_snapshot_update(mc_t *mc) in mc_snapshot_update() argument
120 if (mc->mc_snapshot != NULL) in mc_snapshot_update()
123 if (nvlist_pack(mc->mc_nvl, &mc->mc_snapshot, &mc->mc_snapshotsz, in mc_snapshot_update()
133 mc_t *mc; in mc_lookup_by_chipid() local
137 for (mc = mc_list; mc != NULL; mc = mc->mc_next) { in mc_lookup_by_chipid()
138 if (mc->mc_props.mcp_num == chipid) in mc_lookup_by_chipid()
139 return (mc); in mc_lookup_by_chipid()
190 mc_nvl_add_socket(nvlist_t *nvl, mc_t *mc) in mc_nvl_add_socket() argument
195 cmi_hdl_walk(mc_nvl_add_socket_cb, (void *)&mc->mc_socket, in mc_nvl_add_socket()
209 mc_ecc_enabled(mc_t *mc) in mc_ecc_enabled() argument
211 x86_chiprev_t rev = mc->mc_props.mcp_rev; in mc_ecc_enabled()
214 MCREG_VAL32(&nbcfg) = mc->mc_cfgregs.mcr_nbcfg; in mc_ecc_enabled()
222 mc_ck_enabled(mc_t *mc) in mc_ck_enabled() argument
224 x86_chiprev_t rev = mc->mc_props.mcp_rev; in mc_ck_enabled()
227 MCREG_VAL32(&nbcfg) = mc->mc_cfgregs.mcr_nbcfg; in mc_ck_enabled()
235 mc_nvl_add_ecctype(nvlist_t *nvl, mc_t *mc) in mc_nvl_add_ecctype() argument
237 (void) nvlist_add_string(nvl, "ecc-type", mc_ecc_enabled(mc) ? in mc_nvl_add_ecctype()
238 (mc_ck_enabled(mc) ? "ChipKill 128/16" : "Normal 64/8") : "None"); in mc_nvl_add_ecctype()
256 mc_nvl_add_cslist(nvlist_t *mcnvl, mc_t *mc) in mc_nvl_add_cslist() argument
258 mc_cs_t *mccs = mc->mc_cslist; in mc_nvl_add_cslist()
278 mcdcfg_csname(mc->mc_socket, mccs->mccs_csl[0], csname, in mc_nvl_add_cslist()
285 mcdcfg_csname(mc->mc_socket, mccs->mccs_csl[1], csname, in mc_nvl_add_cslist()
298 mc_nvl_add_dimmlist(nvlist_t *mcnvl, mc_t *mc) in mc_nvl_add_dimmlist() argument
304 for (nelem = 0, mcd = mc->mc_dimmlist; mcd != NULL; in mc_nvl_add_dimmlist()
321 mcdcfg_csname(mc->mc_socket, mcd->mcd_csl[i], in mc_nvl_add_dimmlist()
339 mc_nvl_add_htconfig(nvlist_t *mcnvl, mc_t *mc) in mc_nvl_add_htconfig() argument
341 mc_cfgregs_t *mcr = &mc->mc_cfgregs; in mc_nvl_add_htconfig()
387 mc_nvl_create(mc_t *mc) in mc_nvl_create() argument
401 mc_nvl_add_prop(mcnvl, mc, MCAMD_PROP_NUM, 0); in mc_nvl_create()
402 mc_nvl_add_prop(mcnvl, mc, MCAMD_PROP_REV, 0); in mc_nvl_create()
403 (void) nvlist_add_string(mcnvl, "revname", mc->mc_revname); in mc_nvl_create()
404 mc_nvl_add_socket(mcnvl, mc); in mc_nvl_create()
405 mc_nvl_add_ecctype(mcnvl, mc); in mc_nvl_create()
407 mc_nvl_add_prop(mcnvl, mc, MCAMD_PROP_BASE_ADDR, 0); in mc_nvl_create()
408 mc_nvl_add_prop(mcnvl, mc, MCAMD_PROP_LIM_ADDR, 0); in mc_nvl_create()
409 mc_nvl_add_prop(mcnvl, mc, MCAMD_PROP_ILEN, 0); in mc_nvl_create()
410 mc_nvl_add_prop(mcnvl, mc, MCAMD_PROP_ILSEL, 0); in mc_nvl_create()
411 mc_nvl_add_prop(mcnvl, mc, MCAMD_PROP_CSINTLVFCTR, 0); in mc_nvl_create()
412 mc_nvl_add_prop(mcnvl, mc, MCAMD_PROP_DRAMHOLE_SIZE, 0); in mc_nvl_create()
413 mc_nvl_add_prop(mcnvl, mc, MCAMD_PROP_ACCESS_WIDTH, 0); in mc_nvl_create()
414 mc_nvl_add_prop(mcnvl, mc, MCAMD_PROP_CSBANKMAPREG, 0); in mc_nvl_create()
415 mc_nvl_add_prop(mcnvl, mc, MCAMD_PROP_BANKSWZL, 0); in mc_nvl_create()
416 mc_nvl_add_prop(mcnvl, mc, MCAMD_PROP_MOD64MUX, 0); in mc_nvl_create()
417 mc_nvl_add_prop(mcnvl, mc, MCAMD_PROP_SPARECS, 1); in mc_nvl_create()
418 mc_nvl_add_prop(mcnvl, mc, MCAMD_PROP_BADCS, 1); in mc_nvl_create()
420 mc_nvl_add_cslist(mcnvl, mc); in mc_nvl_create()
421 mc_nvl_add_dimmlist(mcnvl, mc); in mc_nvl_create()
422 mc_nvl_add_htconfig(mcnvl, mc); in mc_nvl_create()
432 mc_dimm_csadd(mc_t *mc, mc_dimm_t *mcd, mc_cs_t *mccs, const mcdcfg_csl_t *csl) in mc_dimm_csadd() argument
434 int factor = (mc->mc_props.mcp_accwidth == 128) ? 2 : 1; in mc_dimm_csadd()
459 mc_dimm_create(mc_t *mc, uint_t num) in mc_dimm_create() argument
464 mcd->mcd_mc = mc; in mc_dimm_create()
478 mc_csdimms_create(mc_t *mc, mc_cs_t *mccs, mcdcfg_rslt_t *rsltp) in mc_csdimms_create() argument
491 for (mcd = mc->mc_dimmlist; mcd != NULL; mcd = mcd->mcd_next) { in mc_csdimms_create()
501 mcd = mc_dimm_create(mc, rsltp->dimm[i].toponum); in mc_csdimms_create()
502 if (mc->mc_dimmlist == NULL) in mc_csdimms_create()
503 mc->mc_dimmlist = mcd; in mc_csdimms_create()
505 mc->mc_dimmlast->mcd_next = mcd; in mc_csdimms_create()
506 mc->mc_dimmlast = mcd; in mc_csdimms_create()
514 mc_dimm_csadd(mc, mcd, mccs, rsltp->dimm[i].cslp); in mc_csdimms_create()
532 mc_dimmlist_create(mc_t *mc) in mc_dimmlist_create() argument
535 (union mcreg_dramcfg_hi *)(&mc->mc_cfgregs.mcr_dramcfghi); in mc_dimmlist_create()
536 mc_props_t *mcp = &mc->mc_props; in mc_dimmlist_create()
556 if (mc->mc_socket == X86_SOCKET_940) in mc_dimmlist_create()
558 else if (mc->mc_socket == X86_SOCKET_F1207) in mc_dimmlist_create()
569 for (mccs = mc->mc_cslist; mccs != NULL; mccs = mccs->mccs_next) { in mc_dimmlist_create()
580 mccs->mccs_props.csp_num, mc->mc_socket, in mc_dimmlist_create()
584 mc_csdimms_create(mc, mccs, &rslt); in mc_dimmlist_create()
589 mc_cs_create(mc_t *mc, uint_t num, uint64_t base, uint64_t mask, size_t sz, in mc_cs_create() argument
597 mccs->mccs_mc = mc; in mc_cs_create()
610 mc->mc_props.mcp_sparecs = num; in mc_cs_create()
620 mc_report_testfails(mc_t *mc) in mc_report_testfails() argument
626 for (mccs = mc->mc_cslist; mccs != NULL; mccs = mccs->mccs_next) { in mc_report_testfails()
629 unum.unum_chip = mc->mc_props.mcp_num; in mc_report_testfails()
638 mcamd_ereport_post(mc, FM_EREPORT_CPU_AMD_MC_TESTFAIL, in mc_report_testfails()
649 mc_mkprops_htcfg(mc_pcicfg_hdl_t cfghdl, mc_t *mc) in mc_mkprops_htcfg() argument
655 mc->mc_cfgregs.mcr_htnodeid = MCREG_VAL32(&nodeid) = in mc_mkprops_htcfg()
658 mc->mc_cfgregs.mcr_htunitid = mc_pcicfg_get32(cfghdl, MC_HT_REG_UNITID); in mc_mkprops_htcfg()
663 mc->mc_cfgregs.mcr_htroute[i] = mc_pcicfg_get32(cfghdl, offset); in mc_mkprops_htcfg()
679 mc_mkprops_addrmap(mc_pcicfg_hdl_t cfghdl, mc_t *mc) in mc_mkprops_addrmap() argument
683 mc_props_t *mcp = &mc->mc_props; in mc_mkprops_addrmap()
684 mc_cfgregs_t *mcr = &mc->mc_cfgregs; in mc_mkprops_addrmap()
686 int nodeid = mc->mc_props.mcp_num; in mc_mkprops_addrmap()
714 if (MC_REV_ATLEAST(mc->mc_props.mcp_rev, MC_F_REV_E)) { in mc_mkprops_addrmap()
728 mc_getmiscctl(mc_t *mc) in mc_getmiscctl() argument
730 x86_chiprev_t rev = mc->mc_props.mcp_rev; in mc_getmiscctl()
734 mc->mc_cfgregs.mcr_nbcfg = MCREG_VAL32(&nbcfg) = in mc_getmiscctl()
735 mc_pcicfg_get32_nohdl(mc, MC_FUNC_MISCCTL, MC_CTL_REG_NBCFG); in mc_getmiscctl()
738 mc->mc_cfgregs.mcr_sparectl = MCREG_VAL32(&sparectl) = in mc_getmiscctl()
739 mc_pcicfg_get32_nohdl(mc, MC_FUNC_MISCCTL, in mc_getmiscctl()
743 mc->mc_props.mcp_badcs = in mc_getmiscctl()
778 mc_mkprops_dramctl(mc_pcicfg_hdl_t cfghdl, mc_t *mc) in mc_mkprops_dramctl() argument
786 mc_props_t *mcp = &mc->mc_props; in mc_mkprops_dramctl()
787 mc_cfgregs_t *mcr = &mc->mc_cfgregs; in mc_mkprops_dramctl()
790 x86_chiprev_t rev = mc->mc_props.mcp_rev; in mc_mkprops_dramctl()
911 if (mcamd_cs_size(&hdl, (mcamd_node_t *)mc, i, &sz) < 0) in mc_mkprops_dramctl()
920 mccs = mc_cs_create(mc, i, csbase, csmask, sz, in mc_mkprops_dramctl()
923 if (mc->mc_cslist == NULL) in mc_mkprops_dramctl()
924 mc->mc_cslist = mccs; in mc_mkprops_dramctl()
926 mc->mc_cslast->mccs_next = mccs; in mc_mkprops_dramctl()
927 mc->mc_cslast = mccs; in mc_mkprops_dramctl()
959 for (mccs = mc->mc_cslist; mccs != NULL; in mc_mkprops_dramctl()
973 mc->mc_csdiscontig = 1; in mc_mkprops_dramctl()
983 mc_getmiscctl(mc); in mc_mkprops_dramctl()
989 mc_dimmlist_create(mc); in mc_mkprops_dramctl()
1049 mc_onlinespare(mc_t *mc, int csnum) in mc_onlinespare() argument
1051 mc_props_t *mcp = &mc->mc_props; in mc_onlinespare()
1069 for (mccs = mc->mc_cslist; mccs != NULL; mccs = mccs->mccs_next) { in mc_onlinespare()
1079 MCREG_VAL32(&scrubctl) = mc_pcicfg_get32_nohdl(mc, MC_FUNC_MISCCTL, in mc_onlinespare()
1088 MCREG_VAL32(&sparectl) = mc_pcicfg_get32_nohdl(mc, MC_FUNC_MISCCTL, in mc_onlinespare()
1096 mc_pcicfg_put32_nohdl(mc, MC_FUNC_MISCCTL, MC_CTL_REG_SPARECTL, in mc_onlinespare()
1101 mc_pcicfg_put32_nohdl(mc, MC_FUNC_MISCCTL, MC_CTL_REG_SPARECTL, in mc_onlinespare()
1126 MCREG_VAL32(&sparectl) = mc_pcicfg_get32_nohdl(mc, in mc_onlinespare()
1135 mc->mc_cfgregs.mcr_sparectl = MCREG_VAL32(&sparectl); in mc_onlinespare()
1136 mc->mc_spareswaptime = gethrtime(); in mc_onlinespare()
1146 mc_t *mc; in mc_ioctl() local
1154 if ((mc = mc_lookup_by_chipid(getminor(dev))) == NULL) { in mc_ioctl()
1163 if (mc_snapshot_update(mc) < 0) { in mc_ioctl()
1168 mcs.mcs_size = mc->mc_snapshotsz; in mc_ioctl()
1169 mcs.mcs_gen = mc->mc_snapshotgen; in mc_ioctl()
1178 if (mc_snapshot_update(mc) < 0) { in mc_ioctl()
1183 if (ddi_copyout(mc->mc_snapshot, (void *)arg, mc->mc_snapshotsz, in mc_ioctl()
1199 if ((rc = mc_onlinespare(mc, (int)arg)) == 0) { in mc_ioctl()
1200 mc_snapshot_destroy(mc); in mc_ioctl()
1201 nvlist_free(mc->mc_nvl); in mc_ioctl()
1202 mc->mc_nvl = mc_nvl_create(mc); in mc_ioctl()
1236 mc_t *mc; in mc_getinfo() local
1246 if ((mc = mc_lookup_by_chipid(getminor((dev_t)arg))) == NULL || in mc_getinfo()
1247 mc->mc_funcs[MC_FUNC_DEVIMAP].mcf_devi == NULL) { in mc_getinfo()
1250 *result = mc->mc_funcs[MC_FUNC_DEVIMAP].mcf_devi; in mc_getinfo()
1253 mc->mc_funcs[MC_FUNC_DEVIMAP].mcf_instance; in mc_getinfo()
1279 mc_read_smbios(mc_t *mc, dev_info_t *dip) in mc_read_smbios() argument
1299 mc->smb_chipid = chip_inst; in mc_read_smbios()
1306 mc->smb_bboard = fm_smb_mc_bboards(bdf); in mc_read_smbios()
1308 if (mc->smb_bboard == NULL) in mc_read_smbios()
1337 mc_t *mc; in mc_create() local
1352 mc = kmem_zalloc(sizeof (mc_t), KM_SLEEP); in mc_create()
1354 mc->mc_hdr.mch_type = MC_NT_MC; in mc_create()
1355 mc->mc_props.mcp_num = chipid; in mc_create()
1356 mc->mc_props.mcp_sparecs = MC_INVALNUM; in mc_create()
1357 mc->mc_props.mcp_badcs = MC_INVALNUM; in mc_create()
1359 mc->mc_props.mcp_rev = cmi_hdl_chiprev(hdl); in mc_create()
1360 mc->mc_revname = cmi_hdl_chiprevstr(hdl); in mc_create()
1361 mc->mc_socket = cmi_hdl_getsockettype(hdl); in mc_create()
1363 mc_read_smbios(mc, dip); in mc_create()
1366 mc_list = mc; in mc_create()
1368 mc_last->mc_next = mc; in mc_create()
1370 mc->mc_next = NULL; in mc_create()
1371 mc_last = mc; in mc_create()
1375 return (mc); in mc_create()
1401 mc_scrubber_enable(mc_t *mc) in mc_scrubber_enable() argument
1403 mc_props_t *mcp = &mc->mc_props; in mc_scrubber_enable()
1406 mc_cfgregs_t *mcr = &mc->mc_cfgregs; in mc_scrubber_enable()
1412 mc_pcicfg_get32_nohdl(mc, MC_FUNC_MISCCTL, MC_CTL_REG_SCRUBCTL); in mc_scrubber_enable()
1415 mc_pcicfg_get32_nohdl(mc, MC_FUNC_MISCCTL, MC_CTL_REG_SCRUBADDR_LO); in mc_scrubber_enable()
1418 mc_pcicfg_get32_nohdl(mc, MC_FUNC_MISCCTL, MC_CTL_REG_SCRUBADDR_HI); in mc_scrubber_enable()
1429 mc_pcicfg_put32_nohdl(mc, MC_FUNC_MISCCTL, MC_CTL_REG_SCRUBCTL, in mc_scrubber_enable()
1443 mc_pcicfg_put32_nohdl(mc, MC_FUNC_MISCCTL, MC_CTL_REG_SCRUBADDR_LO, in mc_scrubber_enable()
1445 mc_pcicfg_put32_nohdl(mc, MC_FUNC_MISCCTL, MC_CTL_REG_SCRUBADDR_HI, in mc_scrubber_enable()
1482 mc->mc_csdiscontig) { in mc_scrubber_enable()
1485 mc->mc_revname, chipid); in mc_scrubber_enable()
1502 mc->mc_revname, chipid); in mc_scrubber_enable()
1508 mc_pcicfg_put32_nohdl(mc, MC_FUNC_MISCCTL, MC_CTL_REG_SCRUBCTL, in mc_scrubber_enable()
1520 mc_t *mc = (mc_t *)arg1; in mc_attach_cb() local
1524 mcamd_mc_register(whdl, mc); in mc_attach_cb()
1542 mc_t *mc; in mc_attach() local
1595 for (mc = mc_list; mc != NULL; mc = mc->mc_next) { in mc_attach()
1596 if (mc->mc_props.mcp_num == chipid) in mc_attach()
1601 if (mc == NULL) { in mc_attach()
1602 mc = mc_create(chipid, dip); in mc_attach()
1604 if (mc == NULL) { in mc_attach()
1616 mc_snapshot_destroy(mc); in mc_attach()
1623 ASSERT(mc->mc_funcs[func].mcf_devi == NULL); in mc_attach()
1624 mc->mc_funcs[func].mcf_devi = dip; in mc_attach()
1625 mc->mc_funcs[func].mcf_instance = ddi_get_instance(dip); in mc_attach()
1627 mc->mc_ref++; in mc_attach()
1637 dip, "chip-id", mc->mc_props.mcp_num); in mc_attach()
1640 mc_pcicfg_setup(mc, bm->bm_func, &cfghdl) == DDI_SUCCESS) { in mc_attach()
1641 bm->bm_mkprops(cfghdl, mc); in mc_attach()
1651 mc_props_t *mcp = &mc->mc_props; in mc_attach()
1670 cmi_hdl_walk(mc_attach_cb, (void *)mc, (void *)&mcp->mcp_num, in mc_attach()
1681 for (mccs = mc->mc_cslist; mccs != NULL; in mc_attach()
1690 if (dram_present && !mc_ecc_enabled(mc)) { in mc_attach()
1713 rc = mc_scrubber_enable(mc); in mc_attach()
1719 mc_report_testfails(mc); in mc_attach()
1725 nvlist_free(mc->mc_nvl); in mc_attach()
1726 mc->mc_nvl = mc_nvl_create(mc); in mc_attach()