Merge remote-tracking branch 'airlied/drm-next' into drm-intel-next-queued
authorDaniel Vetter <daniel.vetter@ffwll.ch>
Thu, 16 Jun 2016 12:18:30 +0000 (14:18 +0200)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Thu, 16 Jun 2016 12:18:30 +0000 (14:18 +0200)
Backmerge drm-next to get at the nonblocking atomic helpers, needed to
merge the i915 conversion.

Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
1  2 
drivers/gpu/drm/i915/i915_debugfs.c
drivers/gpu/drm/i915/i915_reg.h
drivers/gpu/drm/i915/i915_vgpu.c
drivers/gpu/drm/i915/intel_display.c
drivers/gpu/drm/i915/intel_drv.h
drivers/gpu/drm/i915/intel_dsi.c
drivers/gpu/drm/i915/intel_fbdev.c
drivers/gpu/drm/i915/intel_hdmi.c

@@@ -2393,16 -2393,16 +2393,16 @@@ static int i915_ppgtt_info(struct seq_f
                task = get_pid_task(file->pid, PIDTYPE_PID);
                if (!task) {
                        ret = -ESRCH;
-                       goto out_put;
+                       goto out_unlock;
                }
                seq_printf(m, "\nproc: %s\n", task->comm);
                put_task_struct(task);
                idr_for_each(&file_priv->context_idr, per_file_ctx,
                             (void *)(unsigned long)m);
        }
+ out_unlock:
        mutex_unlock(&dev->filelist_mutex);
  
- out_put:
        intel_runtime_pm_put(dev_priv);
        mutex_unlock(&dev->struct_mutex);
  
