static int socfpga_dwmac_probe(struct platform_device *pdev) { struct plat_stmmacenet_data *plat_dat; struct stmmac_resources stmmac_res; struct device *dev = &pdev->dev; int ret; struct socfpga_dwmac *dwmac; struct net_device *ndev; struct stmmac_priv *stpriv; ret = stmmac_get_platform_resources(pdev, &stmmac_res); if (ret) return ret; plat_dat = stmmac_probe_config_dt(pdev, &stmmac_res.mac); if (IS_ERR(plat_dat)) return PTR_ERR(plat_dat); dwmac = devm_kzalloc(dev, sizeof(*dwmac), GFP_KERNEL); if (!dwmac) { ret = -ENOMEM; goto err_remove_config_dt; } ret = socfpga_dwmac_parse_data(dwmac, dev); if (ret) { dev_err(dev, "Unable to parse OF data\n"); goto err_remove_config_dt; } plat_dat->bsp_priv = dwmac; plat_dat->fix_mac_speed = socfpga_dwmac_fix_mac_speed; ret = stmmac_dvr_probe(&pdev->dev, plat_dat, &stmmac_res); if (ret) goto err_remove_config_dt; ndev = platform_get_drvdata(pdev); stpriv = netdev_priv(ndev); /* The socfpga driver needs to control the stmmac reset to set the phy * mode. Create a copy of the core reset handle so it can be used by * the driver later. */ dwmac->stmmac_rst = stpriv->stmmac_rst; ret = socfpga_dwmac_set_phy_mode(dwmac); if (ret) goto err_dvr_remove; return 0; err_dvr_remove: stmmac_dvr_remove(&pdev->dev); err_remove_config_dt: stmmac_remove_config_dt(pdev, plat_dat); return ret; }
static int rk_gmac_remove(struct platform_device *pdev) { struct rk_priv_data *bsp_priv = get_stmmac_bsp_priv(&pdev->dev); int ret = stmmac_dvr_remove(&pdev->dev); rk_gmac_powerdown(bsp_priv); return ret; }
static int oxnas_dwmac_remove(struct platform_device *pdev) { struct oxnas_dwmac *dwmac = get_stmmac_bsp_priv(&pdev->dev); int ret = stmmac_dvr_remove(&pdev->dev); clk_disable_unprepare(dwmac->clk); return ret; }
static int stm32_dwmac_remove(struct platform_device *pdev) { struct net_device *ndev = platform_get_drvdata(pdev); struct stmmac_priv *priv = netdev_priv(ndev); int ret = stmmac_dvr_remove(&pdev->dev); stm32_dwmac_clk_disable(priv->plat->bsp_priv); return ret; }
/** * stmmac_pltfr_remove * @pdev: platform device pointer * Description: this function calls the main to free the net resources * and calls the platforms hook and release the resources (e.g. mem). */ static int stmmac_pltfr_remove(struct platform_device *pdev) { struct net_device *ndev = platform_get_drvdata(pdev); struct stmmac_priv *priv = netdev_priv(ndev); int ret = stmmac_dvr_remove(ndev); //if (priv->plat->exit) // priv->plat->exit(pdev); return ret; }
/** * stmmac_pci_remove * * @pdev: platform device pointer * Description: this function calls the main to free the net resources * and releases the PCI resources. */ static void stmmac_pci_remove(struct pci_dev *pdev) { struct net_device *ndev = pci_get_drvdata(pdev); struct stmmac_priv *priv = netdev_priv(ndev); stmmac_dvr_remove(ndev); pci_iounmap(pdev, priv->ioaddr); pci_release_regions(pdev); pci_disable_device(pdev); }
/** * stmmac_pci_remove * * @pdev: platform device pointer * Description: this function calls the main to free the net resources * and releases the PCI resources. */ static void stmmac_pci_remove(struct pci_dev *pdev) { int i; stmmac_dvr_remove(&pdev->dev); for (i = 0; i <= PCI_STD_RESOURCE_END; i++) { if (pci_resource_len(pdev, i) == 0) continue; pcim_iounmap_regions(pdev, BIT(i)); break; } pci_disable_device(pdev); }
/** * stmmac_pltfr_remove * @pdev: platform device pointer * Description: this function calls the main to free the net resources * and calls the platforms hook and release the resources (e.g. mem). */ static int stmmac_pltfr_remove(struct platform_device *pdev) { struct net_device *ndev = platform_get_drvdata(pdev); struct stmmac_priv *priv = netdev_priv(ndev); struct resource *res; int ret = stmmac_dvr_remove(ndev); if (priv->plat->exit) priv->plat->exit(pdev); platform_set_drvdata(pdev, NULL); iounmap((void *)priv->ioaddr); res = platform_get_resource(pdev, IORESOURCE_MEM, 0); release_mem_region(res->start, resource_size(res)); return ret; }
/** * stmmac_pci_remove * * @pdev: platform device pointer * Description: this function calls the main to free the net resources * and releases the PCI resources. */ static void stmmac_pci_remove(struct pci_dev *pdev) { stmmac_dvr_remove(&pdev->dev); }
/** * stmmac_pci_remove * * @pdev: platform device pointer * Description: this function calls the main to free the net resources * and releases the PCI resources. */ static void stmmac_pci_remove(struct pci_dev *pdev) { struct net_device *ndev = pci_get_drvdata(pdev); stmmac_dvr_remove(ndev); }