[PATCH 1/3] ARM: PCI: versatile: Fix map_irq function to match hardware
Guenter Roeck
linux at roeck-us.net
Thu Aug 22 14:01:36 EDT 2013
On Thu, Aug 22, 2013 at 05:47:48PM +0100, Peter Maydell wrote:
> The PCI controller code for the Versatile board has never had the
> correct IRQ mapping for hardware. For many years it had an odd
> mapping ("all interrupts are int 27") which aligned with the
> equivalent bug in QEMU. However as of commit 1bc39ac5dab265
> the mapping changed and no longer matched either hardware or QEMU,
> with the result that any PCI card beyond the first in QEMU would
> not have functioning interrupts; for example a boot with a SCSI
> controller would time out as follows:
>
> ------------
> sym0: <895a> rev 0x0 at pci 0000:00:0d.0 irq 92
> sym0: SCSI BUS has been reset.
> scsi0 : sym-2.2.3
> [...]
> scsi 0:0:0:0: ABORT operation started
> scsi 0:0:0:0: ABORT operation timed-out.
> scsi 0:0:0:0: DEVICE RESET operation started
> scsi 0:0:0:0: DEVICE RESET operation timed-out.
> scsi 0:0:0:0: BUS RESET operation started
> scsi 0:0:0:0: BUS RESET operation timed-out.
> scsi 0:0:0:0: HOST RESET operation started
> sym0: SCSI BUS has been reset
> ------------
>
> Fix the mapping so that it matches real hardware (checked against the
> schematics for PB926 and backplane, and tested against the hardware).
> This allows PCI cards using interrupts to work on hardware for the
> first time; this change will also work with QEMU 1.5 or later, where
> the equivalent bugs in the modelling of the hardware have been fixed.
>
> Although QEMU will attempt to autodetect whether the kernel is
> expecting the long-standing "everything is int 27" mapping or the one
> hardware has, for certainty we force it into "definitely behave like
> hardware mode"; this will avoid unexpected surprises later if we
> implement sparse irqs. This is harmless on hardware.
>
> Thanks to Paul Gortmaker for bisecting the problem and finding an initial
> solution, to Russell King for providing the correct interrupt mapping,
> and to Guenter Roeck for providing an initial version of this patch
> and prodding me into relocating the hardware and retesting everything.
>
> Signed-off-by: Peter Maydell <peter.maydell at linaro.org>
Tested-by: Guenter Roeck <linux at roeck-us.net>
Patches applied to 3.11-rc6 and 3.10.9, loaded qemu and verified that
access to SCSI controller is working. qemu version 1.5.2.
Guenter
More information about the linux-arm-kernel
mailing list