Received: by 2002:a05:6358:a55:b0:ec:fcf4:3ecf with SMTP id 21csp680400rwb; Fri, 13 Jan 2023 02:55:46 -0800 (PST) X-Google-Smtp-Source: AMrXdXuCn2lgFwHiKviusDZ70K2DoF/co+lnkrn70zH7r6b3u3TOKSBoBGhrk2r1I2baUswCkokf X-Received: by 2002:a17:902:db08:b0:194:5d2d:3c31 with SMTP id m8-20020a170902db0800b001945d2d3c31mr8547589plx.11.1673607346574; Fri, 13 Jan 2023 02:55:46 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1673607346; cv=none; d=google.com; s=arc-20160816; b=pxDkQ5M5UKLk6HnJpUSSbl0OK6Y/+kBYuuDwUfWY7L2XQJzikqtotuT9p1TGirPI83 Ueb78yuzNEdvifZ0ShrsM5v6ANyvbWqGkXDqMcuy+hFelwNlzOKd4FNMAAECEPUtkATV shBjNwxjfBzz0jwGYAU06WyGJz7yjoe2AVLC9ReGSE79SvwD5tPOE/TlNetvaCP/IXW7 RVEgh4s68H0wNiFWkT364mEVr0fdfwEzBp+syublChlb+qQOzY+gnjfCfq2ushohmPbX Ej2ZBsLCCeswY1SAI5HgermodgZlwK8mC+V7G1SJFN9W1i+39I73LwmcbOQlEPCCyZcK C6Ow== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=WJ9UuLgWz8SP3k1RFSO2Xiza+7K4iTe0h1mDCgwDg/o=; b=iXtYqXO1Xycle9RCwCuAa2+JHVTnIPsEgQb8ZCrARwDKSlDgt3+NW5LkY/Pbpo4e2x y/ZOiGnFIeWwAIT0PzCvc7UWQXwn0abya25bnYScPF4BfTY7ogNQ1oVib4978uAiLJbd 3YPeh7mVWse+hxPqq/9GlMVefQEhZ4Lfuc6C25SrjCz/d07Sw4XcshWiF/Uvkb7Pgr6R cMJA8joCny0SKglWzV5CZL98ZKeIsGGTguvl8pP86TDiLExKf/aMLDVwXp5dIxvc1SC9 TmZjWg3E/c91H7lBoBwGm63uTvwNWzIhNkBbx1dDmVqbDoh4n5+JNbZ8n/oNaf8skSpW S6LA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@ti.com header.s=ti-com-17Q1 header.b=r9iJDThJ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=NONE dis=NONE) header.from=ti.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id j8-20020a170902da8800b00186881688f9si15978537plx.276.2023.01.13.02.55.40; Fri, 13 Jan 2023 02:55:46 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@ti.com header.s=ti-com-17Q1 header.b=r9iJDThJ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=NONE dis=NONE) header.from=ti.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241238AbjAMKtu (ORCPT + 51 others); Fri, 13 Jan 2023 05:49:50 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48068 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241303AbjAMKsw (ORCPT ); Fri, 13 Jan 2023 05:48:52 -0500 Received: from fllv0016.ext.ti.com (fllv0016.ext.ti.com [198.47.19.142]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 47D303C0DC; Fri, 13 Jan 2023 02:48:41 -0800 (PST) Received: from lelv0265.itg.ti.com ([10.180.67.224]) by fllv0016.ext.ti.com (8.15.2/8.15.2) with ESMTP id 30DAmLB1097763; Fri, 13 Jan 2023 04:48:21 -0600 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1673606901; bh=WJ9UuLgWz8SP3k1RFSO2Xiza+7K4iTe0h1mDCgwDg/o=; h=From:To:CC:Subject:Date; b=r9iJDThJxCE/XbwtLw3N0QRRB04ZFILEDVyN4maBDQQ6DuE/sn3k5sUvzFo/VoUqp FPdzkTfaLWpBQwZL8j7dxD6FO+QN4vIbVEgS87aKbbVei8fTkuw6YsJl+hpWLKOtX2 ivgppFXF/2DkL8pMDSSZu6PbOQ/F+J49dAp01VS4= Received: from DLEE104.ent.ti.com (dlee104.ent.ti.com [157.170.170.34]) by lelv0265.itg.ti.com (8.15.2/8.15.2) with ESMTPS id 30DAmL87026161 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Fri, 13 Jan 2023 04:48:21 -0600 Received: from DLEE100.ent.ti.com (157.170.170.30) by DLEE104.ent.ti.com (157.170.170.34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.16; Fri, 13 Jan 2023 04:48:20 -0600 Received: from fllv0040.itg.ti.com (10.64.41.20) by DLEE100.ent.ti.com (157.170.170.30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.16 via Frontend Transport; Fri, 13 Jan 2023 04:48:20 -0600 Received: from uda0492258.dhcp.ti.com (ileaxei01-snat.itg.ti.com [10.180.69.5]) by fllv0040.itg.ti.com (8.15.2/8.15.2) with ESMTP id 30DAmHBI125976; Fri, 13 Jan 2023 04:48:17 -0600 From: Siddharth Vadapalli To: , , , , , CC: , , , , , Subject: [PATCH net-next] net: ethernet: ti: am65-cpsw/cpts: Fix CPTS release action Date: Fri, 13 Jan 2023 16:18:16 +0530 Message-ID: <20230113104816.132815-1-s-vadapalli@ti.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-EXCLAIMER-MD-CONFIG: e1e8a2fd-e40a-4ac6-ac9b-f7e9cc9ee180 X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, SPF_HELO_PASS,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The am65_cpts_release() function is registered as a devm_action in the am65_cpts_create() function in am65-cpts driver. When the am65-cpsw driver invokes am65_cpts_create(), am65_cpts_release() is added in the set of devm actions associated with the am65-cpsw driver's device. In the event of probe failure or probe deferral, the platform_drv_probe() function invokes dev_pm_domain_detach() which powers off the CPSW and the CPSW's CPTS hardware, both of which share the same power domain. Since the am65_cpts_disable() function invoked by the am65_cpts_release() function attempts to reset the CPTS hardware by writing to its registers, the CPTS hardware is assumed to be powered on at this point. However, the hardware is powered off before the devm actions are executed. Fix this by getting rid of the devm action for am65_cpts_release() and invoking it directly on the cleanup and exit paths. Fixes: f6bd59526ca5 ("net: ethernet: ti: introduce am654 common platform time sync driver") Signed-off-by: Siddharth Vadapalli --- drivers/net/ethernet/ti/am65-cpsw-nuss.c | 8 ++++++++ drivers/net/ethernet/ti/am65-cpts.c | 15 +++++---------- drivers/net/ethernet/ti/am65-cpts.h | 1 + 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/drivers/net/ethernet/ti/am65-cpsw-nuss.c b/drivers/net/ethernet/ti/am65-cpsw-nuss.c index 5cac98284184..9e7ec97dea5d 100644 --- a/drivers/net/ethernet/ti/am65-cpsw-nuss.c +++ b/drivers/net/ethernet/ti/am65-cpsw-nuss.c @@ -1913,6 +1913,12 @@ static int am65_cpsw_am654_get_efuse_macid(struct device_node *of_node, return 0; } +static void am65_cpsw_cpts_cleanup(struct am65_cpsw_common *common) +{ + if (common->cpts) + am65_cpts_release(common->cpts); +} + static int am65_cpsw_init_cpts(struct am65_cpsw_common *common) { struct device *dev = common->dev; @@ -2917,6 +2923,7 @@ static int am65_cpsw_nuss_probe(struct platform_device *pdev) err_free_phylink: am65_cpsw_nuss_phylink_cleanup(common); + am65_cpsw_cpts_cleanup(common); err_of_clear: of_platform_device_destroy(common->mdio_dev, NULL); err_pm_clear: @@ -2945,6 +2952,7 @@ static int am65_cpsw_nuss_remove(struct platform_device *pdev) */ am65_cpsw_nuss_cleanup_ndev(common); am65_cpsw_nuss_phylink_cleanup(common); + am65_cpsw_cpts_cleanup(common); am65_cpsw_disable_serdes_phy(common); of_platform_device_destroy(common->mdio_dev, NULL); diff --git a/drivers/net/ethernet/ti/am65-cpts.c b/drivers/net/ethernet/ti/am65-cpts.c index 9535396b28cd..b7db72ab32c1 100644 --- a/drivers/net/ethernet/ti/am65-cpts.c +++ b/drivers/net/ethernet/ti/am65-cpts.c @@ -929,14 +929,13 @@ static int am65_cpts_of_parse(struct am65_cpts *cpts, struct device_node *node) return cpts_of_mux_clk_setup(cpts, node); } -static void am65_cpts_release(void *data) +void am65_cpts_release(struct am65_cpts *cpts) { - struct am65_cpts *cpts = data; - ptp_clock_unregister(cpts->ptp_clock); am65_cpts_disable(cpts); clk_disable_unprepare(cpts->refclk); } +EXPORT_SYMBOL_GPL(am65_cpts_release); struct am65_cpts *am65_cpts_create(struct device *dev, void __iomem *regs, struct device_node *node) @@ -1014,18 +1013,12 @@ struct am65_cpts *am65_cpts_create(struct device *dev, void __iomem *regs, } cpts->phc_index = ptp_clock_index(cpts->ptp_clock); - ret = devm_add_action_or_reset(dev, am65_cpts_release, cpts); - if (ret) { - dev_err(dev, "failed to add ptpclk reset action %d", ret); - return ERR_PTR(ret); - } - ret = devm_request_threaded_irq(dev, cpts->irq, NULL, am65_cpts_interrupt, IRQF_ONESHOT, dev_name(dev), cpts); if (ret < 0) { dev_err(cpts->dev, "error attaching irq %d\n", ret); - return ERR_PTR(ret); + goto reset_ptpclk; } dev_info(dev, "CPTS ver 0x%08x, freq:%u, add_val:%u\n", @@ -1034,6 +1027,8 @@ struct am65_cpts *am65_cpts_create(struct device *dev, void __iomem *regs, return cpts; +reset_ptpclk: + am65_cpts_release(cpts); refclk_disable: clk_disable_unprepare(cpts->refclk); return ERR_PTR(ret); diff --git a/drivers/net/ethernet/ti/am65-cpts.h b/drivers/net/ethernet/ti/am65-cpts.h index bd08f4b2edd2..22bf22bb37a5 100644 --- a/drivers/net/ethernet/ti/am65-cpts.h +++ b/drivers/net/ethernet/ti/am65-cpts.h @@ -18,6 +18,7 @@ struct am65_cpts_estf_cfg { }; #if IS_ENABLED(CONFIG_TI_K3_AM65_CPTS) +void am65_cpts_release(struct am65_cpts *cpts); struct am65_cpts *am65_cpts_create(struct device *dev, void __iomem *regs, struct device_node *node); int am65_cpts_phc_index(struct am65_cpts *cpts); -- 2.25.1