stpmic1: add NVM update support in fuse command
[oweals/u-boot.git] / drivers / misc / stm32mp_fuse.c
index 33943a231b1008e935f741e7de9e35cd88d03f4f..8dc246b0dbe8292fc2991634f61d1a1203407252 100644 (file)
@@ -9,8 +9,10 @@
 #include <errno.h>
 #include <dm/device.h>
 #include <dm/uclass.h>
+#include <power/stpmic1.h>
 
 #define STM32MP_OTP_BANK       0
+#define STM32MP_NVM_BANK       1
 
 /*
  * The 'fuse' command API
@@ -34,6 +36,13 @@ int fuse_read(u32 bank, u32 word, u32 *val)
                ret = 0;
                break;
 
+#ifdef CONFIG_PMIC_STPMIC1
+       case STM32MP_NVM_BANK:
+               *val = 0;
+               ret = stpmic1_shadow_read_byte(word, (u8 *)val);
+               break;
+#endif /* CONFIG_PMIC_STPMIC1 */
+
        default:
                printf("stm32mp %s: wrong value for bank %i\n", __func__, bank);
                ret = -EINVAL;
@@ -62,6 +71,12 @@ int fuse_prog(u32 bank, u32 word, u32 val)
                ret = 0;
                break;
 
+#ifdef CONFIG_PMIC_STPMIC1
+       case STM32MP_NVM_BANK:
+               ret = stpmic1_nvm_write_byte(word, (u8 *)&val);
+               break;
+#endif /* CONFIG_PMIC_STPMIC1 */
+
        default:
                printf("stm32mp %s: wrong value for bank %i\n", __func__, bank);
                ret = -EINVAL;
@@ -89,6 +104,13 @@ int fuse_sense(u32 bank, u32 word, u32 *val)
                ret = 0;
                break;
 
+#ifdef CONFIG_PMIC_STPMIC1
+       case STM32MP_NVM_BANK:
+               *val = 0;
+               ret = stpmic1_nvm_read_byte(word, (u8 *)val);
+               break;
+#endif /* CONFIG_PMIC_STPMIC1 */
+
        default:
                printf("stm32mp %s: wrong value for bank %i\n", __func__, bank);
                ret = -EINVAL;
@@ -117,6 +139,12 @@ int fuse_override(u32 bank, u32 word, u32 val)
                ret = 0;
                break;
 
+#ifdef CONFIG_PMIC_STPMIC1
+       case STM32MP_NVM_BANK:
+               ret = stpmic1_shadow_write_byte(word, (u8 *)&val);
+               break;
+#endif /* CONFIG_PMIC_STPMIC1 */
+
        default:
                printf("stm32mp %s: wrong value for bank %i\n",
                       __func__, bank);