diff options
| author | Brian Starkey <brian.starkey@arm.com> | 2017-03-29 19:42:32 +0300 | 
|---|---|---|
| committer | Liviu Dudau <Liviu.Dudau@arm.com> | 2018-06-20 17:27:49 +0300 | 
| commit | 935774cd71fe604cc8ed24adcb507d7784255672 (patch) | |
| tree | 61aa8d66732c288df25d002c17620521b0900fa1 /drivers/gpu/drm/drm_connector.c | |
| parent | f664a52695429b68afb4e130a0f69cd5fd1fec86 (diff) | |
| download | linux-935774cd71fe604cc8ed24adcb507d7784255672.tar.xz | |
drm: Add writeback connector type
Writeback connectors represent writeback engines which can write the
CRTC output to a memory framebuffer. Add a writeback connector type and
related support functions.
Drivers should initialize a writeback connector with
drm_writeback_connector_init() which takes care of setting up all the
writeback-specific details on top of the normal functionality of
drm_connector_init().
Writeback connectors have a WRITEBACK_FB_ID property, used to set the
output framebuffer, and a WRITEBACK_PIXEL_FORMATS blob used to expose the
supported writeback formats to userspace.
When a framebuffer is attached to a writeback connector with the
WRITEBACK_FB_ID property, it is used only once (for the commit in which
it was included), and userspace can never read back the value of
WRITEBACK_FB_ID. WRITEBACK_FB_ID can only be set if the connector is
attached to a CRTC.
Changes since v1:
 - Added drm_writeback.c + documentation
 - Added helper to initialize writeback connector in one go
 - Added core checks
 - Squashed into a single commit
 - Dropped the client cap
 - Writeback framebuffers are no longer persistent
Changes since v2:
 Daniel Vetter:
 - Subclass drm_connector to drm_writeback_connector
 - Relax check to allow CRTC to be set without an FB
 - Add some writeback_ prefixes
 - Drop PIXEL_FORMATS_SIZE property, as it was unnecessary
 Gustavo Padovan:
 - Add drm_writeback_job to handle writeback signalling centrally
Changes since v3:
 - Rebased
 - Rename PIXEL_FORMATS -> WRITEBACK_PIXEL_FORMATS
Chances since v4:
 - Embed a drm_encoder inside the drm_writeback_connector to
   reduce the amount of boilerplate code required from the drivers
   that are using it.
Changes since v5:
 - Added Rob Clark's atomic_commit() vfunc to connector helper
   funcs, so that writeback jobs are committed from atomic helpers
 - Updated create_writeback_properties() signature to return an
   error code rather than a boolean false for failure.
 - Free writeback job with the connector state rather than when
   doing the cleanup_work()
Changes since v7:
 - fix extraneous use of out_fence that is only introduced in a
   subsequent patch.
Changes since v8:
 - whitespace changes pull from subsequent patch
Changes since v9:
 - Revert the v6 changes that free the writeback job in the connector
   state cleanup and return to doing it in the cleanup_work() function
Signed-off-by: Brian Starkey <brian.starkey@arm.com>
[rebased and fixed conflicts]
Signed-off-by: Mihail Atanassov <mihail.atanassov@arm.com>
[rebased and added atomic_commit() vfunc for writeback jobs]
Signed-off-by: Rob Clark <robdclark@gmail.com>
Signed-off-by: Liviu Dudau <liviu.dudau@arm.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
Link: https://patchwork.freedesktop.org/patch/229037/
Diffstat (limited to 'drivers/gpu/drm/drm_connector.c')
| -rw-r--r-- | drivers/gpu/drm/drm_connector.c | 4 | 
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c index 549b89501e01..2f9ebddd178e 100644 --- a/drivers/gpu/drm/drm_connector.c +++ b/drivers/gpu/drm/drm_connector.c @@ -87,6 +87,7 @@ static struct drm_conn_prop_enum_list drm_connector_enum_list[] = {  	{ DRM_MODE_CONNECTOR_VIRTUAL, "Virtual" },  	{ DRM_MODE_CONNECTOR_DSI, "DSI" },  	{ DRM_MODE_CONNECTOR_DPI, "DPI" }, +	{ DRM_MODE_CONNECTOR_WRITEBACK, "Writeback" },  };  void drm_connector_ida_init(void) @@ -253,7 +254,8 @@ int drm_connector_init(struct drm_device *dev,  	config->num_connector++;  	spin_unlock_irq(&config->connector_list_lock); -	if (connector_type != DRM_MODE_CONNECTOR_VIRTUAL) +	if (connector_type != DRM_MODE_CONNECTOR_VIRTUAL && +	    connector_type != DRM_MODE_CONNECTOR_WRITEBACK)  		drm_object_attach_property(&connector->base,  					      config->edid_property,  					      0);  | 
