Re: Linux 6.4.4 on m68k - Q40 - pata_falcon causes oops at boot time

Finn Thain
2023-07-23T09:59:03Z

On Sun, 23 Jul 2023, Geert Uytterhoeven wrote:

> >
> > First the correct ISA port address (0x3f6) is translated to the
> > correct MMIO address (0xff400000 + 4 * 0x3f6 = 0xff400fd8). This is
> > done when the platform device is declared in arch/m68k/q40/config.c
> > around line 288.
> >
> > Then this address is passed to pata_falcon which computes the correct
> > MMIO addresses for the ATA task file registers in
> > drivers/ata/pata_falcon.c around line 168 (ap->ioaddr.altstatus_addr =
> > 0xff400fd8 + 1 = 0xff400fd9)
> >
> > The access to the hardware registers is performed in
> > drivers/ata/libata-sff.c which uses ioread8/iowrite8. These functions
> > are defined in lib/iomap.c. These functions look at the address passed
> > it, determine that it is an MMIO address, and pass it to readb/writeb.
> > This is the first error, we actually want to do an ISA I/O cycle, not
> > memory cycle, but being passed a pre-translated address confuses these
> > two functions.
> >
> > arch/m68k/include/asm/io_mm.h defines inb/outb/readb/writeb etc. They
> > translate the provided address into the MMIO address in the Q40s
> > physical address space and then perform the MMIO access. This is
> > where the second, unnecessary, translation takes place, and the
> > resulting address is wrong: (0xff800000 + 1 + 4 * 0xff400fd9) &
> > 0xffffffff = 0xfc803f65 -- and this is the address accessed when we
> > get the oops.
>

Could be related to the bug that Michael tackled here?
https://lore.kernel.org/linux-m68k/1623290683-17859-1-git-send-email-schmitzmic@gmail.com/

> Looks like something was missed in commit 44b1fbc0f5f30e66 ("m68k/q40:
> Replace q40ide driver with pata_falcon and falconide") in v5.14. Before,
> Q40 used its own IDE driver (q40ide, CONFIG_BLK_DEV_Q40IDE).

Could be that too.

> It might be a good idea to verify that IDE works in v5.13

Yes, please do.