PENDING: drm/msm/dp: disable HPD IRQ during shutdown to prevent IOMMU#772
PENDING: drm/msm/dp: disable HPD IRQ during shutdown to prevent IOMMU#772quicmahap wants to merge 1 commit into
Conversation
|
Merge Check Failed: No Change Task Found No associated change tasks found for CR 4550131 on any of the following entities: Entities:
CR: 4550131 Please ensure the CR has a change task associated with at least one of the entities for this branch. |
… faults During system shutdown, the DP HPD interrupt can fire after the platform device has started tearing down and IOMMU translation has been disabled. The IRQ thread (msm_dp_display_irq_thread) processes the HPD event, and proceeds to access hardware registers. Because IOMMU translation is no longer active at that point, the register access causes a translation fault and a NOC decode error on the interconnect. Fix this by disabling the IRQ at the interrupt controller before calling pm_runtime_disable() in a new .shutdown callback. synchronize_irq() is called between the two to ensure that any currently-executing instance of the IRQ thread has finished before we proceed. After this sequence the IRQ line is masked, no new HPD events can be delivered, so no hardware access can race with the IOMMU teardown that follows. Signed-off-by: Jayant Shekhar <Jayant.Shekar@oss.qualcomm.com> Signed-off-by: Mahadevan P <mahadevan.p@oss.qualcomm.com>
28fe04e to
02ce804
Compare
PR #772 — validate-patchPR: #772
Final Summary
|
PR #772 — checker-log-analyzerPR: #772
Detailed report: Full report
|
Test Matrix
|
|
Exception jira: https://jira-dc.qualcomm.com/jira/browse/QLIJIRA-144 |
isable HPD IRQ during shutdown to prevent crash
During system shutdown, the DP HPD interrupt can fire after the platform device has started tearing down and IOMMU translation has been disabled. The IRQ thread (msm_dp_display_irq_thread) processes the HPD event, and proceeds to access hardware registers. Because IOMMU translation is no longer active at that point, the register access causes a translation fault and a NOC decode error on the interconnect.
Fix this by disabling the IRQ at the interrupt controller before calling pm_runtime_disable() in a new .shutdown callback. synchronize_irq() is called between the two to ensure that any currently-executing instance of the IRQ thread has finished before we proceed.
After this sequence the IRQ line is masked, no new HPD events can be delivered, so no hardware access can race with the IOMMU teardown that follows.
CRs-Fixed: 4550131