All of lore.kernel.org
 help / color / mirror / Atom feed
From: Nick Chan <towinchenmi@gmail.com>
To: Hector Martin <marcan@marcan.st>, Sven Peter <sven@svenpeter.dev>,
	Alyssa Rosenzweig <alyssa@rosenzweig.io>,
	Thomas Gleixner <tglx@linutronix.de>,
	Rob Herring <robh@kernel.org>,
	Krzysztof Kozlowski <krzk+dt@kernel.org>,
	Conor Dooley <conor+dt@kernel.org>,
	asahi@lists.linux.dev, linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org, devicetree@vger.kernel.org
Cc: ~postmarketos/upstreaming@lists.sr.ht
Subject: Re: [PATCH RESEND 3/3] irqchip/apple-aic: Add a new "Global fast IPIs only" feature level
Date: Thu, 29 Aug 2024 22:06:56 +0800	[thread overview]
Message-ID: <e6377027-c4e5-4fd2-abf4-63cf6282542d@gmail.com> (raw)
In-Reply-To: <20240829110436.46052-4-towinchenmi@gmail.com>



On 29/8/2024 19:02, Nick Chan wrote:
> Starting with the A11 (T8015) SoC, Apple began using arm64 sysregs for
> fast IPIs. However, on A11, there is no such things as "Local" fast IPIs,
> as the SYS_IMP_APL_IPI_RR_LOCAL_EL1 register does not seem to exist.
> 
> Add a new feature level, used by the compatible "apple,t8015-aic",
> controlled by a static branch key named use_local_fast_ipi. When
> use_fast_ipi is true and use_local_fast_ipi is false, fast IPIs are used
> but all IPIs goes through the register SYS_IMP_APL_IPI_RR_GLOBAL_EL1, as
> "global" IPIs.
> 
> Signed-off-by: Nick Chan <towinchenmi@gmail.com>
> ---
>  drivers/irqchip/irq-apple-aic.c | 25 ++++++++++++++++++++++++-
>  1 file changed, 24 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/irqchip/irq-apple-aic.c b/drivers/irqchip/irq-apple-aic.c
> index 626aaeafa96c..1640074af2e1 100644
> --- a/drivers/irqchip/irq-apple-aic.c
> +++ b/drivers/irqchip/irq-apple-aic.c
> @@ -236,6 +236,8 @@ enum fiq_hwirq {
>  
>  /* True if UNCORE/UNCORE2 and Sn_... IPI registers are present and used (A11+) */
>  static DEFINE_STATIC_KEY_TRUE(use_fast_ipi);
> +/* True if SYS_IMP_APL_IPI_RR_LOCAL_EL1 exists (M1+) */
> +static DEFINE_STATIC_KEY_TRUE(use_local_fast_ipi);
>  
>  struct aic_info {
>  	int version;
> @@ -253,6 +255,7 @@ struct aic_info {
>  
>  	/* Features */
>  	bool fast_ipi;
> +	bool local_fast_ipi;
>  };
>  
>  static const struct aic_info aic1_info __initconst = {
> @@ -271,6 +274,16 @@ static const struct aic_info aic1_fipi_info __initconst = {
>  	.fast_ipi	= true,
>  };
>  
> +static const struct aic_info aic1_local_fipi_info __initconst = {
> +	.version	= 1,
> +
> +	.event		= AIC_EVENT,
> +	.target_cpu	= AIC_TARGET_CPU,
> +
> +	.fast_ipi	= true,
> +	.local_fast_ipi = true,
> +};
> +
>  static const struct aic_info aic2_info __initconst = {
This patch is incorrectly disabling local fast IPI on aic2, it will be
corrected in v2.

>  	.version	= 2,
>  
> @@ -282,6 +295,10 @@ static const struct aic_info aic2_info __initconst = {
>  static const struct of_device_id aic_info_match[] = {
>  	{
>  		.compatible = "apple,t8103-aic",
> +		.data = &aic1_local_fipi_info,
> +	},
> +	{
> +		.compatible = "apple,t8015-aic",
>  		.data = &aic1_fipi_info,
>  	},
>  	{
> @@ -748,7 +765,8 @@ static void aic_ipi_send_fast(int cpu)
>  	u64 cluster = MPIDR_CLUSTER(mpidr);
>  	u64 idx = MPIDR_CPU(mpidr);
>  
> -	if (MPIDR_CLUSTER(my_mpidr) == cluster)
> +	if (static_branch_likely(&use_local_fast_ipi) &&
> +	    MPIDR_CLUSTER(my_mpidr) == cluster)
>  		write_sysreg_s(FIELD_PREP(IPI_RR_CPU, idx),
>  			       SYS_IMP_APL_IPI_RR_LOCAL_EL1);
>  	else
> @@ -992,6 +1010,11 @@ static int __init aic_of_ic_init(struct device_node *node, struct device_node *p
>  	else
>  		static_branch_disable(&use_fast_ipi);
>  
> +	if (irqc->info.local_fast_ipi)
> +		static_branch_enable(&use_local_fast_ipi);
> +	else
> +		static_branch_disable(&use_local_fast_ipi);
> +
>  	irqc->info.die_stride = off - start_off;
>  
>  	irqc->hw_domain = irq_domain_create_tree(of_node_to_fwnode(node),

Nick Chan

  parent reply	other threads:[~2024-08-29 14:07 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-08-29 11:02 [PATCH RESEND 0/3] Add AIC support for A7-A11 SoCs Nick Chan
2024-08-29 11:02 ` [PATCH RESEND 1/3] dt-bindings: apple,aic: Document A7-A11 compatibles Nick Chan
2024-08-29 11:46   ` Krzysztof Kozlowski
2024-08-29 12:00     ` Nick Chan
2024-08-29 12:37       ` Krzysztof Kozlowski
2024-08-29 11:02 ` [PATCH RESEND 2/3] irqchip/apple-aic: Only access IPI sysregs when use_fast_ipi is true Nick Chan
2024-08-29 13:08   ` Thomas Gleixner
2024-08-29 13:48     ` Nick Chan
2024-08-29 11:02 ` [PATCH RESEND 3/3] irqchip/apple-aic: Add a new "Global fast IPIs only" feature level Nick Chan
2024-08-29 13:12   ` Thomas Gleixner
2024-08-29 14:06   ` Nick Chan [this message]
2024-08-29 11:47 ` [PATCH RESEND 0/3] Add AIC support for A7-A11 SoCs Krzysztof Kozlowski

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=e6377027-c4e5-4fd2-abf4-63cf6282542d@gmail.com \
    --to=towinchenmi@gmail.com \
    --cc=alyssa@rosenzweig.io \
    --cc=asahi@lists.linux.dev \
    --cc=conor+dt@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=krzk+dt@kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=marcan@marcan.st \
    --cc=robh@kernel.org \
    --cc=sven@svenpeter.dev \
    --cc=tglx@linutronix.de \
    --cc=~postmarketos/upstreaming@lists.sr.ht \
    /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.