On 10 March 2018 at 23:04, Guenter Roeck <li...@roeck-us.net> wrote:
> The sabrelite machine model used by qemu-system-arm is based on the
> Freescale/NXP i.MX6Q processor. This SoC has an on-board ethernet
> controller which is supported in QEMU using the imx_fec.c module
> (actually called imx.enet for this model.)
> The include/hw/arm/fsm-imx6.h file defines the interrupt vectors for the
> imx.enet device like this:
> #define FSL_IMX6_ENET_MAC_1588_IRQ 118
> #define FSL_IMX6_ENET_MAC_IRQ 119
> According to https://www.nxp.com/docs/en/reference-manual/IMX6DQRM.pdf,
> page 225, in Table 3-1. ARM Cortex A9 domain interrupt summary,
> interrupts are as follows.
> 150 ENET MAC 0 IRQ
> 151 ENET MAC 0 1588 Timer interrupt
> 150 - 32 == 118
> 151 - 32 == 119
> In other words, the vector definitions in the fsl-imx6.h file are reversed.
> Fixing the interrupts alone causes problems with older Linux kernels:
> The Ethernet interface will fail to probe with Linux v4.9 and earlier.
> Linux v4.1 and earlier will crash due to a bug in Ethernet driver probe
> error handling. This is a Linux kernel problem, not a qemu problem:
> the Linux kernel only worked by accident since it requested both interrupts.
> For backward compatibility, generate the Ethernet interrupt on both interrupt
> lines. This was shown to work from all Linux kernel releases starting with
> Link: https://bugs.launchpad.net/qemu/+bug/1753309
> Signed-off-by: Guenter Roeck <li...@roeck-us.net>
Applied to target-arm.next for 2.12.
Thanks to everybody who helped in identifying what the behaviour here
was and coming up with this useful workaround to avoid breaking