All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/6] irqchip/apple-aic: Add support for AICv2
@ 2021-12-09  4:32 ` Hector Martin
  0 siblings, 0 replies; 50+ messages in thread
From: Hector Martin @ 2021-12-09  4:32 UTC (permalink / raw)
  To: Thomas Gleixner, Marc Zyngier, Rob Herring
  Cc: Hector Martin, Sven Peter, Alyssa Rosenzweig, linux-arm-kernel,
	linux-kernel, devicetree

Hi folks,

In the t6000/t6001 (M1 Pro / Max) SoCs, Apple introduced a new version
of their interrupt controller. This is a significant departure from
AICv1 and seems designed to better scale to larger chips. This series
adds support for it to the existing AIC driver.

Gone are CPU affinities; instead there seems to be some kind of
"automagic" dispatch to willing CPU cores, and cores can also opt-out
via an IMP-DEF sysreg (!). Right now the bootloader just sets up all
cores to accept IRQs, and we ignore all this and let the magic
algorithm pick a CPU to accept the IRQ. In the future, we might start
making use of these finer-grained capabilities for e.g. better
real-time guarantees (CPUs running RT threads might opt out of IRQs).

Legacy IPI support is also gone, so this implements Fast IPI support.
Fast IPIs are implemented entirely in the CPU core complexes, using
FIQs and IMP-DEF sysregs. This is also supported on t8103/M1, so we
enable it there too, but we keep the legacy AIC IPI codepath in case
it is useful for backporting to older chips.

This also adds support for multi-die AIC2 controllers. While no
multi-die products exist yet, the AIC2 in t600x is built to support
up to 2 dies, and it's pretty clear how it works, so let's implement
it. If we're lucky, when multi-die products roll around, this will
let us support them with only DT changes. In order to support the
extra die dimension, this introduces a 4-argument IRQ phandle form
(3-argument is always supported and just implies die 0).

All register offsets are computed based on capability register values,
which should allow forward-compatibility with future AIC2 variants...
except for one. For some inexplicable reason, the number of actually
implemented die register sets is nowhere to be found (t600x has 2,
but claims 1 die in use and 8 dies max, neither of which is what we
need), and this is necessary to compute the event register offset,
which is page-aligned after the die register sets. We have no choice
but to stick this offset in the device tree... which is the same thing
Apple do in their ADT.

Hector Martin (6):
  dt-bindings: interrupt-controller: apple,aic: Add apple,aic2 support
  irqchip/apple-aic: Add Fast IPI support
  irqchip/apple-aic: Switch to irq_domain_create_tree and sparse hwirqs
  irqchip/apple-aic: Dynamically compute register offsets
  irqchip/apple-aic: Support multiple dies
  irqchip/apple-aic: Add support for AICv2

 .../interrupt-controller/apple,aic.yaml       |  62 ++-
 drivers/irqchip/irq-apple-aic.c               | 419 ++++++++++++++----
 2 files changed, 393 insertions(+), 88 deletions(-)

-- 
2.33.0


^ permalink raw reply	[flat|nested] 50+ messages in thread

end of thread, other threads:[~2021-12-20 14:05 UTC | newest]

Thread overview: 50+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-12-09  4:32 [PATCH 0/6] irqchip/apple-aic: Add support for AICv2 Hector Martin
2021-12-09  4:32 ` Hector Martin
2021-12-09  4:32 ` [PATCH 1/6] dt-bindings: interrupt-controller: apple,aic: Add apple,aic2 support Hector Martin
2021-12-09  4:32   ` [PATCH 1/6] dt-bindings: interrupt-controller: apple, aic: Add apple, aic2 support Hector Martin
2021-12-09 17:28   ` [PATCH 1/6] dt-bindings: interrupt-controller: apple,aic: Add apple,aic2 support Rob Herring
2021-12-09 17:28     ` Rob Herring
2021-12-11 12:28     ` Hector Martin
2021-12-11 12:28       ` Hector Martin
2021-12-11 12:44       ` Marc Zyngier
2021-12-11 12:44         ` [PATCH 1/6] dt-bindings: interrupt-controller: apple, aic: Add apple, aic2 support Marc Zyngier
2021-12-11 12:52         ` [PATCH 1/6] dt-bindings: interrupt-controller: apple,aic: Add apple,aic2 support Hector Martin
2021-12-11 12:52           ` Hector Martin
2021-12-11 12:49       ` Mark Kettenis
2021-12-11 12:49         ` Mark Kettenis
2021-12-09  4:32 ` [PATCH 2/6] irqchip/apple-aic: Add Fast IPI support Hector Martin
2021-12-09  4:32   ` Hector Martin
2021-12-12 12:21   ` Marc Zyngier
2021-12-12 12:21     ` Marc Zyngier
2021-12-18  5:31     ` Hector Martin
2021-12-18  5:31       ` Hector Martin
2021-12-20 12:43       ` Marc Zyngier
2021-12-20 12:43         ` Marc Zyngier
2021-12-09  4:32 ` [PATCH 3/6] irqchip/apple-aic: Switch to irq_domain_create_tree and sparse hwirqs Hector Martin
2021-12-09  4:32   ` Hector Martin
2021-12-12 14:37   ` Marc Zyngier
2021-12-12 14:37     ` Marc Zyngier
2021-12-18  5:36     ` Hector Martin
2021-12-18  5:36       ` Hector Martin
2021-12-09  4:32 ` [PATCH 4/6] irqchip/apple-aic: Dynamically compute register offsets Hector Martin
2021-12-09  4:32   ` Hector Martin
2021-12-12 18:26   ` Marc Zyngier
2021-12-12 18:26     ` Marc Zyngier
2021-12-18  5:37     ` Hector Martin
2021-12-18  5:37       ` Hector Martin
2021-12-09  4:32 ` [PATCH 5/6] irqchip/apple-aic: Support multiple dies Hector Martin
2021-12-09  4:32   ` Hector Martin
2021-12-13 16:10   ` Marc Zyngier
2021-12-13 16:10     ` Marc Zyngier
2021-12-18  5:39     ` Hector Martin
2021-12-18  5:39       ` Hector Martin
2021-12-20 13:38       ` Marc Zyngier
2021-12-20 13:38         ` Marc Zyngier
2021-12-09  4:32 ` [PATCH 6/6] irqchip/apple-aic: Add support for AICv2 Hector Martin
2021-12-09  4:32   ` Hector Martin
2021-12-12 18:47   ` Marc Zyngier
2021-12-12 18:47     ` Marc Zyngier
2021-12-18  6:02     ` Hector Martin
2021-12-18  6:02       ` Hector Martin
2021-12-20 13:52       ` Marc Zyngier
2021-12-20 13:52         ` Marc Zyngier

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.