Lines Matching +full:no +full:- +full:poll +full:- +full:on +full:- +full:init
13 * Note: E7210 appears same as D82875P - zhenyu.z.wang at intel.com
17 #include <linux/init.h>
43 /* Intel 82875p register addresses - device 0 function 0 - DRAM Controller */
64 * 9 non-DRAM lock error (ndlock)
79 * 9 SERR on non-DRAM lock
80 * 8 SERR on ECC UE
81 * 7 SERR on ECC CE
82 * 6 target abort on high exception
85 * 3 SERR on invalid AGP access
87 * 1 SERR on unsupported AGP command
91 /* Intel 82875p register addresses - device 6 function 0 - DRAM Controller */
95 * 9 fast back-to-back - ro 0
96 * 8 SERR enable - ro 0
97 * 7 addr/data stepping - ro 0
98 * 6 parity err enable - ro 0
99 * 5 VGA palette snoop - ro 0
100 * 4 mem wr & invalidate - ro 0
101 * 3 special cycle - ro 0
102 * 2 bus master - ro 0
103 * 1 mem access dev6 - 0(dis),1(en)
104 * 0 IO access dev3 - 0(dis),1(en)
110 * 11:4 address mask - ro 0
111 * 3 prefetchable - ro 0(non),1(pre)
112 * 2:1 mem type - ro 0
113 * 0 mem space - ro 0
116 /* Intel 82875p MMIO register space - device 0 function 0 - MMR space */
141 * 29 init complete
180 static struct pci_dev *mci_pdev; /* init dev: in case that AGP code has
191 pdev = to_pci_dev(mci->pdev); in i82875p_get_error_info()
194 * This is a mess because there is no atomic way to read all the in i82875p_get_error_info()
198 pci_read_config_word(pdev, I82875P_ERRSTS, &info->errsts); in i82875p_get_error_info()
200 if (!(info->errsts & 0x0081)) in i82875p_get_error_info()
203 pci_read_config_dword(pdev, I82875P_EAP, &info->eap); in i82875p_get_error_info()
204 pci_read_config_byte(pdev, I82875P_DES, &info->des); in i82875p_get_error_info()
205 pci_read_config_byte(pdev, I82875P_DERRSYN, &info->derrsyn); in i82875p_get_error_info()
206 pci_read_config_word(pdev, I82875P_ERRSTS, &info->errsts2); in i82875p_get_error_info()
211 * there is a CE no info and the second set of reads is valid in i82875p_get_error_info()
214 if ((info->errsts ^ info->errsts2) & 0x0081) { in i82875p_get_error_info()
215 pci_read_config_dword(pdev, I82875P_EAP, &info->eap); in i82875p_get_error_info()
216 pci_read_config_byte(pdev, I82875P_DES, &info->des); in i82875p_get_error_info()
217 pci_read_config_byte(pdev, I82875P_DERRSYN, &info->derrsyn); in i82875p_get_error_info()
229 multi_chan = mci->csrows[0]->nr_channels - 1; in i82875p_process_error_info()
231 if (!(info->errsts & 0x0081)) in i82875p_process_error_info()
237 if ((info->errsts ^ info->errsts2) & 0x0081) { in i82875p_process_error_info()
239 -1, -1, -1, in i82875p_process_error_info()
241 info->errsts = info->errsts2; in i82875p_process_error_info()
244 info->eap >>= PAGE_SHIFT; in i82875p_process_error_info()
245 row = edac_mc_find_csrow_by_page(mci, info->eap); in i82875p_process_error_info()
247 if (info->errsts & 0x0080) in i82875p_process_error_info()
249 info->eap, 0, 0, in i82875p_process_error_info()
250 row, -1, -1, in i82875p_process_error_info()
254 info->eap, 0, info->derrsyn, in i82875p_process_error_info()
255 row, multi_chan ? (info->des & 0x1) : 0, in i82875p_process_error_info()
256 -1, "i82875p CE", ""); in i82875p_process_error_info()
269 /* Return 0 on success or 1 on failure. */
284 * the DRBs - this is where we expose device 6. in i82875p_setup_overfl_dev()
285 * http://www.x86-secret.com/articles/tweak/pat/patsecrets-2.htm in i82875p_setup_overfl_dev()
288 dev = pci_scan_single_device(pdev->bus, PCI_DEVFN(6, 0)); in i82875p_setup_overfl_dev()
293 pci_bus_assign_resources(dev->bus); in i82875p_setup_overfl_dev()
361 for (index = 0; index < mci->nr_csrows; index++) { in i82875p_init_csrows()
362 csrow = mci->csrows[index]; in i82875p_init_csrows()
365 cumul_size = value << (I82875P_DRB_SHIFT - PAGE_SHIFT); in i82875p_init_csrows()
370 csrow->first_page = last_cumul_size; in i82875p_init_csrows()
371 csrow->last_page = cumul_size - 1; in i82875p_init_csrows()
372 nr_pages = cumul_size - last_cumul_size; in i82875p_init_csrows()
376 dimm = csrow->channels[j]->dimm; in i82875p_init_csrows()
378 dimm->nr_pages = nr_pages / nr_chans; in i82875p_init_csrows()
379 dimm->grain = 1 << 12; /* I82875P_EAP has 4KiB reolution */ in i82875p_init_csrows()
380 dimm->mtype = MEM_DDR; in i82875p_init_csrows()
381 dimm->dtype = DEV_UNKNOWN; in i82875p_init_csrows()
382 dimm->edac_mode = drc_ddim ? EDAC_SECDED : EDAC_NONE; in i82875p_init_csrows()
389 int rc = -ENODEV; in i82875p_probe1()
402 return -ENODEV; in i82875p_probe1()
414 rc = -ENOMEM; in i82875p_probe1()
418 edac_dbg(3, "init mci\n"); in i82875p_probe1()
419 mci->pdev = &pdev->dev; in i82875p_probe1()
420 mci->mtype_cap = MEM_FLAG_DDR; in i82875p_probe1()
421 mci->edac_ctl_cap = EDAC_FLAG_NONE | EDAC_FLAG_SECDED; in i82875p_probe1()
422 mci->edac_cap = EDAC_FLAG_UNKNOWN; in i82875p_probe1()
423 mci->mod_name = EDAC_MOD_STR; in i82875p_probe1()
424 mci->ctl_name = i82875p_devs[dev_idx].ctl_name; in i82875p_probe1()
425 mci->dev_name = pci_name(pdev); in i82875p_probe1()
426 mci->edac_check = i82875p_check; in i82875p_probe1()
427 mci->ctl_page_to_phys = NULL; in i82875p_probe1()
428 edac_dbg(3, "init pvt\n"); in i82875p_probe1()
429 pvt = (struct i82875p_pvt *)mci->pvt_info; in i82875p_probe1()
430 pvt->ovrfl_pdev = ovrfl_pdev; in i82875p_probe1()
431 pvt->ovrfl_window = ovrfl_window; in i82875p_probe1()
444 i82875p_pci = edac_pci_create_generic_ctl(&pdev->dev, EDAC_MOD_STR); in i82875p_probe1()
470 /* returns count (>= 0), or negative on error */
477 i82875p_printk(KERN_INFO, "i82875p init one\n"); in i82875p_init_one()
480 return -EIO; in i82875p_init_one()
482 rc = i82875p_probe1(pdev, ent->driver_data); in i82875p_init_one()
500 if ((mci = edac_mc_del_mc(&pdev->dev)) == NULL) in i82875p_remove_one()
503 pvt = (struct i82875p_pvt *)mci->pvt_info; in i82875p_remove_one()
505 if (pvt->ovrfl_window) in i82875p_remove_one()
506 iounmap(pvt->ovrfl_window); in i82875p_remove_one()
508 if (pvt->ovrfl_pdev) { in i82875p_remove_one()
510 pci_release_regions(pvt->ovrfl_pdev); in i82875p_remove_one()
512 pci_disable_device(pvt->ovrfl_pdev); in i82875p_remove_one()
513 pci_dev_put(pvt->ovrfl_pdev); in i82875p_remove_one()
543 /* Ensure that the OPSTATE is set correctly for POLL or NMI */ in i82875p_init()
557 pci_rc = -ENODEV; in i82875p_init()
564 edac_dbg(0, "875p init fail\n"); in i82875p_init()
565 pci_rc = -ENODEV; in i82875p_init()
599 MODULE_PARM_DESC(edac_op_state, "EDAC Error Reporting state: 0=Poll,1=NMI");