From f4bf27c26e49f7e476b4cde5d52c5b9c791638fe Mon Sep 17 00:00:00 2001 From: Solomon Peachy Date: Wed, 26 Aug 2020 11:11:12 -0400 Subject: jz4760: fix the new udelay() to use _micro_seconds, not milliseconds Change-Id: I4877b1c8e4a95259b5ade126e28458b65fbd3c4b --- firmware/target/mips/ingenic_jz47xx/system-jz4760.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/firmware/target/mips/ingenic_jz47xx/system-jz4760.c b/firmware/target/mips/ingenic_jz47xx/system-jz4760.c index eb20985b97..899b346b54 100644 --- a/firmware/target/mips/ingenic_jz47xx/system-jz4760.c +++ b/firmware/target/mips/ingenic_jz47xx/system-jz4760.c @@ -338,11 +338,11 @@ void tlb_refill_handler(void) } #ifdef USE_HW_UDELAY -/* This enables the HW timer, set to EXT_XTAL / 16 (so @ 12MHz, 1 us = 750 ticks) */ +/* This enables the HW timer, set to EXT_XTAL / 4 (so @ 12/4 = 3MHz, 1 us = 3 ticks) */ static void init_delaytimer(void) { __tcu_disable_ost(); - REG_OST_OSTCSR = OSTCSR_EXT_EN | OSTCSR_PRESCALE16 | OSTCSR_CNT_MD; + REG_OST_OSTCSR = OSTCSR_EXT_EN | OSTCSR_PRESCALE4 | OSTCSR_CNT_MD; REG_OST_OSTCNT = 0; REG_OST_OSTDR = 0; __tcu_enable_ost(); @@ -353,10 +353,12 @@ void udelay(unsigned int usec) if (!__tcu_ost_enabled()) init_delaytimer(); + unsigned int now = REG_OST_OSTCNT; + /* Figure out how many ticks we need */ - usec = (CFG_EXTAL / 16 / 1000) * (usec + 1); + usec = (CFG_EXTAL / (4 * 1000 * 1000)) * (usec + 1); - while (usec < REG_OST_OSTCNT) { } + while (REG_OST_OSTCNT - now < usec) { } } #else void udelay(unsigned int usec) -- cgit v1.2.3