Lines Matching +full:non +full:- +full:interleaved
25 /* Intel 3000 register addresses - device 0 function 0 - DRAM Controller */
54 deap |= (edeap & 1) << (32 - PAGE_SHIFT); in deap_pfn()
60 return deap & ~(I3000_DEAP_GRAIN - 1) & ~PAGE_MASK; in deap_offset()
79 * 9 LOCK to non-DRAM Memory Flag (LCKF)
82 * 1 Multi-bit DRAM ECC Error Flag (DMERR)
83 * 0 Single-bit DRAM ECC Error Flag (DSERR)
95 * 9 SERR on LOCK to non-DRAM Memory
100 * 1 SERR Multi-Bit DRAM ECC Error
102 * 0 SERR on Single-Bit ECC Error
106 /* Intel MMIO register space - device 0 function 0 - MMR space */
195 pdev = to_pci_dev(mci->pdev); in i3000_get_error_info()
202 pci_read_config_word(pdev, I3000_ERRSTS, &info->errsts); in i3000_get_error_info()
203 if (!(info->errsts & I3000_ERRSTS_BITS)) in i3000_get_error_info()
205 pci_read_config_byte(pdev, I3000_EDEAP, &info->edeap); in i3000_get_error_info()
206 pci_read_config_dword(pdev, I3000_DEAP, &info->deap); in i3000_get_error_info()
207 pci_read_config_byte(pdev, I3000_DERRSYN, &info->derrsyn); in i3000_get_error_info()
208 pci_read_config_word(pdev, I3000_ERRSTS, &info->errsts2); in i3000_get_error_info()
216 if ((info->errsts ^ info->errsts2) & I3000_ERRSTS_BITS) { in i3000_get_error_info()
217 pci_read_config_byte(pdev, I3000_EDEAP, &info->edeap); in i3000_get_error_info()
218 pci_read_config_dword(pdev, I3000_DEAP, &info->deap); in i3000_get_error_info()
219 pci_read_config_byte(pdev, I3000_DERRSYN, &info->derrsyn); in i3000_get_error_info()
237 multi_chan = mci->csrows[0]->nr_channels - 1; in i3000_process_error_info()
239 if (!(info->errsts & I3000_ERRSTS_BITS)) in i3000_process_error_info()
245 if ((info->errsts ^ info->errsts2) & I3000_ERRSTS_BITS) { in i3000_process_error_info()
247 -1, -1, -1, in i3000_process_error_info()
249 info->errsts = info->errsts2; in i3000_process_error_info()
252 pfn = deap_pfn(info->edeap, info->deap); in i3000_process_error_info()
253 offset = deap_offset(info->deap); in i3000_process_error_info()
254 channel = deap_channel(info->deap); in i3000_process_error_info()
258 if (info->errsts & I3000_ERRSTS_UE) in i3000_process_error_info()
261 row, -1, -1, in i3000_process_error_info()
265 pfn, offset, info->derrsyn, in i3000_process_error_info()
266 row, multi_chan ? channel : 0, -1, in i3000_process_error_info()
289 * we're not interleaved. in i3000_is_interleaved()
299 * then we're not interleaved. in i3000_is_interleaved()
315 int interleaved, nr_channels; in i3000_probe1() local
330 return -ENODEV; in i3000_probe1()
353 interleaved = i3000_is_interleaved(c0dra, c1dra, c0drb, c1drb); in i3000_probe1()
354 nr_channels = interleaved ? 2 : 1; in i3000_probe1()
364 return -ENOMEM; in i3000_probe1()
368 mci->pdev = &pdev->dev; in i3000_probe1()
369 mci->mtype_cap = MEM_FLAG_DDR2; in i3000_probe1()
371 mci->edac_ctl_cap = EDAC_FLAG_SECDED; in i3000_probe1()
372 mci->edac_cap = EDAC_FLAG_SECDED; in i3000_probe1()
374 mci->mod_name = EDAC_MOD_STR; in i3000_probe1()
375 mci->ctl_name = i3000_devs[dev_idx].ctl_name; in i3000_probe1()
376 mci->dev_name = pci_name(pdev); in i3000_probe1()
377 mci->edac_check = i3000_check; in i3000_probe1()
378 mci->ctl_page_to_phys = NULL; in i3000_probe1()
386 * If we're in interleaved mode then we're only walking through in i3000_probe1()
389 for (last_cumul_size = i = 0; i < mci->nr_csrows; i++) { in i3000_probe1()
392 struct csrow_info *csrow = mci->csrows[i]; in i3000_probe1()
395 cumul_size = value << (I3000_DRB_SHIFT - PAGE_SHIFT); in i3000_probe1()
396 if (interleaved) in i3000_probe1()
402 csrow->first_page = last_cumul_size; in i3000_probe1()
403 csrow->last_page = cumul_size - 1; in i3000_probe1()
404 nr_pages = cumul_size - last_cumul_size; in i3000_probe1()
408 struct dimm_info *dimm = csrow->channels[j]->dimm; in i3000_probe1()
410 dimm->nr_pages = nr_pages / nr_channels; in i3000_probe1()
411 dimm->grain = I3000_DEAP_GRAIN; in i3000_probe1()
412 dimm->mtype = MEM_DDR2; in i3000_probe1()
413 dimm->dtype = DEV_UNKNOWN; in i3000_probe1()
414 dimm->edac_mode = EDAC_UNKNOWN; in i3000_probe1()
425 rc = -ENODEV; in i3000_probe1()
432 i3000_pci = edac_pci_create_generic_ctl(&pdev->dev, EDAC_MOD_STR); in i3000_probe1()
461 return -EIO; in i3000_init_one()
463 rc = i3000_probe1(pdev, ent->driver_data); in i3000_init_one()
479 mci = edac_mc_del_mc(&pdev->dev); in i3000_remove_one()
523 pci_rc = -ENODEV; in i3000_init()
530 pci_rc = -ENODEV; in i3000_init()