From: Peng Fan Date: Tue, 2 Jan 2018 07:51:20 +0000 (+0800) Subject: misc: mxc_ocotp: check fuse word before programming on i.MX7ULP X-Git-Tag: v2018.03-rc1~176^2~47 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=8df42bee0e728707ef4f7e7d2b12b015a4a95200;p=u-boot misc: mxc_ocotp: check fuse word before programming on i.MX7ULP On i.MX7ULP, the fuse words (except bank 0 and 1) only supports to write once, because they use ECC mode. Multiple writes may damage the ECC value and cause a wrong fuse value decoded when reading. This patch adds a checking before the fuse word programming, only can write when the word value is 0. Signed-off-by: Ye Li Signed-off-by: Peng Fan --- diff --git a/drivers/misc/mxc_ocotp.c b/drivers/misc/mxc_ocotp.c index 8986bb4ad0..18a2730909 100644 --- a/drivers/misc/mxc_ocotp.c +++ b/drivers/misc/mxc_ocotp.c @@ -342,6 +342,23 @@ int fuse_sense(u32 bank, u32 word, u32 *val) static int prepare_write(struct ocotp_regs **regs, u32 bank, u32 word, const char *caller) { +#ifdef CONFIG_MX7ULP + u32 val; + int ret; + + /* Only bank 0 and 1 are redundancy mode, others are ECC mode */ + if (bank != 0 && bank != 1) { + ret = fuse_sense(bank, word, &val); + if (ret) + return ret; + + if (val != 0) { + printf("mxc_ocotp: The word has been programmed, no more write\n"); + return -EPERM; + } + } +#endif + return prepare_access(regs, bank, word, true, caller); }