]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
misc: ele_api: Add Voltage change start and finish APIs
authorYe Li <ye.li@nxp.com>
Thu, 8 Jan 2026 11:06:56 +0000 (19:06 +0800)
committerFabio Estevam <festevam@nabladev.com>
Sat, 17 Jan 2026 18:00:23 +0000 (15:00 -0300)
On GDET enabled part, need to call voltage change start and finish
APIs when adjust the voltage more than 100mv. Otherwise GDET will be
triggered and system is reset

Reviewed-by: Peng Fan <peng.fan@nxp.com>
Signed-off-by: Ye Li <ye.li@nxp.com>
Signed-off-by: Peng Fan <peng.fan@nxp.com>
arch/arm/include/asm/mach-imx/ele_api.h
drivers/misc/imx_ele/ele_api.c

index 64b243dcaaad2d8db0b3da4ff848d5109b730fe6..4e1afc42bd86bccac4fda0b0958549136a0518fc 100644 (file)
@@ -14,6 +14,8 @@
 #define ELE_PING_REQ (0x01)
 #define ELE_FW_AUTH_REQ (0x02)
 #define ELE_RESTART_RST_TIMER_REQ (0x04)
+#define ELE_VOLT_CHANGE_START_REQ (0x12)
+#define ELE_VOLT_CHANGE_FINISH_REQ (0x13)
 #define ELE_DUMP_DEBUG_BUFFER_REQ (0x21)
 #define ELE_OEM_CNTN_AUTH_REQ (0x87)
 #define ELE_VERIFY_IMAGE_REQ (0x88)
@@ -160,4 +162,6 @@ int ele_return_lifecycle_update(ulong signed_msg_blk, u32 *response);
 int ele_start_rng(void);
 int ele_write_shadow_fuse(u32 fuse_id, u32 fuse_val, u32 *response);
 int ele_read_shadow_fuse(u32 fuse_id, u32 *fuse_val, u32 *response);
+int ele_volt_change_start_req(void);
+int ele_volt_change_finish_req(void);
 #endif
index 661f70cf870f30623c04e71ab865b9db3d4636be..e7aee0fcef1fd44f507975f119111fb59085ca5d 100644 (file)
@@ -794,3 +794,53 @@ int ele_generate_dek_blob(u32 key_id, u32 src_paddr, u32 dst_paddr, u32 max_outp
 
        return ret;
 }
+
+int ele_volt_change_start_req(void)
+{
+       struct udevice *dev = gd->arch.ele_dev;
+       int size = sizeof(struct ele_msg);
+       struct ele_msg msg = {};
+       int ret;
+
+       if (!dev) {
+               printf("ele dev is not initialized\n");
+               return -ENODEV;
+       }
+
+       msg.version = ELE_VERSION;
+       msg.tag = ELE_CMD_TAG;
+       msg.size = 1;
+       msg.command = ELE_VOLT_CHANGE_START_REQ;
+
+       ret = misc_call(dev, false, &msg, size, &msg, size);
+       if (ret)
+               printf("Error: %s: ret %d, response 0x%x\n",
+                      __func__, ret, msg.data[0]);
+
+       return ret;
+}
+
+int ele_volt_change_finish_req(void)
+{
+       struct udevice *dev = gd->arch.ele_dev;
+       int size = sizeof(struct ele_msg);
+       struct ele_msg msg = {};
+       int ret;
+
+       if (!dev) {
+               printf("ele dev is not initialized\n");
+               return -ENODEV;
+       }
+
+       msg.version = ELE_VERSION;
+       msg.tag = ELE_CMD_TAG;
+       msg.size = 1;
+       msg.command = ELE_VOLT_CHANGE_FINISH_REQ;
+
+       ret = misc_call(dev, false, &msg, size, &msg, size);
+       if (ret)
+               printf("Error: %s: ret %d, response 0x%x\n",
+                      __func__, ret, msg.data[0]);
+
+       return ret;
+}