Lines Matching +full:clk +full:- +full:out +full:- +full:strength
1 // SPDX-License-Identifier: GPL-2.0
10 #include <linux/clk.h>
68 writel(readl(bch->base + BCH_BHINT), bch->base + BCH_BHINT); in jz4780_bch_reset()
71 reg = params->size << BCH_BHCNT_BLOCKSIZE_SHIFT; in jz4780_bch_reset()
72 reg |= params->bytes << BCH_BHCNT_PARITYSIZE_SHIFT; in jz4780_bch_reset()
73 writel(reg, bch->base + BCH_BHCNT); in jz4780_bch_reset()
77 reg |= params->strength << BCH_BHCR_BSEL_SHIFT; in jz4780_bch_reset()
80 writel(reg, bch->base + BCH_BHCR); in jz4780_bch_reset()
85 writel(readl(bch->base + BCH_BHINT), bch->base + BCH_BHINT); in jz4780_bch_disable()
86 writel(BCH_BHCR_BCHE, bch->base + BCH_BHCCR); in jz4780_bch_disable()
98 while (size32--) in jz4780_bch_write_data()
99 writel(*src32++, bch->base + BCH_BHDR); in jz4780_bch_write_data()
102 while (size8--) in jz4780_bch_write_data()
103 writeb(*src8++, bch->base + BCH_BHDR); in jz4780_bch_write_data()
116 while (size32--) { in jz4780_bch_read_parity()
117 *dest32++ = readl(bch->base + BCH_BHPAR0 + offset); in jz4780_bch_read_parity()
122 val = readl(bch->base + BCH_BHPAR0 + offset); in jz4780_bch_read_parity()
148 ret = readl_poll_timeout(bch->base + BCH_BHINT, reg, in jz4780_bch_wait_complete()
156 writel(reg, bch->base + BCH_BHINT); in jz4780_bch_wait_complete()
166 mutex_lock(&bch->lock); in jz4780_calculate()
169 jz4780_bch_write_data(bch, buf, params->size); in jz4780_calculate()
172 jz4780_bch_read_parity(bch, ecc_code, params->bytes); in jz4780_calculate()
174 dev_err(bch->dev, "timed out while calculating ECC\n"); in jz4780_calculate()
175 ret = -ETIMEDOUT; in jz4780_calculate()
179 mutex_unlock(&bch->lock); in jz4780_calculate()
190 mutex_lock(&bch->lock); in jz4780_correct()
193 jz4780_bch_write_data(bch, buf, params->size); in jz4780_correct()
194 jz4780_bch_write_data(bch, ecc_code, params->bytes); in jz4780_correct()
197 dev_err(bch->dev, "timed out while correcting data\n"); in jz4780_correct()
198 ret = -ETIMEDOUT; in jz4780_correct()
199 goto out; in jz4780_correct()
203 dev_warn(bch->dev, "uncorrectable ECC error\n"); in jz4780_correct()
204 ret = -EBADMSG; in jz4780_correct()
205 goto out; in jz4780_correct()
214 reg = readl(bch->base + BCH_BHERR0 + (i * 4)); in jz4780_correct()
226 out: in jz4780_correct()
228 mutex_unlock(&bch->lock); in jz4780_correct()
242 clk_set_rate(bch->clk, BCH_CLK_RATE); in jz4780_bch_probe()
254 { .compatible = "ingenic,jz4780-bch", .data = &jz4780_bch_ops },
262 .name = "jz4780-bch",
268 MODULE_AUTHOR("Alex Smith <alex@alex-smith.me.uk>");