Browse Source

MLK-13776 ocotp: Add fuse word checking before programming it 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 <ye.li@nxp.com>
(cherry picked from commit e8447d649a)
imx_v2017.03_4.9.11_1.0.0_ga
Ye Li 4 years ago
parent
commit
aef40dc916
1 changed files with 19 additions and 1 deletions
  1. +19
    -1
      drivers/misc/mxc_ocotp.c

+ 19
- 1
drivers/misc/mxc_ocotp.c View File

@ -7,7 +7,8 @@
* which is based on Freescale's
* http://git.freescale.com/git/cgit.cgi/imx/uboot-imx.git/tree/drivers/misc/imx_otp.c?h=imx_v2009.08_1.1.0&id=9aa74e6,
* which is:
* Copyright (C) 2011 Freescale Semiconductor, Inc.
* Copyright (C) 2011-2016 Freescale Semiconductor, Inc.
* Copyright 2017 NXP
*
* SPDX-License-Identifier: GPL-2.0+
*/
@ -342,6 +343,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);
}


Loading…
Cancel
Save