/* * Radisys 82600 Embedded chipset Memory Controller kernel module * (C) 2005 EADS Astrium * This file may be distributed under the terms of the * GNU General Public License. * * Written by Tim Small <tim@buttersideup.com>, based on work by Thayne * Harbaugh, Dan Hollis <goemon at anime dot net> and others. * * $Id: edac_r82600.c,v 1.1.2.6 2005/10/05 00:43:44 dsp_llnl Exp $ * * Written with reference to 82600 High Integration Dual PCI System * Controller Data Book: * www.radisys.com/files/support_downloads/007-01277-0002.82600DataBook.pdf * references to this document given in []
*/
/* Radisys say "The 82600 integrates a main memory SDRAM controller that * supports up to four banks of memory. The four banks can support a mix of * sizes of 64 bit wide (72 bits with ECC) Synchronous DRAM (SDRAM) DIMMs, * each of which can be any size from 16MB to 512MB. Both registered (control * signals buffered) and unbuffered DIMM types are supported. Mixing of * registered and unbuffered DIMMs as well as mixing of ECC and non-ECC DIMMs * is not allowed. The 82600 SDRAM interface operates at the same frequency as * the CPU bus, 66MHz, 100MHz or 133MHz."
*/
edac_dbg(0, "mci = %p\n", mci);
mci->pdev = &pdev->dev;
mci->mtype_cap = MEM_FLAG_RDDR | MEM_FLAG_DDR;
mci->edac_ctl_cap = EDAC_FLAG_NONE | EDAC_FLAG_EC | EDAC_FLAG_SECDED; /* FIXME try to work out if the chip leads have been used for COM2 * instead on this board? [MA6?] MAYBE:
*/
/* On the R82600, the pins for memory bits 72:65 - i.e. the * * EC bits are shared with the pins for COM2 (!), so if COM2 * * is enabled, we assume COM2 is wired up, and thus no EDAC *
* is possible. */
mci->edac_cap = EDAC_FLAG_NONE | EDAC_FLAG_EC | EDAC_FLAG_SECDED;
/* Here we assume that we will never see multiple instances of this * type of memory controller. The ID is therefore hardcoded to 0.
*/ if (edac_mc_add_mc(mci)) {
edac_dbg(3, "failed edac_mc_add_mc()\n"); goto fail;
}
/* get this far and it's successful */
if (disable_hardware_scrub) {
edac_dbg(3, "Disabling Hardware Scrub (scrub on error)\n");
pci_write_bits32(pdev, R82600_EAP, BIT(31), BIT(31));
}
/* allocating generic PCI control info */
r82600_pci = edac_pci_create_generic_ctl(&pdev->dev, EDAC_MOD_STR); if (!r82600_pci) {
printk(KERN_WARNING "%s(): Unable to create PCI control\n",
__func__);
printk(KERN_WARNING "%s(): PCI error report via EDAC not setup\n",
__func__);
}
edac_dbg(3, "success\n"); return 0;
fail:
edac_mc_free(mci); return -ENODEV;
}
/* returns count (>= 0), or negative on error */ staticint r82600_init_one(struct pci_dev *pdev, conststruct pci_device_id *ent)
{
edac_dbg(0, "\n");
/* don't need to call pci_enable_device() */ return r82600_probe1(pdev, ent->driver_data);
}
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Tim Small - WPAD Ltd. on behalf of EADS Astrium");
MODULE_DESCRIPTION("MC support for Radisys 82600 memory controllers");
module_param(disable_hardware_scrub, bool, 0644);
MODULE_PARM_DESC(disable_hardware_scrub, "If set, disable the chipset's automatic scrub for CEs");
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.