All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dragan Mladjenovic <Dragan.Mladjenovic@syrmia.com>
To: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
Cc: Paul Burton <paulburton@kernel.org>,
	Serge Semin <fancer.lancer@gmail.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	Marc Zyngier <maz@kernel.org>,
	linux-mips@vger.kernel.org, linux-kernel@vger.kernel.org,
	Chao-ying Fu <cfu@wavecomp.com>
Subject: [PATCH 04/12] irqchip: mips-gic: Support multi-cluster in gic_with_each_online_cpu()
Date: Thu, 19 May 2022 20:51:17 +0200	[thread overview]
Message-ID: <20220519185125.11686-5-Dragan.Mladjenovic@syrmia.com> (raw)
In-Reply-To: <20220519185125.11686-1-Dragan.Mladjenovic@syrmia.com>

From: Paul Burton <paulburton@kernel.org>

Introduce support for multi-cluster GIC register access in
__gic_with_next_online_cpu(), and therefore in its user
gic_with_each_online_cpu(). We access registers in remote clusters using
the CM's GCR_CL_REDIRECT register, and so here we delegate to
mips_cm_lock_other() in order to configure this access.

With this done, users of gic_with_each_online_cpu() gain support for
multi-cluster with no further changes.

Signed-off-by: Paul Burton <paulburton@kernel.org>
Signed-off-by: Chao-ying Fu <cfu@wavecomp.com>

diff --git a/drivers/irqchip/irq-mips-gic.c b/drivers/irqchip/irq-mips-gic.c
index 4872bebe24cf..89a3c6d04e09 100644
--- a/drivers/irqchip/irq-mips-gic.c
+++ b/drivers/irqchip/irq-mips-gic.c
@@ -69,6 +69,20 @@ static int __gic_with_next_online_cpu(int prev)
 {
 	unsigned int cpu;
 
+	/*
+	 * Unlock access to the previous CPU's GIC local register block.
+	 *
+	 * Delegate to the CM locking code in the multi-cluster case, since
+	 * other clusters can only be accessed using GCR_CL_REDIRECT.
+	 *
+	 * In the single cluster case we don't need to do anything; the caller
+	 * is responsible for maintaining gic_lock & nothing should be
+	 * expecting any particular value of GIC_VL_OTHER so we can leave it
+	 * as-is.
+	 */
+	if ((prev != -1) && mips_cps_multicluster_cpus())
+		mips_cm_unlock_other();
+
 	/* Discover the next online CPU */
 	cpu = cpumask_next(prev, cpu_online_mask);
 
@@ -79,10 +93,16 @@ static int __gic_with_next_online_cpu(int prev)
 	/*
 	 * Lock access to the next CPU's GIC local register block.
 	 *
+	 * Delegate to the CM locking code in the multi-cluster case, since
+	 * other clusters can only be accessed using GCR_CL_REDIRECT.
+	 *
 	 * In the single cluster case we simply set GIC_VL_OTHER. The caller
 	 * holds gic_lock so nothing can clobber the value we write.
 	 */
-	write_gic_vl_other(mips_cm_vp_id(cpu));
+	if (mips_cps_multicluster_cpus())
+		mips_cm_lock_other_cpu(cpu, CM_GCR_Cx_OTHER_BLOCK_LOCAL);
+	else
+		write_gic_vl_other(mips_cm_vp_id(cpu));
 
 	return cpu;
 }
-- 
2.17.1


  parent reply	other threads:[~2022-05-19 18:52 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-05-19 18:51 [PATCH 00/12] MIPS: Support I6500 multi-cluster configuration Dragan Mladjenovic
2022-05-19 18:51 ` [PATCH 01/12] MIPS: CPS: Add a couple of multi-cluster utility functions Dragan Mladjenovic
2022-05-19 18:51 ` [PATCH 02/12] MIPS: GIC: Generate redirect block accessors Dragan Mladjenovic
2022-05-19 18:51 ` [PATCH 03/12] irqchip: mips-gic: Introduce gic_with_each_online_cpu() Dragan Mladjenovic
2022-05-20  8:38   ` Marc Zyngier
2022-05-23 10:30     ` Serge Semin
2022-05-19 18:51 ` Dragan Mladjenovic [this message]
2022-05-19 18:51 ` [PATCH 05/12] irqchip: mips-gic: Setup defaults in each cluster Dragan Mladjenovic
2022-05-19 18:51 ` [PATCH 06/12] irqchip: mips-gic: Multi-cluster support Dragan Mladjenovic
2022-05-19 18:51 ` [PATCH 07/12] clocksource: mips-gic-timer: Always use cluster 0 counter as clocksource Dragan Mladjenovic
2022-05-19 18:51 ` [PATCH 08/12] clocksource: mips-gic-timer: Enable counter when CPUs start Dragan Mladjenovic
2022-05-19 18:51 ` [PATCH 09/12] MIPS: pm-cps: Use per-CPU variables as per-CPU, not per-core Dragan Mladjenovic
2022-05-19 18:51 ` [PATCH 10/12] MIPS: CPS: Introduce struct cluster_boot_config Dragan Mladjenovic
2022-05-19 18:51 ` [PATCH 11/12] MIPS: Report cluster in /proc/cpuinfo Dragan Mladjenovic
2022-05-19 18:51 ` [PATCH 12/12] MIPS: CPS: Boot CPUs in secondary clusters Dragan Mladjenovic

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=20220519185125.11686-5-Dragan.Mladjenovic@syrmia.com \
    --to=dragan.mladjenovic@syrmia.com \
    --cc=cfu@wavecomp.com \
    --cc=fancer.lancer@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mips@vger.kernel.org \
    --cc=maz@kernel.org \
    --cc=paulburton@kernel.org \
    --cc=tglx@linutronix.de \
    --cc=tsbogend@alpha.franken.de \
    /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.