base = ioremap(REALTIME_COUNTER_BASE, SZ_32); if (!base) {
pr_err("%s: ioremap failed\n", __func__); return;
}
sys_clk = clk_get(NULL, "sys_clkin"); if (IS_ERR(sys_clk)) {
pr_err("%s: failed to get system clock handle\n", __func__);
iounmap(base); return;
}
rate = clk_get_rate(sys_clk);
clk_put(sys_clk);
if (soc_is_dra7xx()) { /* *Erratai856saysthe32.768KHzcrystaldoesnotstartat *poweron,sotheCPUfallsbacktoanemulated32KHzclock *basedonsysclk/610instead.Thiscausesthemastercounter *frequencytonotbe6.144MHzbutatsysclk/610*375/2 *(ORsysclk*75/244) * *ThisaffectsatleasttheDRA7/AM572x1.0,1.1revisions. *Ofcourseanyboardbuiltwithoutapopulated32.768KHz *crystalwouldalsoneedthisfixeveniftheCPUisfixed *later. * *Eithercasecanbedetectedbyusingthetwospeedselectbits *Iftheyarenot0,thenthe32.768KHzclockdrivingthe *coarsecounterthatcorrectsthefinecountereverytimeit *ticksisactuallyrate/610ratherthan32.768KHzandwe *shouldcompensatetoavoidthe570ppm(at20MHz,muchworse *atotherrates)toofastsystemtime.
*/
reg = omap_ctrl_readl(DRA7_CTRL_CORE_BOOTSTRAP); if (reg & DRA7_SPEEDSELECT_MASK) {
num = 75;
den = 244; goto sysclk1_based;
}
}
/* Numerator/denumerator values refer TRM Realtime Counter section */ switch (rate) { case12000000:
num = 64;
den = 125; break; case13000000:
num = 768;
den = 1625; break; case19200000:
num = 8;
den = 25; break; case20000000:
num = 192;
den = 625; break; case26000000:
num = 384;
den = 1625; break; case27000000:
num = 256;
den = 1125; break; case38400000: default: /* Program it for 38.4 MHz */
num = 4;
den = 25; break;
}
sysclk1_based: /* Program numerator and denumerator registers */
reg = readl_relaxed(base + INCREMENTER_NUMERATOR_OFFSET) &
NUMERATOR_DENUMERATOR_MASK;
reg |= num;
writel_relaxed(reg, base + INCREMENTER_NUMERATOR_OFFSET);
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.