mps2-an511: Fix wiring of UART overflow interrupt lines

Message ID 1505232834-20890-1-git-send-email-peter.maydell@linaro.org
State Superseded
Headers show
Series
  • mps2-an511: Fix wiring of UART overflow interrupt lines
Related show

Commit Message

Peter Maydell Sept. 12, 2017, 4:13 p.m.
Fix an error that meant we were wiring every UART's overflow
interrupts into the same inputs 0 and 1 of the OR gate,
rather than giving each its own input.

Cc: qemu-stable@nongnu.org
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>

---
 hw/arm/mps2.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

-- 
2.7.4

Comments

Philippe Mathieu-Daudé Sept. 12, 2017, 4:22 p.m. | #1
(CC'ed qemu-arm)

Hi Peter,

On 09/12/2017 01:13 PM, Peter Maydell wrote:
> Fix an error that meant we were wiring every UART's overflow

> interrupts into the same inputs 0 and 1 of the OR gate,

> rather than giving each its own input.


oops tricky to catch

> 

> Cc: qemu-stable@nongnu.org

> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>

> ---

>   hw/arm/mps2.c | 4 ++--

>   1 file changed, 2 insertions(+), 2 deletions(-)

> 

> diff --git a/hw/arm/mps2.c b/hw/arm/mps2.c

> index abb0ab6..769cff8 100644

> --- a/hw/arm/mps2.c

> +++ b/hw/arm/mps2.c


         /* The overflow IRQs for all UARTs are ORed together.
          * Tx and Rx IRQs for each UART are ORed together.
          */

can you update this comment?

Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>


> @@ -287,8 +287,8 @@ static void mps2_common_init(MachineState *machine)

>               cmsdk_apb_uart_create(uartbase[i],

>                                     qdev_get_gpio_in(txrx_orgate_dev, 0),

>                                     qdev_get_gpio_in(txrx_orgate_dev, 1),

> -                                  qdev_get_gpio_in(orgate_dev, 0),

> -                                  qdev_get_gpio_in(orgate_dev, 1),

> +                                  qdev_get_gpio_in(orgate_dev, i * 2),

> +                                  qdev_get_gpio_in(orgate_dev, i * 2 + 1),

>                                     NULL,

>                                     uartchr, SYSCLK_FRQ);

>           }

>
Peter Maydell Sept. 12, 2017, 4:40 p.m. | #2
On 12 September 2017 at 17:22, Philippe Mathieu-Daudé <f4bug@amsat.org> wrote:
> (CC'ed qemu-arm)

>

> Hi Peter,

>

> On 09/12/2017 01:13 PM, Peter Maydell wrote:

>>

>> Fix an error that meant we were wiring every UART's overflow

>> interrupts into the same inputs 0 and 1 of the OR gate,

>> rather than giving each its own input.

>

>

> oops tricky to catch

>

>>

>> Cc: qemu-stable@nongnu.org

>> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>

>> ---

>>   hw/arm/mps2.c | 4 ++--

>>   1 file changed, 2 insertions(+), 2 deletions(-)

>>

>> diff --git a/hw/arm/mps2.c b/hw/arm/mps2.c

>> index abb0ab6..769cff8 100644

>> --- a/hw/arm/mps2.c

>> +++ b/hw/arm/mps2.c

>

>

>         /* The overflow IRQs for all UARTs are ORed together.

>          * Tx and Rx IRQs for each UART are ORed together.

>          */

>

> can you update this comment?


The comment is correct. "txrx_orgate_dev" is a 2-input OR gate,
which we create one of per UART. It ORs together the TX IRQ
and the RX IRQ. "orgate_dev" is a 10-input OR gate, which ORs
together the TX overflow IRQ and the RX overflow IRQ from each
UART. The bug here is just that we were using the wrong input
pins on orgate_dev.

thanks
-- PMM
Alistair Francis Sept. 12, 2017, 11:55 p.m. | #3
On Tue, Sep 12, 2017 at 9:13 AM, Peter Maydell <peter.maydell@linaro.org> wrote:
> Fix an error that meant we were wiring every UART's overflow

> interrupts into the same inputs 0 and 1 of the OR gate,

> rather than giving each its own input.

>

> Cc: qemu-stable@nongnu.org

> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>


Reviewed-by: Alistair Francis <alistair.francis@xilinx.com>


Thanks,
Alistair

> ---

>  hw/arm/mps2.c | 4 ++--

>  1 file changed, 2 insertions(+), 2 deletions(-)

>

> diff --git a/hw/arm/mps2.c b/hw/arm/mps2.c

> index abb0ab6..769cff8 100644

> --- a/hw/arm/mps2.c

> +++ b/hw/arm/mps2.c

> @@ -287,8 +287,8 @@ static void mps2_common_init(MachineState *machine)

>              cmsdk_apb_uart_create(uartbase[i],

>                                    qdev_get_gpio_in(txrx_orgate_dev, 0),

>                                    qdev_get_gpio_in(txrx_orgate_dev, 1),

> -                                  qdev_get_gpio_in(orgate_dev, 0),

> -                                  qdev_get_gpio_in(orgate_dev, 1),

> +                                  qdev_get_gpio_in(orgate_dev, i * 2),

> +                                  qdev_get_gpio_in(orgate_dev, i * 2 + 1),

>                                    NULL,

>                                    uartchr, SYSCLK_FRQ);

>          }

> --

> 2.7.4

>

>

Patch

diff --git a/hw/arm/mps2.c b/hw/arm/mps2.c
index abb0ab6..769cff8 100644
--- a/hw/arm/mps2.c
+++ b/hw/arm/mps2.c
@@ -287,8 +287,8 @@  static void mps2_common_init(MachineState *machine)
             cmsdk_apb_uart_create(uartbase[i],
                                   qdev_get_gpio_in(txrx_orgate_dev, 0),
                                   qdev_get_gpio_in(txrx_orgate_dev, 1),
-                                  qdev_get_gpio_in(orgate_dev, 0),
-                                  qdev_get_gpio_in(orgate_dev, 1),
+                                  qdev_get_gpio_in(orgate_dev, i * 2),
+                                  qdev_get_gpio_in(orgate_dev, i * 2 + 1),
                                   NULL,
                                   uartchr, SYSCLK_FRQ);
         }