]> Git Repo - qemu.git/commitdiff
bcm2835_aux: Swap RX and TX interrupt assignments
authorGuenter Roeck <[email protected]>
Mon, 16 Jul 2018 16:18:42 +0000 (17:18 +0100)
committerPeter Maydell <[email protected]>
Mon, 16 Jul 2018 16:18:42 +0000 (17:18 +0100)
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 <[email protected]>
Message-id: 1529355846[email protected]
Reviewed-by: Peter Maydell <[email protected]>
[PMM: added NB about datasheet]
Signed-off-by: Peter Maydell <[email protected]>
hw/char/bcm2835_aux.c

index 370dc7e2968cd7fe1ef4196760c0b93d2d9a39b2..0364596c5524e83ffc6ee0d8d0d411a225dcc29e 100644 (file)
@@ -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)
 {
This page took 0.027721 seconds and 4 git commands to generate.