From 8ac932441c616be3aa5352d1a62eecbf230bbae3 Mon Sep 17 00:00:00 2001
From: Rahix <rahix@rahix.de>
Date: Fri, 4 Oct 2019 09:50:14 +0200
Subject: [PATCH] fix(libcard10): Mark card10_reset() as noreturn

card10_reset() won't ever return to where it was called from.  Telling
the compiler this can help with program-flow analysis.

Signed-off-by: Rahix <rahix@rahix.de>
---
 lib/card10/card10.c | 5 ++++-
 lib/card10/card10.h | 2 +-
 2 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/lib/card10/card10.c b/lib/card10/card10.c
index 09cc44ff..43361ef0 100644
--- a/lib/card10/card10.c
+++ b/lib/card10/card10.c
@@ -224,7 +224,7 @@ void card10_poll(void)
 	portexpander_poll();
 }
 
-void card10_reset(void)
+void __attribute__((noreturn)) card10_reset(void)
 {
 	printf("Resetting ...\n");
 	/*
@@ -235,6 +235,9 @@ void card10_reset(void)
 		__asm volatile("nop");
 	}
 	MXC_GCR->rstr0 = MXC_F_GCR_RSTR0_SYSTEM;
+
+	while (1)
+		__WFI();
 }
 
 void GPIO0_IRQHandler(void)
diff --git a/lib/card10/card10.h b/lib/card10/card10.h
index fc90fe67..192058f0 100644
--- a/lib/card10/card10.h
+++ b/lib/card10/card10.h
@@ -15,5 +15,5 @@ void core1_start(void *isr);
 void core1_stop(void);
 
 void card10_poll(void);
-void card10_reset(void);
+void card10_reset(void) __attribute__((noreturn));
 #endif
-- 
GitLab