Lines Matching +full:memory +full:- +full:controller
6 * 2006-2008 (c) MontaVista Software, Inc. This file is licensed under
26 #define EDAC_OPSTATE_INVAL -1
60 * enum dev_type - describe the type of memory DRAM chips used at the stick
93 * enum hw_event_mc_err_type - type of the detected error
95 * @HW_EVENT_ERR_CORRECTED: Corrected Error - Indicates that an ECC
97 * @HW_EVENT_ERR_UNCORRECTED: Uncorrected Error - Indicates an error that
99 * fatal (maybe it is on an unused memory area,
100 * or the memory controller could recover from
101 * it for example, by re-trying the operation).
102 * @HW_EVENT_ERR_DEFERRED: Deferred Error - Indicates an uncorrectable
108 * @HW_EVENT_ERR_FATAL: Fatal Error - Uncorrected error that could not
110 * @HW_EVENT_ERR_INFO: Informational - The CPER spec defines a forth
139 * enum mem_type - memory types. For a more detailed reference, please see
145 * @MEM_FPM: FPM - Fast Page Mode, used on systems up to 1995.
146 * @MEM_EDO: EDO - Extended data out, used on systems up to 1998.
147 * @MEM_BEDO: BEDO - Burst Extended data out, an EDO variant.
148 * @MEM_SDR: SDR - Single data rate SDRAM
149 * http://en.wikipedia.org/wiki/Synchronous_dynamic_random-access_memory
151 * for rank 0; pins 1 and 3 are for rank 1, if the memory
152 * is dual-rank.
158 * A registered memory has a buffer inside it, hiding
159 * part of the memory details to the memory controller.
161 * @MEM_DDR2: DDR2 RAM, as described at JEDEC JESD79-2F.
162 * Those memories are labeled as "PC2-" instead of "PC" to
164 * @MEM_FB_DDR2: Fully-Buffered DDR2, as described at JEDEC Std No. 205
173 * x86 arch, but cell_edac PPC memory controller uses it.
177 * @MEM_LRDDR3: Load-Reduced DDR3 memory.
178 * @MEM_LPDDR3: Low-Power DDR3 memory.
182 * @MEM_LRDDR4: Load-Reduced DDR4 memory.
183 * @MEM_LPDDR4: Low-Power DDR4 memory.
186 * @MEM_LRDDR5: Load-Reduced DDR5 memory.
187 * @MEM_NVDIMM: Non-volatile RAM
189 * @MEM_HBM2: High bandwidth Memory Gen 2.
253 * enum edac_type - Error Detection and Correction capabilities and mode
258 * @EDAC_EC: Error Checking - no correction
260 * @EDAC_S2ECD2ED: Chipkill x2 devices - do these exist?
289 * enum scrub_type - scrubbing capabilities
323 /* FIXME - should have notify capabilities: NMI, LOG, PROC, etc */
333 * enum edac_mc_layer_type - memory controller hierarchy layer
335 * @EDAC_MC_LAYER_BRANCH: memory layer is named "branch"
336 * @EDAC_MC_LAYER_CHANNEL: memory layer is named "channel"
337 * @EDAC_MC_LAYER_SLOT: memory layer is named "slot"
338 * @EDAC_MC_LAYER_CHIP_SELECT: memory layer is named "chip select"
339 * @EDAC_MC_LAYER_ALL_MEM: memory layout is unknown. All memory is mapped
340 * as a single memory area. This is used when
344 * be used when describing a memory stick location.
355 * struct edac_mc_layer - describes the memory controller hierarchy
370 * Maximum number of layers used by the memory controller to uniquely
371 * identify a single memory stick.
383 /* Memory location data */
390 enum dev_type dtype; /* memory device type */
391 enum mem_type mtype; /* memory dimm type */
405 * struct rank_info - contains the information for one DIMM rank
411 * the (csrow->csrow_idx, chan_idx) vector.
433 unsigned long page_mask; /* used for interleaving -
436 int csrow_idx; /* the chip-select row */
449 * struct errcount_attribute - used to store the several error counts
458 * struct edac_raw_error_desc - Raw error report structure
472 * @other_detail: other driver-specific detail about the error
491 /* MEMORY controller information structure
501 unsigned long mtype_cap; /* memory types supported by mc */
502 unsigned long edac_ctl_cap; /* Mem controller EDAC capabilities */
503 unsigned long edac_cap; /* configuration capabilities - this is
505 * difference is that the controller may be
514 /* Translates sdram memory scrub rate given in bytes/sec to the
520 /* Get the current sdram memory scrub rate from the internal
531 * Remaps memory pages: controller pages to physical pages.
534 /* FIXME - why not send the phys page to begin with? */
542 * Memory Controller hierarchy
544 * There are basically two types of memory controller: the ones that
545 * sees memory sticks ("dimms"), and the ones that sees memory ranks.
546 * All old memory controllers enumerate memories per rank, but most
548 * When the memory controller is per rank, csbased is true.
561 * FIXME - what about controllers on other busses? - IDs must be
581 /* Additional top controller level attributes, but specified
585 * controller level.
597 * Used to report an error - by being at the global struct
598 * makes the memory allocated by the EDAC core
602 /* the internal state of this controller instance */
612 for ((dimm) = (mci)->dimms[0]; \
614 (dimm) = (dimm)->idx + 1 < (mci)->tot_dimms \
615 ? (mci)->dimms[(dimm)->idx + 1] \
619 * edac_get_dimm - Get DIMM info from a memory controller given by
629 * For 2 layers, this function is similar to allocating a two-dimensional
632 * For 3 layers, this function is similar to allocating a tri-dimensional
641 || (mci->n_layers > 1 && layer1 < 0) in edac_get_dimm()
642 || (mci->n_layers > 2 && layer2 < 0)) in edac_get_dimm()
647 if (mci->n_layers > 1) in edac_get_dimm()
648 index = index * mci->layers[1].size + layer1; in edac_get_dimm()
650 if (mci->n_layers > 2) in edac_get_dimm()
651 index = index * mci->layers[2].size + layer2; in edac_get_dimm()
653 if (index < 0 || index >= mci->tot_dimms) in edac_get_dimm()
656 if (WARN_ON_ONCE(mci->dimms[index]->idx != index)) in edac_get_dimm()
659 return mci->dimms[index]; in edac_get_dimm()