summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDamien Zammit <damien@zamaudio.com>2015-09-20 23:00:53 +1000
committerDamien Zammit <damien@zamaudio.com>2015-09-20 23:00:53 +1000
commit1ea415e7eb721aaae458c4a7e5594ccc4c8333a4 (patch)
tree95a85223a594e4d71c8b07c3ebc00cc1f3570a58
parent82a78e6d394885546bc6a6e857adc963782d89dd (diff)
Fixed service request polling logic
Signed-off-by: Damien Zammit <damien@zamaudio.com>
-rw-r--r--firmware/servicereq.c3
-rw-r--r--firmware/smu.c12
2 files changed, 8 insertions, 7 deletions
diff --git a/firmware/servicereq.c b/firmware/servicereq.c
index 17830ee..b907390 100644
--- a/firmware/servicereq.c
+++ b/firmware/servicereq.c
@@ -5558,7 +5558,6 @@ void smu_service_request(void)
static u32 bapm = 0;
int requestid;
- write32(0xe0003004, 1);
requestid = read32(0xe0003000);
requestid &= 0x1fffe;
requestid >>= 1;
@@ -5651,8 +5650,6 @@ void smu_service_request(void)
default:
break;
}
-
- write32(0xe0003004, 3);
}
void MicoISRHandler(void)
diff --git a/firmware/smu.c b/firmware/smu.c
index d2fdde3..8a2de21 100644
--- a/firmware/smu.c
+++ b/firmware/smu.c
@@ -40,12 +40,16 @@ void main(void)
ie |= 0x1;
asm volatile ("wcsr ie, %0"::"r"(ie));
*/
+ write32(0xe0003004, 3); // Assume interrupt is done and acked
+
while (1) {
mdelay(10);
-
- if (read32(0xe0003000) & 1) {
- smu_service_request();
- write32(0xe0003000, 0);
+
+ if (read32(0xe0003000)) {
+ write32(0xe0003004, 1); // Interrupt ack
+ smu_service_request(); // Do service request
+ write32(0xe0003000, 0); // Clear service request
+ write32(0xe0003004, 3); // Interrupt done + ack
}
}
}