@@@ -2574,10 -2574,6 +2574,10 @@@ static int i915_guc_info(struct seq_fil
  
        mutex_unlock(&dev->struct_mutex);
  
 +      seq_printf(m, "Doorbell map:\n");
 +      seq_printf(m, "\t%*pb\n", GUC_MAX_DOORBELLS, guc.doorbell_bitmap);
 +      seq_printf(m, "Doorbell next cacheline: 0x%x\n\n", guc.db_cacheline);
 +
        seq_printf(m, "GuC total action count: %llu\n", guc.action_count);
        seq_printf(m, "GuC action failure count: %u\n", guc.action_fail);
        seq_printf(m, "GuC last action command: 0x%x\n", guc.action_cmd);
@@@ -5310,10 -5306,6 +5310,10 @@@ static int i915_sseu_status(struct seq_
                   INTEL_INFO(dev)->eu_total);
        seq_printf(m, "  Available EU Per Subslice: %u\n",
                   INTEL_INFO(dev)->eu_per_subslice);
 +      seq_printf(m, "  Has Pooled EU: %s\n", yesno(HAS_POOLED_EU(dev)));
 +      if (HAS_POOLED_EU(dev))
 +              seq_printf(m, "  Min EU in pool: %u\n",
 +                         INTEL_INFO(dev)->min_eu_in_pool);
        seq_printf(m, "  Has Slice Power Gating: %s\n",
                   yesno(INTEL_INFO(dev)->has_slice_pg));
        seq_printf(m, "  Has Subslice Power Gating: %s\n",
@@@ -220,9 -220,6 +220,9 @@@ static inline bool i915_mmio_reg_valid(
  #define   ECOCHK_PPGTT_WT_HSW         (0x2<<3)
  #define   ECOCHK_PPGTT_WB_HSW         (0x3<<3)
  
 +#define GEN8_CONFIG0                  _MMIO(0xD00)
 +#define  GEN9_DEFAULT_FIXES           (1 << 3 | 1 << 2 | 1 << 1)
 +
  #define GAC_ECO_BITS                  _MMIO(0x14090)
  #define   ECOBITS_SNB_BIT             (1<<13)
  #define   ECOBITS_PPGTT_CACHE64B      (3<<8)
   */
  #define GFX_INSTR(opcode, flags) ((0x3 << 29) | ((opcode) << 24) | (flags))
  
 +#define GEN9_MEDIA_POOL_STATE     ((0x3 << 29) | (0x2 << 27) | (0x5 << 16) | 4)
 +#define   GEN9_MEDIA_POOL_ENABLE  (1 << 31)
  #define GFX_OP_RASTER_RULES    ((0x3<<29)|(0x7<<24))
  #define GFX_OP_SCISSOR         ((0x3<<29)|(0x1c<<24)|(0x10<<19))
  #define   SC_UPDATE_SCISSOR       (0x1<<1)
@@@ -718,9 -713,6 +718,9 @@@ enum skl_disp_power_wells 
        /* Not actual bit groups. Used as IDs for lookup_power_well() */
        SKL_DISP_PW_ALWAYS_ON,
        SKL_DISP_PW_DC_OFF,
 +
 +      BXT_DPIO_CMN_A,
 +      BXT_DPIO_CMN_BC,
  };
  
  #define SKL_POWER_WELL_STATE(pw) (1 << ((pw) * 2))
   * PLLs can be routed to any transcoder A/B/C.
   *
   * Note: DDI0 is digital port B, DD1 is digital port C, and DDI2 is
-  * digital port D (CHV) or port A (BXT).
+  * digital port D (CHV) or port A (BXT). ::
   *
   *
   *     Dual channel PHY (VLV/CHV/BXT)
  #define BXT_P_CR_GT_DISP_PWRON                _MMIO(0x138090)
  #define   GT_DISPLAY_POWER_ON(phy)    (1 << (phy))
  
 +#define _BXT_PHY_CTL_DDI_A            0x64C00
 +#define _BXT_PHY_CTL_DDI_B            0x64C10
 +#define _BXT_PHY_CTL_DDI_C            0x64C20
 +#define   BXT_PHY_CMNLANE_POWERDOWN_ACK       (1 << 10)
 +#define   BXT_PHY_LANE_POWERDOWN_ACK  (1 << 9)
 +#define   BXT_PHY_LANE_ENABLED                (1 << 8)
 +#define BXT_PHY_CTL(port)             _MMIO_PORT(port, _BXT_PHY_CTL_DDI_A, \
 +                                                       _BXT_PHY_CTL_DDI_B)
 +
  #define _PHY_CTL_FAMILY_EDP           0x64C80
  #define _PHY_CTL_FAMILY_DDI           0x64C90
  #define   COMMON_RESET_DIS            (1 << 31)
  
  #define GEN7_TLB_RD_ADDR      _MMIO(0x4700)
  
 +#define GAMT_CHKN_BIT_REG     _MMIO(0x4ab8)
 +#define   GAMT_CHKN_DISABLE_DYNAMIC_CREDIT_SHARING    (1<<28)
 +
  #if 0
  #define PRB0_TAIL     _MMIO(0x2030)
  #define PRB0_HEAD     _MMIO(0x2034)
  #define   GEN9_IZ_HASHING_MASK(slice)                 (0x3 << ((slice) * 2))
  #define   GEN9_IZ_HASHING(slice, val)                 ((val) << ((slice) * 2))
  
 +/* chicken reg for WaConextSwitchWithConcurrentTLBInvalidate */
 +#define GEN9_CSFE_CHICKEN1_RCS _MMIO(0x20D4)
 +#define   GEN9_PREEMPT_GPGPU_SYNC_SWITCH_DISABLE (1 << 2)
 +
  /* WaClearTdlStateAckDirtyBits */
  #define GEN8_STATE_ACK                _MMIO(0x20F0)
  #define GEN9_STATE_ACK_SLICE1 _MMIO(0x20F8)
  
  #define FBC_LL_SIZE           (1536)
  
 +#define FBC_LLC_READ_CTRL     _MMIO(0x9044)
 +#define   FBC_LLC_FULLY_OPEN  (1<<30)
 +
  /* Framebuffer compression for GM45+ */
  #define DPFC_CB_BASE          _MMIO(0x3200)
  #define DPFC_CONTROL          _MMIO(0x3208)
  #define ILK_DPFC_STATUS               _MMIO(0x43210)
  #define ILK_DPFC_FENCE_YOFF   _MMIO(0x43218)
  #define ILK_DPFC_CHICKEN      _MMIO(0x43224)
 +#define   ILK_DPFC_DISABLE_DUMMY0 (1<<8)
 +#define   ILK_DPFC_NUKE_ON_ANY_MODIFICATION   (1<<23)
  #define ILK_FBC_RT_BASE               _MMIO(0x2128)
  #define   ILK_FBC_RT_VALID    (1<<0)
  #define   SNB_FBC_FRONT_BUFFER        (1<<1)
  #define  FORCE_ARB_IDLE_PLANES        (1 << 14)
  #define  SKL_EDP_PSR_FIX_RDWRAP       (1 << 3)
  
 +#define CHICKEN_PAR2_1                _MMIO(0x42090)
 +#define  KVM_CONFIG_CHANGE_NOTIFICATION_SELECT        (1 << 14)
 +
  #define _CHICKEN_PIPESL_1_A   0x420b0
  #define _CHICKEN_PIPESL_1_B   0x420b4
  #define  HSW_FBCQ_DIS                 (1 << 22)
  #define CHICKEN_PIPESL_1(pipe) _MMIO_PIPE(pipe, _CHICKEN_PIPESL_1_A, _CHICKEN_PIPESL_1_B)
  
  #define DISP_ARB_CTL  _MMIO(0x45000)
 +#define  DISP_FBC_MEMORY_WAKE         (1<<31)
  #define  DISP_TILE_SURFACE_SWIZZLING  (1<<13)
  #define  DISP_FBC_WM_DIS              (1<<15)
  #define DISP_ARB_CTL2 _MMIO(0x45004)
  #define HSW_NDE_RSTWRN_OPT    _MMIO(0x46408)
  #define  RESET_PCH_HANDSHAKE_ENABLE   (1<<4)
  
 +#define GEN8_CHICKEN_DCPR_1           _MMIO(0x46430)
 +#define   MASK_WAKEMEM                        (1<<13)
 +
  #define SKL_DFSM                      _MMIO(0x51000)
  #define SKL_DFSM_CDCLK_LIMIT_MASK     (3 << 23)
  #define SKL_DFSM_CDCLK_LIMIT_675      (0 << 23)
  
  #define FF_SLICE_CS_CHICKEN2                  _MMIO(0x20e4)
  #define  GEN9_TSG_BARRIER_ACK_DISABLE         (1<<8)
 +#define  GEN9_POOLED_EU_LOAD_BALANCING_FIX_DISABLE  (1<<10)
  
  #define GEN9_CS_DEBUG_MODE1           _MMIO(0x20ec)
 +#define GEN9_CTX_PREEMPT_REG          _MMIO(0x2248)
  #define GEN8_CS_CHICKEN1              _MMIO(0x2580)
  
  /* GEN7 chicken */
  # define GEN7_CSC1_RHWO_OPT_DISABLE_IN_RCC    ((1<<10) | (1<<26))
  # define GEN9_RHWO_OPTIMIZATION_DISABLE               (1<<14)
  #define COMMON_SLICE_CHICKEN2                 _MMIO(0x7014)
 +# define GEN8_SBE_DISABLE_REPLAY_BUF_OPTIMIZATION (1<<8)
  # define GEN8_CSC2_SBE_VUE_CACHE_CONSERVATIVE (1<<0)
  
  #define HIZ_CHICKEN                                   _MMIO(0x7018)
  #define    EDRAM_SETS_IDX(cap)                        (((cap) >> 8) & 0x3)
  
  #define GEN6_UCGCTL1                          _MMIO(0x9400)
 +# define GEN6_GAMUNIT_CLOCK_GATE_DISABLE              (1 << 22)
  # define GEN6_EU_TCUNIT_CLOCK_GATE_DISABLE            (1 << 16)
  # define GEN6_BLBUNIT_CLOCK_GATE_DISABLE              (1 << 5)
  # define GEN6_CSUNIT_CLOCK_GATE_DISABLE                       (1 << 7)
  
  #define GEN7_UCGCTL4                          _MMIO(0x940c)
  #define  GEN7_L3BANK2X_CLOCK_GATE_DISABLE     (1<<25)
 +#define  GEN8_EU_GAUNIT_CLOCK_GATE_DISABLE    (1<<14)
  
  #define GEN6_RCGCTL1                          _MMIO(0x9410)
  #define GEN6_RCGCTL2                          _MMIO(0x9414)
  #define _MIPIA_EOT_DISABLE            (dev_priv->mipi_mmio_base + 0xb05c)
  #define _MIPIC_EOT_DISABLE            (dev_priv->mipi_mmio_base + 0xb85c)
  #define MIPI_EOT_DISABLE(port)                _MMIO_MIPI(port, _MIPIA_EOT_DISABLE, _MIPIC_EOT_DISABLE)
 +#define  BXT_DEFEATURE_DPI_FIFO_CTR                   (1 << 9)
 +#define  BXT_DPHY_DEFEATURE_EN                                (1 << 8)
  #define  LP_RX_TIMEOUT_ERROR_RECOVERY_DISABLE         (1 << 7)
  #define  HS_RX_TIMEOUT_ERROR_RECOVERY_DISABLE         (1 << 6)
  #define  LOW_CONTENTION_RECOVERY_DISABLE              (1 << 5)
@@@ -53,7 -53,7 +53,7 @@@
  
  /**
   * i915_check_vgpu - detect virtual GPU
 - * @dev: drm device *
 + * @dev_priv: i915 device private
   *
   * This function is called at the initialization stage, to detect whether
   * running on a vGPU.
@@@ -135,7 -135,7 +135,7 @@@ static int vgt_balloon_space(struct drm
  
  /**
   * intel_vgt_balloon - balloon out reserved graphics address trunks
 - * @dev_priv: i915 device
 + * @dev: drm device
   *
   * This function is called at the initialization stage, to balloon out the
   * graphic address space allocated to other vGPUs, by marking these spaces as
   * of its graphic space being zero. Yet there are some portions ballooned out(
   * the shadow part, which are marked as reserved by drm allocator). From the
   * host point of view, the graphic address space is partitioned by multiple
-  * vGPUs in different VMs.
+  * vGPUs in different VMs. ::
   *
   *                        vGPU1 view         Host view
   *             0 ------> +-----------+     +-----------+
-  *               ^       |///////////|     |   vGPU3   |
-  *               |       |///////////|     +-----------+
-  *               |       |///////////|     |   vGPU2   |
+  *               ^       |###########|     |   vGPU3   |
+  *               |       |###########|     +-----------+
+  *               |       |###########|     |   vGPU2   |
   *               |       +-----------+     +-----------+
   *        mappable GM    | available | ==> |   vGPU1   |
   *               |       +-----------+     +-----------+
-  *               |       |///////////|     |           |
-  *               v       |///////////|     |   Host    |
+  *               |       |###########|     |           |
+  *               v       |###########|     |   Host    |
   *               +=======+===========+     +===========+
-  *               ^       |///////////|     |   vGPU3   |
-  *               |       |///////////|     +-----------+
-  *               |       |///////////|     |   vGPU2   |
+  *               ^       |###########|     |   vGPU3   |
+  *               |       |###########|     +-----------+
+  *               |       |###########|     |   vGPU2   |
   *               |       +-----------+     +-----------+
   *      unmappable GM    | available | ==> |   vGPU1   |
   *               |       +-----------+     +-----------+
-  *               |       |///////////|     |           |
-  *               |       |///////////|     |   Host    |
-  *               v       |///////////|     |           |
+  *               |       |###########|     |           |
+  *               |       |###########|     |   Host    |
+  *               v       |###########|     |           |
   * total GM size ------> +-----------+     +-----------+
   *
   * Returns:
@@@ -123,7 -123,7 +123,7 @@@ static void ironlake_pfit_enable(struc
  static void intel_modeset_setup_hw_state(struct drm_device *dev);
  static void intel_pre_disable_primary_noatomic(struct drm_crtc *crtc);
  static int ilk_max_pixel_rate(struct drm_atomic_state *state);
 -static int broxton_calc_cdclk(int max_pixclk);
 +static int bxt_calc_cdclk(int max_pixclk);
  
  struct intel_limit {
        struct {
@@@ -4648,7 -4648,7 +4648,7 @@@ static void intel_pre_plane_update(stru
                        intel_pre_disable_primary(&crtc->base);
        }
  
 -      if (pipe_config->disable_cxsr) {
 +      if (pipe_config->disable_cxsr && HAS_GMCH_DISPLAY(dev)) {
                crtc->wm.cxsr_allowed = false;
  
                /*
@@@ -4841,10 -4841,6 +4841,10 @@@ static void haswell_crtc_enable(struct 
                intel_set_pch_fifo_underrun_reporting(dev_priv, TRANSCODER_A,
                                                      false);
  
 +      for_each_encoder_on_crtc(dev, crtc, encoder)
 +              if (encoder->pre_pll_enable)
 +                      encoder->pre_pll_enable(encoder);
 +
        if (intel_crtc->config->shared_dpll)
                intel_enable_shared_dpll(intel_crtc);
  
@@@ -5420,7 -5416,7 +5420,7 @@@ static void bxt_de_pll_enable(struct dr
        dev_priv->cdclk_pll.vco = vco;
  }
  
 -static void broxton_set_cdclk(struct drm_i915_private *dev_priv, int cdclk)
 +static void bxt_set_cdclk(struct drm_i915_private *dev_priv, int cdclk)
  {
        u32 val, divider;
        int vco, ret;
@@@ -5545,7 -5541,7 +5545,7 @@@ sanitize
        dev_priv->cdclk_pll.vco = -1;
  }
  
 -void broxton_init_cdclk(struct drm_i915_private *dev_priv)
 +void bxt_init_cdclk(struct drm_i915_private *dev_priv)
  {
        bxt_sanitize_cdclk(dev_priv);
  
         * - The initial CDCLK needs to be read from VBT.
         *   Need to make this change after VBT has changes for BXT.
         */
 -      broxton_set_cdclk(dev_priv, broxton_calc_cdclk(0));
 +      bxt_set_cdclk(dev_priv, bxt_calc_cdclk(0));
  }
  
 -void broxton_uninit_cdclk(struct drm_i915_private *dev_priv)
 +void bxt_uninit_cdclk(struct drm_i915_private *dev_priv)
  {
 -      broxton_set_cdclk(dev_priv, dev_priv->cdclk_pll.ref);
 +      bxt_set_cdclk(dev_priv, dev_priv->cdclk_pll.ref);
  }
  
  static int skl_calc_cdclk(int max_pixclk, int vco)
