[PATCH 4/6] imx8: fuse: use arm_smccc_smc

Peng Fan peng.fan at nxp.com
Mon May 11 11:48:35 CEST 2020


Use arm_smccc_smc to replace call_imx_sip

Signed-off-by: Peng Fan <peng.fan at nxp.com>
---
 drivers/misc/imx8/fuse.c | 19 ++++++++++++-------
 1 file changed, 12 insertions(+), 7 deletions(-)

diff --git a/drivers/misc/imx8/fuse.c b/drivers/misc/imx8/fuse.c
index 4d7f2f524d..be18122937 100644
--- a/drivers/misc/imx8/fuse.c
+++ b/drivers/misc/imx8/fuse.c
@@ -9,6 +9,7 @@
 #include <fuse.h>
 #include <asm/arch/sci/sci.h>
 #include <asm/arch/sys_proto.h>
+#include <linux/arm-smccc.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -36,22 +37,24 @@ int fuse_read(u32 bank, u32 word, u32 *val)
 
 int fuse_sense(u32 bank, u32 word, u32 *val)
 {
-	unsigned long ret = 0, value = 0;
+	struct arm_smccc_res res;
 
 	if (bank != 0) {
 		printf("Invalid bank argument, ONLY bank 0 is supported\n");
 		return -EINVAL;
 	}
 
-	ret = call_imx_sip_ret2(FSL_SIP_OTP_READ, (unsigned long)word, &value,
-				0, 0);
-	*val = (u32)value;
+	arm_smccc_smc(FSL_SIP_OTP_READ, (unsigned long)word, 0, 0,
+		      0, 0, 0, 0, &res);
+	*val = (u32)res.a1;
 
-	return ret;
+	return res.a0;
 }
 
 int fuse_prog(u32 bank, u32 word, u32 val)
 {
+	struct arm_smccc_res res;
+
 	if (bank != 0) {
 		printf("Invalid bank argument, ONLY bank 0 is supported\n");
 		return -EINVAL;
@@ -78,8 +81,10 @@ int fuse_prog(u32 bank, u32 word, u32 val)
 		}
 	}
 
-	return call_imx_sip(FSL_SIP_OTP_WRITE, (unsigned long)word,
-			    (unsigned long)val, 0, 0);
+	arm_smccc_smc(FSL_SIP_OTP_WRITE, (unsigned long)word,
+		      (unsigned long)val, 0, 0, 0, 0, 0, &res);
+
+	return res.a0;
 }
 
 int fuse_override(u32 bank, u32 word, u32 val)
-- 
2.16.4



More information about the U-Boot mailing list