Marc Zyngier wrote: Can you please give the following hack a go and post the result
(including the full dmesg)?
Thanks,
M.
Code: Select all
index 32be5a03951f..8cf0cc9b7caf 100644
--- a/drivers/of/irq.c
+++ b/drivers/of/irq.c
@@ -156,14 +156,15 @@ int of_irq_parse_raw(const __be32 *addr, struct of_phandle_args *out_irq)
/* Now start the actual "proper" walk of the interrupt tree */
while (ipar != NULL) {
+ bool intc = of_property_read_bool(ipar, "interrupt-controller");
+
/*
* Now check if cursor is an interrupt-controller and
* if it is then we are done, unless there is an
* interrupt-map which takes precedence.
*/
imap = of_get_property(ipar, "interrupt-map", &imaplen);
- if (imap == NULL &&
- of_property_read_bool(ipar, "interrupt-controller")) {
+ if (imap == NULL && intc) {
pr_debug(" -> got it !\n");
return 0;
}
@@ -244,8 +245,14 @@ int of_irq_parse_raw(const __be32 *addr, struct of_phandle_args *out_irq)
pr_debug(" -> imaplen=%d\n", imaplen);
}
- if (!match)
+ if (!match) {
+ if (intc) {
+ pr_info("%pOF interrupt-map failed, using interrupt-controller\n", ipar);
+ return 0;
+ }
+
goto fail;
+ }
/*
* Successfully parsed an interrrupt-map translation; copy new
if (imap == NULL && intc) // If the return value isn't NULL then there isn't an interrupt-map. That means, this part was successful (&&) and "intc" will evaluated (Testing of interrupt-controller).
dmesg: https://pastebin.com/WXQsKrbb
Here is the alpha6 of kernel 5.16 with this patch: vmlinux-5.16-a6-2. You can use it with the kernel modules from the alpha6 package.
I reported the result to the kernel developers today.
Link: [PASEMI] Nemo board doesn't recognize any ATA disks with the pci-v5.16 updates