Loading msm/sde/sde_core_irq.c +14 −12 Original line number Diff line number Diff line // SPDX-License-Identifier: GPL-2.0-only /* * Copyright (c) 2015-2019, The Linux Foundation. All rights reserved. * Copyright (c) 2015-2020, The Linux Foundation. All rights reserved. */ #define pr_fmt(fmt) "[drm:%s:%d] " fmt, __func__, __LINE__ Loading Loading @@ -115,24 +115,26 @@ static int _sde_core_irq_enable(struct sde_kms *sde_kms, int irq_idx) SDE_EVT32(irq_idx, atomic_read(&sde_kms->irq_obj.enable_counts[irq_idx])); if (atomic_inc_return(&sde_kms->irq_obj.enable_counts[irq_idx]) == 1) { spin_lock_irqsave(&sde_kms->irq_obj.cb_lock, irq_flags); /* empty callback list but interrupt is being enabled */ if (list_empty(&sde_kms->irq_obj.irq_cb_tbl[irq_idx])) SDE_ERROR("enabling irq_idx=%d with no callback\n", irq_idx); spin_unlock_irqrestore(&sde_kms->irq_obj.cb_lock, irq_flags); spin_lock_irqsave(&sde_kms->hw_intr->irq_lock, irq_flags); if (atomic_inc_return(&sde_kms->irq_obj.enable_counts[irq_idx]) == 1) ret = sde_kms->hw_intr->ops.enable_irq_nolock( sde_kms->hw_intr, irq_idx); spin_unlock_irqrestore(&sde_kms->hw_intr->irq_lock, irq_flags); } if (ret) SDE_ERROR("Fail to enable IRQ for irq_idx:%d\n", irq_idx); SDE_DEBUG("irq_idx=%d ret=%d\n", irq_idx, ret); if (atomic_read(&sde_kms->irq_obj.enable_counts[irq_idx]) == 1) { spin_lock_irqsave(&sde_kms->irq_obj.cb_lock, irq_flags); /* empty callback list but interrupt is enabled */ if (list_empty(&sde_kms->irq_obj.irq_cb_tbl[irq_idx])) SDE_ERROR("irq_idx=%d enabled with no callback\n", irq_idx); spin_unlock_irqrestore(&sde_kms->irq_obj.cb_lock, irq_flags); } return ret; } Loading Loading
msm/sde/sde_core_irq.c +14 −12 Original line number Diff line number Diff line // SPDX-License-Identifier: GPL-2.0-only /* * Copyright (c) 2015-2019, The Linux Foundation. All rights reserved. * Copyright (c) 2015-2020, The Linux Foundation. All rights reserved. */ #define pr_fmt(fmt) "[drm:%s:%d] " fmt, __func__, __LINE__ Loading Loading @@ -115,24 +115,26 @@ static int _sde_core_irq_enable(struct sde_kms *sde_kms, int irq_idx) SDE_EVT32(irq_idx, atomic_read(&sde_kms->irq_obj.enable_counts[irq_idx])); if (atomic_inc_return(&sde_kms->irq_obj.enable_counts[irq_idx]) == 1) { spin_lock_irqsave(&sde_kms->irq_obj.cb_lock, irq_flags); /* empty callback list but interrupt is being enabled */ if (list_empty(&sde_kms->irq_obj.irq_cb_tbl[irq_idx])) SDE_ERROR("enabling irq_idx=%d with no callback\n", irq_idx); spin_unlock_irqrestore(&sde_kms->irq_obj.cb_lock, irq_flags); spin_lock_irqsave(&sde_kms->hw_intr->irq_lock, irq_flags); if (atomic_inc_return(&sde_kms->irq_obj.enable_counts[irq_idx]) == 1) ret = sde_kms->hw_intr->ops.enable_irq_nolock( sde_kms->hw_intr, irq_idx); spin_unlock_irqrestore(&sde_kms->hw_intr->irq_lock, irq_flags); } if (ret) SDE_ERROR("Fail to enable IRQ for irq_idx:%d\n", irq_idx); SDE_DEBUG("irq_idx=%d ret=%d\n", irq_idx, ret); if (atomic_read(&sde_kms->irq_obj.enable_counts[irq_idx]) == 1) { spin_lock_irqsave(&sde_kms->irq_obj.cb_lock, irq_flags); /* empty callback list but interrupt is enabled */ if (list_empty(&sde_kms->irq_obj.irq_cb_tbl[irq_idx])) SDE_ERROR("irq_idx=%d enabled with no callback\n", irq_idx); spin_unlock_irqrestore(&sde_kms->irq_obj.cb_lock, irq_flags); } return ret; } Loading