Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'drm-misc-fixes-2019-10-17' of git://anongit.freedesktop.org/drm/drm-misc into drm-fixes

-dma-resv: Change shared_count to post-increment to fix lima crash (Qiang)
-ttm: A couple fixes related to lifetime and restore prefault behavior
(Christian & Thomas)
-panfrost: Fill in missing feature reg values and fix stoppedjob timeouts
(Steven)

Cc: Qiang Yu <yuq825@gmail.com>
Cc: Thomas Hellstrom <thellstrom@vmware.com>
Cc: Christian König <christian.koenig@amd.com>
Cc: Steven Price <steven.price@arm.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>

From: Sean Paul <sean@poorly.run>
Link: https://patchwork.freedesktop.org/patch/msgid/20191017203419.GA142909@art_vandelay

+34 -22
+1 -1
drivers/dma-buf/dma-resv.c
··· 471 471 if (pfence_excl) 472 472 *pfence_excl = fence_excl; 473 473 else if (fence_excl) 474 - shared[++shared_count] = fence_excl; 474 + shared[shared_count++] = fence_excl; 475 475 476 476 if (!shared_count) { 477 477 kfree(shared);
+3
drivers/gpu/drm/drm_edid.c
··· 159 159 /* Medion MD 30217 PG */ 160 160 { "MED", 0x7b8, EDID_QUIRK_PREFER_LARGE_75 }, 161 161 162 + /* Lenovo G50 */ 163 + { "SDC", 18514, EDID_QUIRK_FORCE_6BPC }, 164 + 162 165 /* Panel in Samsung NP700G7A-S01PL notebook reports 6bpc */ 163 166 { "SEC", 0xd033, EDID_QUIRK_FORCE_8BPC }, 164 167
+4 -2
drivers/gpu/drm/msm/dsi/dsi_host.c
··· 26 26 #include "dsi_cfg.h" 27 27 #include "msm_kms.h" 28 28 29 + #define DSI_RESET_TOGGLE_DELAY_MS 20 30 + 29 31 static int dsi_get_version(const void __iomem *base, u32 *major, u32 *minor) 30 32 { 31 33 u32 ver; ··· 988 986 wmb(); /* clocks need to be enabled before reset */ 989 987 990 988 dsi_write(msm_host, REG_DSI_RESET, 1); 991 - wmb(); /* make sure reset happen */ 989 + msleep(DSI_RESET_TOGGLE_DELAY_MS); /* make sure reset happen */ 992 990 dsi_write(msm_host, REG_DSI_RESET, 0); 993 991 } 994 992 ··· 1398 1396 1399 1397 /* dsi controller can only be reset while clocks are running */ 1400 1398 dsi_write(msm_host, REG_DSI_RESET, 1); 1401 - wmb(); /* make sure reset happen */ 1399 + msleep(DSI_RESET_TOGGLE_DELAY_MS); /* make sure reset happen */ 1402 1400 dsi_write(msm_host, REG_DSI_RESET, 0); 1403 1401 wmb(); /* controller out of reset */ 1404 1402 dsi_write(msm_host, REG_DSI_CTRL, data0);
+3
drivers/gpu/drm/panfrost/panfrost_gpu.c
··· 208 208 pfdev->features.mem_features = gpu_read(pfdev, GPU_MEM_FEATURES); 209 209 pfdev->features.mmu_features = gpu_read(pfdev, GPU_MMU_FEATURES); 210 210 pfdev->features.thread_features = gpu_read(pfdev, GPU_THREAD_FEATURES); 211 + pfdev->features.max_threads = gpu_read(pfdev, GPU_THREAD_MAX_THREADS); 212 + pfdev->features.thread_max_workgroup_sz = gpu_read(pfdev, GPU_THREAD_MAX_WORKGROUP_SIZE); 213 + pfdev->features.thread_max_barrier_sz = gpu_read(pfdev, GPU_THREAD_MAX_BARRIER_SIZE); 211 214 pfdev->features.coherency_features = gpu_read(pfdev, GPU_COHERENCY_FEATURES); 212 215 for (i = 0; i < 4; i++) 213 216 pfdev->features.texture_features[i] = gpu_read(pfdev, GPU_TEXTURE_FEATURES(i));
+11 -5
drivers/gpu/drm/panfrost/panfrost_job.c
··· 381 381 job_read(pfdev, JS_TAIL_LO(js)), 382 382 sched_job); 383 383 384 - mutex_lock(&pfdev->reset_lock); 384 + if (!mutex_trylock(&pfdev->reset_lock)) 385 + return; 385 386 386 - for (i = 0; i < NUM_JOB_SLOTS; i++) 387 - drm_sched_stop(&pfdev->js->queue[i].sched, sched_job); 387 + for (i = 0; i < NUM_JOB_SLOTS; i++) { 388 + struct drm_gpu_scheduler *sched = &pfdev->js->queue[i].sched; 388 389 389 - if (sched_job) 390 - drm_sched_increase_karma(sched_job); 390 + drm_sched_stop(sched, sched_job); 391 + if (js != i) 392 + /* Ensure any timeouts on other slots have finished */ 393 + cancel_delayed_work_sync(&sched->work_tdr); 394 + } 395 + 396 + drm_sched_increase_karma(sched_job); 391 397 392 398 spin_lock_irqsave(&pfdev->js->job_lock, flags); 393 399 for (i = 0; i < NUM_JOB_SLOTS; i++) {
-1
drivers/gpu/drm/tiny/Kconfig
··· 63 63 depends on DRM && SPI 64 64 select DRM_KMS_HELPER 65 65 select DRM_KMS_CMA_HELPER 66 - depends on THERMAL || !THERMAL 67 66 help 68 67 DRM driver for the following Pervasive Displays panels: 69 68 1.44" TFT EPD Panel (E1144CS021)
+5 -4
drivers/gpu/drm/ttm/ttm_bo.c
··· 185 185 list_add_tail(&bo->lru, &man->lru[bo->priority]); 186 186 kref_get(&bo->list_kref); 187 187 188 - if (bo->ttm && !(bo->ttm->page_flags & 189 - (TTM_PAGE_FLAG_SG | TTM_PAGE_FLAG_SWAPPED))) { 188 + if (!(man->flags & TTM_MEMTYPE_FLAG_FIXED) && bo->ttm && 189 + !(bo->ttm->page_flags & (TTM_PAGE_FLAG_SG | 190 + TTM_PAGE_FLAG_SWAPPED))) { 190 191 list_add_tail(&bo->swap, &bdev->glob->swap_lru[bo->priority]); 191 192 kref_get(&bo->list_kref); 192 193 } ··· 879 878 880 879 if (!bo) { 881 880 if (busy_bo) 882 - ttm_bo_get(busy_bo); 881 + kref_get(&busy_bo->list_kref); 883 882 spin_unlock(&glob->lru_lock); 884 883 ret = ttm_mem_evict_wait_busy(busy_bo, ctx, ticket); 885 884 if (busy_bo) 886 - ttm_bo_put(busy_bo); 885 + kref_put(&busy_bo->list_kref, ttm_bo_release_list); 887 886 return ret; 888 887 } 889 888
+7 -9
drivers/gpu/drm/ttm/ttm_bo_vm.c
··· 278 278 else 279 279 ret = vmf_insert_pfn(&cvma, address, pfn); 280 280 281 - /* 282 - * Somebody beat us to this PTE or prefaulting to 283 - * an already populated PTE, or prefaulting error. 284 - */ 285 - 286 - if (unlikely((ret == VM_FAULT_NOPAGE && i > 0))) 287 - break; 288 - else if (unlikely(ret & VM_FAULT_ERROR)) 289 - goto out_io_unlock; 281 + /* Never error on prefaulted PTEs */ 282 + if (unlikely((ret & VM_FAULT_ERROR))) { 283 + if (i == 0) 284 + goto out_io_unlock; 285 + else 286 + break; 287 + } 290 288 291 289 address += PAGE_SIZE; 292 290 if (unlikely(++page_offset >= page_last))