drm/msm: kexec fixes
PATCH 1/1 drm/msm: kexec fixes
In kexec environment, we are more likely to encounter irq's already enabled from previous environment. At which point we find that writes to disable/clear pending irq's are slightly less than useless without first enabling clocks.
TODO: full blown state read-in so kexec'd kernel can inherit the mode already setup.
Signed-off-by Rob Clark <[email protected]>
--- drivers/gpu/drm/msm/mdp/mdp4/mdp4_irq.c | 5 +++++ drivers/gpu/drm/msm/mdp/mdp5/mdp5_irq.c | 5 +++++ 2 files changed, 10 insertions(+)
drivers/gpu/drm/msm/mdp/mdp4/mdp4_irq.c +5 -0
@@ -32,7 +32,10 @@ static void mdp4_irq_error_handler(struct mdp_irq *irq, uint32_t irqstatus)void mdp4_irq_preinstall (struct msm_kms *kms) {struct mdp4_kms *mdp4_kms =to_mdp4_kms (to_mdp_kms (kms)); +mdp4_enable (mdp4_kms);mdp4_write (mdp4_kms,REG_MDP4_INTR_CLEAR ,0xffffffff ); +mdp4_write (mdp4_kms,REG_MDP4_INTR_ENABLE ,0x00000000 ); +mdp4_disable (mdp4_kms); }int mdp4_irq_postinstall (struct msm_kms *kms)
@@ -53,7 +56,9 @@ int mdp4_irq_postinstall(struct msm_kms *kms)void mdp4_irq_uninstall (struct msm_kms *kms) {struct mdp4_kms *mdp4_kms =to_mdp4_kms (to_mdp_kms (kms)); +mdp4_enable (mdp4_kms);mdp4_write (mdp4_kms,REG_MDP4_INTR_ENABLE ,0x00000000 ); +mdp4_disable (mdp4_kms); }irqreturn_t mdp4_irq (struct msm_kms *kms)
drivers/gpu/drm/msm/mdp/mdp5/mdp5_irq.c +5 -0
@@ -34,7 +34,10 @@ static void mdp5_irq_error_handler(struct mdp_irq *irq, uint32_t irqstatus)void mdp5_irq_preinstall (struct msm_kms *kms) {struct mdp5_kms *mdp5_kms =to_mdp5_kms (to_mdp_kms (kms)); +mdp5_enable (mdp5_kms);mdp5_write (mdp5_kms,REG_MDP5_INTR_CLEAR ,0xffffffff ); +mdp5_write (mdp5_kms,REG_MDP5_INTR_EN ,0x00000000 ); +mdp5_disable (mdp5_kms); }int mdp5_irq_postinstall (struct msm_kms *kms)
@@ -57,7 +60,9 @@ int mdp5_irq_postinstall(struct msm_kms *kms)void mdp5_irq_uninstall (struct msm_kms *kms) {struct mdp5_kms *mdp5_kms =to_mdp5_kms (to_mdp_kms (kms)); +mdp5_enable (mdp5_kms);mdp5_write (mdp5_kms,REG_MDP5_INTR_EN ,0x00000000 ); +mdp5_disable (mdp5_kms); }static void mdp5_irq_mdp (struct mdp_kms *mdp_kms)
Signature · 1 line
2.1.0