[PATCH v7 0/3] Timer support for ARM Tegra

Thierry Reding thierry.reding at gmail.com
Fri Jan 27 18:15:30 CET 2023


On Fri, Jan 27, 2023 at 09:13:09AM +0200, Svyatoslav Ryhel wrote:
> - ARM: tegra: remap clock_osc_freq for all Tegra family
> Enum clock_osc_freq was designed to use only with T20.
> This patch remaps it to use additional frequencies, added in
> T30+ SoC while maintaining backwards compatibility with T20.
> 
> - drivers: timer: add timer driver for ARMv7 based Tegra devices
> Add timer support for T20/T30/T114/T124 and T210 based devices.
> Driver is based on DM, has device tree support and can be
> used on SPL and early boot stage.
> 
> Arm64 Tegra (apart T210) according to comment in tegra-common.h use
> architected timer.
> 
> - ARM: tegra: include timer as default option
> Enable TIMER as default option for all Tegra devices and
> enable TEGRA_TIMER for TEGRA_ARMV7_COMMON and TEGRA210.
> Additionally enable SPL_TIMER if build as SPL part and
> drop deprecated configs from common header.
> 
> P. S. I have no arm64 Tegra and according to comment in 
> tegra-common.h
> Use the Tegra US timer on ARMv7, but the architected timer on ARMv8.
> 
> ---
> Changeog from V6
>  - use clk_m as timer calibration clock (this should properly fix T210)
>  - enable timer for T210
> 
> Changed from v5:
>  - added paz00 tester
> 
> Changed from v4:
>  - added comments
> 
> Changed from v3:
>  - removed BOOTSTAGE ifdefs
>  - use early timer on boot stage unconditionally
> ---
> Svyatoslav Ryhel (3):
>   ARM: tegra: remap clock_osc_freq for all Tegra family
>   drivers: timer: add driver for ARMv7 based Tegra devices and T210
>   ARM: tegra: include timer as default option
> 
>  arch/arm/Kconfig                        |   1 +
>  arch/arm/include/asm/arch-tegra/clock.h |   9 +-
>  arch/arm/mach-tegra/Kconfig             |   3 +
>  arch/arm/mach-tegra/clock.c             |  17 +++-
>  arch/arm/mach-tegra/cpu.c               |  70 ++++++++++---
>  arch/arm/mach-tegra/tegra114/clock.c    |  13 +--
>  arch/arm/mach-tegra/tegra124/clock.c    |  13 +--
>  arch/arm/mach-tegra/tegra20/clock.c     |   4 +-
>  arch/arm/mach-tegra/tegra210/clock.c    |  22 +---
>  arch/arm/mach-tegra/tegra30/clock.c     |  10 +-
>  drivers/timer/Kconfig                   |   8 ++
>  drivers/timer/Makefile                  |   1 +
>  drivers/timer/tegra-timer.c             | 130 ++++++++++++++++++++++++
>  drivers/usb/host/ehci-tegra.c           |  46 +++++++--
>  include/configs/tegra-common.h          |   6 --
>  15 files changed, 274 insertions(+), 79 deletions(-)
>  create mode 100644 drivers/timer/tegra-timer.c

Ugh... turns out I had completely messed up the testing on Tegra186 and
it wasn't working at all. The problem is that the selection of the TIMER
symbol for all of Tegra causes the driver model to be used, but there is
no DM driver for the architected timer that's used on Tegra186.

The quickest fix would be to do this:

--- >8 ---
diff --git a/arch/arm/mach-tegra/Kconfig b/arch/arm/mach-tegra/Kconfig
index b50eec5b8c9b..05c8ce0e08dd 100644
--- a/arch/arm/mach-tegra/Kconfig
+++ b/arch/arm/mach-tegra/Kconfig
@@ -56,7 +56,6 @@ config TEGRA_COMMON
 	select MISC
 	select OF_CONTROL
 	select SPI
-	select TIMER
 	imply CMD_DM
 	imply CRC32_VERIFY
 
@@ -83,6 +82,7 @@ config TEGRA_ARMV7_COMMON
 	select TEGRA_PINCTRL
 	select TEGRA_PMC
 	select TEGRA_TIMER
+	select TIMER
 
 config TEGRA_ARMV8_COMMON
 	bool "Tegra 64-bit common options"
@@ -137,6 +137,7 @@ config TEGRA210
 	select TEGRA_PMC
 	select TEGRA_PMC_SECURE
 	select TEGRA_TIMER
+	select TIMER
 
 config TEGRA186
 	bool "Tegra186 family"
--- >8 ---

So basically make TIMER selected on everything except Tegra186, so that
on Tegra186 things are basically unmodified.

Thierry
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <https://lists.denx.de/pipermail/u-boot/attachments/20230127/d35072a9/attachment.sig>


More information about the U-Boot mailing list