/** * keystone_timer_barrier: write memory barrier * use explicit barrier to avoid using readl/writel non relaxed function * variants, because in our case non relaxed variants hide the true places * where barrier is needed.
*/ staticinlinevoid keystone_timer_barrier(void)
{
__iowmb();
}
/** * keystone_timer_config: configures timer to work in oneshot/periodic modes. * @ mask: mask of the mode to configure * @ period: cycles number to configure for
*/ staticint keystone_timer_config(u64 period, int mask)
{
u32 tcr;
u32 off;
tcr = keystone_timer_readl(TCR);
off = tcr & ~(TCR_ENAMODE_MASK);
/* set enable mode */
tcr |= mask;
/* disable timer */
keystone_timer_writel(off, TCR); /* here we have to be sure the timer has been disabled */
keystone_timer_barrier();
/* reset counter to zero, set new period */
keystone_timer_writel(0, TIM12);
keystone_timer_writel(0, TIM34);
keystone_timer_writel(period & 0xffffffff, PRD12);
keystone_timer_writel(period >> 32, PRD34);
/* * enable timer * here we have to be sure that CNTLO, CNTHI, PRDLO, PRDHI registers * have been written.
*/
keystone_timer_barrier();
keystone_timer_writel(tcr, TCR); return 0;
}
irq = irq_of_parse_and_map(np, 0); if (!irq) {
pr_err("%s: failed to map interrupts\n", __func__); return -EINVAL;
}
timer.base = of_iomap(np, 0); if (!timer.base) {
pr_err("%s: failed to map registers\n", __func__); return -ENXIO;
}
clk = of_clk_get(np, 0); if (IS_ERR(clk)) {
pr_err("%s: failed to get clock\n", __func__);
iounmap(timer.base); return PTR_ERR(clk);
}
error = clk_prepare_enable(clk); if (error) {
pr_err("%s: failed to enable clock\n", __func__); goto err;
}
rate = clk_get_rate(clk);
/* disable, use internal clock source */
keystone_timer_writel(0, TCR); /* here we have to be sure the timer has been disabled */
keystone_timer_barrier();
/* reset timer as 64-bit, no pre-scaler, plus features are disabled */
keystone_timer_writel(0, TGCR);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.