i915_enable_asle_pipestat(display);
}
-void i9xx_display_irq_ack(struct intel_display *display,
- struct intel_display_irq_state *state)
+static void i9xx_display_irq_ack(struct intel_display *display,
+ struct intel_display_irq_state *state)
{
if (state->iir & I915_DISPLAY_PORT_INTERRUPT)
state->hotplug_status = i9xx_hpd_irq_ack(display);
return I915_LPE_PIPE_A_INTERRUPT | I915_LPE_PIPE_B_INTERRUPT;
}
-void vlv_display_irq_ack(struct intel_display *display,
- struct intel_display_irq_state *state)
+static void vlv_display_irq_ack(struct intel_display *display,
+ struct intel_display_irq_state *state)
{
if (state->iir & I915_DISPLAY_PORT_INTERRUPT)
state->hotplug_status = i9xx_hpd_irq_ack(display);
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);
};
static const struct intel_display_irq_funcs gen11_display_irq_funcs = {
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,
};
static const struct intel_display_irq_funcs ilk_display_irq_funcs = {
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,
};
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,
};
void intel_display_irq_reset(struct intel_display *display)
display->irq.funcs->postinstall(display);
}
+void intel_display_irq_ack(struct intel_display *display,
+ struct intel_display_irq_state *state)
+{
+ if (!HAS_DISPLAY(display) || !display->irq.funcs->ack)
+ return;
+
+ display->irq.funcs->ack(display, state);
+}
+
void intel_display_irq_init(struct intel_display *display)
{
spin_lock_init(&display->irq.lock);
void intel_display_irq_reset(struct intel_display *display);
void intel_display_irq_postinstall(struct intel_display *display);
-
-void vlv_display_irq_ack(struct intel_display *display, struct intel_display_irq_state *state);
-void i9xx_display_irq_ack(struct intel_display *display, struct intel_display_irq_state *state);
+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);
if (pm_iir)
intel_uncore_write(&dev_priv->uncore, GEN6_PMIIR, pm_iir);
- vlv_display_irq_ack(display, &state);
+ intel_display_irq_ack(display, &state);
/*
* VLV_IIR is single buffered, and reflects the level
gen8_gt_irq_handler(to_gt(dev_priv), master_ctl);
- vlv_display_irq_ack(display, &state);
+ intel_display_irq_ack(display, &state);
/*
* VLV_IIR is single buffered, and reflects the level
ret = IRQ_HANDLED;
- i9xx_display_irq_ack(display, &state);
+ intel_display_irq_ack(display, &state);
if (state.iir & I915_MASTER_ERROR_INTERRUPT)
i9xx_error_irq_ack(dev_priv, &eir, &eir_stuck);
ret = IRQ_HANDLED;
- i9xx_display_irq_ack(display, &state);
+ intel_display_irq_ack(display, &state);
if (state.iir & I915_MASTER_ERROR_INTERRUPT)
i9xx_error_irq_ack(dev_priv, &eir, &eir_stuck);