]> git.baikalelectronics.ru Git - arm-tf.git/commit
ti: k3: common: Make plat_get_syscnt_freq2 check CNT_FID0 GTC reg
authorNishanth Menon <nm@ti.com>
Fri, 11 Dec 2020 02:51:51 +0000 (20:51 -0600)
committerNishanth Menon <nm@ti.com>
Wed, 23 Dec 2020 12:33:39 +0000 (06:33 -0600)
commit6a22d9ea3c7fa28d053d3ba264b49b7396a86f9e
tree30a542cf2379467d1975fe1191a2d0405e6c643b
parent60fba7c8e8152013a06162cd11c1257b38d049bf
ti: k3: common: Make plat_get_syscnt_freq2 check CNT_FID0 GTC reg

ARM's generic timer[1] picks up it's graycode from GTC. However, the
frequency of the GTC is supposed to be programmed in CNTFID0[2]
register.

In K3, architecture, GTC provides a central time to many parts of the
SoC including graycode to the generic timer in the ARMv8 subsystem.
However, due to the central nature and the need to enable the counter
early in the boot process, the R5 based bootloader enables GTC and
programs it's frequency based on central needs of the system. This
may not be a constant 200MHz based on the system. The bootloader is
supposed to program the FID0 register with the correct frequency it
has sourced for GTC from the central system controller, and TF-A is
supposed to use that as the frequency for it's local timer.

A mismatch in programmed frequency and what we program for generic
timer will, as we can imagine, all kind of weird mayhem.

So, check the CNTFID0 register, if it is 0, warn and use the default
frequency to continue the boot process.

While at it, we can also check CNTCR register to provide some basic
diagnostics to make sure that we don't have OS folks scratch their
heads. Even though this is used during cpu online operations, the cost
of this additional check is minimal enough for us not to use #ifdeffery
with DEBUG flags.

[1] https://developer.arm.com/documentation/100095/0002/generic-timer/generic-timer-register-summary/aarch64-generic-timer-register-summary
[2] https://developer.arm.com/docs/ddi0595/h/external-system-registers/cntfid0
[3] https://developer.arm.com/docs/ddi0595/h/external-system-registers/cntcr

Signed-off-by: Nishanth Menon <nm@ti.com>
Change-Id: Ib03e06788580f3540dcb1a11677d0d6d398b2c9f
plat/ti/k3/common/k3_bl31_setup.c
plat/ti/k3/include/platform_def.h