From: Hector Martin <marcan@marcan.st> To: Arnd Bergmann <arnd@kernel.org> Cc: Marc Zyngier <maz@kernel.org>, SoC Team <soc@kernel.org>, Linux ARM <linux-arm-kernel@lists.infradead.org>, Rob Herring <robh+dt@kernel.org>, "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>, DTML <devicetree@vger.kernel.org>, Olof Johansson <olof@lixom.net> Subject: Re: [PATCH 10/18] arm64: Introduce FIQ support Date: Tue, 9 Feb 2021 08:34:11 +0900 [thread overview] Message-ID: <2eecb7cb-1065-9eab-adad-409f10906062@marcan.st> (raw) In-Reply-To: <CAK8P3a1vmUJ0EpzU2+u2gy8WHCVV5ur9u-oTzU2BP=ddbXQeLQ@mail.gmail.com> On 08/02/2021 03.49, Arnd Bergmann wrote: > Ok, I had not realized the timer was level triggered. In case of the > timer, I suppose it could be either masked or acknowledged from the > fiq top-half handler when deferring to irq, but I agree that it means a > layering violation in either case. > > What might still work is an approach where FIQ is normally enabled, > and local_irq_disable() leaves it on, while local_irq_enable() turns > it on regardless of the current state. > > In this case, the fiq handler could run the timer function if interrupts > are enabled but just turn off fiqs when they are turned off, waiting > for the next local_irq_enable() to get us back in the state where > the handler can run. Not sure if that would buy us anything though, > or if that still requires platform specific conditionals in common code. It looks like Marc is just leaning towards making the IRQ and FIQ masks track each other unconditionally on all platforms anyway, so I'm going to try that for v2 (which is certainly the simpler solution). If this ends up somehow breaking any other platform we can deal with it in the way that makes most sense, once we know how it breaks :) >> * An exception seems to be non-HV timer interrupts firing while we have >> a VM guest running (HCR_EL2.TGE=0). This causes a single FIQ, and no >> more, which suggests there is a mask bit for guest timer FIQs somewhere >> that gets automatically set when the FIQ is delivered to the CPU core. >> I've yet to find where this bit lives, I'll be doing a brute force sweep >> of system register space soon to see if I can find it, and if there is >> anything else useful near it. > > Right. Maybe you can even find a bit that switches between FIQ and > IRQ mode for the timer, as that would solve the problem completely. > I think it's not that rare for irqchips to be configurable to either route > an interrupt one way or the other. That seems increasingly unlikely here; I tried poking all the AIC config bits and nothing switched those to FIQ (which is the converse). It looks like Apple has done something like use FIQ for all core-internal interrupt sources, and IRQ for AIC, and this is all seemingly quite hardwired. In particular, a subtlety I discovered about how flipping TGE to 1 with a guest timer interrupt pending only takes effect properly (i.e. FIQ fires, and you get a FIQ storm if unhandled, no auto-masking) after subsequently issuing an isb, makes me think all this FIQ stuff is seriously deeply tied into the instruction pipeline. It's probably not an IRQ line any more... -- Hector Martin (marcan@marcan.st) Public Key: https://mrcn.st/pub
WARNING: multiple messages have this Message-ID (diff)
From: Hector Martin <marcan@marcan.st> To: Arnd Bergmann <arnd@kernel.org> Cc: DTML <devicetree@vger.kernel.org>, Marc Zyngier <maz@kernel.org>, "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>, SoC Team <soc@kernel.org>, Rob Herring <robh+dt@kernel.org>, Olof Johansson <olof@lixom.net>, Linux ARM <linux-arm-kernel@lists.infradead.org> Subject: Re: [PATCH 10/18] arm64: Introduce FIQ support Date: Tue, 9 Feb 2021 08:34:11 +0900 [thread overview] Message-ID: <2eecb7cb-1065-9eab-adad-409f10906062@marcan.st> (raw) Message-ID: <20210208233411.A8A2HJvL1-gWqW9nO1YkQ9CfTrfz2IpP8eMY_2vC-80@z> (raw) In-Reply-To: <CAK8P3a1vmUJ0EpzU2+u2gy8WHCVV5ur9u-oTzU2BP=ddbXQeLQ@mail.gmail.com> On 08/02/2021 03.49, Arnd Bergmann wrote: > Ok, I had not realized the timer was level triggered. In case of the > timer, I suppose it could be either masked or acknowledged from the > fiq top-half handler when deferring to irq, but I agree that it means a > layering violation in either case. > > What might still work is an approach where FIQ is normally enabled, > and local_irq_disable() leaves it on, while local_irq_enable() turns > it on regardless of the current state. > > In this case, the fiq handler could run the timer function if interrupts > are enabled but just turn off fiqs when they are turned off, waiting > for the next local_irq_enable() to get us back in the state where > the handler can run. Not sure if that would buy us anything though, > or if that still requires platform specific conditionals in common code. It looks like Marc is just leaning towards making the IRQ and FIQ masks track each other unconditionally on all platforms anyway, so I'm going to try that for v2 (which is certainly the simpler solution). If this ends up somehow breaking any other platform we can deal with it in the way that makes most sense, once we know how it breaks :) >> * An exception seems to be non-HV timer interrupts firing while we have >> a VM guest running (HCR_EL2.TGE=0). This causes a single FIQ, and no >> more, which suggests there is a mask bit for guest timer FIQs somewhere >> that gets automatically set when the FIQ is delivered to the CPU core. >> I've yet to find where this bit lives, I'll be doing a brute force sweep >> of system register space soon to see if I can find it, and if there is >> anything else useful near it. > > Right. Maybe you can even find a bit that switches between FIQ and > IRQ mode for the timer, as that would solve the problem completely. > I think it's not that rare for irqchips to be configurable to either route > an interrupt one way or the other. That seems increasingly unlikely here; I tried poking all the AIC config bits and nothing switched those to FIQ (which is the converse). It looks like Apple has done something like use FIQ for all core-internal interrupt sources, and IRQ for AIC, and this is all seemingly quite hardwired. In particular, a subtlety I discovered about how flipping TGE to 1 with a guest timer interrupt pending only takes effect properly (i.e. FIQ fires, and you get a FIQ storm if unhandled, no auto-masking) after subsequently issuing an isb, makes me think all this FIQ stuff is seriously deeply tied into the instruction pipeline. It's probably not an IRQ line any more... -- Hector Martin (marcan@marcan.st) Public Key: https://mrcn.st/pub _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2021-02-08 23:35 UTC|newest] Thread overview: 240+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-02-04 20:39 [PATCH 00/18] Apple M1 SoC platform bring-up Hector Martin 2021-02-04 20:39 ` Hector Martin 2021-02-04 20:39 ` [PATCH 01/18] dt-bindings: vendor-prefixes: add AAPL prefix Hector Martin 2021-02-04 20:39 ` Hector Martin 2021-02-08 10:27 ` Krzysztof Kozlowski 2021-02-08 10:27 ` Krzysztof Kozlowski 2021-02-08 17:32 ` Rob Herring 2021-02-08 17:32 ` Rob Herring 2021-02-08 18:12 ` Krzysztof Kozlowski 2021-02-08 18:12 ` Krzysztof Kozlowski 2021-02-08 19:59 ` Arnd Bergmann 2021-02-08 19:59 ` Arnd Bergmann 2021-02-08 23:17 ` Hector Martin 2021-02-08 23:17 ` Hector Martin 2021-02-04 20:39 ` [PATCH 02/18] dt-bindings: arm: cpus: Add AAPL,firestorm & icestorm compatibles Hector Martin 2021-02-04 20:39 ` [PATCH 02/18] dt-bindings: arm: cpus: Add AAPL, firestorm " Hector Martin 2021-02-04 20:39 ` [PATCH 03/18] dt-bindings: arm: AAPL: Add bindings for Apple ARM platforms Hector Martin 2021-02-04 20:39 ` Hector Martin 2021-02-04 20:39 ` [PATCH 04/18] arm64: Kconfig: Introduce CONFIG_ARCH_APPLE Hector Martin 2021-02-04 20:39 ` Hector Martin 2021-02-06 13:17 ` Marc Zyngier 2021-02-06 13:17 ` Marc Zyngier 2021-02-07 8:05 ` Hector Martin 'marcan' 2021-02-07 8:05 ` Hector Martin 'marcan' 2021-02-04 20:39 ` [PATCH 05/18] tty: serial: samsung_tty: add support for Apple UARTs Hector Martin 2021-02-04 20:39 ` Hector Martin 2021-02-04 23:55 ` kernel test robot 2021-02-04 23:55 ` kernel test robot 2021-02-04 23:55 ` kernel test robot 2021-02-05 9:44 ` Hector Martin 'marcan' 2021-02-05 9:44 ` Hector Martin 'marcan' 2021-02-05 2:19 ` kernel test robot 2021-02-05 2:19 ` kernel test robot 2021-02-05 2:19 ` kernel test robot 2021-02-06 13:15 ` Marc Zyngier 2021-02-06 13:15 ` Marc Zyngier 2021-02-07 9:12 ` Hector Martin 'marcan' 2021-02-07 9:12 ` Hector Martin 'marcan' 2021-02-07 9:26 ` Hector Martin 'marcan' 2021-02-07 9:26 ` Hector Martin 'marcan' 2021-02-08 9:36 ` Krzysztof Kozlowski 2021-02-08 9:36 ` Krzysztof Kozlowski 2021-02-08 16:14 ` Hector Martin 2021-02-08 16:14 ` Hector Martin 2021-02-08 10:34 ` Marc Zyngier 2021-02-08 10:34 ` Marc Zyngier 2021-02-08 16:18 ` Hector Martin 2021-02-08 16:18 ` Hector Martin 2021-02-08 16:46 ` Greg Kroah-Hartman 2021-02-08 16:46 ` Greg Kroah-Hartman 2021-02-08 23:22 ` Hector Martin 2021-02-08 23:22 ` Hector Martin 2021-02-08 10:54 ` Krzysztof Kozlowski 2021-02-08 10:54 ` Krzysztof Kozlowski 2021-02-08 16:10 ` Hector Martin 2021-02-08 16:10 ` Hector Martin 2021-02-08 18:37 ` Krzysztof Kozlowski 2021-02-08 18:37 ` Krzysztof Kozlowski 2021-02-08 23:23 ` Hector Martin 2021-02-08 23:23 ` Hector Martin 2021-02-04 20:39 ` [PATCH 06/18] dt-bindings: serial: samsung: Add AAPL,s5l-uart compatible Hector Martin 2021-02-04 20:39 ` [PATCH 06/18] dt-bindings: serial: samsung: Add AAPL, s5l-uart compatible Hector Martin 2021-02-04 20:39 ` [PATCH 07/18] tty: serial: samsung_tty: enable for ARCH_APPLE Hector Martin 2021-02-04 20:39 ` Hector Martin 2021-02-04 21:16 ` Arnd Bergmann 2021-02-04 21:16 ` Arnd Bergmann 2021-02-04 21:27 ` Hector Martin 'marcan' 2021-02-04 21:27 ` Hector Martin 'marcan' 2021-02-04 20:39 ` [PATCH 08/18] arm64: cpufeature: Add a feature for FIQ support Hector Martin 2021-02-04 20:39 ` Hector Martin 2021-02-06 13:58 ` Marc Zyngier 2021-02-06 13:58 ` Marc Zyngier 2021-02-07 8:28 ` Hector Martin 'marcan' 2021-02-07 8:28 ` Hector Martin 'marcan' 2021-02-08 11:29 ` Marc Zyngier 2021-02-08 11:29 ` Marc Zyngier 2021-02-08 15:51 ` Hector Martin 2021-02-08 15:51 ` Hector Martin 2021-02-04 20:39 ` [PATCH 09/18] arm64: cputype: Add CPU types for the Apple M1 big/little cores Hector Martin 2021-02-04 20:39 ` Hector Martin 2021-02-04 20:39 ` [PATCH 10/18] arm64: Introduce FIQ support Hector Martin 2021-02-04 20:39 ` Hector Martin 2021-02-06 15:37 ` Marc Zyngier 2021-02-06 15:37 ` Marc Zyngier 2021-02-06 16:22 ` Arnd Bergmann 2021-02-06 16:22 ` Arnd Bergmann 2021-02-07 8:36 ` Hector Martin 'marcan' 2021-02-07 8:36 ` Hector Martin 'marcan' 2021-02-07 12:25 ` Arnd Bergmann 2021-02-07 12:25 ` Arnd Bergmann 2021-02-07 15:38 ` Hector Martin 'marcan' 2021-02-07 15:38 ` Hector Martin 'marcan' 2021-02-07 18:49 ` Arnd Bergmann 2021-02-07 18:49 ` Arnd Bergmann 2021-02-08 23:34 ` Hector Martin [this message] 2021-02-08 23:34 ` Hector Martin 2021-02-07 8:47 ` Hector Martin 'marcan' 2021-02-07 8:47 ` Hector Martin 'marcan' 2021-02-08 11:30 ` Marc Zyngier 2021-02-08 11:30 ` Marc Zyngier 2021-02-04 20:39 ` [PATCH 11/18] arm64: Kconfig: Require FIQ support for ARCH_APPLE Hector Martin 2021-02-04 20:39 ` Hector Martin 2021-02-06 15:46 ` Marc Zyngier 2021-02-06 15:46 ` Marc Zyngier 2021-02-07 9:23 ` Hector Martin 'marcan' 2021-02-07 9:23 ` Hector Martin 'marcan' 2021-02-08 12:05 ` Marc Zyngier 2021-02-08 12:05 ` Marc Zyngier 2021-02-08 15:48 ` Hector Martin 2021-02-08 15:48 ` Hector Martin 2021-02-04 20:39 ` [PATCH 12/18] arm64: setup: Use nGnRnE IO mappings for fixmap on Apple platforms Hector Martin 2021-02-04 20:39 ` Hector Martin 2021-02-04 22:25 ` Arnd Bergmann 2021-02-04 22:25 ` Arnd Bergmann 2021-02-04 20:39 ` [PATCH 13/18] arm64: ioremap: use nGnRnE mappings on platforms that require it Hector Martin 2021-02-04 20:39 ` Hector Martin 2021-02-04 22:21 ` Arnd Bergmann 2021-02-04 22:21 ` Arnd Bergmann 2021-02-08 22:57 ` Arnd Bergmann 2021-02-08 22:57 ` Arnd Bergmann 2021-02-08 23:20 ` Mark Kettenis 2021-02-08 23:20 ` Mark Kettenis 2021-02-09 0:25 ` Hector Martin 2021-02-09 0:25 ` Hector Martin 2021-02-09 9:15 ` Arnd Bergmann 2021-02-09 9:15 ` Arnd Bergmann 2021-02-09 9:58 ` Mark Kettenis 2021-02-09 9:58 ` Mark Kettenis 2021-02-09 11:22 ` Hector Martin 2021-02-09 11:22 ` Hector Martin 2021-02-09 9:35 ` Arnd Bergmann 2021-02-09 9:35 ` Arnd Bergmann 2021-02-10 12:24 ` Hector Martin 2021-02-10 12:24 ` Hector Martin 2021-02-10 13:40 ` Mark Kettenis 2021-02-10 13:40 ` Mark Kettenis 2021-02-04 20:39 ` [PATCH 14/18] dt-bindings: interrupt-controller: Add DT bindings for apple-aic Hector Martin 2021-02-04 20:39 ` Hector Martin 2021-02-09 23:07 ` Rob Herring 2021-02-09 23:07 ` Rob Herring 2021-02-04 20:39 ` [PATCH 15/18] irqchip/apple-aic: Add support for the Apple Interrupt Controller Hector Martin 2021-02-04 20:39 ` Hector Martin 2021-02-04 21:37 ` Arnd Bergmann 2021-02-04 21:37 ` Arnd Bergmann 2021-02-04 22:04 ` Hector Martin 'marcan' 2021-02-04 22:04 ` Hector Martin 'marcan' 2021-02-04 23:04 ` Arnd Bergmann 2021-02-04 23:04 ` Arnd Bergmann 2021-02-05 7:41 ` Hector Martin 'marcan' 2021-02-05 7:41 ` Hector Martin 'marcan' 2021-02-05 10:33 ` Arnd Bergmann 2021-02-05 10:33 ` Arnd Bergmann 2021-02-05 2:27 ` kernel test robot 2021-02-05 2:27 ` kernel test robot 2021-02-05 2:27 ` kernel test robot 2021-02-05 9:45 ` Hector Martin 'marcan' 2021-02-05 9:45 ` Hector Martin 'marcan' 2021-02-08 9:25 ` Marc Zyngier 2021-02-08 9:25 ` Marc Zyngier 2021-02-08 10:29 ` Arnd Bergmann 2021-02-08 10:29 ` Arnd Bergmann 2021-02-08 11:13 ` Hector Martin 'marcan' 2021-02-08 11:13 ` Hector Martin 'marcan' 2021-02-08 11:21 ` Arnd Bergmann 2021-02-08 11:21 ` Arnd Bergmann 2021-02-08 11:36 ` Marc Zyngier 2021-02-08 11:36 ` Marc Zyngier 2021-02-08 12:17 ` Arnd Bergmann 2021-02-08 12:17 ` Arnd Bergmann 2021-02-08 15:31 ` Hector Martin 2021-02-08 15:31 ` Hector Martin 2021-02-09 6:20 ` Hector Martin 2021-02-09 6:20 ` Hector Martin 2021-02-04 20:39 ` [PATCH 16/18] irqchip/apple-aic: Add SMP / IPI support Hector Martin 2021-02-04 20:39 ` Hector Martin 2021-02-04 20:39 ` [PATCH 17/18] dt-bindings: display: add AAPL,simple-framebuffer Hector Martin 2021-02-04 20:39 ` Hector Martin 2021-02-04 20:39 ` [PATCH 18/18] arm64: apple: Add initial Mac Mini 2020 (M1) devicetree Hector Martin 2021-02-04 20:39 ` Hector Martin 2021-02-04 21:29 ` Arnd Bergmann 2021-02-04 21:29 ` Arnd Bergmann 2021-02-04 21:44 ` Hector Martin 'marcan' 2021-02-04 21:44 ` Hector Martin 'marcan' 2021-02-04 23:08 ` Arnd Bergmann 2021-02-04 23:08 ` Arnd Bergmann 2021-02-05 7:11 ` Hector Martin 'marcan' 2021-02-05 7:11 ` Hector Martin 'marcan' 2021-02-05 12:43 ` Arnd Bergmann 2021-02-05 12:43 ` Arnd Bergmann 2021-02-08 11:04 ` Krzysztof Kozlowski 2021-02-08 11:04 ` Krzysztof Kozlowski 2021-02-08 11:56 ` Hector Martin 'marcan' 2021-02-08 11:56 ` Hector Martin 'marcan' 2021-02-08 12:13 ` Krzysztof Kozlowski 2021-02-08 12:13 ` Krzysztof Kozlowski 2021-02-08 12:40 ` Arnd Bergmann 2021-02-08 12:40 ` Arnd Bergmann 2021-02-08 14:12 ` Hector Martin 2021-02-08 14:12 ` Hector Martin 2021-02-08 17:58 ` Rob Herring 2021-02-08 17:58 ` Rob Herring 2021-02-09 0:32 ` Hector Martin 2021-02-09 0:32 ` Hector Martin 2021-02-08 19:14 ` Rob Herring 2021-02-08 19:14 ` Rob Herring 2021-02-09 0:49 ` Hector Martin 2021-02-09 0:49 ` Hector Martin 2021-02-09 2:05 ` Rob Herring 2021-02-09 2:05 ` Rob Herring 2021-02-10 10:19 ` Tony Lindgren 2021-02-10 10:19 ` Tony Lindgren 2021-02-10 11:07 ` Hector Martin 2021-02-10 11:07 ` Hector Martin 2021-02-10 11:34 ` Tony Lindgren 2021-02-10 11:34 ` Tony Lindgren 2021-02-10 11:43 ` Hector Martin 2021-02-10 11:43 ` Hector Martin 2021-02-10 12:24 ` Daniel Palmer 2021-02-10 12:24 ` Daniel Palmer 2021-02-10 12:24 ` Daniel Palmer 2021-02-10 12:54 ` Tony Lindgren 2021-02-10 12:54 ` Tony Lindgren 2021-02-10 12:56 ` Hector Martin 2021-02-10 12:56 ` Hector Martin 2021-02-10 12:55 ` Krzysztof Kozlowski 2021-02-10 12:55 ` Krzysztof Kozlowski 2021-02-10 13:19 ` Tony Lindgren 2021-02-10 13:19 ` Tony Lindgren 2021-02-10 13:25 ` Krzysztof Kozlowski 2021-02-10 13:25 ` Krzysztof Kozlowski 2021-02-08 12:27 ` Marc Zyngier 2021-02-08 12:27 ` Marc Zyngier 2021-02-08 14:53 ` Hector Martin 2021-02-08 14:53 ` Hector Martin 2021-02-08 15:36 ` Marc Zyngier 2021-02-08 15:36 ` Marc Zyngier 2021-02-04 22:43 ` [PATCH 00/18] Apple M1 SoC platform bring-up Arnd Bergmann 2021-02-04 22:43 ` Arnd Bergmann 2021-02-05 11:35 ` Hector Martin 'marcan' 2021-02-05 11:35 ` Hector Martin 'marcan'
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=2eecb7cb-1065-9eab-adad-409f10906062@marcan.st \ --to=marcan@marcan.st \ --cc=arnd@kernel.org \ --cc=devicetree@vger.kernel.org \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-kernel@vger.kernel.org \ --cc=maz@kernel.org \ --cc=olof@lixom.net \ --cc=robh+dt@kernel.org \ --cc=soc@kernel.org \ /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: linkBe 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.