[PATCH 1/3] drm/amdgpu: allow framebuffer in GART memory as well

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Jan 4, 2018 at 5:26 PM, Samuel Li <samuel.li at amd.com> wrote:
>>> +uint32_t amdgpu_framebuffer_domains(struct amdgpu_device *adev)
>>
>> Please rename this amdgpu_display_framebuffer_domains() for consistency.
> Currently all the functions in this file are named without _display_. Am I missing something?

That file is still a bit of a mess but I'm trying to make all the
files use consistent naming going forward to make the code more
readable.  The IP files (gfx, uvd, gmc, etc.) already do and I
recently cleaned up amdgpu_device.c.

>
>>> +       if (plane->type != DRM_PLANE_TYPE_CURSOR)
>>
>> Do cursors have to be in vram?  It seems like they shouldn't.
> I checked some design documentation and related implementation just now. Looks like cursor is still supposed to be put in vram now.
>

Sounds good.  thanks for checking.

Alex

> Regards,
> Sam
>
>
>
> On 2018-01-04 04:18 PM, Alex Deucher wrote:
>> On Thu, Jan 4, 2018 at 4:11 PM, Samuel Li <Samuel.Li at amd.com> wrote:
>>> From: Christian König <christian.koenig at amd.com>
>>>
>>> On CZ and newer APUs we can pin the fb into GART as well as VRAM.
>>>
>>> v2: Don't enable gpu_vm_support for Raven yet since it leads to
>>>     a black screen. Need to debug this further before enabling.
>>>
>>> Change-Id: Id0f8af3110e54a3aabf7a258871867bc121cc1a2
>>> Signed-off-by: Christian König <christian.koenig at amd.com>
>>> Reviewed-by: Andrey Grodzovsky <andrey.grodzovsky at amd.com>
>>> Acked-by: Alex Deucher <alexander.deucher at amd.com>
>>> Signed-off-by: Samuel Li <samuel.li at amd.com>
>>> ---
>>>  drivers/gpu/drm/amd/amdgpu/amdgpu_display.c       | 14 +++++++++++++-
>>>  drivers/gpu/drm/amd/amdgpu/amdgpu_display.h       |  1 +
>>>  drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c            | 10 ++++++----
>>>  drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 11 +++++++++--
>>>  4 files changed, 29 insertions(+), 7 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
>>> index d704a45..d9fdc19 100644
>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
>>> @@ -29,6 +29,7 @@
>>>  #include "amdgpu_i2c.h"
>>>  #include "atom.h"
>>>  #include "amdgpu_connectors.h"
>>> +#include "amdgpu_display.h"
>>>  #include <asm/div64.h>
>>>
>>>  #include <linux/pm_runtime.h>
>>> @@ -188,7 +189,7 @@ int amdgpu_crtc_page_flip_target(struct drm_crtc *crtc,
>>>                 goto cleanup;
>>>         }
>>>
>>> -       r = amdgpu_bo_pin(new_abo, AMDGPU_GEM_DOMAIN_VRAM, &base);
>>> +       r = amdgpu_bo_pin(new_abo, amdgpu_framebuffer_domains(adev), &base);
>>>         if (unlikely(r != 0)) {
>>>                 DRM_ERROR("failed to pin new abo buffer before flip\n");
>>>                 goto unreserve;
>>> @@ -501,6 +502,17 @@ static const struct drm_framebuffer_funcs amdgpu_fb_funcs = {
>>>         .create_handle = amdgpu_user_framebuffer_create_handle,
>>>  };
>>>
>>> +uint32_t amdgpu_framebuffer_domains(struct amdgpu_device *adev)
>>
>> Please rename this amdgpu_display_framebuffer_domains() for consistency.
>>
>>> +{
>>> +       uint32_t domain = AMDGPU_GEM_DOMAIN_VRAM;
>>> +
>>> +       if (adev->asic_type >= CHIP_CARRIZO && adev->asic_type < CHIP_RAVEN &&
>>> +           adev->flags & AMD_IS_APU)
>>> +               domain |= AMDGPU_GEM_DOMAIN_GTT;
>>> +
>>> +       return domain;
>>> +}
>>> +
>>>  int
>>>  amdgpu_framebuffer_init(struct drm_device *dev,
>>>                         struct amdgpu_framebuffer *rfb,
>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.h
>>> index 11ae4ab..f241949 100644
>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.h
>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.h
>>> @@ -23,6 +23,7 @@
>>>  #ifndef __AMDGPU_DISPLAY_H__
>>>  #define __AMDGPU_DISPLAY_H__
>>>
>>> +uint32_t amdgpu_framebuffer_domains(struct amdgpu_device *adev);
>>>  struct drm_framebuffer *
>>>  amdgpu_user_framebuffer_create(struct drm_device *dev,
>>>                                struct drm_file *file_priv,
>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c
>>> index 90fa8e8..9be3228 100644
>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c
>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c
>>> @@ -38,6 +38,8 @@
>>>
>>>  #include <linux/vga_switcheroo.h>
>>>
>>> +#include "amdgpu_display.h"
>>> +
>>>  /* object hierarchy -
>>>     this contains a helper + a amdgpu fb
>>>     the helper contains a pointer to amdgpu framebuffer baseclass.
>>> @@ -124,7 +126,7 @@ static int amdgpufb_create_pinned_object(struct amdgpu_fbdev *rfbdev,
>>>         struct drm_gem_object *gobj = NULL;
>>>         struct amdgpu_bo *abo = NULL;
>>>         bool fb_tiled = false; /* useful for testing */
>>> -       u32 tiling_flags = 0;
>>> +       u32 tiling_flags = 0, domain;
>>>         int ret;
>>>         int aligned_size, size;
>>>         int height = mode_cmd->height;
>>> @@ -135,12 +137,12 @@ static int amdgpufb_create_pinned_object(struct amdgpu_fbdev *rfbdev,
>>>         /* need to align pitch with crtc limits */
>>>         mode_cmd->pitches[0] = amdgpu_align_pitch(adev, mode_cmd->width, cpp,
>>>                                                   fb_tiled);
>>> +       domain = amdgpu_framebuffer_domains(adev);
>>>
>>>         height = ALIGN(mode_cmd->height, 8);
>>>         size = mode_cmd->pitches[0] * height;
>>>         aligned_size = ALIGN(size, PAGE_SIZE);
>>> -       ret = amdgpu_gem_object_create(adev, aligned_size, 0,
>>> -                                      AMDGPU_GEM_DOMAIN_VRAM,
>>> +       ret = amdgpu_gem_object_create(adev, aligned_size, 0, domain,
>>>                                        AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED |
>>>                                        AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS |
>>>                                        AMDGPU_GEM_CREATE_VRAM_CLEARED,
>>> @@ -166,7 +168,7 @@ static int amdgpufb_create_pinned_object(struct amdgpu_fbdev *rfbdev,
>>>         }
>>>
>>>
>>> -       ret = amdgpu_bo_pin(abo, AMDGPU_GEM_DOMAIN_VRAM, NULL);
>>> +       ret = amdgpu_bo_pin(abo, domain, NULL);
>>>         if (ret) {
>>>                 amdgpu_bo_unreserve(abo);
>>>                 goto out_unref;
>>> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
>>> index a3bf021..9b05abd 100644
>>> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
>>> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
>>> @@ -2982,11 +2982,13 @@ static int dm_plane_helper_prepare_fb(struct drm_plane *plane,
>>>  {
>>>         struct amdgpu_framebuffer *afb;
>>>         struct drm_gem_object *obj;
>>> +       struct amdgpu_device *adev;
>>>         struct amdgpu_bo *rbo;
>>>         uint64_t chroma_addr = 0;
>>> -       int r;
>>>         struct dm_plane_state *dm_plane_state_new, *dm_plane_state_old;
>>>         unsigned int awidth;
>>> +       uint32_t domain;
>>> +       int r;
>>>
>>>         dm_plane_state_old = to_dm_plane_state(plane->state);
>>>         dm_plane_state_new = to_dm_plane_state(new_state);
>>> @@ -3000,12 +3002,17 @@ static int dm_plane_helper_prepare_fb(struct drm_plane *plane,
>>>
>>>         obj = afb->obj;
>>>         rbo = gem_to_amdgpu_bo(obj);
>>> +       adev = amdgpu_ttm_adev(rbo->tbo.bdev);
>>>         r = amdgpu_bo_reserve(rbo, false);
>>>         if (unlikely(r != 0))
>>>                 return r;
>>>
>>> -       r = amdgpu_bo_pin(rbo, AMDGPU_GEM_DOMAIN_VRAM, &afb->address);
>>> +       if (plane->type != DRM_PLANE_TYPE_CURSOR)
>>
>> Do cursors have to be in vram?  It seems like they shouldn't.
>>
>> Alex
>>
>>> +               domain = amdgpu_framebuffer_domains(adev);
>>> +       else
>>> +               domain = AMDGPU_GEM_DOMAIN_VRAM;
>>>
>>> +       r = amdgpu_bo_pin(rbo, domain, &afb->address);
>>>
>>>         amdgpu_bo_unreserve(rbo);
>>>
>>> --
>>> 2.7.4
>>>
>>> _______________________________________________
>>> amd-gfx mailing list
>>> amd-gfx at lists.freedesktop.org
>>> https://lists.freedesktop.org/mailman/listinfo/amd-gfx


[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux