[U-Boot] [PATCH v2 1/2] mach-imx: Adding new argument for SIP call interface

Peng Fan peng.fan at nxp.com
Mon Oct 28 01:27:29 UTC 2019


> Subject: [PATCH v2 1/2] mach-imx: Adding new argument for SIP call interface
> 
> From: Ye Li <ye.li at nxp.com>
> 
> Need to pass total 5 arguments for SIP HAB call on i.MX8MQ, so update the
> interface to add new argument.
> 
> Signed-off-by: Ye Li <ye.li at nxp.com>
> [agust: fixed imx8m-power-domain build]
> Signed-off-by: Anatolij Gustschin <agust at denx.de>
> Reviewed-by: Patrick Wildt <patrick at blueri.se>
> ---
> Changes in v2:
>  - fix build breakage in imx8m-power-domain.c
> 
>  arch/arm/include/asm/mach-imx/sys_proto.h | 3 ++-
>  arch/arm/mach-imx/imx_bootaux.c           | 4 ++--
>  arch/arm/mach-imx/sip.c                   | 4 +++-
>  drivers/misc/imx8/fuse.c                  | 2 +-
>  drivers/power/domain/imx8m-power-domain.c | 6 ++++--
>  5 files changed, 12 insertions(+), 7 deletions(-)
> 
> diff --git a/arch/arm/include/asm/mach-imx/sys_proto.h
> b/arch/arm/include/asm/mach-imx/sys_proto.h
> index aa66fdc88f..139a7638c1 100644
> --- a/arch/arm/include/asm/mach-imx/sys_proto.h
> +++ b/arch/arm/include/asm/mach-imx/sys_proto.h
> @@ -143,7 +143,8 @@ int mxs_wait_mask_set(struct mxs_register_32 *reg,
> u32 mask, u32 timeout);  int mxs_wait_mask_clr(struct mxs_register_32
> *reg, u32 mask, u32 timeout);
> 
>  unsigned long call_imx_sip(unsigned long id, unsigned long reg0,
> -			   unsigned long reg1, unsigned long reg2);
> +			   unsigned long reg1, unsigned long reg2,
> +			   unsigned long reg3);
>  unsigned long call_imx_sip_ret2(unsigned long id, unsigned long reg0,
>  				unsigned long *reg1, unsigned long reg2,
>  				unsigned long reg3);
> diff --git a/arch/arm/mach-imx/imx_bootaux.c
> b/arch/arm/mach-imx/imx_bootaux.c index 18d7e6819c..3d9422d5a2
> 100644
> --- a/arch/arm/mach-imx/imx_bootaux.c
> +++ b/arch/arm/mach-imx/imx_bootaux.c
> @@ -26,7 +26,7 @@ int arch_auxiliary_core_up(u32 core_id, ulong
> boot_private_data)
> 
>  	/* Enable M4 */
>  #ifdef CONFIG_IMX8M
> -	call_imx_sip(IMX_SIP_SRC, IMX_SIP_SRC_M4_START, 0, 0);
> +	call_imx_sip(IMX_SIP_SRC, IMX_SIP_SRC_M4_START, 0, 0, 0);
>  #else
>  	clrsetbits_le32(SRC_BASE_ADDR + SRC_M4_REG_OFFSET,
>  			SRC_M4C_NON_SCLR_RST_MASK, SRC_M4_ENABLE_MASK);
> @@ -38,7 +38,7 @@ int arch_auxiliary_core_up(u32 core_id, ulong
> boot_private_data)  int arch_auxiliary_core_check_up(u32 core_id)
> {  #ifdef CONFIG_IMX8M
> -	return call_imx_sip(IMX_SIP_SRC, IMX_SIP_SRC_M4_STARTED, 0, 0);
> +	return call_imx_sip(IMX_SIP_SRC, IMX_SIP_SRC_M4_STARTED, 0, 0, 0);
>  #else
>  	unsigned int val;
> 
> diff --git a/arch/arm/mach-imx/sip.c b/arch/arm/mach-imx/sip.c index
> 968e7cf309..fca520c671 100644
> --- a/arch/arm/mach-imx/sip.c
> +++ b/arch/arm/mach-imx/sip.c
> @@ -7,7 +7,8 @@
>  #include <asm/arch/sys_proto.h>
> 
>  unsigned long call_imx_sip(unsigned long id, unsigned long reg0,
> -			   unsigned long reg1, unsigned long reg2)
> +			   unsigned long reg1, unsigned long reg2,
> +			   unsigned long reg3)
>  {
>  	struct pt_regs regs;
> 
> @@ -15,6 +16,7 @@ unsigned long call_imx_sip(unsigned long id, unsigned
> long reg0,
>  	regs.regs[1] = reg0;
>  	regs.regs[2] = reg1;
>  	regs.regs[3] = reg2;
> +	regs.regs[4] = reg3;
> 
>  	smc_call(&regs);
> 
> diff --git a/drivers/misc/imx8/fuse.c b/drivers/misc/imx8/fuse.c index
> 2f2fad2c17..1309215d4d 100644
> --- a/drivers/misc/imx8/fuse.c
> +++ b/drivers/misc/imx8/fuse.c
> @@ -74,7 +74,7 @@ int fuse_prog(u32 bank, u32 word, u32 val)
>  	}
> 
>  	return call_imx_sip(FSL_SIP_OTP_WRITE, (unsigned long)word,
> -			    (unsigned long)val, 0);
> +			    (unsigned long)val, 0, 0);
>  }
> 
>  int fuse_override(u32 bank, u32 word, u32 val) diff --git
> a/drivers/power/domain/imx8m-power-domain.c
> b/drivers/power/domain/imx8m-power-domain.c
> index 164fb3d31d..40ece9ee3f 100644
> --- a/drivers/power/domain/imx8m-power-domain.c
> +++ b/drivers/power/domain/imx8m-power-domain.c
> @@ -37,7 +37,8 @@ static int imx8m_power_domain_on(struct
> power_domain *power_domain)
>  	if (pdata->has_pd)
>  		power_domain_on(&pdata->pd);
> 
> -	call_imx_sip(IMX_SIP_GPC, IMX_SIP_GPC_PM_DOMAIN,
> pdata->resource_id, 1);
> +	call_imx_sip(IMX_SIP_GPC, IMX_SIP_GPC_PM_DOMAIN,
> +		     pdata->resource_id, 1, 0);
> 
>  	return 0;
>  }
> @@ -51,7 +52,8 @@ static int imx8m_power_domain_off(struct
> power_domain *power_domain)
>  	if (pdata->resource_id < 0)
>  		return -EINVAL;
> 
> -	call_imx_sip(IMX_SIP_GPC, IMX_SIP_GPC_PM_DOMAIN,
> pdata->resource_id, 0);
> +	call_imx_sip(IMX_SIP_GPC, IMX_SIP_GPC_PM_DOMAIN,
> +		     pdata->resource_id, 0, 0);
> 
>  	if (pdata->has_pd)
>  		power_domain_off(&pdata->pd);


Reviewed-by: Peng Fan <peng.fan at nxp.com>

> --
> 2.17.1



More information about the U-Boot mailing list