Re: [PATCH v16 08/40] gpu: host1x: Add initial runtime PM and OPP support

From: Jon Hunter
Date: Wed Dec 22 2021 - 13:41:29 EST



On 22/12/2021 09:47, Jon Hunter wrote:

On 21/12/2021 20:58, Dmitry Osipenko wrote:
Hi,

Thank you for testing it all.

21.12.2021 21:55, Jon Hunter пишет:
Hi Dmitry, Thierry,

On 30/11/2021 23:23, Dmitry Osipenko wrote:
Add runtime PM and OPP support to the Host1x driver. For the starter we
will keep host1x always-on because dynamic power management require a
major
refactoring of the driver code since lot's of code paths are missing the
RPM handling and we're going to remove some of these paths in the future.


Unfortunately, this change is breaking boot on Tegra186. Bisect points
to this and reverting on top of -next gets the board booting again.
Sadly, there is no panic or error reported, it is just a hard hang. I
will not have time to look at this this week and so we may need to
revert for the moment.

Only T186 broken? What about T194?

Yes interestingly only Tegra186 and no other board.

Which board model fails to boot? Is it running in hypervisor mode?

This is Jetson TX2. No hypervisor.

Do you use any additional patches?

No just plain -next. The tests run every day on top of tree.

Could you please test the below diff? I suspect that
host1x_syncpt_save/restore may be entirely broken for T186 since we
never used these funcs before.

--- >8 ---

diff --git a/drivers/gpu/host1x/dev.c b/drivers/gpu/host1x/dev.c
index f5b4dcded088..fd5dfb875422 100644
--- a/drivers/gpu/host1x/dev.c
+++ b/drivers/gpu/host1x/dev.c
@@ -580,7 +580,6 @@ static int __maybe_unused
host1x_runtime_suspend(struct device *dev)
      int err;

      host1x_intr_stop(host);
-    host1x_syncpt_save(host);

      err = reset_control_bulk_assert(host->nresets, host->resets);
      if (err) {
@@ -596,9 +595,8 @@ static int __maybe_unused
host1x_runtime_suspend(struct device *dev)
      return 0;

  resume_host1x:
-    host1x_setup_sid_table(host);
-    host1x_syncpt_restore(host);
      host1x_intr_start(host);
+    host1x_setup_sid_table(host);

      return err;
  }
@@ -626,9 +624,8 @@ static int __maybe_unused
host1x_runtime_resume(struct device *dev)
          goto disable_clk;
      }

-    host1x_setup_sid_table(host);
-    host1x_syncpt_restore(host);
      host1x_intr_start(host);
+    host1x_setup_sid_table(host);


Thanks! Will try this later, once the next bisect is finished :-)

I tested the above, but this did not fix it. It still hangs on boot.

Jon

--
nvpublic