mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 17:47:41 +02:00
drm/i915/irq: add intel_display_irq_ack() to irq funcs
Call the platform specific display irq ack hooks, if any, via intel_display_irq_ack(). Check for HAS_DISPLAY() in intel_display_irq_ack() for completeness even though fusing is not possible on the platforms in question. v3: - Pure vfunc change (Ville) v2: - Include LPE audio in the ack part - Check for HAS_DISPLAY() Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Link: https://patch.msgid.link/a72974d66f7696ca35380b44f13f938b2d4d690d.1778688699.git.jani.nikula@intel.com Signed-off-by: Jani Nikula <jani.nikula@intel.com>
This commit is contained in:
parent
c7ae1bdfce
commit
13dccf09e8
|
|
@ -2023,8 +2023,8 @@ static void i965_display_irq_postinstall(struct intel_display *display)
|
|||
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);
|
||||
|
|
@ -2119,8 +2119,8 @@ static u32 vlv_lpe_irq_mask(struct intel_display *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);
|
||||
|
|
@ -2528,6 +2528,7 @@ static void gen11_de_irq_postinstall(struct intel_display *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 = {
|
||||
|
|
@ -2543,6 +2544,7 @@ static const struct intel_display_irq_funcs gen8_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 = {
|
||||
|
|
@ -2553,11 +2555,13 @@ 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)
|
||||
|
|
@ -2576,6 +2580,15 @@ void intel_display_irq_postinstall(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);
|
||||
|
|
|
|||
|
|
@ -66,9 +66,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 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);
|
||||
|
|
|
|||
|
|
@ -268,7 +268,7 @@ static irqreturn_t valleyview_irq_handler(int irq, void *arg)
|
|||
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
|
||||
|
|
@ -338,7 +338,7 @@ static irqreturn_t cherryview_irq_handler(int irq, void *arg)
|
|||
|
||||
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
|
||||
|
|
@ -873,7 +873,7 @@ static irqreturn_t i915_irq_handler(int irq, void *arg)
|
|||
|
||||
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);
|
||||
|
|
@ -972,7 +972,7 @@ static irqreturn_t i965_irq_handler(int irq, void *arg)
|
|||
|
||||
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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user