diff options
author | Damien Zammit <damien@zamaudio.com> | 2015-09-20 23:00:53 +1000 |
---|---|---|
committer | Damien Zammit <damien@zamaudio.com> | 2015-09-20 23:00:53 +1000 |
commit | 1ea415e7eb721aaae458c4a7e5594ccc4c8333a4 (patch) | |
tree | 95a85223a594e4d71c8b07c3ebc00cc1f3570a58 | |
parent | 82a78e6d394885546bc6a6e857adc963782d89dd (diff) |
Fixed service request polling logic
Signed-off-by: Damien Zammit <damien@zamaudio.com>
-rw-r--r-- | firmware/servicereq.c | 3 | ||||
-rw-r--r-- | firmware/smu.c | 12 |
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 } } } |