mirror of
https://github.com/torvalds/linux.git
synced 2026-07-28 01:55:51 +02:00
drm/i915/irq: add intel_display_irq_handler() to irq funcs
Call the platform specific display irq handler hooks via intel_display_irq_handler(). v3: Pure vfunc change (Ville) v2: Rebase, handle LPE audio in ack (Ville) Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Link: https://patch.msgid.link/d728f04a47532898c278ef208692ea173b446106.1778688699.git.jani.nikula@intel.com Signed-off-by: Jani Nikula <jani.nikula@intel.com>
This commit is contained in:
parent
13dccf09e8
commit
bbba23373b
|
|
@ -1021,8 +1021,8 @@ void ilk_display_irq_master_enable(struct intel_display *display, u32 de_ier, u3
|
|||
intel_de_write_fw(display, SDEIER, sde_ier);
|
||||
}
|
||||
|
||||
bool ilk_display_irq_handler(struct intel_display *display,
|
||||
const struct intel_display_irq_state *state)
|
||||
static bool ilk_display_irq_handler(struct intel_display *display,
|
||||
const struct intel_display_irq_state *state)
|
||||
{
|
||||
u32 de_iir;
|
||||
bool handled = false;
|
||||
|
|
@ -1567,8 +1567,8 @@ static void gen8_de_irq_handler(struct intel_display *display, u32 master_ctl)
|
|||
}
|
||||
}
|
||||
|
||||
bool gen8_display_irq_handler(struct intel_display *display,
|
||||
const struct intel_display_irq_state *state)
|
||||
static bool gen8_display_irq_handler(struct intel_display *display,
|
||||
const struct intel_display_irq_state *state)
|
||||
{
|
||||
gen8_de_irq_handler(display, state->master_ctl);
|
||||
|
||||
|
|
@ -1599,8 +1599,8 @@ void gen11_gu_misc_irq_handler(struct intel_display *display, const u32 iir)
|
|||
intel_opregion_asle_intr(display);
|
||||
}
|
||||
|
||||
bool gen11_display_irq_handler(struct intel_display *display,
|
||||
const struct intel_display_irq_state *state)
|
||||
static bool gen11_display_irq_handler(struct intel_display *display,
|
||||
const struct intel_display_irq_state *state)
|
||||
{
|
||||
u32 disp_ctl;
|
||||
|
||||
|
|
@ -2033,8 +2033,8 @@ static void i9xx_display_irq_ack(struct intel_display *display,
|
|||
i9xx_pipestat_irq_ack(display, state->iir, state->pipe_stats);
|
||||
}
|
||||
|
||||
bool i965_display_irq_handler(struct intel_display *display,
|
||||
const struct intel_display_irq_state *state)
|
||||
static bool i965_display_irq_handler(struct intel_display *display,
|
||||
const struct intel_display_irq_state *state)
|
||||
{
|
||||
if (state->hotplug_status)
|
||||
i9xx_hpd_irq_handler(display, state->hotplug_status);
|
||||
|
|
@ -2044,8 +2044,8 @@ bool i965_display_irq_handler(struct intel_display *display,
|
|||
return true;
|
||||
}
|
||||
|
||||
bool i915_display_irq_handler(struct intel_display *display,
|
||||
const struct intel_display_irq_state *state)
|
||||
static bool i915_display_irq_handler(struct intel_display *display,
|
||||
const struct intel_display_irq_state *state)
|
||||
{
|
||||
if (state->hotplug_status)
|
||||
i9xx_hpd_irq_handler(display, state->hotplug_status);
|
||||
|
|
@ -2136,8 +2136,8 @@ static void vlv_display_irq_ack(struct intel_display *display,
|
|||
intel_lpe_audio_irq_handler(display);
|
||||
}
|
||||
|
||||
bool vlv_display_irq_handler(struct intel_display *display,
|
||||
const struct intel_display_irq_state *state)
|
||||
static bool vlv_display_irq_handler(struct intel_display *display,
|
||||
const struct intel_display_irq_state *state)
|
||||
{
|
||||
if (state->hotplug_status)
|
||||
i9xx_hpd_irq_handler(display, state->hotplug_status);
|
||||
|
|
@ -2529,39 +2529,46 @@ struct intel_display_irq_funcs {
|
|||
void (*reset)(struct intel_display *display);
|
||||
void (*postinstall)(struct intel_display *display);
|
||||
void (*ack)(struct intel_display *display, struct intel_display_irq_state *state);
|
||||
bool (*handler)(struct intel_display *display, const struct intel_display_irq_state *state);
|
||||
};
|
||||
|
||||
static const struct intel_display_irq_funcs gen11_display_irq_funcs = {
|
||||
.reset = gen11_display_irq_reset,
|
||||
.postinstall = gen11_de_irq_postinstall,
|
||||
.handler = gen11_display_irq_handler,
|
||||
};
|
||||
|
||||
static const struct intel_display_irq_funcs gen8_display_irq_funcs = {
|
||||
.reset = gen8_display_irq_reset,
|
||||
.postinstall = gen8_de_irq_postinstall,
|
||||
.handler = gen8_display_irq_handler,
|
||||
};
|
||||
|
||||
static const struct intel_display_irq_funcs vlv_display_irq_funcs = {
|
||||
.reset = vlv_display_irq_reset,
|
||||
.postinstall = vlv_display_irq_postinstall,
|
||||
.ack = vlv_display_irq_ack,
|
||||
.handler = vlv_display_irq_handler,
|
||||
};
|
||||
|
||||
static const struct intel_display_irq_funcs ilk_display_irq_funcs = {
|
||||
.reset = ilk_display_irq_reset,
|
||||
.postinstall = ilk_de_irq_postinstall,
|
||||
.handler = ilk_display_irq_handler,
|
||||
};
|
||||
|
||||
static const struct intel_display_irq_funcs i965_display_irq_funcs = {
|
||||
.reset = i9xx_display_irq_reset,
|
||||
.postinstall = i965_display_irq_postinstall,
|
||||
.ack = i9xx_display_irq_ack,
|
||||
.handler = i965_display_irq_handler,
|
||||
};
|
||||
|
||||
static const struct intel_display_irq_funcs i915_display_irq_funcs = {
|
||||
.reset = i9xx_display_irq_reset,
|
||||
.postinstall = i915_display_irq_postinstall,
|
||||
.ack = i9xx_display_irq_ack,
|
||||
.handler = i915_display_irq_handler,
|
||||
};
|
||||
|
||||
void intel_display_irq_reset(struct intel_display *display)
|
||||
|
|
@ -2589,6 +2596,15 @@ void intel_display_irq_ack(struct intel_display *display,
|
|||
display->irq.funcs->ack(display, state);
|
||||
}
|
||||
|
||||
bool intel_display_irq_handler(struct intel_display *display,
|
||||
const struct intel_display_irq_state *state)
|
||||
{
|
||||
if (!HAS_DISPLAY(display) || !display->irq.funcs->handler)
|
||||
return true;
|
||||
|
||||
return display->irq.funcs->handler(display, state);
|
||||
}
|
||||
|
||||
void intel_display_irq_init(struct intel_display *display)
|
||||
{
|
||||
spin_lock_init(&display->irq.lock);
|
||||
|
|
|
|||
|
|
@ -67,13 +67,7 @@ struct intel_display_irq_state {
|
|||
void intel_display_irq_reset(struct intel_display *display);
|
||||
void intel_display_irq_postinstall(struct intel_display *display);
|
||||
void intel_display_irq_ack(struct intel_display *display, struct intel_display_irq_state *state);
|
||||
|
||||
bool ilk_display_irq_handler(struct intel_display *display, const struct intel_display_irq_state *state);
|
||||
bool gen8_display_irq_handler(struct intel_display *display, const struct intel_display_irq_state *state);
|
||||
bool gen11_display_irq_handler(struct intel_display *display, const struct intel_display_irq_state *state);
|
||||
bool i965_display_irq_handler(struct intel_display *display, const struct intel_display_irq_state *state);
|
||||
bool i915_display_irq_handler(struct intel_display *display, const struct intel_display_irq_state *state);
|
||||
bool vlv_display_irq_handler(struct intel_display *display, const struct intel_display_irq_state *state);
|
||||
bool intel_display_irq_handler(struct intel_display *display, const struct intel_display_irq_state *state);
|
||||
|
||||
u32 i9xx_display_irq_enable_mask(struct intel_display *display);
|
||||
|
||||
|
|
|
|||
|
|
@ -285,7 +285,7 @@ static irqreturn_t valleyview_irq_handler(int irq, void *arg)
|
|||
if (pm_iir)
|
||||
gen6_rps_irq_handler(&to_gt(dev_priv)->rps, pm_iir);
|
||||
|
||||
vlv_display_irq_handler(display, &state);
|
||||
intel_display_irq_handler(display, &state);
|
||||
} while (0);
|
||||
|
||||
pmu_irq_stats(dev_priv, ret);
|
||||
|
|
@ -350,7 +350,7 @@ static irqreturn_t cherryview_irq_handler(int irq, void *arg)
|
|||
intel_uncore_write(&dev_priv->uncore, VLV_IER, ier);
|
||||
intel_uncore_write(&dev_priv->uncore, GEN8_MASTER_IRQ, GEN8_MASTER_IRQ_CONTROL);
|
||||
|
||||
vlv_display_irq_handler(display, &state);
|
||||
intel_display_irq_handler(display, &state);
|
||||
} while (0);
|
||||
|
||||
pmu_irq_stats(dev_priv, ret);
|
||||
|
|
@ -397,7 +397,7 @@ static irqreturn_t ilk_irq_handler(int irq, void *arg)
|
|||
ret = IRQ_HANDLED;
|
||||
}
|
||||
|
||||
if (ilk_display_irq_handler(display, NULL))
|
||||
if (intel_display_irq_handler(display, NULL))
|
||||
ret = IRQ_HANDLED;
|
||||
|
||||
if (GRAPHICS_VER(i915) >= 6) {
|
||||
|
|
@ -463,7 +463,7 @@ static irqreturn_t gen8_irq_handler(int irq, void *arg)
|
|||
.master_ctl = master_ctl,
|
||||
};
|
||||
disable_rpm_wakeref_asserts(&dev_priv->runtime_pm);
|
||||
gen8_display_irq_handler(display, &state);
|
||||
intel_display_irq_handler(display, &state);
|
||||
enable_rpm_wakeref_asserts(&dev_priv->runtime_pm);
|
||||
}
|
||||
|
||||
|
|
@ -515,7 +515,7 @@ static irqreturn_t gen11_irq_handler(int irq, void *arg)
|
|||
|
||||
/* IRQs are synced during runtime_suspend, we don't require a wakeref */
|
||||
if (master_ctl & GEN11_DISPLAY_IRQ)
|
||||
gen11_display_irq_handler(display, NULL);
|
||||
intel_display_irq_handler(display, NULL);
|
||||
|
||||
gu_misc_iir = gen11_gu_misc_irq_ack(display, master_ctl);
|
||||
|
||||
|
|
@ -582,7 +582,7 @@ static irqreturn_t dg1_irq_handler(int irq, void *arg)
|
|||
gen11_gt_irq_handler(gt, master_ctl);
|
||||
|
||||
if (master_ctl & GEN11_DISPLAY_IRQ)
|
||||
gen11_display_irq_handler(display, NULL);
|
||||
intel_display_irq_handler(display, NULL);
|
||||
|
||||
gu_misc_iir = gen11_gu_misc_irq_ack(display, master_ctl);
|
||||
|
||||
|
|
@ -886,7 +886,7 @@ static irqreturn_t i915_irq_handler(int irq, void *arg)
|
|||
if (state.iir & I915_MASTER_ERROR_INTERRUPT)
|
||||
i9xx_error_irq_handler(dev_priv, eir, eir_stuck);
|
||||
|
||||
i915_display_irq_handler(display, &state);
|
||||
intel_display_irq_handler(display, &state);
|
||||
} while (0);
|
||||
|
||||
pmu_irq_stats(dev_priv, ret);
|
||||
|
|
@ -990,7 +990,7 @@ static irqreturn_t i965_irq_handler(int irq, void *arg)
|
|||
if (state.iir & I915_MASTER_ERROR_INTERRUPT)
|
||||
i9xx_error_irq_handler(dev_priv, eir, eir_stuck);
|
||||
|
||||
i965_display_irq_handler(display, &state);
|
||||
intel_display_irq_handler(display, &state);
|
||||
} while (0);
|
||||
|
||||
pmu_irq_stats(dev_priv, IRQ_HANDLED);
|
||||
|
|
|
|||
|
|
@ -222,7 +222,7 @@ void xe_display_irq_handler(struct xe_device *xe, u32 master_ctl)
|
|||
return;
|
||||
|
||||
if (master_ctl & DISPLAY_IRQ)
|
||||
gen11_display_irq_handler(display, NULL);
|
||||
intel_display_irq_handler(display, NULL);
|
||||
}
|
||||
|
||||
void xe_display_irq_enable(struct xe_device *xe, u32 gu_misc_iir)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user