[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v2 05/10] net: cadence_gem: Set ISR according to queue in use
From: |
Edgar E. Iglesias |
Subject: |
Re: [PATCH v2 05/10] net: cadence_gem: Set ISR according to queue in use |
Date: |
Mon, 4 May 2020 17:02:29 +0200 |
User-agent: |
Mutt/1.10.1 (2018-07-13) |
On Mon, May 04, 2020 at 07:36:03PM +0530, Sai Pavan Boddu wrote:
> Set ISR according to queue in use, added interrupt support for
> all queues.
Would it help to add a gem_set_isr(CadenceGEMState *s, int q, uint32_t flag) ?
Instead of open coding these if (q == 0) else... all over the place...
Anyway, the logic looks good to me:
Reviewed-by: Edgar E. Iglesias <address@hidden>
>
> Signed-off-by: Sai Pavan Boddu <address@hidden>
> ---
> hw/net/cadence_gem.c | 31 ++++++++++++++++++++++---------
> 1 file changed, 22 insertions(+), 9 deletions(-)
>
> diff --git a/hw/net/cadence_gem.c b/hw/net/cadence_gem.c
> index c532a14..beb38ec 100644
> --- a/hw/net/cadence_gem.c
> +++ b/hw/net/cadence_gem.c
> @@ -896,7 +896,13 @@ static void gem_get_rx_desc(CadenceGEMState *s, int q)
> if (rx_desc_get_ownership(s->rx_desc[q]) == 1) {
> DB_PRINT("descriptor 0x%" HWADDR_PRIx " owned by sw.\n", desc_addr);
> s->regs[GEM_RXSTATUS] |= GEM_RXSTATUS_NOBUF;
> - s->regs[GEM_ISR] |= GEM_INT_RXUSED & ~(s->regs[GEM_IMR]);
> + if (q == 0) {
> + s->regs[GEM_ISR] |= GEM_INT_RXUSED & ~(s->regs[GEM_IMR]);
> + } else {
> + s->regs[GEM_INT_Q1_STATUS + q - 1] |= GEM_INT_RXUSED &
> + ~(s->regs[GEM_INT_Q1_MASK + q -
> 1]);
> + }
> +
> /* Handle interrupt consequences */
> gem_update_int_status(s);
> }
> @@ -1071,8 +1077,12 @@ static ssize_t gem_receive(NetClientState *nc, const
> uint8_t *buf, size_t size)
> gem_receive_updatestats(s, buf, size);
>
> s->regs[GEM_RXSTATUS] |= GEM_RXSTATUS_FRMRCVD;
> - s->regs[GEM_ISR] |= GEM_INT_RXCMPL & ~(s->regs[GEM_IMR]);
> -
> + if (q == 0) {
> + s->regs[GEM_ISR] |= GEM_INT_RXCMPL & ~(s->regs[GEM_IMR]);
> + } else {
> + s->regs[GEM_INT_Q1_STATUS + q - 1] |= GEM_INT_RXCMPL &
> + ~(s->regs[GEM_INT_Q1_MASK + q - 1]);
> + }
> /* Handle interrupt consequences */
> gem_update_int_status(s);
>
> @@ -1223,12 +1233,12 @@ static void gem_transmit(CadenceGEMState *s)
> DB_PRINT("TX descriptor next: 0x%08x\n", s->tx_desc_addr[q]);
>
> s->regs[GEM_TXSTATUS] |= GEM_TXSTATUS_TXCMPL;
> - s->regs[GEM_ISR] |= GEM_INT_TXCMPL & ~(s->regs[GEM_IMR]);
> -
> + if (q == 0) {
> + s->regs[GEM_ISR] |= GEM_INT_TXCMPL & ~(s->regs[GEM_IMR]);
> + } else {
> /* Update queue interrupt status */
> - if (s->num_priority_queues > 1) {
> - s->regs[GEM_INT_Q1_STATUS + q] |=
> - GEM_INT_TXCMPL & ~(s->regs[GEM_INT_Q1_MASK + q]);
> + s->regs[GEM_INT_Q1_STATUS + q - 1] |=
> + GEM_INT_TXCMPL & ~s->regs[GEM_INT_Q1_MASK + q -
> 1];
> }
>
> /* Handle interrupt consequences */
> @@ -1280,7 +1290,10 @@ static void gem_transmit(CadenceGEMState *s)
>
> if (tx_desc_get_used(desc)) {
> s->regs[GEM_TXSTATUS] |= GEM_TXSTATUS_USED;
> - s->regs[GEM_ISR] |= GEM_INT_TXUSED & ~(s->regs[GEM_IMR]);
> + /* IRQ TXUSED is defined only for queue 0 */
> + if (q == 0) {
> + s->regs[GEM_ISR] |= GEM_INT_TXUSED & ~(s->regs[GEM_IMR]);
> + }
> gem_update_int_status(s);
> }
> }
> --
> 2.7.4
>
- Re: [PATCH v2 01/10] net: cadence_gem: Fix debug statements, (continued)
- [PATCH v2 02/10] net: cadence_gem: Fix the queue address update during wrap around, Sai Pavan Boddu, 2020/05/04
- [PATCH v2 03/10] net: cadence_gem: Fix irq update w.r.t queue, Sai Pavan Boddu, 2020/05/04
- [PATCH v2 04/10] net: cadence_gem: Define access permission for interrupt registers, Sai Pavan Boddu, 2020/05/04
- [PATCH v2 05/10] net: cadence_gem: Set ISR according to queue in use, Sai Pavan Boddu, 2020/05/04
- Re: [PATCH v2 05/10] net: cadence_gem: Set ISR according to queue in use,
Edgar E. Iglesias <=
- [PATCH v2 07/10] net: cadnece_gem: Update irq_read_clear field of designcfg_debug1 reg, Sai Pavan Boddu, 2020/05/04
- [PATCH v2 06/10] net: cadence_gem: Add support for jumbo frames, Sai Pavan Boddu, 2020/05/04
- [PATCH v2 08/10] net: cadence_gem: Update the reset value for interrupt mask register, Sai Pavan Boddu, 2020/05/04
- [PATCH v2 09/10] net: cadence_gem: TX_LAST bit should be set by guest, Sai Pavan Boddu, 2020/05/04
- [PATCH v2 10/10] net: cadence_gem: Fix RX address filtering, Sai Pavan Boddu, 2020/05/04