aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/drm/amd/acp/Kconfig8
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_object.c4
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c6
-rw-r--r--drivers/gpu/drm/drm_dp_helper.c27
-rw-r--r--drivers/gpu/drm/msm/hdmi/hdmi.h2
-rw-r--r--drivers/gpu/drm/msm/msm_drv.c3
-rw-r--r--drivers/gpu/drm/msm/msm_kms.h1
-rw-r--r--drivers/gpu/drm/radeon/radeon_object.c4
-rw-r--r--drivers/gpu/drm/radeon/radeon_ttm.c6
-rw-r--r--drivers/gpu/drm/radeon/si_dpm.c6
-rw-r--r--drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c13
-rw-r--r--drivers/gpu/drm/rockchip/rockchip_drm_drv.c22
-rw-r--r--drivers/gpu/drm/rockchip/rockchip_drm_drv.h1
-rw-r--r--drivers/gpu/drm/rockchip/rockchip_drm_vop.c79
-rw-r--r--drivers/gpu/drm/udl/udl_fb.c2
-rw-r--r--drivers/gpu/drm/udl/udl_gem.c2
16 files changed, 152 insertions, 34 deletions
diff --git a/drivers/gpu/drm/amd/acp/Kconfig b/drivers/gpu/drm/amd/acp/Kconfig
index 0f734ee05274..ca77ec10147c 100644
--- a/drivers/gpu/drm/amd/acp/Kconfig
+++ b/drivers/gpu/drm/amd/acp/Kconfig
@@ -1,10 +1,14 @@
1menu "ACP Configuration" 1menu "ACP (Audio CoProcessor) Configuration"
2 2
3config DRM_AMD_ACP 3config DRM_AMD_ACP
4 bool "Enable ACP IP support" 4 bool "Enable AMD Audio CoProcessor IP support"
5 select MFD_CORE 5 select MFD_CORE
6 select PM_GENERIC_DOMAINS if PM 6 select PM_GENERIC_DOMAINS if PM
7 help 7 help
8 Choose this option to enable ACP IP support for AMD SOCs. 8 Choose this option to enable ACP IP support for AMD SOCs.
9 This adds the ACP (Audio CoProcessor) IP driver and wires
10 it up into the amdgpu driver. The ACP block provides the DMA
11 engine for the i2s-based ALSA driver. It is required for audio
12 on APUs which utilize an i2s codec.
9 13
10endmenu 14endmenu
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
index 151a2d42c639..56d1458393cc 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
@@ -608,6 +608,10 @@ int amdgpu_bo_fault_reserve_notify(struct ttm_buffer_object *bo)
608 if ((offset + size) <= adev->mc.visible_vram_size) 608 if ((offset + size) <= adev->mc.visible_vram_size)
609 return 0; 609 return 0;
610 610
611 /* Can't move a pinned BO to visible VRAM */
612 if (abo->pin_count > 0)
613 return -EINVAL;
614
611 /* hurrah the memory is not visible ! */ 615 /* hurrah the memory is not visible ! */
612 amdgpu_ttm_placement_from_domain(abo, AMDGPU_GEM_DOMAIN_VRAM); 616 amdgpu_ttm_placement_from_domain(abo, AMDGPU_GEM_DOMAIN_VRAM);
613 lpfn = adev->mc.visible_vram_size >> PAGE_SHIFT; 617 lpfn = adev->mc.visible_vram_size >> PAGE_SHIFT;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
index ab34190859a8..f1a55d1888cb 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
@@ -384,9 +384,15 @@ static int amdgpu_bo_move(struct ttm_buffer_object *bo,
384 struct ttm_mem_reg *new_mem) 384 struct ttm_mem_reg *new_mem)
385{ 385{
386 struct amdgpu_device *adev; 386 struct amdgpu_device *adev;
387 struct amdgpu_bo *abo;
387 struct ttm_mem_reg *old_mem = &bo->mem; 388 struct ttm_mem_reg *old_mem = &bo->mem;
388 int r; 389 int r;
389 390
391 /* Can't move a pinned BO */
392 abo = container_of(bo, struct amdgpu_bo, tbo);
393 if (WARN_ON_ONCE(abo->pin_count > 0))
394 return -EINVAL;
395
390 adev = amdgpu_get_adev(bo->bdev); 396 adev = amdgpu_get_adev(bo->bdev);
391 if (old_mem->mem_type == TTM_PL_SYSTEM && bo->ttm == NULL) { 397 if (old_mem->mem_type == TTM_PL_SYSTEM && bo->ttm == NULL) {
392 amdgpu_move_null(bo, new_mem); 398 amdgpu_move_null(bo, new_mem);
diff --git a/drivers/gpu/drm/drm_dp_helper.c b/drivers/gpu/drm/drm_dp_helper.c
index 7d58f594cffe..df64ed1c0139 100644
--- a/drivers/gpu/drm/drm_dp_helper.c
+++ b/drivers/gpu/drm/drm_dp_helper.c
@@ -179,7 +179,7 @@ static int drm_dp_dpcd_access(struct drm_dp_aux *aux, u8 request,
179{ 179{
180 struct drm_dp_aux_msg msg; 180 struct drm_dp_aux_msg msg;
181 unsigned int retry; 181 unsigned int retry;
182 int err; 182 int err = 0;
183 183
184 memset(&msg, 0, sizeof(msg)); 184 memset(&msg, 0, sizeof(msg));
185 msg.address = offset; 185 msg.address = offset;
@@ -187,6 +187,8 @@ static int drm_dp_dpcd_access(struct drm_dp_aux *aux, u8 request,
187 msg.buffer = buffer; 187 msg.buffer = buffer;
188 msg.size = size; 188 msg.size = size;
189 189
190 mutex_lock(&aux->hw_mutex);
191
190 /* 192 /*
191 * The specification doesn't give any recommendation on how often to 193 * The specification doesn't give any recommendation on how often to
192 * retry native transactions. We used to retry 7 times like for 194 * retry native transactions. We used to retry 7 times like for
@@ -195,25 +197,24 @@ static int drm_dp_dpcd_access(struct drm_dp_aux *aux, u8 request,
195 */ 197 */
196 for (retry = 0; retry < 32; retry++) { 198 for (retry = 0; retry < 32; retry++) {
197 199
198 mutex_lock(&aux->hw_mutex);
199 err = aux->transfer(aux, &msg); 200 err = aux->transfer(aux, &msg);
200 mutex_unlock(&aux->hw_mutex);
201 if (err < 0) { 201 if (err < 0) {
202 if (err == -EBUSY) 202 if (err == -EBUSY)
203 continue; 203 continue;
204 204
205 return err; 205 goto unlock;
206 } 206 }
207 207
208 208
209 switch (msg.reply & DP_AUX_NATIVE_REPLY_MASK) { 209 switch (msg.reply & DP_AUX_NATIVE_REPLY_MASK) {
210 case DP_AUX_NATIVE_REPLY_ACK: 210 case DP_AUX_NATIVE_REPLY_ACK:
211 if (err < size) 211 if (err < size)
212 return -EPROTO; 212 err = -EPROTO;
213 return err; 213 goto unlock;
214 214
215 case DP_AUX_NATIVE_REPLY_NACK: 215 case DP_AUX_NATIVE_REPLY_NACK:
216 return -EIO; 216 err = -EIO;
217 goto unlock;
217 218
218 case DP_AUX_NATIVE_REPLY_DEFER: 219 case DP_AUX_NATIVE_REPLY_DEFER:
219 usleep_range(AUX_RETRY_INTERVAL, AUX_RETRY_INTERVAL + 100); 220 usleep_range(AUX_RETRY_INTERVAL, AUX_RETRY_INTERVAL + 100);
@@ -222,7 +223,11 @@ static int drm_dp_dpcd_access(struct drm_dp_aux *aux, u8 request,
222 } 223 }
223 224
224 DRM_DEBUG_KMS("too many retries, giving up\n"); 225 DRM_DEBUG_KMS("too many retries, giving up\n");
225 return -EIO; 226 err = -EIO;
227
228unlock:
229 mutex_unlock(&aux->hw_mutex);
230 return err;
226} 231}
227 232
228/** 233/**
@@ -544,9 +549,7 @@ static int drm_dp_i2c_do_msg(struct drm_dp_aux *aux, struct drm_dp_aux_msg *msg)
544 int max_retries = max(7, drm_dp_i2c_retry_count(msg, dp_aux_i2c_speed_khz)); 549 int max_retries = max(7, drm_dp_i2c_retry_count(msg, dp_aux_i2c_speed_khz));
545 550
546 for (retry = 0, defer_i2c = 0; retry < (max_retries + defer_i2c); retry++) { 551 for (retry = 0, defer_i2c = 0; retry < (max_retries + defer_i2c); retry++) {
547 mutex_lock(&aux->hw_mutex);
548 ret = aux->transfer(aux, msg); 552 ret = aux->transfer(aux, msg);
549 mutex_unlock(&aux->hw_mutex);
550 if (ret < 0) { 553 if (ret < 0) {
551 if (ret == -EBUSY) 554 if (ret == -EBUSY)
552 continue; 555 continue;
@@ -685,6 +688,8 @@ static int drm_dp_i2c_xfer(struct i2c_adapter *adapter, struct i2c_msg *msgs,
685 688
686 memset(&msg, 0, sizeof(msg)); 689 memset(&msg, 0, sizeof(msg));
687 690
691 mutex_lock(&aux->hw_mutex);
692
688 for (i = 0; i < num; i++) { 693 for (i = 0; i < num; i++) {
689 msg.address = msgs[i].addr; 694 msg.address = msgs[i].addr;
690 drm_dp_i2c_msg_set_request(&msg, &msgs[i]); 695 drm_dp_i2c_msg_set_request(&msg, &msgs[i]);
@@ -739,6 +744,8 @@ static int drm_dp_i2c_xfer(struct i2c_adapter *adapter, struct i2c_msg *msgs,
739 msg.size = 0; 744 msg.size = 0;
740 (void)drm_dp_i2c_do_msg(aux, &msg); 745 (void)drm_dp_i2c_do_msg(aux, &msg);
741 746
747 mutex_unlock(&aux->hw_mutex);
748
742 return err; 749 return err;
743} 750}
744 751
diff --git a/drivers/gpu/drm/msm/hdmi/hdmi.h b/drivers/gpu/drm/msm/hdmi/hdmi.h
index b04a64664673..65428cf233ce 100644
--- a/drivers/gpu/drm/msm/hdmi/hdmi.h
+++ b/drivers/gpu/drm/msm/hdmi/hdmi.h
@@ -196,7 +196,7 @@ void __exit msm_hdmi_phy_driver_unregister(void);
196int msm_hdmi_pll_8960_init(struct platform_device *pdev); 196int msm_hdmi_pll_8960_init(struct platform_device *pdev);