[Nouveau] [PATCH 1/6] make RAM device optional

Alexandre Courbot gnurou at gmail.com
Sun Jan 25 00:03:39 PST 2015


On Sat, Jan 24, 2015 at 12:00 PM, Emil Velikov <emil.l.velikov at gmail.com> wrote:
> On 23 January 2015 at 08:53, Alexandre Courbot <acourbot at nvidia.com> wrote:
>> Having a RAM device does not make sense for chips like GK20A which have
>> no dedicated video memory. The dummy RAM device that we used so far
>> works as a temporary band-aid, but in the long-term it is desirable for
>> the driver to be able to work without any kind of VRAM.
>>
>> This patch adds a few conditionals in places where a RAM device was
>> assumed to be present and allows some more objects to be allocated from
>> the TT domain, allowing Nouveau to handle GPUs for which
>> pfb->ram == NULL.
>>
> Hi guys,
>
> Rather silly question so be gentle :-)
> А couple an extra flags have crept in.
>
>> Signed-off-by: Alexandre Courbot <acourbot at nvidia.com>
>> ---
>>  drm/nouveau/nouveau_display.c         |  9 ++++++++-
>>  drm/nouveau/nouveau_ttm.c             |  3 +++
>>  drm/nouveau/nv84_fence.c              |  7 +++++--
>>  drm/nouveau/nvkm/engine/device/base.c |  9 ++++++---
>>  drm/nouveau/nvkm/subdev/clk/base.c    |  2 +-
>>  drm/nouveau/nvkm/subdev/fb/base.c     | 26 ++++++++++++++++++--------
>>  drm/nouveau/nvkm/subdev/ltc/gf100.c   | 14 ++++++++++----
>>  7 files changed, 51 insertions(+), 19 deletions(-)
>>
>> diff --git a/drm/nouveau/nouveau_display.c b/drm/nouveau/nouveau_display.c
>> index 860b0e2..b4f8ece 100644
>> --- a/drm/nouveau/nouveau_display.c
>> +++ b/drm/nouveau/nouveau_display.c
>> @@ -869,13 +869,20 @@ nouveau_display_dumb_create(struct drm_file *file_priv, struct drm_device *dev,
>>                             struct drm_mode_create_dumb *args)
>>  {
>>         struct nouveau_bo *bo;
>> +       uint32_t domain;
>>         int ret;
>>
>>         args->pitch = roundup(args->width * (args->bpp / 8), 256);
>>         args->size = args->pitch * args->height;
>>         args->size = roundup(args->size, PAGE_SIZE);
>>
>> -       ret = nouveau_gem_new(dev, args->size, 0, NOUVEAU_GEM_DOMAIN_VRAM, 0, 0, &bo);
>> +       if (nvxx_fb(&nouveau_drm(dev)->device)->ram)
>> +               domain = NOUVEAU_GEM_DOMAIN_VRAM;
>> +       else
>> +               domain = NOUVEAU_GEM_DOMAIN_GART;
>> +
>> +       ret = nouveau_gem_new(dev, args->size, 0,
>> +                             domain | NOUVEAU_GEM_DOMAIN_MAPPABLE, 0, 0, &bo);
> Taking about the extra NOUVEAU_GEM_DOMAIN_MAPPABLE.
>
>> diff --git a/drm/nouveau/nouveau_ttm.c b/drm/nouveau/nouveau_ttm.c
>> index 273e501..a3c2e9b 100644
>> --- a/drm/nouveau/nouveau_ttm.c
>> +++ b/drm/nouveau/nouveau_ttm.c
>> @@ -85,6 +85,9 @@ nouveau_vram_manager_new(struct ttm_mem_type_manager *man,
>>         if (nvbo->tile_flags & NOUVEAU_GEM_TILE_NONCONTIG)
>>                 size_nc = 1 << nvbo->page_shift;
>>
>> +       if (!pfb->ram)
>> +               return -ENOMEM;
>> +
>>         ret = pfb->ram->get(pfb, mem->num_pages << PAGE_SHIFT,
>>                            mem->page_alignment << PAGE_SHIFT, size_nc,
>>                            (nvbo->tile_flags >> 8) & 0x3ff, &node);
>> diff --git a/drm/nouveau/nv84_fence.c b/drm/nouveau/nv84_fence.c
>> index bf429ca..952bc48 100644
>> --- a/drm/nouveau/nv84_fence.c
>> +++ b/drm/nouveau/nv84_fence.c
>> @@ -215,6 +215,7 @@ nv84_fence_create(struct nouveau_drm *drm)
>>  {
>>         struct nvkm_fifo *pfifo = nvxx_fifo(&drm->device);
>>         struct nv84_fence_priv *priv;
>> +       u32 domain;
>>         int ret;
>>
>>         priv = drm->fence = kzalloc(sizeof(*priv), GFP_KERNEL);
>> @@ -231,10 +232,12 @@ nv84_fence_create(struct nouveau_drm *drm)
>>         priv->base.context_base = fence_context_alloc(priv->base.contexts);
>>         priv->base.uevent = true;
>>
>> +       domain = nvxx_fb(&drm->device)->ram ? TTM_PL_FLAG_VRAM : TTM_PL_FLAG_TT;
>>         ret = nouveau_bo_new(drm->dev, 16 * priv->base.contexts, 0,
>> -                            TTM_PL_FLAG_VRAM, 0, 0, NULL, NULL, &priv->bo);
>> +                            domain | TTM_PL_FLAG_UNCACHED,
> And the TTM_PL_FLAG_UNCACHED here.
>
> Are those intentional, I don't see any hints about them in the commit summary ?

Well spotted. There are not supposed to be here, at least not with
this patch. My branch has accumulated a lot of unsubmitted work and
these lines got squashed by error.

Thanks - I will wait a few more days for comments, then submit a v2
addressing both your and Illian's comments.


More information about the Nouveau mailing list