From 5054fdeb41778ad4ac6c8021a930b81ab11aa53f Mon Sep 17 00:00:00 2001
From: Rahix <rahix@rahix.de>
Date: Fri, 5 Jul 2019 01:34:47 +0200
Subject: [PATCH] fix(epicardium): Use SEV-on-pend instead of enabling IRQ

Hopefully fixes #5.

Signed-off-by: Rahix <rahix@rahix.de>
---
 epicardium/main.c    | 3 +++
 epicardium/support.c | 8 ++------
 2 files changed, 5 insertions(+), 6 deletions(-)

diff --git a/epicardium/main.c b/epicardium/main.c
index f472e6b3..c1adc536 100644
--- a/epicardium/main.c
+++ b/epicardium/main.c
@@ -57,6 +57,9 @@ int main(void)
 	card10_init();
 	card10_diag();
 
+	/* TODO: Move this to its own function */
+	SCB->SCR |= SCB_SCR_SEVONPEND_Msk;
+
 	pmic_set_button_callback(pmic_button);
 
 	cdcacm_init();
diff --git a/epicardium/support.c b/epicardium/support.c
index 19bab453..5a2d55c6 100644
--- a/epicardium/support.c
+++ b/epicardium/support.c
@@ -24,14 +24,10 @@ void pre_idle_sleep(TickType_t xExpectedIdleTime)
 		 * TODO: Ensure this is actually correct and does not have any
 		 * race conditions.
 		 */
-		__asm volatile( "cpsie i" ::: "memory" );
 		__asm volatile( "dsb" ::: "memory" );
-		__asm volatile( "isb" );
+		__asm volatile( "sev" );
+		__asm volatile( "wfe" );
 		__asm volatile( "wfe" );
-		__asm volatile( "dsb" ::: "memory" );
-		__asm volatile( "isb" );
-		__asm volatile( "cpsid i" ::: "memory" );
-		__asm volatile( "dsb" );
 		__asm volatile( "isb" );
 	}
 }
-- 
GitLab