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: Sonic Zhang <sonic.zhang@analog.com> Acked-by: Giuseppe Cavallaro <peppe.cavallaro@st.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
816c5b5b01
commit
e2a240c7d3
@ -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 {
|
|||||||
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:
|
|||||||
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)
|
|||||||
*/
|
*/
|
||||||
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,
|
|||||||
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 {
|
|||||||
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);
|
||||||
|
Loading…
Reference in New Issue
Block a user