Skip to content

Commit b3d971e

Browse files
committed
Merge tag 'drm-fixes-2022-02-18' of git://anongit.freedesktop.org/drm/drm
Pull drm fixes from Dave Airlie: "Regular fixes for rc5, nothing really stands out, mostly some amdgpu and i915 fixes with mediatek, radeon and some misc fixes. cma-helper: - set VM_DONTEXPAND atomic: - error handling fix mediatek: - fix probe defer loop with external bridge amdgpu: - Stable pstate clock fixes for Dimgrey Cavefish and Beige Goby - S0ix SDMA fix - Yellow Carp GPU reset fix radeon: - Backlight fix for iMac 12,1 i915: - GVT kerneldoc cleanup. - GVT Kconfig should depend on X86 - Prevent out of range access in SWSCI display code - Fix mbus join and dbuf slice config lookup - Fix inverted priority selection in the TTM backend - Fix FBC plane end Y offset check" * tag 'drm-fixes-2022-02-18' of git://anongit.freedesktop.org/drm/drm: drm/atomic: Don't pollute crtc_state->mode_blob with error pointers drm/radeon: Fix backlight control on iMac 12,1 drm/amd/pm: correct the sequence of sending gpu reset msg drm/amdgpu: skipping SDMA hw_init and hw_fini for S0ix. drm/amd/pm: correct UMD pstate clocks for Dimgrey Cavefish and Beige Goby drm/i915/fbc: Fix the plane end Y offset check drm/i915/opregion: check port number bounds for SWSCI display power state drm/i915/ttm: tweak priority hint selection drm/i915: Fix mbus join config lookup drm/i915: Fix dbuf slice config lookup drm/cma-helper: Set VM_DONTEXPAND for mmap drm/mediatek: mtk_dsi: Avoid EPROBE_DEFER loop with external bridge drm/i915/gvt: Make DRM_I915_GVT depend on X86 drm/i915/gvt: clean up kernel-doc in gtt.c
2 parents 8b97cae + 5666b61 commit b3d971e

14 files changed

Lines changed: 158 additions & 111 deletions

File tree

drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2057,13 +2057,21 @@ static int sdma_v4_0_suspend(void *handle)
20572057
{
20582058
struct amdgpu_device *adev = (struct amdgpu_device *)handle;
20592059

2060+
/* SMU saves SDMA state for us */
2061+
if (adev->in_s0ix)
2062+
return 0;
2063+
20602064
return sdma_v4_0_hw_fini(adev);
20612065
}
20622066

20632067
static int sdma_v4_0_resume(void *handle)
20642068
{
20652069
struct amdgpu_device *adev = (struct amdgpu_device *)handle;
20662070

2071+
/* SMU restores SDMA state for us */
2072+
if (adev->in_s0ix)
2073+
return 0;
2074+
20672075
return sdma_v4_0_hw_init(adev);
20682076
}
20692077

drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1238,21 +1238,37 @@ static int sienna_cichlid_populate_umd_state_clk(struct smu_context *smu)
12381238
&dpm_context->dpm_tables.soc_table;
12391239
struct smu_umd_pstate_table *pstate_table =
12401240
&smu->pstate_table;
1241+
struct amdgpu_device *adev = smu->adev;
12411242

12421243
pstate_table->gfxclk_pstate.min = gfx_table->min;
12431244
pstate_table->gfxclk_pstate.peak = gfx_table->max;
1244-
if (gfx_table->max >= SIENNA_CICHLID_UMD_PSTATE_PROFILING_GFXCLK)
1245-
pstate_table->gfxclk_pstate.standard = SIENNA_CICHLID_UMD_PSTATE_PROFILING_GFXCLK;
12461245

12471246
pstate_table->uclk_pstate.min = mem_table->min;
12481247
pstate_table->uclk_pstate.peak = mem_table->max;
1249-
if (mem_table->max >= SIENNA_CICHLID_UMD_PSTATE_PROFILING_MEMCLK)
1250-
pstate_table->uclk_pstate.standard = SIENNA_CICHLID_UMD_PSTATE_PROFILING_MEMCLK;
12511248

