sync with OpenBSD -current
This commit is contained in:
parent
7bc640af07
commit
4a6edb3688
61 changed files with 680 additions and 286 deletions
|
@ -1256,17 +1256,6 @@ static void i915_audio_component_init(struct drm_i915_private *i915)
|
|||
{
|
||||
#ifdef notyet
|
||||
u32 aud_freq, aud_freq_init;
|
||||
int ret;
|
||||
|
||||
ret = component_add_typed(i915->drm.dev,
|
||||
&i915_audio_component_bind_ops,
|
||||
I915_COMPONENT_AUDIO);
|
||||
if (ret < 0) {
|
||||
drm_err(&i915->drm,
|
||||
"failed to add audio component (%d)\n", ret);
|
||||
/* continue with reduced functionality */
|
||||
return;
|
||||
}
|
||||
|
||||
if (DISPLAY_VER(i915) >= 9) {
|
||||
aud_freq_init = intel_de_read(i915, AUD_FREQ_CNTRL);
|
||||
|
@ -1289,6 +1278,23 @@ static void i915_audio_component_init(struct drm_i915_private *i915)
|
|||
|
||||
/* init with current cdclk */
|
||||
intel_audio_cdclk_change_post(i915);
|
||||
#endif
|
||||
}
|
||||
|
||||
static void i915_audio_component_register(struct drm_i915_private *i915)
|
||||
{
|
||||
#ifdef notyet
|
||||
int ret;
|
||||
|
||||
ret = component_add_typed(i915->drm.dev,
|
||||
&i915_audio_component_bind_ops,
|
||||
I915_COMPONENT_AUDIO);
|
||||
if (ret < 0) {
|
||||
drm_err(&i915->drm,
|
||||
"failed to add audio component (%d)\n", ret);
|
||||
/* continue with reduced functionality */
|
||||
return;
|
||||
}
|
||||
|
||||
i915->display.audio.component_registered = true;
|
||||
#endif
|
||||
|
@ -1322,6 +1328,12 @@ void intel_audio_init(struct drm_i915_private *i915)
|
|||
i915_audio_component_init(i915);
|
||||
}
|
||||
|
||||
void intel_audio_register(struct drm_i915_private *i915)
|
||||
{
|
||||
if (!i915->display.audio.lpe.platdev)
|
||||
i915_audio_component_register(i915);
|
||||
}
|
||||
|
||||
/**
|
||||
* intel_audio_deinit() - deinitialize the audio driver
|
||||
* @i915: the i915 drm device private data
|
||||
|
|
|
@ -30,6 +30,7 @@ void intel_audio_codec_get_config(struct intel_encoder *encoder,
|
|||
void intel_audio_cdclk_change_pre(struct drm_i915_private *dev_priv);
|
||||
void intel_audio_cdclk_change_post(struct drm_i915_private *dev_priv);
|
||||
void intel_audio_init(struct drm_i915_private *dev_priv);
|
||||
void intel_audio_register(struct drm_i915_private *i915);
|
||||
void intel_audio_deinit(struct drm_i915_private *dev_priv);
|
||||
void intel_audio_sdp_split_update(struct intel_encoder *encoder,
|
||||
const struct intel_crtc_state *crtc_state);
|
||||
|
|
|
@ -388,6 +388,8 @@ void intel_display_driver_register(struct drm_i915_private *i915)
|
|||
|
||||
intel_audio_init(i915);
|
||||
|
||||
intel_audio_register(i915);
|
||||
|
||||
intel_display_debugfs_register(i915);
|
||||
|
||||
/*
|
||||
|
|
|
@ -285,7 +285,9 @@ bool i915_gem_object_has_iomem(const struct drm_i915_gem_object *obj);
|
|||
static inline bool
|
||||
i915_gem_object_is_shrinkable(const struct drm_i915_gem_object *obj)
|
||||
{
|
||||
return i915_gem_object_type_has(obj, I915_GEM_OBJECT_IS_SHRINKABLE);
|
||||
/* TODO: make DPT shrinkable when it has no bound vmas */
|
||||
return i915_gem_object_type_has(obj, I915_GEM_OBJECT_IS_SHRINKABLE) &&
|
||||
!obj->is_dpt;
|
||||
}
|
||||
|
||||
static inline bool
|
||||
|
|
|
@ -260,8 +260,13 @@ static void signal_irq_work(struct irq_work *work)
|
|||
i915_request_put(rq);
|
||||
}
|
||||
|
||||
/* Lazy irq enabling after HW submission */
|
||||
if (!READ_ONCE(b->irq_armed) && !list_empty(&b->signalers))
|
||||
intel_breadcrumbs_arm_irq(b);
|
||||
|
||||
/* And confirm that we still want irqs enabled before we yield */
|
||||
if (READ_ONCE(b->irq_armed) && !atomic_read(&b->active))
|
||||
intel_breadcrumbs_disarm_irq(b);
|
||||
}
|
||||
|
||||
struct intel_breadcrumbs *
|
||||
|
@ -312,13 +317,7 @@ void __intel_breadcrumbs_park(struct intel_breadcrumbs *b)
|
|||
return;
|
||||
|
||||
/* Kick the work once more to drain the signalers, and disarm the irq */
|
||||
irq_work_sync(&b->irq_work);
|
||||
while (READ_ONCE(b->irq_armed) && !atomic_read(&b->active)) {
|
||||
local_irq_disable();
|
||||
signal_irq_work(&b->irq_work);
|
||||
local_irq_enable();
|
||||
cond_resched();
|
||||
}
|
||||
irq_work_queue(&b->irq_work);
|
||||
}
|
||||
|
||||
void intel_breadcrumbs_free(struct kref *kref)
|
||||
|
@ -401,7 +400,7 @@ static void insert_breadcrumb(struct i915_request *rq)
|
|||
* the request as it may have completed and raised the interrupt as
|
||||
* we were attaching it into the lists.
|
||||
*/
|
||||
if (!b->irq_armed || __i915_request_is_complete(rq))
|
||||
if (!READ_ONCE(b->irq_armed) || __i915_request_is_complete(rq))
|
||||
irq_work_queue(&b->irq_work);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue