plat-sam: nsec-service: handle SMC to set USB suspend
Handle the SMC that allows Linux to set USB suspend mode using the SFR.
Acked-by: Jens Wiklander <jens.wiklander@linaro.org>
Acked-by: Etienne Carriere <etienne.carriere@linaro.org>
Signed-off-by: Clément Léger <clement.leger@bootlin.com>
diff --git a/core/arch/arm/plat-sam/nsec-service/sm_platform_handler.c b/core/arch/arm/plat-sam/nsec-service/sm_platform_handler.c
index 2988c4f..e9c3589 100644
--- a/core/arch/arm/plat-sam/nsec-service/sm_platform_handler.c
+++ b/core/arch/arm/plat-sam/nsec-service/sm_platform_handler.c
@@ -8,6 +8,7 @@
#include <io.h>
#include <kernel/tee_misc.h>
#include <mm/core_memprot.h>
+#include <sam_sfr.h>
#include <sm/optee_smc.h>
#include <sm/sm.h>
#include <smc_ids.h>
@@ -15,6 +16,10 @@
static enum sm_handler_ret sam_sip_handler(struct thread_smc_args *args)
{
switch (OPTEE_SMC_FUNC_NUM(args->a0)) {
+ case SAMA5_SMC_SIP_SFR_SET_USB_SUSPEND:
+ atmel_sfr_set_usb_suspend(args->a1);
+ args->a0 = SAMA5_SMC_SIP_RETURN_SUCCESS;
+ break;
case SAMA5_SMC_SIP_SET_SUSPEND_MODE:
return at91_pm_set_suspend_mode(args);
case SAMA5_SMC_SIP_GET_SUSPEND_MODE:
diff --git a/core/arch/arm/plat-sam/nsec-service/smc_ids.h b/core/arch/arm/plat-sam/nsec-service/smc_ids.h
index 4673f18..dee8e02 100644
--- a/core/arch/arm/plat-sam/nsec-service/smc_ids.h
+++ b/core/arch/arm/plat-sam/nsec-service/smc_ids.h
@@ -6,6 +6,8 @@
#ifndef SMC_IDS_H
#define SMC_IDS_H
+#define SAMA5_SMC_SIP_SFR_SET_USB_SUSPEND 0x300
+
#define SAMA5_SMC_SIP_SET_SUSPEND_MODE 0x400
#define SAMA5_SMC_SIP_GET_SUSPEND_MODE 0x401