[PATCH 1/2] misc: ele_api: Add V2X Get State API

ye.li at oss.nxp.com ye.li at oss.nxp.com
Fri Jun 26 13:11:52 CEST 2026


From: Ye Li <ye.li at nxp.com>

Add V2X Get State API to return V2X states for debug purpose

Signed-off-by: Ye Li <ye.li at nxp.com>
---
 arch/arm/include/asm/mach-imx/ele_api.h |  8 +++++++
 drivers/misc/imx_ele/ele_api.c          | 32 +++++++++++++++++++++++++
 2 files changed, 40 insertions(+)

diff --git a/arch/arm/include/asm/mach-imx/ele_api.h b/arch/arm/include/asm/mach-imx/ele_api.h
index 04e7f20a2a6..8d779d6ae1b 100644
--- a/arch/arm/include/asm/mach-imx/ele_api.h
+++ b/arch/arm/include/asm/mach-imx/ele_api.h
@@ -30,6 +30,7 @@
 #define ELE_START_RNG (0xA3)
 #define ELE_CMD_DERIVE_KEY (0xA9)
 #define ELE_GENERATE_DEK_BLOB (0xAF)
+#define ELE_V2X_GET_STATE_REQ (0xB2)
 #define ELE_ENABLE_PATCH_REQ (0xC3)
 #define ELE_RELEASE_RDC_REQ (0xC4)
 #define ELE_GET_FW_STATUS_REQ (0xC5)
@@ -141,6 +142,12 @@ struct ele_get_info_data {
 	u32 reserved[8];
 };
 
+struct v2x_get_state {
+	u8 v2x_state;
+	u8 v2x_power_state;
+	u32 v2x_err_code;
+};
+
 int ele_release_rdc(u8 core_id, u8 xrdc, u32 *response);
 int ele_auth_oem_ctnr(ulong ctnr_addr, u32 *response);
 int ele_release_container(u32 *response);
@@ -166,4 +173,5 @@ int ele_read_shadow_fuse(u32 fuse_id, u32 *fuse_val, u32 *response);
 int ele_set_gmid(u32 *response);
 int ele_volt_change_start_req(void);
 int ele_volt_change_finish_req(void);
+int ele_v2x_get_state(struct v2x_get_state *state, u32 *response);
 #endif
diff --git a/drivers/misc/imx_ele/ele_api.c b/drivers/misc/imx_ele/ele_api.c
index 8ee0a7733ca..355fd86ed8c 100644
--- a/drivers/misc/imx_ele/ele_api.c
+++ b/drivers/misc/imx_ele/ele_api.c
@@ -795,6 +795,38 @@ int ele_generate_dek_blob(u32 key_id, u32 src_paddr, u32 dst_paddr, u32 max_outp
 	return ret;
 }
 
+int ele_v2x_get_state(struct v2x_get_state *state, u32 *response)
+{
+	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_V2X_GET_STATE_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]);
+
+	if (response)
+		*response = msg.data[0];
+
+	state->v2x_state = msg.data[1] & 0xFF;
+	state->v2x_power_state = (msg.data[1] & 0xFF00) >> 8;
+	state->v2x_err_code = msg.data[2];
+
+	return ret;
+}
+
 int ele_volt_change_start_req(void)
 {
 	struct udevice *dev = gd->arch.ele_dev;
-- 
2.34.1



More information about the U-Boot mailing list