Merge remote-tracking branch 'drm/drm-next'
authorStephen Rothwell <sfr@canb.auug.org.au>
Fri, 8 Feb 2019 00:58:02 +0000 (11:58 +1100)
committerStephen Rothwell <sfr@canb.auug.org.au>
Fri, 8 Feb 2019 00:58:06 +0000 (11:58 +1100)
32 files changed:
1  2 
Documentation/devicetree/bindings/vendor-prefixes.txt
MAINTAINERS
drivers/acpi/pmic/intel_pmic_xpower.c
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
drivers/gpu/drm/amd/amdgpu/nbio_v7_4.c
drivers/gpu/drm/amd/amdgpu/soc15.c
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
drivers/gpu/drm/amd/display/dc/dce/dce_clk_mgr.c
drivers/gpu/drm/bridge/tc358767.c
drivers/gpu/drm/drm_fb_helper.c
drivers/gpu/drm/drm_modes.c
drivers/gpu/drm/i915/gvt/handlers.c
drivers/gpu/drm/i915/gvt/hypercall.h
drivers/gpu/drm/i915/gvt/kvmgt.c
drivers/gpu/drm/i915/gvt/mpt.h
drivers/gpu/drm/i915/gvt/scheduler.c
drivers/gpu/drm/i915/gvt/scheduler.h
drivers/gpu/drm/i915/i915_pmu.c
drivers/gpu/drm/meson/meson_crtc.c
drivers/gpu/drm/meson/meson_drv.c
drivers/gpu/drm/msm/msm_drv.h
drivers/gpu/drm/msm/msm_gem.c
drivers/gpu/drm/qxl/qxl_drv.c
drivers/gpu/drm/qxl/qxl_prime.c
drivers/gpu/drm/rockchip/rockchip_rgb.c
drivers/gpu/drm/sun4i/sun4i_backend.c
drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c
drivers/gpu/drm/sun4i/sun4i_tcon.c
drivers/gpu/drm/virtio/virtgpu_drv.c
drivers/gpu/drm/virtio/virtgpu_drv.h
drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
include/drm/drm_dp_mst_helper.h

