Merge tag 'drm-misc-next-2019-08-08' of git://anongit.freedesktop.org/drm/drm-misc...
authorDave Airlie <airlied@redhat.com>
Fri, 9 Aug 2019 06:04:15 +0000 (16:04 +1000)
committerDave Airlie <airlied@redhat.com>
Fri, 9 Aug 2019 06:04:31 +0000 (16:04 +1000)
drm-misc-next for 5.4:

UAPI Changes:
 - HDCP: Add a Content protection type property

Cross-subsystem Changes:

Core Changes:
 - Continue to rework the include dependencies
 - fb: Remove the unused drm_gem_fbdev_fb_create function
 - drm-dp-helper: Make the link rate calculation more tolerant to
                  non-explicitly defined, yet supported, rates
 - fb-helper: Map DRM client buffer only when required, and instanciate a
              shadow buffer when the device has a dirty function or says so
 - connector: Add a helper to link the DDC adapter used by that connector to
              the userspace
 - vblank: Switch from DRM_WAIT_ON to wait_event_interruptible_timeout
 - dma-buf: Fix a stack corruption
 - ttm: Embed a drm_gem_object struct to make ttm_buffer_object a
        superclass of GEM, and convert drivers to use it.
 - hdcp: Improvements to report the content protection type to the
         userspace

Driver Changes:
 - Remove drm_gem_prime_import/export from being defined in the drivers
 - Drop DRM_AUTH usage from drivers
 - Continue to drop drmP.h
 - Convert drivers to the connector ddc helper

 - ingenic: Add support for more panel-related cases
 - komeda: Support for dual-link
 - lima: Reduce logging
 - mpag200: Fix the cursor support
 - panfrost: Export GPU features register to userspace through an ioctl
 - pl111: Remove the CLD pads wiring support from the DT
 - rockchip: Rework to use DRM PSR helpers, fix a bug in the VOP_WIN_GET
             macro
 - sun4i: Improve support for color encoding and range
 - tinydrm: Rework SPI support, improve MIPI-DBI support, move to drm/tiny
 - vkms: Rework of the CRC tracking

 - bridges:
   - sii902x: Add support for audio graph card
   - tc358767: Rework AUX data handling code
   - ti-sn65dsi86: Add Debugfs and proper DSI mode flags support

 - panels
   - Support for GiantPlus GPM940B0, Sharp LQ070Y3DG3B, Ortustech
     COM37H3M, Novatek NT39016, Sharp LS020B1DD01D, Raydium RM67191,
     Boe Himax8279d, Sharp LD-D5116Z01B
   - Conversion of the device tree bindings to the YAML description
   - jh057n00900: Rework the enable / disable path

 - fbdev:
   - ssd1307fb: Support more devices based on that controller

Signed-off-by: Dave Airlie <airlied@redhat.com>
From: Maxime Ripard <maxime.ripard@bootlin.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20190808121423.xzpedzkpyecvsiy4@flea
13 files changed:
1  2 
MAINTAINERS
drivers/gpu/drm/Kconfig
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
drivers/gpu/drm/bridge/Kconfig
drivers/gpu/drm/drm_modes.c
drivers/gpu/drm/i915/display/intel_ddi.c
drivers/gpu/drm/i915/display/intel_hdcp.c
drivers/gpu/drm/i915/i915_drv.c
drivers/gpu/drm/i915/i915_drv.h
drivers/gpu/drm/msm/msm_drv.c
drivers/gpu/drm/msm/msm_gem.c

diff --cc MAINTAINERS
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -3634,36 -3592,59 +3643,54 @@@ static void intel_ddi_update_pipe(struc
        if (!intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI))
                intel_ddi_update_pipe_dp(encoder, crtc_state, conn_state);
  
+       /*
+        * During the HDCP encryption session if Type change is requested,
+        * disable the HDCP and reenable it with new TYPE value.
+        */
        if (conn_state->content_protection ==
-           DRM_MODE_CONTENT_PROTECTION_DESIRED)
-               intel_hdcp_enable(to_intel_connector(conn_state->connector));
-       else if (conn_state->content_protection ==
-                DRM_MODE_CONTENT_PROTECTION_UNDESIRED)
-               intel_hdcp_disable(to_intel_connector(conn_state->connector));
+           DRM_MODE_CONTENT_PROTECTION_UNDESIRED ||
+           content_protection_type_changed)
+               intel_hdcp_disable(connector);
+       /*
+        * Mark the hdcp state as DESIRED after the hdcp disable of type
+        * change procedure.
+        */
+       if (content_protection_type_changed) {
+               mutex_lock(&hdcp->mutex);
+               hdcp->value = DRM_MODE_CONTENT_PROTECTION_DESIRED;
+               schedule_work(&hdcp->prop_work);
+               mutex_unlock(&hdcp->mutex);
+       }
+       if (conn_state->content_protection ==
+           DRM_MODE_CONTENT_PROTECTION_DESIRED ||
+           content_protection_type_changed)
+               intel_hdcp_enable(connector, (u8)conn_state->hdcp_content_type);
  }
  
 -static void intel_ddi_set_fia_lane_count(struct intel_encoder *encoder,
 -                                       const struct intel_crtc_state *pipe_config,
 -                                       enum port port)
 +static void
 +intel_ddi_update_prepare(struct intel_atomic_state *state,
 +                       struct intel_encoder *encoder,
 +                       struct intel_crtc *crtc)
  {
 -      struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
 -      struct intel_digital_port *dig_port = enc_to_dig_port(&encoder->base);
 -      enum tc_port tc_port = intel_port_to_tc(dev_priv, port);
 -      u32 val = I915_READ(PORT_TX_DFLEXDPMLE1);
 -      bool lane_reversal = dig_port->saved_port_bits & DDI_BUF_PORT_REVERSAL;
 -
 -      val &= ~DFLEXDPMLE1_DPMLETC_MASK(tc_port);
 -      switch (pipe_config->lane_count) {
 -      case 1:
 -              val |= (lane_reversal) ? DFLEXDPMLE1_DPMLETC_ML3(tc_port) :
 -              DFLEXDPMLE1_DPMLETC_ML0(tc_port);
 -              break;
 -      case 2:
 -              val |= (lane_reversal) ? DFLEXDPMLE1_DPMLETC_ML3_2(tc_port) :
 -              DFLEXDPMLE1_DPMLETC_ML1_0(tc_port);
 -              break;
 -      case 4:
 -              val |= DFLEXDPMLE1_DPMLETC_ML3_0(tc_port);
 -              break;
 -      default:
 -              MISSING_CASE(pipe_config->lane_count);
 -      }
 -      I915_WRITE(PORT_TX_DFLEXDPMLE1, val);
 +      struct intel_crtc_state *crtc_state =
 +              crtc ? intel_atomic_get_new_crtc_state(state, crtc) : NULL;
 +      int required_lanes = crtc_state ? crtc_state->lane_count : 1;
 +
 +      WARN_ON(crtc && crtc->active);
 +
 +      intel_tc_port_get_link(enc_to_dig_port(&encoder->base), required_lanes);
 +      if (crtc_state && crtc_state->base.active)
 +              intel_update_active_dpll(state, crtc, encoder);
 +}
 +
 +static void
 +intel_ddi_update_complete(struct intel_atomic_state *state,
 +                        struct intel_encoder *encoder,
 +                        struct intel_crtc *crtc)
 +{
 +      intel_tc_port_put_link(enc_to_dig_port(&encoder->base));
  }
  
  static void
Simple merge
Simple merge
Simple merge
Simple merge