• Zhen Lei's avatar
    clocksource/drivers/sp804: Support non-standard register offset · 23c788cd
    Zhen Lei authored
    The ARM SP804 supports a maximum of 32-bit counter, but Hisilicon extends
    it to 64-bit. That means, the registers: TimerXload, TimerXValue and
    TimerXBGLoad are 64bits, all other registers are the same as those in the
    SP804. The driver code can be completely reused except that the register
    offset is different.
    
    Currently, we get a timer register address by: add the constant register
    offset to the timer base address. e.g. "base + TIMER_CTRL". It can not be
    dynamically adjusted at run time.
    
    So create a new structure "sp804_timer" to record the original registers
    offset, and create a new structure "sp804_clkevt" to record the
    calculated registers address. So the "base + TIMER_CTRL" is changed to
    "clkevt->ctrl", this will faster than "base + timer->ctrl".
    
    For example:
    	struct sp804_timer arm_sp804_timer = {
    		.ctrl	= TIMER_CTRL,
    	};
    
    	struct sp804_clkevt clkevt;
    
    	clkevt.ctrl = base + arm_sp804_timer.ctrl.
    
    -	writel(0, base + TIMER_CTRL);
    +	writel(0, clkevt->ctrl);
    Signed-off-by: default avatarZhen Lei <thunder.leizhen@huawei.com>
    Signed-off-by: default avatarDaniel Lezcano <daniel.lezcano@linaro.org>
    Link: https://lore.kernel.org/r/20200918132237.3552-7-thunder.leizhen@huawei.com
    23c788cd
timer-sp.h 1.57 KB