diff --cc MAINTAINERS
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -38,10 -43,11 +43,11 @@@ enum hypervisor_type 
   * both Xen and KVM by providing dedicated hypervisor-related MPT modules.
   */
  struct intel_gvt_mpt {
+       enum hypervisor_type type;
        int (*host_init)(struct device *dev, void *gvt, const void *ops);
-       void (*host_exit)(struct device *dev, void *gvt);
+       void (*host_exit)(struct device *dev);
        int (*attach_vgpu)(void *vgpu, unsigned long *handle);
 -      void (*detach_vgpu)(unsigned long handle);
 +      void (*detach_vgpu)(void *vgpu);
        int (*inject_msi)(unsigned long handle, u32 addr, u16 data);
        unsigned long (*from_virt_to_mfn)(void *p);
        int (*enable_page_track)(unsigned long handle, u64 gfn);
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -35,13 -37,36 +37,22 @@@ int qxl_gem_prime_pin(struct drm_gem_ob
  
  void qxl_gem_prime_unpin(struct drm_gem_object *obj)
  {
-       WARN_ONCE(1, "not implemented");
+       struct qxl_bo *bo = gem_to_qxl_bo(obj);
+       qxl_bo_unpin(bo);
  }
  
 -struct sg_table *qxl_gem_prime_get_sg_table(struct drm_gem_object *obj)
 -{
 -      WARN_ONCE(1, "not implemented");
 -      return ERR_PTR(-ENOSYS);
 -}
 -
 -struct drm_gem_object *qxl_gem_prime_import_sg_table(
 -      struct drm_device *dev, struct dma_buf_attachment *attach,
 -      struct sg_table *table)
 -{
 -      WARN_ONCE(1, "not implemented");
 -      return ERR_PTR(-ENOSYS);
 -}
 -
  void *qxl_gem_prime_vmap(struct drm_gem_object *obj)
  {
-       WARN_ONCE(1, "not implemented");
-       return ERR_PTR(-ENOSYS);
+       struct qxl_bo *bo = gem_to_qxl_bo(obj);
+       void *ptr;
+       int ret;
+       ret = qxl_bo_kmap(bo, &ptr);
+       if (ret < 0)
+               return ERR_PTR(ret);
+       return ptr;
  }
  
  void qxl_gem_prime_vunmap(struct drm_gem_object *obj, void *vaddr)
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -616,17 -641,118 +641,119 @@@ void drm_dp_mst_dump_topology(struct se
                              struct drm_dp_mst_topology_mgr *mgr);
  
  void drm_dp_mst_topology_mgr_suspend(struct drm_dp_mst_topology_mgr *mgr);
 -int drm_dp_mst_topology_mgr_resume(struct drm_dp_mst_topology_mgr *mgr);
 +int __must_check
 +drm_dp_mst_topology_mgr_resume(struct drm_dp_mst_topology_mgr *mgr);
  struct drm_dp_mst_topology_state *drm_atomic_get_mst_topology_state(struct drm_atomic_state *state,
                                                                    struct drm_dp_mst_topology_mgr *mgr);
- int drm_dp_atomic_find_vcpi_slots(struct drm_atomic_state *state,
-                                 struct drm_dp_mst_topology_mgr *mgr,
-                                 struct drm_dp_mst_port *port, int pbn);
- int drm_dp_atomic_release_vcpi_slots(struct drm_atomic_state *state,
-                                    struct drm_dp_mst_topology_mgr *mgr,
-                                    int slots);
+ int __must_check
+ drm_dp_atomic_find_vcpi_slots(struct drm_atomic_state *state,
+                             struct drm_dp_mst_topology_mgr *mgr,
+                             struct drm_dp_mst_port *port, int pbn);
+ int __must_check
+ drm_dp_atomic_release_vcpi_slots(struct drm_atomic_state *state,
+                                struct drm_dp_mst_topology_mgr *mgr,
+                                struct drm_dp_mst_port *port);
  int drm_dp_send_power_updown_phy(struct drm_dp_mst_topology_mgr *mgr,
                                 struct drm_dp_mst_port *port, bool power_up);
+ int __must_check drm_dp_mst_atomic_check(struct drm_atomic_state *state);
+ void drm_dp_mst_get_port_malloc(struct drm_dp_mst_port *port);
+ void drm_dp_mst_put_port_malloc(struct drm_dp_mst_port *port);
+ extern const struct drm_private_state_funcs drm_dp_mst_topology_state_funcs;
+ /**
+  * __drm_dp_mst_state_iter_get - private atomic state iterator function for
+  * macro-internal use
+  * @state: &struct drm_atomic_state pointer
+  * @mgr: pointer to the &struct drm_dp_mst_topology_mgr iteration cursor
+  * @old_state: optional pointer to the old &struct drm_dp_mst_topology_state
+  * iteration cursor
+  * @new_state: optional pointer to the new &struct drm_dp_mst_topology_state
+  * iteration cursor
+  * @i: int iteration cursor, for macro-internal use
+  *
+  * Used by for_each_oldnew_mst_mgr_in_state(),
+  * for_each_old_mst_mgr_in_state(), and for_each_new_mst_mgr_in_state(). Don't
+  * call this directly.
+  *
+  * Returns:
+  * True if the current &struct drm_private_obj is a &struct
+  * drm_dp_mst_topology_mgr, false otherwise.
+  */
+ static inline bool
+ __drm_dp_mst_state_iter_get(struct drm_atomic_state *state,
+                           struct drm_dp_mst_topology_mgr **mgr,
+                           struct drm_dp_mst_topology_state **old_state,
+                           struct drm_dp_mst_topology_state **new_state,
+                           int i)
+ {
+       struct __drm_private_objs_state *objs_state = &state->private_objs[i];
+       if (objs_state->ptr->funcs != &drm_dp_mst_topology_state_funcs)
+               return false;
+       *mgr = to_dp_mst_topology_mgr(objs_state->ptr);
+       if (old_state)
+               *old_state = to_dp_mst_topology_state(objs_state->old_state);
+       if (new_state)
+               *new_state = to_dp_mst_topology_state(objs_state->new_state);
+       return true;
+ }
+ /**
+  * for_each_oldnew_mst_mgr_in_state - iterate over all DP MST topology
+  * managers in an atomic update
+  * @__state: &struct drm_atomic_state pointer
+  * @mgr: &struct drm_dp_mst_topology_mgr iteration cursor
+  * @old_state: &struct drm_dp_mst_topology_state iteration cursor for the old
+  * state
+  * @new_state: &struct drm_dp_mst_topology_state iteration cursor for the new
+  * state
+  * @__i: int iteration cursor, for macro-internal use
+  *
+  * This iterates over all DRM DP MST topology managers in an atomic update,
+  * tracking both old and new state. This is useful in places where the state
+  * delta needs to be considered, for example in atomic check functions.
+  */
+ #define for_each_oldnew_mst_mgr_in_state(__state, mgr, old_state, new_state, __i) \
+       for ((__i) = 0; (__i) < (__state)->num_private_objs; (__i)++) \
+               for_each_if(__drm_dp_mst_state_iter_get((__state), &(mgr), &(old_state), &(new_state), (__i)))
+ /**
+  * for_each_old_mst_mgr_in_state - iterate over all DP MST topology managers
+  * in an atomic update
+  * @__state: &struct drm_atomic_state pointer
+  * @mgr: &struct drm_dp_mst_topology_mgr iteration cursor
+  * @old_state: &struct drm_dp_mst_topology_state iteration cursor for the old
+  * state
+  * @__i: int iteration cursor, for macro-internal use
+  *
+  * This iterates over all DRM DP MST topology managers in an atomic update,
+  * tracking only the old state. This is useful in disable functions, where we
+  * need the old state the hardware is still in.
+  */
+ #define for_each_old_mst_mgr_in_state(__state, mgr, old_state, __i) \
+       for ((__i) = 0; (__i) < (__state)->num_private_objs; (__i)++) \
+               for_each_if(__drm_dp_mst_state_iter_get((__state), &(mgr), &(old_state), NULL, (__i)))
+ /**
+  * for_each_new_mst_mgr_in_state - iterate over all DP MST topology managers
+  * in an atomic update
+  * @__state: &struct drm_atomic_state pointer
+  * @mgr: &struct drm_dp_mst_topology_mgr iteration cursor
+  * @new_state: &struct drm_dp_mst_topology_state iteration cursor for the new
+  * state
+  * @__i: int iteration cursor, for macro-internal use
+  *
+  * This iterates over all DRM DP MST topology managers in an atomic update,
+  * tracking only the new state. This is useful in enable functions, where we
+  * need the new state the hardware should be in when the atomic commit
+  * operation has completed.
+  */
+ #define for_each_new_mst_mgr_in_state(__state, mgr, new_state, __i) \
+       for ((__i) = 0; (__i) < (__state)->num_private_objs; (__i)++) \
+               for_each_if(__drm_dp_mst_state_iter_get((__state), &(mgr), NULL, &(new_state), (__i)))
  
  #endif