net: ipa: have gsi_irq_setup() return an error code

Change gsi_irq_setup() so it returns an error value, and introduce
gsi_irq_teardown() as its inverse.  Set the interrupt type (IRQ
rather than MSI) in gsi_irq_setup().

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Alex Elder 2021-08-03 09:01:01 -05:00 committed by David S. Miller
parent a7860a5f89
commit 1657d8a458

View file

@ -1807,9 +1807,12 @@ static void gsi_channel_teardown(struct gsi *gsi)
gsi_irq_disable(gsi);
}
/* Turn off all GSI interrupts initially; there is no gsi_irq_teardown() */
static void gsi_irq_setup(struct gsi *gsi)
/* Turn off all GSI interrupts initially */
static int gsi_irq_setup(struct gsi *gsi)
{
/* Writing 1 indicates IRQ interrupts; 0 would be MSI */
iowrite32(1, gsi->virt + GSI_CNTXT_INTSET_OFFSET);
/* Disable all interrupt types */
gsi_irq_type_update(gsi, 0);
@ -1831,6 +1834,12 @@ static void gsi_irq_setup(struct gsi *gsi)
}
iowrite32(0, gsi->virt + GSI_CNTXT_GSI_IRQ_EN_OFFSET);
return 0;
}
static void gsi_irq_teardown(struct gsi *gsi)
{
}
/* Get # supported channel and event rings; there is no gsi_ring_teardown() */
@ -1891,25 +1900,34 @@ int gsi_setup(struct gsi *gsi)
return -EIO;
}
gsi_irq_setup(gsi); /* No matching teardown required */
ret = gsi_irq_setup(gsi);
if (ret)
return ret;
ret = gsi_ring_setup(gsi); /* No matching teardown required */
if (ret)
return ret;
goto err_irq_teardown;
/* Initialize the error log */
iowrite32(0, gsi->virt + GSI_ERROR_LOG_OFFSET);
/* Writing 1 indicates IRQ interrupts; 0 would be MSI */
iowrite32(1, gsi->virt + GSI_CNTXT_INTSET_OFFSET);
ret = gsi_channel_setup(gsi);
if (ret)
goto err_irq_teardown;
return gsi_channel_setup(gsi);
return 0;
err_irq_teardown:
gsi_irq_teardown(gsi);
return ret;
}
/* Inverse of gsi_setup() */
void gsi_teardown(struct gsi *gsi)
{
gsi_channel_teardown(gsi);
gsi_irq_teardown(gsi);
}
/* Initialize a channel's event ring */