]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
dt:net:stmmac: Add support to dwmac version 3.610 and 3.710
authorSrinivas Kandagatla <srinivas.kandagatla@st.com>
Thu, 4 Jul 2013 09:35:41 +0000 (10:35 +0100)
committerDavid S. Miller <davem@davemloft.net>
Thu, 4 Jul 2013 21:34:17 +0000 (14:34 -0700)
This patch adds dt support to dwmac version 3.610 and 3.710 these
versions are integrated in STiH415 and STiH416 ARM A9 SOCs.
To support these IP version, some of the device tree properties are
extended.

Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@st.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Documentation/devicetree/bindings/net/stmmac.txt
drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c

index 060bbf098ef3415be633a539b626977ebfcf4b47..e1ddfcc46a4ea53cc04bdb7714f277d2c8cc04f4 100644 (file)
@@ -12,6 +12,10 @@ Required properties:
   property
 - phy-mode: String, operation mode of the PHY interface.
   Supported values are: "mii", "rmii", "gmii", "rgmii".
+- snps,phy-addr                phy address to connect to.
+- 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
 
 Optional properties:
 - mac-address: 6 bytes, mac address
index adfb9a3ce6c574df4e0df7154f81d7ce16362cad..03de76c7a177b6c9b54d571370e92d697c9a9ef6 100644 (file)
@@ -34,12 +34,20 @@ static int stmmac_probe_config_dt(struct platform_device *pdev,
                                  const char **mac)
 {
        struct device_node *np = pdev->dev.of_node;
+       struct stmmac_dma_cfg *dma_cfg;
 
        if (!np)
                return -ENODEV;
 
        *mac = of_get_mac_address(np);
        plat->interface = of_get_phy_mode(np);
+
+       plat->bus_id = of_alias_get_id(np, "ethernet");
+       if (plat->bus_id < 0)
+               plat->bus_id = 0;
+
+       of_property_read_u32(np, "snps,phy-addr", &plat->phy_addr);
+
        plat->mdio_bus_data = devm_kzalloc(&pdev->dev,
                                           sizeof(struct stmmac_mdio_bus_data),
                                           GFP_KERNEL);
@@ -56,6 +64,22 @@ static int stmmac_probe_config_dt(struct platform_device *pdev,
                plat->pmt = 1;
        }
 
+       if (of_device_is_compatible(np, "snps,dwmac-3.610") ||
+               of_device_is_compatible(np, "snps,dwmac-3.710")) {
+               plat->enh_desc = 1;
+               plat->bugged_jumbo = 1;
+               plat->force_sf_dma_mode = 1;
+       }
+
+       dma_cfg = devm_kzalloc(&pdev->dev, sizeof(*dma_cfg), GFP_KERNEL);
+       if (!dma_cfg)
+               return -ENOMEM;
+
+       plat->dma_cfg = dma_cfg;
+       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");
+
        return 0;
 }
 #else
@@ -228,7 +252,9 @@ static const struct dev_pm_ops stmmac_pltfr_pm_ops;
 
 static const struct of_device_id stmmac_dt_ids[] = {
        { .compatible = "st,spear600-gmac"},
+       { .compatible = "snps,dwmac-3.610"},
        { .compatible = "snps,dwmac-3.70a"},
+       { .compatible = "snps,dwmac-3.710"},
        { .compatible = "snps,dwmac"},
        { /* sentinel */ }
 };