All of lore.kernel.org
 help / color / mirror / Atom feed
From: Paul Cercueil <paul@crapouillou.net>
To: Jiaxun Yang <jiaxun.yang@flygoat.com>
Cc: linux-mips@vger.kernel.org,
	"Thomas Bogendoerfer" <tsbogend@alpha.franken.de>,
	"Huacai Chen" <chenhc@lemote.com>,
	"Serge Semin" <Sergey.Semin@baikalelectronics.ru>,
	"Alexey Malahov" <Alexey.Malahov@baikalelectronics.ru>,
	"WANG Xuerui" <git@xen0n.name>,
	"Paul Burton" <paulburton@kernel.org>,
	周琰杰 <zhouyanjie@wanyeetech.com>,
	"afzal mohammed" <afzal.mohd.ma@gmail.com>,
	"Liangliang Huang" <huanglllzu@gmail.com>,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH] MIPS: cevt-r4k: Enable intimer for Loongson64 CPUs with extimer
Date: Sun, 04 Oct 2020 22:49:55 +0200	[thread overview]
Message-ID: <773PHQ.F1MX5ZDA2SEE@crapouillou.net> (raw)
In-Reply-To: <20200923110301.58125-1-jiaxun.yang@flygoat.com>

Hi,

Le mer. 23 sept. 2020 à 19:02, Jiaxun Yang <jiaxun.yang@flygoat.com> a 
écrit :
> Loongson64C and Loongson64G have extimer feature, which is a
> timer sharing Cause.TI with cevt-r4k (named intimer).
> 
> To ensure the cevt-r4k's usability, we need to add a callback for
> clock device to switch intimer.
> 
> Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
> ---
>  arch/mips/include/asm/cpu-features.h |  4 ++++
>  arch/mips/include/asm/cpu.h          |  1 +
>  arch/mips/kernel/cevt-r4k.c          | 25 +++++++++++++++++++++++++
>  arch/mips/kernel/cpu-probe.c         |  6 +++++-
>  4 files changed, 35 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/mips/include/asm/cpu-features.h 
> b/arch/mips/include/asm/cpu-features.h
> index 78cf7e300f12..aec458eee2a5 100644
> --- a/arch/mips/include/asm/cpu-features.h
> +++ b/arch/mips/include/asm/cpu-features.h
> @@ -576,6 +576,10 @@
>  # define cpu_has_gsexcex	__opt(MIPS_CPU_GSEXCEX)
>  #endif
> 
> +#ifndef cpu_has_extimer
> +# define cpu_has_extimer	__opt(MIPS_CPU_EXTIMER)
> +#endif
> +
>  #ifdef CONFIG_SMP
>  /*
>   * Some systems share FTLB RAMs between threads within a core 
> (siblings in
> diff --git a/arch/mips/include/asm/cpu.h b/arch/mips/include/asm/cpu.h
> index 388a82f28a87..854e1b44254b 100644
> --- a/arch/mips/include/asm/cpu.h
> +++ b/arch/mips/include/asm/cpu.h
> @@ -429,6 +429,7 @@ enum cpu_type_enum {
>  #define MIPS_CPU_MAC_2008_ONLY	BIT_ULL(60)	/* CPU Only support 
> MAC2008 Fused multiply-add instruction */
>  #define MIPS_CPU_FTLBPAREX	BIT_ULL(61)	/* CPU has FTLB parity 
> exception */
>  #define MIPS_CPU_GSEXCEX	BIT_ULL(62)	/* CPU has GSExc exception */
> +#define MIPS_CPU_EXTIMER	BIT_ULL(63)	/* CPU has External Timer 
> (Loongson) */
> 
>  /*
>   * CPU ASE encodings
> diff --git a/arch/mips/kernel/cevt-r4k.c b/arch/mips/kernel/cevt-r4k.c
> index 995ad9e69ded..fae49e9215b4 100644
> --- a/arch/mips/kernel/cevt-r4k.c
> +++ b/arch/mips/kernel/cevt-r4k.c
> @@ -15,6 +15,8 @@
> 
>  #include <asm/time.h>
>  #include <asm/cevt-r4k.h>
> +#include <asm/cpu-features.h>
> +#include <asm/mipsregs.h>
> 
>  static int mips_next_event(unsigned long delta,
>  			   struct clock_event_device *evt)
> @@ -294,6 +296,24 @@ core_initcall(r4k_register_cpufreq_notifier);
> 
>  #endif /* !CONFIG_CPU_FREQ */
> 
> +#ifdef CONFIG_CPU_LOONGSON64
> +static int c0_compare_int_enable(struct clock_event_device *cd)
> +{
> +	if (cpu_has_extimer)
> +		set_c0_config6(LOONGSON_CONF6_INTIMER);
> +
> +	return 0;
> +}
> +
> +static int c0_compare_int_disable(struct clock_event_device *cd)
> +{
> +	if (cpu_has_extimer)
> +		clear_c0_config6(LOONGSON_CONF6_INTIMER);
> +
> +	return 0;
> +}
> +#endif

