Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 25c83b5c authored by Srinivas Kandagatla's avatar Srinivas Kandagatla Committed by David S. Miller
Browse files

dt:net:stmmac: Add support to dwmac version 3.610 and 3.710



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: default avatarSrinivas Kandagatla <srinivas.kandagatla@st.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent d741434c
Loading
Loading
Loading
Loading
+4 −0
Original line number Original line Diff line number Diff line
@@ -12,6 +12,10 @@ Required properties:
  property
  property
- phy-mode: String, operation mode of the PHY interface.
- phy-mode: String, operation mode of the PHY interface.
  Supported values are: "mii", "rmii", "gmii", "rgmii".
  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:
Optional properties:
- mac-address: 6 bytes, mac address
- mac-address: 6 bytes, mac address
+26 −0
Original line number Original line Diff line number Diff line
@@ -34,12 +34,20 @@ static int stmmac_probe_config_dt(struct platform_device *pdev,
				  const char **mac)
				  const char **mac)
{
{
	struct device_node *np = pdev->dev.of_node;
	struct device_node *np = pdev->dev.of_node;
	struct stmmac_dma_cfg *dma_cfg;


	if (!np)
	if (!np)
		return -ENODEV;
		return -ENODEV;


	*mac = of_get_mac_address(np);
	*mac = of_get_mac_address(np);
	plat->interface = of_get_phy_mode(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,
	plat->mdio_bus_data = devm_kzalloc(&pdev->dev,
					   sizeof(struct stmmac_mdio_bus_data),
					   sizeof(struct stmmac_mdio_bus_data),
					   GFP_KERNEL);
					   GFP_KERNEL);
@@ -56,6 +64,22 @@ static int stmmac_probe_config_dt(struct platform_device *pdev,
		plat->pmt = 1;
		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;
	return 0;
}
}
#else
#else
@@ -228,7 +252,9 @@ static const struct dev_pm_ops stmmac_pltfr_pm_ops;


static const struct of_device_id stmmac_dt_ids[] = {
static const struct of_device_id stmmac_dt_ids[] = {
	{ .compatible = "st,spear600-gmac"},
	{ .compatible = "st,spear600-gmac"},
	{ .compatible = "snps,dwmac-3.610"},
	{ .compatible = "snps,dwmac-3.70a"},
	{ .compatible = "snps,dwmac-3.70a"},
	{ .compatible = "snps,dwmac-3.710"},
	{ .compatible = "snps,dwmac"},
	{ .compatible = "snps,dwmac"},
	{ /* sentinel */ }
	{ /* sentinel */ }
};
};