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

Commit 76404ac0 authored by Thomas Hellstrom's avatar Thomas Hellstrom
Browse files

drm/vmwgfx: Add connector properties to switch between explicit and implicit placement

parent 578e609a
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -409,6 +409,7 @@ struct vmw_private {
	struct vmw_legacy_display *ldu_priv;
	struct vmw_legacy_display *ldu_priv;
	struct vmw_overlay *overlay_priv;
	struct vmw_overlay *overlay_priv;
	struct drm_property *hotplug_mode_update_property;
	struct drm_property *hotplug_mode_update_property;
	struct drm_property *implicit_placement_property;
	unsigned num_implicit;
	unsigned num_implicit;
	struct vmw_framebuffer *implicit_fb;
	struct vmw_framebuffer *implicit_fb;


+30 −0
Original line number Original line Diff line number Diff line
@@ -1622,6 +1622,12 @@ int vmw_du_connector_set_property(struct drm_connector *connector,
				  struct drm_property *property,
				  struct drm_property *property,
				  uint64_t val)
				  uint64_t val)
{
{
	struct vmw_display_unit *du = vmw_connector_to_du(connector);
	struct vmw_private *dev_priv = vmw_priv(connector->dev);

	if (property == dev_priv->implicit_placement_property)
		du->is_implicit = val;

	return 0;
	return 0;
}
}


@@ -2219,3 +2225,27 @@ void vmw_kms_update_implicit_fb(struct vmw_private *dev_priv,


	dev_priv->implicit_fb = vfb;
	dev_priv->implicit_fb = vfb;
}
}

/**
 * vmw_kms_create_implicit_placement_proparty - Set up the implicit placement
 * property.
 *
 * @dev_priv: Pointer to a device private struct.
 * @immutable: Whether the property is immutable.
 *
 * Sets up the implicit placement property unless it's already set up.
 */
void
vmw_kms_create_implicit_placement_property(struct vmw_private *dev_priv,
					   bool immutable)
{
	if (dev_priv->implicit_placement_property)
		return;

	dev_priv->implicit_placement_property =
		drm_property_create_range(dev_priv->dev,
					  immutable ?
					  DRM_MODE_PROP_IMMUTABLE : 0,
					  "implicit_placement", 0, 1);

}
+2 −1
Original line number Original line Diff line number Diff line
@@ -264,7 +264,8 @@ bool vmw_kms_crtc_flippable(struct vmw_private *dev_priv,
			    struct drm_crtc *crtc);
			    struct drm_crtc *crtc);
void vmw_kms_update_implicit_fb(struct vmw_private *dev_priv,
void vmw_kms_update_implicit_fb(struct vmw_private *dev_priv,
				struct drm_crtc *crtc);
				struct drm_crtc *crtc);

void vmw_kms_create_implicit_placement_property(struct vmw_private *dev_priv,
						bool immutable);




/*
/*
+7 −0
Original line number Original line Diff line number Diff line
@@ -383,6 +383,11 @@ static int vmw_ldu_init(struct vmw_private *dev_priv, unsigned unit)
				   dev->mode_config.suggested_x_property, 0);
				   dev->mode_config.suggested_x_property, 0);
	drm_object_attach_property(&connector->base,
	drm_object_attach_property(&connector->base,
				   dev->mode_config.suggested_y_property, 0);
				   dev->mode_config.suggested_y_property, 0);
	if (dev_priv->implicit_placement_property)
		drm_object_attach_property
			(&connector->base,
			 dev_priv->implicit_placement_property,
			 1);


	return 0;
	return 0;
}
}
@@ -418,6 +423,8 @@ int vmw_kms_ldu_init_display(struct vmw_private *dev_priv)
	if (ret != 0)
	if (ret != 0)
		goto err_vblank_cleanup;
		goto err_vblank_cleanup;


	vmw_kms_create_implicit_placement_property(dev_priv, true);

	if (dev_priv->capabilities & SVGA_CAP_MULTIMON)
	if (dev_priv->capabilities & SVGA_CAP_MULTIMON)
		for (i = 0; i < VMWGFX_NUM_DISPLAY_UNITS; ++i)
		for (i = 0; i < VMWGFX_NUM_DISPLAY_UNITS; ++i)
			vmw_ldu_init(dev_priv, i);
			vmw_ldu_init(dev_priv, i);
+7 −0
Original line number Original line Diff line number Diff line
@@ -541,6 +541,11 @@ static int vmw_sou_init(struct vmw_private *dev_priv, unsigned unit)
				   dev->mode_config.suggested_x_property, 0);
				   dev->mode_config.suggested_x_property, 0);
	drm_object_attach_property(&connector->base,
	drm_object_attach_property(&connector->base,
				   dev->mode_config.suggested_y_property, 0);
				   dev->mode_config.suggested_y_property, 0);
	if (dev_priv->implicit_placement_property)
		drm_object_attach_property
			(&connector->base,
			 dev_priv->implicit_placement_property,
			 sou->base.is_implicit);


	return 0;
	return 0;
}
}
@@ -568,6 +573,8 @@ int vmw_kms_sou_init_display(struct vmw_private *dev_priv)
	if (unlikely(ret != 0))
	if (unlikely(ret != 0))
		goto err_vblank_cleanup;
		goto err_vblank_cleanup;


	vmw_kms_create_implicit_placement_property(dev_priv, false);

	for (i = 0; i < VMWGFX_NUM_DISPLAY_UNITS; ++i)
	for (i = 0; i < VMWGFX_NUM_DISPLAY_UNITS; ++i)
		vmw_sou_init(dev_priv, i);
		vmw_sou_init(dev_priv, i);


Loading