bsec: update after MISC u-class update
authorPatrick Delaunay <patrick.delaunay@st.com>
Fri, 2 Aug 2019 11:08:02 +0000 (13:08 +0200)
committerPatrice Chotard <patrice.chotard@st.com>
Tue, 27 Aug 2019 09:19:23 +0000 (11:19 +0200)
Since the commit 8729b1ae2cbd ("misc: Update read() and
write() methods to return bytes xfered"); The misc bsec driver
need to be adapted to reflect the number of transferred bytes.

Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
arch/arm/mach-stm32mp/bsec.c
drivers/misc/stm32mp_fuse.c

index 80183668856e859afa3d097dd6b9a7861cb5c831..a77c706a1a0059c7f04ff420dd0a3393d51e5f64 100644 (file)
@@ -364,15 +364,13 @@ static int stm32mp_bsec_read(struct udevice *dev, int offset,
                offs -= STM32_BSEC_OTP_OFFSET;
                shadow = false;
        }
-       otp = offs / sizeof(u32);
 
-       if (otp < 0 || (otp + nb_otp - 1) > BSEC_OTP_MAX_VALUE) {
-               dev_err(dev, "wrong value for otp, max value : %i\n",
-                       BSEC_OTP_MAX_VALUE);
+       if (offs < 0 || (offs % 4) || (size % 4))
                return -EINVAL;
-       }
 
-       for (i = otp; i < (otp + nb_otp); i++) {
+       otp = offs / sizeof(u32);
+
+       for (i = otp; i < (otp + nb_otp) && i <= BSEC_OTP_MAX_VALUE; i++) {
                u32 *addr = &((u32 *)buf)[i - otp];
 
                if (shadow)
@@ -383,7 +381,10 @@ static int stm32mp_bsec_read(struct udevice *dev, int offset,
                if (ret)
                        break;
        }
-       return ret;
+       if (ret)
+               return ret;
+       else
+               return (i - otp) * 4;
 }
 
 static int stm32mp_bsec_write(struct udevice *dev, int offset,
@@ -400,15 +401,13 @@ static int stm32mp_bsec_write(struct udevice *dev, int offset,
                offs -= STM32_BSEC_OTP_OFFSET;
                shadow = false;
        }
-       otp = offs / sizeof(u32);
 
-       if (otp < 0 || (otp + nb_otp - 1) > BSEC_OTP_MAX_VALUE) {
-               dev_err(dev, "wrong value for otp, max value : %d\n",
-                       BSEC_OTP_MAX_VALUE);
+       if (offs < 0 || (offs % 4) || (size % 4))
                return -EINVAL;
-       }
 
-       for (i = otp; i < otp + nb_otp; i++) {
+       otp = offs / sizeof(u32);
+
+       for (i = otp; i < otp + nb_otp && i <= BSEC_OTP_MAX_VALUE; i++) {
                u32 *val = &((u32 *)buf)[i - otp];
 
                if (shadow)
@@ -418,7 +417,10 @@ static int stm32mp_bsec_write(struct udevice *dev, int offset,
                if (ret)
                        break;
        }
-       return ret;
+       if (ret)
+               return ret;
+       else
+               return (i - otp) * 4;
 }
 
 static const struct misc_ops stm32mp_bsec_ops = {
index 801d946b773bbbc6216b9bfa344d6cdc62688179..a1a27d148a9c825f70562280e01f251460ae6e32 100644 (file)
@@ -20,7 +20,7 @@
  */
 int fuse_read(u32 bank, u32 word, u32 *val)
 {
-       int ret = 0;
+       int ret;
        struct udevice *dev;
 
        switch (bank) {
@@ -32,9 +32,10 @@ int fuse_read(u32 bank, u32 word, u32 *val)
                        return ret;
                ret = misc_read(dev, word * 4 + STM32_BSEC_SHADOW_OFFSET,
                                val, 4);
-               if (ret < 0)
-                       return ret;
-               ret = 0;
+               if (ret != 4)
+                       ret = -EINVAL;
+               else
+                       ret = 0;
                break;
 
 #ifdef CONFIG_PMIC_STPMIC1
@@ -67,9 +68,10 @@ int fuse_prog(u32 bank, u32 word, u32 val)
                        return ret;
                ret = misc_write(dev, word * 4 + STM32_BSEC_OTP_OFFSET,
                                 &val, 4);
-               if (ret < 0)
-                       return ret;
-               ret = 0;
+               if (ret != 4)
+                       ret = -EINVAL;
+               else
+                       ret = 0;
                break;
 
 #ifdef CONFIG_PMIC_STPMIC1
@@ -100,9 +102,10 @@ int fuse_sense(u32 bank, u32 word, u32 *val)
                if (ret)
                        return ret;
                ret = misc_read(dev, word * 4 + STM32_BSEC_OTP_OFFSET, val, 4);
-               if (ret < 0)
-                       return ret;
-               ret = 0;
+               if (ret != 4)
+                       ret = -EINVAL;
+               else
+                       ret = 0;
                break;
 
 #ifdef CONFIG_PMIC_STPMIC1
@@ -135,9 +138,10 @@ int fuse_override(u32 bank, u32 word, u32 val)
                        return ret;
                ret = misc_write(dev, word * 4 + STM32_BSEC_SHADOW_OFFSET,
                                 &val, 4);
-               if (ret < 0)
-                       return ret;
-               ret = 0;
+               if (ret != 4)
+                       ret = -EINVAL;
+               else
+                       ret = 0;
                break;
 
 #ifdef CONFIG_PMIC_STPMIC1