Received: by 2002:a5d:925a:0:0:0:0:0 with SMTP id e26csp1200943iol; Fri, 10 Jun 2022 02:25:26 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzIOBH9jibLUqKF/tq+jtKN0awiPVyZYD5LqAPIHm16qXNMoZ7LOX1vmTpCLnS9oMHnvuw7 X-Received: by 2002:a17:906:1109:b0:711:d8fe:fe56 with SMTP id h9-20020a170906110900b00711d8fefe56mr20099805eja.261.1654853114906; Fri, 10 Jun 2022 02:25:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654853114; cv=none; d=google.com; s=arc-20160816; b=sUo537NFaLC+2vJGMNbSREWVxzMJq7EFiFzZD+FLD/uZOqJChSC9sH4dXQ8exoJF9h +YANjfOdSMttLjXOGtl2ND3jy+3hyt+2btDM9zZZs1Or5fliiNsZQZmppQh4TIT7GN2O /pBlf7olgv+UQdmXuU39m/olp7UaPCLhhFkdRr9JR39v+snvjmXb32Pnrk8EFUbI5sv2 HDCQteg2LUCX2rmRN7ZOoADFXjeOz3guPdPBzSuuVU8lINrgtne0CF4blEoam9nwHFs7 U1Uj+rjvZDelU9ID0ZDJRu8EY6J94iOV5gYD5W9MWJhnMc2tHdM9l8/ZNMb1bJRosH5L oFUQ== 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 :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature:dkim-filter; bh=0UC9q2bwtl8h2upoqnyhwpHkomrRfaa9KFUIP6jhZqU=; b=oitAjA0nrW1oJbsEOejXawGa8BD8TefvTKZAapvES+U/SuckSp7DEZRiq/tcyNvqSc 7akX0/mivNgkXkD/t5XCzHJoqClCl6UoWI31gieV05r+S3RjuKZ9+VbOZB8UuDWlpucw 2V2xPT3K+v3tDpE1hfEIFwV9XDXQSNe82NteUTR2as6EZLCB8Knm/pRvXxdSqv7QLuir aTOtX1D06nIp/F+b6PzKLbN2333LymCGn0BqbNA4PR7wnfm2ri3foH+IMgdiCPECSZzT b5jpPZQUzs5hdPrrg2JE7yQCb/GuJ8DTWUlj5N5aSEj/tFDMrRJtBM0Ip1sU58aOlb+5 qosg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@baikalelectronics.ru header.s=mail header.b=Z6Iyitk9; 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=REJECT sp=REJECT dis=NONE) header.from=baikalelectronics.ru Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id dp16-20020a170906c15000b0070eb188249bsi23227107ejc.358.2022.06.10.02.24.47; Fri, 10 Jun 2022 02:25:14 -0700 (PDT) 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=@baikalelectronics.ru header.s=mail header.b=Z6Iyitk9; 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=REJECT sp=REJECT dis=NONE) header.from=baikalelectronics.ru Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1346816AbiFJI14 (ORCPT + 99 others); Fri, 10 Jun 2022 04:27:56 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55208 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235631AbiFJI1T (ORCPT ); Fri, 10 Jun 2022 04:27:19 -0400 Received: from mail.baikalelectronics.com (mail.baikalelectronics.com [87.245.175.230]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id F2C3211098D; Fri, 10 Jun 2022 01:25:40 -0700 (PDT) Received: from mail (mail.baikal.int [192.168.51.25]) by mail.baikalelectronics.com (Postfix) with ESMTP id 0DF2ABD1; Fri, 10 Jun 2022 11:26:30 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 mail.baikalelectronics.com 0DF2ABD1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baikalelectronics.ru; s=mail; t=1654849590; bh=0UC9q2bwtl8h2upoqnyhwpHkomrRfaa9KFUIP6jhZqU=; h=From:To:CC:Subject:Date:In-Reply-To:References:From; b=Z6Iyitk9nf/2WiG/aPcJGOTT6XDAJIjy0aOPl/Cp3IxTEDOqn0RMXnoxO2Zrz4fi5 fTLvOSf00Nl06rbUSXcj8HhA41QrmaoK0XyU75xnUiFi5/AqaTI0Z5Dsped1WNNqXu J0Q1EX1igRUU5k5zrNkLQG/5jM0KK15OLAuvrDDY= Received: from localhost (192.168.53.207) by mail (192.168.51.25) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Fri, 10 Jun 2022 11:25:37 +0300 From: Serge Semin To: Rob Herring , Bjorn Helgaas , Lorenzo Pieralisi , Jingoo Han , Gustavo Pimentel , =?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= CC: Serge Semin , Serge Semin , Alexey Malahov , Pavel Parkhomenko , Frank Li , Manivannan Sadhasivam , , Subject: [PATCH v4 01/18] PCI: dwc: Stop link in the host init error and de-initialization Date: Fri, 10 Jun 2022 11:25:17 +0300 Message-ID: <20220610082535.12802-2-Sergey.Semin@baikalelectronics.ru> In-Reply-To: <20220610082535.12802-1-Sergey.Semin@baikalelectronics.ru> References: <20220610082535.12802-1-Sergey.Semin@baikalelectronics.ru> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-ClientProxiedBy: MAIL.baikal.int (192.168.51.25) To mail (192.168.51.25) X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_PASS,SPF_PASS, T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED 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 It's logically correct to undo everything what was done in case of an error is discovered or in the corresponding cleanup counterpart. Otherwise the host controller will be left in an undetermined state. Seeing the link is set up in the Host-initialization method it will be right to de-activate it there in the cleanup-on-error block and stop the link in the antagonistic routine - dw_pcie_host_deinit(). The link de-activation is a platform-specific thing and is supposed to be implemented in the framework of the dw_pcie_ops.stop_link() operation. Fixes: 886a9c134755 ("PCI: dwc: Move link handling into common code") Signed-off-by: Serge Semin Reviewed-by: Manivannan Sadhasivam Tested-by: Manivannan Sadhasivam Reviewed-by: Rob Herring --- .../pci/controller/dwc/pcie-designware-host.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/drivers/pci/controller/dwc/pcie-designware-host.c b/drivers/pci/controller/dwc/pcie-designware-host.c index 2fa86f32d964..7403b1709726 100644 --- a/drivers/pci/controller/dwc/pcie-designware-host.c +++ b/drivers/pci/controller/dwc/pcie-designware-host.c @@ -420,8 +420,14 @@ int dw_pcie_host_init(struct pcie_port *pp) bridge->sysdata = pp; ret = pci_host_probe(bridge); - if (!ret) - return 0; + if (ret) + goto err_stop_link; + + return 0; + +err_stop_link: + if (pci->ops && pci->ops->stop_link) + pci->ops->stop_link(pci); err_free_msi: if (pp->has_msi_ctrl) @@ -432,8 +438,14 @@ EXPORT_SYMBOL_GPL(dw_pcie_host_init); void dw_pcie_host_deinit(struct pcie_port *pp) { + struct dw_pcie *pci = to_dw_pcie_from_pp(pp); + pci_stop_root_bus(pp->bridge->bus); pci_remove_root_bus(pp->bridge->bus); + + if (pci->ops && pci->ops->stop_link) + pci->ops->stop_link(pci); + if (pp->has_msi_ctrl) dw_pcie_free_msi(pp); } -- 2.35.1