diff options
-rw-r--r-- | drivers/net/ethernet/stmicro/stmmac/common.h | 4 | ||||
-rw-r--r-- | drivers/net/ethernet/stmicro/stmmac/dwmac1000.h | 1 | ||||
-rw-r--r-- | drivers/net/ethernet/stmicro/stmmac/dwmac1000_dma.c | 6 | ||||
-rw-r--r-- | drivers/net/ethernet/stmicro/stmmac/dwmac100_dma.c | 2 | ||||
-rw-r--r-- | drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 4 | ||||
-rw-r--r-- | include/linux/stmmac.h | 1 |
6 files changed, 13 insertions, 5 deletions
diff --git a/drivers/net/ethernet/stmicro/stmmac/common.h b/drivers/net/ethernet/stmicro/stmmac/common.h index 7164509e3832..bcd54d6e94fd 100644 --- a/drivers/net/ethernet/stmicro/stmmac/common.h +++ b/drivers/net/ethernet/stmicro/stmmac/common.h | |||
@@ -247,8 +247,8 @@ struct stmmac_desc_ops { | |||
247 | 247 | ||
248 | struct stmmac_dma_ops { | 248 | struct stmmac_dma_ops { |
249 | /* DMA core initialization */ | 249 | /* DMA core initialization */ |
250 | int (*init) (void __iomem *ioaddr, int pbl, int fb, int burst_len, | 250 | int (*init) (void __iomem *ioaddr, int pbl, int fb, int mb, |
251 | u32 dma_tx, u32 dma_rx); | 251 | int burst_len, u32 dma_tx, u32 dma_rx); |
252 | /* Dump DMA registers */ | 252 | /* Dump DMA registers */ |
253 | void (*dump_regs) (void __iomem *ioaddr); | 253 | void (*dump_regs) (void __iomem *ioaddr); |
254 | /* Set tx/rx threshold in the csr6 register | 254 | /* Set tx/rx threshold in the csr6 register |
diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac1000.h b/drivers/net/ethernet/stmicro/stmmac/dwmac1000.h index 1527f4ecd11a..23478bf4ed7a 100644 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac1000.h +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac1000.h | |||
@@ -141,6 +141,7 @@ enum rx_tx_priority_ratio { | |||
141 | }; | 141 | }; |
142 | 142 | ||
143 | #define DMA_BUS_MODE_FB 0x00010000 /* Fixed burst */ | 143 | #define DMA_BUS_MODE_FB 0x00010000 /* Fixed burst */ |
144 | #define DMA_BUS_MODE_MB 0x04000000 /* Mixed burst */ | ||
144 | #define DMA_BUS_MODE_RPBL_MASK 0x003e0000 /* Rx-Programmable Burst Len */ | 145 | #define DMA_BUS_MODE_RPBL_MASK 0x003e0000 /* Rx-Programmable Burst Len */ |
145 | #define DMA_BUS_MODE_RPBL_SHIFT 17 | 146 | #define DMA_BUS_MODE_RPBL_SHIFT 17 |
146 | #define DMA_BUS_MODE_USP 0x00800000 | 147 | #define DMA_BUS_MODE_USP 0x00800000 |
diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac1000_dma.c b/drivers/net/ethernet/stmicro/stmmac/dwmac1000_dma.c index 3675c5731565..033500090f55 100644 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac1000_dma.c +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac1000_dma.c | |||
@@ -31,7 +31,7 @@ | |||
31 | #include "dwmac_dma.h" | 31 | #include "dwmac_dma.h" |
32 | 32 | ||
33 | static int dwmac1000_dma_init(void __iomem *ioaddr, int pbl, int fb, | 33 | static int dwmac1000_dma_init(void __iomem *ioaddr, int pbl, int fb, |
34 | int burst_len, u32 dma_tx, u32 dma_rx) | 34 | int mb, int burst_len, u32 dma_tx, u32 dma_rx) |
35 | { | 35 | { |
36 | u32 value = readl(ioaddr + DMA_BUS_MODE); | 36 | u32 value = readl(ioaddr + DMA_BUS_MODE); |
37 | int limit; | 37 | int limit; |
@@ -66,6 +66,10 @@ static int dwmac1000_dma_init(void __iomem *ioaddr, int pbl, int fb, | |||
66 | if (fb) | 66 | if (fb) |
67 | value |= DMA_BUS_MODE_FB; | 67 | value |= DMA_BUS_MODE_FB; |
68 | 68 | ||
69 | /* Mixed Burst has no effect when fb is set */ | ||
70 | if (mb) | ||
71 | value |= DMA_BUS_MODE_MB; | ||
72 | |||
69 | #ifdef CONFIG_STMMAC_DA | 73 | #ifdef CONFIG_STMMAC_DA |
70 | value |= DMA_BUS_MODE_DA; /* Rx has priority over tx */ | 74 | value |= DMA_BUS_MODE_DA; /* Rx has priority over tx */ |
71 | #endif | 75 | #endif |
diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac100_dma.c b/drivers/net/ethernet/stmicro/stmmac/dwmac100_dma.c index 92ed2e07609e..c2b4d55a79b6 100644 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac100_dma.c +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac100_dma.c | |||
@@ -33,7 +33,7 @@ | |||
33 | #include "dwmac_dma.h" | 33 | #include "dwmac_dma.h" |
34 | 34 | ||
35 | static int dwmac100_dma_init(void __iomem *ioaddr, int pbl, int fb, | 35 | static int dwmac100_dma_init(void __iomem *ioaddr, int pbl, int fb, |
36 | int burst_len, u32 dma_tx, u32 dma_rx) | 36 | int mb, int burst_len, u32 dma_tx, u32 dma_rx) |
37 | { | 37 | { |
38 | u32 value = readl(ioaddr + DMA_BUS_MODE); | 38 | u32 value = readl(ioaddr + DMA_BUS_MODE); |
39 | int limit; | 39 | int limit; |
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c index a9699ae49add..d1d084018877 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | |||
@@ -925,6 +925,7 @@ static void stmmac_check_ether_addr(struct stmmac_priv *priv) | |||
925 | static int stmmac_init_dma_engine(struct stmmac_priv *priv) | 925 | static int stmmac_init_dma_engine(struct stmmac_priv *priv) |
926 | { | 926 | { |
927 | int pbl = DEFAULT_DMA_PBL, fixed_burst = 0, burst_len = 0; | 927 | int pbl = DEFAULT_DMA_PBL, fixed_burst = 0, burst_len = 0; |
928 | int mixed_burst = 0; | ||
928 | 929 | ||
929 | /* Some DMA parameters can be passed from the platform; | 930 | /* Some DMA parameters can be passed from the platform; |
930 | * in case of these are not passed we keep a default | 931 | * in case of these are not passed we keep a default |
@@ -932,10 +933,11 @@ static int stmmac_init_dma_engine(struct stmmac_priv *priv) | |||
932 | if (priv->plat->dma_cfg) { | 933 | if (priv->plat->dma_cfg) { |
933 | pbl = priv->plat->dma_cfg->pbl; | 934 | pbl = priv->plat->dma_cfg->pbl; |
934 | fixed_burst = priv->plat->dma_cfg->fixed_burst; | 935 | fixed_burst = priv->plat->dma_cfg->fixed_burst; |
936 | mixed_burst = priv->plat->dma_cfg->mixed_burst; | ||
935 | burst_len = priv->plat->dma_cfg->burst_len; | 937 | burst_len = priv->plat->dma_cfg->burst_len; |
936 | } | 938 | } |
937 | 939 | ||
938 | return priv->hw->dma->init(priv->ioaddr, pbl, fixed_burst, | 940 | return priv->hw->dma->init(priv->ioaddr, pbl, fixed_burst, mixed_burst, |
939 | burst_len, priv->dma_tx_phy, | 941 | burst_len, priv->dma_tx_phy, |
940 | priv->dma_rx_phy); | 942 | priv->dma_rx_phy); |
941 | } | 943 | } |
diff --git a/include/linux/stmmac.h b/include/linux/stmmac.h index f85c93d6e6da..b69bdb1e08b6 100644 --- a/include/linux/stmmac.h +++ b/include/linux/stmmac.h | |||
@@ -86,6 +86,7 @@ struct stmmac_mdio_bus_data { | |||
86 | struct stmmac_dma_cfg { | 86 | struct stmmac_dma_cfg { |
87 | int pbl; | 87 | int pbl; |
88 | int fixed_burst; | 88 | int fixed_burst; |
89 | int mixed_burst; | ||
89 | int burst_len; | 90 | int burst_len; |
90 | }; | 91 | }; |
91 | 92 | ||