]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
misc: ele_api: Add V2X Get State API
authorYe Li <ye.li@nxp.com>
Fri, 26 Jun 2026 11:11:52 +0000 (19:11 +0800)
committerFabio Estevam <festevam@gmail.com>
Sat, 27 Jun 2026 02:02:46 +0000 (23:02 -0300)
Add V2X Get State API to return V2X states for debug purpose

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

index 04e7f20a2a60096184b12e73eea38fa6e742247e..8d779d6ae1b4cd0c9c3149a964169d8ab945b0e9 100644 (file)
@@ -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
index 8ee0a7733ca8e3d286cdec45292fb6e3488fb555..355fd86ed8c7c5e68fa721e2017563bc9a64d675 100644 (file)
@@ -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;