From patchwork Mon Jan 2 11:56:03 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Johan Hovold X-Patchwork-Id: 9493401 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 3A76062AB4 for ; Mon, 2 Jan 2017 12:00:23 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 295811FF35 for ; Mon, 2 Jan 2017 12:00:23 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 1C9CA2679B; Mon, 2 Jan 2017 12:00:23 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.5 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_LOW,T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from mx1.tuxfamily.net (mail.tuxfamily.net [212.85.158.8]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id A89371FF35 for ; Mon, 2 Jan 2017 12:00:22 +0000 (UTC) Received: from listengine (helo=tuxfamily.org) by mx1.tuxfamily.net with local-bsmtp (Exim 4.84_2) (envelope-from ) id 1cO1Hp-0002GM-7h for patchwork-linux-oxnas@patchwork.kernel.org; Mon, 02 Jan 2017 13:00:21 +0100 Received: from mail-lf0-x242.google.com ([2a00:1450:4010:c07::242]) by mx1.tuxfamily.net with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from ) id 1cO1E8-0001vP-6i for linux-oxnas@lists.tuxfamily.org; Mon, 02 Jan 2017 12:56:32 +0100 Received: by mail-lf0-x242.google.com with SMTP id x140so25611599lfa.2 for ; Mon, 02 Jan 2017 03:56:32 -0800 (PST) Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=Q7aopMu6k6NflTqo6wee/fOihqUpohUmsTvEU96cNro=; b=rOPgNnvEInK7MZsh2nTM0PgkdOFVMJtM4SnIAvdJEvIc5cuVytzWROP7FpHcGUjObV 2zjsImSn9jrpRw1kbugeIWEYJuFbi7ZKP4OnYYo8D8eLdwU4GbUHTnuLQPHRt3fp1sOV OHijGQE+e/QtjAz/Zi962nAVfi05GFumS4JsuySu/JScwK9HYka9Ac3Ij1faML3GqoNH 4f+COQnzAUxtqgHBx+yL2S/FMy75bUL/0bwi+GOIp1Ccx4Tg+Wq+fh0J3fFYr5OxI2SV uPZ85XuWhDBBY55N9NJ92DxW/HVZN9JZsQljHxmFhrkVtNxH1l+/cLr1mvRMlp9tnzWY SksQ== X-Google-Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=Q7aopMu6k6NflTqo6wee/fOihqUpohUmsTvEU96cNro=; b=GfDy7Fq0Pc3bORUQHELqKDAHWHL+TcqcQfSHtaJHyCqPjXV/GP2tVP/Hylo9bY73/s aEE9vh29ahCX4xXG67gkeuZo2qeNvbOPi9cWhzpAc4mbL/1+YCs5ysPnJ2py+VOwxxnr C6qSY/aiMblMRDpZFiF0yxt8WIWwsasTbMUVmffHJSFOU+H64M2hhpoc4k7cOjs4kF6y SdbSBsOk466xgju/5WZ6PXBHl/f6B+fbPQ+nqH/wJjFtFhpYu/yhdRsXK1r3rB1zKFIg 6xlDVvVrV0taJF4fCEPCjRqPqBVTLMhmdklkd2zn7xo2aa86VkEdmQj1rX6g2Dg97QyO x8uw== X-GM-Message-State: AIkVDXJCT27Ip89E/Tjz72cMyyF4IR3Cv2Gid25JMp2JTKXbsCWf52KgwCVFFysF1gfVFg== X-Received: by 10.25.215.212 with SMTP id q81mr20583281lfi.126.1483358191282; Mon, 02 Jan 2017 03:56:31 -0800 (PST) Received: from xi.terra (c-04aadb54.07-184-6d6c6d4.cust.bredbandsbolaget.se. [84.219.170.4]) by smtp.gmail.com with ESMTPSA id e6sm8698744lji.34.2017.01.02.03.56.29 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 02 Jan 2017 03:56:30 -0800 (PST) Sender: Johan Hovold Received: from johan by xi.terra with local (Exim 4.88) (envelope-from ) id 1cO1E5-0008Sn-83; Mon, 02 Jan 2017 12:56:29 +0100 From: Johan Hovold To: "David S. Miller" CC: Giuseppe Cavallaro , Alexandre Torgue , Neil Armstrong , netdev@vger.kernel.org, linux-oxnas@lists.tuxfamily.org, linux-kernel@vger.kernel.org, Johan Hovold Subject: [linux-oxnas] [PATCH net 2/3] net: stmmac: dwmac-oxnas: fix fixed-link-phydev leaks Date: Mon, 2 Jan 2017 12:56:03 +0100 Message-ID: <20170102115604.32482-3-johan@kernel.org> X-Mailer: git-send-email 2.10.2 In-Reply-To: <20170102115604.32482-1-johan@kernel.org> References: <20170102115604.32482-1-johan@kernel.org> List-Unsubscribe: List-Subscribe: List-Help: List-Software: Listengine, VHFFS 4.7-dev-4c39578052 List-ID: List-Post: List-Archive: Precedence: list Reply-To: linux-oxnas@lists.tuxfamily.org X-Virus-Scanned: ClamAV using ClamSMTP Make sure to deregister and free any fixed-link phy registered during probe on probe errors and on driver unbind by calling the new glue helper function. For driver unbind, use the generic stmmac-platform remove implementation and add an exit callback to disable the clock. Fixes: 5ed7414062e7 ("net: stmmac: Add OXNAS Glue Driver") Signed-off-by: Johan Hovold --- drivers/net/ethernet/stmicro/stmmac/dwmac-oxnas.c | 41 ++++++++++++++--------- 1 file changed, 26 insertions(+), 15 deletions(-) diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-oxnas.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-oxnas.c index fcc237e0aae1..3efd110613df 100644 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-oxnas.c +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-oxnas.c @@ -105,6 +105,13 @@ static int oxnas_dwmac_init(struct oxnas_dwmac *dwmac) return 0; } +static void oxnas_dwmac_exit(struct platform_device *pdev, void *priv) +{ + struct oxnas_dwmac *dwmac = priv; + + clk_disable_unprepare(dwmac->clk); +} + static int oxnas_dwmac_probe(struct platform_device *pdev) { struct plat_stmmacenet_data *plat_dat; @@ -121,40 +128,44 @@ static int oxnas_dwmac_probe(struct platform_device *pdev) return PTR_ERR(plat_dat); dwmac = devm_kzalloc(&pdev->dev, sizeof(*dwmac), GFP_KERNEL); - if (!dwmac) - return -ENOMEM; + if (!dwmac) { + ret = -ENOMEM; + goto err_remove_config_dt; + } dwmac->dev = &pdev->dev; plat_dat->bsp_priv = dwmac; + plat_dat->exit = oxnas_dwmac_exit; dwmac->regmap = syscon_regmap_lookup_by_phandle(pdev->dev.of_node, "oxsemi,sys-ctrl"); if (IS_ERR(dwmac->regmap)) { dev_err(&pdev->dev, "failed to have sysctrl regmap\n"); - return PTR_ERR(dwmac->regmap); + ret = PTR_ERR(dwmac->regmap); + goto err_remove_config_dt; } dwmac->clk = devm_clk_get(&pdev->dev, "gmac"); - if (IS_ERR(dwmac->clk)) - return PTR_ERR(dwmac->clk); + if (IS_ERR(dwmac->clk)) { + ret = PTR_ERR(dwmac->clk); + goto err_remove_config_dt; + } ret = oxnas_dwmac_init(dwmac); if (ret) - return ret; + goto err_remove_config_dt; ret = stmmac_dvr_probe(&pdev->dev, plat_dat, &stmmac_res); if (ret) - clk_disable_unprepare(dwmac->clk); + goto err_dwmac_exit; - 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); + return 0; - clk_disable_unprepare(dwmac->clk); +err_dwmac_exit: + oxnas_dwmac_exit(pdev, plat_dat->bsp_priv); +err_remove_config_dt: + stmmac_remove_config_dt(pdev, plat_dat); return ret; } @@ -197,7 +208,7 @@ MODULE_DEVICE_TABLE(of, oxnas_dwmac_match); static struct platform_driver oxnas_dwmac_driver = { .probe = oxnas_dwmac_probe, - .remove = oxnas_dwmac_remove, + .remove = stmmac_pltfr_remove, .driver = { .name = "oxnas-dwmac", .pm = &oxnas_dwmac_pm_ops,