driver:net:stmmac: Disable DMA store and forward mode if platform data force_thresh_d...
authorSonic Zhang <sonic.zhang@analog.com>
Wed, 28 Aug 2013 10:55:39 +0000 (18:55 +0800)
committerDavid S. Miller <davem@davemloft.net>
Fri, 30 Aug 2013 21:26:09 +0000 (17:26 -0400)
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>
Documentation/devicetree/bindings/net/stmmac.txt
Documentation/networking/stmmac.txt
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c
include/linux/stmmac.h

index 261c563b5f0665a2b91b29eefaf0e089011c92cf..eba0e5e59ebe226aff38db501fd736aa6047f367 100644 (file)
@@ -22,6 +22,11 @@ Required properties:
 - snps,pbl             Programmable Burst Length
 - 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,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:
 - mac-address: 6 bytes, mac address
index 654d2e55c8cb126f5a25b21af2ddcb677479ffb9..457b8bbafb08061a3bbe523e0875e84c8289496a 100644 (file)
@@ -123,6 +123,7 @@ struct plat_stmmacenet_data {
        int bugged_jumbo;
        int pmt;
        int force_sf_dma_mode;
+       int force_thresh_dma_mode;
        int riwt_off;
        void (*fix_mac_speed)(void *priv, unsigned int speed);
        void (*bus_setup)(void __iomem *ioaddr);
@@ -159,6 +160,8 @@ Where:
  o pmt: core has the embedded power module (optional).
  o force_sf_dma_mode: force DMA to use the Store and Forward mode
                     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 fix_mac_speed: this callback is used for modifying some syscfg registers
                 (on ST SoCs) according to the link speed negotiated by the
index be406911fd01e13668c2e8408cc25a61bc4e7da8..8d4ccd35a01692d911f50d91bfe9bee0d89d883f 100644 (file)
@@ -1224,7 +1224,9 @@ static void free_dma_desc_resources(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
                 * to perform the TX COE in HW. This depends on:
index da8be6e630961bac8478565741afe03b7b36a046..74a89a4aef886beed1754adfb0b86d9014b8d6f4 100644 (file)
@@ -79,6 +79,11 @@ static int stmmac_probe_config_dt(struct platform_device *pdev,
        of_property_read_u32(np, "snps,pbl", &dma_cfg->pbl);
        dma_cfg->fixed_burst = of_property_read_bool(np, "snps,fixed-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;
 }
index 9e495d31516ee4ed90f8cb487116f76c251465aa..bb5deb0feb6bc2190212d53ea290947287a4007a 100644 (file)
@@ -108,6 +108,7 @@ struct plat_stmmacenet_data {
        int bugged_jumbo;
        int pmt;
        int force_sf_dma_mode;
+       int force_thresh_dma_mode;
        int riwt_off;
        void (*fix_mac_speed)(void *priv, unsigned int speed);
        void (*bus_setup)(void __iomem *ioaddr);