Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 528ffbfe authored by Dave Airlie's avatar Dave Airlie
Browse files

Merge tag 'drm-misc-fixes-2019-04-25' of git://anongit.freedesktop.org/drm/drm-misc into drm-fixes



- sun4i: Fix module loading / unloading
- vc4: Fix a compilation error and memory leak
- dw-hdmi: Fix an overflow on Rockchip and SCDC configuration

Signed-off-by: default avatarDave Airlie <airlied@redhat.com>

From: Maxime Ripard <maxime.ripard@bootlin.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20190425132739.pngmfiqucqmulxkz@flea
parents f21492d3 c4cba44e
Loading
Loading
Loading
Loading
+12 −4
Original line number Original line Diff line number Diff line
@@ -1046,6 +1046,10 @@ static bool dw_hdmi_support_scdc(struct dw_hdmi *hdmi)
	if (hdmi->version < 0x200a)
	if (hdmi->version < 0x200a)
		return false;
		return false;


	/* Disable if no DDC bus */
	if (!hdmi->ddc)
		return false;

	/* Disable if SCDC is not supported, or if an HF-VSDB block is absent */
	/* Disable if SCDC is not supported, or if an HF-VSDB block is absent */
	if (!display->hdmi.scdc.supported ||
	if (!display->hdmi.scdc.supported ||
	    !display->hdmi.scdc.scrambling.supported)
	    !display->hdmi.scdc.scrambling.supported)
@@ -1684,13 +1688,13 @@ static void hdmi_av_composer(struct dw_hdmi *hdmi,
			 * Source Devices compliant shall set the
			 * Source Devices compliant shall set the
			 * Source Version = 1.
			 * Source Version = 1.
			 */
			 */
			drm_scdc_readb(&hdmi->i2c->adap, SCDC_SINK_VERSION,
			drm_scdc_readb(hdmi->ddc, SCDC_SINK_VERSION,
				       &bytes);
				       &bytes);
			drm_scdc_writeb(&hdmi->i2c->adap, SCDC_SOURCE_VERSION,
			drm_scdc_writeb(hdmi->ddc, SCDC_SOURCE_VERSION,
				min_t(u8, bytes, SCDC_MIN_SOURCE_VERSION));
				min_t(u8, bytes, SCDC_MIN_SOURCE_VERSION));


			/* Enabled Scrambling in the Sink */
			/* Enabled Scrambling in the Sink */
			drm_scdc_set_scrambling(&hdmi->i2c->adap, 1);
			drm_scdc_set_scrambling(hdmi->ddc, 1);


			/*
			/*
			 * To activate the scrambler feature, you must ensure
			 * To activate the scrambler feature, you must ensure
@@ -1706,7 +1710,7 @@ static void hdmi_av_composer(struct dw_hdmi *hdmi,
			hdmi_writeb(hdmi, 0, HDMI_FC_SCRAMBLER_CTRL);
			hdmi_writeb(hdmi, 0, HDMI_FC_SCRAMBLER_CTRL);
			hdmi_writeb(hdmi, (u8)~HDMI_MC_SWRSTZ_TMDSSWRST_REQ,
			hdmi_writeb(hdmi, (u8)~HDMI_MC_SWRSTZ_TMDSSWRST_REQ,
				    HDMI_MC_SWRSTZ);
				    HDMI_MC_SWRSTZ);
			drm_scdc_set_scrambling(&hdmi->i2c->adap, 0);
			drm_scdc_set_scrambling(hdmi->ddc, 0);
		}
		}
	}
	}


@@ -1800,6 +1804,8 @@ static void dw_hdmi_clear_overflow(struct dw_hdmi *hdmi)
	 * iteration for others.
	 * iteration for others.
	 * The Amlogic Meson GX SoCs (v2.01a) have been identified as needing
	 * The Amlogic Meson GX SoCs (v2.01a) have been identified as needing
	 * the workaround with a single iteration.
	 * the workaround with a single iteration.
	 * The Rockchip RK3288 SoC (v2.00a) and RK3328/RK3399 SoCs (v2.11a) have
	 * been identified as needing the workaround with a single iteration.
	 */
	 */


	switch (hdmi->version) {
	switch (hdmi->version) {
@@ -1808,7 +1814,9 @@ static void dw_hdmi_clear_overflow(struct dw_hdmi *hdmi)
		break;
		break;
	case 0x131a:
	case 0x131a:
	case 0x132a:
	case 0x132a:
	case 0x200a:
	case 0x201a:
	case 0x201a:
	case 0x211a:
	case 0x212a:
	case 0x212a:
		count = 1;
		count = 1;
		break;
		break;
+9 −0
Original line number Original line Diff line number Diff line
@@ -16,6 +16,7 @@
#include <linux/of_reserved_mem.h>
#include <linux/of_reserved_mem.h>


#include <drm/drmP.h>
#include <drm/drmP.h>
#include <drm/drm_atomic_helper.h>
#include <drm/drm_fb_cma_helper.h>
#include <drm/drm_fb_cma_helper.h>
#include <drm/drm_fb_helper.h>
#include <drm/drm_fb_helper.h>
#include <drm/drm_gem_cma_helper.h>
#include <drm/drm_gem_cma_helper.h>
@@ -85,6 +86,8 @@ static int sun4i_drv_bind(struct device *dev)
		ret = -ENOMEM;
		ret = -ENOMEM;
		goto free_drm;
		goto free_drm;
	}
	}

	dev_set_drvdata(dev, drm);
	drm->dev_private = drv;
	drm->dev_private = drv;
	INIT_LIST_HEAD(&drv->frontend_list);
	INIT_LIST_HEAD(&drv->frontend_list);
	INIT_LIST_HEAD(&drv->engine_list);
	INIT_LIST_HEAD(&drv->engine_list);
@@ -144,8 +147,12 @@ static void sun4i_drv_unbind(struct device *dev)


	drm_dev_unregister(drm);
	drm_dev_unregister(drm);
	drm_kms_helper_poll_fini(drm);
	drm_kms_helper_poll_fini(drm);
	drm_atomic_helper_shutdown(drm);
	drm_mode_config_cleanup(drm);
	drm_mode_config_cleanup(drm);

	component_unbind_all(dev, NULL);
	of_reserved_mem_device_release(dev);
	of_reserved_mem_device_release(dev);

	drm_dev_put(drm);
	drm_dev_put(drm);
}
}


@@ -395,6 +402,8 @@ static int sun4i_drv_probe(struct platform_device *pdev)


static int sun4i_drv_remove(struct platform_device *pdev)
static int sun4i_drv_remove(struct platform_device *pdev)
{
{
	component_master_del(&pdev->dev, &sun4i_drv_master_ops);

	return 0;
	return 0;
}
}


+1 −1
Original line number Original line Diff line number Diff line
@@ -1042,7 +1042,7 @@ static void
vc4_crtc_reset(struct drm_crtc *crtc)
vc4_crtc_reset(struct drm_crtc *crtc)
{
{
	if (crtc->state)
	if (crtc->state)
		__drm_atomic_helper_crtc_destroy_state(crtc->state);
		vc4_crtc_destroy_state(crtc, crtc->state);


	crtc->state = kzalloc(sizeof(struct vc4_crtc_state), GFP_KERNEL);
	crtc->state = kzalloc(sizeof(struct vc4_crtc_state), GFP_KERNEL);
	if (crtc->state)
	if (crtc->state)