12521249
pstate_table->socclk_pstate.min = soc_table->min;
12531250
pstate_table->socclk_pstate.peak = soc_table->max;
1254-
if (soc_table->max >= SIENNA_CICHLID_UMD_PSTATE_PROFILING_SOCCLK)
1251+
1252+
switch (adev->asic_type) {
1253+
case CHIP_SIENNA_CICHLID:
1254+
case CHIP_NAVY_FLOUNDER:
1255+
pstate_table->gfxclk_pstate.standard = SIENNA_CICHLID_UMD_PSTATE_PROFILING_GFXCLK;
1256+
pstate_table->uclk_pstate.standard = SIENNA_CICHLID_UMD_PSTATE_PROFILING_MEMCLK;
12551257
pstate_table->socclk_pstate.standard = SIENNA_CICHLID_UMD_PSTATE_PROFILING_SOCCLK;
1258+
break;
1259+
case CHIP_DIMGREY_CAVEFISH:
1260+
pstate_table->gfxclk_pstate.standard = DIMGREY_CAVEFISH_UMD_PSTATE_PROFILING_GFXCLK;
1261+
pstate_table->uclk_pstate.standard = DIMGREY_CAVEFISH_UMD_PSTATE_PROFILING_MEMCLK;
1262+
pstate_table->socclk_pstate.standard = DIMGREY_CAVEFISH_UMD_PSTATE_PROFILING_SOCCLK;
1263+
break;
1264+
case CHIP_BEIGE_GOBY:
1265+
pstate_table->gfxclk_pstate.standard = BEIGE_GOBY_UMD_PSTATE_PROFILING_GFXCLK;
1266+
pstate_table->uclk_pstate.standard = BEIGE_GOBY_UMD_PSTATE_PROFILING_MEMCLK;
1267+
pstate_table->socclk_pstate.standard = BEIGE_GOBY_UMD_PSTATE_PROFILING_SOCCLK;
1268+
break;
1269+
default:
1270+
break;
1271+
}
12561272

12571273
return 0;
12581274
}

drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,14 @@ typedef enum {
3333
#define SIENNA_CICHLID_UMD_PSTATE_PROFILING_SOCCLK 960
3434
#define SIENNA_CICHLID_UMD_PSTATE_PROFILING_MEMCLK 1000
3535

36+
#define DIMGREY_CAVEFISH_UMD_PSTATE_PROFILING_GFXCLK 1950
37+
#define DIMGREY_CAVEFISH_UMD_PSTATE_PROFILING_SOCCLK 960
38+
#define DIMGREY_CAVEFISH_UMD_PSTATE_PROFILING_MEMCLK 676
39+
40+
#define BEIGE_GOBY_UMD_PSTATE_PROFILING_GFXCLK 2200
41+
#define BEIGE_GOBY_UMD_PSTATE_PROFILING_SOCCLK 960
42+
#define BEIGE_GOBY_UMD_PSTATE_PROFILING_MEMCLK 1000
43+
3644
extern void sienna_cichlid_set_ppt_funcs(struct smu_context *smu);
3745

3846
#endif

drivers/gpu/drm/amd/pm/swsmu/smu13/yellow_carp_ppt.c

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -282,14 +282,9 @@ static int yellow_carp_post_smu_init(struct smu_context *smu)
282282

283283
static int yellow_carp_mode_reset(struct smu_context *smu, int type)
284284
{
285-
int ret = 0, index = 0;
286-
287-
index = smu_cmn_to_asic_specific_index(smu, CMN2ASIC_MAPPING_MSG,
288-
SMU_MSG_GfxDeviceDriverReset);
289-
if (index < 0)
290-
return index == -EACCES ? 0 : index;
285+
int ret = 0;
291286

292-
ret = smu_cmn_send_smc_msg_with_param(smu, (uint16_t)index, type, NULL);
287+
ret = smu_cmn_send_smc_msg_with_param(smu, SMU_MSG_GfxDeviceDriverReset, type, NULL);
293288
if (ret)
294289
dev_err(smu->adev->dev, "Failed to mode reset!\n");
295290

drivers/gpu/drm/drm_atomic_uapi.c

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -76,15 +76,17 @@ int drm_atomic_set_mode_for_crtc(struct drm_crtc_state *state,
7676
state->mode_blob = NULL;
7777

7878
if (mode) {
79+
struct drm_property_blob *blob;
80+
7981
drm_mode_convert_to_umode(&umode, mode);
80-
state->mode_blob =
81-
drm_property_create_blob(state->crtc->dev,
82-
sizeof(umode),
83-
&umode);
84-
if (IS_ERR(state->mode_blob))
85-
return PTR_ERR(state->mode_blob);
82+
blob = drm_property_create_blob(crtc->dev,
83+
sizeof(umode), &umode);
84+
if (IS_ERR(blob))
85+
return PTR_ERR(blob);
8686

8787
drm_mode_copy(&state->mode, mode);
88+
89+
state->mode_blob = blob;
8890
state->enable = true;
8991
drm_dbg_atomic(crtc->dev,
9092
"Set [MODE:%s] for [CRTC:%d:%s] state %p\n",

drivers/gpu/drm/drm_gem_cma_helper.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -512,6 +512,7 @@ int drm_gem_cma_mmap(struct drm_gem_cma_object *cma_obj, struct vm_area_struct *
512512
*/
513513
vma->vm_pgoff -= drm_vma_node_start(&obj->vma_node);
514514
vma->vm_flags &= ~VM_PFNMAP;
515+
vma->vm_flags |= VM_DONTEXPAND;
515516

516517
if (cma_obj->map_noncoherent) {
517518
vma->vm_page_prot = vm_get_page_prot(vma->vm_flags);

drivers/gpu/drm/i915/Kconfig

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ config DRM_I915_USERPTR
101101
config DRM_I915_GVT
102102
bool "Enable Intel GVT-g graphics virtualization host support"
103103
depends on DRM_I915
104+
depends on X86
104105
depends on 64BIT
105106
default n
106107
help

drivers/gpu/drm/i915/display/intel_fbc.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1115,7 +1115,8 @@ static int intel_fbc_check_plane(struct intel_atomic_state *state,
11151115

11161116
/* Wa_22010751166: icl, ehl, tgl, dg1, rkl */
11171117
if (DISPLAY_VER(i915) >= 11 &&
1118-
(plane_state->view.color_plane[0].y + drm_rect_height(&plane_state->uapi.src)) & 3) {
1118+
(plane_state->view.color_plane[0].y +
1119+
(drm_rect_height(&plane_state->uapi.src) >> 16)) & 3) {
11191120
plane_state->no_fbc_reason = "plane end Y offset misaligned";
11201121
return false;
11211122
}

drivers/gpu/drm/i915/display/intel_opregion.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -360,6 +360,21 @@ int intel_opregion_notify_encoder(struct intel_encoder *intel_encoder,
360360
port++;
361361
}
362362

363+
/*
364+
* The port numbering and mapping here is bizarre. The now-obsolete
365+
* swsci spec supports ports numbered [0..4]. Port E is handled as a
366+
* special case, but port F and beyond are not. The functionality is
367+
* supposed to be obsolete for new platforms. Just bail out if the port
368+
* number is out of bounds after mapping.
369+
*/
370+
if (port > 4) {
371+
drm_dbg_kms(&dev_priv->drm,
372+
"[ENCODER:%d:%s] port %c (index %u) out of bounds for display power state notification\n",
373+
intel_encoder->base.base.id, intel_encoder->base.name,
374+
port_name(intel_encoder->port), port);
375+
return -EINVAL;
376+
}
377+
363378
if (!enable)
364379
parm |= 4 << 8;
365380

drivers/gpu/drm/i915/gem/i915_gem_ttm.c

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -842,11 +842,9 @@ void i915_ttm_adjust_lru(struct drm_i915_gem_object *obj)
842842
} else if (obj->mm.madv != I915_MADV_WILLNEED) {
843843
bo->priority = I915_TTM_PRIO_PURGE;
844844
} else if (!i915_gem_object_has_pages(obj)) {
845-
if (bo->priority < I915_TTM_PRIO_HAS_PAGES)
846-
bo->priority = I915_TTM_PRIO_HAS_PAGES;
845+
bo->priority = I915_TTM_PRIO_NO_PAGES;
847846
} else {
848-
if (bo->priority > I915_TTM_PRIO_NO_PAGES)
849-
bo->priority = I915_TTM_PRIO_NO_PAGES;
847+
bo->priority = I915_TTM_PRIO_HAS_PAGES;
850848
}
851849

852850
ttm_bo_move_to_lru_tail(bo, bo->resource, NULL);

0 commit comments

Comments
 (0)