diff options
author | Dave Airlie <airlied@redhat.com> | 2016-09-19 03:16:02 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2016-09-19 03:16:02 -0400 |
commit | 9f8cf165c62913244479832f04c44cd77ffc9293 (patch) | |
tree | 7d36f015040f39837a7a0f32c1f0853f33405c44 | |
parent | 8506912b969b60aacc733315eeeb46b014d920a4 (diff) | |
parent | a988588b1806b40ae115fe1c9ab38706fd1a7c2b (diff) |
Merge tag 'topic/drm-misc-2016-09-19' of git://anongit.freedesktop.org/drm-intel into drm-next
Just random misc stuff that Sean/Sumit&Archit picked up while I relaxed.
Well except for one commit:
* tag 'topic/drm-misc-2016-09-19' of git://anongit.freedesktop.org/drm-intel:
drm: Only use compat ioctl for addfb2 on X86/IA64
drm/qxl: squash lines for simple wrapper functions
drm/bridge: analogix_dp: squash lines for simple wrapper functions
drm/radeon: squash lines for simple wrapper functions
drm/amdgpu: squash lines for simple wrapper functions
dma-buf/sync-file: Avoid enable fence signaling if poll(.timeout=0)
drm/fence: allow fence waiting to be interrupted by userspace
drm: Move property validation to a helper, v2.
drm/bridge: adv7511: add support for the 2nd chip
-rw-r--r-- | drivers/dma-buf/sync_file.c | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/dce_virtual.c | 6 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c | 6 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c | 6 | ||||
-rw-r--r-- | drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 12 | ||||
-rw-r--r-- | drivers/gpu/drm/bridge/adv7511/adv7533.c | 5 | ||||
-rw-r--r-- | drivers/gpu/drm/bridge/analogix/analogix_dp_reg.c | 20 | ||||
-rw-r--r-- | drivers/gpu/drm/drm_atomic.c | 13 | ||||
-rw-r--r-- | drivers/gpu/drm/drm_atomic_helper.c | 41 | ||||
-rw-r--r-- | drivers/gpu/drm/drm_crtc_internal.h | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/drm_ioc32.c | 4 | ||||
-rw-r--r-- | drivers/gpu/drm/drm_mode_object.c | 31 | ||||
-rw-r--r-- | drivers/gpu/drm/msm/msm_atomic.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/qxl/qxl_draw.c | 7 | ||||
-rw-r--r-- | drivers/gpu/drm/qxl/qxl_release.c | 7 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/cik.c | 6 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/r100.c | 6 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/r600.c | 6 | ||||
-rw-r--r-- | include/drm/drm_atomic_helper.h | 5 |
19 files changed, 84 insertions, 104 deletions
diff --git a/drivers/dma-buf/sync_file.c b/drivers/dma-buf/sync_file.c index 486d29c1a830..abb5fdab75fd 100644 --- a/drivers/dma-buf/sync_file.c +++ b/drivers/dma-buf/sync_file.c | |||
@@ -306,7 +306,8 @@ static unsigned int sync_file_poll(struct file *file, poll_table *wait) | |||
306 | 306 | ||
307 | poll_wait(file, &sync_file->wq, wait); | 307 | poll_wait(file, &sync_file->wq, wait); |
308 | 308 | ||
309 | if (!test_and_set_bit(POLL_ENABLED, &sync_file->fence->flags)) { | 309 | if (!poll_does_not_wait(wait) && |
310 | !test_and_set_bit(POLL_ENABLED, &sync_file->fence->flags)) { | ||
310 | if (fence_add_callback(sync_file->fence, &sync_file->cb, | 311 | if (fence_add_callback(sync_file->fence, &sync_file->cb, |
311 | fence_check_cb_func) < 0) | 312 | fence_check_cb_func) < 0) |
312 | wake_up_all(&sync_file->wq); | 313 | wake_up_all(&sync_file->wq); |
diff --git a/drivers/gpu/drm/amd/amdgpu/dce_virtual.c b/drivers/gpu/drm/amd/amdgpu/dce_virtual.c index 00663a7b4053..619b604ab8ae 100644 --- a/drivers/gpu/drm/amd/amdgpu/dce_virtual.c +++ b/drivers/gpu/drm/amd/amdgpu/dce_virtual.c | |||
@@ -466,11 +466,7 @@ static int dce_virtual_suspend(void *handle) | |||
466 | 466 | ||
467 | static int dce_virtual_resume(void *handle) | 467 | static int dce_virtual_resume(void *handle) |
468 | { | 468 | { |
469 | int ret; | 469 | return dce_virtual_hw_init(handle); |
470 | |||
471 | ret = dce_virtual_hw_init(handle); | ||
472 | |||
473 | return ret; | ||
474 | } | 470 | } |
475 | 471 | ||
476 | static bool dce_virtual_is_idle(void *handle) | 472 | static bool dce_virtual_is_idle(void *handle) |
diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c index e82229686783..9d02ba27bb87 100644 --- a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c | |||
@@ -190,12 +190,8 @@ out: | |||
190 | */ | 190 | */ |
191 | static uint32_t sdma_v2_4_ring_get_rptr(struct amdgpu_ring *ring) | 191 | static uint32_t sdma_v2_4_ring_get_rptr(struct amdgpu_ring *ring) |
192 | { | 192 | { |
193 | u32 rptr; | ||
194 | |||
195 | /* XXX check if swapping is necessary on BE */ | 193 | /* XXX check if swapping is necessary on BE */ |
196 | rptr = ring->adev->wb.wb[ring->rptr_offs] >> 2; | 194 | return ring->adev->wb.wb[ring->rptr_offs] >> 2; |
197 | |||
198 | return rptr; | ||
199 | } | 195 | } |
200 | 196 | ||
201 | /** | 197 | /** |
diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c index bee4978bec73..ddb8081f78ac 100644 --- a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c | |||
@@ -335,12 +335,8 @@ out: | |||
335 | */ | 335 | */ |
336 | static uint32_t sdma_v3_0_ring_get_rptr(struct amdgpu_ring *ring) | 336 | static uint32_t sdma_v3_0_ring_get_rptr(struct amdgpu_ring *ring) |
337 | { | 337 | { |
338 | u32 rptr; | ||
339 | |||
340 | /* XXX check if swapping is necessary on BE */ | 338 | /* XXX check if swapping is necessary on BE */ |
341 | rptr = ring->adev->wb.wb[ring->rptr_offs] >> 2; | 339 | return ring->adev->wb.wb[ring->rptr_offs] >> 2; |
342 | |||
343 | return rptr; | ||
344 | } | 340 | } |
345 | 341 | ||
346 | /** | 342 | /** |
diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c index ec8fb2ed3275..8ed3906dd411 100644 --- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c +++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | |||
@@ -922,15 +922,13 @@ static int adv7511_parse_dt(struct device_node *np, | |||
922 | return 0; | 922 | return 0; |
923 | } | 923 | } |
924 | 924 | ||
925 | static const int edid_i2c_addr = 0x7e; | ||
926 | static const int packet_i2c_addr = 0x70; | ||
927 | static const int cec_i2c_addr = 0x78; | ||
928 | |||
929 | static int adv7511_probe(struct i2c_client *i2c, const struct i2c_device_id *id) | 925 | static int adv7511_probe(struct i2c_client *i2c, const struct i2c_device_id *id) |
930 | { | 926 | { |
931 | struct adv7511_link_config link_config; | 927 | struct adv7511_link_config link_config; |
932 | struct adv7511 *adv7511; | 928 | struct adv7511 *adv7511; |
933 | struct device *dev = &i2c->dev; | 929 | struct device *dev = &i2c->dev; |
930 | unsigned int main_i2c_addr = i2c->addr << 1; | ||
931 | unsigned int edid_i2c_addr = main_i2c_addr + 4; | ||
934 | unsigned int val; | 932 | unsigned int val; |
935 | int ret; | 933 | int ret; |
936 | 934 | ||
@@ -991,8 +989,10 @@ static int adv7511_probe(struct i2c_client *i2c, const struct i2c_device_id *id) | |||
991 | 989 | ||
992 | regmap_write(adv7511->regmap, ADV7511_REG_EDID_I2C_ADDR, edid_i2c_addr); | 990 | regmap_write(adv7511->regmap, ADV7511_REG_EDID_I2C_ADDR, edid_i2c_addr); |
993 | regmap_write(adv7511->regmap, ADV7511_REG_PACKET_I2C_ADDR, | 991 | regmap_write(adv7511->regmap, ADV7511_REG_PACKET_I2C_ADDR, |
994 | packet_i2c_addr); | 992 | main_i2c_addr - 0xa); |
995 | regmap_write(adv7511->regmap, ADV7511_REG_CEC_I2C_ADDR, cec_i2c_addr); | 993 | regmap_write(adv7511->regmap, ADV7511_REG_CEC_I2C_ADDR, |
994 | main_i2c_addr - 2); | ||
995 | |||
996 | adv7511_packet_disable(adv7511, 0xffff); | 996 | adv7511_packet_disable(adv7511, 0xffff); |
997 | 997 | ||
998 | adv7511->i2c_main = i2c; | 998 | adv7511->i2c_main = i2c; |
diff --git a/drivers/gpu/drm/bridge/adv7511/adv7533.c b/drivers/gpu/drm/bridge/adv7511/adv7533.c index 5eebd15899b1..d7f7b7ce8ebe 100644 --- a/drivers/gpu/drm/bridge/adv7511/adv7533.c +++ b/drivers/gpu/drm/bridge/adv7511/adv7533.c | |||
@@ -149,13 +149,12 @@ void adv7533_uninit_cec(struct adv7511 *adv) | |||
149 | i2c_unregister_device(adv->i2c_cec); | 149 | i2c_unregister_device(adv->i2c_cec); |
150 | } | 150 | } |
151 | 151 | ||
152 | static const int cec_i2c_addr = 0x78; | ||
153 | |||
154 | int adv7533_init_cec(struct adv7511 *adv) | 152 | int adv7533_init_cec(struct adv7511 *adv) |
155 | { | 153 | { |
156 | int ret; | 154 | int ret; |
157 | 155 | ||
158 | adv->i2c_cec = i2c_new_dummy(adv->i2c_main->adapter, cec_i2c_addr >> 1); | 156 | adv->i2c_cec = i2c_new_dummy(adv->i2c_main->adapter, |
157 | adv->i2c_main->addr - 1); | ||
159 | if (!adv->i2c_cec) | 158 | if (!adv->i2c_cec) |
160 | return -ENOMEM; | 159 | return -ENOMEM; |
161 | 160 | ||
diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_reg.c b/drivers/gpu/drm/bridge/analogix/analogix_dp_reg.c index 52c1b6b2982e..fae0293d509a 100644 --- a/drivers/gpu/drm/bridge/analogix/analogix_dp_reg.c +++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_reg.c | |||
@@ -1073,34 +1073,22 @@ void analogix_dp_set_lane3_link_training(struct analogix_dp_device *dp, | |||
1073 | 1073 | ||
1074 | u32 analogix_dp_get_lane0_link_training(struct analogix_dp_device *dp) | 1074 | u32 analogix_dp_get_lane0_link_training(struct analogix_dp_device *dp) |
1075 | { | 1075 | { |
1076 | u32 reg; | 1076 | return readl(dp->reg_base + ANALOGIX_DP_LN0_LINK_TRAINING_CTL); |
1077 | |||
1078 | reg = readl(dp->reg_base + ANALOGIX_DP_LN0_LINK_TRAINING_CTL); | ||
1079 | return reg; | ||
1080 | } | 1077 | } |
1081 | 1078 | ||
1082 | u32 analogix_dp_get_lane1_link_training(struct analogix_dp_device *dp) | 1079 | u32 analogix_dp_get_lane1_link_training(struct analogix_dp_device *dp) |
1083 | { | 1080 | { |
1084 | u32 reg; | 1081 | return readl(dp->reg_base + ANALOGIX_DP_LN1_LINK_TRAINING_CTL); |
1085 | |||
1086 | reg = readl(dp->reg_base + ANALOGIX_DP_LN1_LINK_TRAINING_CTL); | ||
1087 | return reg; | ||
1088 | } | 1082 | } |
1089 | 1083 | ||
1090 | u32 analogix_dp_get_lane2_link_training(struct analogix_dp_device *dp) | 1084 | u32 analogix_dp_get_lane2_link_training(struct analogix_dp_device *dp) |
1091 | { | 1085 | { |
1092 | u32 reg; | 1086 | return readl(dp->reg_base + ANALOGIX_DP_LN2_LINK_TRAINING_CTL); |
1093 | |||
1094 | reg = readl(dp->reg_base + ANALOGIX_DP_LN2_LINK_TRAINING_CTL); | ||
1095 | return reg; | ||
1096 | } | 1087 | } |
1097 | 1088 | ||
1098 | u32 analogix_dp_get_lane3_link_training(struct analogix_dp_device *dp) | 1089 | u32 analogix_dp_get_lane3_link_training(struct analogix_dp_device *dp) |
1099 | { | 1090 | { |
1100 | u32 reg; | 1091 | return readl(dp->reg_base + ANALOGIX_DP_LN3_LINK_TRAINING_CTL); |
1101 | |||
1102 | reg = readl(dp->reg_base + ANALOGIX_DP_LN3_LINK_TRAINING_CTL); | ||
1103 | return reg; | ||
1104 | } | 1092 | } |
1105 | 1093 | ||
1106 | void analogix_dp_reset_macro(struct analogix_dp_device *dp) | 1094 | void analogix_dp_reset_macro(struct analogix_dp_device *dp) |
diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c index a5126e5c05ee..904d29c012ad 100644 --- a/drivers/gpu/drm/drm_atomic.c +++ b/drivers/gpu/drm/drm_atomic.c | |||
@@ -1609,7 +1609,7 @@ int drm_mode_atomic_ioctl(struct drm_device *dev, | |||
1609 | struct drm_crtc_state *crtc_state; | 1609 | struct drm_crtc_state *crtc_state; |
1610 | unsigned plane_mask; | 1610 | unsigned plane_mask; |
1611 | int ret = 0; | 1611 | int ret = 0; |
1612 | unsigned int i, j, k; | 1612 | unsigned int i, j; |
1613 | 1613 | ||
1614 | /* disallow for drivers not supporting atomic: */ | 1614 | /* disallow for drivers not supporting atomic: */ |
1615 | if (!drm_core_check_feature(dev, DRIVER_ATOMIC)) | 1615 | if (!drm_core_check_feature(dev, DRIVER_ATOMIC)) |
@@ -1691,16 +1691,7 @@ retry: | |||
1691 | goto out; | 1691 | goto out; |
1692 | } | 1692 | } |
1693 | 1693 | ||
1694 | for (k = 0; k < obj->properties->count; k++) | 1694 | prop = drm_mode_obj_find_prop_id(obj, prop_id); |
1695 | if (obj->properties->properties[k]->base.id == prop_id) | ||
1696 | break; | ||
1697 | |||
1698 | if (k == obj->properties->count) { | ||
1699 | ret = -EINVAL; | ||
1700 | goto out; | ||
1701 | } | ||
1702 | |||
1703 | prop = drm_property_find(dev, prop_id); | ||
1704 | if (!prop) { | 1695 | if (!prop) { |
1705 | drm_mode_object_unreference(obj); | 1696 | drm_mode_object_unreference(obj); |
1706 | ret = -ENOENT; | 1697 | ret = -ENOENT; |
diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c index 6fdd7ba47896..ea78d70de9f3 100644 --- a/drivers/gpu/drm/drm_atomic_helper.c +++ b/drivers/gpu/drm/drm_atomic_helper.c | |||
@@ -1009,29 +1009,46 @@ EXPORT_SYMBOL(drm_atomic_helper_commit_modeset_enables); | |||
1009 | * drm_atomic_helper_wait_for_fences - wait for fences stashed in plane state | 1009 | * drm_atomic_helper_wait_for_fences - wait for fences stashed in plane state |
1010 | * @dev: DRM device | 1010 | * @dev: DRM device |
1011 | * @state: atomic state object with old state structures | 1011 | * @state: atomic state object with old state structures |
1012 | * @pre_swap: if true, do an interruptible wait | ||
1012 | * | 1013 | * |
1013 | * For implicit sync, driver should fish the exclusive fence out from the | 1014 | * For implicit sync, driver should fish the exclusive fence out from the |
1014 | * incoming fb's and stash it in the drm_plane_state. This is called after | 1015 | * incoming fb's and stash it in the drm_plane_state. This is called after |
1015 | * drm_atomic_helper_swap_state() so it uses the current plane state (and | 1016 | * drm_atomic_helper_swap_state() so it uses the current plane state (and |
1016 | * just uses the atomic state to find the changed planes) | 1017 | * just uses the atomic state to find the changed planes) |
1018 | * | ||
1019 | * Returns zero if success or < 0 if fence_wait() fails. | ||
1017 | */ | 1020 | */ |
1018 | void drm_atomic_helper_wait_for_fences(struct drm_device *dev, | 1021 | int drm_atomic_helper_wait_for_fences(struct drm_device *dev, |
1019 | struct drm_atomic_state *state) | 1022 | struct drm_atomic_state *state, |
1023 | bool pre_swap) | ||
1020 | { | 1024 | { |
1021 | struct drm_plane *plane; | 1025 | struct drm_plane *plane; |
1022 | struct drm_plane_state *plane_state; | 1026 | struct drm_plane_state *plane_state; |
1023 | int i; | 1027 | int i, ret; |
1024 | 1028 | ||
1025 | for_each_plane_in_state(state, plane, plane_state, i) { | 1029 | for_each_plane_in_state(state, plane, plane_state, i) { |
1026 | if (!plane->state->fence) | 1030 | if (!pre_swap) |
1031 | plane_state = plane->state; | ||
1032 | |||
1033 | if (!plane_state->fence) | ||
1027 | continue; | 1034 | continue; |
1028 | 1035 | ||
1029 | WARN_ON(!plane->state->fb); | 1036 | WARN_ON(!plane_state->fb); |
1037 | |||
1038 | /* | ||
1039 | * If waiting for fences pre-swap (ie: nonblock), userspace can | ||
1040 | * still interrupt the operation. Instead of blocking until the | ||
1041 | * timer expires, make the wait interruptible. | ||
1042 | */ | ||
1043 | ret = fence_wait(plane_state->fence, pre_swap); | ||
1044 | if (ret) | ||
1045 | return ret; | ||
1030 | 1046 | ||
1031 | fence_wait(plane->state->fence, false); | 1047 | fence_put(plane_state->fence); |
1032 | fence_put(plane->state->fence); | 1048 | plane_state->fence = NULL; |
1033 | plane->state->fence = NULL; | ||
1034 | } | 1049 | } |
1050 | |||
1051 | return 0; | ||
1035 | } | 1052 | } |
1036 | EXPORT_SYMBOL(drm_atomic_helper_wait_for_fences); | 1053 | EXPORT_SYMBOL(drm_atomic_helper_wait_for_fences); |
1037 | 1054 | ||
@@ -1179,7 +1196,7 @@ static void commit_tail(struct drm_atomic_state *state) | |||
1179 | 1196 | ||
1180 | funcs = dev->mode_config.helper_private; | 1197 | funcs = dev->mode_config.helper_private; |
1181 | 1198 | ||
1182 | drm_atomic_helper_wait_for_fences(dev, state); | 1199 | drm_atomic_helper_wait_for_fences(dev, state, false); |
1183 | 1200 | ||
1184 | drm_atomic_helper_wait_for_dependencies(state); | 1201 | drm_atomic_helper_wait_for_dependencies(state); |
1185 | 1202 | ||
@@ -1238,6 +1255,12 @@ int drm_atomic_helper_commit(struct drm_device *dev, | |||
1238 | if (ret) | 1255 | if (ret) |
1239 | return ret; | 1256 | return ret; |
1240 | 1257 | ||
1258 | if (!nonblock) { | ||
1259 | ret = drm_atomic_helper_wait_for_fences(dev, state, true); | ||
1260 | if (ret) | ||
1261 | return ret; | ||
1262 | } | ||
1263 | |||
1241 | /* | 1264 | /* |
1242 | * This is the point of no return - everything below never fails except | 1265 | * This is the point of no return - everything below never fails except |
1243 | * when the hw goes bonghits. Which means we can commit the new state on | 1266 | * when the hw goes bonghits. Which means we can commit the new state on |
diff --git a/drivers/gpu/drm/drm_crtc_internal.h b/drivers/gpu/drm/drm_crtc_internal.h index a3622644bccf..444e609078cc 100644 --- a/drivers/gpu/drm/drm_crtc_internal.h +++ b/drivers/gpu/drm/drm_crtc_internal.h | |||
@@ -115,6 +115,8 @@ int drm_mode_object_get_properties(struct drm_mode_object *obj, bool atomic, | |||
115 | uint32_t __user *prop_ptr, | 115 | uint32_t __user *prop_ptr, |
116 | uint64_t __user *prop_values, | 116 | uint64_t __user *prop_values, |
117 | uint32_t *arg_count_props); | 117 | uint32_t *arg_count_props); |
118 | struct drm_property *drm_mode_obj_find_prop_id(struct drm_mode_object *obj, | ||
119 | uint32_t prop_id); | ||
118 | 120 | ||
119 | /* IOCTL */ | 121 | /* IOCTL */ |
120 | 122 | ||
diff --git a/drivers/gpu/drm/drm_ioc32.c b/drivers/gpu/drm/drm_ioc32.c index 32a489b0faff..5f896e723f73 100644 --- a/drivers/gpu/drm/drm_ioc32.c +++ b/drivers/gpu/drm/drm_ioc32.c | |||
@@ -1016,6 +1016,7 @@ static int compat_drm_wait_vblank(struct file *file, unsigned int cmd, | |||
1016 | return 0; | 1016 | return 0; |
1017 | } | 1017 | } |
1018 | 1018 | ||
1019 | #if defined(CONFIG_X86) || defined(CONFIG_IA64) | ||
1019 | typedef struct drm_mode_fb_cmd232 { | 1020 | typedef struct drm_mode_fb_cmd232 { |
1020 | u32 fb_id; | 1021 | u32 fb_id; |
1021 | u32 width; | 1022 | u32 width; |
@@ -1072,6 +1073,7 @@ static int compat_drm_mode_addfb2(struct file *file, unsigned int cmd, | |||
1072 | 1073 | ||
1073 | return 0; | 1074 | return 0; |
1074 | } | 1075 | } |
1076 | #endif | ||
1075 | 1077 | ||
1076 | static drm_ioctl_compat_t *drm_compat_ioctls[] = { | 1078 | static drm_ioctl_compat_t *drm_compat_ioctls[] = { |
1077 | [DRM_IOCTL_NR(DRM_IOCTL_VERSION32)] = compat_drm_version, | 1079 | [DRM_IOCTL_NR(DRM_IOCTL_VERSION32)] = compat_drm_version, |
@@ -1105,7 +1107,9 @@ static drm_ioctl_compat_t *drm_compat_ioctls[] = { | |||
1105 | [DRM_IOCTL_NR(DRM_IOCTL_UPDATE_DRAW32)] = compat_drm_update_draw, | 1107 | [DRM_IOCTL_NR(DRM_IOCTL_UPDATE_DRAW32)] = compat_drm_update_draw, |
1106 | #endif | 1108 | #endif |
1107 | [DRM_IOCTL_NR(DRM_IOCTL_WAIT_VBLANK32)] = compat_drm_wait_vblank, | 1109 | [DRM_IOCTL_NR(DRM_IOCTL_WAIT_VBLANK32)] = compat_drm_wait_vblank, |
1110 | #if defined(CONFIG_X86) || defined(CONFIG_IA64) | ||
1108 | [DRM_IOCTL_NR(DRM_IOCTL_MODE_ADDFB232)] = compat_drm_mode_addfb2, | 1111 | [DRM_IOCTL_NR(DRM_IOCTL_MODE_ADDFB232)] = compat_drm_mode_addfb2, |
1112 | #endif | ||
1109 | }; | 1113 | }; |
1110 | 1114 | ||
1111 | /** | 1115 | /** |
diff --git a/drivers/gpu/drm/drm_mode_object.c b/drivers/gpu/drm/drm_mode_object.c index 6edda8382a4c..9f17085b1fdd 100644 --- a/drivers/gpu/drm/drm_mode_object.c +++ b/drivers/gpu/drm/drm_mode_object.c | |||
@@ -372,14 +372,25 @@ out: | |||
372 | return ret; | 372 | return ret; |
373 | } | 373 | } |
374 | 374 | ||
375 | struct drm_property *drm_mode_obj_find_prop_id(struct drm_mode_object *obj, | ||
376 | uint32_t prop_id) | ||
377 | { | ||
378 | int i; | ||
379 | |||
380 | for (i = 0; i < obj->properties->count; i++) | ||
381 | if (obj->properties->properties[i]->base.id == prop_id) | ||
382 | return obj->properties->properties[i]; | ||
383 | |||
384 | return NULL; | ||
385 | } | ||
386 | |||
375 | int drm_mode_obj_set_property_ioctl(struct drm_device *dev, void *data, | 387 | int drm_mode_obj_set_property_ioctl(struct drm_device *dev, void *data, |
376 | struct drm_file *file_priv) | 388 | struct drm_file *file_priv) |
377 | { | 389 | { |
378 | struct drm_mode_obj_set_property *arg = data; | 390 | struct drm_mode_obj_set_property *arg = data; |
379 | struct drm_mode_object *arg_obj; | 391 | struct drm_mode_object *arg_obj; |
380 | struct drm_mode_object *prop_obj; | ||
381 | struct drm_property *property; | 392 | struct drm_property *property; |
382 | int i, ret = -EINVAL; | 393 | int ret = -EINVAL; |
383 | struct drm_mode_object *ref; | 394 | struct drm_mode_object *ref; |
384 | 395 | ||
385 | if (!drm_core_check_feature(dev, DRIVER_MODESET)) | 396 | if (!drm_core_check_feature(dev, DRIVER_MODESET)) |
@@ -392,23 +403,13 @@ int drm_mode_obj_set_property_ioctl(struct drm_device *dev, void *data, | |||
392 | ret = -ENOENT; | 403 | ret = -ENOENT; |
393 | goto out; | 404 | goto out; |
394 | } | 405 | } |
395 | if (!arg_obj->properties) | ||
396 | goto out_unref; | ||
397 | |||
398 | for (i = 0; i < arg_obj->properties->count; i++) | ||
399 | if (arg_obj->properties->properties[i]->base.id == arg->prop_id) | ||
400 | break; | ||
401 | 406 | ||
402 | if (i == arg_obj->properties->count) | 407 | if (!arg_obj->properties) |
403 | goto out_unref; | 408 | goto out_unref; |
404 | 409 | ||
405 | prop_obj = drm_mode_object_find(dev, arg->prop_id, | 410 | property = drm_mode_obj_find_prop_id(arg_obj, arg->prop_id); |
406 | DRM_MODE_OBJECT_PROPERTY); | 411 | if (!property) |
407 | if (!prop_obj) { | ||
408 | ret = -ENOENT; | ||
409 | goto out_unref; | 412 | goto out_unref; |
410 | } | ||
411 | property = obj_to_property(prop_obj); | ||
412 | 413 | ||
413 | if (!drm_property_change_valid_get(property, arg->value, &ref)) | 414 | if (!drm_property_change_valid_get(property, arg->value, &ref)) |
414 | goto out_unref; | 415 | goto out_unref; |
diff --git a/drivers/gpu/drm/msm/msm_atomic.c b/drivers/gpu/drm/msm/msm_atomic.c index 5df252cebf1c..73bae382eac3 100644 --- a/drivers/gpu/drm/msm/msm_atomic.c +++ b/drivers/gpu/drm/msm/msm_atomic.c | |||
@@ -112,7 +112,7 @@ static void complete_commit(struct msm_commit *c, bool async) | |||
112 | struct msm_drm_private *priv = dev->dev_private; | 112 | struct msm_drm_private *priv = dev->dev_private; |
113 | struct msm_kms *kms = priv->kms; | 113 | struct msm_kms *kms = priv->kms; |
114 | 114 | ||
115 | drm_atomic_helper_wait_for_fences(dev, state); | 115 | drm_atomic_helper_wait_for_fences(dev, state, false); |
116 | 116 | ||
117 | kms->funcs->prepare_commit(kms, state); | 117 | kms->funcs->prepare_commit(kms, state); |
118 | 118 | ||
diff --git a/drivers/gpu/drm/qxl/qxl_draw.c b/drivers/gpu/drm/qxl/qxl_draw.c index ffe885395145..9b728edf1b49 100644 --- a/drivers/gpu/drm/qxl/qxl_draw.c +++ b/drivers/gpu/drm/qxl/qxl_draw.c | |||
@@ -57,11 +57,8 @@ static struct qxl_rect *drawable_set_clipping(struct qxl_device *qdev, | |||
57 | static int | 57 | static int |
58 | alloc_drawable(struct qxl_device *qdev, struct qxl_release **release) | 58 | alloc_drawable(struct qxl_device *qdev, struct qxl_release **release) |
59 | { | 59 | { |
60 | int ret; | 60 | return qxl_alloc_release_reserved(qdev, sizeof(struct qxl_drawable), |
61 | ret = qxl_alloc_release_reserved(qdev, sizeof(struct qxl_drawable), | 61 | QXL_RELEASE_DRAWABLE, release, NULL); |
62 | QXL_RELEASE_DRAWABLE, release, | ||
63 | NULL); | ||
64 | return ret; | ||
65 | } | 62 | } |
66 | 63 | ||
67 | static void | 64 | static void |
diff --git a/drivers/gpu/drm/qxl/qxl_release.c b/drivers/gpu/drm/qxl/qxl_release.c index f599cd073b72..cd83f050cf3e 100644 --- a/drivers/gpu/drm/qxl/qxl_release.c +++ b/drivers/gpu/drm/qxl/qxl_release.c | |||
@@ -203,12 +203,9 @@ qxl_release_free(struct qxl_device *qdev, | |||
203 | static int qxl_release_bo_alloc(struct qxl_device *qdev, | 203 | static int qxl_release_bo_alloc(struct qxl_device *qdev, |
204 | struct qxl_bo **bo) | 204 | struct qxl_bo **bo) |
205 | { | 205 | { |
206 | int ret; | ||
207 | /* pin releases bo's they are too messy to evict */ | 206 | /* pin releases bo's they are too messy to evict */ |
208 | ret = qxl_bo_create(qdev, PAGE_SIZE, false, true, | 207 | return qxl_bo_create(qdev, PAGE_SIZE, false, true, |
209 | QXL_GEM_DOMAIN_VRAM, NULL, | 208 | QXL_GEM_DOMAIN_VRAM, NULL, bo); |
210 | bo); | ||
211 | return ret; | ||
212 | } | 209 | } |
213 | 210 | ||
214 | int qxl_release_list_add(struct qxl_release *release, struct qxl_bo *bo) | 211 | int qxl_release_list_add(struct qxl_release *release, struct qxl_bo *bo) |
diff --git a/drivers/gpu/drm/radeon/cik.c b/drivers/gpu/drm/radeon/cik.c index b1784a1b482a..f6ff41a0eed6 100644 --- a/drivers/gpu/drm/radeon/cik.c +++ b/drivers/gpu/drm/radeon/cik.c | |||
@@ -4193,11 +4193,7 @@ u32 cik_gfx_get_rptr(struct radeon_device *rdev, | |||
4193 | u32 cik_gfx_get_wptr(struct radeon_device *rdev, | 4193 | u32 cik_gfx_get_wptr(struct radeon_device *rdev, |
4194 | struct radeon_ring *ring) | 4194 | struct radeon_ring *ring) |
4195 | { | 4195 | { |
4196 | u32 wptr; | 4196 | return RREG32(CP_RB0_WPTR); |
4197 | |||
4198 | wptr = RREG32(CP_RB0_WPTR); | ||
4199 | |||
4200 | return wptr; | ||
4201 | } | 4197 | } |
4202 | 4198 | ||
4203 | void cik_gfx_set_wptr(struct radeon_device *rdev, | 4199 | void cik_gfx_set_wptr(struct radeon_device *rdev, |
diff --git a/drivers/gpu/drm/radeon/r100.c b/drivers/gpu/drm/radeon/r100.c index f25994b3afa6..f5e84f4b58e6 100644 --- a/drivers/gpu/drm/radeon/r100.c +++ b/drivers/gpu/drm/radeon/r100.c | |||
@@ -1071,11 +1071,7 @@ u32 r100_gfx_get_rptr(struct radeon_device *rdev, | |||
1071 | u32 r100_gfx_get_wptr(struct radeon_device *rdev, | 1071 | u32 r100_gfx_get_wptr(struct radeon_device *rdev, |
1072 | struct radeon_ring *ring) | 1072 | struct radeon_ring *ring) |
1073 | { | 1073 | { |
1074 | u32 wptr; | 1074 | return RREG32(RADEON_CP_RB_WPTR); |
1075 | |||
1076 | wptr = RREG32(RADEON_CP_RB_WPTR); | ||
1077 | |||
1078 | return wptr; | ||
1079 | } | 1075 | } |
1080 | 1076 | ||
1081 | void r100_gfx_set_wptr(struct radeon_device *rdev, | 1077 | void r100_gfx_set_wptr(struct radeon_device *rdev, |
diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c index 640653606f86..a951881c2a50 100644 --- a/drivers/gpu/drm/radeon/r600.c +++ b/drivers/gpu/drm/radeon/r600.c | |||
@@ -2631,11 +2631,7 @@ u32 r600_gfx_get_rptr(struct radeon_device *rdev, | |||
2631 | u32 r600_gfx_get_wptr(struct radeon_device *rdev, | 2631 | u32 r600_gfx_get_wptr(struct radeon_device *rdev, |
2632 | struct radeon_ring *ring) | 2632 | struct radeon_ring *ring) |
2633 | { | 2633 | { |
2634 | u32 wptr; | 2634 | return RREG32(R600_CP_RB_WPTR); |
2635 | |||
2636 | wptr = RREG32(R600_CP_RB_WPTR); | ||
2637 | |||
2638 | return wptr; | ||
2639 | } | 2635 | } |
2640 | 2636 | ||
2641 | void r600_gfx_set_wptr(struct radeon_device *rdev, | 2637 | void r600_gfx_set_wptr(struct radeon_device *rdev, |
diff --git a/include/drm/drm_atomic_helper.h b/include/drm/drm_atomic_helper.h index f86682825d68..7ff92b09fd9c 100644 --- a/include/drm/drm_atomic_helper.h +++ b/include/drm/drm_atomic_helper.h | |||
@@ -45,8 +45,9 @@ int drm_atomic_helper_commit(struct drm_device *dev, | |||
45 | struct drm_atomic_state *state, | 45 | struct drm_atomic_state *state, |
46 | bool nonblock); | 46 | bool nonblock); |
47 | 47 | ||
48 | void drm_atomic_helper_wait_for_fences(struct drm_device *dev, | 48 | int drm_atomic_helper_wait_for_fences(struct drm_device *dev, |
49 | struct drm_atomic_state *state); | 49 | struct drm_atomic_state *state, |
50 | bool pre_swap); | ||
50 | bool drm_atomic_helper_framebuffer_changed(struct drm_device *dev, | 51 | bool drm_atomic_helper_framebuffer_changed(struct drm_device *dev, |
51 | struct drm_atomic_state *old_state, | 52 | struct drm_atomic_state *old_state, |
52 | struct drm_crtc *crtc); | 53 | struct drm_crtc *crtc); |