diff options
| author | Dave Airlie <airlied@redhat.com> | 2017-12-04 05:38:52 +1000 | 
|---|---|---|
| committer | Dave Airlie <airlied@redhat.com> | 2017-12-04 05:42:49 +1000 | 
| commit | 2c1c55cb75a9c72f9726fabb8c3607947711a8df (patch) | |
| tree | fa835b954149545970eaa256107876d9a24bbf28 /drivers/gpu/drm/vc4 | |
| parent | ae64f9bd1d3621b5e60d7363bc20afb46aede215 (diff) | |
| parent | 2f51be0945b9e0b9baafe47289c802be6d4c7980 (diff) | |
| download | blackbird-op-linux-2c1c55cb75a9c72f9726fabb8c3607947711a8df.tar.gz blackbird-op-linux-2c1c55cb75a9c72f9726fabb8c3607947711a8df.zip  | |
Merge tag 'drm-misc-next-2017-11-30' of git://anongit.freedesktop.org/drm/drm-misc into drm-next
Cross-subsystem Changes:
- device tree doc for the Mitsubishi AA070MC01 and Tianma TM070RVHG71
panels (Lukasz Majewski) and for a 2nd endpoint on stm32 (Philippe Cornu)
Core Changes:
The most important changes are:
- Add drm_driver .last_close and .output_poll_changed helpers to reduce
fbdev emulation footprint in drivers (Noralf)
- Fix plane clipping in core and for vmwgfx (Ville)
Then we have a bunch of of improvement for print and debug such as the
addition of a framebuffer debugfs file. ELD connector, HDMI and
improvements.  And a bunch of misc improvements, clean ups and style
changes and doc updates
[airlied: drop eld bits from amdgpu_dm]
Driver Changes:
- sii8620: filter unsupported modes and add DVI mode support (Maciej Purski)
- rockchip: analogix_dp: Remove unnecessary init code (Jeffy Chen)
- virtio, cirrus: add fb create_handle support to enable screenshots(Lepton Wu)
- virtio: replace reference/unreference with get/put (Aastha Gupta)
- vc4, gma500: Convert timers to use timer_setup() (Kees Cook)
- vc4: Reject HDMI modes with too high of clocks (Eric)
- vc4: Add support for more pixel formats (Dave Stevenson)
- stm: dsi: Rename driver name to "stm32-display-dsi" (Philippe Cornu)
- stm: ltdc: add a 2nd endpoint (Philippe Cornu)
- via: use monotonic time for VIA_WAIT_IRQ (Arnd Bergmann)
* tag 'drm-misc-next-2017-11-30' of git://anongit.freedesktop.org/drm/drm-misc: (96 commits)
  drm/bridge: tc358767: add copyright lines
  MAINTAINERS: change maintainer for Rockchip drm drivers
  drm/vblank: Fix vblank timestamp debugs
  drm/via: use monotonic time for VIA_WAIT_IRQ
  dma-buf: Fix ifnullfree.cocci warnings
  drm/printer: Add drm_vprintf()
  drm/edid: Allow HDMI infoframe without VIC or S3D
  video/hdmi: Allow "empty" HDMI infoframes
  dma-buf/fence: Fix lock inversion within dma-fence-array
  drm/sti: Handle return value of platform_get_irq_byname
  drm/vc4: Add support for NV21 and NV61.
  drm/vc4: Use .pixel_order instead of custom .flip_cbcr
  drm/vc4: Add support for DRM_FORMAT_RGB888 and DRM_FORMAT_BGR888
  drm: Move drm_plane_helper_check_state() into drm_atomic_helper.c
  drm: Check crtc_state->enable rather than crtc->enabled in drm_plane_helper_check_state()
  drm/vmwgfx: Try to fix plane clipping
  drm/vmwgfx: Use drm_plane_helper_check_state()
  drm/vmwgfx: Remove bogus crtc coords vs fb size check
  gpu: gma500: remove unneeded DRIVER_LICENSE #define
  drm: don't link DP aux i2c adapter to the hardware device node
  ...
