/Linux-v6.1/Documentation/devicetree/bindings/edac/ |
D | socfpga-eccmgr.txt | 1 Altera SoCFPGA ECC Manager 2 This driver uses the EDAC framework to implement the SOCFPGA ECC Manager. 3 The ECC Manager counts and corrects single bit errors and counts/handles 6 Cyclone5 and Arria5 ECC Manager 8 - compatible : Should be "altr,socfpga-ecc-manager" 15 L2 Cache ECC 17 - compatible : Should be "altr,socfpga-l2-ecc" 18 - reg : Address and size for ECC error interrupt clear registers. 22 On Chip RAM ECC 24 - compatible : Should be "altr,socfpga-ocram-ecc" [all …]
|
/Linux-v6.1/drivers/mtd/nand/ |
D | ecc-mtk.c | 3 * MTK ECC controller driver. 18 #include <linux/mtd/nand-ecc-mtk.h> 67 /* ecc strength that each IP supports */ 118 static inline void mtk_ecc_wait_idle(struct mtk_ecc *ecc, in mtk_ecc_wait_idle() argument 121 struct device *dev = ecc->dev; in mtk_ecc_wait_idle() 125 ret = readl_poll_timeout_atomic(ecc->regs + ECC_IDLE_REG(op), val, in mtk_ecc_wait_idle() 135 struct mtk_ecc *ecc = id; in mtk_ecc_irq() local 138 dec = readw(ecc->regs + ecc->caps->ecc_regs[ECC_DECIRQ_STA]) in mtk_ecc_irq() 141 dec = readw(ecc->regs + ecc->caps->ecc_regs[ECC_DECDONE]); in mtk_ecc_irq() 142 if (dec & ecc->sectors) { in mtk_ecc_irq() [all …]
|
D | ecc.c | 3 * Generic Error-Correcting Code (ECC) engine 10 * This file describes the abstraction of any NAND ECC engine. It has been 13 * There are three main situations where instantiating this ECC engine makes 15 * - external: The ECC engine is outside the NAND pipeline, typically this 16 * is a software ECC engine, or an hardware engine that is 18 * - pipelined: The ECC engine is inside the NAND pipeline, ie. on the 20 * controllers. In the pipeline case, the ECC bytes are 23 * - ondie: The ECC engine is inside the NAND pipeline, on the chip's side. 28 * - prepare: Prepare an I/O request. Enable/disable the ECC engine based on 30 * engine, this step may involve to derive the ECC bytes and place [all …]
|
D | ecc-sw-bch.c | 3 * This file provides ECC correction for more than 1 bit per block of data, 15 #include <linux/mtd/nand-ecc-sw-bch.h> 18 * nand_ecc_sw_bch_calculate - Calculate the ECC corresponding to a data block 21 * @code: Output buffer with ECC 26 struct nand_ecc_sw_bch_conf *engine_conf = nand->ecc.ctx.priv; in nand_ecc_sw_bch_calculate() 30 bch_encode(engine_conf->bch, buf, nand->ecc.ctx.conf.step_size, code); in nand_ecc_sw_bch_calculate() 44 * @read_ecc: ECC bytes from the chip 45 * @calc_ecc: ECC calculated from the raw data 52 struct nand_ecc_sw_bch_conf *engine_conf = nand->ecc.ctx.priv; in nand_ecc_sw_bch_correct() 53 unsigned int step_size = nand->ecc.ctx.conf.step_size; in nand_ecc_sw_bch_correct() [all …]
|
/Linux-v6.1/drivers/mtd/nand/raw/ingenic/ |
D | ingenic_ecc.c | 3 * JZ47xx ECC common code 18 * ingenic_ecc_calculate() - calculate ECC for a data buffer 19 * @ecc: ECC device. 20 * @params: ECC parameters. 22 * @ecc_code: output buffer with ECC. 24 * Return: 0 on success, -ETIMEDOUT if timed out while waiting for ECC 27 int ingenic_ecc_calculate(struct ingenic_ecc *ecc, in ingenic_ecc_calculate() argument 31 return ecc->ops->calculate(ecc, params, buf, ecc_code); in ingenic_ecc_calculate() 36 * @ecc: ECC device. 37 * @params: ECC parameters. [all …]
|
D | ingenic_nand_drv.c | 45 struct ingenic_ecc *ecc; member 76 struct nand_ecc_ctrl *ecc = &chip->ecc; in qi_lb60_ooblayout_ecc() local 78 if (section || !ecc->total) in qi_lb60_ooblayout_ecc() 81 oobregion->length = ecc->total; in qi_lb60_ooblayout_ecc() 91 struct nand_ecc_ctrl *ecc = &chip->ecc; in qi_lb60_ooblayout_free() local 96 oobregion->length = mtd->oobsize - ecc->total - 12; in qi_lb60_ooblayout_free() 97 oobregion->offset = 12 + ecc->total; in qi_lb60_ooblayout_free() 103 .ecc = qi_lb60_ooblayout_ecc, 111 struct nand_ecc_ctrl *ecc = &chip->ecc; in jz4725b_ooblayout_ecc() local 113 if (section || !ecc->total) in jz4725b_ooblayout_ecc() [all …]
|
D | jz4740_ecc.c | 3 * JZ4740 ECC controller driver 45 static void jz4740_ecc_reset(struct ingenic_ecc *ecc, bool calc_ecc) in jz4740_ecc_reset() argument 50 writel(0, ecc->base + JZ_REG_NAND_IRQ_STAT); in jz4740_ecc_reset() 52 /* Initialize and enable ECC hardware */ in jz4740_ecc_reset() 53 reg = readl(ecc->base + JZ_REG_NAND_ECC_CTRL); in jz4740_ecc_reset() 57 if (calc_ecc) /* calculate ECC from data */ in jz4740_ecc_reset() 59 else /* correct data from ECC */ in jz4740_ecc_reset() 62 writel(reg, ecc->base + JZ_REG_NAND_ECC_CTRL); in jz4740_ecc_reset() 65 static int jz4740_ecc_calculate(struct ingenic_ecc *ecc, in jz4740_ecc_calculate() argument 73 jz4740_ecc_reset(ecc, true); in jz4740_ecc_calculate() [all …]
|
D | ingenic_ecc.h | 17 * struct ingenic_ecc_params - ECC parameters 18 * @size: data bytes per ECC step. 19 * @bytes: ECC bytes per step. 20 * @strength: number of correctable bits per ECC step. 29 int ingenic_ecc_calculate(struct ingenic_ecc *ecc, 32 int ingenic_ecc_correct(struct ingenic_ecc *ecc, 36 void ingenic_ecc_release(struct ingenic_ecc *ecc); 39 int ingenic_ecc_calculate(struct ingenic_ecc *ecc, in ingenic_ecc_calculate() argument 46 int ingenic_ecc_correct(struct ingenic_ecc *ecc, in ingenic_ecc_correct() argument 53 void ingenic_ecc_release(struct ingenic_ecc *ecc) in ingenic_ecc_release() argument [all …]
|
/Linux-v6.1/drivers/dma/ti/ |
D | edma.c | 220 struct edma_cc *ecc; member 301 static inline unsigned int edma_read(struct edma_cc *ecc, int offset) in edma_read() argument 303 return (unsigned int)__raw_readl(ecc->base + offset); in edma_read() 306 static inline void edma_write(struct edma_cc *ecc, int offset, int val) in edma_write() argument 308 __raw_writel(val, ecc->base + offset); in edma_write() 311 static inline void edma_modify(struct edma_cc *ecc, int offset, unsigned and, in edma_modify() argument 314 unsigned val = edma_read(ecc, offset); in edma_modify() 318 edma_write(ecc, offset, val); in edma_modify() 321 static inline void edma_and(struct edma_cc *ecc, int offset, unsigned and) in edma_and() argument 323 unsigned val = edma_read(ecc, offset); in edma_and() [all …]
|
/Linux-v6.1/drivers/edac/ |
D | mce_amd.c | 82 "Fill ECC error on data fills", /* xec = 0x4 */ 87 "WCC Tag ECC error", 88 "WCC Data ECC error", 90 "VB Data ECC or parity error", 91 "L2 Tag ECC error", /* xec = 0x10 */ 92 "Hard L2 Tag ECC error", 99 "DRAM ECC error detected on the NB", 107 "DRAM ECC error detected on the NB", 114 "L3 data cache ECC error", /* xec = 0x1c */ 117 "ECC Error in the Probe Filter directory" [all …]
|
/Linux-v6.1/drivers/mtd/nand/raw/ |
D | nand_micron.c | 15 * corrected by on-die ECC and should be rewritten. 20 * On chips with 8-bit ECC and additional bit can be used to distinguish 66 struct micron_on_die_ecc ecc; member 127 .ecc = micron_nand_on_die_4_ooblayout_ecc, 140 oobregion->offset = mtd->oobsize - chip->ecc.total; in micron_nand_on_die_8_ooblayout_ecc() 141 oobregion->length = chip->ecc.total; in micron_nand_on_die_8_ooblayout_ecc() 156 oobregion->length = mtd->oobsize - chip->ecc.total - 2; in micron_nand_on_die_8_ooblayout_free() 162 .ecc = micron_nand_on_die_8_ooblayout_ecc, 172 if (micron->ecc.forced) in micron_nand_on_die_ecc_setup() 175 if (micron->ecc.enabled == enable) in micron_nand_on_die_ecc_setup() [all …]
|
D | omap2.c | 18 #include <linux/mtd/nand-ecc-sw-bch.h> 122 /* GPMC ecc engine settings for read */ 129 /* GPMC ecc engine settings for write */ 170 /* fields specific for BCHx_HW ECC scheme */ 623 * gen_true_ecc - This function will generate true ECC value 624 * @ecc_buf: buffer to store ecc code 626 * This generated true ECC value can be used when correcting 644 * @ecc_data1: ecc code from nand spare area 645 * @ecc_data2: ecc code from hardware register obtained from hardware ecc 648 * This function compares two ECC's and indicates if there is an error. [all …]
|
D | nand_base.c | 22 * if we have HW ECC support. 38 #include <linux/mtd/nand-ecc-sw-hamming.h> 39 #include <linux/mtd/nand-ecc-sw-bch.h> 263 res = chip->ecc.read_oob(chip, first_page + page_offset); in nand_block_bad() 476 status = chip->ecc.write_oob_raw(chip, page & chip->pagemask); in nand_do_write_oob() 478 status = chip->ecc.write_oob(chip, page & chip->pagemask); in nand_do_write_oob() 2711 * nand_check_erased_ecc_chunk - check if an ECC chunk contains (almost) only 2715 * @ecc: ECC buffer 2716 * @ecclen: ECC length 2721 * Check if a data buffer and its associated ECC and OOB data contains only [all …]
|
D | sunxi_nand.c | 173 * struct sunxi_nand_hw_ecc - stores information related to HW ECC support 175 * @mode: the sunxi ECC mode field deduced from ECC requirements 186 * @ecc: ECC controller structure 196 struct sunxi_nand_hw_ecc *ecc; member 604 bool ecc) in sunxi_nfc_randomizer_state() argument 613 if (ecc) { in sunxi_nfc_randomizer_state() 624 bool ecc) in sunxi_nfc_randomizer_config() argument 634 state = sunxi_nfc_randomizer_state(nand, page, ecc); in sunxi_nfc_randomizer_config() 671 bool ecc, int page) in sunxi_nfc_randomizer_write_buf() argument 673 sunxi_nfc_randomizer_config(nand, page, ecc); in sunxi_nfc_randomizer_write_buf() [all …]
|
D | rockchip-nand-controller.c | 24 * 1024 bytes data + 4Bytes sys data + 28Bytes~124Bytes ECC data + 25 * 1024 bytes data + 4Bytes sys data + 28Bytes~124Bytes ECC data + 32 * 4Bytes sys data + .... + 4Bytes sys data + ECC data. 94 * struct rk_ecc_cnt_status: represent a ecc status data. 96 * @low: ECC count low bit index at register. 98 * @low_bn: ECC count low bit number. 99 * @high: ECC count high bit index at register. 113 * @ecc_strengths: ECC strengths 114 * @ecc_cfgs: ECC config values 198 return (u8 *)p + i * chip->ecc.size; in rk_nfc_buf_to_data_ptr() [all …]
|
D | qcom_nandc.c | 171 * the NAND controller performs reads/writes with ECC in 516 byte chunks. 185 /* ECC modes supported by the controller */ 441 * by ECC (value in pages) 443 * by ECC (value in pages) 461 * protected by ECC 465 * of a page, consisting of all data, ecc, spare 468 * by ECC 469 * @ecc_bytes_hw: ECC bytes used by controller hardware for this 476 * ecc/non-ecc mode for the current nand flash 483 * @use_ecc: request the controller to use ECC for the [all …]
|
D | lpc32xx_slc.c | 57 #define SLCCTRL_ECC_CLEAR (1 << 1) /* Reset ECC bit */ 64 #define SLCCFG_DMA_ECC (1 << 4) /* Enable DMA ECC bit */ 65 #define SLCCFG_ECC_EN (1 << 3) /* ECC enable bit */ 109 /* ECC line party fetch macro */ 114 * DMA requires storage space for the DMA local buffer and the hardware ECC 121 /* Number of bytes used for ECC stored in NAND per 256 bytes */ 135 * NAND ECC Layout for small page NAND devices 168 .ecc = lpc32xx_ooblayout_ecc, 230 * DMA and CPU addresses of ECC work area and data buffer 326 * Prepares SLC for transfers with H/W ECC enabled [all …]
|
D | fsmc_nand.c | 29 #include <linux/mtd/nand-ecc-sw-hamming.h> 172 if (section >= chip->ecc.steps) in fsmc_ecc1_ooblayout_ecc() 186 if (section >= chip->ecc.steps) in fsmc_ecc1_ooblayout_free() 191 if (section < chip->ecc.steps - 1) in fsmc_ecc1_ooblayout_free() 200 .ecc = fsmc_ecc1_ooblayout_ecc, 205 * ECC placement definitions in oobfree type format. 206 * There are 13 bytes of ecc for every 512 byte block and it has to be read 215 if (section >= chip->ecc.steps) in fsmc_ecc4_ooblayout_ecc() 218 oobregion->length = chip->ecc.bytes; in fsmc_ecc4_ooblayout_ecc() 233 if (section >= chip->ecc.steps) in fsmc_ecc4_ooblayout_free() [all …]
|
D | davinci_nand.c | 33 * The 1-bit ECC hardware is supported, as well as the newer 4-bit ECC 85 * 1-bit hardware ECC ... context maintained for each core chipselect 104 /* Reset ECC hardware */ in nand_davinci_hwctl_1bit() 109 /* Restart ECC hardware */ in nand_davinci_hwctl_1bit() 118 * Read hardware ECC value and pack into three bytes 126 /* invert so that erased block ecc is correct */ in nand_davinci_calculate_1bit() 147 if ((diff >> (12 + 3)) < chip->ecc.size) { in nand_davinci_correct_1bit() 154 /* Single bit ECC error in the ECC itself, in nand_davinci_correct_1bit() 169 * 4-bit hardware ECC ... context maintained over entire AEMIF 174 * Also, and specific to this hardware, it ECC-protects the "prepad" [all …]
|
/Linux-v6.1/Documentation/devicetree/bindings/mtd/ |
D | mtk-nand.txt | 5 the nand controller interface driver and the ECC engine driver. 23 - ecc-engine: Required ECC Engine node. 36 ecc-engine = <&bch>; 49 - nand-ecc-mode: the NAND ecc mode (check driver for supported modes) 50 - nand-ecc-step-size: Number of data bytes covered by a single ECC step. 55 - nand-ecc-strength: Number of bits to correct per ECC step. 65 E : nand-ecc-strength. 71 Q : nand-ecc-step-size. 75 this number depends on max ecc step size 77 If max ecc step size supported is 1024, [all …]
|
D | nand-chip.yaml | 22 nand-ecc-engine: 24 A phandle on the hardware ECC engine if any. There are 26 1/ The ECC engine is part of the NAND controller, in this 28 2/ The ECC engine is part of the NAND part (on-die), in this 30 3/ The ECC engine is external, in this case the phandle should 31 reference the specific ECC engine node. 34 nand-use-soft-ecc-engine: 35 description: Use a software ECC engine. 38 nand-no-ecc-engine: 39 description: Do not use any ECC correction. [all …]
|
D | rockchip,nand-controller.yaml | 63 nand-ecc-mode: 66 nand-ecc-step-size: 69 nand-ecc-strength: 72 The ECC configurations that can be supported are as follows. 73 NFC v600 ECC 16, 24, 40, 60 76 NFC v622 ECC 16, 24, 40, 60 79 NFC v800 ECC 16 82 NFC v900 ECC 16, 40, 60, 70 93 The NFC driver need this information to select ECC 97 rockchip,boot-ecc-strength: [all …]
|
D | hisi504-nand.txt | 11 - nand-ecc-mode: Support none and hw ecc mode. 17 - nand-ecc-strength: Number of bits to correct per ECC step. 18 - nand-ecc-step-size: Number of data bytes covered by a single ECC step. 20 The following ECC strength and step size are currently supported: 22 - nand-ecc-strength = <16>, nand-ecc-step-size = <1024> 34 nand-ecc-mode = "hw"; 35 nand-ecc-strength = <16>; 36 nand-ecc-step-size = <1024>;
|
/Linux-v6.1/arch/arm/mach-socfpga/ |
D | ocram.c | 23 np = of_find_compatible_node(NULL, NULL, "altr,socfpga-ocram-ecc"); in socfpga_init_ocram_ecc() 25 pr_err("Unable to find socfpga-ocram-ecc\n"); in socfpga_init_ocram_ecc() 32 pr_err("Unable to map OCRAM ecc regs.\n"); in socfpga_init_ocram_ecc() 36 /* Clear any pending OCRAM ECC interrupts, then enable ECC */ in socfpga_init_ocram_ecc() 60 /* ECC Manager Defines */ 91 * This function uses the memory initialization block in the Arria10 ECC 92 * controller to initialize/clear the entire memory data and ECC data. 108 /* Clear any pending ECC interrupts */ in altr_init_memory_port() 127 np = of_find_compatible_node(NULL, NULL, "altr,socfpga-a10-ocram-ecc"); in socfpga_init_arria10_ocram_ecc() 129 pr_err("Unable to find socfpga-a10-ocram-ecc\n"); in socfpga_init_arria10_ocram_ecc() [all …]
|
/Linux-v6.1/Documentation/driver-api/ |
D | mtdnand.rst | 357 Hardware ECC support 363 The nand driver supports three different types of hardware ECC. 367 Hardware ECC generator providing 3 bytes ECC per 256 byte. 371 Hardware ECC generator providing 3 bytes ECC per 512 byte. 375 Hardware ECC generator providing 6 bytes ECC per 512 byte. 379 Hardware ECC generator providing 8 bytes ECC per 512 byte. 396 Transfer the ECC from the hardware to the buffer. If the option 402 In case of an ECC error this function is called for error detection 409 Hardware ECC with syndrome calculation 412 Many hardware ECC implementations provide Reed-Solomon codes and [all …]
|