• Jisheng Zhang's avatar
    clocksource/drivers/dw_apb_timer_of: Implement ARM delay timer · 9115df89
    Jisheng Zhang authored
    Implement an ARM delay timer to be used for udelay(). This allows us to
    skip the delay loop calibration at boot on Marvell BG2, BG2Q, BG2CD
    platforms. And after this patch, udelay() will be unaffected by CPU
    frequency changes.
    
    Note: Although in case there are several possible delay timers, we may
    not select the "best" delay timer. Take one Marvell Berlin platform for
    example: we have arch timer and dw-apb timer. The arch timer freq is
    25MHZ while the dw-apb timer freq is 100MHZ, current selection would
    choose the dw-apb timer. But the dw apb timer is on the APB bus while
    arch timer sits in CPU, the cost of accessing the apb timer is higher
    than the arch timer. We could introduce "rating" concept to delay
    timer, but this approach "brings a lot of complexity and workarounds
    in the code for a small benefit" as pointed out by Daniel.
    
    Later, Arnd pointed out "However, we could argue that this actually
    doesn't matter at all, because the entire point of the ndelay()/
    udelay()/mdelay() functions is to waste CPU cycles doing not much at
    all, so we can just as well waste them reading the timer register
    than spinning on the CPU reading the arch timer more often.", so we
    just simply register the dw apb base delay timer.
    Signed-off-by: default avatarJisheng Zhang <jszhang@marvell.com>
    Signed-off-by: default avatarDaniel Lezcano <daniel.lezcano@linaro.org>
    9115df89
dw_apb_timer_of.c 4.45 KB