Re: [PATCH] gpu: host1x: Request syncpoint IRQs only during probe

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




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@xxxxxxxxxx>

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@xxxxxxxxxx>

...

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



[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux