efi_loader: correctly render MAC address device path nodes
[oweals/u-boot.git] / drivers / misc / stm32mp_fuse.c
index 8dc246b0dbe8292fc2991634f61d1a1203407252..0eed3459734b0a0711eb2f17f975b871447df80b 100644 (file)
@@ -5,6 +5,7 @@
 
 #include <common.h>
 #include <command.h>
+#include <fuse.h>
 #include <misc.h>
 #include <errno.h>
 #include <dm/device.h>
@@ -19,7 +20,7 @@
  */
 int fuse_read(u32 bank, u32 word, u32 *val)
 {
-       int ret = 0;
+       int ret;
        struct udevice *dev;
 
        switch (bank) {
@@ -31,15 +32,25 @@ 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
        case STM32MP_NVM_BANK:
+               ret = uclass_get_device_by_driver(UCLASS_MISC,
+                                                 DM_GET_DRIVER(stpmic1_nvm),
+                                                 &dev);
+               if (ret)
+                       return ret;
                *val = 0;
-               ret = stpmic1_shadow_read_byte(word, (u8 *)val);
+               ret = misc_read(dev, -word, val, 1);
+               if (ret != 1)
+                       ret = -EINVAL;
+               else
+                       ret = 0;
                break;
 #endif /* CONFIG_PMIC_STPMIC1 */
 
@@ -66,14 +77,24 @@ 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
        case STM32MP_NVM_BANK:
-               ret = stpmic1_nvm_write_byte(word, (u8 *)&val);
+               ret = uclass_get_device_by_driver(UCLASS_MISC,
+                                                 DM_GET_DRIVER(stpmic1_nvm),
+                                                 &dev);
+               if (ret)
+                       return ret;
+               ret = misc_write(dev, word, &val, 1);
+               if (ret != 1)
+                       ret = -EINVAL;
+               else
+                       ret = 0;
                break;
 #endif /* CONFIG_PMIC_STPMIC1 */
 
@@ -99,15 +120,25 @@ 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
        case STM32MP_NVM_BANK:
+               ret = uclass_get_device_by_driver(UCLASS_MISC,
+                                                 DM_GET_DRIVER(stpmic1_nvm),
+                                                 &dev);
+               if (ret)
+                       return ret;
                *val = 0;
-               ret = stpmic1_nvm_read_byte(word, (u8 *)val);
+               ret = misc_read(dev, word, val, 1);
+               if (ret != 1)
+                       ret = -EINVAL;
+               else
+                       ret = 0;
                break;
 #endif /* CONFIG_PMIC_STPMIC1 */
 
@@ -134,14 +165,24 @@ 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
        case STM32MP_NVM_BANK:
-               ret = stpmic1_shadow_write_byte(word, (u8 *)&val);
+               ret = uclass_get_device_by_driver(UCLASS_MISC,
+                                                 DM_GET_DRIVER(stpmic1_nvm),
+                                                 &dev);
+               if (ret)
+                       return ret;
+               ret = misc_write(dev, -word, &val, 1);
+               if (ret != 1)
+                       ret = -EINVAL;
+               else
+                       ret = 0;
                break;
 #endif /* CONFIG_PMIC_STPMIC1 */