All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dmitry Osipenko <digetx@gmail.com>
To: Sowjanya Komatineni <skomatineni@nvidia.com>,
	thierry.reding@gmail.com, jonathanh@nvidia.com,
	tglx@linutronix.de, jason@lakedaemon.net, marc.zyngier@arm.com,
	linus.walleij@linaro.org, stefan@agner.ch, mark.rutland@arm.com
Cc: pdeschrijver@nvidia.com, pgaikwad@nvidia.com, sboyd@kernel.org,
	linux-clk@vger.kernel.org, linux-gpio@vger.kernel.org,
	jckuo@nvidia.com, josephl@nvidia.com, talho@nvidia.com,
	linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org,
	mperttunen@nvidia.com, spatra@nvidia.com, robh+dt@kernel.org,
	devicetree@vger.kernel.org
Subject: Re: [PATCH V5 02/18] pinctrl: tegra: Add suspend and resume support
Date: Fri, 28 Jun 2019 14:56:32 +0300	[thread overview]
Message-ID: <0409f478-e425-4e7f-5fff-8c3a94f47ee8@gmail.com> (raw)
In-Reply-To: <1561687972-19319-3-git-send-email-skomatineni@nvidia.com>

28.06.2019 5:12, Sowjanya Komatineni пишет:
> This patch adds support for Tegra pinctrl driver suspend and resume.
> 
> During suspend, context of all pinctrl registers are stored and
> on resume they are all restored to have all the pinmux and pad
> configuration for normal operation.
> 
> Acked-by: Thierry Reding <treding@nvidia.com>
> Signed-off-by: Sowjanya Komatineni <skomatineni@nvidia.com>
> ---
>  drivers/pinctrl/tegra/pinctrl-tegra.c    | 52 ++++++++++++++++++++++++++++++++
>  drivers/pinctrl/tegra/pinctrl-tegra.h    |  3 ++
>  drivers/pinctrl/tegra/pinctrl-tegra210.c |  1 +
>  3 files changed, 56 insertions(+)
> 
> diff --git a/drivers/pinctrl/tegra/pinctrl-tegra.c b/drivers/pinctrl/tegra/pinctrl-tegra.c
> index 34596b246578..e7c0a1011cba 100644
> --- a/drivers/pinctrl/tegra/pinctrl-tegra.c
> +++ b/drivers/pinctrl/tegra/pinctrl-tegra.c
> @@ -621,6 +621,43 @@ static void tegra_pinctrl_clear_parked_bits(struct tegra_pmx *pmx)
>  	}
>  }
>  
> +static int tegra_pinctrl_suspend(struct device *dev)
> +{
> +	struct tegra_pmx *pmx = dev_get_drvdata(dev);
> +	u32 *backup_regs = pmx->backup_regs;
> +	u32 *regs;
> +	unsigned int i, j;

In general it's better not to use "j" in conjunction with "i" because they look
similar and I seen quite a lot of bugs caused by unnoticed typos like that. So I'm
suggesting to use "i, k" for clarity.

> +
> +	for (i = 0; i < pmx->nbanks; i++) {
> +		regs = pmx->regs[i];
> +		for (j = 0; j < pmx->reg_bank_size[i] / 4; j++)
> +			*backup_regs++ = readl(regs++);

Please use readl_relaxed(), we don't need memory barriers here.

> +	}
> +
> +	return pinctrl_force_sleep(pmx->pctl);
> +}
> +
> +static int tegra_pinctrl_resume(struct device *dev)
> +{
> +	struct tegra_pmx *pmx = dev_get_drvdata(dev);
> +	u32 *backup_regs = pmx->backup_regs;
> +	u32 *regs;
> +	unsigned int i, j;
> +
> +	for (i = 0; i < pmx->nbanks; i++) {
> +		regs = pmx->regs[i];> +		for (j = 0; j < pmx->reg_bank_size[i] / 4; j++)
> +			writel(*backup_regs++, regs++);

Same for writel_relaxed(), memory barrier is inserted *before* the write to ensure
that all previous memory stores are completed. IOREMAP'ed memory is strongly-ordered,
memory barriers are not needed here.

> +	}
> +
> +	return 0;
> +}
> +
> +const struct dev_pm_ops tegra_pinctrl_pm = {
> +	.suspend = &tegra_pinctrl_suspend,
> +	.resume = &tegra_pinctrl_resume
> +};
> +
>  static bool gpio_node_has_range(const char *compatible)
>  {
>  	struct device_node *np;
> @@ -645,6 +682,7 @@ int tegra_pinctrl_probe(struct platform_device *pdev,
>  	int i;
>  	const char **group_pins;
>  	int fn, gn, gfn;
> +	unsigned long backup_regs_size = 0;
>  
>  	pmx = devm_kzalloc(&pdev->dev, sizeof(*pmx), GFP_KERNEL);
>  	if (!pmx)
> @@ -697,6 +735,7 @@ int tegra_pinctrl_probe(struct platform_device *pdev,
>  		res = platform_get_resource(pdev, IORESOURCE_MEM, i);
>  		if (!res)
>  			break;
> +		backup_regs_size += resource_size(res);
>  	}
>  	pmx->nbanks = i;
>  
> @@ -705,11 +744,24 @@ int tegra_pinctrl_probe(struct platform_device *pdev,
>  	if (!pmx->regs)
>  		return -ENOMEM;
>  
> +	pmx->reg_bank_size = devm_kcalloc(&pdev->dev, pmx->nbanks,
> +					  sizeof(*pmx->reg_bank_size),
> +					  GFP_KERNEL);
> +	if (!pmx->reg_bank_size)
> +		return -ENOMEM;

It looks to me that we don't really need to churn with this allocation because the
bank sizes are already a part of the platform driver's description.

We could add a simple helper function that retrieves the bank sizes, like this:

static unsigned int tegra_pinctrl_bank_size(struct device *dev,
					    unsigned int bank_id)
{
	struct platform_device *pdev;
	struct resource *res;

	pdev = to_platform_device(dev);
	res = platform_get_resource(pdev, IORESOURCE_MEM, bank_id);

	return resource_size(res) / 4;
}

> +	pmx->backup_regs = devm_kzalloc(&pdev->dev, backup_regs_size,
> +					GFP_KERNEL);
> +	if (!pmx->backup_regs)
> +		return -ENOMEM;
> +
>  	for (i = 0; i < pmx->nbanks; i++) {
>  		res = platform_get_resource(pdev, IORESOURCE_MEM, i);
>  		pmx->regs[i] = devm_ioremap_resource(&pdev->dev, res);
>  		if (IS_ERR(pmx->regs[i]))
>  			return PTR_ERR(pmx->regs[i]);
> +
> +		pmx->reg_bank_size[i] = resource_size(res);
>  	}
>  
>  	pmx->pctl = devm_pinctrl_register(&pdev->dev, &tegra_pinctrl_desc, pmx);
> diff --git a/drivers/pinctrl/tegra/pinctrl-tegra.h b/drivers/pinctrl/tegra/pinctrl-tegra.h
> index 287702660783..55456f8d44cf 100644
> --- a/drivers/pinctrl/tegra/pinctrl-tegra.h
> +++ b/drivers/pinctrl/tegra/pinctrl-tegra.h
> @@ -17,6 +17,8 @@ struct tegra_pmx {
>  
>  	int nbanks;
>  	void __iomem **regs;
> +	size_t *reg_bank_size;
> +	u32 *backup_regs;
>  };
>  
>  enum tegra_pinconf_param {
> @@ -193,6 +195,7 @@ struct tegra_pinctrl_soc_data {
>  	bool drvtype_in_mux;
>  };
>  
> +extern const struct dev_pm_ops tegra_pinctrl_pm;

Please add a newline here.

>  int tegra_pinctrl_probe(struct platform_device *pdev,
>  			const struct tegra_pinctrl_soc_data *soc_data);
>  #endif
> diff --git a/drivers/pinctrl/tegra/pinctrl-tegra210.c b/drivers/pinctrl/tegra/pinctrl-tegra210.c
> index 0b56ad5c9c1c..edd3f4606cdb 100644
> --- a/drivers/pinctrl/tegra/pinctrl-tegra210.c
> +++ b/drivers/pinctrl/tegra/pinctrl-tegra210.c
> @@ -1571,6 +1571,7 @@ static struct platform_driver tegra210_pinctrl_driver = {
>  	.driver = {
>  		.name = "tegra210-pinctrl",
>  		.of_match_table = tegra210_pinctrl_of_match,
> +		.pm = &tegra_pinctrl_pm,
>  	},
>  	.probe = tegra210_pinctrl_probe,
>  };
> 

Could you please address my comments in the next revision if there will be one?

  reply	other threads:[~2019-06-28 11:56 UTC|newest]

Thread overview: 187+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-06-28  2:12 [PATCH V5 00/18] SC7 entry and exit support for Tegra210 Sowjanya Komatineni
2019-06-28  2:12 ` Sowjanya Komatineni
2019-06-28  2:12 ` [PATCH V5 01/18] irqchip: tegra: Do not disable COP IRQ during suspend Sowjanya Komatineni
2019-06-28  2:12   ` Sowjanya Komatineni
2019-06-28  2:12 ` [PATCH V5 02/18] pinctrl: tegra: Add suspend and resume support Sowjanya Komatineni
2019-06-28  2:12   ` Sowjanya Komatineni
2019-06-28 11:56   ` Dmitry Osipenko [this message]
2019-06-28 12:05     ` Dmitry Osipenko
2019-06-28 23:00       ` Sowjanya Komatineni
2019-06-28 23:00         ` Sowjanya Komatineni
2019-06-29 12:38         ` Dmitry Osipenko
2019-06-29 15:40           ` Dmitry Osipenko
2019-06-29 15:46   ` Dmitry Osipenko
2019-06-29 15:58     ` Dmitry Osipenko
2019-06-29 16:28       ` Dmitry Osipenko
2019-07-04  7:31       ` Linus Walleij
2019-07-04  7:31         ` Linus Walleij
2019-07-04 10:40         ` Dmitry Osipenko
2019-07-04 10:40           ` Dmitry Osipenko
2019-07-13  5:31           ` Sowjanya Komatineni
2019-07-13  5:31             ` Sowjanya Komatineni
2019-07-14 21:41             ` Dmitry Osipenko
2019-07-14 21:41               ` Dmitry Osipenko
2019-07-13  5:48     ` Sowjanya Komatineni
2019-07-13  5:48       ` Sowjanya Komatineni
2019-07-04  7:26   ` Linus Walleij
2019-07-04  7:26     ` Linus Walleij
2019-06-28  2:12 ` [PATCH V5 03/18] clk: tegra: Save and restore divider rate Sowjanya Komatineni
2019-06-28  2:12   ` Sowjanya Komatineni
2019-06-28  2:12 ` [PATCH V5 04/18] clk: tegra: pllout: Save and restore pllout context Sowjanya Komatineni
2019-06-28  2:12   ` Sowjanya Komatineni
2019-06-28  2:12 ` [PATCH V5 05/18] clk: tegra: pll: Save and restore pll context Sowjanya Komatineni
2019-06-28  2:12   ` Sowjanya Komatineni
2019-06-28  2:12 ` [PATCH V5 06/18] clk: tegra: Save and restore CPU and System clocks context Sowjanya Komatineni
2019-06-28  2:12   ` Sowjanya Komatineni
2019-06-29 13:33   ` Dmitry Osipenko
2019-06-29 15:26   ` Dmitry Osipenko
2019-06-28  2:12 ` [PATCH V5 07/18] clk: tegra: Support for saving and restoring OSC context Sowjanya Komatineni
2019-06-28  2:12   ` Sowjanya Komatineni
2019-06-28  2:12 ` [PATCH V5 08/18] clk: tegra: Add suspend resume support for DFLL Sowjanya Komatineni
2019-06-28  2:12   ` Sowjanya Komatineni
2019-06-29 13:28   ` Dmitry Osipenko
2019-06-29 21:45     ` Dmitry Osipenko
2019-06-28  2:12 ` [PATCH V5 09/18] clk: tegra: Add save and restore context support for peripheral clocks Sowjanya Komatineni
2019-06-28  2:12   ` Sowjanya Komatineni
2019-06-29 13:17   ` Dmitry Osipenko
2019-06-28  2:12 ` [PATCH V5 10/18] clk: tegra210: Use fence_udelay during PLLU init Sowjanya Komatineni
2019-06-28  2:12   ` Sowjanya Komatineni
2019-06-28  2:12 ` [PATCH V5 11/18] clk: tegra210: Add support for Tegra210 clocks Sowjanya Komatineni
2019-06-28  2:12   ` Sowjanya Komatineni
2019-06-29 13:14   ` Dmitry Osipenko
2019-06-29 15:10   ` Dmitry Osipenko
2019-07-13  5:54     ` Sowjanya Komatineni
2019-07-13  5:54       ` Sowjanya Komatineni
2019-07-14 21:41       ` Dmitry Osipenko
2019-07-16  0:35         ` Sowjanya Komatineni
2019-07-16  0:35           ` Sowjanya Komatineni
2019-07-16  3:00           ` Sowjanya Komatineni
2019-07-16  3:00             ` Sowjanya Komatineni
2019-07-16  3:41             ` Sowjanya Komatineni
2019-07-16  3:41               ` Sowjanya Komatineni
2019-07-16  3:50             ` Dmitry Osipenko
2019-07-16  4:37               ` Sowjanya Komatineni
2019-07-16  4:37                 ` Sowjanya Komatineni
2019-07-16  5:37                 ` Dmitry Osipenko
2019-07-16  5:37                   ` Dmitry Osipenko
2019-07-16  6:20                   ` Dmitry Osipenko
2019-07-16  6:20                     ` Dmitry Osipenko
2019-07-16  6:35                   ` Sowjanya Komatineni
2019-07-16  6:35                     ` Sowjanya Komatineni
2019-07-16  7:24                     ` Joseph Lo
2019-07-16  7:24                       ` Joseph Lo
2019-07-16  8:06                       ` Peter De Schrijver
2019-07-16  8:06                         ` Peter De Schrijver
2019-07-16 15:00                         ` Dmitry Osipenko
2019-07-16 16:50                           ` Sowjanya Komatineni
2019-07-16 16:50                             ` Sowjanya Komatineni
2019-07-16 18:19                             ` Sowjanya Komatineni
2019-07-16 18:19                               ` Sowjanya Komatineni
2019-07-16 18:25                               ` Dmitry Osipenko
2019-07-16 18:30                                 ` Sowjanya Komatineni
2019-07-16 18:30                                   ` Sowjanya Komatineni
2019-07-16 18:43                                   ` Dmitry Osipenko
2019-07-16 19:26                                     ` Sowjanya Komatineni
2019-07-16 19:26                                       ` Sowjanya Komatineni
2019-07-16 20:47                                       ` Dmitry Osipenko
2019-07-16 21:12                                         ` Sowjanya Komatineni
2019-07-16 21:12                                           ` Sowjanya Komatineni
2019-07-16 21:21                                           ` Dmitry Osipenko
2019-07-16 21:35                                             ` Sowjanya Komatineni
2019-07-16 21:35                                               ` Sowjanya Komatineni
2019-07-16 22:00                                               ` Dmitry Osipenko
2019-07-16 22:06                                                 ` Sowjanya Komatineni
2019-07-16 22:06                                                   ` Sowjanya Komatineni
2019-07-17  2:18                                                   ` Sowjanya Komatineni
2019-07-17  2:18                                                     ` Sowjanya Komatineni
2019-07-17  2:35                                                     ` Sowjanya Komatineni
2019-07-17  2:35                                                       ` Sowjanya Komatineni
2019-07-17  4:11                                                       ` Dmitry Osipenko
2019-07-17  4:11                                                         ` Dmitry Osipenko
2019-07-17  5:25                                                         ` Sowjanya Komatineni
2019-07-17  5:42                                                           ` Dmitry Osipenko
2019-07-17  5:42                                                             ` Dmitry Osipenko
2019-07-17  5:55                                                             ` Sowjanya Komatineni
2019-07-17  5:55                                                               ` Sowjanya Komatineni
2019-07-17  6:33                                                               ` Dmitry Osipenko
2019-07-17  6:33                                                                 ` Dmitry Osipenko
2019-07-17  6:36                                                                 ` Sowjanya Komatineni
2019-07-17  6:36                                                                   ` Sowjanya Komatineni
2019-07-17 15:17                                                                   ` Dmitry Osipenko
2019-07-17 17:29                                                                     ` Sowjanya Komatineni
2019-07-17 17:29                                                                       ` Sowjanya Komatineni
2019-07-17 18:32                                                                       ` Dmitry Osipenko
2019-07-17 18:51                                                                         ` Sowjanya Komatineni
2019-07-17 18:51                                                                           ` Sowjanya Komatineni
2019-07-17 18:54                                                                           ` Sowjanya Komatineni
2019-07-17 18:54                                                                             ` Sowjanya Komatineni
2019-07-17 19:43                                                                             ` Dmitry Osipenko
2019-07-17 20:01                                                                               ` Sowjanya Komatineni
2019-07-17 20:01                                                                                 ` Sowjanya Komatineni
2019-07-17 20:11                                                                                 ` Sowjanya Komatineni
2019-07-17 20:11                                                                                   ` Sowjanya Komatineni
2019-07-17 21:29                                                                                   ` Sowjanya Komatineni
2019-07-17 21:29                                                                                     ` Sowjanya Komatineni
2019-07-17 21:30                                                                                   ` Dmitry Osipenko
2019-07-17 21:51                                                                                     ` Sowjanya Komatineni
2019-07-17 21:51                                                                                       ` Sowjanya Komatineni
2019-07-17 21:57                                                                                       ` Sowjanya Komatineni
2019-07-17 21:57                                                                                         ` Sowjanya Komatineni
2019-07-17 22:48                                                                                         ` Dmitry Osipenko
2019-07-17 23:36                                                                                           ` Sowjanya Komatineni
2019-07-17 23:36                                                                                             ` Sowjanya Komatineni
2019-07-17 23:44                                                                                             ` Dmitry Osipenko
2019-07-18  0:25                                                                                               ` Sowjanya Komatineni
2019-07-18  0:25                                                                                                 ` Sowjanya Komatineni
2019-07-18  1:15                                                                                                 ` Sowjanya Komatineni
2019-07-18  1:15                                                                                                   ` Sowjanya Komatineni
2019-07-18 16:34                                                                                                   ` Dmitry Osipenko
2019-07-18 17:22                                                                                                     ` Sowjanya Komatineni
2019-07-18 17:22                                                                                                       ` Sowjanya Komatineni
2019-07-18 17:41                                                                                                       ` Sowjanya Komatineni
2019-07-18 17:41                                                                                                         ` Sowjanya Komatineni
2019-07-18 18:29                                                                                                         ` Sowjanya Komatineni
2019-07-18 18:29                                                                                                           ` Sowjanya Komatineni
2019-07-18 19:11                                                                                                           ` Sowjanya Komatineni
2019-07-18 19:11                                                                                                             ` Sowjanya Komatineni
2019-07-18 19:42                                                                                               ` Peter De Schrijver
2019-07-18 19:42                                                                                                 ` Peter De Schrijver
2019-07-18 20:26                                                                                                 ` Dmitry Osipenko
2019-07-18 20:36                                                                                                   ` Sowjanya Komatineni
2019-07-18 20:36                                                                                                     ` Sowjanya Komatineni
2019-07-18 22:52                                                                                                     ` Dmitry Osipenko
2019-07-18 22:52                                                                                                       ` Dmitry Osipenko
2019-07-18 23:08                                                                                                     ` Sowjanya Komatineni
2019-07-18 23:08                                                                                                       ` Sowjanya Komatineni
2019-07-18 23:52                                                                                                       ` Dmitry Osipenko
2019-07-18 23:52                                                                                                         ` Dmitry Osipenko
2019-07-17  3:54                                                     ` Dmitry Osipenko
2019-07-17  3:54                                                       ` Dmitry Osipenko
2019-07-17  4:01                                                       ` Sowjanya Komatineni
2019-07-17  4:01                                                         ` Sowjanya Komatineni
2019-07-18 19:18                                     ` Peter De Schrijver
2019-07-18 19:18                                       ` Peter De Schrijver
2019-07-18 19:24                                       ` Sowjanya Komatineni
2019-07-18 19:24                                         ` Sowjanya Komatineni
2019-07-18 20:11                                         ` Dmitry Osipenko
2019-07-18 20:32                                           ` Dmitry Osipenko
2019-07-18 19:15                                 ` Peter De Schrijver
2019-07-18 19:15                                   ` Peter De Schrijver
2019-06-29 15:13   ` Dmitry Osipenko
2019-06-28  2:12 ` [PATCH V5 12/18] soc/tegra: pmc: Allow support for more tegra wake Sowjanya Komatineni
2019-06-28  2:12   ` Sowjanya Komatineni
2019-06-28  2:12 ` [PATCH V5 13/18] soc/tegra: pmc: Add pmc wake support for tegra210 Sowjanya Komatineni
2019-06-28  2:12   ` Sowjanya Komatineni
2019-06-29 13:11   ` Dmitry Osipenko
2019-06-28  2:12 ` [PATCH V5 14/18] arm64: tegra: Enable wake from deep sleep on RTC alarm Sowjanya Komatineni
2019-06-28  2:12   ` Sowjanya Komatineni
2019-06-28  2:12 ` [PATCH V5 15/18] soc/tegra: pmc: Configure core power request polarity Sowjanya Komatineni
2019-06-28  2:12   ` Sowjanya Komatineni
2019-06-28  2:12 ` [PATCH V5 16/18] soc/tegra: pmc: Configure deep sleep control settings Sowjanya Komatineni
2019-06-28  2:12   ` Sowjanya Komatineni
2019-06-29 13:00   ` Dmitry Osipenko
2019-06-29 13:02   ` Dmitry Osipenko
2019-06-28  2:12 ` [PATCH V5 17/18] arm64: dts: tegra210-p2180: Jetson TX1 SC7 timings Sowjanya Komatineni
2019-06-28  2:12   ` Sowjanya Komatineni
2019-06-28  2:12 ` [PATCH V5 18/18] arm64: dts: tegra210-p3450: Jetson nano " Sowjanya Komatineni
2019-06-28  2:12   ` Sowjanya Komatineni

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=0409f478-e425-4e7f-5fff-8c3a94f47ee8@gmail.com \
    --to=digetx@gmail.com \
    --cc=devicetree@vger.kernel.org \
    --cc=jason@lakedaemon.net \
    --cc=jckuo@nvidia.com \
    --cc=jonathanh@nvidia.com \
    --cc=josephl@nvidia.com \
    --cc=linus.walleij@linaro.org \
    --cc=linux-clk@vger.kernel.org \
    --cc=linux-gpio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-tegra@vger.kernel.org \
    --cc=marc.zyngier@arm.com \
    --cc=mark.rutland@arm.com \
    --cc=mperttunen@nvidia.com \
    --cc=pdeschrijver@nvidia.com \
    --cc=pgaikwad@nvidia.com \
    --cc=robh+dt@kernel.org \
    --cc=sboyd@kernel.org \
    --cc=skomatineni@nvidia.com \
    --cc=spatra@nvidia.com \
    --cc=stefan@agner.ch \
    --cc=talho@nvidia.com \
    --cc=tglx@linutronix.de \
    --cc=thierry.reding@gmail.com \
    /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.