@@@ -5988,7 -5984,7 +5988,7 @@@ static int valleyview_calc_cdclk(struc
                return 200000;
  }
  
 -static int broxton_calc_cdclk(int max_pixclk)
 +static int bxt_calc_cdclk(int max_pixclk)
  {
        if (max_pixclk > 576000)
                return 624000;
@@@ -6048,17 -6044,17 +6048,17 @@@ static int valleyview_modeset_calc_cdcl
        return 0;
  }
  
 -static int broxton_modeset_calc_cdclk(struct drm_atomic_state *state)
 +static int bxt_modeset_calc_cdclk(struct drm_atomic_state *state)
  {
        int max_pixclk = ilk_max_pixel_rate(state);
        struct intel_atomic_state *intel_state =
                to_intel_atomic_state(state);
  
        intel_state->cdclk = intel_state->dev_cdclk =
 -              broxton_calc_cdclk(max_pixclk);
 +              bxt_calc_cdclk(max_pixclk);
  
        if (!intel_state->active_crtcs)
 -              intel_state->dev_cdclk = broxton_calc_cdclk(0);
 +              intel_state->dev_cdclk = bxt_calc_cdclk(0);
  
        return 0;
  }
@@@ -8434,9 -8430,12 +8434,9 @@@ static void ironlake_init_pch_refclk(st
        else
                final |= DREF_NONSPREAD_SOURCE_ENABLE;
  
 +      final &= ~DREF_SSC_SOURCE_MASK;
        final &= ~DREF_CPU_SOURCE_OUTPUT_MASK;
 -
 -      if (!using_ssc_source) {
 -              final &= ~DREF_SSC_SOURCE_MASK;
 -              final &= ~DREF_SSC1_ENABLE;
 -      }
 +      final &= ~DREF_SSC1_ENABLE;
  
        if (has_panel) {
                final |= DREF_SSC_SOURCE_ENABLE;
                                final |= DREF_CPU_SOURCE_OUTPUT_NONSPREAD;
                } else
                        final |= DREF_CPU_SOURCE_OUTPUT_DISABLE;
 -      } else {
 -              final |= DREF_SSC_SOURCE_DISABLE;
 -              final |= DREF_CPU_SOURCE_OUTPUT_DISABLE;
 +      } else if (using_ssc_source) {
 +              final |= DREF_SSC_SOURCE_ENABLE;
 +              final |= DREF_SSC1_ENABLE;
        }
  
        if (final == val)
@@@ -9674,14 -9673,14 +9674,14 @@@ void hsw_disable_pc8(struct drm_i915_pr
        }
  }
  
 -static void broxton_modeset_commit_cdclk(struct drm_atomic_state *old_state)
 +static void bxt_modeset_commit_cdclk(struct drm_atomic_state *old_state)
  {
        struct drm_device *dev = old_state->dev;
        struct intel_atomic_state *old_intel_state =
                to_intel_atomic_state(old_state);
        unsigned int req_cdclk = old_intel_state->dev_cdclk;
  
 -      broxton_set_cdclk(to_i915(dev), req_cdclk);
 +      bxt_set_cdclk(to_i915(dev), req_cdclk);
  }
  
  /* compute the max rate for new configuration */
@@@ -12817,7 -12816,6 +12817,7 @@@ intel_pipe_config_compare(struct drm_de
  
        PIPE_CONF_CHECK_I(has_dp_encoder);
        PIPE_CONF_CHECK_I(lane_count);
 +      PIPE_CONF_CHECK_X(lane_lat_optim_mask);
  
        if (INTEL_INFO(dev)->gen < 8) {
                PIPE_CONF_CHECK_M_N(dp_m_n);
@@@ -13728,7 -13726,7 +13728,7 @@@ static int intel_atomic_commit(struct d
                return ret;
        }
  
-       drm_atomic_helper_swap_state(dev, state);
+       drm_atomic_helper_swap_state(state, true);
        dev_priv->wm.distrust_bios_wm = false;
        dev_priv->wm.skl_results = intel_state->wm_results;
        intel_shared_dpll_commit(state);
@@@ -14704,7 -14702,7 +14704,7 @@@ static void intel_setup_outputs(struct 
                if (I915_READ(PCH_DP_D) & DP_DETECTED)
                        intel_dp_init(dev, PCH_DP_D, PORT_D);
        } else if (IS_VALLEYVIEW(dev) || IS_CHERRYVIEW(dev)) {
 -              bool has_edp;
 +              bool has_edp, has_port;
  
                /*
                 * The DP_DETECTED bit is the latched state of the DDC
                 * Thus we can't rely on the DP_DETECTED bit alone to detect
                 * eDP ports. Consult the VBT as well as DP_DETECTED to
                 * detect eDP ports.
 +               *
 +               * Sadly the straps seem to be missing sometimes even for HDMI
 +               * ports (eg. on Voyo V3 - CHT x7-Z8700), so check both strap
 +               * and VBT for the presence of the port. Additionally we can't
 +               * trust the port type the VBT declares as we've seen at least
 +               * HDMI ports that the VBT claim are DP or eDP.
                 */
                has_edp = intel_dp_is_edp(dev, PORT_B);
 -              if (I915_READ(VLV_DP_B) & DP_DETECTED || has_edp)
 +              has_port = intel_bios_is_port_present(dev_priv, PORT_B);
 +              if (I915_READ(VLV_DP_B) & DP_DETECTED || has_port)
                        has_edp &= intel_dp_init(dev, VLV_DP_B, PORT_B);
 -              if (I915_READ(VLV_HDMIB) & SDVO_DETECTED && !has_edp)
 +              if ((I915_READ(VLV_HDMIB) & SDVO_DETECTED || has_port) && !has_edp)
                        intel_hdmi_init(dev, VLV_HDMIB, PORT_B);
  
                has_edp = intel_dp_is_edp(dev, PORT_C);
 -              if (I915_READ(VLV_DP_C) & DP_DETECTED || has_edp)
 +              has_port = intel_bios_is_port_present(dev_priv, PORT_C);
 +              if (I915_READ(VLV_DP_C) & DP_DETECTED || has_port)
                        has_edp &= intel_dp_init(dev, VLV_DP_C, PORT_C);
 -              if (I915_READ(VLV_HDMIC) & SDVO_DETECTED && !has_edp)
 +              if ((I915_READ(VLV_HDMIC) & SDVO_DETECTED || has_port) && !has_edp)
                        intel_hdmi_init(dev, VLV_HDMIC, PORT_C);
  
                if (IS_CHERRYVIEW(dev)) {
 -                      /* eDP not supported on port D, so don't check VBT */
 -                      if (I915_READ(CHV_HDMID) & SDVO_DETECTED)
 -                              intel_hdmi_init(dev, CHV_HDMID, PORT_D);
 -                      if (I915_READ(CHV_DP_D) & DP_DETECTED)
 +                      /*
 +                       * eDP not supported on port D,
 +                       * so no need to worry about it
 +                       */
 +                      has_port = intel_bios_is_port_present(dev_priv, PORT_D);
 +                      if (I915_READ(CHV_DP_D) & DP_DETECTED || has_port)
                                intel_dp_init(dev, CHV_DP_D, PORT_D);
 +                      if (I915_READ(CHV_HDMID) & SDVO_DETECTED || has_port)
 +                              intel_hdmi_init(dev, CHV_HDMID, PORT_D);
                }
  
                intel_dsi_init(dev);
@@@ -15226,9 -15212,9 +15226,9 @@@ void intel_init_display_hooks(struct dr
                        valleyview_modeset_calc_cdclk;
        } else if (IS_BROXTON(dev_priv)) {
                dev_priv->display.modeset_commit_cdclk =
 -                      broxton_modeset_commit_cdclk;
 +                      bxt_modeset_commit_cdclk;
                dev_priv->display.modeset_calc_cdclk =
 -                      broxton_modeset_calc_cdclk;
 +                      bxt_modeset_calc_cdclk;
        } else if (IS_SKYLAKE(dev_priv) || IS_KABYLAKE(dev_priv)) {
                dev_priv->display.modeset_commit_cdclk =
                        skl_modeset_commit_cdclk;
@@@ -16281,14 -16267,6 +16281,6 @@@ void intel_modeset_cleanup(struct drm_d
        intel_teardown_gmbus(dev);
  }
  
- /*
-  * Return which encoder is currently attached for connector.
-  */
- struct drm_encoder *intel_best_encoder(struct drm_connector *connector)
- {
-       return &intel_attached_encoder(connector)->base;
- }
  void intel_connector_attach_encoder(struct intel_connector *connector,
                                    struct intel_encoder *encoder)
  {
@@@ -579,12 -579,6 +579,12 @@@ struct intel_crtc_state 
  
        uint8_t lane_count;
  
 +      /*
 +       * Used by platforms having DP/HDMI PHY with programmable lane
 +       * latency optimization.
 +       */
 +      uint8_t lane_lat_optim_mask;
 +
        /* Panel fitter controls for gen2-gen4 + VLV */
        struct {
                u32 control;
@@@ -1160,7 -1154,6 +1160,6 @@@ struct intel_connector *intel_connector
  bool intel_connector_get_hw_state(struct intel_connector *connector);
  void intel_connector_attach_encoder(struct intel_connector *connector,
                                    struct intel_encoder *encoder);
- struct drm_encoder *intel_best_encoder(struct drm_connector *connector);
  struct drm_display_mode *intel_crtc_mode_get(struct drm_device *dev,
                                             struct drm_crtc *crtc);
  enum pipe intel_get_pipe_from_connector(struct intel_connector *connector);
@@@ -1267,14 -1260,11 +1266,14 @@@ void intel_prepare_reset(struct drm_i91
  void intel_finish_reset(struct drm_i915_private *dev_priv);
  void hsw_enable_pc8(struct drm_i915_private *dev_priv);
  void hsw_disable_pc8(struct drm_i915_private *dev_priv);
 -void broxton_init_cdclk(struct drm_i915_private *dev_priv);
 -void broxton_uninit_cdclk(struct drm_i915_private *dev_priv);
 -void broxton_ddi_phy_init(struct drm_i915_private *dev_priv);
 -void broxton_ddi_phy_uninit(struct drm_i915_private *dev_priv);
 -void broxton_ddi_phy_verify_state(struct drm_i915_private *dev_priv);
 +void bxt_init_cdclk(struct drm_i915_private *dev_priv);
 +void bxt_uninit_cdclk(struct drm_i915_private *dev_priv);
 +void bxt_ddi_phy_init(struct drm_i915_private *dev_priv, enum dpio_phy phy);
 +void bxt_ddi_phy_uninit(struct drm_i915_private *dev_priv, enum dpio_phy phy);
 +bool bxt_ddi_phy_is_enabled(struct drm_i915_private *dev_priv,
 +                          enum dpio_phy phy);
 +bool bxt_ddi_phy_verify_state(struct drm_i915_private *dev_priv,
 +                            enum dpio_phy phy);
  void gen9_sanitize_dc_state(struct drm_i915_private *dev_priv);
  void bxt_enable_dc9(struct drm_i915_private *dev_priv);
  void bxt_disable_dc9(struct drm_i915_private *dev_priv);
@@@ -1172,12 -1172,6 +1172,12 @@@ static void intel_dsi_prepare(struct in
        if (intel_dsi->clock_stop)
                tmp |= CLOCKSTOP;
  
 +      if (IS_BROXTON(dev_priv)) {
 +              tmp |= BXT_DPHY_DEFEATURE_EN;
 +              if (!is_cmd_mode(intel_dsi))
 +                      tmp |= BXT_DEFEATURE_DPI_FIFO_CTR;
 +      }
 +
        for_each_dsi_port(port, intel_dsi->ports) {
                I915_WRITE(MIPI_DSI_FUNC_PRG(port), val);
  
@@@ -1385,7 -1379,6 +1385,6 @@@ static const struct drm_encoder_funcs i
  static const struct drm_connector_helper_funcs intel_dsi_connector_helper_funcs = {
        .get_modes = intel_dsi_get_modes,
        .mode_valid = intel_dsi_mode_valid,
-       .best_encoder = intel_best_encoder,
  };
  
  static const struct drm_connector_funcs intel_dsi_connector_funcs = {
@@@ -552,6 -552,8 +552,6 @@@ static void intel_fbdev_destroy(struct 
        drm_fb_helper_fini(&ifbdev->helper);
  
        if (ifbdev->fb) {
 -              drm_framebuffer_unregister_private(&ifbdev->fb->base);
 -
                mutex_lock(&dev->struct_mutex);
                intel_unpin_fb_obj(&ifbdev->fb->base, BIT(DRM_ROTATE_0));
                mutex_unlock(&dev->struct_mutex);
@@@ -722,8 -724,6 +722,6 @@@ int intel_fbdev_init(struct drm_device 
                return ret;
        }
  
-       ifbdev->helper.atomic = true;
        dev_priv->fbdev = ifbdev;
        INIT_WORK(&dev_priv->fbdev_suspend_work, intel_fbdev_suspend_worker);
  
@@@ -1782,7 -1782,6 +1782,6 @@@ static const struct drm_connector_func
  static const struct drm_connector_helper_funcs intel_hdmi_connector_helper_funcs = {
        .get_modes = intel_hdmi_get_modes,
        .mode_valid = intel_hdmi_mode_valid,
-       .best_encoder = intel_best_encoder,
  };
  
  static const struct drm_encoder_funcs intel_hdmi_enc_funcs = {
@@@ -1810,9 -1809,6 +1809,9 @@@ void intel_hdmi_init_connector(struct i
        enum port port = intel_dig_port->port;
        uint8_t alternate_ddc_pin;
  
 +      DRM_DEBUG_KMS("Adding HDMI connector on port %c\n",
 +                    port_name(port));
 +
        if (WARN(intel_dig_port->max_lanes < 4,
                 "Not enough lanes (%d) for HDMI on port %c\n",
                 intel_dig_port->max_lanes, port_name(port)))