bcm2835_aux: Swap RX and TX interrupt assignments
commit65e9f27f22ba273672a1960cabad0e6aae0fbba2
authorGuenter Roeck <linux@roeck-us.net>
Mon, 16 Jul 2018 16:18:42 +0000 (16 17:18 +0100)
committerPeter Maydell <peter.maydell@linaro.org>
Mon, 16 Jul 2018 16:18:42 +0000 (16 17:18 +0100)
tree4322a14af345419ae82d06acb813d3df7331ee1c
parentcccf96c3d4263125e6d2c23ad264001ca2e6fffa
bcm2835_aux: Swap RX and TX interrupt assignments

RX and TX interrupt bits were reversed, resulting in an endless sequence
of serial interupts in the emulated system and the following repeated
error message when booting Linux.

serial8250: too much work for irq61

This results in a boot failure most of the time.

Qemu command line used to reproduce the problem:

qemu-system-aarch64 -M raspi3 -m 1024 \
-kernel arch/arm64/boot/Image \
--append "rdinit=/sbin/init console=ttyS1,115200"
-initrd rootfs.cpio \
-dtb arch/arm64/boot/dts/broadcom/bcm2837-rpi-3-b.dtb \
-nographic -monitor null -serial null -serial stdio

This is with arm64:defconfig. The root file system was generated using
buildroot.

NB that this error likely arises from an erratum in the
BCM2835 datasheet where the TX and RX bits were swapped
in the AU_MU_IER_REG description (but correct for IIR):
 https://elinux.org/BCM2835_datasheet_errata#p12

Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Message-id: 1529355846-25102-1-git-send-email-linux@roeck-us.net
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
[PMM: added NB about datasheet]
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
hw/char/bcm2835_aux.c