static int xgene_enet_reset(struct xgene_enet_pdata *pdata) { struct device *dev = &pdata->pdev->dev; if (!xgene_ring_mgr_init(pdata)) return -ENODEV; if (dev->of_node) { clk_prepare_enable(pdata->clk); udelay(5); clk_disable_unprepare(pdata->clk); udelay(5); clk_prepare_enable(pdata->clk); udelay(5); } else { #ifdef CONFIG_ACPI if (acpi_has_method(ACPI_HANDLE(&pdata->pdev->dev), "_RST")) { acpi_evaluate_object(ACPI_HANDLE(&pdata->pdev->dev), "_RST", NULL, NULL); } else if (acpi_has_method(ACPI_HANDLE(&pdata->pdev->dev), "_INI")) { acpi_evaluate_object(ACPI_HANDLE(&pdata->pdev->dev), "_INI", NULL, NULL); } #endif } xgene_enet_ecc_init(pdata); xgene_enet_config_ring_if_assoc(pdata); return 0; }
static int xgene_mdio_reset(struct xgene_mdio_pdata *pdata) { int ret; if (pdata->dev->of_node) { clk_prepare_enable(pdata->clk); udelay(5); clk_disable_unprepare(pdata->clk); udelay(5); clk_prepare_enable(pdata->clk); udelay(5); } else { #ifdef CONFIG_ACPI acpi_evaluate_object(ACPI_HANDLE(pdata->dev), "_RST", NULL, NULL); #endif } ret = xgene_enet_ecc_init(pdata); if (ret) { if (pdata->dev->of_node) clk_disable_unprepare(pdata->clk); return ret; } xgene_gmac_reset(pdata); return 0; }
static void xgene_enet_clkrst_cfg(struct xgene_enet_priv *priv) { u32 data; /* disable all clocks */ data = CSR0_CLKEN_WR(0) | ENET0_CLKEN_WR(0) | CSR1_CLKEN_WR(0) | ENET1_CLKEN_WR(0); xgene_enet_wr(priv, BLOCK_ETH_CLKRST_CSR, ENET_CLKEN_ADDR, data); /* enable all clocks */ data = CSR0_CLKEN_WR(1) | ENET0_CLKEN_WR(1) | CSR1_CLKEN_WR(1) | ENET1_CLKEN_WR(1); xgene_enet_wr(priv, BLOCK_ETH_CLKRST_CSR, ENET_CLKEN_ADDR, data); /* put csr and core reset */ data = CSR0_RESET_WR(1) | ENET0_RESET_WR(1) | CSR1_RESET_WR(1) | ENET1_RESET_WR(1); xgene_enet_wr(priv, BLOCK_ETH_CLKRST_CSR, ENET_SRST_ADDR, data); /* release csr and core reset */ data = CSR0_RESET_WR(0) | ENET0_RESET_WR(0) | CSR1_RESET_WR(0) | ENET1_RESET_WR(0); xgene_enet_wr(priv, BLOCK_ETH_CLKRST_CSR, ENET_SRST_ADDR, data); xgene_enet_ecc_init(priv); }
static void xgene_enet_reset(struct xgene_enet_pdata *p) { clk_prepare_enable(p->clk); clk_disable_unprepare(p->clk); clk_prepare_enable(p->clk); xgene_enet_ecc_init(p); xgene_enet_config_ring_if_assoc(p); }
static int xgene_enet_reset(struct xgene_enet_pdata *p) { if (!xgene_ring_mgr_init(p)) return -ENODEV; clk_prepare_enable(p->clk); clk_disable_unprepare(p->clk); clk_prepare_enable(p->clk); xgene_enet_ecc_init(p); xgene_enet_config_ring_if_assoc(p); return 0; }