diff options
Diffstat (limited to 'drivers/gpu')
| -rw-r--r-- | drivers/gpu/drm/amd/acp/Kconfig | 8 | ||||
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 4 | ||||
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 6 | ||||
| -rw-r--r-- | drivers/gpu/drm/drm_dp_helper.c | 27 | ||||
| -rw-r--r-- | drivers/gpu/drm/msm/hdmi/hdmi.h | 2 | ||||
| -rw-r--r-- | drivers/gpu/drm/msm/msm_drv.c | 3 | ||||
| -rw-r--r-- | drivers/gpu/drm/msm/msm_kms.h | 1 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_object.c | 4 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_ttm.c | 6 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/si_dpm.c | 6 | ||||
| -rw-r--r-- | drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c | 13 | ||||
| -rw-r--r-- | drivers/gpu/drm/rockchip/rockchip_drm_drv.c | 22 | ||||
| -rw-r--r-- | drivers/gpu/drm/rockchip/rockchip_drm_drv.h | 1 | ||||
| -rw-r--r-- | drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 79 | ||||
| -rw-r--r-- | drivers/gpu/drm/udl/udl_fb.c | 2 | ||||
| -rw-r--r-- | drivers/gpu/drm/udl/udl_gem.c | 2 |
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 @@ | |||
| 1 | menu "ACP Configuration" | 1 | menu "ACP (Audio CoProcessor) Configuration" |
| 2 | 2 | ||
| 3 | config DRM_AMD_ACP | 3 | config 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 | ||
| 10 | endmenu | 14 | endmenu |
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 | |||
| 228 | unlock: | ||
| 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); | |||
| 196 | int msm_hdmi_pll_8960_init(struct platform_device *pdev); | 196 | int msm_hdmi_pll_8960_init(struct platform_device *pdev); |
