Commit e2a240c7 authored by Sonic Zhang's avatar Sonic Zhang Committed by David S. Miller

driver:net:stmmac: Disable DMA store and forward mode if platform data...

driver:net:stmmac: Disable DMA store and forward mode if platform data force_thresh_dma_mode is set.

Some synopsys ip implementation doesn't support DMA store and forward mode,
such as BF60x. So, set force_thresh_dma_mode to use DMA thresholds only.
Update document and devicetree as well.
Signed-off-by: default avatarSonic Zhang <sonic.zhang@analog.com>
Acked-by: default avatarGiuseppe Cavallaro <peppe.cavallaro@st.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 816c5b5b
...@@ -22,6 +22,11 @@ Required properties: ...@@ -22,6 +22,11 @@ Required properties:
- snps,pbl Programmable Burst Length - snps,pbl Programmable Burst Length
- snps,fixed-burst Program the DMA to use the fixed burst mode - snps,fixed-burst Program the DMA to use the fixed burst mode
- snps,mixed-burst Program the DMA to use the mixed burst mode - snps,mixed-burst Program the DMA to use the mixed burst mode
- snps,force_thresh_dma_mode Force DMA to use the threshold mode for
both tx and rx
- snps,force_sf_dma_mode Force DMA to use the Store and Forward
mode for both tx and rx. This flag is
ignored if force_thresh_dma_mode is set.
Optional properties: Optional properties:
- mac-address: 6 bytes, mac address - mac-address: 6 bytes, mac address
......
...@@ -123,6 +123,7 @@ struct plat_stmmacenet_data { ...@@ -123,6 +123,7 @@ struct plat_stmmacenet_data {
int bugged_jumbo; int bugged_jumbo;
int pmt; int pmt;
int force_sf_dma_mode; int force_sf_dma_mode;
int force_thresh_dma_mode;
int riwt_off; int riwt_off;
void (*fix_mac_speed)(void *priv, unsigned int speed); void (*fix_mac_speed)(void *priv, unsigned int speed);
void (*bus_setup)(void __iomem *ioaddr); void (*bus_setup)(void __iomem *ioaddr);
...@@ -159,6 +160,8 @@ Where: ...@@ -159,6 +160,8 @@ Where:
o pmt: core has the embedded power module (optional). o pmt: core has the embedded power module (optional).
o force_sf_dma_mode: force DMA to use the Store and Forward mode o force_sf_dma_mode: force DMA to use the Store and Forward mode
instead of the Threshold. instead of the Threshold.
o force_thresh_dma_mode: force DMA to use the Shreshold mode other than
the Store and Forward mode.
o riwt_off: force to disable the RX watchdog feature and switch to NAPI mode. o riwt_off: force to disable the RX watchdog feature and switch to NAPI mode.
o fix_mac_speed: this callback is used for modifying some syscfg registers o fix_mac_speed: this callback is used for modifying some syscfg registers
(on ST SoCs) according to the link speed negotiated by the (on ST SoCs) according to the link speed negotiated by the
......
...@@ -1224,7 +1224,9 @@ static void free_dma_desc_resources(struct stmmac_priv *priv) ...@@ -1224,7 +1224,9 @@ static void free_dma_desc_resources(struct stmmac_priv *priv)
*/ */
static void stmmac_dma_operation_mode(struct stmmac_priv *priv) static void stmmac_dma_operation_mode(struct stmmac_priv *priv)
{ {
if (priv->plat->force_sf_dma_mode || priv->plat->tx_coe) { if (priv->plat->force_thresh_dma_mode)
priv->hw->dma->dma_mode(priv->ioaddr, tc, tc);
else if (priv->plat->force_sf_dma_mode || priv->plat->tx_coe) {
/* /*
* In case of GMAC, SF mode can be enabled * In case of GMAC, SF mode can be enabled
* to perform the TX COE in HW. This depends on: * to perform the TX COE in HW. This depends on:
......
...@@ -79,6 +79,11 @@ static int stmmac_probe_config_dt(struct platform_device *pdev, ...@@ -79,6 +79,11 @@ static int stmmac_probe_config_dt(struct platform_device *pdev,
of_property_read_u32(np, "snps,pbl", &dma_cfg->pbl); of_property_read_u32(np, "snps,pbl", &dma_cfg->pbl);
dma_cfg->fixed_burst = of_property_read_bool(np, "snps,fixed-burst"); dma_cfg->fixed_burst = of_property_read_bool(np, "snps,fixed-burst");
dma_cfg->mixed_burst = of_property_read_bool(np, "snps,mixed-burst"); dma_cfg->mixed_burst = of_property_read_bool(np, "snps,mixed-burst");
plat->force_thresh_dma_mode = of_property_read_bool(np, "snps,force_thresh_dma_mode");
if (plat->force_thresh_dma_mode) {
plat->force_sf_dma_mode = 0;
pr_warn("force_sf_dma_mode is ignored if force_thresh_dma_mode is set.");
}
return 0; return 0;
} }
......
...@@ -108,6 +108,7 @@ struct plat_stmmacenet_data { ...@@ -108,6 +108,7 @@ struct plat_stmmacenet_data {
int bugged_jumbo; int bugged_jumbo;
int pmt; int pmt;
int force_sf_dma_mode; int force_sf_dma_mode;
int force_thresh_dma_mode;
int riwt_off; int riwt_off;
void (*fix_mac_speed)(void *priv, unsigned int speed); void (*fix_mac_speed)(void *priv, unsigned int speed);
void (*bus_setup)(void __iomem *ioaddr); void (*bus_setup)(void __iomem *ioaddr);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment