Changeset 47603


Ignore:
Timestamp:
2015-11-22T22:59:22+01:00 (2 years ago)
Author:
nbd
Message:

ipq806x: another fix to the stmmac DMA configuration to fix remaining data corruption issues

Signed-off-by: Felix Fietkau <nbd@…>

Location:
trunk/target/linux/ipq806x
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/ipq806x/patches-3.18/710-stmmac-fix-ipq806x-DMA-configuration.patch

    r47594 r47603  
    99        struct ipq806x_gmac *gmac; 
    1010        int val; 
    11 @@ -348,6 +349,16 @@ static int ipq806x_gmac_probe(struct pla 
     11@@ -348,6 +349,17 @@ static int ipq806x_gmac_probe(struct pla 
    1212        plat_dat->bsp_priv = gmac; 
    1313        plat_dat->fix_mac_speed = ipq806x_gmac_fix_mac_speed; 
     
    1717+ 
    1818+       dma_cfg->pbl = 32; 
     19+       dma_cfg->aal = 1; 
    1920+       dma_cfg->burst_len = DMA_AXI_BLEN_16 | 
    2021+               (7 << DMA_AXI_RD_OSR_LMT_SHIFT) | 
     
    3839  
    3940 struct stmmac_mdio_bus_data { 
     41@@ -88,6 +91,7 @@ struct stmmac_mdio_bus_data { 
     42  
     43 struct stmmac_dma_cfg { 
     44        int pbl; 
     45+       int aal; 
     46        int fixed_burst; 
     47        int mixed_burst; 
     48        int burst_len; 
     49--- a/drivers/net/ethernet/stmicro/stmmac/dwmac1000_dma.c 
     50+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac1000_dma.c 
     51@@ -31,7 +31,8 @@ 
     52 #include "dwmac_dma.h" 
     53  
     54 static int dwmac1000_dma_init(void __iomem *ioaddr, int pbl, int fb, int mb, 
     55-                             int burst_len, u32 dma_tx, u32 dma_rx, int atds) 
     56+                             int burst_len, u32 dma_tx, u32 dma_rx, int atds, 
     57+                             int aal) 
     58 { 
     59        u32 value = readl(ioaddr + DMA_BUS_MODE); 
     60        int limit; 
     61@@ -62,6 +63,10 @@ static int dwmac1000_dma_init(void __iom 
     62        value = DMA_BUS_MODE_PBL | ((pbl << DMA_BUS_MODE_PBL_SHIFT) | 
     63                                    (pbl << DMA_BUS_MODE_RPBL_SHIFT)); 
     64  
     65+       /* Address Aligned Beats */ 
     66+       if (aal) 
     67+               value |= DMA_BUS_MODE_AAL; 
     68+ 
     69        /* Set the Fixed burst mode */ 
     70        if (fb) 
     71                value |= DMA_BUS_MODE_FB; 
     72--- a/drivers/net/ethernet/stmicro/stmmac/common.h 
     73+++ b/drivers/net/ethernet/stmicro/stmmac/common.h 
     74@@ -352,7 +352,7 @@ extern const struct stmmac_desc_ops ndes 
     75 struct stmmac_dma_ops { 
     76        /* DMA core initialization */ 
     77        int (*init) (void __iomem *ioaddr, int pbl, int fb, int mb, 
     78-                    int burst_len, u32 dma_tx, u32 dma_rx, int atds); 
     79+                    int burst_len, u32 dma_tx, u32 dma_rx, int atds, int aal); 
     80        /* Dump DMA registers */ 
     81        void (*dump_regs) (void __iomem *ioaddr); 
     82        /* Set tx/rx threshold in the csr6 register 
     83--- a/drivers/net/ethernet/stmicro/stmmac/dwmac100_dma.c 
     84+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac100_dma.c 
     85@@ -33,7 +33,8 @@ 
     86 #include "dwmac_dma.h" 
     87  
     88 static int dwmac100_dma_init(void __iomem *ioaddr, int pbl, int fb, int mb, 
     89-                            int burst_len, u32 dma_tx, u32 dma_rx, int atds) 
     90+                            int burst_len, u32 dma_tx, u32 dma_rx, int atds, 
     91+                            int aal) 
     92 { 
     93        u32 value = readl(ioaddr + DMA_BUS_MODE); 
     94        int limit; 
     95--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c 
     96+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c 
     97@@ -1639,9 +1639,11 @@ static int stmmac_init_dma_engine(struct 
     98        int pbl = DEFAULT_DMA_PBL, fixed_burst = 0, burst_len = 0; 
     99        int mixed_burst = 0; 
     100        int atds = 0; 
     101+       int aal = 0; 
     102  
     103        if (priv->plat->dma_cfg) { 
     104                pbl = priv->plat->dma_cfg->pbl; 
     105+               aal = priv->plat->dma_cfg->aal; 
     106                fixed_burst = priv->plat->dma_cfg->fixed_burst; 
     107                mixed_burst = priv->plat->dma_cfg->mixed_burst; 
     108                burst_len = priv->plat->dma_cfg->burst_len; 
     109@@ -1652,7 +1654,7 @@ static int stmmac_init_dma_engine(struct 
     110  
     111        return priv->hw->dma->init(priv->ioaddr, pbl, fixed_burst, mixed_burst, 
     112                                   burst_len, priv->dma_tx_phy, 
     113-                                  priv->dma_rx_phy, atds); 
     114+                                  priv->dma_rx_phy, atds, aal); 
     115 } 
     116  
     117 /** 
  • trunk/target/linux/ipq806x/patches-4.1/710-stmmac-fix-ipq806x-DMA-configuration.patch

    r47594 r47603  
    99        struct ipq806x_gmac *gmac; 
    1010        int val; 
    11 @@ -348,6 +349,16 @@ static int ipq806x_gmac_probe(struct pla 
     11@@ -348,6 +349,17 @@ static int ipq806x_gmac_probe(struct pla 
    1212        plat_dat->bsp_priv = gmac; 
    1313        plat_dat->fix_mac_speed = ipq806x_gmac_fix_mac_speed; 
     
    1717+ 
    1818+       dma_cfg->pbl = 32; 
     19+       dma_cfg->aal = 1; 
    1920+       dma_cfg->burst_len = DMA_AXI_BLEN_16 | 
    2021+               (7 << DMA_AXI_RD_OSR_LMT_SHIFT) | 
     
    3839  
    3940 struct stmmac_mdio_bus_data { 
     41@@ -88,6 +91,7 @@ struct stmmac_mdio_bus_data { 
     42  
     43 struct stmmac_dma_cfg { 
     44        int pbl; 
     45+       int aal; 
     46        int fixed_burst; 
     47        int mixed_burst; 
     48        int burst_len; 
     49--- a/drivers/net/ethernet/stmicro/stmmac/dwmac1000_dma.c 
     50+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac1000_dma.c 
     51@@ -31,7 +31,8 @@ 
     52 #include "dwmac_dma.h" 
     53  
     54 static int dwmac1000_dma_init(void __iomem *ioaddr, int pbl, int fb, int mb, 
     55-                             int burst_len, u32 dma_tx, u32 dma_rx, int atds) 
     56+                             int burst_len, u32 dma_tx, u32 dma_rx, int atds, 
     57+                             int aal) 
     58 { 
     59        u32 value = readl(ioaddr + DMA_BUS_MODE); 
     60        int limit; 
     61@@ -62,6 +63,10 @@ static int dwmac1000_dma_init(void __iom 
     62        value = DMA_BUS_MODE_PBL | ((pbl << DMA_BUS_MODE_PBL_SHIFT) | 
     63                                    (pbl << DMA_BUS_MODE_RPBL_SHIFT)); 
     64  
     65+       /* Address Aligned Beats */ 
     66+       if (aal) 
     67+               value |= DMA_BUS_MODE_AAL; 
     68+ 
     69        /* Set the Fixed burst mode */ 
     70        if (fb) 
     71                value |= DMA_BUS_MODE_FB; 
     72--- a/drivers/net/ethernet/stmicro/stmmac/common.h 
     73+++ b/drivers/net/ethernet/stmicro/stmmac/common.h 
     74@@ -352,7 +352,7 @@ extern const struct stmmac_desc_ops ndes 
     75 struct stmmac_dma_ops { 
     76        /* DMA core initialization */ 
     77        int (*init) (void __iomem *ioaddr, int pbl, int fb, int mb, 
     78-                    int burst_len, u32 dma_tx, u32 dma_rx, int atds); 
     79+                    int burst_len, u32 dma_tx, u32 dma_rx, int atds, int aal); 
     80        /* Dump DMA registers */ 
     81        void (*dump_regs) (void __iomem *ioaddr); 
     82        /* Set tx/rx threshold in the csr6 register 
     83--- a/drivers/net/ethernet/stmicro/stmmac/dwmac100_dma.c 
     84+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac100_dma.c 
     85@@ -33,7 +33,8 @@ 
     86 #include "dwmac_dma.h" 
     87  
     88 static int dwmac100_dma_init(void __iomem *ioaddr, int pbl, int fb, int mb, 
     89-                            int burst_len, u32 dma_tx, u32 dma_rx, int atds) 
     90+                            int burst_len, u32 dma_tx, u32 dma_rx, int atds, 
     91+                            int aal) 
     92 { 
     93        u32 value = readl(ioaddr + DMA_BUS_MODE); 
     94        int limit; 
     95--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c 
     96+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c 
     97@@ -1639,9 +1639,11 @@ static int stmmac_init_dma_engine(struct 
     98        int pbl = DEFAULT_DMA_PBL, fixed_burst = 0, burst_len = 0; 
     99        int mixed_burst = 0; 
     100        int atds = 0; 
     101+       int aal = 0; 
     102  
     103        if (priv->plat->dma_cfg) { 
     104                pbl = priv->plat->dma_cfg->pbl; 
     105+               aal = priv->plat->dma_cfg->aal; 
     106                fixed_burst = priv->plat->dma_cfg->fixed_burst; 
     107                mixed_burst = priv->plat->dma_cfg->mixed_burst; 
     108                burst_len = priv->plat->dma_cfg->burst_len; 
     109@@ -1652,7 +1654,7 @@ static int stmmac_init_dma_engine(struct 
     110  
     111        return priv->hw->dma->init(priv->ioaddr, pbl, fixed_burst, mixed_burst, 
     112                                   burst_len, priv->dma_tx_phy, 
     113-                                  priv->dma_rx_phy, atds); 
     114+                                  priv->dma_rx_phy, atds, aal); 
     115 } 
     116  
     117 /** 
Note: See TracChangeset for help on using the changeset viewer.