Lines Matching +full:non +full:- +full:dual
10 * https://www.intel.in/content/www/in/en/chipsets/e7525-memory-controller-hub-datasheet.html
33 static int sysbus_parity = -1;
77 /* E752X register addresses - device 0 function 0 */
108 * 14:12 1 single A, 2 single B, 3 dual
115 /* E752X register addresses - device 0 function 1 */
173 /* 3100 IMCH specific register addresses - device 0 function 1 */
179 /* ICH5R register addresses - device 30 function 0 */
192 * Those chips Support single-rank and dual-rank memories only.
194 * On e752x chips, the odd rows are present only on dual-rank memories.
200 * slot single-ranked double-ranked
201 * dimm #1 -> rank #4 NA
202 * dimm #2 -> rank #3 NA
203 * dimm #3 -> rank #2 Ranks 2 and 3
204 * dimm #4 -> rank $1 Ranks 1 and 4
285 * so the scrubbing bandwidth value isn't all that important - scrubbing is
299 {500000, 0x0a}, /* Normal mode - 32k clocks */
300 {62500000, 0x06}, /* Fast mode - 256 clocks */
308 struct e752x_pvt *pvt = (struct e752x_pvt *)mci->pvt_info; in ctl_page_to_phys()
312 if (page < pvt->tolm) in ctl_page_to_phys()
315 if ((page >= 0x100000) && (page < pvt->remapbase)) in ctl_page_to_phys()
318 remap = (page - pvt->tolm) + pvt->remapbase; in ctl_page_to_phys()
320 if (remap < pvt->remaplimit) in ctl_page_to_phys()
323 e752x_printk(KERN_ERR, "Invalid page %lx - out of range\n", page); in ctl_page_to_phys()
324 return pvt->tolm - 1; in ctl_page_to_phys()
334 struct e752x_pvt *pvt = (struct e752x_pvt *)mci->pvt_info; in do_process_ce()
339 page = sec1_add >> (PAGE_SHIFT - 4); in do_process_ce()
341 /* FIXME - check for -1 */ in do_process_ce()
342 if (pvt->mc_symmetric) { in do_process_ce()
347 pvt->map[0], pvt->map[1], pvt->map[2], pvt->map[3], in do_process_ce()
348 pvt->map[4], pvt->map[5], pvt->map[6], in do_process_ce()
349 pvt->map[7]); in do_process_ce()
353 if (pvt->map[i] == row) in do_process_ce()
374 row, channel, -1, in do_process_ce()
393 struct e752x_pvt *pvt = (struct e752x_pvt *)mci->pvt_info; in do_process_ue()
401 block_page = error_2b >> (PAGE_SHIFT - 4); in do_process_ue()
403 row = pvt->mc_symmetric ? in do_process_ue()
412 row, -1, -1, in do_process_ue()
420 block_page = error_2b >> (PAGE_SHIFT - 4); in do_process_ue()
422 row = pvt->mc_symmetric ? in do_process_ue()
431 row, -1, -1, in do_process_ue()
456 -1, -1, -1, in process_ue_no_info_wr()
465 struct e752x_pvt *pvt = (struct e752x_pvt *)mci->pvt_info; in do_process_ded_retry()
468 page = error_1b >> (PAGE_SHIFT - 4); /* convert the addr to 4k page */ in do_process_ded_retry()
471 row = pvt->mc_symmetric ? ((page >> 1) & 3) : in do_process_ded_retry()
514 static char *fatal_message[2] = { "Non-Fatal ", "Fatal " };
577 "NSI Parity Error", /* bit 2, non-fatal */
580 "Correctable Error Message", /* bit 5, non-fatal */
581 "Non-Fatal Error Message", /* bit 6, non-fatal */
584 "Receiver Error", /* bit 9, non-fatal */
586 "Bad TLP", /* bit 11, non-fatal */
587 "Bad DLLP", /* bit 12, non-fatal */
588 "REPLAY_NUM Rollover", /* bit 13, non-fatal */
590 "Replay Timer Timeout", /* bit 15, non-fatal */
596 "Poisoned TLP", /* bit 21, non-fatal */
598 "Completion Timeout", /* bit 23, non-fatal */
599 "Completer Abort", /* bit 24, non-fatal */
600 "Unexpected Completion", /* bit 25, non-fatal */
604 "Unsupported Request" /* bit 29, non-fatal */
640 e752x_printk(KERN_WARNING, "Non-Fatal Error %s\n", in do_membuf_error()
659 "Non DRAM Lock Error",
692 stat8 = info->hi_ferr; in e752x_check_hub_interface()
705 stat8 = info->hi_nerr; in e752x_check_hub_interface()
723 stat32 = info->nsi_ferr; in e752x_check_ns_interface()
728 if (stat32 & NSI_NON_FATAL_MASK) /* check for non-fatal ones */ in e752x_check_ns_interface()
732 stat32 = info->nsi_nerr; in e752x_check_ns_interface()
749 stat32 = info->sysbus_ferr + (info->sysbus_nerr << 16); in e752x_check_sysbus()
775 stat8 = info->buf_ferr; in e752x_check_membuf()
782 stat8 = info->buf_nerr; in e752x_check_membuf()
796 error_one = info->dram_ferr; in e752x_check_dram()
797 error_next = info->dram_nerr; in e752x_check_dram()
801 process_ce(mci, error_one, info->dram_sec1_add, in e752x_check_dram()
802 info->dram_sec1_syndrome, error_found, handle_error); in e752x_check_dram()
805 process_ce(mci, error_next, info->dram_sec2_add, in e752x_check_dram()
806 info->dram_sec2_syndrome, error_found, handle_error); in e752x_check_dram()
815 process_ded_retry(mci, error_one, info->dram_retr_add, in e752x_check_dram()
819 process_ded_retry(mci, error_next, info->dram_retr_add, in e752x_check_dram()
830 process_ue(mci, error_one, info->dram_ded_add, in e752x_check_dram()
831 info->dram_scrb_add, error_found, handle_error); in e752x_check_dram()
834 process_ue(mci, error_next, info->dram_ded_add, in e752x_check_dram()
835 info->dram_scrb_add, error_found, handle_error); in e752x_check_dram()
845 pvt = (struct e752x_pvt *)mci->pvt_info; in e752x_get_error_info()
846 dev = pvt->dev_d0f1; in e752x_get_error_info()
847 pci_read_config_dword(dev, E752X_FERR_GLOBAL, &info->ferr_global); in e752x_get_error_info()
849 if (info->ferr_global) { in e752x_get_error_info()
850 if (pvt->dev_info->err_dev == PCI_DEVICE_ID_INTEL_3100_1_ERR) { in e752x_get_error_info()
852 &info->nsi_ferr); in e752x_get_error_info()
853 info->hi_ferr = 0; in e752x_get_error_info()
856 &info->hi_ferr); in e752x_get_error_info()
857 info->nsi_ferr = 0; in e752x_get_error_info()
860 &info->sysbus_ferr); in e752x_get_error_info()
861 pci_read_config_byte(dev, E752X_BUF_FERR, &info->buf_ferr); in e752x_get_error_info()
862 pci_read_config_word(dev, E752X_DRAM_FERR, &info->dram_ferr); in e752x_get_error_info()
864 &info->dram_sec1_add); in e752x_get_error_info()
866 &info->dram_sec1_syndrome); in e752x_get_error_info()
868 &info->dram_ded_add); in e752x_get_error_info()
870 &info->dram_scrb_add); in e752x_get_error_info()
872 &info->dram_retr_add); in e752x_get_error_info()
875 if (info->hi_ferr & 0x7f) in e752x_get_error_info()
877 info->hi_ferr); in e752x_get_error_info()
879 if (info->nsi_ferr & NSI_ERR_MASK) in e752x_get_error_info()
881 info->nsi_ferr); in e752x_get_error_info()
883 if (info->sysbus_ferr) in e752x_get_error_info()
885 info->sysbus_ferr); in e752x_get_error_info()
887 if (info->buf_ferr & 0x0f) in e752x_get_error_info()
889 info->buf_ferr); in e752x_get_error_info()
891 if (info->dram_ferr) in e752x_get_error_info()
892 pci_write_bits16(pvt->dev_d0f1, E752X_DRAM_FERR, in e752x_get_error_info()
893 info->dram_ferr, info->dram_ferr); in e752x_get_error_info()
896 info->ferr_global); in e752x_get_error_info()
899 pci_read_config_dword(dev, E752X_NERR_GLOBAL, &info->nerr_global); in e752x_get_error_info()
901 if (info->nerr_global) { in e752x_get_error_info()
902 if (pvt->dev_info->err_dev == PCI_DEVICE_ID_INTEL_3100_1_ERR) { in e752x_get_error_info()
904 &info->nsi_nerr); in e752x_get_error_info()
905 info->hi_nerr = 0; in e752x_get_error_info()
908 &info->hi_nerr); in e752x_get_error_info()
909 info->nsi_nerr = 0; in e752x_get_error_info()
912 &info->sysbus_nerr); in e752x_get_error_info()
913 pci_read_config_byte(dev, E752X_BUF_NERR, &info->buf_nerr); in e752x_get_error_info()
914 pci_read_config_word(dev, E752X_DRAM_NERR, &info->dram_nerr); in e752x_get_error_info()
916 &info->dram_sec2_add); in e752x_get_error_info()
918 &info->dram_sec2_syndrome); in e752x_get_error_info()
920 if (info->hi_nerr & 0x7f) in e752x_get_error_info()
922 info->hi_nerr); in e752x_get_error_info()
924 if (info->nsi_nerr & NSI_ERR_MASK) in e752x_get_error_info()
926 info->nsi_nerr); in e752x_get_error_info()
928 if (info->sysbus_nerr) in e752x_get_error_info()
930 info->sysbus_nerr); in e752x_get_error_info()
932 if (info->buf_nerr & 0x0f) in e752x_get_error_info()
934 info->buf_nerr); in e752x_get_error_info()
936 if (info->dram_nerr) in e752x_get_error_info()
937 pci_write_bits16(pvt->dev_d0f1, E752X_DRAM_NERR, in e752x_get_error_info()
938 info->dram_nerr, info->dram_nerr); in e752x_get_error_info()
941 info->nerr_global); in e752x_get_error_info()
953 error32 = (info->ferr_global >> 18) & 0x3ff; in e752x_process_error_info()
954 stat32 = (info->ferr_global >> 4) & 0x7ff; in e752x_process_error_info()
962 error32 = (info->nerr_global >> 18) & 0x3ff; in e752x_process_error_info()
963 stat32 = (info->nerr_global >> 4) & 0x7ff; in e752x_process_error_info()
991 struct e752x_pvt *pvt = (struct e752x_pvt *) mci->pvt_info; in set_sdram_scrub_rate()
992 struct pci_dev *pdev = pvt->dev_d0f0; in set_sdram_scrub_rate()
995 if (pvt->dev_info->ctl_dev == PCI_DEVICE_ID_INTEL_3100_0) in set_sdram_scrub_rate()
1009 return -1; in set_sdram_scrub_rate()
1020 struct e752x_pvt *pvt = (struct e752x_pvt *) mci->pvt_info; in get_sdram_scrub_rate()
1021 struct pci_dev *pdev = pvt->dev_d0f0; in get_sdram_scrub_rate()
1025 if (pvt->dev_info->ctl_dev == PCI_DEVICE_ID_INTEL_3100_0) in get_sdram_scrub_rate()
1041 return -1; in get_sdram_scrub_rate()
1047 /* Return 1 if dual channel mode is active. Else return 0. */
1057 struct e752x_pvt *pvt = mci->pvt_info; in remap_csrow_index()
1059 if (!pvt->map_type) in remap_csrow_index()
1060 return (7 - index); in remap_csrow_index()
1085 drc_drbg = drc_chan + 1; /* 128 in dual mode, 64 in single */ in e752x_init_csrows()
1089 * each DRAM row with a granularity of 64 or 128MB (single/dual in e752x_init_csrows()
1093 for (last_cumul_size = index = 0; index < mci->nr_csrows; index++) { in e752x_init_csrows()
1096 csrow = mci->csrows[remap_csrow_index(mci, index)]; in e752x_init_csrows()
1101 cumul_size = value << (25 + drc_drbg - PAGE_SHIFT); in e752x_init_csrows()
1106 csrow->first_page = last_cumul_size; in e752x_init_csrows()
1107 csrow->last_page = cumul_size - 1; in e752x_init_csrows()
1108 nr_pages = cumul_size - last_cumul_size; in e752x_init_csrows()
1113 * if dual channel and x4 then S4ECD4ED in e752x_init_csrows()
1118 mci->edac_cap |= EDAC_FLAG_S4ECD4ED; in e752x_init_csrows()
1121 mci->edac_cap |= EDAC_FLAG_SECDED; in e752x_init_csrows()
1125 for (i = 0; i < csrow->nr_channels; i++) { in e752x_init_csrows()
1126 struct dimm_info *dimm = csrow->channels[i]->dimm; in e752x_init_csrows()
1129 dimm->nr_pages = nr_pages / csrow->nr_channels; in e752x_init_csrows()
1130 dimm->grain = 1 << 12; /* 4KiB - resolution of CELOG */ in e752x_init_csrows()
1131 dimm->mtype = MEM_RDDR; /* only one type supported */ in e752x_init_csrows()
1132 dimm->dtype = mem_dev ? DEV_X4 : DEV_X8; in e752x_init_csrows()
1133 dimm->edac_mode = edac_mode; in e752x_init_csrows()
1152 pvt->map[index] = 0xff; in e752x_init_mem_map_table()
1153 pvt->map[index + 1] = 0xff; in e752x_init_mem_map_table()
1155 pvt->map[index] = row; in e752x_init_mem_map_table()
1166 pvt->map[index + 1] = (value == last) ? 0xff : row; in e752x_init_mem_map_table()
1177 pvt->dev_d0f1 = pci_get_device(PCI_VENDOR_ID_INTEL, in e752x_get_devs()
1178 pvt->dev_info->err_dev, NULL); in e752x_get_devs()
1180 if (pvt->dev_d0f1 == NULL) { in e752x_get_devs()
1181 pvt->dev_d0f1 = pci_scan_single_device(pdev->bus, in e752x_get_devs()
1183 pci_dev_get(pvt->dev_d0f1); in e752x_get_devs()
1186 if (pvt->dev_d0f1 == NULL) { in e752x_get_devs()
1193 pvt->dev_d0f0 = pci_get_device(PCI_VENDOR_ID_INTEL, in e752x_get_devs()
1197 if (pvt->dev_d0f0 == NULL) in e752x_get_devs()
1203 pci_dev_put(pvt->dev_d0f1); in e752x_get_devs()
1214 struct pci_dev *dev = pvt->dev_d0f1; in e752x_init_sysbus_parity_mask()
1218 if (sysbus_parity != -1) { in e752x_init_sysbus_parity_mask()
1236 dev = pvt->dev_d0f1; in e752x_init_error_reporting_regs()
1238 if (pvt->dev_info->err_dev == PCI_DEVICE_ID_INTEL_3100_1_ERR) { in e752x_init_error_reporting_regs()
1276 "E752x error registers can be safely un-hidden\n"); in e752x_probe1()
1277 return -ENODEV; in e752x_probe1()
1284 /* Dual channel = 1, Single channel = 0 */ in e752x_probe1()
1295 return -ENOMEM; in e752x_probe1()
1298 mci->mtype_cap = MEM_FLAG_RDDR; in e752x_probe1()
1300 mci->edac_ctl_cap = (dev_idx == I3100) ? EDAC_FLAG_SECDED : in e752x_probe1()
1302 /* FIXME - what if different memory types are in different csrows? */ in e752x_probe1()
1303 mci->mod_name = EDAC_MOD_STR; in e752x_probe1()
1304 mci->pdev = &pdev->dev; in e752x_probe1()
1307 pvt = (struct e752x_pvt *)mci->pvt_info; in e752x_probe1()
1308 pvt->dev_info = &e752x_devs[dev_idx]; in e752x_probe1()
1309 pvt->mc_symmetric = ((ddrcsr & 0x10) != 0); in e752x_probe1()
1313 return -ENODEV; in e752x_probe1()
1317 mci->ctl_name = pvt->dev_info->ctl_name; in e752x_probe1()
1318 mci->dev_name = pci_name(pdev); in e752x_probe1()
1319 mci->edac_check = e752x_check; in e752x_probe1()
1320 mci->ctl_page_to_phys = ctl_page_to_phys; in e752x_probe1()
1321 mci->set_sdram_scrub_rate = set_sdram_scrub_rate; in e752x_probe1()
1322 mci->get_sdram_scrub_rate = get_sdram_scrub_rate; in e752x_probe1()
1329 pvt->map_type = ((stat8 & 0x0f) > ((stat8 >> 4) & 0x0f)); in e752x_probe1()
1335 mci->edac_cap = EDAC_FLAG_SECDED; /* the only mode supported */ in e752x_probe1()
1337 mci->edac_cap |= EDAC_FLAG_NONE; in e752x_probe1()
1342 pvt->tolm = ((u32) pci_data) << 4; in e752x_probe1()
1344 pvt->remapbase = ((u32) pci_data) << 14; in e752x_probe1()
1346 pvt->remaplimit = ((u32) pci_data) << 14; in e752x_probe1()
1349 pvt->tolm, pvt->remapbase, pvt->remaplimit); in e752x_probe1()
1363 e752x_pci = edac_pci_create_generic_ctl(&pdev->dev, EDAC_MOD_STR); in e752x_probe1()
1377 pci_dev_put(pvt->dev_d0f0); in e752x_probe1()
1378 pci_dev_put(pvt->dev_d0f1); in e752x_probe1()
1381 return -ENODEV; in e752x_probe1()
1391 return -EIO; in e752x_init_one()
1393 return e752x_probe1(pdev, ent->driver_data); in e752x_init_one()
1406 if ((mci = edac_mc_del_mc(&pdev->dev)) == NULL) in e752x_remove_one()
1409 pvt = (struct e752x_pvt *)mci->pvt_info; in e752x_remove_one()
1410 pci_dev_put(pvt->dev_d0f0); in e752x_remove_one()
1411 pci_dev_put(pvt->dev_d0f1); in e752x_remove_one()
1478 " 1=enable system bus parity checking, default=auto-detect");
1480 MODULE_PARM_DESC(report_non_memory_errors, "0=disable non-memory error "
1481 "reporting, 1=enable non-memory error reporting");