]> git.sur5r.net Git - u-boot/blobdiff - drivers/misc/mxs_ocotp.c
cfi_flash: Fix logical continuations
[u-boot] / drivers / misc / mxs_ocotp.c
index 545d3ebf520ee2bd1934460ef7c6626ad95a0de0..a42164cccdfed3ed8500245080972c4258ca7309 100644 (file)
@@ -14,7 +14,7 @@
 
 #include <common.h>
 #include <fuse.h>
-#include <asm/errno.h>
+#include <linux/errno.h>
 #include <asm/io.h>
 #include <asm/arch/clock.h>
 #include <asm/arch/imx-regs.h>
@@ -152,6 +152,7 @@ static int mxs_ocotp_scale_hclk(bool enter, uint32_t *val)
                /* Return the original HCLK clock speed. */
                *val = readl(&clkctrl_regs->hw_clkctrl_hbus);
                *val &= CLKCTRL_HBUS_DIV_MASK;
+               *val >>= CLKCTRL_HBUS_DIV_OFFSET;
 
                /* Scale the HCLK to 454/19 = 23.9 MHz . */
                scale_val = (~19) << CLKCTRL_HBUS_DIV_OFFSET;
@@ -187,6 +188,8 @@ static int mxs_ocotp_write_fuse(uint32_t addr, uint32_t mask)
        uint32_t hclk_val, vddio_val;
        int ret;
 
+       mxs_ocotp_clear_error();
+
        /* Make sure the banks are closed for reading. */
        ret = mxs_ocotp_read_bank_open(0);
        if (ret) {
@@ -221,13 +224,17 @@ static int mxs_ocotp_write_fuse(uint32_t addr, uint32_t mask)
                goto fail;
        }
 
+       /* Check for errors */
+       if (readl(&ocotp_regs->hw_ocotp_ctrl) & OCOTP_CTRL_ERROR) {
+               puts("Failed writing fuses!\n");
+               ret = -EPERM;
+               goto fail;
+       }
+
 fail:
        mxs_ocotp_scale_vddio(0, &vddio_val);
-       ret = mxs_ocotp_scale_hclk(0, &hclk_val);
-       if (ret) {
+       if (mxs_ocotp_scale_hclk(0, &hclk_val))
                puts("Failed scaling up the HCLK!\n");
-               return ret;
-       }
 
        return ret;
 }