Commit 73c98bf2 authored by Dave Airlie's avatar Dave Airlie
Browse files

Merge tag 'drm-next-20230814' of...

Merge tag 'drm-next-20230814' of git://git.kernel.org/pub/scm/linux/kernel/git/pinchartl/linux

 into drm-next

Renesas R-Car DU miscellaneous changes

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

From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20230814130531.GC22929@pendragon.ideasonboard.com
parents e1f9c849 97018453
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -696,6 +696,10 @@ static int rcar_du_probe(struct platform_device *pdev)
	/* DRM/KMS objects */
	ret = rcar_du_modeset_init(rcdu);
	if (ret < 0) {
		/*
		 * Don't use dev_err_probe(), as it would overwrite the probe
		 * deferral reason recorded in rcar_du_modeset_init().
		 */
		if (ret != -EPROBE_DEFER)
			dev_err(&pdev->dev,
				"failed to initialize DRM/KMS (%d)\n", ret);
@@ -710,7 +714,7 @@ static int rcar_du_probe(struct platform_device *pdev)
	if (ret)
		goto error;

	DRM_INFO("Device %s probed\n", dev_name(&pdev->dev));
	drm_info(&rcdu->ddev, "Device %s probed\n", dev_name(&pdev->dev));

	drm_fbdev_generic_setup(&rcdu->ddev, 32);

+4 −2
Original line number Diff line number Diff line
@@ -935,7 +935,8 @@ int rcar_du_modeset_init(struct rcar_du_device *rcdu)
	/* Initialize the Color Management Modules. */
	ret = rcar_du_cmm_init(rcdu);
	if (ret)
		return ret;
		return dev_err_probe(rcdu->dev, ret,
				     "failed to initialize CMM\n");

	/* Create the CRTCs. */
	for (swindex = 0, hwindex = 0; swindex < rcdu->num_crtcs; ++hwindex) {
@@ -955,7 +956,8 @@ int rcar_du_modeset_init(struct rcar_du_device *rcdu)
	/* Initialize the encoders. */
	ret = rcar_du_encoders_init(rcdu);
	if (ret < 0)
		return ret;
		return dev_err_probe(rcdu->dev, ret,
				     "failed to initialize encoders\n");

	if (ret == 0) {
		dev_err(rcdu->dev, "error: no encoder could be initialized\n");
+40 −17
Original line number Diff line number Diff line
@@ -123,6 +123,8 @@ static const u32 rcar_du_vsp_formats[] = {
	DRM_FORMAT_RGB888,
	DRM_FORMAT_BGRA8888,
	DRM_FORMAT_BGRX8888,
	DRM_FORMAT_ABGR8888,
	DRM_FORMAT_XBGR8888,
	DRM_FORMAT_ARGB8888,
	DRM_FORMAT_XRGB8888,
	DRM_FORMAT_UYVY,
@@ -155,6 +157,8 @@ static const u32 rcar_du_vsp_formats_gen4[] = {
	DRM_FORMAT_RGB888,
	DRM_FORMAT_BGRA8888,
	DRM_FORMAT_BGRX8888,
	DRM_FORMAT_ABGR8888,
	DRM_FORMAT_XBGR8888,
	DRM_FORMAT_ARGB8888,
	DRM_FORMAT_XRGB8888,
	DRM_FORMAT_RGBX1010102,
@@ -177,6 +181,41 @@ static const u32 rcar_du_vsp_formats_gen4[] = {
	DRM_FORMAT_Y212,
};

static u32 rcar_du_vsp_state_get_format(struct rcar_du_vsp_plane_state *state)
{
	u32 fourcc = state->format->fourcc;

	if (state->state.pixel_blend_mode == DRM_MODE_BLEND_PIXEL_NONE) {
		switch (fourcc) {
		case DRM_FORMAT_ARGB1555:
			fourcc = DRM_FORMAT_XRGB1555;
			break;

		case DRM_FORMAT_ARGB4444:
			fourcc = DRM_FORMAT_XRGB4444;
			break;

		case DRM_FORMAT_ARGB8888:
			fourcc = DRM_FORMAT_XRGB8888;
			break;

		case DRM_FORMAT_ABGR8888:
			fourcc = DRM_FORMAT_XBGR8888;
			break;

		case DRM_FORMAT_BGRA8888:
			fourcc = DRM_FORMAT_BGRX8888;
			break;

		case DRM_FORMAT_RGBA1010102:
			fourcc = DRM_FORMAT_RGBX1010102;
			break;
		}
	}

	return fourcc;
}

static void rcar_du_vsp_plane_setup(struct rcar_du_vsp_plane *plane)
{
	struct rcar_du_vsp_plane_state *state =
@@ -190,7 +229,7 @@ static void rcar_du_vsp_plane_setup(struct rcar_du_vsp_plane *plane)
		.alpha = state->state.alpha >> 8,
		.zpos = state->state.zpos,
	};
	u32 fourcc = state->format->fourcc;
	u32 fourcc = rcar_du_vsp_state_get_format(state);
	unsigned int i;

	cfg.src.left = state->state.src.x1 >> 16;
@@ -207,22 +246,6 @@ static void rcar_du_vsp_plane_setup(struct rcar_du_vsp_plane *plane)
		cfg.mem[i] = sg_dma_address(state->sg_tables[i].sgl)
			   + fb->offsets[i];

	if (state->state.pixel_blend_mode == DRM_MODE_BLEND_PIXEL_NONE) {
		switch (fourcc) {
		case DRM_FORMAT_ARGB1555:
			fourcc = DRM_FORMAT_XRGB1555;
			break;

		case DRM_FORMAT_ARGB4444:
			fourcc = DRM_FORMAT_XRGB4444;
			break;

		case DRM_FORMAT_ARGB8888:
			fourcc = DRM_FORMAT_XRGB8888;
			break;
		}
	}

	format = rcar_du_format_info(fourcc);
	cfg.pixelformat = format->v4l2;

+1 −3
Original line number Diff line number Diff line
@@ -1001,7 +1001,6 @@ static int rcar_mipi_dsi_get_clocks(struct rcar_mipi_dsi *dsi)
static int rcar_mipi_dsi_probe(struct platform_device *pdev)
{
	struct rcar_mipi_dsi *dsi;
	struct resource *mem;
	int ret;

	dsi = devm_kzalloc(&pdev->dev, sizeof(*dsi), GFP_KERNEL);
@@ -1018,8 +1017,7 @@ static int rcar_mipi_dsi_probe(struct platform_device *pdev)
		return ret;

	/* Acquire resources. */
	mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
	dsi->mmio = devm_ioremap_resource(dsi->dev, mem);
	dsi->mmio = devm_platform_ioremap_resource(pdev, 0);
	if (IS_ERR(dsi->mmio))
		return PTR_ERR(dsi->mmio);