Skip to content

Commit 1657d8a

Browse files
Alex Elderdavem330
authored andcommitted
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 <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent a7860a5 commit 1657d8a

File tree

1 file changed

+25
-7
lines changed

1 file changed

+25
-7
lines changed

drivers/net/ipa/gsi.c

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1807,9 +1807,12 @@ static void gsi_channel_teardown(struct gsi *gsi)
18071807
gsi_irq_disable(gsi);
18081808
}
18091809

1810-
/* Turn off all GSI interrupts initially; there is no gsi_irq_teardown() */
1811-
static void gsi_irq_setup(struct gsi *gsi)
1810+
/* Turn off all GSI interrupts initially */
1811+
static int gsi_irq_setup(struct gsi *gsi)
18121812
{
1813+
/* Writing 1 indicates IRQ interrupts; 0 would be MSI */
1814+
iowrite32(1, gsi->virt + GSI_CNTXT_INTSET_OFFSET);
1815+
18131816
/* Disable all interrupt types */
18141817
gsi_irq_type_update(gsi, 0);
18151818

@@ -1831,6 +1834,12 @@ static void gsi_irq_setup(struct gsi *gsi)
18311834
}
18321835

18331836
iowrite32(0, gsi->virt + GSI_CNTXT_GSI_IRQ_EN_OFFSET);
1837+
1838+
return 0;
1839+
}
1840+
1841+
static void gsi_irq_teardown(struct gsi *gsi)
1842+
{
18341843
}
18351844

18361845
/* Get # supported channel and event rings; there is no gsi_ring_teardown() */
@@ -1891,25 +1900,34 @@ int gsi_setup(struct gsi *gsi)
18911900
return -EIO;
18921901
}
18931902

1894-
gsi_irq_setup(gsi); /* No matching teardown required */
1903+
ret = gsi_irq_setup(gsi);
1904+
if (ret)
1905+
return ret;
18951906

18961907
ret = gsi_ring_setup(gsi); /* No matching teardown required */
18971908
if (ret)
1898-
return ret;
1909+
goto err_irq_teardown;
18991910

19001911
/* Initialize the error log */
19011912
iowrite32(0, gsi->virt + GSI_ERROR_LOG_OFFSET);
19021913

1903-
/* Writing 1 indicates IRQ interrupts; 0 would be MSI */
1904-
iowrite32(1, gsi->virt + GSI_CNTXT_INTSET_OFFSET);
1914+
ret = gsi_channel_setup(gsi);
1915+
if (ret)
1916+
goto err_irq_teardown;
19051917

1906-
return gsi_channel_setup(gsi);
1918+
return 0;
1919+
1920+
err_irq_teardown:
1921+
gsi_irq_teardown(gsi);
1922+
1923+
return ret;
19071924
}
19081925

19091926
/* Inverse of gsi_setup() */
19101927
void gsi_teardown(struct gsi *gsi)
19111928
{
19121929
gsi_channel_teardown(gsi);
1930+
gsi_irq_teardown(gsi);
19131931
}
19141932

19151933
/* Initialize a channel's event ring */

0 commit comments

Comments
 (0)