[PATCH v2 1/2] timer: sti: convert sti-timer to arm a9 global timer

Patrice CHOTARD patrice.chotard at foss.st.com
Wed Aug 24 17:08:01 CEST 2022


Hi William

On 8/24/22 06:44, William Zhang wrote:
> STI timer is actually ARM Cortex A9 global timer. Convert the driver to
> use generic global timer name and make it consistent with Linux kernel
> global timer driver. This also allows any A9 based device to use this
> driver.
> 
> Signed-off-by: William Zhang <william.zhang at broadcom.com>
> ---
> 
> (no changes since v1)
> 
>  MAINTAINERS                                   |  2 +-
>  drivers/timer/Kconfig                         |  8 +++--
>  drivers/timer/Makefile                        |  2 +-
>  .../timer/{sti-timer.c => arm_global_timer.c} | 30 ++++++++++---------
>  4 files changed, 23 insertions(+), 19 deletions(-)
>  rename drivers/timer/{sti-timer.c => arm_global_timer.c} (66%)
> 
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 1103bb068154..f7d77bb8cfa9 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -503,7 +503,7 @@ F:	drivers/mmc/sti_sdhci.c
>  F:	drivers/reset/sti-reset.c
>  F:	drivers/serial/serial_sti_asc.c
>  F:	drivers/sysreset/sysreset_sti.c
> -F:	drivers/timer/sti-timer.c
> +F:	drivers/timer/arm_global_timer.c
>  F:	drivers/usb/host/dwc3-sti-glue.c
>  F:	include/dwc3-sti-glue.h
>  F:	include/dt-bindings/clock/stih407-clks.h
> diff --git a/drivers/timer/Kconfig b/drivers/timer/Kconfig
> index 20b5af7e260f..3e1d70fbb930 100644
> --- a/drivers/timer/Kconfig
> +++ b/drivers/timer/Kconfig
> @@ -215,12 +215,14 @@ config SANDBOX_TIMER
>  	  Select this to enable an emulated timer for sandbox. It gets
>  	  time from host os.
>  
> -config STI_TIMER
> -	bool "STi timer support"
> +config ARM_GLOBAL_TIMER
> +	bool "ARM Cortex A9 global timer support"
>  	depends on TIMER
> +	depends on ARM
>  	default y if ARCH_STI
>  	help
> -	  Select this to enable a timer for STi devices.
> +	  Select this to enable global timer found on ARM Cortex A9
> +	  based devices.
>  
>  config STM32_TIMER
>  	bool "STM32 timer support"
> diff --git a/drivers/timer/Makefile b/drivers/timer/Makefile
> index d9822a537009..d23569365408 100644
> --- a/drivers/timer/Makefile
> +++ b/drivers/timer/Makefile
> @@ -22,7 +22,7 @@ obj-$(CONFIG_RISCV_TIMER) += riscv_timer.o
>  obj-$(CONFIG_ROCKCHIP_TIMER) += rockchip_timer.o
>  obj-$(CONFIG_SANDBOX_TIMER)	+= sandbox_timer.o
>  obj-$(CONFIG_$(SPL_)SIFIVE_CLINT) += sifive_clint_timer.o
> -obj-$(CONFIG_STI_TIMER)		+= sti-timer.o
> +obj-$(CONFIG_ARM_GLOBAL_TIMER)	+= arm_global_timer.o
>  obj-$(CONFIG_STM32_TIMER)	+= stm32_timer.o
>  obj-$(CONFIG_X86_TSC_TIMER)	+= tsc_timer.o
>  obj-$(CONFIG_MTK_TIMER)		+= mtk_timer.o
> diff --git a/drivers/timer/sti-timer.c b/drivers/timer/arm_global_timer.c
> similarity index 66%
> rename from drivers/timer/sti-timer.c
> rename to drivers/timer/arm_global_timer.c
> index 87444a0650f6..065f10bb742b 100644
> --- a/drivers/timer/sti-timer.c
> +++ b/drivers/timer/arm_global_timer.c
> @@ -2,6 +2,8 @@
>  /*
>   * Copyright (C) 2017, STMicroelectronics - All Rights Reserved
>   * Author(s): Patrice Chotard, <patrice.chotard at foss.st.com> for STMicroelectronics.
> + *
> + * ARM Cortext A9 global timer driver
>   */
>  
>  #include <common.h>
> @@ -13,13 +15,13 @@
>  #include <asm/io.h>
>  #include <asm/arch-armv7/globaltimer.h>
>  
> -struct sti_timer_priv {
> +struct arm_global_timer_priv {
>  	struct globaltimer *global_timer;
>  };
>  
> -static u64 sti_timer_get_count(struct udevice *dev)
> +static u64 arm_global_timer_get_count(struct udevice *dev)
>  {
> -	struct sti_timer_priv *priv = dev_get_priv(dev);
> +	struct arm_global_timer_priv *priv = dev_get_priv(dev);
>  	struct globaltimer *global_timer = priv->global_timer;
>  	u32 low, high;
>  	u64 timer;
> @@ -37,10 +39,10 @@ static u64 sti_timer_get_count(struct udevice *dev)
>  	return (u64)((timer << 32) | low);
>  }
>  
> -static int sti_timer_probe(struct udevice *dev)
> +static int arm_global_timer_probe(struct udevice *dev)
>  {
>  	struct timer_dev_priv *uc_priv = dev_get_uclass_priv(dev);
> -	struct sti_timer_priv *priv = dev_get_priv(dev);
> +	struct arm_global_timer_priv *priv = dev_get_priv(dev);
>  	struct clk clk;
>  	int err;
>  	ulong ret;
> @@ -66,20 +68,20 @@ static int sti_timer_probe(struct udevice *dev)
>  	return 0;
>  }
>  
> -static const struct timer_ops sti_timer_ops = {
> -	.get_count = sti_timer_get_count,
> +static const struct timer_ops arm_global_timer_ops = {
> +	.get_count = arm_global_timer_get_count,
>  };
>  
> -static const struct udevice_id sti_timer_ids[] = {
> +static const struct udevice_id arm_global_timer_ids[] = {
>  	{ .compatible = "arm,cortex-a9-global-timer" },
>  	{}
>  };
>  
> -U_BOOT_DRIVER(sti_timer) = {
> -	.name = "sti_timer",
> +U_BOOT_DRIVER(arm_global_timer) = {
> +	.name = "arm_global_timer",
>  	.id = UCLASS_TIMER,
> -	.of_match = sti_timer_ids,
> -	.priv_auto	= sizeof(struct sti_timer_priv),
> -	.probe = sti_timer_probe,
> -	.ops = &sti_timer_ops,
> +	.of_match = arm_global_timer_ids,
> +	.priv_auto	= sizeof(struct arm_global_timer_priv),
> +	.probe = arm_global_timer_probe,
> +	.ops = &arm_global_timer_ops,
>  };

Reviewed-by: Patrice Chotard <patrice.chotard at foss.st.com>
Tested-by: Patrice Chotard <patrice.chotard at foss.st.com>

Tested on stih410-b2260 boards.

Thanks
Patrice


More information about the U-Boot mailing list