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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxx/

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.



[Index of Archives]     [Video for Linux]     [Yosemite News]     [Linux S/390]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux