[U-Boot] [PATCH v6 1/2] x86: Add TSC-specific timer functions

Andy Shevchenko andriy.shevchenko at linux.intel.com
Fri Apr 20 12:25:08 UTC 2018


On Thu, 2018-04-12 at 15:12 -0700, Ivan Gorinov wrote:
> Coreboot timestamp functions and Quark memory reference code use
> get_tbclk() to get TSC frequency. This will not work if another
> early timer is selected.
> 
> Add tsc_rate_mhz() function and use it in the code that specifically
> needs to get TSC rate regardless of currently selected early timer.


>  void delay_n(uint32_t ns)
>  {
>  	/* 1000 MHz clock has 1ns period --> no conversion required
> */
> -	uint64_t final_tsc = rdtsc();
> +	uint64_t start_tsc = rdtsc();
> +	uint64_t ticks;
>  
> -	final_tsc += ((get_tbclk_mhz() * ns) / 1000);
> -
> -	while (rdtsc() < final_tsc)
> -		;
> +	ticks = (tsc_rate_mhz() * ns) / 1000;

> +	while (rdtsc() - start_tsc < ticks);

I would rather preserve existing style.

>  }
 
>  /* Delay number of microseconds */
> -void delay_u(uint32_t ms)
> +void delay_u(uint32_t us)
>  {
>  	/* 64-bit math is not an option, just use loops */
> -	while (ms--)
> +	while (us--)
>  		delay_n(1000);
>  }

This is a separate change.

-- 
Andy Shevchenko <andriy.shevchenko at linux.intel.com>
Intel Finland Oy


More information about the U-Boot mailing list