[RFC linux dev-4.19] clocksource: fttmr010: Detect back-pressure for Aspeed controllers

Cédric Le Goater clg at kaod.org
Fri Jan 11 20:06:25 AEDT 2019


On 1/11/19 4:36 AM, Andrew Jeffery wrote:
> Signed-off-by: Andrew Jeffery <andrew at aj.id.au>

This patch should not have any impact on a real system where l == cycles.
It might be difficult to merge though.

C. 

> ---
> 
> See the cover letter on the corresponding qemu RFC series, to be sent after
> this patch.
> 
>  arch/arm/mach-aspeed/Kconfig         | 1 +
>  drivers/clocksource/timer-fttmr010.c | 7 +++++++
>  2 files changed, 8 insertions(+)
> 
> diff --git a/arch/arm/mach-aspeed/Kconfig b/arch/arm/mach-aspeed/Kconfig
> index 2d5570e6e186..6b82d5416cf0 100644
> --- a/arch/arm/mach-aspeed/Kconfig
> +++ b/arch/arm/mach-aspeed/Kconfig
> @@ -7,6 +7,7 @@ menuconfig ARCH_ASPEED
>  	select FTTMR010_TIMER
>  	select MFD_SYSCON
>  	select PINCTRL
> +	select GENERIC_CLOCKEVENTS_MIN_ADJUST
>  	help
>  	  Say Y here if you want to run your kernel on an ASpeed BMC SoC.
>  
> diff --git a/drivers/clocksource/timer-fttmr010.c b/drivers/clocksource/timer-fttmr010.c
> index cf93f6419b51..f15386b98289 100644
> --- a/drivers/clocksource/timer-fttmr010.c
> +++ b/drivers/clocksource/timer-fttmr010.c
> @@ -124,6 +124,7 @@ static int fttmr010_timer_set_next_event(unsigned long cycles,
>  {
>  	struct fttmr010 *fttmr010 = to_fttmr010(evt);
>  	u32 cr;
> +	u32 l;
>  
>  	/* Stop */
>  	cr = readl(fttmr010->base + TIMER_CR);
> @@ -136,6 +137,12 @@ static int fttmr010_timer_set_next_event(unsigned long cycles,
>  		 * into TIMER1_COUNT register when the timer is re-enabled.
>  		 */
>  		writel(cycles, fttmr010->base + TIMER1_LOAD);
> +#if CONFIG_GENERIC_CLOCKEVENTS_MIN_ADJUST> +		/* QEMU model may provide back-pressure on requested period */
> +		l = readl(fttmr010->base + TIMER1_LOAD);
> +		if (l > cycles)
> +			return -EINVAL;
> +#endif
>  	} else {
>  		/* Setup the match register forward in time */
>  		cr = readl(fttmr010->base + TIMER1_COUNT);
> 



More information about the openbmc mailing list