Received: by 2002:a25:86ce:0:0:0:0:0 with SMTP id y14csp2160919ybm; Thu, 23 May 2019 12:21:17 -0700 (PDT) X-Google-Smtp-Source: APXvYqysWstU2Pi6b7HHc0b0A+spstDS3x2t2tm9+mZqwWqp6XrCKLaLcGX4PYzGGgg2jo/7SONL X-Received: by 2002:a63:c64a:: with SMTP id x10mr99043586pgg.195.1558639277013; Thu, 23 May 2019 12:21:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1558639276; cv=none; d=google.com; s=arc-20160816; b=utk27Jm63DYiDgBH6MF5dcI7u6d9HdzVhBljjSVBqMdjVBFl5/VcneNLU4U/1kK8Wf dXpY+ejODn9qzgQtDvtwQxLPhgK71oUuqMIIDI0IokCHdcUNjck8RR84x9ohPO3GoIho WeH16BWD92a9RQ9ghOZefRI7/Y15ys+imNBe8xed6iZmGlboGH/Fj9coRxMSVLeoZaCG VdX3wcqvLxbihcoGUe2yXGfBX7P/ymGGOewUsNat7RJQdRl/cHqVzCmOMbf8mZ6EHugx zzc6/hkr2A4ldmH/1QqeErFJhEvDDtNSO1b7QDiM7FAS5GeFGzNQ8wIQEPd7YsS+PxgZ 0inw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=k+uLX1JCIf41r7gnvCIFz30NhUsORoUK9z5QsMtfoSI=; b=aGjb4Ii4P1gzMFvFjBxT5feEUbGlLrlLFo8uuCUOjudJqI7CXBxypYot3kyHb8eHRg ofWbWgaJAzy4erkXq/a0LJHsT3taggnYYHl14pHuCGyzOv0233PKg+PXiOIgQgSg7cZU Ua4UEsZRPmyfqoXn5fdwlzdhhhBeuinFwz8YYpowb+ellx07ASVcW9D9S5H62YIZlgaw rgvsGgYiyYZvJbZvLzCLQl0ya2MDsJBE7hpV5AOKmSPwsfwZltPhzdtu5bDw6wfy/TEH CptN4yqPDPyOWNqJw9xQJflZ2hPG9K+/Ao+BRYu4SorkylesnUrgnVgTVuPIVkmrIndH zq/Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=HTVMFP7s; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id k89si325845pje.43.2019.05.23.12.21.02; Thu, 23 May 2019 12:21:16 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=HTVMFP7s; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389563AbfEWTSQ (ORCPT + 99 others); Thu, 23 May 2019 15:18:16 -0400 Received: from mail.kernel.org ([198.145.29.99]:53580 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389124AbfEWTSM (ORCPT ); Thu, 23 May 2019 15:18:12 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 05928217D7; Thu, 23 May 2019 19:18:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1558639091; bh=+t0u5GOucS63bRMTYhnfoDgwbCZ7hpJlC0pSSCGnqdA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=HTVMFP7sc+56JRgcNRLMLzJVrka+nyVwDIiZ1Xbq6Na3JK1CpprEd9+W/ERRolTa0 OoKtKiXva8oKSAOiKGQLt/AEHsGzVG7NEKXhzxYQv4mj9Bw8UsX3ZtcMk9mBJ4qOiL K7qSnNqktT48gVRWa6iVYIyMBqBG/VIZ278ruagM= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Kazufumi Ikeda , Gaku Inami , Marek Vasut , Lorenzo Pieralisi , Simon Horman , Geert Uytterhoeven , Wolfram Sang , Phil Edworthy , Wolfram Sang , linux-renesas-soc@vger.kernel.org Subject: [PATCH 4.19 074/114] PCI: rcar: Add the initialization of PCIe link in resume_noirq() Date: Thu, 23 May 2019 21:06:13 +0200 Message-Id: <20190523181738.447719138@linuxfoundation.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190523181731.372074275@linuxfoundation.org> References: <20190523181731.372074275@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Kazufumi Ikeda commit be20bbcb0a8cb5597cc62b3e28d275919f3431df upstream. Reestablish the PCIe link very early in the resume process in case it went down to prevent PCI accesses from hanging the bus. Such accesses can happen early in the PCI resume process, as early as the SUSPEND_RESUME_NOIRQ step, thus the link must be reestablished in the driver resume_noirq() callback. Fixes: e015f88c368d ("PCI: rcar: Add support for R-Car H3 to pcie-rcar") Signed-off-by: Kazufumi Ikeda Signed-off-by: Gaku Inami Signed-off-by: Marek Vasut [lorenzo.pieralisi@arm.com: reformatted commit log] Signed-off-by: Lorenzo Pieralisi Reviewed-by: Simon Horman Reviewed-by: Geert Uytterhoeven Acked-by: Wolfram Sang Cc: stable@vger.kernel.org Cc: Geert Uytterhoeven Cc: Phil Edworthy Cc: Simon Horman Cc: Wolfram Sang Cc: linux-renesas-soc@vger.kernel.org Signed-off-by: Greg Kroah-Hartman --- drivers/pci/controller/pcie-rcar.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) --- a/drivers/pci/controller/pcie-rcar.c +++ b/drivers/pci/controller/pcie-rcar.c @@ -46,6 +46,7 @@ /* Transfer control */ #define PCIETCTLR 0x02000 +#define DL_DOWN BIT(3) #define CFINIT 1 #define PCIETSTR 0x02004 #define DATA_LINK_ACTIVE 1 @@ -94,6 +95,7 @@ #define MACCTLR 0x011058 #define SPEED_CHANGE BIT(24) #define SCRAMBLE_DISABLE BIT(27) +#define PMSR 0x01105c #define MACS2R 0x011078 #define MACCGSPSETR 0x011084 #define SPCNGRSN BIT(31) @@ -1130,6 +1132,7 @@ static int rcar_pcie_probe(struct platfo pcie = pci_host_bridge_priv(bridge); pcie->dev = dev; + platform_set_drvdata(pdev, pcie); err = pci_parse_request_of_pci_ranges(dev, &pcie->resources, NULL); if (err) @@ -1221,10 +1224,28 @@ err_free_bridge: return err; } +static int rcar_pcie_resume_noirq(struct device *dev) +{ + struct rcar_pcie *pcie = dev_get_drvdata(dev); + + if (rcar_pci_read_reg(pcie, PMSR) && + !(rcar_pci_read_reg(pcie, PCIETCTLR) & DL_DOWN)) + return 0; + + /* Re-establish the PCIe link */ + rcar_pci_write_reg(pcie, CFINIT, PCIETCTLR); + return rcar_pcie_wait_for_dl(pcie); +} + +static const struct dev_pm_ops rcar_pcie_pm_ops = { + .resume_noirq = rcar_pcie_resume_noirq, +}; + static struct platform_driver rcar_pcie_driver = { .driver = { .name = "rcar-pcie", .of_match_table = rcar_pcie_of_match, + .pm = &rcar_pcie_pm_ops, .suppress_bind_attrs = true, }, .probe = rcar_pcie_probe,