mirror of
https://github.com/torvalds/linux.git
synced 2024-11-25 21:51:40 +00:00
Merge tag 'drm-intel-next-fixes-2022-09-29' of git://anongit.freedesktop.org/drm/drm-intel into drm-next
- Fix release build bug in 'remove GuC log size module parameters' (John Harrison) - Remove ipc_enabled from struct drm_i915_private (Jani Nikula) - Do not cleanup obj with NULL bo->resource (Nirmoy Das) - Fix device info for devices without display (Jani Nikula) - Force DPLL calculation for TC ports after readout (Ville Syrjälä) - Use i915_vm_put on ppgtt_create error paths (Chris Wilson) Signed-off-by: Dave Airlie <airlied@redhat.com> From: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/YzWqtwPNxAe+r9FO@tursulin-desk
This commit is contained in:
commit
0bda8d828f
@ -3600,10 +3600,22 @@ static void intel_ddi_sync_state(struct intel_encoder *encoder,
|
||||
static bool intel_ddi_initial_fastset_check(struct intel_encoder *encoder,
|
||||
struct intel_crtc_state *crtc_state)
|
||||
{
|
||||
if (intel_crtc_has_dp_encoder(crtc_state))
|
||||
return intel_dp_initial_fastset_check(encoder, crtc_state);
|
||||
struct drm_i915_private *i915 = to_i915(encoder->base.dev);
|
||||
enum phy phy = intel_port_to_phy(i915, encoder->port);
|
||||
bool fastset = true;
|
||||
|
||||
return true;
|
||||
if (intel_phy_is_tc(i915, phy)) {
|
||||
drm_dbg_kms(&i915->drm, "[ENCODER:%d:%s] Forcing full modeset to compute TC port DPLLs\n",
|
||||
encoder->base.base.id, encoder->base.name);
|
||||
crtc_state->uapi.mode_changed = true;
|
||||
fastset = false;
|
||||
}
|
||||
|
||||
if (intel_crtc_has_dp_encoder(crtc_state) &&
|
||||
!intel_dp_initial_fastset_check(encoder, crtc_state))
|
||||
fastset = false;
|
||||
|
||||
return fastset;
|
||||
}
|
||||
|
||||
static enum intel_output_type
|
||||
|
@ -511,7 +511,7 @@ static void i915_ttm_delete_mem_notify(struct ttm_buffer_object *bo)
|
||||
struct drm_i915_gem_object *obj = i915_ttm_to_gem(bo);
|
||||
intel_wakeref_t wakeref = 0;
|
||||
|
||||
if (likely(obj)) {
|
||||
if (bo->resource && likely(obj)) {
|
||||
/* ttm_bo_release() already has dma_resv_lock */
|
||||
if (i915_ttm_cpu_maps_iomem(bo->resource))
|
||||
wakeref = intel_runtime_pm_get(&to_i915(obj->base.dev)->runtime_pm);
|
||||
|
@ -247,6 +247,7 @@ err_scratch1:
|
||||
i915_gem_object_put(vm->scratch[1]);
|
||||
err_scratch0:
|
||||
i915_gem_object_put(vm->scratch[0]);
|
||||
vm->scratch[0] = NULL;
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -268,9 +269,10 @@ static void gen6_ppgtt_cleanup(struct i915_address_space *vm)
|
||||
gen6_ppgtt_free_pd(ppgtt);
|
||||
free_scratch(vm);
|
||||
|
||||
mutex_destroy(&ppgtt->flush);
|
||||
if (ppgtt->base.pd)
|
||||
free_pd(&ppgtt->base.vm, ppgtt->base.pd);
|
||||
|
||||
free_pd(&ppgtt->base.vm, ppgtt->base.pd);
|
||||
mutex_destroy(&ppgtt->flush);
|
||||
}
|
||||
|
||||
static void pd_vma_bind(struct i915_address_space *vm,
|
||||
@ -449,19 +451,17 @@ struct i915_ppgtt *gen6_ppgtt_create(struct intel_gt *gt)
|
||||
|
||||
err = gen6_ppgtt_init_scratch(ppgtt);
|
||||
if (err)
|
||||
goto err_free;
|
||||
goto err_put;
|
||||
|
||||
ppgtt->base.pd = gen6_alloc_top_pd(ppgtt);
|
||||
if (IS_ERR(ppgtt->base.pd)) {
|
||||
err = PTR_ERR(ppgtt->base.pd);
|
||||
goto err_scratch;
|
||||
goto err_put;
|
||||
}
|
||||
|
||||
return &ppgtt->base;
|
||||
|
||||
err_scratch:
|
||||
free_scratch(&ppgtt->base.vm);
|
||||
err_free:
|
||||
kfree(ppgtt);
|
||||
err_put:
|
||||
i915_vm_put(&ppgtt->base.vm);
|
||||
return ERR_PTR(err);
|
||||
}
|
||||
|
@ -196,7 +196,10 @@ static void gen8_ppgtt_cleanup(struct i915_address_space *vm)
|
||||
if (intel_vgpu_active(vm->i915))
|
||||
gen8_ppgtt_notify_vgt(ppgtt, false);
|
||||
|
||||
__gen8_ppgtt_cleanup(vm, ppgtt->pd, gen8_pd_top_count(vm), vm->top);
|
||||
if (ppgtt->pd)
|
||||
__gen8_ppgtt_cleanup(vm, ppgtt->pd,
|
||||
gen8_pd_top_count(vm), vm->top);
|
||||
|
||||
free_scratch(vm);
|
||||
}
|
||||
|
||||
@ -803,8 +806,10 @@ static int gen8_init_scratch(struct i915_address_space *vm)
|
||||
struct drm_i915_gem_object *obj;
|
||||
|
||||
obj = vm->alloc_pt_dma(vm, I915_GTT_PAGE_SIZE_4K);
|
||||
if (IS_ERR(obj))
|
||||
if (IS_ERR(obj)) {
|
||||
ret = PTR_ERR(obj);
|
||||
goto free_scratch;
|
||||
}
|
||||
|
||||
ret = map_pt_dma(vm, obj);
|
||||
if (ret) {
|
||||
@ -823,7 +828,8 @@ static int gen8_init_scratch(struct i915_address_space *vm)
|
||||
free_scratch:
|
||||
while (i--)
|
||||
i915_gem_object_put(vm->scratch[i]);
|
||||
return -ENOMEM;
|
||||
vm->scratch[0] = NULL;
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int gen8_preallocate_top_level_pdp(struct i915_ppgtt *ppgtt)
|
||||
@ -901,6 +907,7 @@ err_pd:
|
||||
struct i915_ppgtt *gen8_ppgtt_create(struct intel_gt *gt,
|
||||
unsigned long lmem_pt_obj_flags)
|
||||
{
|
||||
struct i915_page_directory *pd;
|
||||
struct i915_ppgtt *ppgtt;
|
||||
int err;
|
||||
|
||||
@ -946,21 +953,7 @@ struct i915_ppgtt *gen8_ppgtt_create(struct intel_gt *gt,
|
||||
ppgtt->vm.alloc_scratch_dma = alloc_pt_dma;
|
||||
}
|
||||
|
||||
err = gen8_init_scratch(&ppgtt->vm);
|
||||
if (err)
|
||||
goto err_free;
|
||||
|
||||
ppgtt->pd = gen8_alloc_top_pd(&ppgtt->vm);
|
||||
if (IS_ERR(ppgtt->pd)) {
|
||||
err = PTR_ERR(ppgtt->pd);
|
||||
goto err_free_scratch;
|
||||
}
|
||||
|
||||
if (!i915_vm_is_4lvl(&ppgtt->vm)) {
|
||||
err = gen8_preallocate_top_level_pdp(ppgtt);
|
||||
if (err)
|
||||
goto err_free_pd;
|
||||
}
|
||||
ppgtt->vm.pte_encode = gen8_pte_encode;
|
||||
|
||||
ppgtt->vm.bind_async_flags = I915_VMA_LOCAL_BIND;
|
||||
ppgtt->vm.insert_entries = gen8_ppgtt_insert;
|
||||
@ -971,22 +964,31 @@ struct i915_ppgtt *gen8_ppgtt_create(struct intel_gt *gt,
|
||||
ppgtt->vm.allocate_va_range = gen8_ppgtt_alloc;
|
||||
ppgtt->vm.clear_range = gen8_ppgtt_clear;
|
||||
ppgtt->vm.foreach = gen8_ppgtt_foreach;
|
||||
ppgtt->vm.cleanup = gen8_ppgtt_cleanup;
|
||||
|
||||
ppgtt->vm.pte_encode = gen8_pte_encode;
|
||||
err = gen8_init_scratch(&ppgtt->vm);
|
||||
if (err)
|
||||
goto err_put;
|
||||
|
||||
pd = gen8_alloc_top_pd(&ppgtt->vm);
|
||||
if (IS_ERR(pd)) {
|
||||
err = PTR_ERR(pd);
|
||||
goto err_put;
|
||||
}
|
||||
ppgtt->pd = pd;
|
||||
|
||||
if (!i915_vm_is_4lvl(&ppgtt->vm)) {
|
||||
err = gen8_preallocate_top_level_pdp(ppgtt);
|
||||
if (err)
|
||||
goto err_put;
|
||||
}
|
||||
|
||||
if (intel_vgpu_active(gt->i915))
|
||||
gen8_ppgtt_notify_vgt(ppgtt, true);
|
||||
|
||||
ppgtt->vm.cleanup = gen8_ppgtt_cleanup;
|
||||
|
||||
return ppgtt;
|
||||
|
||||
err_free_pd:
|
||||
__gen8_ppgtt_cleanup(&ppgtt->vm, ppgtt->pd,
|
||||
gen8_pd_top_count(&ppgtt->vm), ppgtt->vm.top);
|
||||
err_free_scratch:
|
||||
free_scratch(&ppgtt->vm);
|
||||
err_free:
|
||||
kfree(ppgtt);
|
||||
err_put:
|
||||
i915_vm_put(&ppgtt->vm);
|
||||
return ERR_PTR(err);
|
||||
}
|
||||
|
@ -405,6 +405,9 @@ void free_scratch(struct i915_address_space *vm)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (!vm->scratch[0])
|
||||
return;
|
||||
|
||||
for (i = 0; i <= vm->top; i++)
|
||||
i915_gem_object_put(vm->scratch[i]);
|
||||
}
|
||||
|
@ -36,24 +36,6 @@ struct guc_log_section {
|
||||
const char *name;
|
||||
};
|
||||
|
||||
static s32 scale_log_param(struct intel_guc_log *log, const struct guc_log_section *section,
|
||||
s32 param)
|
||||
{
|
||||
/* -1 means default */
|
||||
if (param < 0)
|
||||
return section->default_val;
|
||||
|
||||
/* Check for 32-bit overflow */
|
||||
if (param >= SZ_4K) {
|
||||
drm_err(&guc_to_gt(log_to_guc(log))->i915->drm, "Size too large for GuC %s log: %dMB!",
|
||||
section->name, param);
|
||||
return section->default_val;
|
||||
}
|
||||
|
||||
/* Param units are 1MB */
|
||||
return param * SZ_1M;
|
||||
}
|
||||
|
||||
static void _guc_log_init_sizes(struct intel_guc_log *log)
|
||||
{
|
||||
struct intel_guc *guc = log_to_guc(log);
|
||||
@ -78,15 +60,10 @@ static void _guc_log_init_sizes(struct intel_guc_log *log)
|
||||
"capture",
|
||||
}
|
||||
};
|
||||
s32 params[GUC_LOG_SECTIONS_LIMIT] = {
|
||||
GUC_LOG_DEFAULT_CRASH_BUFFER_SIZE / SZ_1M,
|
||||
GUC_LOG_DEFAULT_DEBUG_BUFFER_SIZE / SZ_1M,
|
||||
GUC_LOG_DEFAULT_CAPTURE_BUFFER_SIZE / SZ_1M,
|
||||
};
|
||||
int i;
|
||||
|
||||
for (i = 0; i < GUC_LOG_SECTIONS_LIMIT; i++)
|
||||
log->sizes[i].bytes = scale_log_param(log, sections + i, params[i]);
|
||||
log->sizes[i].bytes = sections[i].default_val;
|
||||
|
||||
/* If debug size > 1MB then bump default crash size to keep the same units */
|
||||
if (log->sizes[GUC_LOG_SECTIONS_DEBUG].bytes >= SZ_1M &&
|
||||
|
@ -397,8 +397,6 @@ struct drm_i915_private {
|
||||
*/
|
||||
u8 snps_phy_failed_calibration;
|
||||
|
||||
bool ipc_enabled;
|
||||
|
||||
struct i915_pmu pmu;
|
||||
|
||||
struct i915_drm_clients clients;
|
||||
|
@ -41,6 +41,8 @@
|
||||
.__runtime.media.ip.ver = (x), \
|
||||
.__runtime.display.ip.ver = (x)
|
||||
|
||||
#define NO_DISPLAY .__runtime.pipe_mask = 0
|
||||
|
||||
#define I845_PIPE_OFFSETS \
|
||||
.display.pipe_offsets = { \
|
||||
[TRANSCODER_A] = PIPE_A_OFFSET, \
|
||||
@ -519,9 +521,8 @@ static const struct intel_device_info ivb_m_gt2_info = {
|
||||
static const struct intel_device_info ivb_q_info = {
|
||||
GEN7_FEATURES,
|
||||
PLATFORM(INTEL_IVYBRIDGE),
|
||||
NO_DISPLAY,
|
||||
.gt = 2,
|
||||
.__runtime.pipe_mask = 0, /* legal, last one wins */
|
||||
.__runtime.cpu_transcoder_mask = 0,
|
||||
.has_l3_dpf = 1,
|
||||
};
|
||||
|
||||
@ -1039,7 +1040,7 @@ static const struct intel_device_info xehpsdv_info = {
|
||||
XE_HPM_FEATURES,
|
||||
DGFX_FEATURES,
|
||||
PLATFORM(INTEL_XEHPSDV),
|
||||
.display = { },
|
||||
NO_DISPLAY,
|
||||
.has_64k_pages = 1,
|
||||
.needs_compact_pt = 1,
|
||||
.has_media_ratio_mode = 1,
|
||||
@ -1081,7 +1082,7 @@ static const struct intel_device_info dg2_info = {
|
||||
|
||||
static const struct intel_device_info ats_m_info = {
|
||||
DG2_FEATURES,
|
||||
.display = { 0 },
|
||||
NO_DISPLAY,
|
||||
.require_force_probe = 1,
|
||||
.tuning_thread_rr_after_dep = 1,
|
||||
};
|
||||
@ -1103,7 +1104,7 @@ static const struct intel_device_info pvc_info = {
|
||||
.__runtime.graphics.ip.rel = 60,
|
||||
.__runtime.media.ip.rel = 60,
|
||||
PLATFORM(INTEL_PONTEVECCHIO),
|
||||
.display = { 0 },
|
||||
NO_DISPLAY,
|
||||
.has_flat_ccs = 0,
|
||||
.__runtime.platform_engine_mask =
|
||||
BIT(BCS0) |
|
||||
|
@ -433,8 +433,14 @@ void intel_device_info_runtime_init(struct drm_i915_private *dev_priv)
|
||||
dev_priv->drm.driver_features &= ~(DRIVER_MODESET |
|
||||
DRIVER_ATOMIC);
|
||||
memset(&info->display, 0, sizeof(info->display));
|
||||
|
||||
runtime->cpu_transcoder_mask = 0;
|
||||
memset(runtime->num_sprites, 0, sizeof(runtime->num_sprites));
|
||||
memset(runtime->num_scalers, 0, sizeof(runtime->num_scalers));
|
||||
runtime->fbc_mask = 0;
|
||||
runtime->has_hdcp = false;
|
||||
runtime->has_dmc = false;
|
||||
runtime->has_dsc = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user