drm/tegra: dc: Remove redundant spinlock
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>hifive-unleashed-5.1
parent
1087fac18b
commit
363541e8ee
|
@ -1261,31 +1261,23 @@ static u32 tegra_dc_get_vblank_counter(struct drm_crtc *crtc)
|
||||||
static int tegra_dc_enable_vblank(struct drm_crtc *crtc)
|
static int tegra_dc_enable_vblank(struct drm_crtc *crtc)
|
||||||
{
|
{
|
||||||
struct tegra_dc *dc = to_tegra_dc(crtc);
|
struct tegra_dc *dc = to_tegra_dc(crtc);
|
||||||
unsigned long value, flags;
|
u32 value;
|
||||||
|
|
||||||
spin_lock_irqsave(&dc->lock, flags);
|
|
||||||
|
|
||||||
value = tegra_dc_readl(dc, DC_CMD_INT_MASK);
|
value = tegra_dc_readl(dc, DC_CMD_INT_MASK);
|
||||||
value |= VBLANK_INT;
|
value |= VBLANK_INT;
|
||||||
tegra_dc_writel(dc, value, DC_CMD_INT_MASK);
|
tegra_dc_writel(dc, value, DC_CMD_INT_MASK);
|
||||||
|
|
||||||
spin_unlock_irqrestore(&dc->lock, flags);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void tegra_dc_disable_vblank(struct drm_crtc *crtc)
|
static void tegra_dc_disable_vblank(struct drm_crtc *crtc)
|
||||||
{
|
{
|
||||||
struct tegra_dc *dc = to_tegra_dc(crtc);
|
struct tegra_dc *dc = to_tegra_dc(crtc);
|
||||||
unsigned long value, flags;
|
u32 value;
|
||||||
|
|
||||||
spin_lock_irqsave(&dc->lock, flags);
|
|
||||||
|
|
||||||
value = tegra_dc_readl(dc, DC_CMD_INT_MASK);
|
value = tegra_dc_readl(dc, DC_CMD_INT_MASK);
|
||||||
value &= ~VBLANK_INT;
|
value &= ~VBLANK_INT;
|
||||||
tegra_dc_writel(dc, value, DC_CMD_INT_MASK);
|
tegra_dc_writel(dc, value, DC_CMD_INT_MASK);
|
||||||
|
|
||||||
spin_unlock_irqrestore(&dc->lock, flags);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct drm_crtc_funcs tegra_crtc_funcs = {
|
static const struct drm_crtc_funcs tegra_crtc_funcs = {
|
||||||
|
@ -2033,7 +2025,6 @@ static int tegra_dc_probe(struct platform_device *pdev)
|
||||||
|
|
||||||
dc->soc = of_device_get_match_data(&pdev->dev);
|
dc->soc = of_device_get_match_data(&pdev->dev);
|
||||||
|
|
||||||
spin_lock_init(&dc->lock);
|
|
||||||
INIT_LIST_HEAD(&dc->list);
|
INIT_LIST_HEAD(&dc->list);
|
||||||
dc->dev = &pdev->dev;
|
dc->dev = &pdev->dev;
|
||||||
|
|
||||||
|
|
|
@ -71,7 +71,6 @@ struct tegra_dc {
|
||||||
struct host1x_client client;
|
struct host1x_client client;
|
||||||
struct host1x_syncpt *syncpt;
|
struct host1x_syncpt *syncpt;
|
||||||
struct device *dev;
|
struct device *dev;
|
||||||
spinlock_t lock;
|
|
||||||
|
|
||||||
struct drm_crtc base;
|
struct drm_crtc base;
|
||||||
unsigned int powergate;
|
unsigned int powergate;
|
||||||
|
|
Loading…
Reference in New Issue