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