blob: e2af3f76b859b00c3eaaf3695093fd6d9afd89ca [file] [log] [blame]
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (c) 2019 Amlogic, Inc. All rights reserved.
*/
#include <common.h>
#include <linux/arm-smccc.h>
#include "tee_aml.h"
#include "optee_smc.h"
#define TEE_SMC_FUNCID_PROTECT_TVP_MEM 0xE020
#define TEE_SMC_PROTECT_TVP_MEM \
OPTEE_SMC_FAST_CALL_VAL(TEE_SMC_FUNCID_PROTECT_TVP_MEM)
#define TEE_SMC_FUNCID_UNPROTECT_TVP_MEM 0xE021
#define TEE_SMC_UNPROTECT_TVP_MEM \
OPTEE_SMC_FAST_CALL_VAL(TEE_SMC_FUNCID_UNPROTECT_TVP_MEM)
#define TEE_SMC_FUNCID_PROTECT_MEM_BY_TYPE 0xE023
#define TEE_SMC_PROTECT_MEM_BY_TYPE \
OPTEE_SMC_FAST_CALL_VAL(TEE_SMC_FUNCID_PROTECT_MEM_BY_TYPE)
#define TEE_SMC_FUNCID_UNPROTECT_MEM 0xE024
#define TEE_SMC_UNPROTECT_MEM \
OPTEE_SMC_FAST_CALL_VAL(TEE_SMC_FUNCID_UNPROTECT_MEM)
u32 tee_protect_tvp_mem(u32 start, u32 size, u32 *handle)
{
struct arm_smccc_res res;
if (!handle)
return 0xFFFF0006;
arm_smccc_smc(TEE_SMC_PROTECT_TVP_MEM,
start, size, 0, 0, 0, 0, 0, &res);
*handle = res.a1;
return res.a0;
}
void tee_unprotect_tvp_mem(u32 handle)
{
struct arm_smccc_res res;
arm_smccc_smc(TEE_SMC_UNPROTECT_TVP_MEM,
handle, 0, 0, 0, 0, 0, 0, &res);
}
u32 tee_protect_mem_by_type(u32 type, u32 start, u32 size, u32 *handle)
{
struct arm_smccc_res res;
if (!handle)
return 0xFFFF0006;
arm_smccc_smc(TEE_SMC_PROTECT_MEM_BY_TYPE,
type, start, size, 0, 0, 0, 0, &res);
*handle = res.a1;
return res.a0;
}
u32 tee_protect_mem(u32 type, u32 level,
u32 start, u32 size, u32 *handle)
{
struct arm_smccc_res res;
if (!handle)
return 0xFFFF0006;
arm_smccc_smc(TEE_SMC_PROTECT_MEM_BY_TYPE,
type, start, size, level, 0, 0, 0, &res);
*handle = res.a1;
return res.a0;
}
void tee_unprotect_mem(u32 handle)
{
struct arm_smccc_res res;
arm_smccc_smc(TEE_SMC_UNPROTECT_MEM,
handle, 0, 0, 0, 0, 0, 0, &res);
}