diff mbox series

[04/16] mips: add an option to support customized get_tbclk()

Message ID 1578452469-6831-1-git-send-email-weijie.gao@mediatek.com
State New
Headers show
Series [01/16] configs: mtmips: add missing board selection for gardena-smart-gateway-mt7688 | expand

Commit Message

Weijie Gao Jan. 8, 2020, 3:01 a.m. UTC
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 <weijie.gao at mediatek.com>
---
 arch/mips/Kconfig    | 8 ++++++++
 arch/mips/cpu/time.c | 2 ++
 2 files changed, 10 insertions(+)

Comments

Daniel Schwierzeck Jan. 8, 2020, 2:32 p.m. UTC | #1
Am 08.01.20 um 04:01 schrieb Weijie Gao:
> 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 <weijie.gao at mediatek.com>
> ---
>  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
> 

you can drop this patch. I already applied [1] because there was another
request to make this function weak.

[1] https://patchwork.ozlabs.org/patch/1215073/
Weijie Gao Jan. 9, 2020, 8:30 a.m. UTC | #2
On Wed, 2020-01-08 at 15:32 +0100, Daniel Schwierzeck wrote:
> 
> Am 08.01.20 um 04:01 schrieb Weijie Gao:
> > 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 <weijie.gao at mediatek.com>
> > ---
> >  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
> > 
> 
> you can drop this patch. I already applied [1] because there was another
> request to make this function weak.
> 
> [1] https://patchwork.ozlabs.org/patch/1215073/
> 

OK
diff mbox series

Patch

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