summaryrefslogtreecommitdiffstats
path: root/hw/char/bcm2835_aux.c
diff options
context:
space:
mode:
authorGuenter Roeck2018-07-16 18:18:42 +0200
committerPeter Maydell2018-07-16 18:18:42 +0200
commit65e9f27f22ba273672a1960cabad0e6aae0fbba2 (patch)
tree4322a14af345419ae82d06acb813d3df7331ee1c /hw/char/bcm2835_aux.c
parenthw/arm/bcm2836: Mark the bcm2836 / bcm2837 devices with user_creatable = false (diff)
downloadqemu-65e9f27f22ba273672a1960cabad0e6aae0fbba2.tar.gz
qemu-65e9f27f22ba273672a1960cabad0e6aae0fbba2.tar.xz
qemu-65e9f27f22ba273672a1960cabad0e6aae0fbba2.zip
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>
Diffstat (limited to 'hw/char/bcm2835_aux.c')
-rw-r--r--hw/char/bcm2835_aux.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/hw/char/bcm2835_aux.c b/hw/char/bcm2835_aux.c
index 370dc7e296..0364596c55 100644
--- a/hw/char/bcm2835_aux.c
+++ b/hw/char/bcm2835_aux.c
@@ -39,8 +39,8 @@
#define AUX_MU_BAUD_REG 0x68
/* bits in IER/IIR registers */
-#define TX_INT 0x1
-#define RX_INT 0x2
+#define RX_INT 0x1
+#define TX_INT 0x2
static void bcm2835_aux_update(BCM2835AuxState *s)
{