From: Simon Horman <horms@verge.net.au>
To: Marek Vasut <marek.vasut@gmail.com>
Cc: linux-pci@vger.kernel.org,
Phil Edworthy <phil.edworthy@renesas.com>,
Marek Vasut <marek.vasut+renesas@gmail.com>,
Geert Uytterhoeven <geert+renesas@glider.be>,
Wolfram Sang <wsa@the-dreams.de>,
linux-renesas-soc@vger.kernel.org
Subject: Re: [PATCH V2 4/5] PCI: rcar: Support runtime PM, link state L1 handling
Date: Mon, 13 Nov 2017 08:05:37 +0100 [thread overview]
Message-ID: <20171113070536.nwwrvt5dedu4kch2@verge.net.au> (raw)
In-Reply-To: <20171110215843.432-5-marek.vasut+renesas@gmail.com>
On Fri, Nov 10, 2017 at 10:58:42PM +0100, Marek Vasut wrote:
> From: Phil Edworthy <phil.edworthy@renesas.com>
>
> Most PCIe host controllers support L0s and L1 power states via ASPM.
> The R-Car hardware only supports L0s, so when the system suspends and
> resumes we have to manually handle L1.
>
> When the system suspends, cards can put themselves into L1 and send a
> PM_ENTER_L1 DLLP to the host controller. At this point, we can no longer
> access the card's config registers.
>
> The R-Car host controller will handle taking cards out of L1 as long as
> the host controller has also been transitioned to L1 link state.
>
> Ideally, we would detect the PM_ENTER_L1 DLLP using an interrupt and
> transition the host to L1 immediately. However, this patch just ensures
> that we can talk to cards after they have gone into L1.
> When attempting a config access, it checks to see if the card has gone
> into L1, and if so, does the same for the host controller.
>
> This is based on a patch by Hien Dang <hien.dang.eb@rvc.renesas.com>
>
> Signed-off-by: Phil Edworthy <phil.edworthy@renesas.com>
> Signed-off-by: Marek Vasut <marek.vasut+renesas@gmail.com>
> Cc: Geert Uytterhoeven <geert+renesas@glider.be>
> Cc: Phil Edworthy <phil.edworthy@renesas.com>
> Cc: Simon Horman <horms+renesas@verge.net.au>
> Cc: Wolfram Sang <wsa@the-dreams.de>
> Cc: linux-renesas-soc@vger.kernel.org
Acked-by: Simon Horman <horms+renesas@verge.net.au>
> ---
> V2: - Drop extra parenthesis
> - Use GENMASK()
> - Fix comment "The HW will handle coming of of L1.", s/of of/out of/
> ---
> drivers/pci/host/pcie-rcar.c | 24 ++++++++++++++++++++++++
> 1 file changed, 24 insertions(+)
>
> diff --git a/drivers/pci/host/pcie-rcar.c b/drivers/pci/host/pcie-rcar.c
> index ab61829db389..068bf9067ec1 100644
> --- a/drivers/pci/host/pcie-rcar.c
> +++ b/drivers/pci/host/pcie-rcar.c
> @@ -92,6 +92,13 @@
> #define MACCTLR 0x011058
> #define SPEED_CHANGE BIT(24)
> #define SCRAMBLE_DISABLE BIT(27)
> +#define PMSR 0x01105c
> +#define L1FAEG BIT(31)
> +#define PM_ENTER_L1RX BIT(23)
> +#define PMSTATE GENMASK(18, 16)
> +#define PMSTATE_L1 GENMASK(17, 16)
> +#define PMCTLR 0x011060
> +#define L1_INIT BIT(31)
> #define MACS2R 0x011078
> #define MACCGSPSETR 0x011084
> #define SPCNGRSN BIT(31)
> @@ -191,6 +198,7 @@ static int rcar_pcie_config_access(struct rcar_pcie *pcie,
> unsigned int devfn, int where, u32 *data)
> {
> int dev, func, reg, index;
> + u32 val;
>
> dev = PCI_SLOT(devfn);
> func = PCI_FUNC(devfn);
> @@ -232,6 +240,22 @@ static int rcar_pcie_config_access(struct rcar_pcie *pcie,
> if (pcie->root_bus_nr < 0)
> return PCIBIOS_DEVICE_NOT_FOUND;
>
> + /*
> + * If we are not in L1 link state and we have received PM_ENTER_L1 DLLP,
> + * transition to L1 link state. The HW will handle coming out of L1.
> + */
> + val = rcar_pci_read_reg(pcie, PMSR);
> + if (val & PM_ENTER_L1RX && (val & PMSTATE) != PMSTATE_L1) {
> + rcar_pci_write_reg(pcie, L1_INIT, PMCTLR);
> +
> + /* Wait until we are in L1 */
> + while (!(val & L1FAEG))
> + val = rcar_pci_read_reg(pcie, PMSR);
> +
> + /* Clear flags indicating link has transitioned to L1 */
> + rcar_pci_write_reg(pcie, L1FAEG | PM_ENTER_L1RX, PMSR);
> + }
> +
> /* Clear errors */
> rcar_pci_write_reg(pcie, rcar_pci_read_reg(pcie, PCIEERRFR), PCIEERRFR);
>
> --
> 2.11.0
>
next prev parent reply other threads:[~2017-11-13 7:05 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-11-10 21:58 [PATCH V2 0/5] PCI: rcar: Add suspend/resume support Marek Vasut
2017-11-10 21:58 ` [PATCH V2 1/5] PCI: rcar: Poll more often in rcar_pcie_wait_for_dl() Marek Vasut
2017-11-13 7:03 ` Simon Horman
2017-11-10 21:58 ` [PATCH V2 2/5] PCI: rcar: Clean up the macros Marek Vasut
2017-11-13 7:03 ` Simon Horman
2017-11-13 18:11 ` Marek Vasut
2017-11-15 13:28 ` Simon Horman
2017-11-22 11:20 ` Marek Vasut
2017-11-10 21:58 ` [PATCH V2 3/5] PCI: rcar: Add the initialization of PCIe link in resume_noirq Marek Vasut
2017-11-13 7:05 ` Simon Horman
2017-11-10 21:58 ` [PATCH V2 4/5] PCI: rcar: Support runtime PM, link state L1 handling Marek Vasut
2017-11-13 7:05 ` Simon Horman [this message]
2017-11-17 17:49 ` Lorenzo Pieralisi
2018-06-10 13:57 ` Marek Vasut
2018-06-11 13:59 ` Bjorn Helgaas
2018-06-12 23:54 ` Marek Vasut
2018-06-13 13:53 ` Bjorn Helgaas
2018-06-13 15:52 ` Lorenzo Pieralisi
2018-06-13 17:25 ` Bjorn Helgaas
2018-06-14 11:43 ` Lorenzo Pieralisi
2018-07-25 21:08 ` Marek Vasut
2018-08-08 13:29 ` Marek Vasut
2018-08-20 13:44 ` Phil Edworthy
2018-08-20 13:44 ` Phil Edworthy
2018-08-20 14:47 ` Lorenzo Pieralisi
2018-08-21 8:58 ` Phil Edworthy
2018-08-21 8:58 ` Phil Edworthy
2018-08-21 15:32 ` Lorenzo Pieralisi
2018-08-22 9:20 ` Phil Edworthy
2018-08-22 9:20 ` Phil Edworthy
2018-08-14 16:25 ` Lorenzo Pieralisi
2017-11-10 21:58 ` [PATCH V2 5/5] PCI: rcar: Add the suspend/resume for pcie-rcar driver Marek Vasut
2017-11-15 13:27 ` Simon Horman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20171113070536.nwwrvt5dedu4kch2@verge.net.au \
--to=horms@verge.net.au \
--cc=geert+renesas@glider.be \
--cc=linux-pci@vger.kernel.org \
--cc=linux-renesas-soc@vger.kernel.org \
--cc=marek.vasut+renesas@gmail.com \
--cc=marek.vasut@gmail.com \
--cc=phil.edworthy@renesas.com \
--cc=wsa@the-dreams.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.