diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2018-10-28 06:09:05 +0100 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2018-10-28 06:09:05 +0100 |
commit | 0fc2adb43dc8be67b6eca49e3e28339367a01246 (patch) | |
tree | fc97ee91c24321768a2c64fb83729005d85ce452 | |
parent | f17a5cc2cf345921f9036e23dfd895a9ee68a0e5 (diff) |
bcm: cleanup clock code
- disable local clock on interrupt to prevent accidents when reenabling
- always regitster local clock interrupt handler, even for cpu0
- simplify microdelay()
- don't mess with watchdog
-rw-r--r-- | sys/src/9/bcm/clock.c | 22 |
1 files changed, 7 insertions, 15 deletions
diff --git a/sys/src/9/bcm/clock.c b/sys/src/9/bcm/clock.c index f67209bdf..ff831d7fc 100644 --- a/sys/src/9/bcm/clock.c +++ b/sys/src/9/bcm/clock.c @@ -98,7 +98,7 @@ localclockintr(Ureg *ureg, void *) { if(m->machno == 0) panic("cpu0: Unexpected local generic timer interrupt"); - cpwrsc(0, CpTIMER, CpTIMERphys, CpTIMERphysctl, Imask|Enable); + cpwrsc(0, CpTIMER, CpTIMERphys, CpTIMERphysctl, Imask); timerintr(ureg, 0); } @@ -109,10 +109,6 @@ clockshutdown(void) tm = (Armtimer*)ARMTIMER; tm->ctl = 0; - if(cpuserver) - wdogfeed(); - else - wdogoff(); } void @@ -125,10 +121,11 @@ clockinit(void) if(((cprdsc(0, CpID, CpIDfeat, 1) >> 16) & 0xF) != 0) { /* generic timer supported */ if(m->machno == 0){ - *(ulong*)(ARMLOCAL + Localctl) = 0; /* input clock is 19.2Mhz crystal */ + *(ulong*)(ARMLOCAL + Localctl) = 0; /* input clock is 19.2Mhz crystal */ *(ulong*)(ARMLOCAL + Prescaler) = 0x06aaaaab; /* divide by (2^31/Prescaler) for 1Mhz */ } cpwrsc(0, CpTIMER, CpTIMERphys, CpTIMERphysctl, Imask); + intrenable(IRQcntpns, localclockintr, nil, 0, "clock"); } tn = (Systimers*)SYSTIMERS; @@ -150,8 +147,7 @@ clockinit(void) tm->load = 0; tm->ctl = TmrPrescale1|CntEnable|CntWidth32; intrenable(IRQtimer3, clockintr, nil, 0, "clock"); - }else - intrenable(IRQcntpns, localclockintr, nil, 0, "clock"); + } } void @@ -230,14 +226,10 @@ ulong void microdelay(int n) { - Systimers *tn; - u32int now, diff; + ulong now; - diff = n + 1; - tn = (Systimers*)SYSTIMERS; - now = tn->clo; - while(tn->clo - now < diff) - ; + now = µs(); + while(µs() - now < n); } void |