Changeset 34136


Ignore:
Timestamp:
2012-11-10T20:59:07+01:00 (5 years ago)
Author:
jogo
Message:

bcm63xx: fix Ethernet DMA for 636x and 6328 for 3.6

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/brcm63xx/patches-3.6/443-MIPS-BCM63XX-enable-enet-for-BCM6345.patch

    r33936 r34136  
    106106        if (ret) 
    107107                return ret; 
     108@@ -248,6 +303,10 @@ bcm63xx_enetsw_register(const struct bcm 
     109        else if (BCMCPU_IS_6368()) 
     110                enetsw_pd.num_ports = ENETSW_PORTS_6368; 
     111  
     112+       enetsw_pd.dma_chan_width = ENETDMA_CHAN_WIDTH; 
     113+       enetsw_pd.dma_chan_en_mask = ENETDMAC_CHANCFG_EN_MASK; 
     114+       enetsw_pd.dma_chan_int_mask = ENETDMAC_IR_PKTDONE_MASK; 
     115+ 
     116        ret = platform_device_register(&bcm63xx_enetsw_device); 
     117        if (ret) 
     118                return ret; 
    108119--- a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_regs.h 
    109120+++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_regs.h 
    110 @@ -709,6 +709,8 @@ 
     121@@ -715,6 +715,8 @@ 
    111122 /************************************************************************* 
    112123  * _REG relative to RSET_ENETDMA 
     
    117128 /* Controller Configuration Register */ 
    118129 #define ENETDMA_CFG_REG                        (0x0) 
    119 @@ -758,29 +760,54 @@ 
     130@@ -764,29 +766,54 @@ 
    120131 /* State Ram Word 4 */ 
    121132 #define ENETDMA_SRAM4_REG(x)           (0x20c + (x) * 0x10) 
     
    176187  
    177188 /************************************************************************* 
    178 @@ -788,16 +815,16 @@ 
     189@@ -794,16 +821,16 @@ 
    179190  *************************************************************************/ 
    180191  
     
    537548-       enet_dmac_writel(priv, 0, ENETDMAC_IRMASK_REG(priv->rx_chan)); 
    538549-       enet_dmac_writel(priv, 0, ENETDMAC_IRMASK_REG(priv->tx_chan)); 
    539 +       enet_dmac_writel(priv, 0, ENETDMAC_IRMASK_REG, priv->rx_chan); 
    540 +       enet_dmac_writel(priv, 0, ENETDMAC_IRMASK_REG, priv->tx_chan); 
     550+       enet_dmac_writel(priv, 0, ENETDMAC_IRMASK, priv->rx_chan); 
     551+       enet_dmac_writel(priv, 0, ENETDMAC_IRMASK, priv->tx_chan); 
    541552  
    542553        ret = request_irq(priv->irq_rx, bcm_enet_isr_dma, 
     
    569580        enet_dmac_writel(priv, priv->dma_maxburst, 
    570581-                        ENETDMAC_MAXBURST_REG(priv->rx_chan)); 
    571 +                        ENETDMAC_MAXBURST_REG, priv->rx_chan); 
     582+                        ENETDMAC_MAXBURST, priv->rx_chan); 
    572583        enet_dmac_writel(priv, priv->dma_maxburst, 
    573584-                        ENETDMAC_MAXBURST_REG(priv->tx_chan)); 
    574 +                        ENETDMAC_MAXBURST_REG, priv->tx_chan); 
     585+                        ENETDMAC_MAXBURST, priv->tx_chan); 
    575586  
    576587        /* set flow control low/high threshold to 1/3 / 2/3 */ 
     
    581592        enet_dmac_writel(priv, ENETDMAC_CHANCFG_EN_MASK, 
    582593-                        ENETDMAC_CHANCFG_REG(priv->rx_chan)); 
    583 +                        ENETDMAC_CHANCFG_REG, priv->rx_chan); 
     594+                        ENETDMAC_CHANCFG, priv->rx_chan); 
    584595  
    585596        /* watch "packet transferred" interrupt in rx and tx */ 
    586597        enet_dmac_writel(priv, ENETDMAC_IR_PKTDONE_MASK, 
    587598-                        ENETDMAC_IR_REG(priv->rx_chan)); 
    588 +                        ENETDMAC_IR_REG, priv->rx_chan); 
     599+                        ENETDMAC_IR, priv->rx_chan); 
    589600        enet_dmac_writel(priv, ENETDMAC_IR_PKTDONE_MASK, 
    590601-                        ENETDMAC_IR_REG(priv->tx_chan)); 
    591 +                        ENETDMAC_IR_REG, priv->tx_chan); 
     602+                        ENETDMAC_IR, priv->tx_chan); 
    592603  
    593604        /* make sure we enable napi before rx interrupt  */ 
     
    596607        enet_dmac_writel(priv, ENETDMAC_IR_PKTDONE_MASK, 
    597608-                        ENETDMAC_IRMASK_REG(priv->rx_chan)); 
    598 +                        ENETDMAC_IRMASK_REG, priv->rx_chan); 
     609+                        ENETDMAC_IRMASK, priv->rx_chan); 
    599610        enet_dmac_writel(priv, ENETDMAC_IR_PKTDONE_MASK, 
    600611-                        ENETDMAC_IRMASK_REG(priv->tx_chan)); 
    601 +                        ENETDMAC_IRMASK_REG, priv->tx_chan); 
     612+                        ENETDMAC_IRMASK, priv->tx_chan); 
    602613  
    603614        netif_carrier_on(dev); 
     
    609620-       enet_dmac_writel(priv, 0, ENETDMAC_IRMASK_REG(priv->rx_chan)); 
    610621-       enet_dmac_writel(priv, 0, ENETDMAC_IRMASK_REG(priv->tx_chan)); 
    611 +       enet_dmac_writel(priv, 0, ENETDMAC_IRMASK_REG, priv->rx_chan); 
    612 +       enet_dmac_writel(priv, 0, ENETDMAC_IRMASK_REG, priv->tx_chan); 
     622+       enet_dmac_writel(priv, 0, ENETDMAC_IRMASK, priv->rx_chan); 
     623+       enet_dmac_writel(priv, 0, ENETDMAC_IRMASK, priv->tx_chan); 
    613624  
    614625        /* disable dma & mac */ 
    615626        bcm_enet_disable_dma(priv, priv->tx_chan); 
     627@@ -2757,6 +2793,9 @@ static int __devinit bcm_enetsw_probe(st 
     628                memcpy(priv->used_ports, pd->used_ports, 
     629                       sizeof (pd->used_ports)); 
     630                priv->num_ports = pd->num_ports; 
     631+               priv->dma_chan_en_mask = pd->dma_chan_en_mask; 
     632+               priv->dma_chan_int_mask = pd->dma_chan_int_mask; 
     633+               priv->dma_chan_width = pd->dma_chan_width; 
     634        } 
     635  
     636        ret = compute_hw_mtu(priv, dev->mtu); 
    616637--- a/drivers/net/ethernet/broadcom/bcm63xx_enet.h 
    617638+++ b/drivers/net/ethernet/broadcom/bcm63xx_enet.h 
     
    690711  
    691712 /* 
    692 @@ -72,4 +89,66 @@ int __init bcm63xx_enet_register(int uni 
     713@@ -64,6 +81,15 @@ struct bcm63xx_enetsw_platform_data { 
     714        char mac_addr[ETH_ALEN]; 
     715        int num_ports; 
     716        struct bcm63xx_enetsw_port used_ports[ENETSW_MAX_PORT]; 
     717+ 
     718+       /* DMA channel enable mask */ 
     719+       u32 dma_chan_en_mask; 
     720+ 
     721+       /* DMA channel interrupt mask */ 
     722+       u32 dma_chan_int_mask; 
     723+ 
     724+       /* DMA channel register width */ 
     725+       unsigned int dma_chan_width; 
     726 }; 
     727  
     728 int __init bcm63xx_enet_register(int unit, 
     729@@ -72,4 +98,66 @@ int __init bcm63xx_enet_register(int uni 
    693730 int __init 
    694731 bcm63xx_enetsw_register(const struct bcm63xx_enetsw_platform_data *pd); 
Note: See TracChangeset for help on using the changeset viewer.