mirror of
https://github.com/raspberrypi/linux.git
synced 2025-12-06 01:49:46 +00:00
drm/vmwgfx: Restore Guest-Backed only cursor plane support
[ Upstream commiteef295a850] The referenced fixes commit broke the cursor plane for configurations which have Guest-Backed surfaces but no cursor MOB support. Fixes:965544150d("drm/vmwgfx: Refactor cursor handling") Signed-off-by: Ian Forbes <ian.forbes@broadcom.com> Signed-off-by: Zack Rusin <zack.rusin@broadcom.com> Link: https://patch.msgid.link/20251103201920.381503-1-ian.forbes@broadcom.com Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
f3f3a8eb3f
commit
e59e0099d0
@@ -100,8 +100,10 @@ vmw_cursor_update_type(struct vmw_private *vmw, struct vmw_plane_state *vps)
|
||||
if (vmw->has_mob) {
|
||||
if ((vmw->capabilities2 & SVGA_CAP2_CURSOR_MOB) != 0)
|
||||
return VMW_CURSOR_UPDATE_MOB;
|
||||
else
|
||||
return VMW_CURSOR_UPDATE_GB_ONLY;
|
||||
}
|
||||
|
||||
drm_warn_once(&vmw->drm, "Unknown Cursor Type!\n");
|
||||
return VMW_CURSOR_UPDATE_NONE;
|
||||
}
|
||||
|
||||
@@ -139,6 +141,7 @@ static u32 vmw_cursor_mob_size(enum vmw_cursor_update_type update_type,
|
||||
{
|
||||
switch (update_type) {
|
||||
case VMW_CURSOR_UPDATE_LEGACY:
|
||||
case VMW_CURSOR_UPDATE_GB_ONLY:
|
||||
case VMW_CURSOR_UPDATE_NONE:
|
||||
return 0;
|
||||
case VMW_CURSOR_UPDATE_MOB:
|
||||
@@ -623,6 +626,7 @@ int vmw_cursor_plane_prepare_fb(struct drm_plane *plane,
|
||||
if (!surface || vps->cursor.legacy.id == surface->snooper.id)
|
||||
vps->cursor.update_type = VMW_CURSOR_UPDATE_NONE;
|
||||
break;
|
||||
case VMW_CURSOR_UPDATE_GB_ONLY:
|
||||
case VMW_CURSOR_UPDATE_MOB: {
|
||||
bo = vmw_user_object_buffer(&vps->uo);
|
||||
if (bo) {
|
||||
@@ -737,6 +741,7 @@ void
|
||||
vmw_cursor_plane_atomic_update(struct drm_plane *plane,
|
||||
struct drm_atomic_state *state)
|
||||
{
|
||||
struct vmw_bo *bo;
|
||||
struct drm_plane_state *new_state =
|
||||
drm_atomic_get_new_plane_state(state, plane);
|
||||
struct drm_plane_state *old_state =
|
||||
@@ -762,6 +767,15 @@ vmw_cursor_plane_atomic_update(struct drm_plane *plane,
|
||||
case VMW_CURSOR_UPDATE_MOB:
|
||||
vmw_cursor_update_mob(dev_priv, vps);
|
||||
break;
|
||||
case VMW_CURSOR_UPDATE_GB_ONLY:
|
||||
bo = vmw_user_object_buffer(&vps->uo);
|
||||
if (bo)
|
||||
vmw_send_define_cursor_cmd(dev_priv, bo->map.virtual,
|
||||
vps->base.crtc_w,
|
||||
vps->base.crtc_h,
|
||||
vps->base.hotspot_x,
|
||||
vps->base.hotspot_y);
|
||||
break;
|
||||
case VMW_CURSOR_UPDATE_NONE:
|
||||
/* do nothing */
|
||||
break;
|
||||
|
||||
@@ -33,6 +33,7 @@ static const u32 __maybe_unused vmw_cursor_plane_formats[] = {
|
||||
enum vmw_cursor_update_type {
|
||||
VMW_CURSOR_UPDATE_NONE = 0,
|
||||
VMW_CURSOR_UPDATE_LEGACY,
|
||||
VMW_CURSOR_UPDATE_GB_ONLY,
|
||||
VMW_CURSOR_UPDATE_MOB,
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user