mirror of
https://github.com/torvalds/linux.git
synced 2026-05-30 10:04:04 +02:00
Merge tag 'drm-intel-next-fixes-2024-01-11' of git://anongit.freedesktop.org/drm/drm-intel into drm-next
- Fixes for kernel-doc warnings enforced in linux-next - Another build warning fix for string formatting of intel_wakeref_t - Display fixes for DP DSC BPC and C20 PLL state verification Signed-off-by: Dave Airlie <airlied@redhat.com> From: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/ZZ_IOcLiDG9LJafO@jlahtine-mobl.ger.corp.intel.com
This commit is contained in:
commit
e8aaca57f9
|
|
@ -3067,24 +3067,29 @@ static void intel_c20pll_state_verify(const struct intel_crtc_state *state,
|
|||
{
|
||||
struct drm_i915_private *i915 = to_i915(crtc->base.dev);
|
||||
const struct intel_c20pll_state *mpll_sw_state = &state->cx0pll_state.c20;
|
||||
bool use_mplla;
|
||||
bool sw_use_mpllb = mpll_sw_state->tx[0] & C20_PHY_USE_MPLLB;
|
||||
bool hw_use_mpllb = mpll_hw_state->tx[0] & C20_PHY_USE_MPLLB;
|
||||
int i;
|
||||
|
||||
use_mplla = intel_c20_use_mplla(mpll_hw_state->clock);
|
||||
if (use_mplla) {
|
||||
for (i = 0; i < ARRAY_SIZE(mpll_sw_state->mplla); i++) {
|
||||
I915_STATE_WARN(i915, mpll_hw_state->mplla[i] != mpll_sw_state->mplla[i],
|
||||
"[CRTC:%d:%s] mismatch in C20MPLLA: Register[%d] (expected 0x%04x, found 0x%04x)",
|
||||
crtc->base.base.id, crtc->base.name, i,
|
||||
mpll_sw_state->mplla[i], mpll_hw_state->mplla[i]);
|
||||
}
|
||||
} else {
|
||||
I915_STATE_WARN(i915, sw_use_mpllb != hw_use_mpllb,
|
||||
"[CRTC:%d:%s] mismatch in C20: Register MPLLB selection (expected %d, found %d)",
|
||||
crtc->base.base.id, crtc->base.name,
|
||||
sw_use_mpllb, hw_use_mpllb);
|
||||
|
||||
if (hw_use_mpllb) {
|
||||
for (i = 0; i < ARRAY_SIZE(mpll_sw_state->mpllb); i++) {
|
||||
I915_STATE_WARN(i915, mpll_hw_state->mpllb[i] != mpll_sw_state->mpllb[i],
|
||||
"[CRTC:%d:%s] mismatch in C20MPLLB: Register[%d] (expected 0x%04x, found 0x%04x)",
|
||||
crtc->base.base.id, crtc->base.name, i,
|
||||
mpll_sw_state->mpllb[i], mpll_hw_state->mpllb[i]);
|
||||
}
|
||||
} else {
|
||||
for (i = 0; i < ARRAY_SIZE(mpll_sw_state->mplla); i++) {
|
||||
I915_STATE_WARN(i915, mpll_hw_state->mplla[i] != mpll_sw_state->mplla[i],
|
||||
"[CRTC:%d:%s] mismatch in C20MPLLA: Register[%d] (expected 0x%04x, found 0x%04x)",
|
||||
crtc->base.base.id, crtc->base.name, i,
|
||||
mpll_sw_state->mplla[i], mpll_hw_state->mplla[i]);
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(mpll_sw_state->tx); i++) {
|
||||
|
|
|
|||
|
|
@ -405,8 +405,8 @@ print_async_put_domains_state(struct i915_power_domains *power_domains)
|
|||
struct drm_i915_private,
|
||||
display.power.domains);
|
||||
|
||||
drm_dbg(&i915->drm, "async_put_wakeref %lu\n",
|
||||
power_domains->async_put_wakeref);
|
||||
drm_dbg(&i915->drm, "async_put_wakeref: %s\n",
|
||||
str_yes_no(power_domains->async_put_wakeref));
|
||||
|
||||
print_power_domains(power_domains, "async_put_domains[0]",
|
||||
&power_domains->async_put_domains[0]);
|
||||
|
|
|
|||
|
|
@ -2101,7 +2101,7 @@ static int intel_dp_dsc_compute_pipe_bpp(struct intel_dp *intel_dp,
|
|||
}
|
||||
}
|
||||
|
||||
dsc_max_bpc = intel_dp_dsc_min_src_input_bpc(i915);
|
||||
dsc_max_bpc = intel_dp_dsc_max_src_input_bpc(i915);
|
||||
if (!dsc_max_bpc)
|
||||
return -EINVAL;
|
||||
|
||||
|
|
|
|||
|
|
@ -3319,11 +3319,11 @@ void intel_psr_connector_debugfs_add(struct intel_connector *connector)
|
|||
struct drm_i915_private *i915 = to_i915(connector->base.dev);
|
||||
struct dentry *root = connector->base.debugfs_entry;
|
||||
|
||||
if (connector->base.connector_type != DRM_MODE_CONNECTOR_eDP) {
|
||||
if (!(HAS_DP20(i915) &&
|
||||
connector->base.connector_type == DRM_MODE_CONNECTOR_DisplayPort))
|
||||
return;
|
||||
}
|
||||
/* TODO: Add support for MST connectors as well. */
|
||||
if ((connector->base.connector_type != DRM_MODE_CONNECTOR_eDP &&
|
||||
connector->base.connector_type != DRM_MODE_CONNECTOR_DisplayPort) ||
|
||||
connector->mst_port)
|
||||
return;
|
||||
|
||||
debugfs_create_file("i915_psr_sink_status", 0444, root,
|
||||
connector, &i915_psr_sink_status_fops);
|
||||
|
|
|
|||
|
|
@ -412,9 +412,9 @@ struct i915_gem_context {
|
|||
|
||||
/** @stale: tracks stale engines to be destroyed */
|
||||
struct {
|
||||
/** @lock: guards engines */
|
||||
/** @stale.lock: guards engines */
|
||||
spinlock_t lock;
|
||||
/** @engines: list of stale engines */
|
||||
/** @stale.engines: list of stale engines */
|
||||
struct list_head engines;
|
||||
} stale;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -21,8 +21,11 @@ struct mei_aux_device;
|
|||
/**
|
||||
* struct intel_gsc - graphics security controller
|
||||
*
|
||||
* @gem_obj: scratch memory GSC operations
|
||||
* @intf : gsc interface
|
||||
* @intf: gsc interface
|
||||
* @intf.adev: MEI aux. device for this @intf
|
||||
* @intf.gem_obj: scratch memory GSC operations
|
||||
* @intf.irq: IRQ for this device (%-1 for no IRQ)
|
||||
* @intf.id: this interface's id number/index
|
||||
*/
|
||||
struct intel_gsc {
|
||||
struct intel_gsc_intf {
|
||||
|
|
|
|||
|
|
@ -105,61 +105,67 @@ struct intel_guc {
|
|||
*/
|
||||
struct {
|
||||
/**
|
||||
* @lock: protects everything in submission_state,
|
||||
* ce->guc_id.id, and ce->guc_id.ref when transitioning in and
|
||||
* out of zero
|
||||
* @submission_state.lock: protects everything in
|
||||
* submission_state, ce->guc_id.id, and ce->guc_id.ref
|
||||
* when transitioning in and out of zero
|
||||
*/
|
||||
spinlock_t lock;
|
||||
/**
|
||||
* @guc_ids: used to allocate new guc_ids, single-lrc
|
||||
* @submission_state.guc_ids: used to allocate new
|
||||
* guc_ids, single-lrc
|
||||
*/
|
||||
struct ida guc_ids;
|
||||
/**
|
||||
* @num_guc_ids: Number of guc_ids, selftest feature to be able
|
||||
* to reduce this number while testing.
|
||||
* @submission_state.num_guc_ids: Number of guc_ids, selftest
|
||||
* feature to be able to reduce this number while testing.
|
||||
*/
|
||||
int num_guc_ids;
|
||||
/**
|
||||
* @guc_ids_bitmap: used to allocate new guc_ids, multi-lrc
|
||||
* @submission_state.guc_ids_bitmap: used to allocate
|
||||
* new guc_ids, multi-lrc
|
||||
*/
|
||||
unsigned long *guc_ids_bitmap;
|
||||
/**
|
||||
* @guc_id_list: list of intel_context with valid guc_ids but no
|
||||
* refs
|
||||
* @submission_state.guc_id_list: list of intel_context
|
||||
* with valid guc_ids but no refs
|
||||
*/
|
||||
struct list_head guc_id_list;
|
||||
/**
|
||||
* @guc_ids_in_use: Number single-lrc guc_ids in use
|
||||
* @submission_state.guc_ids_in_use: Number single-lrc
|
||||
* guc_ids in use
|
||||
*/
|
||||
unsigned int guc_ids_in_use;
|
||||
/**
|
||||
* @destroyed_contexts: list of contexts waiting to be destroyed
|
||||
* (deregistered with the GuC)
|
||||
* @submission_state.destroyed_contexts: list of contexts
|
||||
* waiting to be destroyed (deregistered with the GuC)
|
||||
*/
|
||||
struct list_head destroyed_contexts;
|
||||
/**
|
||||
* @destroyed_worker: worker to deregister contexts, need as we
|
||||
* need to take a GT PM reference and can't from destroy
|
||||
* function as it might be in an atomic context (no sleeping)
|
||||
* @submission_state.destroyed_worker: worker to deregister
|
||||
* contexts, need as we need to take a GT PM reference and
|
||||
* can't from destroy function as it might be in an atomic
|
||||
* context (no sleeping)
|
||||
*/
|
||||
struct work_struct destroyed_worker;
|
||||
/**
|
||||
* @reset_fail_worker: worker to trigger a GT reset after an
|
||||
* engine reset fails
|
||||
* @submission_state.reset_fail_worker: worker to trigger
|
||||
* a GT reset after an engine reset fails
|
||||
*/
|
||||
struct work_struct reset_fail_worker;
|
||||
/**
|
||||
* @reset_fail_mask: mask of engines that failed to reset
|
||||
* @submission_state.reset_fail_mask: mask of engines that
|
||||
* failed to reset
|
||||
*/
|
||||
intel_engine_mask_t reset_fail_mask;
|
||||
/**
|
||||
* @sched_disable_delay_ms: schedule disable delay, in ms, for
|
||||
* contexts
|
||||
* @submission_state.sched_disable_delay_ms: schedule
|
||||
* disable delay, in ms, for contexts
|
||||
*/
|
||||
unsigned int sched_disable_delay_ms;
|
||||
/**
|
||||
* @sched_disable_gucid_threshold: threshold of min remaining available
|
||||
* guc_ids before we start bypassing the schedule disable delay
|
||||
* @submission_state.sched_disable_gucid_threshold:
|
||||
* threshold of min remaining available guc_ids before
|
||||
* we start bypassing the schedule disable delay
|
||||
*/
|
||||
unsigned int sched_disable_gucid_threshold;
|
||||
} submission_state;
|
||||
|
|
@ -243,37 +249,40 @@ struct intel_guc {
|
|||
*/
|
||||
struct {
|
||||
/**
|
||||
* @lock: Lock protecting the below fields and the engine stats.
|
||||
* @timestamp.lock: Lock protecting the below fields and
|
||||
* the engine stats.
|
||||
*/
|
||||
spinlock_t lock;
|
||||
|
||||
/**
|
||||
* @gt_stamp: 64 bit extended value of the GT timestamp.
|
||||
* @timestamp.gt_stamp: 64-bit extended value of the GT
|
||||
* timestamp.
|
||||
*/
|
||||
u64 gt_stamp;
|
||||
|
||||
/**
|
||||
* @ping_delay: Period for polling the GT timestamp for
|
||||
* overflow.
|
||||
* @timestamp.ping_delay: Period for polling the GT
|
||||
* timestamp for overflow.
|
||||
*/
|
||||
unsigned long ping_delay;
|
||||
|
||||
/**
|
||||
* @work: Periodic work to adjust GT timestamp, engine and
|
||||
* context usage for overflows.
|
||||
* @timestamp.work: Periodic work to adjust GT timestamp,
|
||||
* engine and context usage for overflows.
|
||||
*/
|
||||
struct delayed_work work;
|
||||
|
||||
/**
|
||||
* @shift: Right shift value for the gpm timestamp
|
||||
* @timestamp.shift: Right shift value for the gpm timestamp
|
||||
*/
|
||||
u32 shift;
|
||||
|
||||
/**
|
||||
* @last_stat_jiffies: jiffies at last actual stats collection time
|
||||
* We use this timestamp to ensure we don't oversample the
|
||||
* stats because runtime power management events can trigger
|
||||
* stats collection at much higher rates than required.
|
||||
* @timestamp.last_stat_jiffies: jiffies at last actual
|
||||
* stats collection time. We use this timestamp to ensure
|
||||
* we don't oversample the stats because runtime power
|
||||
* management events can trigger stats collection at much
|
||||
* higher rates than required.
|
||||
*/
|
||||
unsigned long last_stat_jiffies;
|
||||
} timestamp;
|
||||
|
|
|
|||
|
|
@ -291,7 +291,8 @@ struct i915_perf_stream {
|
|||
int size_exponent;
|
||||
|
||||
/**
|
||||
* @ptr_lock: Locks reads and writes to all head/tail state
|
||||
* @oa_buffer.ptr_lock: Locks reads and writes to all
|
||||
* head/tail state
|
||||
*
|
||||
* Consider: the head and tail pointer state needs to be read
|
||||
* consistently from a hrtimer callback (atomic context) and
|
||||
|
|
@ -313,7 +314,8 @@ struct i915_perf_stream {
|
|||
spinlock_t ptr_lock;
|
||||
|
||||
/**
|
||||
* @head: Although we can always read back the head pointer register,
|
||||
* @oa_buffer.head: Although we can always read back
|
||||
* the head pointer register,
|
||||
* we prefer to avoid trusting the HW state, just to avoid any
|
||||
* risk that some hardware condition could * somehow bump the
|
||||
* head pointer unpredictably and cause us to forward the wrong
|
||||
|
|
@ -322,7 +324,8 @@ struct i915_perf_stream {
|
|||
u32 head;
|
||||
|
||||
/**
|
||||
* @tail: The last verified tail that can be read by userspace.
|
||||
* @oa_buffer.tail: The last verified tail that can be
|
||||
* read by userspace.
|
||||
*/
|
||||
u32 tail;
|
||||
} oa_buffer;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user