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

Jon Hunter
2021-12-22T09:47:51Z

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 :-)

Jon

--
nvpublic