Subject: Re: [PASEMI] Nemo board doesn't recognize any ATA disks with the pci-v5.16 updates

From: Marc Zyngier <[email-masked]>
Date: Fri, 12 Nov 2021 13:41:16 +0000

On Fri, 12 Nov 2021 09:40:30 +0000,
Christian Zigotzky <[email-masked]> wrote:
> 
> On 11 November 2021 at 06:39 pm, Marc Zyngier wrote:
> > On Wed, 10 Nov 2021 18:07:24 +0000,
> > Christian Zigotzky <[email-masked]> wrote:
> >> On 09 November 2021 at 03:45 pm, Christian Zigotzky wrote:
> >>> Hello,
> >>> 
> >>> The Nemo board [1] doesn't recognize any ATA disks with the
> >> pci-v5.16 updates [2].
> >>> Error messages:
> >>> 
> >>> ata4.00: gc timeout cmd 0xec
> >>> ata4.00: failed to IDENTIFY (I/O error, error_mask=0x4)
> >>> ata1.00: gc timeout cmd 0xec
> >>> ata1.00: failed to IDENTIFY (I/O error, error_mask=0x4)
> >>> ata3.00: gc timeout cmd 0xec
> >>> ata3.00: failed to IDENTIFY (I/O error, error_mask=0x4)
> >>> 
> >>> I was able to revert the new pci-v5.16 updates [2]. After a new
> >> compiling, the kernel recognize all ATA disks correctly.
> >>> Could you please check the pci-v5.16 updates [2]?
> >>> 
> >>> Please find attached the kernel config.
> >>> 
> >>> Thanks,
> >>> Christian
> >>> 
> >>> [1] https://en.wikipedia.org/wiki/AmigaOne_X1000
> >>> [2]
> >> https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0c5c62ddf88c34bc83b66e4ac9beb2bb0e1887d4
> >> 
> >> Hi All,
> >> 
> >> Many thanks for your nice responses.
> >> 
> >> I bisected today [1]. 0412841812265734c306ba5ef8088bcb64d5d3bd
> >> (of/irq: Allow matching of an interrupt-map local to an interrupt
> >> controller) [2] is the first bad commit.
> > Can you please give the following hack a go and post the result
> > (including the full dmesg)?
> > 
> > Thanks,
> > 
> > 	M.
> > diff --git a/drivers/of/irq.c b/drivers/of/irq.c
> > 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
> > 
> The detecting of the ATA disks works with this patch! Well done!
> Thanks a lot!

Thanks for testing it. I'll turn that into a proper patch.

	M.

-- 
Without deviation from the norm, progress is not possible.