aboutsummaryrefslogtreecommitdiffstats
path: root/src/pru/pru0.c
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2017-07-12 22:16:16 -0400
committerKevin O'Connor <kevin@koconnor.net>2017-07-17 15:02:43 -0400
commit118fd21cb815d1c27e7e5bd6b394369bdf095919 (patch)
tree78ceda354491dfb66419f0a7e892017a05319a73 /src/pru/pru0.c
parent969485c754731183f357e6fef23c6180f59d4cb6 (diff)
downloadkutter-118fd21cb815d1c27e7e5bd6b394369bdf095919.tar.gz
kutter-118fd21cb815d1c27e7e5bd6b394369bdf095919.tar.xz
kutter-118fd21cb815d1c27e7e5bd6b394369bdf095919.zip
irq: Support sleeping when mcu is idle
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'src/pru/pru0.c')
-rw-r--r--src/pru/pru0.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/pru/pru0.c b/src/pru/pru0.c
index 3a8fd421..c6a63cb9 100644
--- a/src/pru/pru0.c
+++ b/src/pru/pru0.c
@@ -135,8 +135,7 @@ static void
process_io(void)
{
for (;;) {
- if (!(read_r31() & (1 << (WAKE_PRU0_IRQ + R31_IRQ_OFFSET))))
- continue;
+ asm("slp 1");
CT_INTC.SECR0 = (1 << KICK_PRU0_FROM_ARM_EVENT) | (1 << KICK_PRU0_EVENT);
check_can_send();
check_can_read();
@@ -327,6 +326,10 @@ main(void)
, CHAN_DESC, CHAN_PORT) != PRU_RPMSG_SUCCESS)
;
+ // Allow PRU0 and PRU1 to wake from sleep
+ PRU0_CTRL.WAKEUP_EN = 1 << (WAKE_PRU0_IRQ + R31_IRQ_OFFSET);
+ PRU1_CTRL.WAKEUP_EN = 1 << (WAKE_PRU1_IRQ + R31_IRQ_OFFSET);
+
// Wait for PRU1 to be ready
memset(SHARED_MEM, 0, sizeof(*SHARED_MEM));
writel(&SHARED_MEM->signal, SIGNAL_PRU0_WAITING);