mirror of
https://github.com/torvalds/linux.git
synced 2024-11-25 13:41:51 +00:00
gpu: host1x: Fix boot regression for Tegra
Commit4c27ac45e6
("gpu: host1x: Request syncpoint IRQs only during probe") caused a boot regression for the Tegra186 device. Following this update the function host1x_intr_init() now calls host1x_hw_intr_disable_all_syncpt_intrs() during probe. However, host1x_intr_init() is called before runtime power-management is enabled for Host1x and the function host1x_hw_intr_disable_all_syncpt_intrs() is accessing hardware registers. So if the Host1x hardware is not enabled prior to probing then the device will now hang on attempting to access the registers. So far this is only observed on Tegra186, but potentially could be seen on other devices. Fix this by moving the call to the function host1x_intr_init() in probe to after enabling the runtime power-management in the probe and update the failure path in probe as necessary. Fixes:4c27ac45e6
("gpu: host1x: Request syncpoint IRQs only during probe") Signed-off-by: Jon Hunter <jonathanh@nvidia.com> Signed-off-by: Thierry Reding <treding@nvidia.com> Link: https://patchwork.freedesktop.org/patch/msgid/20240925160504.60221-1-jonathanh@nvidia.com (cherry picked from commitdc56f8428e
) Signed-off-by: Thierry Reding <treding@nvidia.com>
This commit is contained in:
parent
fcf38bc321
commit
c8347f915e
@ -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,13 +658,11 @@ unregister:
|
||||
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);
|
||||
|
Loading…
Reference in New Issue
Block a user