[PATCH 11/13] misc: ele_api: Add Voltage change start and finish APIs
Peng Fan
peng.fan at nxp.com
Sun Jan 11 13:46:19 CET 2026
Hi Primoz,
> Subject: Re: [PATCH 11/13] misc: ele_api: Add Voltage change start
> and finish APIs
>
> Hi Peng,
>
> On 8. 01. 26 12:06, Peng Fan (OSS) wrote:
> > From: Ye Li <ye.li at nxp.com>
> >
> > On GDET enabled part, need to call voltage change start and finish
>
> Just a question, is this some special part or a regular i.MX93?
It is a special part. Figure 1. Part number nomenclature in [1],
there is a special fuse char. "Full featured with GDET enabled",
[1] https://www.nxp.com.cn/docs/en/data-sheet/IMX93AEC.pdf
Regards
Peng.
>
> How or where do you enable Glitch detection?
The detection is done by Secure Enclave, it is confidential.
Thanks,
Peng.
>
> Thanks,
> BR,
> Primoz
>
>
> > APIs when adjust the voltage more than 100mv. Otherwise GDET will
> be
> > triggered and system is reset
> >
> > Reviewed-by: Peng Fan <peng.fan at nxp.com>
> > Signed-off-by: Ye Li <ye.li at nxp.com>
> > Signed-off-by: Peng Fan <peng.fan at nxp.com>
> > ---
> > arch/arm/include/asm/mach-imx/ele_api.h | 4 +++
> > drivers/misc/imx_ele/ele_api.c | 50
> +++++++++++++++++++++++++++++++++
> > 2 files changed, 54 insertions(+)
> >
> > diff --git a/arch/arm/include/asm/mach-imx/ele_api.h
> > b/arch/arm/include/asm/mach-imx/ele_api.h
> > index 64b243dcaaa..4e1afc42bd8 100644
> > --- a/arch/arm/include/asm/mach-imx/ele_api.h
> > +++ b/arch/arm/include/asm/mach-imx/ele_api.h
> > @@ -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
> > diff --git a/drivers/misc/imx_ele/ele_api.c
> > b/drivers/misc/imx_ele/ele_api.c index 661f70cf870..e7aee0fcef1
> 100644
> > --- a/drivers/misc/imx_ele/ele_api.c
> > +++ b/drivers/misc/imx_ele/ele_api.c
> > @@ -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;
> > +}
> >
>
> --
> Primoz Fiser
> phone: +386-41-390-545
> email: primoz.fiser at norik.com
> --
> Norik systems d.o.o.
> Your embedded software partner
> Slovenia, EU
> phone: +386-41-540-545
> email: info at norik.com
More information about the U-Boot
mailing list