All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dmitry Osipenko <digetx@gmail.com>
To: Thierry Reding <thierry.reding@gmail.com>
Cc: dri-devel@lists.freedesktop.org, linux-tegra@vger.kernel.org
Subject: Re: [PATCH] drm/tegra: gr2d: Explicitly control module reset
Date: Thu, 8 Jul 2021 18:13:10 +0300	[thread overview]
Message-ID: <d9112247-ce69-9281-75e6-6cb3296d19a7@gmail.com> (raw)
In-Reply-To: <20210708143736.2018135-1-thierry.reding@gmail.com>

08.07.2021 17:37, Thierry Reding пишет:
> From: Thierry Reding <treding@nvidia.com>
> 
> As of commit 4782c0a5dd88 ("clk: tegra: Don't deassert reset on enabling
> clocks"), module resets are no longer automatically deasserted when the
> module clock is enabled. To make sure that the gr2d module continues to
> work, we need to explicitly control the module reset.
> 
> Fixes: 4782c0a5dd88 ("clk: tegra: Don't deassert reset on enabling clocks")
> Signed-off-by: Thierry Reding <treding@nvidia.com>

On which board do see this problem?

TRM says that 2d should be in reset by default, but somehow it's not a
problem on devices that use fastboot.. why would it touch the 2d reset?

> ---
>  drivers/gpu/drm/tegra/gr2d.c | 33 +++++++++++++++++++++++++++++++--
>  1 file changed, 31 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/gpu/drm/tegra/gr2d.c b/drivers/gpu/drm/tegra/gr2d.c
> index de288cba3905..ba3722f1b865 100644
> --- a/drivers/gpu/drm/tegra/gr2d.c
> +++ b/drivers/gpu/drm/tegra/gr2d.c
> @@ -4,9 +4,11 @@
>   */
>  
>  #include <linux/clk.h>
> +#include <linux/delay.h>
>  #include <linux/iommu.h>
>  #include <linux/module.h>
>  #include <linux/of_device.h>
> +#include <linux/reset.h>
>  
>  #include "drm.h"
>  #include "gem.h"
> @@ -19,6 +21,7 @@ struct gr2d_soc {
>  struct gr2d {
>  	struct tegra_drm_client client;
>  	struct host1x_channel *channel;
> +	struct reset_control *rst;

Unused variable?

>  	struct clk *clk;
>  
>  	const struct gr2d_soc *soc;
> @@ -208,6 +211,12 @@ static int gr2d_probe(struct platform_device *pdev)
>  	if (!syncpts)
>  		return -ENOMEM;
>  
> +	gr2d->rst = devm_reset_control_get(dev, NULL);
> +	if (IS_ERR(gr2d->rst)) {
> +		dev_err(dev, "cannot get reset\n");
> +		return PTR_ERR(gr2d->rst);
> +	}
> +
>  	gr2d->clk = devm_clk_get(dev, NULL);
>  	if (IS_ERR(gr2d->clk)) {
>  		dev_err(dev, "cannot get clock\n");
> @@ -220,6 +229,14 @@ static int gr2d_probe(struct platform_device *pdev)
>  		return err;
>  	}
>  
> +	usleep_range(2000, 4000);
> +
> +	err = reset_control_deassert(gr2d->rst);
> +	if (err < 0) {
> +		dev_err(dev, "failed to deassert reset: %d\n", err);
> +		goto disable_clk;
> +	}
> +
>  	INIT_LIST_HEAD(&gr2d->client.base.list);
>  	gr2d->client.base.ops = &gr2d_client_ops;
>  	gr2d->client.base.dev = dev;
> @@ -234,8 +251,7 @@ static int gr2d_probe(struct platform_device *pdev)
>  	err = host1x_client_register(&gr2d->client.base);
>  	if (err < 0) {
>  		dev_err(dev, "failed to register host1x client: %d\n", err);
> -		clk_disable_unprepare(gr2d->clk);
> -		return err;
> +		goto assert_rst;
>  	}
>  
>  	/* initialize address register map */
> @@ -245,6 +261,13 @@ static int gr2d_probe(struct platform_device *pdev)
>  	platform_set_drvdata(pdev, gr2d);
>  
>  	return 0;
> +
> +assert_rst:
> +	(void)reset_control_assert(gr2d->rst);

(void)?

WARNING: multiple messages have this Message-ID (diff)
From: Dmitry Osipenko <digetx@gmail.com>
To: Thierry Reding <thierry.reding@gmail.com>
Cc: linux-tegra@vger.kernel.org, dri-devel@lists.freedesktop.org
Subject: Re: [PATCH] drm/tegra: gr2d: Explicitly control module reset
Date: Thu, 8 Jul 2021 18:13:10 +0300	[thread overview]
Message-ID: <d9112247-ce69-9281-75e6-6cb3296d19a7@gmail.com> (raw)
In-Reply-To: <20210708143736.2018135-1-thierry.reding@gmail.com>

08.07.2021 17:37, Thierry Reding пишет:
> From: Thierry Reding <treding@nvidia.com>
> 
> As of commit 4782c0a5dd88 ("clk: tegra: Don't deassert reset on enabling
> clocks"), module resets are no longer automatically deasserted when the
> module clock is enabled. To make sure that the gr2d module continues to
> work, we need to explicitly control the module reset.
> 
> Fixes: 4782c0a5dd88 ("clk: tegra: Don't deassert reset on enabling clocks")
> Signed-off-by: Thierry Reding <treding@nvidia.com>

On which board do see this problem?

TRM says that 2d should be in reset by default, but somehow it's not a
problem on devices that use fastboot.. why would it touch the 2d reset?

> ---
>  drivers/gpu/drm/tegra/gr2d.c | 33 +++++++++++++++++++++++++++++++--
>  1 file changed, 31 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/gpu/drm/tegra/gr2d.c b/drivers/gpu/drm/tegra/gr2d.c
> index de288cba3905..ba3722f1b865 100644
> --- a/drivers/gpu/drm/tegra/gr2d.c
> +++ b/drivers/gpu/drm/tegra/gr2d.c
> @@ -4,9 +4,11 @@
>   */
>  
>  #include <linux/clk.h>
> +#include <linux/delay.h>
>  #include <linux/iommu.h>
>  #include <linux/module.h>
>  #include <linux/of_device.h>
> +#include <linux/reset.h>
>  
>  #include "drm.h"
>  #include "gem.h"
> @@ -19,6 +21,7 @@ struct gr2d_soc {
>  struct gr2d {
>  	struct tegra_drm_client client;
>  	struct host1x_channel *channel;
> +	struct reset_control *rst;

Unused variable?

>  	struct clk *clk;
>  
>  	const struct gr2d_soc *soc;
> @@ -208,6 +211,12 @@ static int gr2d_probe(struct platform_device *pdev)
>  	if (!syncpts)
>  		return -ENOMEM;
>  
> +	gr2d->rst = devm_reset_control_get(dev, NULL);
> +	if (IS_ERR(gr2d->rst)) {
> +		dev_err(dev, "cannot get reset\n");
> +		return PTR_ERR(gr2d->rst);
> +	}
> +
>  	gr2d->clk = devm_clk_get(dev, NULL);
>  	if (IS_ERR(gr2d->clk)) {
>  		dev_err(dev, "cannot get clock\n");
> @@ -220,6 +229,14 @@ static int gr2d_probe(struct platform_device *pdev)
>  		return err;
>  	}
>  
> +	usleep_range(2000, 4000);
> +
> +	err = reset_control_deassert(gr2d->rst);
> +	if (err < 0) {
> +		dev_err(dev, "failed to deassert reset: %d\n", err);
> +		goto disable_clk;
> +	}
> +
>  	INIT_LIST_HEAD(&gr2d->client.base.list);
>  	gr2d->client.base.ops = &gr2d_client_ops;
>  	gr2d->client.base.dev = dev;
> @@ -234,8 +251,7 @@ static int gr2d_probe(struct platform_device *pdev)
>  	err = host1x_client_register(&gr2d->client.base);
>  	if (err < 0) {
>  		dev_err(dev, "failed to register host1x client: %d\n", err);
> -		clk_disable_unprepare(gr2d->clk);
> -		return err;
> +		goto assert_rst;
>  	}
>  
>  	/* initialize address register map */
> @@ -245,6 +261,13 @@ static int gr2d_probe(struct platform_device *pdev)
>  	platform_set_drvdata(pdev, gr2d);
>  
>  	return 0;
> +
> +assert_rst:
> +	(void)reset_control_assert(gr2d->rst);

(void)?

  reply	other threads:[~2021-07-08 15:13 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-07-08 14:37 [PATCH] drm/tegra: gr2d: Explicitly control module reset Thierry Reding
2021-07-08 14:37 ` Thierry Reding
2021-07-08 15:13 ` Dmitry Osipenko [this message]
2021-07-08 15:13   ` Dmitry Osipenko
2021-07-08 15:19   ` Dmitry Osipenko
2021-07-08 15:19     ` Dmitry Osipenko
2021-07-08 19:40   ` Dmitry Osipenko
2021-07-08 19:40     ` Dmitry Osipenko

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=d9112247-ce69-9281-75e6-6cb3296d19a7@gmail.com \
    --to=digetx@gmail.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=linux-tegra@vger.kernel.org \
    --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.