On Thu, Mar 19, 2015 at 06:16:25PM +0000, York Sun wrote: > On 03/19/2015 11:08 AM, Mark Rutland wrote: > >> + > >> +int timer_init(void) > >> +{ > >> + u32 __iomem *cntcr = (u32 *)CONFIG_SYS_FSL_TIMER_ADDR; > >> + u32 __iomem *cltbenr = (u32 *)CONFIG_SYS_FSL_PMU_CLTBENR; > >> +#ifdef COUNTER_FREQUENCY_REAL > >> + unsigned long cntfrq = COUNTER_FREQUENCY_REAL; > >> + > >> + /* Update with accurate clock frequency */ > >> + asm volatile("msr cntfrq_el0, %0" : : "r" (cntfrq) : "memory"); > >> +#endif > > > > Is this executed on all CPUs, or do secondary CPUs have CNTFRQ > > programmed with the correct value elsewhere? > > > > Only the primary CPU runs here. The secondary CPU doesn't come here.
Ok. Where does CNTFRQ get programmed for those CPUs? If it's necessary to write COUNTER_FREQUENCY_REAL to the primary CPU's CNTFRQ, that's also necessary on the secondaries before they enter the OS. Mark. _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot