From 625894c377ba266c0044675b53f05d65db6355b6 Mon Sep 17 00:00:00 2001 From: Jonas Gorski Date: Sun, 8 Jul 2012 13:07:52 +0200 Subject: [PATCH 38/84] BCM63XX: allow enetsw without tx irq --- arch/mips/bcm63xx/dev-enet.c | 2 ++ drivers/net/ethernet/broadcom/bcm63xx_enet.c | 18 +++++++++++------- 2 files changed, 13 insertions(+), 7 deletions(-) --- a/arch/mips/bcm63xx/dev-enet.c +++ b/arch/mips/bcm63xx/dev-enet.c @@ -236,6 +236,8 @@ bcm63xx_enetsw_register(const struct bcm enetsw_res[0].end += RSET_ENETSW_SIZE - 1; enetsw_res[1].start = bcm63xx_get_irq_number(IRQ_ENETSW_RXDMA0); enetsw_res[2].start = bcm63xx_get_irq_number(IRQ_ENETSW_TXDMA0); + if (!enetsw_res[2].start) + enetsw_res[2].start = -1; memcpy(bcm63xx_enetsw_device.dev.platform_data, pd, sizeof (*pd)); --- a/drivers/net/ethernet/broadcom/bcm63xx_enet.c +++ b/drivers/net/ethernet/broadcom/bcm63xx_enet.c @@ -2151,10 +2151,12 @@ static int bcm_enetsw_open(struct net_de if (ret) goto out_freeirq; - ret = request_irq(priv->irq_tx, bcm_enet_isr_dma, - IRQF_DISABLED, dev->name, dev); - if (ret) - goto out_freeirq_rx; + if (priv->irq_tx != -1) { + ret = request_irq(priv->irq_tx, bcm_enet_isr_dma, + IRQF_DISABLED, dev->name, dev); + if (ret) + goto out_freeirq_rx; + } /* allocate rx dma ring */ size = priv->rx_ring_size * sizeof(struct bcm_enet_desc); @@ -2376,7 +2378,8 @@ out_free_rx_ring: priv->rx_desc_cpu, priv->rx_desc_dma); out_freeirq_tx: - free_irq(priv->irq_tx, dev); + if (priv->irq_tx != -1) + free_irq(priv->irq_tx, dev); out_freeirq_rx: free_irq(priv->irq_rx, dev); @@ -2433,7 +2436,8 @@ static int bcm_enetsw_stop(struct net_de priv->rx_desc_cpu, priv->rx_desc_dma); dma_free_coherent(kdev, priv->tx_desc_alloc_size, priv->tx_desc_cpu, priv->tx_desc_dma); - free_irq(priv->irq_tx, dev); + if (priv->irq_tx != -1) + free_irq(priv->irq_tx, dev); free_irq(priv->irq_rx, dev); return 0; @@ -2716,7 +2720,7 @@ static int __devinit bcm_enetsw_probe(st res_mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); irq_rx = platform_get_irq(pdev, 0); irq_tx = platform_get_irq(pdev, 1); - if (!res_mem || irq_rx < 0 || irq_tx < 0) + if (!res_mem || irq_rx < 0) return -ENODEV; ret = 0;