|
@@ -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 */ }
|
|
|
};
|