Commit 37f332ea authored by Simona Vetter's avatar Simona Vetter
Browse files

Merge tag 'drm-misc-fixes-2025-01-24' of...

Merge tag 'drm-misc-fixes-2025-01-24' of https://gitlab.freedesktop.org/drm/misc/kernel

 into drm-next

Short summary of fixes pull:

bochs:
- Fix double-free on driver removal

client:
- Improve support for tile-based modes
- Fix fbdev Kconfig select rules

xlnx:
- zynqmp_dp: Add locking to DP-bridge enable helper

Signed-off-by: default avatarSimona Vetter <simona.vetter@ffwll.ch>
From: Thomas Zimmermann <tzimmermann@suse.de>
Link: https://patchwork.freedesktop.org/patch/msgid/20250124082932.GA13715@linux.fritz.box
parents 07c5b277 0a1ee19d
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -294,6 +294,7 @@ config DRM_TTM_HELPER
	tristate
	depends on DRM
	select DRM_TTM
	select DRM_KMS_HELPER if DRM_FBDEV_EMULATION
	select FB_CORE if DRM_FBDEV_EMULATION
	select FB_SYSMEM_HELPERS_DEFERRED if DRM_FBDEV_EMULATION
	help
@@ -302,6 +303,7 @@ config DRM_TTM_HELPER
config DRM_GEM_DMA_HELPER
	tristate
	depends on DRM
	select DRM_KMS_HELPER if DRM_FBDEV_EMULATION
	select FB_CORE if DRM_FBDEV_EMULATION
	select FB_DMAMEM_HELPERS_DEFERRED if DRM_FBDEV_EMULATION
	help
@@ -310,6 +312,7 @@ config DRM_GEM_DMA_HELPER
config DRM_GEM_SHMEM_HELPER
	tristate
	depends on DRM && MMU
	select DRM_KMS_HELPER if DRM_FBDEV_EMULATION
	select FB_CORE if DRM_FBDEV_EMULATION
	select FB_SYSMEM_HELPERS_DEFERRED if DRM_FBDEV_EMULATION
	help
+9 −0
Original line number Diff line number Diff line
@@ -743,6 +743,15 @@ static bool drm_client_firmware_config(struct drm_client_dev *client,
	if ((conn_configured & mask) != mask && conn_configured != conn_seq)
		goto retry;

	for (i = 0; i < count; i++) {
		struct drm_connector *connector = connectors[i];

		if (connector->has_tile)
			drm_client_get_tile_offsets(dev, connectors, connector_count,
						    modes, offsets, i,
						    connector->tile_h_loc, connector->tile_v_loc);
	}

	/*
	 * If the BIOS didn't enable everything it could, fall back to have the
	 * same user experiencing of lighting up as much as possible like the
+8 −6
Original line number Diff line number Diff line
@@ -1354,14 +1354,14 @@ int drm_fb_helper_set_par(struct fb_info *info)
}
EXPORT_SYMBOL(drm_fb_helper_set_par);

static void pan_set(struct drm_fb_helper *fb_helper, int x, int y)
static void pan_set(struct drm_fb_helper *fb_helper, int dx, int dy)
{
	struct drm_mode_set *mode_set;

	mutex_lock(&fb_helper->client.modeset_mutex);
	drm_client_for_each_modeset(mode_set, &fb_helper->client) {
		mode_set->x = x;
		mode_set->y = y;
		mode_set->x += dx;
		mode_set->y += dy;
	}
	mutex_unlock(&fb_helper->client.modeset_mutex);
}
@@ -1370,16 +1370,18 @@ static int pan_display_atomic(struct fb_var_screeninfo *var,
			      struct fb_info *info)
{
	struct drm_fb_helper *fb_helper = info->par;
	int ret;
	int ret, dx, dy;

	pan_set(fb_helper, var->xoffset, var->yoffset);
	dx = var->xoffset - info->var.xoffset;
	dy = var->yoffset - info->var.yoffset;
	pan_set(fb_helper, dx, dy);

	ret = drm_client_modeset_commit_locked(&fb_helper->client);
	if (!ret) {
		info->var.xoffset = var->xoffset;
		info->var.yoffset = var->yoffset;
	} else
		pan_set(fb_helper, info->var.xoffset, info->var.yoffset);
		pan_set(fb_helper, -dx, -dy);

	return ret;
}
+0 −1
Original line number Diff line number Diff line
@@ -757,7 +757,6 @@ static void bochs_pci_remove(struct pci_dev *pdev)

	drm_dev_unplug(dev);
	drm_atomic_helper_shutdown(dev);
	drm_dev_put(dev);
}

static void bochs_pci_shutdown(struct pci_dev *pdev)
+1 −2
Original line number Diff line number Diff line
@@ -1564,7 +1564,7 @@ static void zynqmp_dp_bridge_atomic_enable(struct drm_bridge *bridge,

	pm_runtime_get_sync(dp->dev);

	mutex_lock(&dp->lock);
	guard(mutex)(&dp->lock);
	zynqmp_dp_disp_enable(dp, old_bridge_state);

	/*
@@ -1624,7 +1624,6 @@ static void zynqmp_dp_bridge_atomic_enable(struct drm_bridge *bridge,
	zynqmp_dp_write(dp, ZYNQMP_DP_SOFTWARE_RESET,
			ZYNQMP_DP_SOFTWARE_RESET_ALL);
	zynqmp_dp_write(dp, ZYNQMP_DP_MAIN_STREAM_ENABLE, 1);
	mutex_unlock(&dp->lock);
}

static void zynqmp_dp_bridge_atomic_disable(struct drm_bridge *bridge,