Commit 1657d8a4 authored by Alex Elder's avatar Alex Elder Committed by David S. Miller

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: default avatarAlex Elder <elder@linaro.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent a7860a5f
...@@ -1807,9 +1807,12 @@ static void gsi_channel_teardown(struct gsi *gsi) ...@@ -1807,9 +1807,12 @@ static void gsi_channel_teardown(struct gsi *gsi)
gsi_irq_disable(gsi); gsi_irq_disable(gsi);
} }
/* Turn off all GSI interrupts initially; there is no gsi_irq_teardown() */ /* Turn off all GSI interrupts initially */
static void gsi_irq_setup(struct gsi *gsi) 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 */ /* Disable all interrupt types */
gsi_irq_type_update(gsi, 0); gsi_irq_type_update(gsi, 0);
...@@ -1831,6 +1834,12 @@ static void gsi_irq_setup(struct gsi *gsi) ...@@ -1831,6 +1834,12 @@ static void gsi_irq_setup(struct gsi *gsi)
} }
iowrite32(0, gsi->virt + GSI_CNTXT_GSI_IRQ_EN_OFFSET); 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() */ /* Get # supported channel and event rings; there is no gsi_ring_teardown() */
...@@ -1891,25 +1900,34 @@ int gsi_setup(struct gsi *gsi) ...@@ -1891,25 +1900,34 @@ int gsi_setup(struct gsi *gsi)
return -EIO; 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 */ ret = gsi_ring_setup(gsi); /* No matching teardown required */
if (ret) if (ret)
return ret; goto err_irq_teardown;
/* Initialize the error log */ /* Initialize the error log */
iowrite32(0, gsi->virt + GSI_ERROR_LOG_OFFSET); iowrite32(0, gsi->virt + GSI_ERROR_LOG_OFFSET);
/* Writing 1 indicates IRQ interrupts; 0 would be MSI */ ret = gsi_channel_setup(gsi);
iowrite32(1, gsi->virt + GSI_CNTXT_INTSET_OFFSET); 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() */ /* Inverse of gsi_setup() */
void gsi_teardown(struct gsi *gsi) void gsi_teardown(struct gsi *gsi)
{ {
gsi_channel_teardown(gsi); gsi_channel_teardown(gsi);
gsi_irq_teardown(gsi);
} }
/* Initialize a channel's event ring */ /* Initialize a channel's event ring */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment