[PATCH 1/9] drm/amdgpu: explicitely set the AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS flag

Christian König ckoenig.leichtzumerken at gmail.com
Mon Jun 10 09:37:30 UTC 2024


Just FYI: This is a completed untested set of WIP patches.

But it might get you a step closer of avoiding grabbing the runtime PM 
references.

Regards,
Christian.

Am 10.06.24 um 11:26 schrieb Christian König:
> Instead of having that in the amdgpu_bo_pin() function applied for all
> pinned BOs.
>
> Signed-off-by: Christian König <christian.koenig at amd.com>
> ---
>   drivers/gpu/drm/amd/amdgpu/amdgpu_display.c             | 2 ++
>   drivers/gpu/drm/amd/amdgpu/amdgpu_object.c              | 1 -
>   drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c                | 1 +
>   drivers/gpu/drm/amd/amdgpu/dce_v10_0.c                  | 2 ++
>   drivers/gpu/drm/amd/amdgpu/dce_v11_0.c                  | 2 ++
>   drivers/gpu/drm/amd/amdgpu/dce_v6_0.c                   | 2 ++
>   drivers/gpu/drm/amd/amdgpu/dce_v8_0.c                   | 2 ++
>   drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c | 1 +
>   drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_wb.c    | 1 +
>   9 files changed, 13 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
> index cfec85563bc6..7ef518d888dc 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
> @@ -233,6 +233,7 @@ int amdgpu_display_crtc_page_flip_target(struct drm_crtc *crtc,
>   	}
>   
>   	if (!adev->enable_virtual_display) {
> +		new_abo->flags |= AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS;
>   		r = amdgpu_bo_pin(new_abo,
>   				  amdgpu_display_supported_domains(adev, new_abo->flags));
>   		if (unlikely(r != 0)) {
> @@ -1739,6 +1740,7 @@ int amdgpu_display_resume_helper(struct amdgpu_device *adev)
>   
>   			r = amdgpu_bo_reserve(aobj, true);
>   			if (r == 0) {
> +				aobj->flags |= AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS;
>   				r = amdgpu_bo_pin(aobj, AMDGPU_GEM_DOMAIN_VRAM);
>   				if (r != 0)
>   					dev_err(adev->dev, "Failed to pin cursor BO (%d)\n", r);
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
> index 1eadcad1856d..f5a33178651e 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
> @@ -1003,7 +1003,6 @@ int amdgpu_bo_pin_restricted(struct amdgpu_bo *bo, u32 domain,
>    */
>   int amdgpu_bo_pin(struct amdgpu_bo *bo, u32 domain)
>   {
> -	bo->flags |= AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS;
>   	return amdgpu_bo_pin_restricted(bo, domain, 0, 0);
>   }
>   
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c
> index e30eecd02ae1..2ce99ab63e4c 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c
> @@ -335,6 +335,7 @@ static int amdgpu_vkms_prepare_fb(struct drm_plane *plane,
>   	else
>   		domain = AMDGPU_GEM_DOMAIN_VRAM;
>   
> +	rbo->flags |= AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS;
>   	r = amdgpu_bo_pin(rbo, domain);
>   	if (unlikely(r != 0)) {
>   		if (r != -ERESTARTSYS)
> diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
> index b44fce44c066..ff99475f7225 100644
> --- a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
> @@ -1881,6 +1881,7 @@ static int dce_v10_0_crtc_do_set_base(struct drm_crtc *crtc,
>   		return r;
>   
>   	if (!atomic) {
> +		abo->flags |= AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS;
>   		r = amdgpu_bo_pin(abo, AMDGPU_GEM_DOMAIN_VRAM);
>   		if (unlikely(r != 0)) {
>   			amdgpu_bo_unreserve(abo);
> @@ -2401,6 +2402,7 @@ static int dce_v10_0_crtc_cursor_set2(struct drm_crtc *crtc,
>   		return ret;
>   	}
>   
> +	aobj->flags |= AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS;
>   	ret = amdgpu_bo_pin(aobj, AMDGPU_GEM_DOMAIN_VRAM);
>   	amdgpu_bo_unreserve(aobj);
>   	if (ret) {
> diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
> index 80b2e7f79acf..bae0d5ea4a4b 100644
> --- a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
> @@ -1931,6 +1931,7 @@ static int dce_v11_0_crtc_do_set_base(struct drm_crtc *crtc,
>   		return r;
>   
>   	if (!atomic) {
> +		abo->flags |= AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS;
>   		r = amdgpu_bo_pin(abo, AMDGPU_GEM_DOMAIN_VRAM);
>   		if (unlikely(r != 0)) {
>   			amdgpu_bo_unreserve(abo);
> @@ -2485,6 +2486,7 @@ static int dce_v11_0_crtc_cursor_set2(struct drm_crtc *crtc,
>   		return ret;
>   	}
>   
> +	aobj->flags |= AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS;
>   	ret = amdgpu_bo_pin(aobj, AMDGPU_GEM_DOMAIN_VRAM);
>   	amdgpu_bo_unreserve(aobj);
>   	if (ret) {
> diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c
> index db20012600f5..ac4271a84cc8 100644
> --- a/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c
> @@ -1861,6 +1861,7 @@ static int dce_v6_0_crtc_do_set_base(struct drm_crtc *crtc,
>   		return r;
>   
>   	if (!atomic) {
> +		abo->flags |= AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS;
>   		r = amdgpu_bo_pin(abo, AMDGPU_GEM_DOMAIN_VRAM);
>   		if (unlikely(r != 0)) {
>   			amdgpu_bo_unreserve(abo);
> @@ -2321,6 +2322,7 @@ static int dce_v6_0_crtc_cursor_set2(struct drm_crtc *crtc,
>   		return ret;
>   	}
>   
> +	aobj->flags |= AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS;
>   	ret = amdgpu_bo_pin(aobj, AMDGPU_GEM_DOMAIN_VRAM);
>   	amdgpu_bo_unreserve(aobj);
>   	if (ret) {
> diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
> index 5b56100ec902..29bbf083c5d2 100644
> --- a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
> @@ -1828,6 +1828,7 @@ static int dce_v8_0_crtc_do_set_base(struct drm_crtc *crtc,
>   		return r;
>   
>   	if (!atomic) {
> +		abo->flags |= AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS;
>   		r = amdgpu_bo_pin(abo, AMDGPU_GEM_DOMAIN_VRAM);
>   		if (unlikely(r != 0)) {
>   			amdgpu_bo_unreserve(abo);
> @@ -2320,6 +2321,7 @@ static int dce_v8_0_crtc_cursor_set2(struct drm_crtc *crtc,
>   		return ret;
>   	}
>   
> +	aobj->flags |= AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS;
>   	ret = amdgpu_bo_pin(aobj, AMDGPU_GEM_DOMAIN_VRAM);
>   	amdgpu_bo_unreserve(aobj);
>   	if (ret) {
> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c
> index b339642b86c0..81e87c079624 100644
> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c
> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c
> @@ -890,6 +890,7 @@ static int amdgpu_dm_plane_helper_prepare_fb(struct drm_plane *plane,
>   	else
>   		domain = AMDGPU_GEM_DOMAIN_VRAM;
>   
> +	rbo->flags |= AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS;
>   	r = amdgpu_bo_pin(rbo, domain);
>   	if (unlikely(r != 0)) {
>   		if (r != -ERESTARTSYS)
> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_wb.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_wb.c
> index 08c494a7a21b..0d5fefb0f591 100644
> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_wb.c
> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_wb.c
> @@ -114,6 +114,7 @@ static int amdgpu_dm_wb_prepare_job(struct drm_writeback_connector *wb_connector
>   
>   	domain = amdgpu_display_supported_domains(adev, rbo->flags);
>   
> +	rbo->flags |= AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS;
>   	r = amdgpu_bo_pin(rbo, domain);
>   	if (unlikely(r != 0)) {
>   		if (r != -ERESTARTSYS)



More information about the amd-gfx mailing list