Lines Matching +full:fail +full:- +full:fast
32 static int sysbus_parity = -1;
76 /* E752X register addresses - device 0 function 0 */
81 * 01=fast 10=normal
114 /* E752X register addresses - device 0 function 1 */
172 /* 3100 IMCH specific register addresses - device 0 function 1 */
178 /* ICH5R register addresses - device 30 function 0 */
254 * a normal and fast mode.
265 * normal mode. e752x bridges don't support choosing normal or fast mode,
266 * so the scrubbing bandwidth value isn't all that important - scrubbing is
275 /* Fast mode: 2 GByte PC3200 DDR2 scrubbed in 33s = 63161283 bytes/s
276 * Normal mode: 125 (32000 / 256) times slower than fast mode.
280 {500000, 0x0a}, /* Normal mode - 32k clocks */
281 {62500000, 0x06}, /* Fast mode - 256 clocks */
289 struct e752x_pvt *pvt = (struct e752x_pvt *)mci->pvt_info; in ctl_page_to_phys()
293 if (page < pvt->tolm) in ctl_page_to_phys()
296 if ((page >= 0x100000) && (page < pvt->remapbase)) in ctl_page_to_phys()
299 remap = (page - pvt->tolm) + pvt->remapbase; in ctl_page_to_phys()
301 if (remap < pvt->remaplimit) in ctl_page_to_phys()
304 e752x_printk(KERN_ERR, "Invalid page %lx - out of range\n", page); in ctl_page_to_phys()
305 return pvt->tolm - 1; in ctl_page_to_phys()
315 struct e752x_pvt *pvt = (struct e752x_pvt *)mci->pvt_info; in do_process_ce()
320 page = sec1_add >> (PAGE_SHIFT - 4); in do_process_ce()
322 /* FIXME - check for -1 */ in do_process_ce()
323 if (pvt->mc_symmetric) { in do_process_ce()
328 pvt->map[0], pvt->map[1], pvt->map[2], pvt->map[3], in do_process_ce()
329 pvt->map[4], pvt->map[5], pvt->map[6], in do_process_ce()
330 pvt->map[7]); in do_process_ce()
334 if (pvt->map[i] == row) in do_process_ce()
372 struct e752x_pvt *pvt = (struct e752x_pvt *)mci->pvt_info; in do_process_ue()
380 block_page = error_2b >> (PAGE_SHIFT - 4); in do_process_ue()
382 row = pvt->mc_symmetric ? in do_process_ue()
396 block_page = error_2b >> (PAGE_SHIFT - 4); in do_process_ue()
398 row = pvt->mc_symmetric ? in do_process_ue()
437 struct e752x_pvt *pvt = (struct e752x_pvt *)mci->pvt_info; in do_process_ded_retry()
440 page = error_1b >> (PAGE_SHIFT - 4); /* convert the addr to 4k page */ in do_process_ded_retry()
443 row = pvt->mc_symmetric ? ((page >> 1) & 3) : in do_process_ded_retry()
486 static char *fatal_message[2] = { "Non-Fatal ", "Fatal " };
549 "NSI Parity Error", /* bit 2, non-fatal */
552 "Correctable Error Message", /* bit 5, non-fatal */
553 "Non-Fatal Error Message", /* bit 6, non-fatal */
556 "Receiver Error", /* bit 9, non-fatal */
558 "Bad TLP", /* bit 11, non-fatal */
559 "Bad DLLP", /* bit 12, non-fatal */
560 "REPLAY_NUM Rollover", /* bit 13, non-fatal */
562 "Replay Timer Timeout", /* bit 15, non-fatal */
568 "Poisoned TLP", /* bit 21, non-fatal */
570 "Completion Timeout", /* bit 23, non-fatal */
571 "Completer Abort", /* bit 24, non-fatal */
572 "Unexpected Completion", /* bit 25, non-fatal */
576 "Unsupported Request" /* bit 29, non-fatal */
612 e752x_printk(KERN_WARNING, "Non-Fatal Error %s\n", in do_membuf_error()
664 stat8 = info->hi_ferr; in e752x_check_hub_interface()
677 stat8 = info->hi_nerr; in e752x_check_hub_interface()
695 stat32 = info->nsi_ferr; in e752x_check_ns_interface()
700 if (stat32 & NSI_NON_FATAL_MASK) /* check for non-fatal ones */ in e752x_check_ns_interface()
704 stat32 = info->nsi_nerr; in e752x_check_ns_interface()
721 stat32 = info->sysbus_ferr + (info->sysbus_nerr << 16); in e752x_check_sysbus()
747 stat8 = info->buf_ferr; in e752x_check_membuf()
754 stat8 = info->buf_nerr; in e752x_check_membuf()
768 error_one = info->dram_ferr; in e752x_check_dram()
769 error_next = info->dram_nerr; in e752x_check_dram()
773 process_ce(mci, error_one, info->dram_sec1_add, in e752x_check_dram()
774 info->dram_sec1_syndrome, error_found, handle_error); in e752x_check_dram()
777 process_ce(mci, error_next, info->dram_sec2_add, in e752x_check_dram()
778 info->dram_sec2_syndrome, error_found, handle_error); in e752x_check_dram()
787 process_ded_retry(mci, error_one, info->dram_retr_add, in e752x_check_dram()
791 process_ded_retry(mci, error_next, info->dram_retr_add, in e752x_check_dram()
802 process_ue(mci, error_one, info->dram_ded_add, in e752x_check_dram()
803 info->dram_scrb_add, error_found, handle_error); in e752x_check_dram()
806 process_ue(mci, error_next, info->dram_ded_add, in e752x_check_dram()
807 info->dram_scrb_add, error_found, handle_error); in e752x_check_dram()
817 pvt = (struct e752x_pvt *)mci->pvt_info; in e752x_get_error_info()
818 dev = pvt->dev_d0f1; in e752x_get_error_info()
819 pci_read_config_dword(dev, E752X_FERR_GLOBAL, &info->ferr_global); in e752x_get_error_info()
821 if (info->ferr_global) { in e752x_get_error_info()
822 if (pvt->dev_info->err_dev == PCI_DEVICE_ID_INTEL_3100_1_ERR) { in e752x_get_error_info()
824 &info->nsi_ferr); in e752x_get_error_info()
825 info->hi_ferr = 0; in e752x_get_error_info()
828 &info->hi_ferr); in e752x_get_error_info()
829 info->nsi_ferr = 0; in e752x_get_error_info()
832 &info->sysbus_ferr); in e752x_get_error_info()
833 pci_read_config_byte(dev, E752X_BUF_FERR, &info->buf_ferr); in e752x_get_error_info()
834 pci_read_config_word(dev, E752X_DRAM_FERR, &info->dram_ferr); in e752x_get_error_info()
836 &info->dram_sec1_add); in e752x_get_error_info()
838 &info->dram_sec1_syndrome); in e752x_get_error_info()
840 &info->dram_ded_add); in e752x_get_error_info()
842 &info->dram_scrb_add); in e752x_get_error_info()
844 &info->dram_retr_add); in e752x_get_error_info()
847 if (info->hi_ferr & 0x7f) in e752x_get_error_info()
849 info->hi_ferr); in e752x_get_error_info()
851 if (info->nsi_ferr & NSI_ERR_MASK) in e752x_get_error_info()
853 info->nsi_ferr); in e752x_get_error_info()
855 if (info->sysbus_ferr) in e752x_get_error_info()
857 info->sysbus_ferr); in e752x_get_error_info()
859 if (info->buf_ferr & 0x0f) in e752x_get_error_info()
861 info->buf_ferr); in e752x_get_error_info()
863 if (info->dram_ferr) in e752x_get_error_info()
864 pci_write_bits16(pvt->bridge_ck, E752X_DRAM_FERR, in e752x_get_error_info()
865 info->dram_ferr, info->dram_ferr); in e752x_get_error_info()
868 info->ferr_global); in e752x_get_error_info()
871 pci_read_config_dword(dev, E752X_NERR_GLOBAL, &info->nerr_global); in e752x_get_error_info()
873 if (info->nerr_global) { in e752x_get_error_info()
874 if (pvt->dev_info->err_dev == PCI_DEVICE_ID_INTEL_3100_1_ERR) { in e752x_get_error_info()
876 &info->nsi_nerr); in e752x_get_error_info()
877 info->hi_nerr = 0; in e752x_get_error_info()
880 &info->hi_nerr); in e752x_get_error_info()
881 info->nsi_nerr = 0; in e752x_get_error_info()
884 &info->sysbus_nerr); in e752x_get_error_info()
885 pci_read_config_byte(dev, E752X_BUF_NERR, &info->buf_nerr); in e752x_get_error_info()
886 pci_read_config_word(dev, E752X_DRAM_NERR, &info->dram_nerr); in e752x_get_error_info()
888 &info->dram_sec2_add); in e752x_get_error_info()
890 &info->dram_sec2_syndrome); in e752x_get_error_info()
892 if (info->hi_nerr & 0x7f) in e752x_get_error_info()
894 info->hi_nerr); in e752x_get_error_info()
896 if (info->nsi_nerr & NSI_ERR_MASK) in e752x_get_error_info()
898 info->nsi_nerr); in e752x_get_error_info()
900 if (info->sysbus_nerr) in e752x_get_error_info()
902 info->sysbus_nerr); in e752x_get_error_info()
904 if (info->buf_nerr & 0x0f) in e752x_get_error_info()
906 info->buf_nerr); in e752x_get_error_info()
908 if (info->dram_nerr) in e752x_get_error_info()
909 pci_write_bits16(pvt->bridge_ck, E752X_DRAM_NERR, in e752x_get_error_info()
910 info->dram_nerr, info->dram_nerr); in e752x_get_error_info()
913 info->nerr_global); in e752x_get_error_info()
925 error32 = (info->ferr_global >> 18) & 0x3ff; in e752x_process_error_info()
926 stat32 = (info->ferr_global >> 4) & 0x7ff; in e752x_process_error_info()
934 error32 = (info->nerr_global >> 18) & 0x3ff; in e752x_process_error_info()
935 stat32 = (info->nerr_global >> 4) & 0x7ff; in e752x_process_error_info()
964 struct e752x_pvt *pvt = (struct e752x_pvt *) mci->pvt_info; in set_sdram_scrub_rate()
965 struct pci_dev *pdev = pvt->dev_d0f0; in set_sdram_scrub_rate()
968 if (pvt->dev_info->ctl_dev == PCI_DEVICE_ID_INTEL_3100_0) in set_sdram_scrub_rate()
982 return -1; in set_sdram_scrub_rate()
993 struct e752x_pvt *pvt = (struct e752x_pvt *) mci->pvt_info; in get_sdram_scrub_rate()
994 struct pci_dev *pdev = pvt->dev_d0f0; in get_sdram_scrub_rate()
998 if (pvt->dev_info->ctl_dev == PCI_DEVICE_ID_INTEL_3100_0) in get_sdram_scrub_rate()
1014 return -1; in get_sdram_scrub_rate()
1030 struct e752x_pvt *pvt = mci->pvt_info; in remap_csrow_index()
1032 if (!pvt->map_type) in remap_csrow_index()
1033 return (7 - index); in remap_csrow_index()
1065 for (last_cumul_size = index = 0; index < mci->nr_csrows; index++) { in e752x_init_csrows()
1068 csrow = &mci->csrows[remap_csrow_index(mci, index)]; in e752x_init_csrows()
1073 cumul_size = value << (25 + drc_drbg - PAGE_SHIFT); in e752x_init_csrows()
1079 csrow->first_page = last_cumul_size; in e752x_init_csrows()
1080 csrow->last_page = cumul_size - 1; in e752x_init_csrows()
1081 csrow->nr_pages = cumul_size - last_cumul_size; in e752x_init_csrows()
1083 csrow->grain = 1 << 12; /* 4KiB - resolution of CELOG */ in e752x_init_csrows()
1084 csrow->mtype = MEM_RDDR; /* only one type supported */ in e752x_init_csrows()
1085 csrow->dtype = mem_dev ? DEV_X4 : DEV_X8; in e752x_init_csrows()
1093 csrow->edac_mode = EDAC_S4ECD4ED; in e752x_init_csrows()
1094 mci->edac_cap |= EDAC_FLAG_S4ECD4ED; in e752x_init_csrows()
1096 csrow->edac_mode = EDAC_SECDED; in e752x_init_csrows()
1097 mci->edac_cap |= EDAC_FLAG_SECDED; in e752x_init_csrows()
1100 csrow->edac_mode = EDAC_NONE; in e752x_init_csrows()
1118 pvt->map[index] = 0xff; in e752x_init_mem_map_table()
1119 pvt->map[index + 1] = 0xff; in e752x_init_mem_map_table()
1121 pvt->map[index] = row; in e752x_init_mem_map_table()
1132 pvt->map[index + 1] = (value == last) ? 0xff : row; in e752x_init_mem_map_table()
1145 pvt->bridge_ck = pci_get_device(PCI_VENDOR_ID_INTEL, in e752x_get_devs()
1146 pvt->dev_info->err_dev, pvt->bridge_ck); in e752x_get_devs()
1148 if (pvt->bridge_ck == NULL) in e752x_get_devs()
1149 pvt->bridge_ck = pci_scan_single_device(pdev->bus, in e752x_get_devs()
1152 if (pvt->bridge_ck == NULL) { in e752x_get_devs()
1164 goto fail; in e752x_get_devs()
1166 pvt->dev_d0f0 = dev; in e752x_get_devs()
1167 pvt->dev_d0f1 = pci_dev_get(pvt->bridge_ck); in e752x_get_devs()
1171 fail: in e752x_get_devs()
1172 pci_dev_put(pvt->bridge_ck); in e752x_get_devs()
1183 struct pci_dev *dev = pvt->dev_d0f1; in e752x_init_sysbus_parity_mask()
1187 if (sysbus_parity != -1) { in e752x_init_sysbus_parity_mask()
1205 dev = pvt->dev_d0f1; in e752x_init_error_reporting_regs()
1207 if (pvt->dev_info->err_dev == PCI_DEVICE_ID_INTEL_3100_1_ERR) { in e752x_init_error_reporting_regs()
1240 * fail the probe. */ in e752x_probe1()
1244 "E752x error registers can be safely un-hidden\n"); in e752x_probe1()
1245 return -ENODEV; in e752x_probe1()
1258 return -ENOMEM; in e752x_probe1()
1262 mci->mtype_cap = MEM_FLAG_RDDR; in e752x_probe1()
1264 mci->edac_ctl_cap = (dev_idx == I3100) ? EDAC_FLAG_SECDED : in e752x_probe1()
1266 /* FIXME - what if different memory types are in different csrows? */ in e752x_probe1()
1267 mci->mod_name = EDAC_MOD_STR; in e752x_probe1()
1268 mci->mod_ver = E752X_REVISION; in e752x_probe1()
1269 mci->dev = &pdev->dev; in e752x_probe1()
1272 pvt = (struct e752x_pvt *)mci->pvt_info; in e752x_probe1()
1273 pvt->dev_info = &e752x_devs[dev_idx]; in e752x_probe1()
1274 pvt->mc_symmetric = ((ddrcsr & 0x10) != 0); in e752x_probe1()
1278 return -ENODEV; in e752x_probe1()
1282 mci->ctl_name = pvt->dev_info->ctl_name; in e752x_probe1()
1283 mci->dev_name = pci_name(pdev); in e752x_probe1()
1284 mci->edac_check = e752x_check; in e752x_probe1()
1285 mci->ctl_page_to_phys = ctl_page_to_phys; in e752x_probe1()
1286 mci->set_sdram_scrub_rate = set_sdram_scrub_rate; in e752x_probe1()
1287 mci->get_sdram_scrub_rate = get_sdram_scrub_rate; in e752x_probe1()
1294 pvt->map_type = ((stat8 & 0x0f) > ((stat8 >> 4) & 0x0f)); in e752x_probe1()
1300 mci->edac_cap = EDAC_FLAG_SECDED; /* the only mode supported */ in e752x_probe1()
1302 mci->edac_cap |= EDAC_FLAG_NONE; in e752x_probe1()
1307 pvt->tolm = ((u32) pci_data) << 4; in e752x_probe1()
1309 pvt->remapbase = ((u32) pci_data) << 14; in e752x_probe1()
1311 pvt->remaplimit = ((u32) pci_data) << 14; in e752x_probe1()
1314 pvt->tolm, pvt->remapbase, pvt->remaplimit); in e752x_probe1()
1321 goto fail; in e752x_probe1()
1328 e752x_pci = edac_pci_create_generic_ctl(&pdev->dev, EDAC_MOD_STR); in e752x_probe1()
1341 fail: in e752x_probe1()
1342 pci_dev_put(pvt->dev_d0f0); in e752x_probe1()
1343 pci_dev_put(pvt->dev_d0f1); in e752x_probe1()
1344 pci_dev_put(pvt->bridge_ck); in e752x_probe1()
1347 return -ENODEV; in e752x_probe1()
1358 return -EIO; in e752x_init_one()
1360 return e752x_probe1(pdev, ent->driver_data); in e752x_init_one()
1373 if ((mci = edac_mc_del_mc(&pdev->dev)) == NULL) in e752x_remove_one()
1376 pvt = (struct e752x_pvt *)mci->pvt_info; in e752x_remove_one()
1377 pci_dev_put(pvt->dev_d0f0); in e752x_remove_one()
1378 pci_dev_put(pvt->dev_d0f1); in e752x_remove_one()
1379 pci_dev_put(pvt->bridge_ck); in e752x_remove_one()
1446 " 1=enable system bus parity checking, default=auto-detect");
1448 MODULE_PARM_DESC(report_non_memory_errors, "0=disable non-memory error "
1449 "reporting, 1=enable non-memory error reporting");