static int __maybe_unused c0_compare_int_enable(...)
{
    ...
}

without the #ifdef.

Or better, move these two to loongson64 board code, with "extern int 
c0_compare_int_enable" in a header somewhere.

> +
>  int r4k_clockevent_init(void)
>  {
>  	unsigned long flags = IRQF_PERCPU | IRQF_TIMER | IRQF_SHARED;
> @@ -329,6 +349,11 @@ int r4k_clockevent_init(void)
>  	cd->set_next_event	= mips_next_event;
>  	cd->event_handler	= mips_event_handler;
> 
> +#ifdef CONFIG_CPU_LOONGSON64
> +	cd->set_state_oneshot = c0_compare_int_enable;
> +	cd->set_state_shutdown = c0_compare_int_disable;
> +#endif
> +

if (IS_ENABLED(CONFIG_CPU_LOONGSON64)) {
    cd->set_state_oneshot = ...;
}

Although I think this is still incorrect: here you check whether the 
kernel supports this CPU, instead of checking what CPU you're running 
on.

Cheers,
-Paul

>  	clockevents_config_and_register(cd, mips_hpt_frequency, min_delta, 
> 0x7fffffff);
> 
>  	if (cp0_timer_irq_installed)
> diff --git a/arch/mips/kernel/cpu-probe.c 
> b/arch/mips/kernel/cpu-probe.c
> index 6be23f205e74..4f1e9ef2644e 100644
> --- a/arch/mips/kernel/cpu-probe.c
> +++ b/arch/mips/kernel/cpu-probe.c
> @@ -2030,6 +2030,9 @@ static inline void decode_cpucfg(struct 
> cpuinfo_mips *c)
>  	if (cfg2 & LOONGSON_CFG2_LEXT2)
>  		c->ases |= MIPS_ASE_LOONGSON_EXT2;
> 
> +	if (cfg2 & LOONGSON_CFG2_LLFTP)
> +		c->options |= MIPS_CPU_EXTIMER;
> +
>  	if (cfg2 & LOONGSON_CFG2_LSPW) {
>  		c->options |= MIPS_CPU_LDPTE;
>  		c->guest.options |= MIPS_CPU_LDPTE;
> @@ -2088,7 +2091,8 @@ static inline void cpu_probe_loongson(struct 
> cpuinfo_mips *c, unsigned int cpu)
>  		 * Also some early Loongson-3A2000 had wrong TLB type in Config
>  		 * register, we correct it here.
>  		 */
> -		c->options |= MIPS_CPU_FTLB | MIPS_CPU_TLBINV | MIPS_CPU_LDPTE;
> +		c->options |= MIPS_CPU_FTLB | MIPS_CPU_TLBINV | MIPS_CPU_LDPTE |
> +			      MIPS_CPU_EXTIMER;
>  		c->writecombine = _CACHE_UNCACHED_ACCELERATED;
>  		c->ases |= (MIPS_ASE_LOONGSON_MMI | MIPS_ASE_LOONGSON_CAM |
>  			MIPS_ASE_LOONGSON_EXT | MIPS_ASE_LOONGSON_EXT2);
> --
> 2.28.0
> 



      parent reply	other threads:[~2020-10-04 20:50 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-09-23 11:02 [PATCH] MIPS: cevt-r4k: Enable intimer for Loongson64 CPUs with extimer Jiaxun Yang
2020-10-02 13:27 ` Thomas Bogendoerfer
2020-10-03  6:25   ` Jiaxun Yang
2020-10-04 20:12     ` Thomas Bogendoerfer
2020-10-04 20:49 ` Paul Cercueil [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=773PHQ.F1MX5ZDA2SEE@crapouillou.net \
    --to=paul@crapouillou.net \
    --cc=Alexey.Malahov@baikalelectronics.ru \
    --cc=Sergey.Semin@baikalelectronics.ru \
    --cc=afzal.mohd.ma@gmail.com \
    --cc=chenhc@lemote.com \
    --cc=git@xen0n.name \
    --cc=huanglllzu@gmail.com \
    --cc=jiaxun.yang@flygoat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mips@vger.kernel.org \
    --cc=paulburton@kernel.org \
    --cc=tsbogend@alpha.franken.de \
    --cc=zhouyanjie@wanyeetech.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.