Diffstat (limited to 'drivers/gpu/drm/vc4')
| -rw-r--r-- | drivers/gpu/drm/vc4/vc4_hdmi.c | 16 | ||||
| -rw-r--r-- | drivers/gpu/drm/vc4/vc4_plane.c | 38 | 
2 files changed, 41 insertions, 13 deletions
diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c index 0b2088264039..984501e3f0b0 100644 --- a/drivers/gpu/drm/vc4/vc4_hdmi.c +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c @@ -287,7 +287,6 @@ static int vc4_hdmi_connector_get_modes(struct drm_connector *connector)  	drm_mode_connector_update_edid_property(connector, edid);  	ret = drm_add_edid_modes(connector, edid); -	drm_edid_to_eld(connector, edid);  	kfree(edid);  	return ret; @@ -695,7 +694,22 @@ static void vc4_hdmi_encoder_enable(struct drm_encoder *encoder)  	}  } +static enum drm_mode_status +vc4_hdmi_encoder_mode_valid(struct drm_encoder *crtc, +			    const struct drm_display_mode *mode) +{ +	/* HSM clock must be 108% of the pixel clock.  Additionally, +	 * the AXI clock needs to be at least 25% of pixel clock, but +	 * HSM ends up being the limiting factor. +	 */ +	if (mode->clock > HSM_CLOCK_FREQ / (1000 * 108 / 100)) +		return MODE_CLOCK_HIGH; + +	return MODE_OK; +} +  static const struct drm_encoder_helper_funcs vc4_hdmi_encoder_helper_funcs = { +	.mode_valid = vc4_hdmi_encoder_mode_valid,  	.disable = vc4_hdmi_encoder_disable,  	.enable = vc4_hdmi_encoder_enable,  }; diff --git a/drivers/gpu/drm/vc4/vc4_plane.c b/drivers/gpu/drm/vc4/vc4_plane.c index 423a23ed8fc2..515f97997624 100644 --- a/drivers/gpu/drm/vc4/vc4_plane.c +++ b/drivers/gpu/drm/vc4/vc4_plane.c @@ -86,7 +86,6 @@ static const struct hvs_format {  	u32 hvs; /* HVS_FORMAT_* */  	u32 pixel_order;  	bool has_alpha; -	bool flip_cbcr;  } hvs_formats[] = {  	{  		.drm = DRM_FORMAT_XRGB8888, .hvs = HVS_PIXEL_FORMAT_RGBA8888, @@ -121,30 +120,52 @@ static const struct hvs_format {  		.pixel_order = HVS_PIXEL_ORDER_ABGR, .has_alpha = false,  	},  	{ +		.drm = DRM_FORMAT_RGB888, .hvs = HVS_PIXEL_FORMAT_RGB888, +		.pixel_order = HVS_PIXEL_ORDER_XRGB, .has_alpha = false, +	}, +	{ +		.drm = DRM_FORMAT_BGR888, .hvs = HVS_PIXEL_FORMAT_RGB888, +		.pixel_order = HVS_PIXEL_ORDER_XBGR, .has_alpha = false, +	}, +	{  		.drm = DRM_FORMAT_YUV422,  		.hvs = HVS_PIXEL_FORMAT_YCBCR_YUV422_3PLANE, +		.pixel_order = HVS_PIXEL_ORDER_XYCBCR,  	},  	{  		.drm = DRM_FORMAT_YVU422,  		.hvs = HVS_PIXEL_FORMAT_YCBCR_YUV422_3PLANE, -		.flip_cbcr = true, +		.pixel_order = HVS_PIXEL_ORDER_XYCRCB,  	},  	{  		.drm = DRM_FORMAT_YUV420,  		.hvs = HVS_PIXEL_FORMAT_YCBCR_YUV420_3PLANE, +		.pixel_order = HVS_PIXEL_ORDER_XYCBCR,  	},  	{  		.drm = DRM_FORMAT_YVU420,  		.hvs = HVS_PIXEL_FORMAT_YCBCR_YUV420_3PLANE, -		.flip_cbcr = true, +		.pixel_order = HVS_PIXEL_ORDER_XYCRCB,  	},  	{  		.drm = DRM_FORMAT_NV12,  		.hvs = HVS_PIXEL_FORMAT_YCBCR_YUV420_2PLANE, +		.pixel_order = HVS_PIXEL_ORDER_XYCBCR, +	}, +	{ +		.drm = DRM_FORMAT_NV21, +		.hvs = HVS_PIXEL_FORMAT_YCBCR_YUV420_2PLANE, +		.pixel_order = HVS_PIXEL_ORDER_XYCRCB,  	},  	{  		.drm = DRM_FORMAT_NV16,  		.hvs = HVS_PIXEL_FORMAT_YCBCR_YUV422_2PLANE, +		.pixel_order = HVS_PIXEL_ORDER_XYCBCR, +	}, +	{ +		.drm = DRM_FORMAT_NV61, +		.hvs = HVS_PIXEL_FORMAT_YCBCR_YUV422_2PLANE, +		.pixel_order = HVS_PIXEL_ORDER_XYCRCB,  	},  }; @@ -617,15 +638,8 @@ static int vc4_plane_mode_set(struct drm_plane *plane,  	 * The pointers may be any byte address.  	 */  	vc4_state->ptr0_offset = vc4_state->dlist_count; -	if (!format->flip_cbcr) { -		for (i = 0; i < num_planes; i++) -			vc4_dlist_write(vc4_state, vc4_state->offsets[i]); -	} else { -		WARN_ON_ONCE(num_planes != 3); -		vc4_dlist_write(vc4_state, vc4_state->offsets[0]); -		vc4_dlist_write(vc4_state, vc4_state->offsets[2]); -		vc4_dlist_write(vc4_state, vc4_state->offsets[1]); -	} +	for (i = 0; i < num_planes; i++) +		vc4_dlist_write(vc4_state, vc4_state->offsets[i]);  	/* Pointer Context Word 0/1/2: Written by the HVS */  	for (i = 0; i < num_planes; i++)  | 

