Some systems boot up at a very low CPU frequency and set up a higher CPU frequency in lowlevel initialization.
Currently get_tbclk() uses a fixed value (CONFIG_SYS_MIPS_TIMER_FREQ) for MIPS architercture, and CONFIG_SYS_MIPS_TIMER_FREQ is usually related to the higher CPU frequency. If udelay() is used before setting up CPU frequency, it will be very inaccurate. This patch adds an option to allow a mach to define its own get_tbclk(). Signed-off-by: Weijie Gao <[email protected]> --- arch/mips/Kconfig | 8 ++++++++ arch/mips/cpu/time.c | 2 ++ 2 files changed, 10 insertions(+) diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig index 4688717593..52afbf79c5 100644 --- a/arch/mips/Kconfig +++ b/arch/mips/Kconfig @@ -502,6 +502,14 @@ config MIPS_BOOT_CONFIG_WORD1 help Value which is inserted as boot config word 1. +config MIPS_OVERRIDE_GET_TBCLK + bool + default n + help + Select this if you want to override the default get_tbclk() for your + system. This usually means the timer frequency of your system may + change in different boot stage. + endif endmenu diff --git a/arch/mips/cpu/time.c b/arch/mips/cpu/time.c index af324f77ce..61d1cd9ec0 100644 --- a/arch/mips/cpu/time.c +++ b/arch/mips/cpu/time.c @@ -12,7 +12,9 @@ unsigned long notrace timer_read_counter(void) return read_c0_count(); } +#ifndef CONFIG_MIPS_OVERRIDE_GET_TBCLK ulong notrace get_tbclk(void) { return CONFIG_SYS_MIPS_TIMER_FREQ; } +#endif -- 2.17.1

