aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2018-10-19 00:28:10 -0400
committerDave Airlie <airlied@redhat.com>2018-10-19 00:28:11 -0400
commitf2bfc71aee75feff33ca659322b72ffeed5a243d (patch)
treed0a2685e9f70d09a67795070a7dbb5fbeaa0f9fd /drivers/gpu/drm
parentc13bbf4a78aafed144de0250a3c71265672c9bda (diff)
parent835fe6d75d14c1513910ed7f5665127fee12acc8 (diff)
Merge tag 'drm-intel-next-fixes-2018-10-18' of git://anongit.freedesktop.org/drm/drm-intel into drm-next
- Fix GPU hang on MacBook2,1 when booting in EFI mode (Bugzilla #105637) - Fix garbled console on Y tiled BIOS framebuffer configs (Bugzilla #108264) - Fix black screen on certain eDP panels eg. Dell XPS 9350 (Bugzilla #107489 and #105338) - MST fixes that Rodrigo dropped from drm-intel-fixes and bunch of Icelake fixes - Then assorted proactive code fixes caught by CI or developers Signed-off-by: Dave Airlie <airlied@redhat.com> From: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20181018165725.GA2281@jlahtine-desk.ger.corp.intel.com
Diffstat (limited to 'drivers/gpu/drm')
-rw-r--r--drivers/gpu/drm/i915/i915_debugfs.c2
-rw-r--r--drivers/gpu/drm/i915/i915_gem.c12
-rw-r--r--drivers/gpu/drm/i915/i915_reg.h3
-rw-r--r--drivers/gpu/drm/i915/intel_csr.c1
-rw-r--r--drivers/gpu/drm/i915/intel_ddi.c36
-rw-r--r--drivers/gpu/drm/i915/intel_display.c151
-rw-r--r--drivers/gpu/drm/i915/intel_dp.c32
-rw-r--r--drivers/gpu/drm/i915/intel_dp_link_training.c26
-rw-r--r--drivers/gpu/drm/i915/intel_dp_mst.c41
-rw-r--r--drivers/gpu/drm/i915/intel_drv.h2
-rw-r--r--drivers/gpu/drm/i915/intel_sprite.c22
-rw-r--r--drivers/gpu/drm/i915/selftests/i915_gem_object.c3
12 files changed, 227 insertions, 104 deletions
diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
index b4744a68cd88..4f3ac0a12889 100644
--- a/drivers/gpu/drm/i915/i915_debugfs.c
+++ b/drivers/gpu/drm/i915/i915_debugfs.c
@@ -4189,7 +4189,7 @@ i915_drop_caches_set(void *data, u64 val)
4189 I915_WAIT_LOCKED, 4189 I915_WAIT_LOCKED,
4190 MAX_SCHEDULE_TIMEOUT); 4190 MAX_SCHEDULE_TIMEOUT);
4191 4191
4192 if (val & DROP_RESET_SEQNO) { 4192 if (ret == 0 && val & DROP_RESET_SEQNO) {
4193 intel_runtime_pm_get(i915); 4193 intel_runtime_pm_get(i915);
4194 ret = i915_gem_set_global_seqno(&i915->drm, 1); 4194 ret = i915_gem_set_global_seqno(&i915->drm, 1);
4195 intel_runtime_pm_put(i915); 4195 intel_runtime_pm_put(i915);
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index db9688d14912..aa3969d52773 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -1127,11 +1127,7 @@ i915_gem_shmem_pread(struct drm_i915_gem_object *obj,
1127 offset = offset_in_page(args->offset); 1127 offset = offset_in_page(args->offset);
1128 for (idx = args->offset >> PAGE_SHIFT; remain; idx++) { 1128 for (idx = args->offset >> PAGE_SHIFT; remain; idx++) {
1129 struct page *page = i915_gem_object_get_page(obj, idx); 1129 struct page *page = i915_gem_object_get_page(obj, idx);
1130 int length; 1130 unsigned int length = min_t(u64, remain, PAGE_SIZE - offset);
1131
1132 length = remain;
1133 if (offset + length > PAGE_SIZE)
1134 length = PAGE_SIZE - offset;
1135 1131
1136 ret = shmem_pread(page, offset, length, user_data, 1132 ret = shmem_pread(page, offset, length, user_data,
1137 page_to_phys(page) & obj_do_bit17_swizzling, 1133 page_to_phys(page) & obj_do_bit17_swizzling,
@@ -1575,11 +1571,7 @@ i915_gem_shmem_pwrite(struct drm_i915_gem_object *obj,
1575 offset = offset_in_page(args->offset); 1571 offset = offset_in_page(args->offset);
1576 for (idx = args->offset >> PAGE_SHIFT; remain; idx++) { 1572 for (idx = args->offset >> PAGE_SHIFT; remain; idx++) {
1577 struct page *page = i915_gem_object_get_page(obj, idx); 1573 struct page *page = i915_gem_object_get_page(obj, idx);
1578 int length; 1574 unsigned int length = min_t(u64, remain, PAGE_SIZE - offset);
1579
1580 length = remain;
1581 if (offset + length > PAGE_SIZE)
1582 length = PAGE_SIZE - offset;
1583 1575
1584 ret = shmem_pwrite(page, offset, length, user_data, 1576 ret = shmem_pwrite(page, offset, length, user_data,
1585 page_to_phys(page) & obj_do_bit17_swizzling, 1577 page_to_phys(page) & obj_do_bit17_swizzling,
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index 4948b352bf4c..7c491ea3d052 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -9339,6 +9339,9 @@ enum skl_power_gate {
9339#define DPCLKA_CFGCR0_ICL _MMIO(0x164280) 9339#define DPCLKA_CFGCR0_ICL _MMIO(0x164280)
9340#define DPCLKA_CFGCR0_DDI_CLK_OFF(port) (1 << ((port) == PORT_F ? 23 : \ 9340#define DPCLKA_CFGCR0_DDI_CLK_OFF(port) (1 << ((port) == PORT_F ? 23 : \
9341 (port) + 10)) 9341 (port) + 10))
9342#define ICL_DPCLKA_CFGCR0_DDI_CLK_OFF(port) (1 << ((port) + 10))
9343#define ICL_DPCLKA_CFGCR0_TC_CLK_OFF(tc_port) (1 << ((tc_port) == PORT_TC4 ? \
9344 21 : (tc_port) + 12))
9342#define DPCLKA_CFGCR0_DDI_CLK_SEL_SHIFT(port) ((port) == PORT_F ? 21 : \ 9345#define DPCLKA_CFGCR0_DDI_CLK_SEL_SHIFT(port) ((port) == PORT_F ? 21 : \
9343 (port) * 2) 9346 (port) * 2)
9344#define DPCLKA_CFGCR0_DDI_CLK_SEL_MASK(port) (3 << DPCLKA_CFGCR0_DDI_CLK_SEL_SHIFT(port)) 9347#define DPCLKA_CFGCR0_DDI_CLK_SEL_MASK(port) (3 << DPCLKA_CFGCR0_DDI_CLK_SEL_SHIFT(port))
diff --git a/drivers/gpu/drm/i915/intel_csr.c b/drivers/gpu/drm/i915/intel_csr.c
index 4aa8f3d6b64c..d48186e9ddad 100644
--- a/drivers/gpu/drm/i915/intel_csr.c
+++ b/drivers/gpu/drm/i915/intel_csr.c
@@ -35,6 +35,7 @@
35 */ 35 */
36 36
37#define I915_CSR_ICL "i915/icl_dmc_ver1_07.bin" 37#define I915_CSR_ICL "i915/icl_dmc_ver1_07.bin"
38MODULE_FIRMWARE(I915_CSR_ICL);
38#define ICL_CSR_VERSION_REQUIRED CSR_VERSION(1, 7) 39#define ICL_CSR_VERSION_REQUIRED CSR_VERSION(1, 7)
39 40
40#define I915_CSR_GLK "i915/glk_dmc_ver1_04.bin" 41#define I915_CSR_GLK "i915/glk_dmc_ver1_04.bin"
diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
index b6910c8b4e08..5186cd7075f9 100644
--- a/drivers/gpu/drm/i915/intel_ddi.c
+++ b/drivers/gpu/drm/i915/intel_ddi.c
@@ -916,7 +916,7 @@ static int intel_ddi_hdmi_level(struct drm_i915_private *dev_priv, enum port por
916 level = dev_priv->vbt.ddi_port_info[port].hdmi_level_shift; 916 level = dev_priv->vbt.ddi_port_info[port].hdmi_level_shift;
917 917
918 if (IS_ICELAKE(dev_priv)) { 918 if (IS_ICELAKE(dev_priv)) {
919 if (port == PORT_A || port == PORT_B) 919 if (intel_port_is_combophy(dev_priv, port))
920 icl_get_combo_buf_trans(dev_priv, port, 920 icl_get_combo_buf_trans(dev_priv, port,
921 INTEL_OUTPUT_HDMI, &n_entries); 921 INTEL_OUTPUT_HDMI, &n_entries);
922 else 922 else
@@ -1535,7 +1535,7 @@ static void icl_ddi_clock_get(struct intel_encoder *encoder,
1535 uint32_t pll_id; 1535 uint32_t pll_id;
1536 1536
1537 pll_id = intel_get_shared_dpll_id(dev_priv, pipe_config->shared_dpll); 1537 pll_id = intel_get_shared_dpll_id(dev_priv, pipe_config->shared_dpll);
1538 if (port == PORT_A || port == PORT_B) { 1538 if (intel_port_is_combophy(dev_priv, port)) {
1539 if (intel_crtc_has_type(pipe_config, INTEL_OUTPUT_HDMI)) 1539 if (intel_crtc_has_type(pipe_config, INTEL_OUTPUT_HDMI))
1540 link_clock = cnl_calc_wrpll_link(dev_priv, pll_id); 1540 link_clock = cnl_calc_wrpll_link(dev_priv, pll_id);
1541 else 1541 else
@@ -2235,7 +2235,7 @@ u8 intel_ddi_dp_voltage_max(struct intel_encoder *encoder)
2235 int n_entries; 2235 int n_entries;
2236 2236
2237 if (IS_ICELAKE(dev_priv)) { 2237 if (IS_ICELAKE(dev_priv)) {
2238 if (port == PORT_A || port == PORT_B) 2238 if (intel_port_is_combophy(dev_priv, port))
2239 icl_get_combo_buf_trans(dev_priv, port, encoder->type, 2239 icl_get_combo_buf_trans(dev_priv, port, encoder->type,
2240 &n_entries); 2240 &n_entries);
2241 else 2241 else
@@ -2669,9 +2669,10 @@ static void icl_ddi_vswing_sequence(struct intel_encoder *encoder,
2669 u32 level, 2669 u32 level,
2670 enum intel_output_type type) 2670 enum intel_output_type type)
2671{ 2671{
2672 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
2672 enum port port = encoder->port; 2673 enum port port = encoder->port;
2673 2674
2674 if (port == PORT_A || port == PORT_B) 2675 if (intel_port_is_combophy(dev_priv, port))
2675 icl_combo_phy_ddi_vswing_sequence(encoder, level, type); 2676 icl_combo_phy_ddi_vswing_sequence(encoder, level, type);
2676 else 2677 else
2677 icl_mg_phy_ddi_vswing_sequence(encoder, link_clock, level); 2678 icl_mg_phy_ddi_vswing_sequence(encoder, link_clock, level);
@@ -2732,6 +2733,21 @@ uint32_t ddi_signal_levels(struct intel_dp *intel_dp)
2732 return DDI_BUF_TRANS_SELECT(level); 2733 return DDI_BUF_TRANS_SELECT(level);
2733} 2734}
2734 2735
2736static inline
2737uint32_t icl_dpclka_cfgcr0_clk_off(struct drm_i915_private *dev_priv,
2738 enum port port)
2739{
2740 if (intel_port_is_combophy(dev_priv, port)) {
2741 return ICL_DPCLKA_CFGCR0_DDI_CLK_OFF(port);
2742 } else if (intel_port_is_tc(dev_priv, port)) {
2743 enum tc_port tc_port = intel_port_to_tc(dev_priv, port);
2744
2745 return ICL_DPCLKA_CFGCR0_TC_CLK_OFF(tc_port);
2746 }
2747
2748 return 0;
2749}
2750
2735void icl_map_plls_to_ports(struct drm_crtc *crtc, 2751void icl_map_plls_to_ports(struct drm_crtc *crtc,
2736 struct intel_crtc_state *crtc_state, 2752 struct intel_crtc_state *crtc_state,
2737 struct drm_atomic_state *old_state) 2753 struct drm_atomic_state *old_state)
@@ -2755,16 +2771,16 @@ void icl_map_plls_to_ports(struct drm_crtc *crtc,
2755 mutex_lock(&dev_priv->dpll_lock); 2771 mutex_lock(&dev_priv->dpll_lock);
2756 2772
2757 val = I915_READ(DPCLKA_CFGCR0_ICL); 2773 val = I915_READ(DPCLKA_CFGCR0_ICL);
2758 WARN_ON((val & DPCLKA_CFGCR0_DDI_CLK_OFF(port)) == 0); 2774 WARN_ON((val & icl_dpclka_cfgcr0_clk_off(dev_priv, port)) == 0);
2759 2775
2760 if (port == PORT_A || port == PORT_B) { 2776 if (intel_port_is_combophy(dev_priv, port)) {
2761 val &= ~DPCLKA_CFGCR0_DDI_CLK_SEL_MASK(port); 2777 val &= ~DPCLKA_CFGCR0_DDI_CLK_SEL_MASK(port);
2762 val |= DPCLKA_CFGCR0_DDI_CLK_SEL(pll->info->id, port); 2778 val |= DPCLKA_CFGCR0_DDI_CLK_SEL(pll->info->id, port);
2763 I915_WRITE(DPCLKA_CFGCR0_ICL, val); 2779 I915_WRITE(DPCLKA_CFGCR0_ICL, val);
2764 POSTING_READ(DPCLKA_CFGCR0_ICL); 2780 POSTING_READ(DPCLKA_CFGCR0_I