mirror of
https://github.com/torvalds/linux.git
synced 2024-11-23 12:42:02 +00:00
Merge tag 'topic/drm-misc-2015-04-15' of git://anongit.freedesktop.org/drm-intel into drm-next
One more drm-misch pull for 4.1 with mostly simple stuff and boring refactoring. Even the cursor fix from Matt is just to make a really anal igt happy. * tag 'topic/drm-misc-2015-04-15' of git://anongit.freedesktop.org/drm-intel: drm: fix trivial typo mistake drm: Make integer overflow checking cover universal cursor updates (v2) drm: make crtc/encoder/connector/plane helper_private a const pointer drm/armada: constify struct drm_encoder_helper_funcs pointer drm/radeon: constify more struct drm_*_helper funcs pointers drm/edid: add #defines for ELD versions drm/atomic: Add for_each_{connector,crtc,plane}_in_state helper macros drm: Use kref_put_mutex in drm_gem_object_unreference_unlocked drm/drm: constify all struct drm_*_helper funcs pointers drm/qxl: constify all struct drm_*_helper funcs pointers drm/nouveau: constify all struct drm_*_helper funcs pointers drm/radeon: constify all struct drm_*_helper funcs pointers drm/gma500: constify all struct drm_*_helper funcs pointers drm/mgag200: constify all struct drm_*_helper funcs pointers drm/exynos: constify all struct drm_*_helper funcs pointers drm: Fix some typos
This commit is contained in:
commit
4a11248856
@ -9,7 +9,7 @@
|
||||
#define ARMADA_CONNETOR_H
|
||||
|
||||
#define encoder_helper_funcs(encoder) \
|
||||
((struct drm_encoder_helper_funcs *)encoder->helper_private)
|
||||
((const struct drm_encoder_helper_funcs *)encoder->helper_private)
|
||||
|
||||
struct armada_output_type {
|
||||
int connector_type;
|
||||
|
@ -780,7 +780,7 @@ drm_atomic_set_crtc_for_plane(struct drm_plane_state *plane_state,
|
||||
EXPORT_SYMBOL(drm_atomic_set_crtc_for_plane);
|
||||
|
||||
/**
|
||||
* drm_atomic_set_fb_for_plane - set crtc for plane
|
||||
* drm_atomic_set_fb_for_plane - set framebuffer for plane
|
||||
* @plane_state: atomic state object for the plane
|
||||
* @fb: fb to use for the plane
|
||||
*
|
||||
@ -909,14 +909,13 @@ int
|
||||
drm_atomic_connectors_for_crtc(struct drm_atomic_state *state,
|
||||
struct drm_crtc *crtc)
|
||||
{
|
||||
struct drm_connector *connector;
|
||||
struct drm_connector_state *conn_state;
|
||||
|
||||
int i, num_connected_connectors = 0;
|
||||
|
||||
for (i = 0; i < state->num_connector; i++) {
|
||||
struct drm_connector_state *conn_state;
|
||||
|
||||
conn_state = state->connector_states[i];
|
||||
|
||||
if (conn_state && conn_state->crtc == crtc)
|
||||
for_each_connector_in_state(state, connector, conn_state, i) {
|
||||
if (conn_state->crtc == crtc)
|
||||
num_connected_connectors++;
|
||||
}
|
||||
|
||||
@ -933,7 +932,7 @@ EXPORT_SYMBOL(drm_atomic_connectors_for_crtc);
|
||||
*
|
||||
* This function should be used by legacy entry points which don't understand
|
||||
* -EDEADLK semantics. For simplicity this one will grab all modeset locks after
|
||||
* the slowpath completed.
|
||||
* the slowpath completed.
|
||||
*/
|
||||
void drm_atomic_legacy_backoff(struct drm_atomic_state *state)
|
||||
{
|
||||
@ -968,19 +967,16 @@ int drm_atomic_check_only(struct drm_atomic_state *state)
|
||||
{
|
||||
struct drm_device *dev = state->dev;
|
||||
struct drm_mode_config *config = &dev->mode_config;
|
||||
int nplanes = config->num_total_plane;
|
||||
int ncrtcs = config->num_crtc;
|
||||
struct drm_plane *plane;
|
||||
struct drm_plane_state *plane_state;
|
||||
struct drm_crtc *crtc;
|
||||
struct drm_crtc_state *crtc_state;
|
||||
int i, ret = 0;
|
||||
|
||||
DRM_DEBUG_ATOMIC("checking %p\n", state);
|
||||
|
||||
for (i = 0; i < nplanes; i++) {
|
||||
struct drm_plane *plane = state->planes[i];
|
||||
|
||||
if (!plane)
|
||||
continue;
|
||||
|
||||
ret = drm_atomic_plane_check(plane, state->plane_states[i]);
|
||||
for_each_plane_in_state(state, plane, plane_state, i) {
|
||||
ret = drm_atomic_plane_check(plane, plane_state);
|
||||
if (ret) {
|
||||
DRM_DEBUG_ATOMIC("[PLANE:%d] atomic core check failed\n",
|
||||
plane->base.id);
|
||||
@ -988,13 +984,8 @@ int drm_atomic_check_only(struct drm_atomic_state *state)
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < ncrtcs; i++) {
|
||||
struct drm_crtc *crtc = state->crtcs[i];
|
||||
|
||||
if (!crtc)
|
||||
continue;
|
||||
|
||||
ret = drm_atomic_crtc_check(crtc, state->crtc_states[i]);
|
||||
for_each_crtc_in_state(state, crtc, crtc_state, i) {
|
||||
ret = drm_atomic_crtc_check(crtc, crtc_state);
|
||||
if (ret) {
|
||||
DRM_DEBUG_ATOMIC("[CRTC:%d] atomic core check failed\n",
|
||||
crtc->base.id);
|
||||
@ -1006,13 +997,7 @@ int drm_atomic_check_only(struct drm_atomic_state *state)
|
||||
ret = config->funcs->atomic_check(state->dev, state);
|
||||
|
||||
if (!state->allow_modeset) {
|
||||
for (i = 0; i < ncrtcs; i++) {
|
||||
struct drm_crtc *crtc = state->crtcs[i];
|
||||
struct drm_crtc_state *crtc_state = state->crtc_states[i];
|
||||
|
||||
if (!crtc)
|
||||
continue;
|
||||
|
||||
for_each_crtc_in_state(state, crtc, crtc_state, i) {
|
||||
if (crtc_state->mode_changed ||
|
||||
crtc_state->active_changed) {
|
||||
DRM_DEBUG_ATOMIC("[CRTC:%d] requires full modeset\n",
|
||||
@ -1210,6 +1195,8 @@ int drm_mode_atomic_ioctl(struct drm_device *dev,
|
||||
struct drm_atomic_state *state;
|
||||
struct drm_modeset_acquire_ctx ctx;
|
||||
struct drm_plane *plane;
|
||||
struct drm_crtc *crtc;
|
||||
struct drm_crtc_state *crtc_state;
|
||||
unsigned plane_mask = 0;
|
||||
int ret = 0;
|
||||
unsigned int i, j;
|
||||
@ -1313,15 +1300,9 @@ retry:
|
||||
}
|
||||
|
||||
if (arg->flags & DRM_MODE_PAGE_FLIP_EVENT) {
|
||||
int ncrtcs = dev->mode_config.num_crtc;
|
||||
|
||||
for (i = 0; i < ncrtcs; i++) {
|
||||
struct drm_crtc_state *crtc_state = state->crtc_states[i];
|
||||
for_each_crtc_in_state(state, crtc, crtc_state, i) {
|
||||
struct drm_pending_vblank_event *e;
|
||||
|
||||
if (!crtc_state)
|
||||
continue;
|
||||
|
||||
e = create_vblank_event(dev, file_priv, arg->user_data);
|
||||
if (!e) {
|
||||
ret = -ENOMEM;
|
||||
@ -1373,14 +1354,7 @@ fail:
|
||||
goto backoff;
|
||||
|
||||
if (arg->flags & DRM_MODE_PAGE_FLIP_EVENT) {
|
||||
int ncrtcs = dev->mode_config.num_crtc;
|
||||
|
||||
for (i = 0; i < ncrtcs; i++) {
|
||||
struct drm_crtc_state *crtc_state = state->crtc_states[i];
|
||||
|
||||
if (!crtc_state)
|
||||
continue;
|
||||
|
||||
for_each_crtc_in_state(state, crtc, crtc_state, i) {
|
||||
destroy_vblank_event(dev, file_priv, crtc_state->event);
|
||||
crtc_state->event = NULL;
|
||||
}
|
||||
|
@ -248,30 +248,24 @@ update_connector_routing(struct drm_atomic_state *state, int conn_idx)
|
||||
static int
|
||||
mode_fixup(struct drm_atomic_state *state)
|
||||
{
|
||||
int ncrtcs = state->dev->mode_config.num_crtc;
|
||||
struct drm_crtc *crtc;
|
||||
struct drm_crtc_state *crtc_state;
|
||||
struct drm_connector *connector;
|
||||
struct drm_connector_state *conn_state;
|
||||
int i;
|
||||
bool ret;
|
||||
|
||||
for (i = 0; i < ncrtcs; i++) {
|
||||
crtc_state = state->crtc_states[i];
|
||||
|
||||
if (!crtc_state || !crtc_state->mode_changed)
|
||||
for_each_crtc_in_state(state, crtc, crtc_state, i) {
|
||||
if (!crtc_state->mode_changed)
|
||||
continue;
|
||||
|
||||
drm_mode_copy(&crtc_state->adjusted_mode, &crtc_state->mode);
|
||||
}
|
||||
|
||||
for (i = 0; i < state->num_connector; i++) {
|
||||
for_each_connector_in_state(state, connector, conn_state, i) {
|
||||
const struct drm_encoder_helper_funcs *funcs;
|
||||
struct drm_encoder *encoder;
|
||||
|
||||
conn_state = state->connector_states[i];
|
||||
|
||||
if (!conn_state)
|
||||
continue;
|
||||
|
||||
WARN_ON(!!conn_state->best_encoder != !!conn_state->crtc);
|
||||
|
||||
if (!conn_state->crtc || !conn_state->best_encoder)
|
||||
@ -316,14 +310,10 @@ mode_fixup(struct drm_atomic_state *state)
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < ncrtcs; i++) {
|
||||
for_each_crtc_in_state(state, crtc, crtc_state, i) {
|
||||
const struct drm_crtc_helper_funcs *funcs;
|
||||
struct drm_crtc *crtc;
|
||||
|
||||
crtc_state = state->crtc_states[i];
|
||||
crtc = state->crtcs[i];
|
||||
|
||||
if (!crtc_state || !crtc_state->mode_changed)
|
||||
if (!crtc_state->mode_changed)
|
||||
continue;
|
||||
|
||||
funcs = crtc->helper_private;
|
||||
@ -371,18 +361,13 @@ int
|
||||
drm_atomic_helper_check_modeset(struct drm_device *dev,
|
||||
struct drm_atomic_state *state)
|
||||
{
|
||||
int ncrtcs = dev->mode_config.num_crtc;
|
||||
struct drm_crtc *crtc;
|
||||
struct drm_crtc_state *crtc_state;
|
||||
struct drm_connector *connector;
|
||||
struct drm_connector_state *connector_state;
|
||||
int i, ret;
|
||||
|
||||
for (i = 0; i < ncrtcs; i++) {
|
||||
crtc = state->crtcs[i];
|
||||
crtc_state = state->crtc_states[i];
|
||||
|
||||
if (!crtc)
|
||||
continue;
|
||||
|
||||
for_each_crtc_in_state(state, crtc, crtc_state, i) {
|
||||
if (!drm_mode_equal(&crtc->state->mode, &crtc_state->mode)) {
|
||||
DRM_DEBUG_ATOMIC("[CRTC:%d] mode changed\n",
|
||||
crtc->base.id);
|
||||
@ -396,7 +381,7 @@ drm_atomic_helper_check_modeset(struct drm_device *dev,
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < state->num_connector; i++) {
|
||||
for_each_connector_in_state(state, connector, connector_state, i) {
|
||||
/*
|
||||
* This only sets crtc->mode_changed for routing changes,
|
||||
* drivers must set crtc->mode_changed themselves when connector
|
||||
@ -413,15 +398,9 @@ drm_atomic_helper_check_modeset(struct drm_device *dev,
|
||||
* configuration. This must be done before calling mode_fixup in case a
|
||||
* crtc only changed its mode but has the same set of connectors.
|
||||
*/
|
||||
for (i = 0; i < ncrtcs; i++) {
|
||||
for_each_crtc_in_state(state, crtc, crtc_state, i) {
|
||||
int num_connectors;
|
||||
|
||||
crtc = state->crtcs[i];
|
||||
crtc_state = state->crtc_states[i];
|
||||
|
||||
if (!crtc)
|
||||
continue;
|
||||
|
||||
/*
|
||||
* We must set ->active_changed after walking connectors for
|
||||
* otherwise an update that only changes active would result in
|
||||
@ -476,17 +455,14 @@ int
|
||||
drm_atomic_helper_check_planes(struct drm_device *dev,
|
||||
struct drm_atomic_state *state)
|
||||
{
|
||||
int nplanes = dev->mode_config.num_total_plane;
|
||||
int ncrtcs = dev->mode_config.num_crtc;
|
||||
struct drm_crtc *crtc;
|
||||
struct drm_crtc_state *crtc_state;
|
||||
struct drm_plane *plane;
|
||||
struct drm_plane_state *plane_state;
|
||||
int i, ret = 0;
|
||||
|
||||
for (i = 0; i < nplanes; i++) {
|
||||
for_each_plane_in_state(state, plane, plane_state, i) {
|
||||
const struct drm_plane_helper_funcs *funcs;
|
||||
struct drm_plane *plane = state->planes[i];
|
||||
struct drm_plane_state *plane_state = state->plane_states[i];
|
||||
|
||||
if (!plane)
|
||||
continue;
|
||||
|
||||
funcs = plane->helper_private;
|
||||
|
||||
@ -503,12 +479,8 @@ drm_atomic_helper_check_planes(struct drm_device *dev,
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < ncrtcs; i++) {
|
||||
for_each_crtc_in_state(state, crtc, crtc_state, i) {
|
||||
const struct drm_crtc_helper_funcs *funcs;
|
||||
struct drm_crtc *crtc = state->crtcs[i];
|
||||
|
||||
if (!crtc)
|
||||
continue;
|
||||
|
||||
funcs = crtc->helper_private;
|
||||
|
||||
@ -567,22 +539,20 @@ EXPORT_SYMBOL(drm_atomic_helper_check);
|
||||
static void
|
||||
disable_outputs(struct drm_device *dev, struct drm_atomic_state *old_state)
|
||||
{
|
||||
int ncrtcs = old_state->dev->mode_config.num_crtc;
|
||||
struct drm_connector *connector;
|
||||
struct drm_connector_state *old_conn_state;
|
||||
struct drm_crtc *crtc;
|
||||
struct drm_crtc_state *old_crtc_state;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < old_state->num_connector; i++) {
|
||||
for_each_connector_in_state(old_state, connector, old_conn_state, i) {
|
||||
const struct drm_encoder_helper_funcs *funcs;
|
||||
struct drm_connector_state *old_conn_state;
|
||||
struct drm_connector *connector;
|
||||
struct drm_encoder *encoder;
|
||||
struct drm_crtc_state *old_crtc_state;
|
||||
|
||||
old_conn_state = old_state->connector_states[i];
|
||||
connector = old_state->connectors[i];
|
||||
|
||||
/* Shut down everything that's in the changeset and currently
|
||||
* still on. So need to check the old, saved state. */
|
||||
if (!old_conn_state || !old_conn_state->crtc)
|
||||
if (!old_conn_state->crtc)
|
||||
continue;
|
||||
|
||||
old_crtc_state = old_state->crtc_states[drm_crtc_index(old_conn_state->crtc)];
|
||||
@ -623,16 +593,11 @@ disable_outputs(struct drm_device *dev, struct drm_atomic_state *old_state)
|
||||
encoder->bridge->funcs->post_disable(encoder->bridge);
|
||||
}
|
||||
|
||||
for (i = 0; i < ncrtcs; i++) {
|
||||
for_each_crtc_in_state(old_state, crtc, old_crtc_state, i) {
|
||||
const struct drm_crtc_helper_funcs *funcs;
|
||||
struct drm_crtc *crtc;
|
||||
struct drm_crtc_state *old_crtc_state;
|
||||
|
||||
crtc = old_state->crtcs[i];
|
||||
old_crtc_state = old_state->crtc_states[i];
|
||||
|
||||
/* Shut down everything that needs a full modeset. */
|
||||
if (!crtc || !needs_modeset(crtc->state))
|
||||
if (!needs_modeset(crtc->state))
|
||||
continue;
|
||||
|
||||
if (!old_crtc_state->active)
|
||||
@ -657,16 +622,15 @@ disable_outputs(struct drm_device *dev, struct drm_atomic_state *old_state)
|
||||
static void
|
||||
set_routing_links(struct drm_device *dev, struct drm_atomic_state *old_state)
|
||||
{
|
||||
int ncrtcs = old_state->dev->mode_config.num_crtc;
|
||||
struct drm_connector *connector;
|
||||
struct drm_connector_state *old_conn_state;
|
||||
struct drm_crtc *crtc;
|
||||
struct drm_crtc_state *old_crtc_state;
|
||||
int i;
|
||||
|
||||
/* clear out existing links */
|
||||
for (i = 0; i < old_state->num_connector; i++) {
|
||||
struct drm_connector *connector;
|
||||
|
||||
connector = old_state->connectors[i];
|
||||
|
||||
if (!connector || !connector->encoder)
|
||||
for_each_connector_in_state(old_state, connector, old_conn_state, i) {
|
||||
if (!connector->encoder)
|
||||
continue;
|
||||
|
||||
WARN_ON(!connector->encoder->crtc);
|
||||
@ -676,12 +640,8 @@ set_routing_links(struct drm_device *dev, struct drm_atomic_state *old_state)
|
||||
}
|
||||
|
||||
/* set new links */
|
||||
for (i = 0; i < old_state->num_connector; i++) {
|
||||
struct drm_connector *connector;
|
||||
|
||||
connector = old_state->connectors[i];
|
||||
|
||||
if (!connector || !connector->state->crtc)
|
||||
for_each_connector_in_state(old_state, connector, old_conn_state, i) {
|
||||
if (!connector->state->crtc)
|
||||
continue;
|
||||
|
||||
if (WARN_ON(!connector->state->best_encoder))
|
||||
@ -692,14 +652,7 @@ set_routing_links(struct drm_device *dev, struct drm_atomic_state *old_state)
|
||||
}
|
||||
|
||||
/* set legacy state in the crtc structure */
|
||||
for (i = 0; i < ncrtcs; i++) {
|
||||
struct drm_crtc *crtc;
|
||||
|
||||
crtc = old_state->crtcs[i];
|
||||
|
||||
if (!crtc)
|
||||
continue;
|
||||
|
||||
for_each_crtc_in_state(old_state, crtc, old_crtc_state, i) {
|
||||
crtc->mode = crtc->state->mode;
|
||||
crtc->enabled = crtc->state->enable;
|
||||
crtc->x = crtc->primary->state->src_x >> 16;
|
||||
@ -710,16 +663,16 @@ set_routing_links(struct drm_device *dev, struct drm_atomic_state *old_state)
|
||||
static void
|
||||
crtc_set_mode(struct drm_device *dev, struct drm_atomic_state *old_state)
|
||||
{
|
||||
int ncrtcs = old_state->dev->mode_config.num_crtc;
|
||||
struct drm_crtc *crtc;
|
||||
struct drm_crtc_state *old_crtc_state;
|
||||
struct drm_connector *connector;
|
||||
struct drm_connector_state *old_conn_state;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ncrtcs; i++) {
|
||||
for_each_crtc_in_state(old_state, crtc, old_crtc_state, i) {
|
||||
const struct drm_crtc_helper_funcs *funcs;
|
||||
struct drm_crtc *crtc;
|
||||
|
||||
crtc = old_state->crtcs[i];
|
||||
|
||||
if (!crtc || !crtc->state->mode_changed)
|
||||
if (!crtc->state->mode_changed)
|
||||
continue;
|
||||
|
||||
funcs = crtc->helper_private;
|
||||
@ -732,16 +685,13 @@ crtc_set_mode(struct drm_device *dev, struct drm_atomic_state *old_state)
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < old_state->num_connector; i++) {
|
||||
for_each_connector_in_state(old_state, connector, old_conn_state, i) {
|
||||
const struct drm_encoder_helper_funcs *funcs;
|
||||
struct drm_connector *connector;
|
||||
struct drm_crtc_state *new_crtc_state;
|
||||
struct drm_encoder *encoder;
|
||||
struct drm_display_mode *mode, *adjusted_mode;
|
||||
|
||||
connector = old_state->connectors[i];
|
||||
|
||||
if (!connector || !connector->state->best_encoder)
|
||||
if (!connector->state->best_encoder)
|
||||
continue;
|
||||
|
||||
encoder = connector->state->best_encoder;
|
||||
@ -809,17 +759,17 @@ EXPORT_SYMBOL(drm_atomic_helper_commit_modeset_disables);
|
||||
void drm_atomic_helper_commit_modeset_enables(struct drm_device *dev,
|
||||
struct drm_atomic_state *old_state)
|
||||
{
|
||||
int ncrtcs = old_state->dev->mode_config.num_crtc;
|
||||
struct drm_crtc *crtc;
|
||||
struct drm_crtc_state *old_crtc_state;
|
||||
struct drm_connector *connector;
|
||||
struct drm_connector_state *old_conn_state;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ncrtcs; i++) {
|
||||
for_each_crtc_in_state(old_state, crtc, old_crtc_state, i) {
|
||||
const struct drm_crtc_helper_funcs *funcs;
|
||||
struct drm_crtc *crtc;
|
||||
|
||||
crtc = old_state->crtcs[i];
|
||||
|
||||
/* Need to filter out CRTCs where only planes change. */
|
||||
if (!crtc || !needs_modeset(crtc->state))
|
||||
if (!needs_modeset(crtc->state))
|
||||
continue;
|
||||
|
||||
if (!crtc->state->active)
|
||||
@ -838,14 +788,11 @@ void drm_atomic_helper_commit_modeset_enables(struct drm_device *dev,
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < old_state->num_connector; i++) {
|
||||
for_each_connector_in_state(old_state, connector, old_conn_state, i) {
|
||||
const struct drm_encoder_helper_funcs *funcs;
|
||||
struct drm_connector *connector;
|
||||
struct drm_encoder *encoder;
|
||||
|
||||
connector = old_state->connectors[i];
|
||||
|
||||
if (!connector || !connector->state->best_encoder)
|
||||
if (!connector->state->best_encoder)
|
||||
continue;
|
||||
|
||||
if (!connector->state->crtc->state->active ||
|
||||
@ -879,13 +826,12 @@ EXPORT_SYMBOL(drm_atomic_helper_commit_modeset_enables);
|
||||
static void wait_for_fences(struct drm_device *dev,
|
||||
struct drm_atomic_state *state)
|
||||
{
|
||||
int nplanes = dev->mode_config.num_total_plane;
|
||||
struct drm_plane *plane;
|
||||
struct drm_plane_state *plane_state;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < nplanes; i++) {
|
||||
struct drm_plane *plane = state->planes[i];
|
||||
|
||||
if (!plane || !plane->state->fence)
|
||||
for_each_plane_in_state(state, plane, plane_state, i) {
|
||||
if (!plane->state->fence)
|
||||
continue;
|
||||
|
||||
WARN_ON(!plane->state->fb);
|
||||
@ -902,16 +848,9 @@ static bool framebuffer_changed(struct drm_device *dev,
|
||||
{
|
||||
struct drm_plane *plane;
|
||||
struct drm_plane_state *old_plane_state;
|
||||
int nplanes = old_state->dev->mode_config.num_total_plane;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < nplanes; i++) {
|
||||
plane = old_state->planes[i];
|
||||
old_plane_state = old_state->plane_states[i];
|
||||
|
||||
if (!plane)
|
||||
continue;
|
||||
|
||||
for_each_plane_in_state(old_state, plane, old_plane_state, i) {
|
||||
if (plane->state->crtc != crtc &&
|
||||
old_plane_state->crtc != crtc)
|
||||
continue;
|
||||
@ -940,16 +879,9 @@ drm_atomic_helper_wait_for_vblanks(struct drm_device *dev,
|
||||
{
|
||||
struct drm_crtc *crtc;
|
||||
struct drm_crtc_state *old_crtc_state;
|
||||
int ncrtcs = old_state->dev->mode_config.num_crtc;
|
||||
int i, ret;
|
||||
|
||||
for (i = 0; i < ncrtcs; i++) {
|
||||
crtc = old_state->crtcs[i];
|
||||
old_crtc_state = old_state->crtc_states[i];
|
||||
|
||||
if (!crtc)
|
||||
continue;
|
||||
|
||||
for_each_crtc_in_state(old_state, crtc, old_crtc_state, i) {
|
||||
/* No one cares about the old state, so abuse it for tracking
|
||||
* and store whether we hold a vblank reference (and should do a
|
||||
* vblank wait) in the ->enable boolean. */
|
||||
@ -974,11 +906,8 @@ drm_atomic_helper_wait_for_vblanks(struct drm_device *dev,
|
||||
old_crtc_state->last_vblank_count = drm_vblank_count(dev, i);
|
||||
}
|
||||
|
||||
for (i = 0; i < ncrtcs; i++) {
|
||||
crtc = old_state->crtcs[i];
|
||||
old_crtc_state = old_state->crtc_states[i];
|
||||
|
||||
if (!crtc || !old_crtc_state->enable)
|
||||
for_each_crtc_in_state(old_state, crtc, old_crtc_state, i) {
|
||||
if (!old_crtc_state->enable)
|
||||
continue;
|
||||
|
||||
ret = wait_event_timeout(dev->vblank[i].queue,
|
||||
@ -1176,16 +1105,14 @@ EXPORT_SYMBOL(drm_atomic_helper_prepare_planes);
|
||||
void drm_atomic_helper_commit_planes(struct drm_device *dev,
|
||||
struct drm_atomic_state *old_state)
|
||||
{
|
||||
int nplanes = dev->mode_config.num_total_plane;
|
||||
int ncrtcs = dev->mode_config.num_crtc;
|
||||
struct drm_crtc *crtc;
|
||||
struct drm_crtc_state *old_crtc_state;
|
||||
struct drm_plane *plane;
|
||||
struct drm_plane_state *old_plane_state;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ncrtcs; i++) {
|
||||
for_each_crtc_in_state(old_state, crtc, old_crtc_state, i) {
|
||||
const struct drm_crtc_helper_funcs *funcs;
|
||||
struct drm_crtc *crtc = old_state->crtcs[i];
|
||||
|
||||
if (!crtc)
|
||||
continue;
|
||||
|
||||
funcs = crtc->helper_private;
|
||||
|
||||
@ -1195,13 +1122,8 @@ void drm_atomic_helper_commit_planes(struct drm_device *dev,
|
||||
funcs->atomic_begin(crtc);
|
||||
}
|
||||
|
||||
for (i = 0; i < nplanes; i++) {
|
||||
for_each_plane_in_state(old_state, plane, old_plane_state, i) {
|
||||
const struct drm_plane_helper_funcs *funcs;
|
||||
struct drm_plane *plane = old_state->planes[i];
|
||||
struct drm_plane_state *old_plane_state;
|
||||
|
||||
if (!plane)
|
||||
continue;
|
||||
|
||||
funcs = plane->helper_private;
|
||||
|
||||
@ -1220,12 +1142,8 @@ void drm_atomic_helper_commit_planes(struct drm_device *dev,
|
||||
funcs->atomic_update(plane, old_plane_state);
|
||||
}
|
||||
|
||||
for (i = 0; i < ncrtcs; i++) {
|
||||
for_each_crtc_in_state(old_state, crtc, old_crtc_state, i) {
|
||||
const struct drm_crtc_helper_funcs *funcs;
|
||||
struct drm_crtc *crtc = old_state->crtcs[i];
|
||||
|
||||
if (!crtc)
|
||||
continue;
|
||||
|
||||
funcs = crtc->helper_private;
|
||||
|
||||
@ -1252,18 +1170,14 @@ EXPORT_SYMBOL(drm_atomic_helper_commit_planes);
|
||||
void drm_atomic_helper_cleanup_planes(struct drm_device *dev,
|
||||
struct drm_atomic_state *old_state)
|
||||
{
|
||||
int nplanes = dev->mode_config.num_total_plane;
|
||||
struct drm_plane *plane;
|
||||
struct drm_plane_state *plane_state;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < nplanes; i++) {
|
||||
for_each_plane_in_state(old_state, plane, plane_state, i) {
|
||||
const struct drm_plane_helper_funcs *funcs;
|
||||
struct drm_plane *plane = old_state->planes[i];
|
||||
struct drm_plane_state *plane_state = old_state->plane_states[i];
|
||||
struct drm_framebuffer *old_fb;
|
||||
|
||||
if (!plane)
|
||||
continue;
|
||||
|
||||
funcs = plane->helper_private;
|
||||
|
||||
old_fb = plane_state->fb;
|
||||
@ -1512,8 +1426,10 @@ static int update_output_state(struct drm_atomic_state *state,
|
||||
struct drm_mode_set *set)
|
||||
{
|
||||
struct drm_device *dev = set->crtc->dev;
|
||||
struct drm_crtc *crtc;
|
||||
struct drm_crtc_state *crtc_state;
|
||||
struct drm_connector *connector;
|
||||
struct drm_connector_state *conn_state;
|
||||
int ncrtcs = state->dev->mode_config.num_crtc;
|
||||
int ret, i, j;
|
||||
|
||||
ret = drm_modeset_lock(&dev->mode_config.connection_mutex,
|
||||
@ -1529,27 +1445,14 @@ static int update_output_state(struct drm_atomic_state *state,
|
||||
return PTR_ERR(conn_state);
|
||||
}
|
||||
|
||||
for (i = 0; i < ncrtcs; i++) {
|
||||
struct drm_crtc *crtc = state->crtcs[i];
|
||||
|
||||
if (!crtc)
|
||||
continue;
|
||||
|
||||
for_each_crtc_in_state(state, crtc, crtc_state, i) {
|
||||
ret = drm_atomic_add_affected_connectors(state, crtc);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Then recompute connector->crtc links and crtc enabling state. */
|
||||
for (i = 0; i < state->num_connector; i++) {
|
||||
struct drm_connector *connector;
|
||||
|
||||
connector = state->connectors[i];
|
||||
conn_state = state->connector_states[i];
|
||||
|
||||
if (!connector)
|
||||
continue;
|
||||
|
||||
for_each_connector_in_state(state, connector, conn_state, i) {
|
||||
if (conn_state->crtc == set->crtc) {
|
||||
ret = drm_atomic_set_crtc_for_connector(conn_state,
|
||||
NULL);
|
||||
@ -1568,13 +1471,7 @@ static int update_output_state(struct drm_atomic_state *state,
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < ncrtcs; i++) {
|
||||
struct drm_crtc *crtc = state->crtcs[i];
|
||||
struct drm_crtc_state *crtc_state = state->crtc_states[i];
|
||||
|
||||
if (!crtc)
|
||||
continue;
|
||||
|
||||
for_each_crtc_in_state(state, crtc, crtc_state, i) {
|
||||
/* Don't update ->enable for the CRTC in the set_config request,
|
||||
* since a mismatch would indicate a bug in the upper layers.
|
||||
* The actual modeset code later on will catch any
|
||||
|
@ -2482,6 +2482,17 @@ static int __setplane_internal(struct drm_plane *plane,
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* Give drivers some help against integer overflows */
|
||||
if (crtc_w > INT_MAX ||
|
||||
crtc_x > INT_MAX - (int32_t) crtc_w ||
|
||||
crtc_h > INT_MAX ||
|
||||
crtc_y > INT_MAX - (int32_t) crtc_h) {
|
||||
DRM_DEBUG_KMS("Invalid CRTC coordinates %ux%u+%d+%d\n",
|
||||
crtc_w, crtc_h, crtc_x, crtc_y);
|
||||
return -ERANGE;
|
||||
}
|
||||
|
||||
|
||||
fb_width = fb->width << 16;
|
||||
fb_height = fb->height << 16;
|
||||
|
||||
@ -2566,17 +2577,6 @@ int drm_mode_setplane(struct drm_device *dev, void *data,
|
||||
if (!drm_core_check_feature(dev, DRIVER_MODESET))
|
||||
return -EINVAL;
|
||||
|
||||
/* Give drivers some help against integer overflows */
|
||||
if (plane_req->crtc_w > INT_MAX ||
|
||||
plane_req->crtc_x > INT_MAX - (int32_t) plane_req->crtc_w ||
|
||||
plane_req->crtc_h > INT_MAX ||
|
||||
plane_req->crtc_y > INT_MAX - (int32_t) plane_req->crtc_h) {
|
||||
DRM_DEBUG_KMS("Invalid CRTC coordinates %ux%u+%d+%d\n",
|
||||
plane_req->crtc_w, plane_req->crtc_h,
|
||||
plane_req->crtc_x, plane_req->crtc_y);
|
||||
return -ERANGE;
|
||||
}
|
||||
|
||||
/*
|
||||
* First, find the plane, crtc, and fb objects. If not available,
|
||||
* we don't bother to call the driver.
|
||||
|
@ -161,7 +161,7 @@ EXPORT_SYMBOL(drm_helper_crtc_in_use);
|
||||
static void
|
||||
drm_encoder_disable(struct drm_encoder *encoder)
|
||||
{
|
||||
struct drm_encoder_helper_funcs *encoder_funcs = encoder->helper_private;
|
||||
const struct drm_encoder_helper_funcs *encoder_funcs = encoder->helper_private;
|
||||
|
||||
if (encoder->bridge)
|
||||
encoder->bridge->funcs->disable(encoder->bridge);
|
||||
@ -191,7 +191,7 @@ static void __drm_helper_disable_unused_functions(struct drm_device *dev)
|
||||
}
|
||||
|
||||
list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
|
||||
struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
|
||||
const struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
|
||||
crtc->enabled = drm_helper_crtc_in_use(crtc);
|
||||
if (!crtc->enabled) {
|
||||
if (crtc_funcs->disable)
|
||||
@ -229,7 +229,7 @@ EXPORT_SYMBOL(drm_helper_disable_unused_functions);
|
||||
static void
|
||||
drm_crtc_prepare_encoders(struct drm_device *dev)
|
||||
{
|
||||
struct drm_encoder_helper_funcs *encoder_funcs;
|
||||
const struct drm_encoder_helper_funcs *encoder_funcs;
|
||||
struct drm_encoder *encoder;
|
||||
|
||||
list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
|
||||
@ -271,8 +271,8 @@ bool drm_crtc_helper_set_mode(struct drm_crtc *crtc,
|
||||
{
|
||||
struct drm_device *dev = crtc->dev;
|
||||
struct drm_display_mode *adjusted_mode, saved_mode, saved_hwmode;
|
||||
struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
|
||||
struct drm_encoder_helper_funcs *encoder_funcs;
|
||||
const struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
|
||||
const struct drm_encoder_helper_funcs *encoder_funcs;
|
||||
int saved_x, saved_y;
|
||||
bool saved_enabled;
|
||||
struct drm_encoder *encoder;
|
||||
@ -473,7 +473,7 @@ int drm_crtc_helper_set_config(struct drm_mode_set *set)
|
||||
bool fb_changed = false; /* if true and !mode_changed just do a flip */
|
||||
struct drm_connector *save_connectors, *connector;
|
||||
int count = 0, ro, fail = 0;
|
||||
struct drm_crtc_helper_funcs *crtc_funcs;
|
||||
const struct drm_crtc_helper_funcs *crtc_funcs;
|
||||
struct drm_mode_set save_set;
|
||||
int ret;
|
||||
int i;
|
||||
@ -573,7 +573,7 @@ int drm_crtc_helper_set_config(struct drm_mode_set *set)
|
||||
/* a) traverse passed in connector list and get encoders for them */
|
||||
count = 0;
|
||||
list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
|
||||
struct drm_connector_helper_funcs *connector_funcs =
|
||||
const struct drm_connector_helper_funcs *connector_funcs =
|
||||
connector->helper_private;
|
||||
new_encoder = connector->encoder;
|
||||
for (ro = 0; ro < set->num_connectors; ro++) {
|
||||
@ -733,7 +733,7 @@ static int drm_helper_choose_encoder_dpms(struct drm_encoder *encoder)
|
||||
static void drm_helper_encoder_dpms(struct drm_encoder *encoder, int mode)
|
||||
{
|
||||
struct drm_bridge *bridge = encoder->bridge;
|
||||
struct drm_encoder_helper_funcs *encoder_funcs;
|
||||
const struct drm_encoder_helper_funcs *encoder_funcs;
|
||||
|
||||
if (bridge) {
|
||||
if (mode == DRM_MODE_DPMS_ON)
|
||||
@ -795,7 +795,7 @@ void drm_helper_connector_dpms(struct drm_connector *connector, int mode)
|
||||
/* from off to on, do crtc then encoder */
|
||||
if (mode < old_dpms) {
|
||||
if (crtc) {
|
||||
struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
|
||||
const struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
|
||||
if (crtc_funcs->dpms)
|
||||
(*crtc_funcs->dpms) (crtc,
|
||||
drm_helper_choose_crtc_dpms(crtc));
|
||||
@ -809,7 +809,7 @@ void drm_helper_connector_dpms(struct drm_connector *connector, int mode)
|
||||
if (encoder)
|
||||
drm_helper_encoder_dpms(encoder, encoder_dpms);
|
||||
if (crtc) {
|
||||
struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
|
||||
const struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
|
||||
if (crtc_funcs->dpms)
|
||||
(*crtc_funcs->dpms) (crtc,
|
||||
drm_helper_choose_crtc_dpms(crtc));
|
||||
@ -871,7 +871,7 @@ void drm_helper_resume_force_mode(struct drm_device *dev)
|
||||
{
|
||||
struct drm_crtc *crtc;
|
||||
struct drm_encoder *encoder;
|
||||
struct drm_crtc_helper_funcs *crtc_funcs;
|
||||
const struct drm_crtc_helper_funcs *crtc_funcs;
|
||||
int encoder_dpms;
|
||||
bool ret;
|
||||
|
||||
@ -936,7 +936,7 @@ int drm_helper_crtc_mode_set(struct drm_crtc *crtc, struct drm_display_mode *mod
|
||||
struct drm_framebuffer *old_fb)
|
||||
{
|
||||
struct drm_crtc_state *crtc_state;
|
||||
struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
|
||||
const struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
|
||||
int ret;
|
||||
|
||||
if (crtc->funcs->atomic_duplicate_state)
|
||||
|
@ -238,7 +238,7 @@ static void drm_fb_helper_restore_lut_atomic(struct drm_crtc *crtc)
|
||||
int drm_fb_helper_debug_enter(struct fb_info *info)
|
||||
{
|
||||
struct drm_fb_helper *helper = info->par;
|
||||
struct drm_crtc_helper_funcs *funcs;
|
||||
const struct drm_crtc_helper_funcs *funcs;
|
||||
int i;
|
||||
|
||||
list_for_each_entry(helper, &kernel_fb_helper_list, kernel_fb_list) {
|
||||
@ -285,7 +285,7 @@ int drm_fb_helper_debug_leave(struct fb_info *info)
|
||||
{
|
||||
struct drm_fb_helper *helper = info->par;
|
||||
struct drm_crtc *crtc;
|
||||
struct drm_crtc_helper_funcs *funcs;
|
||||
const struct drm_crtc_helper_funcs *funcs;
|
||||
struct drm_framebuffer *fb;
|
||||
int i;
|
||||
|
||||
@ -765,7 +765,7 @@ int drm_fb_helper_setcmap(struct fb_cmap *cmap, struct fb_info *info)
|
||||
{
|
||||
struct drm_fb_helper *fb_helper = info->par;
|
||||
struct drm_device *dev = fb_helper->dev;
|
||||
struct drm_crtc_helper_funcs *crtc_funcs;
|
||||
const struct drm_crtc_helper_funcs *crtc_funcs;
|
||||
u16 *red, *green, *blue, *transp;
|
||||
struct drm_crtc *crtc;
|
||||
int i, j, rc = 0;
|
||||
@ -1551,7 +1551,7 @@ static int drm_pick_crtcs(struct drm_fb_helper *fb_helper,
|
||||
int c, o;
|
||||
struct drm_device *dev = fb_helper->dev;
|
||||
struct drm_connector *connector;
|
||||
struct drm_connector_helper_funcs *connector_funcs;
|
||||
const struct drm_connector_helper_funcs *connector_funcs;
|
||||
struct drm_encoder *encoder;
|
||||
int my_score, best_score, score;
|
||||
struct drm_fb_helper_crtc **crtcs, *crtc;
|
||||
|
@ -401,9 +401,9 @@ int drm_plane_helper_commit(struct drm_plane *plane,
|
||||
struct drm_plane_state *plane_state,
|
||||
struct drm_framebuffer *old_fb)
|
||||
{
|
||||
struct drm_plane_helper_funcs *plane_funcs;
|
||||
const struct drm_plane_helper_funcs *plane_funcs;
|
||||
struct drm_crtc *crtc[2];
|
||||
struct drm_crtc_helper_funcs *crtc_funcs[2];
|
||||
const struct drm_crtc_helper_funcs *crtc_funcs[2];
|
||||
int i, ret = 0;
|
||||
|
||||
plane_funcs = plane->helper_private;
|
||||
|
@ -98,7 +98,7 @@ static int drm_helper_probe_single_connector_modes_merge_bits(struct drm_connect
|
||||
{
|
||||
struct drm_device *dev = connector->dev;
|
||||
struct drm_display_mode *mode;
|
||||
struct drm_connector_helper_funcs *connector_funcs =
|
||||
const struct drm_connector_helper_funcs *connector_funcs =
|
||||
connector->helper_private;
|
||||
int count = 0;
|
||||
int mode_flags = 0;
|
||||
|
@ -2101,7 +2101,7 @@ static void hdmi_dpms(struct exynos_drm_display *display, int mode)
|
||||
struct hdmi_context *hdata = display_to_hdmi(display);
|
||||
struct drm_encoder *encoder = hdata->encoder;
|
||||
struct drm_crtc *crtc = encoder->crtc;
|
||||
struct drm_crtc_helper_funcs *funcs = NULL;
|
||||
const struct drm_crtc_helper_funcs *funcs = NULL;
|
||||
|
||||
DRM_DEBUG_KMS("mode %d\n", mode);
|
||||
|
||||
|
@ -823,7 +823,7 @@ static int cdv_intel_crtc_mode_set(struct drm_crtc *crtc,
|
||||
|
||||
/* Flush the plane changes */
|
||||
{
|
||||
struct drm_crtc_helper_funcs *crtc_funcs =
|
||||
const struct drm_crtc_helper_funcs *crtc_funcs =
|
||||
crtc->helper_private;
|
||||
crtc_funcs->mode_set_base(crtc, x, y, old_fb);
|
||||
}
|
||||
|
@ -195,7 +195,7 @@ static int cdv_hdmi_set_property(struct drm_connector *connector,
|
||||
encoder->crtc->x, encoder->crtc->y, encoder->crtc->primary->fb))
|
||||
return -1;
|
||||
} else {
|
||||
struct drm_encoder_helper_funcs *helpers
|
||||
const struct drm_encoder_helper_funcs *helpers
|
||||
= encoder->helper_private;
|
||||
helpers->mode_set(encoder, &crtc->saved_mode,
|
||||
&crtc->saved_adjusted_mode);
|
||||
|
@ -505,7 +505,7 @@ static int cdv_intel_lvds_set_property(struct drm_connector *connector,
|
||||
else
|
||||
gma_backlight_set(encoder->dev, value);
|
||||
} else if (!strcmp(property->name, "DPMS") && encoder) {
|
||||
struct drm_encoder_helper_funcs *helpers =
|
||||
const struct drm_encoder_helper_funcs *helpers =
|
||||
encoder->helper_private;
|
||||
helpers->dpms(encoder, value);
|
||||
}
|
||||
|
@ -501,20 +501,20 @@ bool gma_crtc_mode_fixup(struct drm_crtc *crtc,
|
||||
|
||||
void gma_crtc_prepare(struct drm_crtc *crtc)
|
||||
{
|
||||
struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
|
||||
const struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
|
||||
crtc_funcs->dpms(crtc, DRM_MODE_DPMS_OFF);
|
||||
}
|
||||
|
||||
void gma_crtc_commit(struct drm_crtc *crtc)
|
||||
{
|
||||
struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
|
||||
const struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
|
||||
crtc_funcs->dpms(crtc, DRM_MODE_DPMS_ON);
|
||||
}
|
||||
|
||||
void gma_crtc_disable(struct drm_crtc *crtc)
|
||||
{
|
||||
struct gtt_range *gt;
|
||||
struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
|
||||
const struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
|
||||
|
||||
crtc_funcs->dpms(crtc, DRM_MODE_DPMS_OFF);
|
||||
|
||||
@ -656,7 +656,7 @@ void gma_crtc_restore(struct drm_crtc *crtc)
|
||||
|
||||
void gma_encoder_prepare(struct drm_encoder *encoder)
|
||||
{
|
||||
struct drm_encoder_helper_funcs *encoder_funcs =
|
||||
const struct drm_encoder_helper_funcs *encoder_funcs =
|
||||
encoder->helper_private;
|
||||
/* lvds has its own version of prepare see psb_intel_lvds_prepare */
|
||||
encoder_funcs->dpms(encoder, DRM_MODE_DPMS_OFF);
|
||||
@ -664,7 +664,7 @@ void gma_encoder_prepare(struct drm_encoder *encoder)
|
||||
|
||||
void gma_encoder_commit(struct drm_encoder *encoder)
|
||||
{
|
||||
struct drm_encoder_helper_funcs *encoder_funcs =
|
||||
const struct drm_encoder_helper_funcs *encoder_funcs =
|
||||
encoder->helper_private;
|
||||
/* lvds has its own version of commit see psb_intel_lvds_commit */
|
||||
encoder_funcs->dpms(encoder, DRM_MODE_DPMS_ON);
|
||||
|
@ -290,7 +290,7 @@ static int mdfld_dsi_connector_set_property(struct drm_connector *connector,
|
||||
encoder->crtc->primary->fb))
|
||||
goto set_prop_error;
|
||||
} else {
|
||||
struct drm_encoder_helper_funcs *funcs =
|
||||
const struct drm_encoder_helper_funcs *funcs =
|
||||
encoder->helper_private;
|
||||
funcs->mode_set(encoder,
|
||||
&gma_crtc->saved_mode,
|
||||
|
@ -849,7 +849,7 @@ static int mdfld_crtc_mode_set(struct drm_crtc *crtc,
|
||||
|
||||
/* Flush the plane changes */
|
||||
{
|
||||
struct drm_crtc_helper_funcs *crtc_funcs =
|
||||
const struct drm_crtc_helper_funcs *crtc_funcs =
|
||||
crtc->helper_private;
|
||||
crtc_funcs->mode_set_base(crtc, x, y, old_fb);
|
||||
}
|
||||
|
@ -483,7 +483,7 @@ static int oaktrail_crtc_mode_set(struct drm_crtc *crtc,
|
||||
|
||||
/* Flush the plane changes */
|
||||
{
|
||||
struct drm_crtc_helper_funcs *crtc_funcs =
|
||||
const struct drm_crtc_helper_funcs *crtc_funcs =
|
||||
crtc->helper_private;
|
||||
crtc_funcs->mode_set_base(crtc, x, y, old_fb);
|
||||
}
|
||||
|
@ -347,7 +347,7 @@ int oaktrail_crtc_hdmi_mode_set(struct drm_crtc *crtc,
|
||||
|
||||
/* Flush the plane changes */
|
||||
{
|
||||
struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
|
||||
const struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
|
||||
crtc_funcs->mode_set_base(crtc, x, y, old_fb);
|
||||
}
|
||||
|
||||
|
@ -108,7 +108,7 @@ static int psb_intel_crtc_mode_set(struct drm_crtc *crtc,
|
||||
struct drm_device *dev = crtc->dev;
|
||||
struct drm_psb_private *dev_priv = dev->dev_private;
|
||||
struct gma_crtc *gma_crtc = to_gma_crtc(crtc);
|
||||
struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
|
||||
const struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
|
||||
int pipe = gma_crtc->pipe;
|
||||
const struct psb_offset *map = &dev_priv->regmap[pipe];
|
||||
int refclk;
|
||||
|
@ -625,7 +625,7 @@ int psb_intel_lvds_set_property(struct drm_connector *connector,
|
||||
else
|
||||
gma_backlight_set(encoder->dev, value);
|
||||
} else if (!strcmp(property->name, "DPMS")) {
|
||||
struct drm_encoder_helper_funcs *hfuncs
|
||||
const struct drm_encoder_helper_funcs *hfuncs
|
||||
= encoder->helper_private;
|
||||
hfuncs->dpms(encoder, value);
|
||||
}
|
||||
|
@ -1222,7 +1222,7 @@ static void mga_crtc_commit(struct drm_crtc *crtc)
|
||||
{
|
||||
struct drm_device *dev = crtc->dev;
|
||||
struct mga_device *mdev = dev->dev_private;
|
||||
struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
|
||||
const struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
|
||||
u8 tmp;
|
||||
|
||||
if (mdev->type == G200_WB)
|
||||
|
@ -703,7 +703,7 @@ static void nv_crtc_prepare(struct drm_crtc *crtc)
|
||||
struct drm_device *dev = crtc->dev;
|
||||
struct nouveau_drm *drm = nouveau_drm(dev);
|
||||
struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc);
|
||||
struct drm_crtc_helper_funcs *funcs = crtc->helper_private;
|
||||
const struct drm_crtc_helper_funcs *funcs = crtc->helper_private;
|
||||
|
||||
if (nv_two_heads(dev))
|
||||
NVSetOwner(dev, nv_crtc->index);
|
||||
@ -724,7 +724,7 @@ static void nv_crtc_prepare(struct drm_crtc *crtc)
|
||||
static void nv_crtc_commit(struct drm_crtc *crtc)
|
||||
{
|
||||
struct drm_device *dev = crtc->dev;
|
||||
struct drm_crtc_helper_funcs *funcs = crtc->helper_private;
|
||||
const struct drm_crtc_helper_funcs *funcs = crtc->helper_private;
|
||||
struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc);
|
||||
|
||||
nouveau_hw_load_state(dev, nv_crtc->index, &nv04_display(dev)->mode_reg);
|
||||
|
@ -358,7 +358,7 @@ static bool nv04_dac_mode_fixup(struct drm_encoder *encoder,
|
||||
|
||||
static void nv04_dac_prepare(struct drm_encoder *encoder)
|
||||
{
|
||||
struct drm_encoder_helper_funcs *helper = encoder->helper_private;
|
||||
const struct drm_encoder_helper_funcs *helper = encoder->helper_private;
|
||||
struct drm_device *dev = encoder->dev;
|
||||
int head = nouveau_crtc(encoder->crtc)->index;
|
||||
|
||||
@ -409,7 +409,7 @@ static void nv04_dac_commit(struct drm_encoder *encoder)
|
||||
struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder);
|
||||
struct nouveau_drm *drm = nouveau_drm(encoder->dev);
|
||||
struct nouveau_crtc *nv_crtc = nouveau_crtc(encoder->crtc);
|
||||
struct drm_encoder_helper_funcs *helper = encoder->helper_private;
|
||||
const struct drm_encoder_helper_funcs *helper = encoder->helper_private;
|
||||
|
||||
helper->dpms(encoder, DRM_MODE_DPMS_ON);
|
||||
|
||||
|
@ -244,7 +244,7 @@ static void nv04_dfp_prepare_sel_clk(struct drm_device *dev,
|
||||
static void nv04_dfp_prepare(struct drm_encoder *encoder)
|
||||
{
|
||||
struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder);
|
||||
struct drm_encoder_helper_funcs *helper = encoder->helper_private;
|
||||
const struct drm_encoder_helper_funcs *helper = encoder->helper_private;
|
||||
struct drm_device *dev = encoder->dev;
|
||||
int head = nouveau_crtc(encoder->crtc)->index;
|
||||
struct nv04_crtc_reg *crtcstate = nv04_display(dev)->mode_reg.crtc_reg;
|
||||
@ -445,7 +445,7 @@ static void nv04_dfp_commit(struct drm_encoder *encoder)
|
||||
{
|
||||
struct drm_device *dev = encoder->dev;
|
||||
struct nouveau_drm *drm = nouveau_drm(dev);
|
||||
struct drm_encoder_helper_funcs *helper = encoder->helper_private;
|
||||
const struct drm_encoder_helper_funcs *helper = encoder->helper_private;
|
||||
struct nouveau_crtc *nv_crtc = nouveau_crtc(encoder->crtc);
|
||||
struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder);
|
||||
struct dcb_output *dcbe = nv_encoder->dcb;
|
||||
|
@ -109,7 +109,7 @@ nv04_display_create(struct drm_device *dev)
|
||||
crtc->funcs->save(crtc);
|
||||
|
||||
list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
|
||||
struct drm_encoder_helper_funcs *func = encoder->helper_private;
|
||||
const struct drm_encoder_helper_funcs *func = encoder->helper_private;
|
||||
|
||||
func->save(encoder);
|
||||
}
|
||||
@ -138,7 +138,7 @@ nv04_display_destroy(struct drm_device *dev)
|
||||
|
||||
/* Restore state */
|
||||
list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
|
||||
struct drm_encoder_helper_funcs *func = encoder->helper_private;
|
||||
const struct drm_encoder_helper_funcs *func = encoder->helper_private;
|
||||
|
||||
func->restore(encoder);
|
||||
}
|
||||
@ -169,7 +169,7 @@ nv04_display_init(struct drm_device *dev)
|
||||
* on suspend too.
|
||||
*/
|
||||
list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
|
||||
struct drm_encoder_helper_funcs *func = encoder->helper_private;
|
||||
const struct drm_encoder_helper_funcs *func = encoder->helper_private;
|
||||
|
||||
func->restore(encoder);
|
||||
}
|
||||
|
@ -122,7 +122,7 @@ static void nv04_tv_prepare(struct drm_encoder *encoder)
|
||||
{
|
||||
struct drm_device *dev = encoder->dev;
|
||||
int head = nouveau_crtc(encoder->crtc)->index;
|
||||
struct drm_encoder_helper_funcs *helper = encoder->helper_private;
|
||||
const struct drm_encoder_helper_funcs *helper = encoder->helper_private;
|
||||
|
||||
helper->dpms(encoder, DRM_MODE_DPMS_OFF);
|
||||
|
||||
@ -164,7 +164,7 @@ static void nv04_tv_commit(struct drm_encoder *encoder)
|
||||
struct drm_device *dev = encoder->dev;
|
||||
struct nouveau_drm *drm = nouveau_drm(dev);
|
||||
struct nouveau_crtc *nv_crtc = nouveau_crtc(encoder->crtc);
|
||||
struct drm_encoder_helper_funcs *helper = encoder->helper_private;
|
||||
const struct drm_encoder_helper_funcs *helper = encoder->helper_private;
|
||||
|
||||
helper->dpms(encoder, DRM_MODE_DPMS_ON);
|
||||
|
||||
|
@ -405,7 +405,7 @@ static void nv17_tv_prepare(struct drm_encoder *encoder)
|
||||
{
|
||||
struct drm_device *dev = encoder->dev;
|
||||
struct nouveau_drm *drm = nouveau_drm(dev);
|
||||
struct drm_encoder_helper_funcs *helper = encoder->helper_private;
|
||||
const struct drm_encoder_helper_funcs *helper = encoder->helper_private;
|
||||
struct nv17_tv_norm_params *tv_norm = get_tv_norm(encoder);
|
||||
int head = nouveau_crtc(encoder->crtc)->index;
|
||||
uint8_t *cr_lcd = &nv04_display(dev)->mode_reg.crtc_reg[head].CRTC[
|
||||
@ -583,7 +583,7 @@ static void nv17_tv_commit(struct drm_encoder *encoder)
|
||||
struct nouveau_drm *drm = nouveau_drm(dev);
|
||||
struct nouveau_crtc *nv_crtc = nouveau_crtc(encoder->crtc);
|
||||
struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder);
|
||||
struct drm_encoder_helper_funcs *helper = encoder->helper_private;
|
||||
const struct drm_encoder_helper_funcs *helper = encoder->helper_private;
|
||||
|
||||
if (get_tv_norm(encoder)->kind == TV_ENC_MODE) {
|
||||
nv17_tv_update_rescaler(encoder);
|
||||
|
@ -309,7 +309,7 @@ detect_analog:
|
||||
nv_encoder = find_encoder(connector, DCB_OUTPUT_TV);
|
||||
if (nv_encoder && force) {
|
||||
struct drm_encoder *encoder = to_drm_encoder(nv_encoder);
|
||||
struct drm_encoder_helper_funcs *helper =
|
||||
const struct drm_encoder_helper_funcs *helper =
|
||||
encoder->helper_private;
|
||||
|
||||
if (helper->detect(encoder, connector) ==
|
||||
@ -592,7 +592,7 @@ nouveau_connector_set_property(struct drm_connector *connector,
|
||||
static struct drm_display_mode *
|
||||
nouveau_connector_native_mode(struct drm_connector *connector)
|
||||
{
|
||||
struct drm_connector_helper_funcs *helper = connector->helper_private;
|
||||
const struct drm_connector_helper_funcs *helper = connector->helper_private;
|
||||
struct nouveau_drm *drm = nouveau_drm(connector->dev);
|
||||
struct nouveau_connector *nv_connector = nouveau_connector(connector);
|
||||
struct drm_device *dev = connector->dev;
|
||||
|
@ -102,7 +102,7 @@ static int qxl_drm_freeze(struct drm_device *dev)
|
||||
|
||||
/* unpin the front buffers */
|
||||
list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
|
||||
struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
|
||||
const struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
|
||||
if (crtc->enabled)
|
||||
(*crtc_funcs->disable)(crtc);
|
||||
}
|
||||
|
@ -157,7 +157,7 @@ int radeon_get_monitor_bpc(struct drm_connector *connector)
|
||||
if (connector->display_info.bpc)
|
||||
bpc = connector->display_info.bpc;
|
||||
else if (ASIC_IS_DCE41(rdev) || ASIC_IS_DCE5(rdev)) {
|
||||
struct drm_connector_helper_funcs *connector_funcs =
|
||||
const struct drm_connector_helper_funcs *connector_funcs =
|
||||
connector->helper_private;
|
||||
struct drm_encoder *encoder = connector_funcs->best_encoder(connector);
|
||||
struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
|
||||
@ -247,7 +247,7 @@ radeon_connector_update_scratch_regs(struct drm_connector *connector, enum drm_c
|
||||
struct radeon_device *rdev = dev->dev_private;
|
||||
struct drm_encoder *best_encoder = NULL;
|
||||
struct drm_encoder *encoder = NULL;
|
||||
struct drm_connector_helper_funcs *connector_funcs = connector->helper_private;
|
||||
const struct drm_connector_helper_funcs *connector_funcs = connector->helper_private;
|
||||
bool connected;
|
||||
int i;
|
||||
|
||||
@ -724,7 +724,7 @@ static int radeon_connector_set_property(struct drm_connector *connector, struct
|
||||
if (connector->encoder)
|
||||
radeon_encoder = to_radeon_encoder(connector->encoder);
|
||||
else {
|
||||
struct drm_connector_helper_funcs *connector_funcs = connector->helper_private;
|
||||
const struct drm_connector_helper_funcs *connector_funcs = connector->helper_private;
|
||||
radeon_encoder = to_radeon_encoder(connector_funcs->best_encoder(connector));
|
||||
}
|
||||
|
||||
@ -751,7 +751,7 @@ static int radeon_connector_set_property(struct drm_connector *connector, struct
|
||||
if (connector->encoder)
|
||||
radeon_encoder = to_radeon_encoder(connector->encoder);
|
||||
else {
|
||||
struct drm_connector_helper_funcs *connector_funcs = connector->helper_private;
|
||||
const struct drm_connector_helper_funcs *connector_funcs = connector->helper_private;
|
||||
radeon_encoder = to_radeon_encoder(connector_funcs->best_encoder(connector));
|
||||
}
|
||||
|
||||
@ -762,7 +762,7 @@ static int radeon_connector_set_property(struct drm_connector *connector, struct
|
||||
|
||||
if (connector->encoder->crtc) {
|
||||
struct drm_crtc *crtc = connector->encoder->crtc;
|
||||
struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
|
||||
const struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
|
||||
struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc);
|
||||
|
||||
radeon_crtc->output_csc = radeon_encoder->output_csc;
|
||||
@ -942,7 +942,7 @@ static int radeon_lvds_set_property(struct drm_connector *connector,
|
||||
if (connector->encoder)
|
||||
radeon_encoder = to_radeon_encoder(connector->encoder);
|
||||
else {
|
||||
struct drm_connector_helper_funcs *connector_funcs = connector->helper_private;
|
||||
const struct drm_connector_helper_funcs *connector_funcs = connector->helper_private;
|
||||
radeon_encoder = to_radeon_encoder(connector_funcs->best_encoder(connector));
|
||||
}
|
||||
|
||||
@ -1010,7 +1010,7 @@ radeon_vga_detect(struct drm_connector *connector, bool force)
|
||||
struct radeon_device *rdev = dev->dev_private;
|
||||
struct radeon_connector *radeon_connector = to_radeon_connector(connector);
|
||||
struct drm_encoder *encoder;
|
||||
struct drm_encoder_helper_funcs *encoder_funcs;
|
||||
const struct drm_encoder_helper_funcs *encoder_funcs;
|
||||
bool dret = false;
|
||||
enum drm_connector_status ret = connector_status_disconnected;
|
||||
int r;
|
||||
@ -1140,7 +1140,7 @@ static enum drm_connector_status
|
||||
radeon_tv_detect(struct drm_connector *connector, bool force)
|
||||
{
|
||||
struct drm_encoder *encoder;
|
||||
struct drm_encoder_helper_funcs *encoder_funcs;
|
||||
const struct drm_encoder_helper_funcs *encoder_funcs;
|
||||
struct radeon_connector *radeon_connector = to_radeon_connector(connector);
|
||||
enum drm_connector_status ret = connector_status_disconnected;
|
||||
int r;
|
||||
@ -1220,7 +1220,7 @@ radeon_dvi_detect(struct drm_connector *connector, bool force)
|
||||
struct radeon_device *rdev = dev->dev_private;
|
||||
struct radeon_connector *radeon_connector = to_radeon_connector(connector);
|
||||
struct drm_encoder *encoder = NULL;
|
||||
struct drm_encoder_helper_funcs *encoder_funcs;
|
||||
const struct drm_encoder_helper_funcs *encoder_funcs;
|
||||
int i, r;
|
||||
enum drm_connector_status ret = connector_status_disconnected;
|
||||
bool dret = false, broken_edid = false;
|
||||
@ -1684,7 +1684,7 @@ radeon_dp_detect(struct drm_connector *connector, bool force)
|
||||
if (radeon_ddc_probe(radeon_connector, true)) /* try DDC */
|
||||
ret = connector_status_connected;
|
||||
else if (radeon_connector->dac_load_detect) { /* try load detection */
|
||||
struct drm_encoder_helper_funcs *encoder_funcs = encoder->helper_private;
|
||||
const struct drm_encoder_helper_funcs *encoder_funcs = encoder->helper_private;
|
||||
ret = encoder_funcs->detect(encoder, connector);
|
||||
}
|
||||
}
|
||||
|
@ -604,7 +604,7 @@ radeon_dp_create_fake_mst_encoder(struct radeon_connector *connector)
|
||||
struct radeon_encoder *radeon_encoder;
|
||||
struct radeon_encoder_mst *mst_enc;
|
||||
struct drm_encoder *encoder;
|
||||
struct drm_connector_helper_funcs *connector_funcs = connector->base.helper_private;
|
||||
const struct drm_connector_helper_funcs *connector_funcs = connector->base.helper_private;
|
||||
struct drm_encoder *enc_master = connector_funcs->best_encoder(&connector->base);
|
||||
|
||||
DRM_DEBUG_KMS("enc master is %p\n", enc_master);
|
||||
|
@ -36,7 +36,7 @@
|
||||
static void radeon_legacy_encoder_disable(struct drm_encoder *encoder)
|
||||
{
|
||||
struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
|
||||
struct drm_encoder_helper_funcs *encoder_funcs;
|
||||
const struct drm_encoder_helper_funcs *encoder_funcs;
|
||||
|
||||
encoder_funcs = encoder->helper_private;
|
||||
encoder_funcs->dpms(encoder, DRM_MODE_DPMS_OFF);
|
||||
|
@ -75,4 +75,28 @@ int __must_check drm_atomic_check_only(struct drm_atomic_state *state);
|
||||
int __must_check drm_atomic_commit(struct drm_atomic_state *state);
|
||||
int __must_check drm_atomic_async_commit(struct drm_atomic_state *state);
|
||||
|
||||
#define for_each_connector_in_state(state, connector, connector_state, __i) \
|
||||
for ((__i) = 0; \
|
||||
(connector) = (state)->connectors[__i], \
|
||||
(connector_state) = (state)->connector_states[__i], \
|
||||
(__i) < (state)->num_connector; \
|
||||
(__i)++) \
|
||||
if (connector)
|
||||
|
||||
#define for_each_crtc_in_state(state, crtc, crtc_state, __i) \
|
||||
for ((__i) = 0; \
|
||||
(crtc) = (state)->crtcs[__i], \
|
||||
(crtc_state) = (state)->crtc_states[__i], \
|
||||
(__i) < (state)->dev->mode_config.num_crtc; \
|
||||
(__i)++) \
|
||||
if (crtc_state)
|
||||
|
||||
#define for_each_plane_in_state(state, plane, plane_state, __i) \
|
||||
for ((__i) = 0; \
|
||||
(plane) = (state)->planes[__i], \
|
||||
(plane_state) = (state)->plane_states[__i], \
|
||||
(__i) < (state)->dev->mode_config.num_total_plane; \
|
||||
(__i)++) \
|
||||
if (plane_state)
|
||||
|
||||
#endif /* DRM_ATOMIC_H_ */
|
||||
|
@ -466,7 +466,7 @@ struct drm_crtc {
|
||||
int framedur_ns, linedur_ns, pixeldur_ns;
|
||||
|
||||
/* if you are using the helper */
|
||||
void *helper_private;
|
||||
const void *helper_private;
|
||||
|
||||
struct drm_object_properties properties;
|
||||
|
||||
@ -596,7 +596,7 @@ struct drm_encoder {
|
||||
struct drm_crtc *crtc;
|
||||
struct drm_bridge *bridge;
|
||||
const struct drm_encoder_funcs *funcs;
|
||||
void *helper_private;
|
||||
const void *helper_private;
|
||||
};
|
||||
|
||||
/* should we poll this connector for connects and disconnects */
|
||||
@ -700,7 +700,7 @@ struct drm_connector {
|
||||
/* requested DPMS state */
|
||||
int dpms;
|
||||
|
||||
void *helper_private;
|
||||
const void *helper_private;
|
||||
|
||||
/* forced on connector */
|
||||
struct drm_cmdline_mode cmdline_mode;
|
||||
@ -863,7 +863,7 @@ struct drm_plane {
|
||||
|
||||
enum drm_plane_type type;
|
||||
|
||||
void *helper_private;
|
||||
const void *helper_private;
|
||||
|
||||
struct drm_plane_state *state;
|
||||
};
|
||||
@ -974,7 +974,7 @@ struct drm_mode_set {
|
||||
* struct drm_mode_config_funcs - basic driver provided mode setting functions
|
||||
* @fb_create: create a new framebuffer object
|
||||
* @output_poll_changed: function to handle output configuration changes
|
||||
* @atomic_check: check whether a give atomic state update is possible
|
||||
* @atomic_check: check whether a given atomic state update is possible
|
||||
* @atomic_commit: commit an atomic state update previously verified with
|
||||
* atomic_check()
|
||||
*
|
||||
|
@ -197,19 +197,19 @@ extern void drm_helper_mode_fill_fb_struct(struct drm_framebuffer *fb,
|
||||
static inline void drm_crtc_helper_add(struct drm_crtc *crtc,
|
||||
const struct drm_crtc_helper_funcs *funcs)
|
||||
{
|
||||
crtc->helper_private = (void *)funcs;
|
||||
crtc->helper_private = funcs;
|
||||
}
|
||||
|
||||
static inline void drm_encoder_helper_add(struct drm_encoder *encoder,
|
||||
const struct drm_encoder_helper_funcs *funcs)
|
||||
{
|
||||
encoder->helper_private = (void *)funcs;
|
||||
encoder->helper_private = funcs;
|
||||
}
|
||||
|
||||
static inline void drm_connector_helper_add(struct drm_connector *connector,
|
||||
const struct drm_connector_helper_funcs *funcs)
|
||||
{
|
||||
connector->helper_private = (void *)funcs;
|
||||
connector->helper_private = funcs;
|
||||
}
|
||||
|
||||
extern void drm_helper_resume_force_mode(struct drm_device *dev);
|
||||
|
@ -215,6 +215,8 @@ struct detailed_timing {
|
||||
#define DRM_ELD_VER 0
|
||||
# define DRM_ELD_VER_SHIFT 3
|
||||
# define DRM_ELD_VER_MASK (0x1f << 3)
|
||||
# define DRM_ELD_VER_CEA861D (2 << 3) /* supports 861D or below */
|
||||
# define DRM_ELD_VER_CANNED (0x1f << 3)
|
||||
|
||||
#define DRM_ELD_BASELINE_ELD_LEN 2 /* in dwords! */
|
||||
|
||||
|
@ -149,14 +149,16 @@ drm_gem_object_unreference(struct drm_gem_object *obj)
|
||||
static inline void
|
||||
drm_gem_object_unreference_unlocked(struct drm_gem_object *obj)
|
||||
{
|
||||
if (obj && !atomic_add_unless(&obj->refcount.refcount, -1, 1)) {
|
||||
struct drm_device *dev = obj->dev;
|
||||
struct drm_device *dev;
|
||||
|
||||
mutex_lock(&dev->struct_mutex);
|
||||
if (likely(atomic_dec_and_test(&obj->refcount.refcount)))
|
||||
drm_gem_object_free(&obj->refcount);
|
||||
if (!obj)
|
||||
return;
|
||||
|
||||
dev = obj->dev;
|
||||
if (kref_put_mutex(&obj->refcount, drm_gem_object_free, &dev->struct_mutex))
|
||||
mutex_unlock(&dev->struct_mutex);
|
||||
}
|
||||
else
|
||||
might_lock(&dev->struct_mutex);
|
||||
}
|
||||
|
||||
int drm_gem_handle_create(struct drm_file *file_priv,
|
||||
|
@ -76,7 +76,7 @@ struct drm_plane_helper_funcs {
|
||||
static inline void drm_plane_helper_add(struct drm_plane *plane,
|
||||
const struct drm_plane_helper_funcs *funcs)
|
||||
{
|
||||
plane->helper_private = (void *)funcs;
|
||||
plane->helper_private = funcs;
|
||||
}
|
||||
|
||||
extern int drm_plane_helper_check_update(struct drm_plane *plane,
|
||||
|
Loading…
Reference in New Issue
Block a user