]> git.sur5r.net Git - u-boot/commitdiff
misc: mxc_ocotp: check fuse word before programming on i.MX7ULP
authorPeng Fan <peng.fan@nxp.com>
Tue, 2 Jan 2018 07:51:20 +0000 (15:51 +0800)
committerStefano Babic <sbabic@denx.de>
Fri, 12 Jan 2018 13:28:04 +0000 (14:28 +0100)
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 <ye.li@nxp.com>
Signed-off-by: Peng Fan <peng.fan@nxp.com>
drivers/misc/mxc_ocotp.c

index 8986bb4ad0798f57ce28c4d5e4b8f2f56ecb1c80..18a2730909f54ce5ec51d091b5bbe8a286ffad22 100644 (file)
@@ -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);
 }