From: Rob Clark <rob.clark@linaro.org>
To: dri-devel@lists.freedesktop.org
Cc: patches@linaro.org, daniel.vetter@ffwll.ch, Rob Clark <rob@ti.com>
Subject: [RFC 05/11] drm: split property values out
Date: Fri, 12 Oct 2012 19:49:06 -0500 [thread overview]
Message-ID: <1350089352-18162-6-git-send-email-rob.clark@linaro.org> (raw)
In-Reply-To: <1350089352-18162-1-git-send-email-rob.clark@linaro.org>
From: Rob Clark <rob@ti.com>
Split property values out into a different struct, so we can later
move property values into state structs. This will allow the
property values to stay in sync w/ the state updates which are
either discarded or atomically committed.
---
drivers/gpu/drm/drm_crtc.c | 29 ++++++++++++++++++++---------
drivers/gpu/drm/drm_fb_helper.c | 1 +
drivers/staging/omapdrm/omap_drv.c | 5 +++--
include/drm/drm_crtc.h | 10 +++++++++-
4 files changed, 33 insertions(+), 12 deletions(-)
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
index 5308a34..b1ccfea 100644
--- a/drivers/gpu/drm/drm_crtc.c
+++ b/drivers/gpu/drm/drm_crtc.c
@@ -446,6 +446,7 @@ int drm_crtc_init(struct drm_device *dev, struct drm_crtc *crtc,
goto out;
crtc->base.properties = &crtc->properties;
+ crtc->base.propvals = &crtc->propvals;
list_add_tail(&crtc->head, &dev->mode_config.crtc_list);
dev->mode_config.num_crtc++;
@@ -547,6 +548,7 @@ int drm_connector_init(struct drm_device *dev,
goto out;
connector->base.properties = &connector->properties;
+ connector->base.propvals = &connector->propvals;
connector->dev = dev;
connector->funcs = funcs;
connector->connector_type = connector_type;
@@ -670,6 +672,7 @@ int drm_plane_init(struct drm_device *dev, struct drm_plane *plane,
goto out;
plane->base.properties = &plane->properties;
+ plane->base.propvals = &plane->propvals;
plane->dev = dev;
plane->funcs = funcs;
plane->format_types = kmalloc(sizeof(uint32_t) * format_count,
@@ -1549,7 +1552,7 @@ int drm_mode_getconnector(struct drm_device *dev, void *data,
goto out;
}
- if (put_user(connector->properties.values[i],
+ if (put_user(connector->propvals.values[i],
prop_values + copied)) {
ret = -EFAULT;
goto out;
@@ -2951,19 +2954,20 @@ void drm_object_attach_property(struct drm_mode_object *obj,
}
obj->properties->ids[count] = property->base.id;
- obj->properties->values[count] = init_val;
+ obj->propvals->values[count] = init_val;
obj->properties->count++;
}
EXPORT_SYMBOL(drm_object_attach_property);
int drm_object_property_set_value(struct drm_mode_object *obj,
+ struct drm_object_property_values *propvals,
struct drm_property *property, uint64_t val)
{
int i;
for (i = 0; i < obj->properties->count; i++) {
if (obj->properties->ids[i] == property->base.id) {
- obj->properties->values[i] = val;
+ propvals->values[i] = val;
return 0;
}
}
@@ -2979,7 +2983,7 @@ int drm_object_property_get_value(struct drm_mode_object *obj,
for (i = 0; i < obj->properties->count; i++) {
if (obj->properties->ids[i] == property->base.id) {
- *val = obj->properties->values[i];
+ *val = obj->propvals->values[i];
return 0;
}
}
@@ -3172,7 +3176,9 @@ int drm_mode_connector_update_edid_property(struct drm_connector *connector,
/* Delete edid, when there is none. */
if (!edid) {
connector->edid_blob_ptr = NULL;
- ret = drm_object_property_set_value(&connector->base, dev->mode_config.edid_property, 0);
+ ret = drm_object_property_set_value(&connector->base,
+ &connector->propvals,
+ dev->mode_config.edid_property, 0);
return ret;
}
@@ -3181,6 +3187,7 @@ int drm_mode_connector_update_edid_property(struct drm_connector *connector,
size, edid);
ret = drm_object_property_set_value(&connector->base,
+ &connector->propvals,
dev->mode_config.edid_property,
connector->edid_blob_ptr->base.id);
@@ -3254,7 +3261,9 @@ static int drm_mode_connector_set_obj_prop(struct drm_connector *connector,
/* store the property value if successful */
if (!ret)
- drm_object_property_set_value(&connector->base, property, value);
+ drm_object_property_set_value(&connector->base,
+ &connector->propvals, property, value);
+
return ret;
}
@@ -3267,7 +3276,8 @@ static int drm_mode_crtc_set_obj_prop(struct drm_crtc *crtc,
if (crtc->funcs->set_property)
ret = crtc->funcs->set_property(crtc, state, property, value);
if (!ret)
- drm_object_property_set_value(&crtc->base, property, value);
+ drm_object_property_set_value(&crtc->base, &crtc->propvals,
+ property, value);
return ret;
}
@@ -3281,7 +3291,8 @@ static int drm_mode_plane_set_obj_prop(struct drm_plane *plane,
if (plane->funcs->set_property)
ret = plane->funcs->set_property(plane, state, property, value);
if (!ret)
- drm_object_property_set_value(&plane->base, property, value);
+ drm_object_property_set_value(&plane->base, &plane->propvals,
+ property, value);
return ret;
}
@@ -3382,7 +3393,7 @@ int drm_mode_obj_get_properties_ioctl(struct drm_device *dev, void *data,
ret = -EFAULT;
goto out;
}
- if (put_user(obj->properties->values[i],
+ if (put_user(obj->propvals->values[i],
prop_values_ptr + copied)) {
ret = -EFAULT;
goto out;
diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
index 712b3e88..80bdb59 100644
--- a/drivers/gpu/drm/drm_fb_helper.c
+++ b/drivers/gpu/drm/drm_fb_helper.c
@@ -332,6 +332,7 @@ static void drm_fb_helper_dpms(struct fb_info *info, int dpms_mode)
connector = fb_helper->connector_info[j]->connector;
connector->funcs->dpms(connector, dpms_mode);
drm_object_property_set_value(&connector->base,
+ &connector->propvals,
dev->mode_config.dpms_property, dpms_mode);
}
}
diff --git a/drivers/staging/omapdrm/omap_drv.c b/drivers/staging/omapdrm/omap_drv.c
index bdb98d5..5f5ee84 100644
--- a/drivers/staging/omapdrm/omap_drv.c
+++ b/drivers/staging/omapdrm/omap_drv.c
@@ -526,8 +526,9 @@ static void dev_lastclose(struct drm_device *dev)
* default state on lastclose?
*/
for (i = 0; i < priv->num_planes; i++) {
- drm_object_property_set_value(&priv->planes[i]->base,
- priv->rotation_prop, 0);
+ struct drm_plane *plane = priv->planes[i];
+ drm_object_property_set_value(&plane->base,
+ &plane->propvals, priv->rotation_prop, 0);
}
mutex_lock(&dev->mode_config.mutex);
diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
index 219d35a..cb438bf 100644
--- a/include/drm/drm_crtc.h
+++ b/include/drm/drm_crtc.h
@@ -37,7 +37,7 @@ struct drm_device;
struct drm_mode_set;
struct drm_framebuffer;
struct drm_object_properties;
-
+struct drm_object_property_values;
#define DRM_MODE_OBJECT_CRTC 0xcccccccc
#define DRM_MODE_OBJECT_CONNECTOR 0xc0c0c0c0
@@ -52,12 +52,16 @@ struct drm_mode_object {
uint32_t id;
uint32_t type;
struct drm_object_properties *properties;
+ struct drm_object_property_values *propvals;
};
#define DRM_OBJECT_MAX_PROPERTY 24
struct drm_object_properties {
int count;
uint32_t ids[DRM_OBJECT_MAX_PROPERTY];
+};
+
+struct drm_object_property_values {
uint64_t values[DRM_OBJECT_MAX_PROPERTY];
};
@@ -430,6 +434,7 @@ struct drm_crtc {
void *helper_private;
struct drm_object_properties properties;
+ struct drm_object_property_values propvals;
};
@@ -596,6 +601,7 @@ struct drm_connector {
struct list_head user_modes;
struct drm_property_blob *edid_blob_ptr;
struct drm_object_properties properties;
+ struct drm_object_property_values propvals;
uint8_t polled; /* DRM_CONNECTOR_POLL_* */
@@ -681,6 +687,7 @@ struct drm_plane {
void *helper_private;
struct drm_object_properties properties;
+ struct drm_object_property_values propvals;
};
/**
@@ -928,6 +935,7 @@ extern void drm_mode_connector_list_update(struct drm_connector *connector);
extern int drm_mode_connector_update_edid_property(struct drm_connector *connector,
struct edid *edid);
extern int drm_object_property_set_value(struct drm_mode_object *obj,
+ struct drm_object_property_values *propvals,
struct drm_property *property,
uint64_t val);
extern int drm_object_property_get_value(struct drm_mode_object *obj,
--
1.7.9.5
next prev parent reply other threads:[~2012-10-13 0:49 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-10-13 0:49 [RFC 00/11] atomic pageflip v3 Rob Clark
2012-10-13 0:49 ` [RFC 01/11] drm: add atomic fxns Rob Clark
2012-10-13 0:49 ` [RFC 02/11] drm: add object property type Rob Clark
2012-10-13 0:49 ` [RFC 03/11] drm: add DRM_MODE_PROP_DYNAMIC property flag Rob Clark
2012-10-13 0:49 ` [RFC 04/11] drm: add DRM_MODE_PROP_SIGNED " Rob Clark
2012-10-13 0:49 ` Rob Clark [this message]
2012-10-13 0:49 ` [RFC 06/11] drm: convert plane to properties Rob Clark
2012-10-13 0:49 ` [RFC 07/11] drm: add drm_plane_state Rob Clark
2012-10-13 0:49 ` [RFC 08/11] drm: convert page_flip to properties Rob Clark
2012-10-13 0:49 ` [RFC 09/11] drm: add drm_crtc_state Rob Clark
2012-10-13 0:49 ` [RFC 10/11] drm: atomic pageflip Rob Clark
2012-10-13 0:49 ` [RFC 11/11] drm/omap: update for atomic age Rob Clark
2012-10-13 0:58 ` [RFC 00/11] atomic pageflip v3 Rob Clark
-- strict thread matches above, loose matches on Subject: below --
2012-09-13 3:49 [RFC 00/11] atomic pageflip (v2) Rob Clark
2012-09-13 3:49 ` [RFC 05/11] drm: split property values out Rob Clark
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1350089352-18162-6-git-send-email-rob.clark@linaro.org \
--to=rob.clark@linaro.org \
--cc=daniel.vetter@ffwll.ch \
--cc=dri-devel@lists.freedesktop.org \
--cc=patches@linaro.org \
--cc=rob@ti.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox