Merge remote branch 'intel/drm-intel-fixes' of ../drm-next into drm-core-next

* 'intel/drm-intel-fixes' of ../drm-next:
Revert "drm/i915: Don't save/restore hardware status page address register"
drm/i915: Avoid unmapping pages from a NULL address space
drm/i915: Fix use after free within tracepoint
drm/i915: Restore missing command flush before interrupt on BLT ring
drm/i915: Disable pagefaults along execbuffer relocation fast path
drm/i915: Fix computation of pitch for dumb bo creator
drm/i915: report correct render clock frequencies on SNB
drm/i915/dp: Correct the order of deletion for ghost eDP devices
drm/i915: Fix tiling corruption from pipelined fencing
drm/i915: Re-enable self-refresh
drm/i915: Prevent racy removal of request from client list
drm/i915: skip redundant operations whilst enabling pipes and planes
drm/i915: Remove surplus POSTING_READs before wait_for_vblank

+132 -128
+4 -4
drivers/gpu/drm/i915/i915_debugfs.c
··· 892 892 seq_printf(m, "Render p-state limit: %d\n", 893 893 rp_state_limits & 0xff); 894 894 seq_printf(m, "CAGF: %dMHz\n", ((rpstat & GEN6_CAGF_MASK) >> 895 - GEN6_CAGF_SHIFT) * 100); 895 + GEN6_CAGF_SHIFT) * 50); 896 896 seq_printf(m, "RP CUR UP EI: %dus\n", rpupei & 897 897 GEN6_CURICONT_MASK); 898 898 seq_printf(m, "RP CUR UP: %dus\n", rpcurup & ··· 908 908 909 909 max_freq = (rp_state_cap & 0xff0000) >> 16; 910 910 seq_printf(m, "Lowest (RPN) frequency: %dMHz\n", 911 - max_freq * 100); 911 + max_freq * 50); 912 912 913 913 max_freq = (rp_state_cap & 0xff00) >> 8; 914 914 seq_printf(m, "Nominal (RP1) frequency: %dMHz\n", 915 - max_freq * 100); 915 + max_freq * 50); 916 916 917 917 max_freq = rp_state_cap & 0xff; 918 918 seq_printf(m, "Max non-overclocked (RP0) frequency: %dMHz\n", 919 - max_freq * 100); 919 + max_freq * 50); 920 920 921 921 __gen6_gt_force_wake_put(dev_priv); 922 922 } else {
+1
drivers/gpu/drm/i915/i915_drv.h
··· 383 383 u32 saveDSPACNTR; 384 384 u32 saveDSPBCNTR; 385 385 u32 saveDSPARB; 386 + u32 saveHWS; 386 387 u32 savePIPEACONF; 387 388 u32 savePIPEBCONF; 388 389 u32 savePIPEASRC;
+34 -36
drivers/gpu/drm/i915/i915_gem.c
··· 224 224 struct drm_mode_create_dumb *args) 225 225 { 226 226 /* have to work out size/pitch and return them */ 227 - args->pitch = ALIGN(args->width & ((args->bpp + 1) / 8), 64); 227 + args->pitch = ALIGN(args->width * ((args->bpp + 7) / 8), 64); 228 228 args->size = args->pitch * args->height; 229 229 return i915_gem_create(file, dev, 230 230 args->size, &args->handle); ··· 1356 1356 if (!obj->fault_mappable) 1357 1357 return; 1358 1358 1359 - unmap_mapping_range(obj->base.dev->dev_mapping, 1360 - (loff_t)obj->base.map_list.hash.key<<PAGE_SHIFT, 1361 - obj->base.size, 1); 1359 + if (obj->base.dev->dev_mapping) 1360 + unmap_mapping_range(obj->base.dev->dev_mapping, 1361 + (loff_t)obj->base.map_list.hash.key<<PAGE_SHIFT, 1362 + obj->base.size, 1); 1362 1363 1363 1364 obj->fault_mappable = false; 1364 1365 } ··· 1797 1796 return; 1798 1797 1799 1798 spin_lock(&file_priv->mm.lock); 1800 - list_del(&request->client_list); 1801 - request->file_priv = NULL; 1799 + if (request->file_priv) { 1800 + list_del(&request->client_list); 1801 + request->file_priv = NULL; 1802 + } 1802 1803 spin_unlock(&file_priv->mm.lock); 1803 1804 } 1804 1805 ··· 2220 2217 { 2221 2218 int ret; 2222 2219 2220 + if (((invalidate_domains | flush_domains) & I915_GEM_GPU_DOMAINS) == 0) 2221 + return 0; 2222 + 2223 2223 trace_i915_gem_ring_flush(ring, invalidate_domains, flush_domains); 2224 2224 2225 2225 ret = ring->flush(ring, invalidate_domains, flush_domains); 2226 2226 if (ret) 2227 2227 return ret; 2228 2228 2229 - i915_gem_process_flushing_list(ring, flush_domains); 2229 + if (flush_domains & I915_GEM_GPU_DOMAINS) 2230 + i915_gem_process_flushing_list(ring, flush_domains); 2231 + 2230 2232 return 0; 2231 2233 } 2232 2234 ··· 2587 2579 reg = &dev_priv->fence_regs[obj->fence_reg]; 2588 2580 list_move_tail(&reg->lru_list, &dev_priv->mm.fence_list); 2589 2581 2590 - if (!obj->fenced_gpu_access && !obj->last_fenced_seqno) 2591 - pipelined = NULL; 2582 + if (obj->tiling_changed) { 2583 + ret = i915_gem_object_flush_fence(obj, pipelined); 2584 + if (ret) 2585 + return ret; 2586 + 2587 + if (!obj->fenced_gpu_access && !obj->last_fenced_seqno) 2588 + pipelined = NULL; 2589 + 2590 + if (pipelined) { 2591 + reg->setup_seqno = 2592 + i915_gem_next_request_seqno(pipelined); 2593 + obj->last_fenced_seqno = reg->setup_seqno; 2594 + obj->last_fenced_ring = pipelined; 2595 + } 2596 + 2597 + goto update; 2598 + } 2592 2599 2593 2600 if (!pipelined) { 2594 2601 if (reg->setup_seqno) { ··· 2622 2599 ret = i915_gem_object_flush_fence(obj, pipelined); 2623 2600 if (ret) 2624 2601 return ret; 2625 - } else if (obj->tiling_changed) { 2626 - if (obj->fenced_gpu_access) { 2627 - if (obj->base.write_domain & I915_GEM_GPU_DOMAINS) { 2628 - ret = i915_gem_flush_ring(obj->ring, 2629 - 0, obj->base.write_domain); 2630 - if (ret) 2631 - return ret; 2632 - } 2633 - 2634 - obj->fenced_gpu_access = false; 2635 - } 2636 - } 2637 - 2638 - if (!obj->fenced_gpu_access && !obj->last_fenced_seqno) 2639 - pipelined = NULL; 2640 - BUG_ON(!pipelined && reg->setup_seqno); 2641 - 2642 - if (obj->tiling_changed) { 2643 - if (pipelined) { 2644 - reg->setup_seqno = 2645 - i915_gem_next_request_seqno(pipelined); 2646 - obj->last_fenced_seqno = reg->setup_seqno; 2647 - obj->last_fenced_ring = pipelined; 2648 - } 2649 - goto update; 2650 2602 } 2651 2603 2652 2604 return 0; ··· 3604 3606 return; 3605 3607 } 3606 3608 3609 + trace_i915_gem_object_destroy(obj); 3610 + 3607 3611 if (obj->base.map_list.map) 3608 3612 i915_gem_free_mmap_offset(obj); 3609 3613 ··· 3615 3615 kfree(obj->page_cpu_valid); 3616 3616 kfree(obj->bit_17); 3617 3617 kfree(obj); 3618 - 3619 - trace_i915_gem_object_destroy(obj); 3620 3618 } 3621 3619 3622 3620 void i915_gem_free_object(struct drm_gem_object *gem_obj)
+16 -3
drivers/gpu/drm/i915/i915_gem_execbuffer.c
··· 367 367 uint32_t __iomem *reloc_entry; 368 368 void __iomem *reloc_page; 369 369 370 + /* We can't wait for rendering with pagefaults disabled */ 371 + if (obj->active && in_atomic()) 372 + return -EFAULT; 373 + 370 374 ret = i915_gem_object_set_to_gtt_domain(obj, 1); 371 375 if (ret) 372 376 return ret; ··· 444 440 struct list_head *objects) 445 441 { 446 442 struct drm_i915_gem_object *obj; 447 - int ret; 443 + int ret = 0; 448 444 445 + /* This is the fast path and we cannot handle a pagefault whilst 446 + * holding the struct mutex lest the user pass in the relocations 447 + * contained within a mmaped bo. For in such a case we, the page 448 + * fault handler would call i915_gem_fault() and we would try to 449 + * acquire the struct mutex again. Obviously this is bad and so 450 + * lockdep complains vehemently. 451 + */ 452 + pagefault_disable(); 449 453 list_for_each_entry(obj, objects, exec_list) { 450 454 ret = i915_gem_execbuffer_relocate_object(obj, eb); 451 455 if (ret) 452 - return ret; 456 + break; 453 457 } 458 + pagefault_enable(); 454 459 455 - return 0; 460 + return ret; 456 461 } 457 462 458 463 static int
+6
drivers/gpu/drm/i915/i915_suspend.c
··· 796 796 797 797 pci_read_config_byte(dev->pdev, LBB, &dev_priv->saveLBB); 798 798 799 + /* Hardware status page */ 800 + dev_priv->saveHWS = I915_READ(HWS_PGA); 801 + 799 802 i915_save_display(dev); 800 803 801 804 /* Interrupt state */ ··· 844 841 int i; 845 842 846 843 pci_write_config_byte(dev->pdev, LBB, dev_priv->saveLBB); 844 + 845 + /* Hardware status page */ 846 + I915_WRITE(HWS_PGA, dev_priv->saveHWS); 847 847 848 848 i915_restore_display(dev); 849 849
+18 -21
drivers/gpu/drm/i915/intel_display.c
··· 1516 1516 1517 1517 reg = PIPECONF(pipe); 1518 1518 val = I915_READ(reg); 1519 - val |= PIPECONF_ENABLE; 1520 - I915_WRITE(reg, val); 1521 - POSTING_READ(reg); 1519 + if (val & PIPECONF_ENABLE) 1520 + return; 1521 + 1522 + I915_WRITE(reg, val | PIPECONF_ENABLE); 1522 1523 intel_wait_for_vblank(dev_priv->dev, pipe); 1523 1524 } 1524 1525 ··· 1553 1552 1554 1553 reg = PIPECONF(pipe); 1555 1554 val = I915_READ(reg); 1556 - val &= ~PIPECONF_ENABLE; 1557 - I915_WRITE(reg, val); 1558 - POSTING_READ(reg); 1555 + if ((val & PIPECONF_ENABLE) == 0) 1556 + return; 1557 + 1558 + I915_WRITE(reg, val & ~PIPECONF_ENABLE); 1559 1559 intel_wait_for_pipe_off(dev_priv->dev, pipe); 1560 1560 } 1561 1561 ··· 1579 1577 1580 1578 reg = DSPCNTR(plane); 1581 1579 val = I915_READ(reg); 1582 - val |= DISPLAY_PLANE_ENABLE; 1583 - I915_WRITE(reg, val); 1584 - POSTING_READ(reg); 1580 + if (val & DISPLAY_PLANE_ENABLE) 1581 + return; 1582 + 1583 + I915_WRITE(reg, val | DISPLAY_PLANE_ENABLE); 1585 1584 intel_wait_for_vblank(dev_priv->dev, pipe); 1586 1585 } 1587 1586 ··· 1613 1610 1614 1611 reg = DSPCNTR(plane); 1615 1612 val = I915_READ(reg); 1616 - val &= ~DISPLAY_PLANE_ENABLE; 1617 - I915_WRITE(reg, val); 1618 - POSTING_READ(reg); 1613 + if ((val & DISPLAY_PLANE_ENABLE) == 0) 1614 + return; 1615 + 1616 + I915_WRITE(reg, val & ~DISPLAY_PLANE_ENABLE); 1619 1617 intel_flush_display_plane(dev_priv, plane); 1620 1618 intel_wait_for_vblank(dev_priv->dev, pipe); 1621 1619 } ··· 1773 1769 return; 1774 1770 1775 1771 I915_WRITE(DPFC_CONTROL, dpfc_ctl & ~DPFC_CTL_EN); 1776 - POSTING_READ(DPFC_CONTROL); 1777 1772 intel_wait_for_vblank(dev, intel_crtc->pipe); 1778 1773 } 1779 1774 ··· 1864 1861 return; 1865 1862 1866 1863 I915_WRITE(ILK_DPFC_CONTROL, dpfc_ctl & ~DPFC_CTL_EN); 1867 - POSTING_READ(ILK_DPFC_CONTROL); 1868 1864 intel_wait_for_vblank(dev, intel_crtc->pipe); 1869 1865 } 1870 1866 ··· 3885 3883 display, cursor); 3886 3884 } 3887 3885 3888 - static inline bool single_plane_enabled(unsigned int mask) 3889 - { 3890 - return mask && (mask & -mask) == 0; 3891 - } 3886 + #define single_plane_enabled(mask) is_power_of_2(mask) 3892 3887 3893 3888 static void g4x_update_wm(struct drm_device *dev) 3894 3889 { ··· 5776 5777 5777 5778 dpll &= ~DISPLAY_RATE_SELECT_FPA1; 5778 5779 I915_WRITE(dpll_reg, dpll); 5779 - POSTING_READ(dpll_reg); 5780 5780 intel_wait_for_vblank(dev, pipe); 5781 5781 5782 5782 dpll = I915_READ(dpll_reg); ··· 5819 5821 5820 5822 dpll |= DISPLAY_RATE_SELECT_FPA1; 5821 5823 I915_WRITE(dpll_reg, dpll); 5822 - dpll = I915_READ(dpll_reg); 5823 5824 intel_wait_for_vblank(dev, pipe); 5824 5825 dpll = I915_READ(dpll_reg); 5825 5826 if (!(dpll & DISPLAY_RATE_SELECT_FPA1)) ··· 6930 6933 DRM_ERROR("timeout waiting for pcode mailbox to finish\n"); 6931 6934 if (pcu_mbox & (1<<31)) { /* OC supported */ 6932 6935 max_freq = pcu_mbox & 0xff; 6933 - DRM_DEBUG_DRIVER("overclocking supported, adjusting frequency max to %dMHz\n", pcu_mbox * 100); 6936 + DRM_DEBUG_DRIVER("overclocking supported, adjusting frequency max to %dMHz\n", pcu_mbox * 50); 6934 6937 } 6935 6938 6936 6939 /* In units of 100MHz */
+2 -2
drivers/gpu/drm/i915/intel_dp.c
··· 1957 1957 DP_NO_AUX_HANDSHAKE_LINK_TRAINING; 1958 1958 } else { 1959 1959 /* if this fails, presume the device is a ghost */ 1960 - DRM_ERROR("failed to retrieve link info\n"); 1961 - intel_dp_destroy(&intel_connector->base); 1960 + DRM_INFO("failed to retrieve link info, disabling eDP\n"); 1962 1961 intel_dp_encoder_destroy(&intel_dp->base.base); 1962 + intel_dp_destroy(&intel_connector->base); 1963 1963 return; 1964 1964 } 1965 1965 }
+51 -62
drivers/gpu/drm/i915/intel_ringbuffer.c
··· 65 65 u32 cmd; 66 66 int ret; 67 67 68 - if ((invalidate_domains | flush_domains) & I915_GEM_GPU_DOMAINS) { 68 + /* 69 + * read/write caches: 70 + * 71 + * I915_GEM_DOMAIN_RENDER is always invalidated, but is 72 + * only flushed if MI_NO_WRITE_FLUSH is unset. On 965, it is 73 + * also flushed at 2d versus 3d pipeline switches. 74 + * 75 + * read-only caches: 76 + * 77 + * I915_GEM_DOMAIN_SAMPLER is flushed on pre-965 if 78 + * MI_READ_FLUSH is set, and is always flushed on 965. 79 + * 80 + * I915_GEM_DOMAIN_COMMAND may not exist? 81 + * 82 + * I915_GEM_DOMAIN_INSTRUCTION, which exists on 965, is 83 + * invalidated when MI_EXE_FLUSH is set. 84 + * 85 + * I915_GEM_DOMAIN_VERTEX, which exists on 965, is 86 + * invalidated with every MI_FLUSH. 87 + * 88 + * TLBs: 89 + * 90 + * On 965, TLBs associated with I915_GEM_DOMAIN_COMMAND 91 + * and I915_GEM_DOMAIN_CPU in are invalidated at PTE write and 92 + * I915_GEM_DOMAIN_RENDER and I915_GEM_DOMAIN_SAMPLER 93 + * are flushed at any MI_FLUSH. 94 + */ 95 + 96 + cmd = MI_FLUSH | MI_NO_WRITE_FLUSH; 97 + if ((invalidate_domains|flush_domains) & 98 + I915_GEM_DOMAIN_RENDER) 99 + cmd &= ~MI_NO_WRITE_FLUSH; 100 + if (INTEL_INFO(dev)->gen < 4) { 69 101 /* 70 - * read/write caches: 71 - * 72 - * I915_GEM_DOMAIN_RENDER is always invalidated, but is 73 - * only flushed if MI_NO_WRITE_FLUSH is unset. On 965, it is 74 - * also flushed at 2d versus 3d pipeline switches. 75 - * 76 - * read-only caches: 77 - * 78 - * I915_GEM_DOMAIN_SAMPLER is flushed on pre-965 if 79 - * MI_READ_FLUSH is set, and is always flushed on 965. 80 - * 81 - * I915_GEM_DOMAIN_COMMAND may not exist? 82 - * 83 - * I915_GEM_DOMAIN_INSTRUCTION, which exists on 965, is 84 - * invalidated when MI_EXE_FLUSH is set. 85 - * 86 - * I915_GEM_DOMAIN_VERTEX, which exists on 965, is 87 - * invalidated with every MI_FLUSH. 88 - * 89 - * TLBs: 90 - * 91 - * On 965, TLBs associated with I915_GEM_DOMAIN_COMMAND 92 - * and I915_GEM_DOMAIN_CPU in are invalidated at PTE write and 93 - * I915_GEM_DOMAIN_RENDER and I915_GEM_DOMAIN_SAMPLER 94 - * are flushed at any MI_FLUSH. 102 + * On the 965, the sampler cache always gets flushed 103 + * and this bit is reserved. 95 104 */ 96 - 97 - cmd = MI_FLUSH | MI_NO_WRITE_FLUSH; 98 - if ((invalidate_domains|flush_domains) & 99 - I915_GEM_DOMAIN_RENDER) 100 - cmd &= ~MI_NO_WRITE_FLUSH; 101 - if (INTEL_INFO(dev)->gen < 4) { 102 - /* 103 - * On the 965, the sampler cache always gets flushed 104 - * and this bit is reserved. 105 - */ 106 - if (invalidate_domains & I915_GEM_DOMAIN_SAMPLER) 107 - cmd |= MI_READ_FLUSH; 108 - } 109 - if (invalidate_domains & I915_GEM_DOMAIN_INSTRUCTION) 110 - cmd |= MI_EXE_FLUSH; 111 - 112 - if (invalidate_domains & I915_GEM_DOMAIN_COMMAND && 113 - (IS_G4X(dev) || IS_GEN5(dev))) 114 - cmd |= MI_INVALIDATE_ISP; 115 - 116 - ret = intel_ring_begin(ring, 2); 117 - if (ret) 118 - return ret; 119 - 120 - intel_ring_emit(ring, cmd); 121 - intel_ring_emit(ring, MI_NOOP); 122 - intel_ring_advance(ring); 105 + if (invalidate_domains & I915_GEM_DOMAIN_SAMPLER) 106 + cmd |= MI_READ_FLUSH; 123 107 } 108 + if (invalidate_domains & I915_GEM_DOMAIN_INSTRUCTION) 109 + cmd |= MI_EXE_FLUSH; 110 + 111 + if (invalidate_domains & I915_GEM_DOMAIN_COMMAND && 112 + (IS_G4X(dev) || IS_GEN5(dev))) 113 + cmd |= MI_INVALIDATE_ISP; 114 + 115 + ret = intel_ring_begin(ring, 2); 116 + if (ret) 117 + return ret; 118 + 119 + intel_ring_emit(ring, cmd); 120 + intel_ring_emit(ring, MI_NOOP); 121 + intel_ring_advance(ring); 124 122 125 123 return 0; 126 124 } ··· 565 567 u32 flush_domains) 566 568 { 567 569 int ret; 568 - 569 - if ((flush_domains & I915_GEM_DOMAIN_RENDER) == 0) 570 - return 0; 571 570 572 571 ret = intel_ring_begin(ring, 2); 573 572 if (ret) ··· 1051 1056 uint32_t cmd; 1052 1057 int ret; 1053 1058 1054 - if (((invalidate | flush) & I915_GEM_GPU_DOMAINS) == 0) 1055 - return 0; 1056 - 1057 1059 ret = intel_ring_begin(ring, 4); 1058 1060 if (ret) 1059 1061 return ret; ··· 1221 1229 { 1222 1230 uint32_t cmd; 1223 1231 int ret; 1224 - 1225 - if (((invalidate | flush) & I915_GEM_DOMAIN_RENDER) == 0) 1226 - return 0; 1227 1232 1228 1233 ret = blt_ring_begin(ring, 4); 1229 1234 if (ret)