mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-12-15 15:53:02 +00:00
1e94b46f73
This old patch was marked as deferred. Bring it back to life, to continue towards the removal of common.h Move this out of the common header and include it only where needed. Signed-off-by: Simon Glass <sjg@chromium.org>
66 lines
1.6 KiB
C
66 lines
1.6 KiB
C
/* SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause */
|
|
/*
|
|
* Copyright (C) 2019, STMicroelectronics - All Rights Reserved
|
|
*/
|
|
|
|
#ifndef __STM32MP1_SMC_H__
|
|
#define __STM32MP1_SMC_H__
|
|
|
|
#include <linux/arm-smccc.h>
|
|
#include <linux/printk.h>
|
|
|
|
/*
|
|
* SMC function IDs for STM32 Service queries
|
|
* STM32 SMC services use the space between 0x82000000 and 0x8200FFFF
|
|
* like this is defined in SMC calling Convention by ARM
|
|
* for SiP (silicon Partner)
|
|
* http://infocenter.arm.com/help/topic/com.arm.doc.den0028a/index.html
|
|
*/
|
|
#define STM32_SMC_VERSION 0x82000000
|
|
|
|
/* Secure Service access from Non-secure */
|
|
#define STM32_SMC_BSEC 0x82001003
|
|
|
|
/* Service for BSEC */
|
|
#define STM32_SMC_READ_SHADOW 0x01
|
|
#define STM32_SMC_PROG_OTP 0x02
|
|
#define STM32_SMC_WRITE_SHADOW 0x03
|
|
#define STM32_SMC_READ_OTP 0x04
|
|
#define STM32_SMC_READ_ALL 0x05
|
|
#define STM32_SMC_WRITE_ALL 0x06
|
|
#define STM32_SMC_WRLOCK_OTP 0x07
|
|
|
|
/* SMC error codes */
|
|
#define STM32_SMC_OK 0x0
|
|
#define STM32_SMC_NOT_SUPPORTED -1
|
|
#define STM32_SMC_FAILED -2
|
|
#define STM32_SMC_INVALID_PARAMS -3
|
|
|
|
#define stm32_smc_exec(svc, op, data1, data2) \
|
|
stm32_smc(svc, op, data1, data2, NULL)
|
|
|
|
#ifdef CONFIG_ARM_SMCCC
|
|
static inline u32 stm32_smc(u32 svc, u8 op, u32 data1, u32 data2, u32 *result)
|
|
{
|
|
struct arm_smccc_res res;
|
|
|
|
arm_smccc_smc(svc, op, data1, data2, 0, 0, 0, 0, &res);
|
|
|
|
if (res.a0) {
|
|
pr_err("%s: Failed to exec svc=%x op=%x in secure mode (err = %ld)\n",
|
|
__func__, svc, op, res.a0);
|
|
return -EINVAL;
|
|
}
|
|
if (result)
|
|
*result = (u32)res.a1;
|
|
|
|
return 0;
|
|
}
|
|
#else
|
|
static inline u32 stm32_smc(u32 svc, u8 op, u32 data1, u32 data2, u32 *result)
|
|
{
|
|
return 0;
|
|
}
|
|
#endif
|
|
|
|
#endif /* __STM32MP1_SMC_H__ */
|