Global thermonuclear modeflip? This patchset is the merging of Ville's atomic modeset ioctl, and the drm_{crtc,plane}_state stuff from my original nuclear pageflip RFC. It is currently in a fairly "rough draft" state, with a few areas that I need to revisit. But I think it is far enough along to give folks a peak at what I have in mind. Compared to my earlier nuclear pageflip RFC, there is now a set of drm_atomic helpers which do most of the non-hw-specific work for the different drivers. Unlike the crtc helpers, it is intended that the atomic helpers can be used piecemeal by the drivers, either using all or overriding parts as needed. A naive driver, with no special constraints or hw support for atomic updates may simply add the following to their driver struct: .atomic_begin = drm_atomic_helper_begin, .atomic_set_event = drm_atomic_helper_set_event, .atomic_check = drm_atomic_helper_check, .atomic_commit = drm_atomic_helper_commit, .atomic_end = drm_atomic_helper_end, .atomic_helpers = &drm_atomic_helper_funcs, In addition, if you're plane/crtc doesn't already have it's own custom properties, then add to your plane/crtc_funcs: .set_property = drm_atomic_helper_{plane,crtc}_set_property, A driver which can have (for example) conflicting modes across multiple crtcs (for example, bandwidth limitations or clock/pll configuration restrictions), can wrap drm_atomic_helper_check() with their own driver specific .atomic_check() function. A driver which can support true atomic updates can wrap drm_atomic_helper_commit(). A driver with custom properties should override the appropriate get_state(), check_state(), and commit_state() functions in .atomic_helpers if it uses the drm-atomic-helpers. Otherwise it is free to use &drm_atomic_helper_funcs as-is. TODO: * revisit fb refcnting * fix drivers with custom plane or crtc properties Rob Clark (9): drm: add atomic fxns drm: add object property type drm: add DRM_MODE_PROP_DYNAMIC property flag drm: add DRM_MODE_PROP_SIGNED property flag drm: helpers to find mode objects (BEFORE drm: split property values out) drm: split propvals out and blob property support drm: convert plane to properties/state drm: convert crtc to properties/state ARM: add get_user() support for 8 byte types Ville Syrjälä (3): drm: Allow drm_mode_object_find() to look up an object of any type drm: Refactor object property check code drm: Atomic modeset ioctl arch/arm/include/asm/uaccess.h | 18 +- arch/arm/lib/getuser.S | 17 +- drivers/gpu/drm/Makefile | 3 +- drivers/gpu/drm/ast/ast_drv.c | 6 + drivers/gpu/drm/ast/ast_drv.h | 1 + drivers/gpu/drm/ast/ast_mode.c | 1 + drivers/gpu/drm/cirrus/cirrus_drv.c | 6 + drivers/gpu/drm/cirrus/cirrus_drv.h | 1 + drivers/gpu/drm/cirrus/cirrus_mode.c | 1 + drivers/gpu/drm/drm_atomic_helper.c | 456 ++++++++++ drivers/gpu/drm/drm_crtc.c | 1219 ++++++++++++++++++--------- drivers/gpu/drm/drm_drv.c | 1 + drivers/gpu/drm/drm_fb_helper.c | 20 +- drivers/gpu/drm/exynos/exynos_drm_crtc.c | 13 +- drivers/gpu/drm/exynos/exynos_drm_drv.c | 7 + drivers/gpu/drm/exynos/exynos_drm_encoder.c | 6 +- drivers/gpu/drm/exynos/exynos_drm_plane.c | 17 +- drivers/gpu/drm/gma500/cdv_intel_crt.c | 4 +- drivers/gpu/drm/gma500/cdv_intel_display.c | 1 + drivers/gpu/drm/gma500/cdv_intel_dp.c | 7 +- drivers/gpu/drm/gma500/cdv_intel_hdmi.c | 7 +- drivers/gpu/drm/gma500/cdv_intel_lvds.c | 10 +- drivers/gpu/drm/gma500/mdfld_dsi_output.c | 11 +- drivers/gpu/drm/gma500/psb_drv.c | 7 + drivers/gpu/drm/gma500/psb_drv.h | 1 + drivers/gpu/drm/gma500/psb_intel_display.c | 1 + drivers/gpu/drm/gma500/psb_intel_drv.h | 4 +- drivers/gpu/drm/gma500/psb_intel_lvds.c | 10 +- drivers/gpu/drm/gma500/psb_intel_sdvo.c | 23 +- drivers/gpu/drm/i2c/ch7006_drv.c | 4 +- drivers/gpu/drm/i915/i915_drv.c | 8 + drivers/gpu/drm/i915/intel_crt.c | 4 +- drivers/gpu/drm/i915/intel_display.c | 4 +- drivers/gpu/drm/i915/intel_dp.c | 7 +- drivers/gpu/drm/i915/intel_drv.h | 1 + drivers/gpu/drm/i915/intel_hdmi.c | 7 +- drivers/gpu/drm/i915/intel_lvds.c | 4 +- drivers/gpu/drm/i915/intel_sdvo.c | 23 +- drivers/gpu/drm/i915/intel_sprite.c | 19 +- drivers/gpu/drm/i915/intel_tv.c | 11 +- drivers/gpu/drm/mgag200/mgag200_drv.c | 7 + drivers/gpu/drm/mgag200/mgag200_drv.h | 1 + drivers/gpu/drm/mgag200/mgag200_mode.c | 1 + drivers/gpu/drm/msm/mdp4/mdp4_crtc.c | 11 +- drivers/gpu/drm/msm/mdp4/mdp4_plane.c | 20 +- drivers/gpu/drm/msm/msm_drv.c | 6 + drivers/gpu/drm/msm/msm_drv.h | 1 + drivers/gpu/drm/nouveau/dispnv04/crtc.c | 1 + drivers/gpu/drm/nouveau/dispnv04/tvnv17.c | 3 +- drivers/gpu/drm/nouveau/nouveau_connector.c | 7 +- drivers/gpu/drm/nouveau/nouveau_drm.c | 7 + drivers/gpu/drm/nouveau/nouveau_drm.h | 1 + drivers/gpu/drm/nouveau/nv50_display.c | 1 + drivers/gpu/drm/omapdrm/omap_crtc.c | 18 +- drivers/gpu/drm/omapdrm/omap_drv.c | 12 +- drivers/gpu/drm/omapdrm/omap_drv.h | 5 +- drivers/gpu/drm/omapdrm/omap_plane.c | 34 +- drivers/gpu/drm/qxl/qxl_display.c | 6 +- drivers/gpu/drm/qxl/qxl_drv.c | 9 + drivers/gpu/drm/radeon/radeon_connectors.c | 9 +- drivers/gpu/drm/radeon/radeon_display.c | 2 + drivers/gpu/drm/radeon/radeon_drv.c | 9 + drivers/gpu/drm/rcar-du/rcar_du_crtc.c | 2 + drivers/gpu/drm/rcar-du/rcar_du_drv.c | 7 + drivers/gpu/drm/rcar-du/rcar_du_lvdscon.c | 3 +- drivers/gpu/drm/rcar-du/rcar_du_plane.c | 9 +- drivers/gpu/drm/rcar-du/rcar_du_vgacon.c | 3 +- drivers/gpu/drm/shmobile/shmob_drm_crtc.c | 8 +- drivers/gpu/drm/shmobile/shmob_drm_drv.c | 7 + drivers/gpu/drm/shmobile/shmob_drm_plane.c | 6 +- drivers/gpu/drm/tilcdc/tilcdc_crtc.c | 1 + drivers/gpu/drm/tilcdc/tilcdc_drv.c | 6 + drivers/gpu/drm/tilcdc/tilcdc_drv.h | 1 + drivers/gpu/drm/tilcdc/tilcdc_slave.c | 3 +- drivers/gpu/drm/udl/udl_connector.c | 6 +- drivers/gpu/drm/udl/udl_drv.c | 8 + drivers/gpu/drm/udl/udl_modeset.c | 2 + drivers/gpu/drm/vmwgfx/vmwgfx_drv.c | 7 + drivers/gpu/drm/vmwgfx/vmwgfx_drv.h | 1 + drivers/gpu/drm/vmwgfx/vmwgfx_kms.c | 4 +- drivers/gpu/drm/vmwgfx/vmwgfx_kms.h | 4 +- drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c | 1 + drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c | 1 + drivers/gpu/host1x/drm/dc.c | 17 +- drivers/gpu/host1x/drm/drm.c | 7 + drivers/gpu/host1x/drm/drm.h | 1 + drivers/staging/imx-drm/imx-drm-core.c | 8 + drivers/staging/imx-drm/ipuv3-crtc.c | 1 + include/drm/drmP.h | 83 ++ include/drm/drm_atomic_helper.h | 152 ++++ include/drm/drm_crtc.h | 243 +++++- include/uapi/drm/drm.h | 12 + include/uapi/drm/drm_mode.h | 28 + 93 files changed, 2242 insertions(+), 542 deletions(-) create mode 100644 drivers/gpu/drm/drm_atomic_helper.c create mode 100644 include/drm/drm_atomic_helper.h -- 1.8.3.1 _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel