Commit e0c603ef authored by Ville Syrjälä's avatar Ville Syrjälä

drm/i915: Remove locks around skl+ scaler programming

All the skl+ scaler registers are suitably confined to their own
cachelines so we don't need the uncore.lock to globally serialize
access to these registers. We actually already dropped some of this
in commit 14ad1529 ("drm/i915: Make skl+ universal plane
registers unlocked") as the plane scaler enabling/reconfiguration
became lockless. So let's complete that and remove the rest of
the locks from the scaler programming as well.
Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20220224165103.15682-2-ville.syrjala@linux.intel.comReviewed-by: default avatarStanislav Lisovskiy <stanislav.lisovskiy@intel.com>
parent fd048473
...@@ -409,7 +409,6 @@ void skl_pfit_enable(const struct intel_crtc_state *crtc_state) ...@@ -409,7 +409,6 @@ void skl_pfit_enable(const struct intel_crtc_state *crtc_state)
int x = dst->x1; int x = dst->x1;
int y = dst->y1; int y = dst->y1;
int hscale, vscale; int hscale, vscale;
unsigned long irqflags;
struct drm_rect src; struct drm_rect src;
int id; int id;
u32 ps_ctrl; u32 ps_ctrl;
...@@ -436,8 +435,6 @@ void skl_pfit_enable(const struct intel_crtc_state *crtc_state) ...@@ -436,8 +435,6 @@ void skl_pfit_enable(const struct intel_crtc_state *crtc_state)
ps_ctrl = skl_scaler_get_filter_select(crtc_state->hw.scaling_filter, 0); ps_ctrl = skl_scaler_get_filter_select(crtc_state->hw.scaling_filter, 0);
ps_ctrl |= PS_SCALER_EN | scaler_state->scalers[id].mode; ps_ctrl |= PS_SCALER_EN | scaler_state->scalers[id].mode;
spin_lock_irqsave(&dev_priv->uncore.lock, irqflags);
skl_scaler_setup_filter(dev_priv, pipe, id, 0, skl_scaler_setup_filter(dev_priv, pipe, id, 0,
crtc_state->hw.scaling_filter); crtc_state->hw.scaling_filter);
...@@ -451,8 +448,6 @@ void skl_pfit_enable(const struct intel_crtc_state *crtc_state) ...@@ -451,8 +448,6 @@ void skl_pfit_enable(const struct intel_crtc_state *crtc_state)
x << 16 | y); x << 16 | y);
intel_de_write_fw(dev_priv, SKL_PS_WIN_SZ(pipe, id), intel_de_write_fw(dev_priv, SKL_PS_WIN_SZ(pipe, id),
width << 16 | height); width << 16 | height);
spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags);
} }
void void
...@@ -521,15 +516,10 @@ static void skl_detach_scaler(struct intel_crtc *crtc, int id) ...@@ -521,15 +516,10 @@ static void skl_detach_scaler(struct intel_crtc *crtc, int id)
{ {
struct drm_device *dev = crtc->base.dev; struct drm_device *dev = crtc->base.dev;
struct drm_i915_private *dev_priv = to_i915(dev); struct drm_i915_private *dev_priv = to_i915(dev);
unsigned long irqflags;
spin_lock_irqsave(&dev_priv->uncore.lock, irqflags);
intel_de_write_fw(dev_priv, SKL_PS_CTRL(crtc->pipe, id), 0); intel_de_write_fw(dev_priv, SKL_PS_CTRL(crtc->pipe, id), 0);
intel_de_write_fw(dev_priv, SKL_PS_WIN_POS(crtc->pipe, id), 0); intel_de_write_fw(dev_priv, SKL_PS_WIN_POS(crtc->pipe, id), 0);
intel_de_write_fw(dev_priv, SKL_PS_WIN_SZ(crtc->pipe, id), 0); intel_de_write_fw(dev_priv, SKL_PS_WIN_SZ(crtc->pipe, id), 0);
spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags);
} }
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment