I think Andrey approved your patch last December? If you mean the driver actually set up fb in gart memory, that is not included in this series. I can do that in another patch. Regards, Samuel Li > -----Original Message----- > From: Wentland, Harry > Sent: Friday, January 05, 2018 10:50 AM > To: Li, Samuel <Samuel.Li@xxxxxxx>; dri-devel@xxxxxxxxxxxxxxxxxxxxx; > amd-gfx@xxxxxxxxxxxxxxxxxxxxx > Cc: Koenig, Christian <Christian.Koenig@xxxxxxx> > Subject: Re: [PATCH 1/3] drm/amdgpu: allow framebuffer in GART memory > as well > > On 2018-01-04 04:11 PM, Samuel Li wrote: > > From: Christian König <christian.koenig@xxxxxxx> > > > > 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. > > I can't find the part to enable gpu_vm_support for CZ/ST. Is that in another > patch? > > Harry > > > > > Change-Id: Id0f8af3110e54a3aabf7a258871867bc121cc1a2 > > Signed-off-by: Christian König <christian.koenig@xxxxxxx> > > Reviewed-by: Andrey Grodzovsky <andrey.grodzovsky@xxxxxxx> > > Acked-by: Alex Deucher <alexander.deucher@xxxxxxx> > > Signed-off-by: Samuel Li <samuel.li@xxxxxxx> > > --- > > 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) { > > + 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) > > + domain = amdgpu_framebuffer_domains(adev); > > + else > > + domain = AMDGPU_GEM_DOMAIN_VRAM; > > > > + r = amdgpu_bo_pin(rbo, domain, &afb->address); > > > > amdgpu_bo_unreserve(rbo); > > > > _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel