diff mbox

bcm2835_aux: Swap RX and TX interrupt assignments

Message ID 1529355846-25102-1-git-send-email-linux@roeck-us.net (mailing list archive)
State New, archived
Headers show

Commit Message

Guenter Roeck June 18, 2018, 9:04 p.m. UTC
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.

Signed-off-by: Guenter Roeck <linux@roeck-us.net>
---
 hw/char/bcm2835_aux.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Comments

Guenter Roeck July 14, 2018, 1:53 p.m. UTC | #1
ping ...

On Mon, Jun 18, 2018 at 02:04:06PM -0700, Guenter Roeck wrote:
> 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.
> 
> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
> ---
>  hw/char/bcm2835_aux.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/hw/char/bcm2835_aux.c b/hw/char/bcm2835_aux.c
> index 370dc7e..0364596 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)
>  {
Paolo Bonzini July 15, 2018, 2:25 p.m. UTC | #2
On 14/07/2018 15:53, Guenter Roeck wrote:
> ping ...

Queued, thanks.

Paolo

> On Mon, Jun 18, 2018 at 02:04:06PM -0700, Guenter Roeck wrote:
>> 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.
>>
>> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
>> ---
>>  hw/char/bcm2835_aux.c | 4 ++--
>>  1 file changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/hw/char/bcm2835_aux.c b/hw/char/bcm2835_aux.c
>> index 370dc7e..0364596 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)
>>  {
Peter Maydell July 16, 2018, 1:48 p.m. UTC | #3
On 18 June 2018 at 22:04, Guenter Roeck <linux@roeck-us.net> wrote:
> 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.

Worth mentioning in the commit message that there is an
error in the BCM2835 datasheet for the TX_INT and RX_INT
bits in the AUX_MU_IER_REG description (as per
https://elinux.org/BCM2835_datasheet_errata)

thanks
-- PMM
Guenter Roeck July 16, 2018, 2:13 p.m. UTC | #4
On 07/16/2018 06:48 AM, Peter Maydell wrote:
> On 18 June 2018 at 22:04, Guenter Roeck <linux@roeck-us.net> wrote:
>> 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.
> 
> Worth mentioning in the commit message that there is an
> error in the BCM2835 datasheet for the TX_INT and RX_INT
> bits in the AUX_MU_IER_REG description (as per
> https://elinux.org/BCM2835_datasheet_errata)
> 

I didn't know that ;-). I found out the hard way.

Guenter
Peter Maydell July 16, 2018, 2:47 p.m. UTC | #5
On 16 July 2018 at 15:13, Guenter Roeck <linux@roeck-us.net> wrote:
> On 07/16/2018 06:48 AM, Peter Maydell wrote:
>>
>> On 18 June 2018 at 22:04, Guenter Roeck <linux@roeck-us.net> wrote:
>>>
>>> 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.
>>
>>
>> Worth mentioning in the commit message that there is an
>> error in the BCM2835 datasheet for the TX_INT and RX_INT
>> bits in the AUX_MU_IER_REG description (as per
>> https://elinux.org/BCM2835_datasheet_errata)
>>
>
> I didn't know that ;-). I found out the hard way.

I'll take this through target-arm.next (I have some other patches
for rc1 anyway) and adjust the commit message.

Paolo: you can drop it from your queue.

thanks
-- PMM
Paolo Bonzini July 16, 2018, 2:58 p.m. UTC | #6
On 16/07/2018 16:47, Peter Maydell wrote:
>> I didn't know that ;-). I found out the hard way.
> I'll take this through target-arm.next (I have some other patches
> for rc1 anyway) and adjust the commit message.
> 
> Paolo: you can drop it from your queue.

Done, thanks!

Paolo
diff mbox

Patch

diff --git a/hw/char/bcm2835_aux.c b/hw/char/bcm2835_aux.c
index 370dc7e..0364596 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)
 {