Blob Blame History Raw
From: Thierry Reding <treding@nvidia.com>
Date: Thu, 14 Dec 2017 13:50:19 +0100
Subject: drm/tegra: dc: Remove redundant spinlock
Git-commit: 363541e8eeed16fdf696252008ddee823730f82c
Patch-mainline: v4.16-rc1
References: FATE#326289 FATE#326079 FATE#326049 FATE#322398 FATE#326166

The spinlock is only used to serialize accesses to the DC_CMD_INT_MASK
register. However, this register is accesses either with interrupts
masked (in tegra_crtc_atomic_enable()) or protected by the vbl_lock and
vblank_time_lock spinlocks of the DRM device. Therefore, these accesses
don't need any extra serialization and the lock can be removed.

Signed-off-by: Thierry Reding <treding@nvidia.com>
Acked-by: Petr Tesarik <ptesarik@suse.com>
---
 drivers/gpu/drm/tegra/dc.c |   13 ++-----------
 drivers/gpu/drm/tegra/dc.h |    1 -
 2 files changed, 2 insertions(+), 12 deletions(-)

--- a/drivers/gpu/drm/tegra/dc.c
+++ b/drivers/gpu/drm/tegra/dc.c
@@ -1261,31 +1261,23 @@ static u32 tegra_dc_get_vblank_counter(s
 static int tegra_dc_enable_vblank(struct drm_crtc *crtc)
 {
 	struct tegra_dc *dc = to_tegra_dc(crtc);
-	unsigned long value, flags;
-
-	spin_lock_irqsave(&dc->lock, flags);
+	u32 value;
 
 	value = tegra_dc_readl(dc, DC_CMD_INT_MASK);
 	value |= VBLANK_INT;
 	tegra_dc_writel(dc, value, DC_CMD_INT_MASK);
 
-	spin_unlock_irqrestore(&dc->lock, flags);
-
 	return 0;
 }
 
 static void tegra_dc_disable_vblank(struct drm_crtc *crtc)
 {
 	struct tegra_dc *dc = to_tegra_dc(crtc);
-	unsigned long value, flags;
-
-	spin_lock_irqsave(&dc->lock, flags);
+	u32 value;
 
 	value = tegra_dc_readl(dc, DC_CMD_INT_MASK);
 	value &= ~VBLANK_INT;
 	tegra_dc_writel(dc, value, DC_CMD_INT_MASK);
-
-	spin_unlock_irqrestore(&dc->lock, flags);
 }
 
 static const struct drm_crtc_funcs tegra_crtc_funcs = {
@@ -2033,7 +2025,6 @@ static int tegra_dc_probe(struct platfor
 
 	dc->soc = of_device_get_match_data(&pdev->dev);
 
-	spin_lock_init(&dc->lock);
 	INIT_LIST_HEAD(&dc->list);
 	dc->dev = &pdev->dev;
 
--- a/drivers/gpu/drm/tegra/dc.h
+++ b/drivers/gpu/drm/tegra/dc.h
@@ -71,7 +71,6 @@ struct tegra_dc {
 	struct host1x_client client;
 	struct host1x_syncpt *syncpt;
 	struct device *dev;
-	spinlock_t lock;
 
 	struct drm_crtc base;
 	unsigned int powergate;