aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mtd/devices/docg3.c
diff options
context:
space:
mode:
authorMiquel Raynal <miquel.raynal@bootlin.com>2020-05-19 09:45:43 +0200
committerMiquel Raynal <miquel.raynal@bootlin.com>2020-05-24 20:48:11 +0200
commit1759279ad138cb0a903224a89f4bf40f69c417e8 (patch)
treecff67a52837088ec35b5c787c182eeb810d3a04f /drivers/mtd/devices/docg3.c
parentlib/bch: Rework a little bit the exported function names (diff)
downloadlinux-dev-1759279ad138cb0a903224a89f4bf40f69c417e8.tar.xz
linux-dev-1759279ad138cb0a903224a89f4bf40f69c417e8.zip
lib/bch: Allow easy bit swapping
It seems that several hardware ECC engine use a swapped representation of bytes compared to software. This might having to do with how the ECC engine is wired to the NAND controller or the order the bits are passed to the hardware BCH logic. This means that when the software BCH engine is working in conjunction with data generated with hardware, sometimes we might need to swap the bits inside bytes, eg: 0x0A = b0000_1010 -> b0101_0000 = 0x50 Make it possible by adding a boolean to the BCH initialization routine. Regarding the implementation itself, this is a rather simple approach that can probably be enhanced in the future by preparing the ->a_{mod,pow}_tab tables with the swapping in mind. Suggested-by: Boris Brezillon <boris.brezillon@collabora.com> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com> Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com> Link: https://lore.kernel.org/linux-mtd/20200519074549.23673-3-miquel.raynal@bootlin.com
Diffstat (limited to '')
-rw-r--r--drivers/mtd/devices/docg3.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/mtd/devices/docg3.c b/drivers/mtd/devices/docg3.c
index 799df8d03357..a030792115bc 100644
--- a/drivers/mtd/devices/docg3.c
+++ b/drivers/mtd/devices/docg3.c
@@ -1985,7 +1985,7 @@ static int __init docg3_probe(struct platform_device *pdev)
cascade->base = base;
mutex_init(&cascade->lock);
cascade->bch = bch_init(DOC_ECC_BCH_M, DOC_ECC_BCH_T,
- DOC_ECC_BCH_PRIMPOLY);
+ DOC_ECC_BCH_PRIMPOLY, false);
if (!cascade->bch)
return ret;