if (IS_ERR(stmmac_res.addr))
                return PTR_ERR(stmmac_res.addr);
 
-       plat_dat = stmmac_probe_config_dt(pdev, stmmac_res.mac);
+       plat_dat = devm_stmmac_probe_config_dt(pdev, stmmac_res.mac);
        if (IS_ERR(plat_dat))
                return PTR_ERR(plat_dat);
 
        ret = data->probe(pdev, plat_dat, &stmmac_res);
        if (ret < 0) {
                dev_err_probe(&pdev->dev, ret, "failed to probe subdriver\n");
-
-               goto remove_config;
+               return ret;
        }
 
        ret = dwc_eth_dwmac_config_dt(pdev, plat_dat);
 
 remove:
        data->remove(pdev);
-remove_config:
-       stmmac_remove_config_dt(pdev, plat_dat);
 
        return ret;
 }
 
 static void dwc_eth_dwmac_remove(struct platform_device *pdev)
 {
-       struct net_device *ndev = platform_get_drvdata(pdev);
-       struct stmmac_priv *priv = netdev_priv(ndev);
-       const struct dwc_eth_dwmac_data *data;
-
-       data = device_get_match_data(&pdev->dev);
+       const struct dwc_eth_dwmac_data *data = device_get_match_data(&pdev->dev);
 
        stmmac_dvr_remove(&pdev->dev);
 
        data->remove(pdev);
-
-       stmmac_remove_config_dt(pdev, priv->plat);
 }
 
 static const struct of_device_id dwc_eth_dwmac_match[] = {