[PATCH] gpu: host1x: Request syncpoint IRQs only during probe
Jon Hunter
jonathanh at nvidia.com
Tue Sep 24 18:35:45 UTC 2024
On 24/09/2024 19:33, Jon Hunter wrote:
>
> On 06/09/2024 09:38, Jon Hunter wrote:
>> Hi Mikko,
>>
>> On 31/05/2024 08:07, Mikko Perttunen wrote:
>>> From: Mikko Perttunen <mperttunen at nvidia.com>
>>>
>>> Syncpoint IRQs are currently requested in a code path that runs
>>> during resume. Due to this, we get multiple overlapping registered
>>> interrupt handlers as host1x is suspended and resumed.
>>>
>>> Rearrange interrupt code to only request IRQs during initialization.
>>>
>>> Signed-off-by: Mikko Perttunen <mperttunen at nvidia.com>
>
> ...
>
>> This change is causing a boot regression on Tegra186 with the latest
>> -next. I have reverted this to confirm that this fixes the problem. I
>> don't see any crash log but the board appears to just hang.
>
>
> I had a look at this and I was able to fix this by moving where
> we initialise the interrupts to after the PM runtime enable ...
>
> diff --git a/drivers/gpu/host1x/dev.c b/drivers/gpu/host1x/dev.c
> index b62e4f0e8130..ff98d4903cac 100644
> --- a/drivers/gpu/host1x/dev.c
> +++ b/drivers/gpu/host1x/dev.c
> @@ -625,12 +625,6 @@ static int host1x_probe(struct platform_device *pdev)
> goto free_contexts;
> }
>
> - err = host1x_intr_init(host);
> - if (err) {
> - dev_err(&pdev->dev, "failed to initialize interrupts\n");
> - goto deinit_syncpt;
> - }
> -
> pm_runtime_enable(&pdev->dev);
>
> err = devm_tegra_core_dev_init_opp_table_common(&pdev->dev);
> @@ -642,6 +636,12 @@ static int host1x_probe(struct platform_device *pdev)
> if (err)
> goto pm_disable;
>
> + err = host1x_intr_init(host);
> + if (err) {
> + dev_err(&pdev->dev, "failed to initialize interrupts\n");
> + goto pm_put;
> + }
> +
> host1x_debug_init(host);
>
> err = host1x_register(host);
> @@ -658,14 +658,11 @@ static int host1x_probe(struct platform_device *pdev)
> host1x_unregister(host);
> deinit_debugfs:
> host1x_debug_deinit(host);
> -
> + host1x_intr_deinit(host);
> +pm_put:
> pm_runtime_put_sync_suspend(&pdev->dev);
> pm_disable:
> pm_runtime_disable(&pdev->dev);
> -
> - host1x_intr_deinit(host);
> -deinit_syncpt:
> - host1x_syncpt_deinit(host);
> free_contexts:
> host1x_memory_context_list_free(&host->context_list);
> free_channels:
>
>
> Thierry, do you want to me to send a fix for the above or do you
> want to squash with the original (assuming that OK with Mikko)?
Or can we drop from -next and have Mikko send a V2?
Jon
--
nvpublic
More information about the dri-devel
mailing list