Lines Matching defs:bch

62 static void jz4780_bch_reset(struct ingenic_ecc *bch,
68 writel(readl(bch->base + BCH_BHINT), bch->base + BCH_BHINT);
73 writel(reg, bch->base + BCH_BHCNT);
80 writel(reg, bch->base + BCH_BHCR);
83 static void jz4780_bch_disable(struct ingenic_ecc *bch)
85 writel(readl(bch->base + BCH_BHINT), bch->base + BCH_BHINT);
86 writel(BCH_BHCR_BCHE, bch->base + BCH_BHCCR);
89 static void jz4780_bch_write_data(struct ingenic_ecc *bch, const void *buf,
99 writel(*src32++, bch->base + BCH_BHDR);
103 writeb(*src8++, bch->base + BCH_BHDR);
106 static void jz4780_bch_read_parity(struct ingenic_ecc *bch, void *buf,
117 *dest32++ = readl(bch->base + BCH_BHPAR0 + offset);
122 val = readl(bch->base + BCH_BHPAR0 + offset);
136 static bool jz4780_bch_wait_complete(struct ingenic_ecc *bch, unsigned int irq,
148 ret = readl_poll_timeout(bch->base + BCH_BHINT, reg,
156 writel(reg, bch->base + BCH_BHINT);
160 static int jz4780_calculate(struct ingenic_ecc *bch,
166 mutex_lock(&bch->lock);
168 jz4780_bch_reset(bch, params, true);
169 jz4780_bch_write_data(bch, buf, params->size);
171 if (jz4780_bch_wait_complete(bch, BCH_BHINT_ENCF, NULL)) {
172 jz4780_bch_read_parity(bch, ecc_code, params->bytes);
174 dev_err(bch->dev, "timed out while calculating ECC\n");
178 jz4780_bch_disable(bch);
179 mutex_unlock(&bch->lock);
183 static int jz4780_correct(struct ingenic_ecc *bch,
190 mutex_lock(&bch->lock);
192 jz4780_bch_reset(bch, params, false);
193 jz4780_bch_write_data(bch, buf, params->size);
194 jz4780_bch_write_data(bch, ecc_code, params->bytes);
196 if (!jz4780_bch_wait_complete(bch, BCH_BHINT_DECF, &reg)) {
197 dev_err(bch->dev, "timed out while correcting data\n");
203 dev_warn(bch->dev, "uncorrectable ECC error\n");
214 reg = readl(bch->base + BCH_BHERR0 + (i * 4));
227 jz4780_bch_disable(bch);
228 mutex_unlock(&bch->lock);
234 struct ingenic_ecc *bch;
241 bch = platform_get_drvdata(pdev);
242 clk_set_rate(bch->clk, BCH_CLK_RATE);
254 { .compatible = "ingenic,jz4780-bch", .data = &jz4780_bch_ops },
262 .name = "jz4780-bch",