Received: by 2002:a05:6a10:16a7:0:0:0:0 with SMTP id gp39csp3369320pxb; Mon, 9 Nov 2020 09:22:21 -0800 (PST) X-Google-Smtp-Source: ABdhPJyqH+PIeDMztBKr4Ez+vE1ujyrNUanolWk1JVWiyRq2Sf+lLc/Y8Sqbc/L4v+cBuwvHXnTv X-Received: by 2002:a50:de45:: with SMTP id a5mr16172291edl.91.1604942541503; Mon, 09 Nov 2020 09:22:21 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1604942541; cv=none; d=google.com; s=arc-20160816; b=UOnSw4uIFrXZQrpU/4i6ZrKZ9o21GRjLvdxB9KciEt3vRu5Mjqez58Y4oW0GQR6UjW KZyplh6a/6Ihzz9OWBBkr/m6KrM0AylYfzxiDQLktCSRWAh4XqiWxjR2OBbrxpfRENge Ou9vipcDts4ntxW6H6QO4BaKnUsTgLN4pmnKvlgWyk8fmcJxai8Ytc+X58DdZZps6JLC CzUa3+h9DsfIQEhmINaBLM6yvo6DiN7odE9VdD6TD2KfXK9w2YhJoOSQNExIXX3Dkfft ybmsio0epr6DI4oBDp8KRWOEAS1kdtmJLRYyQjEiJJICKRxboQu1pzjjY0HIyquPF6gd xOcw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:dkim-signature:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from; bh=d1b5N09A0gDzpFGUT4TW8j2hmyg/v7cQebOOw3h4SNQ=; b=Do30IfaOz0F6p/JCsWbk8RTmBkv06sUIIwYaGhB6bS/NXA7r4rjqYUVBHzTYBkT211 cYahImLHYW87DwZBy6VIOtQRIpRg71+ObtVRTipyGQ35TI00uhu0XzKwCYTgt72Q2iU/ +aJFd89Z+adZzpITdZyml9Oozr9oDuWukCFVGfbLZRfrAg5K2L5UjVlGe9g6uot45qon gke6KD4j7GmXTwkQgnAueu+v7FxelC/3rCrXPndGwvv/i9PQY9U7CnBrv4Etm/BdQWeN 4NnSNcklLoMbJgHLGz3MZfcLvTvuZNDdA0TGQq6TIGQPMxlXfMC0NHUHf4plbAJ3MY5G ELpQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@nvidia.com header.s=n1 header.b=d2ubCFhF; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nvidia.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id 1si3049683edv.354.2020.11.09.09.21.57; Mon, 09 Nov 2020 09:22:21 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@nvidia.com header.s=n1 header.b=d2ubCFhF; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nvidia.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731273AbgKIRUR (ORCPT + 99 others); Mon, 9 Nov 2020 12:20:17 -0500 Received: from hqnvemgate25.nvidia.com ([216.228.121.64]:1345 "EHLO hqnvemgate25.nvidia.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730768AbgKIRUQ (ORCPT ); Mon, 9 Nov 2020 12:20:16 -0500 Received: from hqmail.nvidia.com (Not Verified[216.228.121.13]) by hqnvemgate25.nvidia.com (using TLS: TLSv1.2, AES256-SHA) id ; Mon, 09 Nov 2020 09:20:12 -0800 Received: from HQMAIL105.nvidia.com (172.20.187.12) by HQMAIL111.nvidia.com (172.20.187.18) with Microsoft SMTP Server (TLS) id 15.0.1473.3; Mon, 9 Nov 2020 17:20:11 +0000 Received: from vidyas-desktop.nvidia.com (10.124.1.5) by mail.nvidia.com (172.20.187.12) with Microsoft SMTP Server id 15.0.1473.3 via Frontend Transport; Mon, 9 Nov 2020 17:20:07 +0000 From: Vidya Sagar To: , , , , , , , CC: , , , , , , Subject: [PATCH V4 4/6] PCI: tegra: Continue unconfig sequence even if parts fail Date: Mon, 9 Nov 2020 22:49:35 +0530 Message-ID: <20201109171937.28326-5-vidyas@nvidia.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20201109171937.28326-1-vidyas@nvidia.com> References: <20201109171937.28326-1-vidyas@nvidia.com> X-NVConfidentiality: public MIME-Version: 1.0 Content-Type: text/plain DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nvidia.com; s=n1; t=1604942412; bh=d1b5N09A0gDzpFGUT4TW8j2hmyg/v7cQebOOw3h4SNQ=; h=From:To:CC:Subject:Date:Message-ID:X-Mailer:In-Reply-To: References:X-NVConfidentiality:MIME-Version:Content-Type; b=d2ubCFhFk4oRcOCsWTtwq2Zz18GwJ9PVtUNRLVwmb/Fu5A2yQL0g5A23XOHFladcC b7aUjL95jEqOFt1A0VOg6/xXwl+A6Xy9GjMSwBfzfazGoxzhc/FZeeh5mB+f6E5pUV dPo7ZYl+6gw68dlwDvhA4kh7uPjz/LLF9pYXuspny8kkeBjSUnOwOvML4RfGx4kYz0 sFTndpVaFVVXCR23WQfxXV+e4OL+2/byXTAhps7l6rOR6hG//QTTjGHjdgpkPCCDT2 K7teYaQfg9pxUlCjraToimUheiRcOZwyn0HlCbS3KJ5Gfk3QwA+n0qC0vzNH/P3N7d hhmmTKNojxvmQ== Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Currently the driver checks for error value of different APIs during the uninitialization sequence. It just returns from there if there is any error observed for one of those calls. Comparatively it is better to continue the uninitialization sequence irrespective of whether some of them are returning error. That way, it is more closer to complete uninitialization. Signed-off-by: Vidya Sagar --- V4: * None V3: * Modified subject as per Bjorn's suggestion * Removed tegra_pcie_init_controller()'s error checking part and pushed a separate patch for it V2: * None drivers/pci/controller/dwc/pcie-tegra194.c | 39 +++++++++------------- 1 file changed, 15 insertions(+), 24 deletions(-) diff --git a/drivers/pci/controller/dwc/pcie-tegra194.c b/drivers/pci/controller/dwc/pcie-tegra194.c index 253d91033bc3..9be10c8953df 100644 --- a/drivers/pci/controller/dwc/pcie-tegra194.c +++ b/drivers/pci/controller/dwc/pcie-tegra194.c @@ -1422,43 +1422,32 @@ static int tegra_pcie_config_controller(struct tegra_pcie_dw *pcie, return ret; } -static int __deinit_controller(struct tegra_pcie_dw *pcie) +static void tegra_pcie_unconfig_controller(struct tegra_pcie_dw *pcie) { int ret; ret = reset_control_assert(pcie->core_rst); - if (ret) { - dev_err(pcie->dev, "Failed to assert \"core\" reset: %d\n", - ret); - return ret; - } + if (ret) + dev_err(pcie->dev, "Failed to assert \"core\" reset: %d\n", ret); tegra_pcie_disable_phy(pcie); ret = reset_control_assert(pcie->core_apb_rst); - if (ret) { + if (ret) dev_err(pcie->dev, "Failed to assert APB reset: %d\n", ret); - return ret; - } clk_disable_unprepare(pcie->core_clk); ret = regulator_disable(pcie->pex_ctl_supply); - if (ret) { + if (ret) dev_err(pcie->dev, "Failed to disable regulator: %d\n", ret); - return ret; - } tegra_pcie_disable_slot_regulators(pcie); ret = tegra_pcie_bpmp_set_ctrl_state(pcie, false); - if (ret) { + if (ret) dev_err(pcie->dev, "Failed to disable controller %d: %d\n", pcie->cid, ret); - return ret; - } - - return ret; } static int tegra_pcie_init_controller(struct tegra_pcie_dw *pcie) @@ -1482,7 +1471,8 @@ static int tegra_pcie_init_controller(struct tegra_pcie_dw *pcie) return 0; fail_host_init: - return __deinit_controller(pcie); + tegra_pcie_unconfig_controller(pcie); + return ret; } static int tegra_pcie_try_link_l2(struct tegra_pcie_dw *pcie) @@ -1551,13 +1541,12 @@ static void tegra_pcie_dw_pme_turnoff(struct tegra_pcie_dw *pcie) appl_writel(pcie, data, APPL_PINMUX); } -static int tegra_pcie_deinit_controller(struct tegra_pcie_dw *pcie) +static void tegra_pcie_deinit_controller(struct tegra_pcie_dw *pcie) { tegra_pcie_downstream_dev_to_D0(pcie); dw_pcie_host_deinit(&pcie->pci.pp); tegra_pcie_dw_pme_turnoff(pcie); - - return __deinit_controller(pcie); + tegra_pcie_unconfig_controller(pcie); } static int tegra_pcie_config_rp(struct tegra_pcie_dw *pcie) @@ -2238,8 +2227,9 @@ static int tegra_pcie_dw_suspend_noirq(struct device *dev) PORT_LOGIC_MSI_CTRL_INT_0_EN); tegra_pcie_downstream_dev_to_D0(pcie); tegra_pcie_dw_pme_turnoff(pcie); + tegra_pcie_unconfig_controller(pcie); - return __deinit_controller(pcie); + return 0; } static int tegra_pcie_dw_resume_noirq(struct device *dev) @@ -2267,7 +2257,8 @@ static int tegra_pcie_dw_resume_noirq(struct device *dev) return 0; fail_host_init: - return __deinit_controller(pcie); + tegra_pcie_unconfig_controller(pcie); + return ret; } static int tegra_pcie_dw_resume_early(struct device *dev) @@ -2305,7 +2296,7 @@ static void tegra_pcie_dw_shutdown(struct platform_device *pdev) disable_irq(pcie->pci.pp.msi_irq); tegra_pcie_dw_pme_turnoff(pcie); - __deinit_controller(pcie); + tegra_pcie_unconfig_controller(pcie); } static const struct tegra_pcie_dw_of_data tegra_pcie_dw_rc_of_data = { -- 2.17.1