On Tue, Oct 22, 2019 at 6:30 AM Laurent Pinchart <[email protected]> wrote: > > Hi Rob, > > Thank you for the patch. > > On Mon, Oct 21, 2019 at 04:45:48PM -0500, Rob Herring wrote: > > Add support in CMA helpers to handle callers specifying > > DRM_MODE_DUMB_KERNEL_MAP flag. Existing behavior is maintained with this > > change. drm_gem_cma_dumb_create() always creates a kernel mapping as > > before. drm_gem_cma_dumb_create_internal() lets the caller set the flags > > as desired. Therefore, update all the existing callers of > > drm_gem_cma_dumb_create_internal() to also set the > > DRM_MODE_DUMB_KERNEL_MAP flag. > > > > Cc: Maarten Lankhorst <[email protected]> > > Cc: Maxime Ripard <[email protected]> > > Cc: Sean Paul <[email protected]> > > Cc: David Airlie <[email protected]> > > Cc: Daniel Vetter <[email protected]> > > Cc: "James (Qian) Wang" <[email protected]> > > Cc: Liviu Dudau <[email protected]> > > Cc: Brian Starkey <[email protected]> > > Cc: Neil Armstrong <[email protected]> > > Cc: Kevin Hilman <[email protected]> > > Cc: Laurent Pinchart <[email protected]> > > Cc: Kieran Bingham <[email protected]> > > Cc: Sandy Huang <[email protected]> > > Cc: "Heiko Stübner" <[email protected]> > > Cc: Yannick Fertre <[email protected]> > > Cc: Philippe Cornu <[email protected]> > > Cc: Benjamin Gaignard <[email protected]> > > Cc: Vincent Abriou <[email protected]> > > Cc: Maxime Coquelin <[email protected]> > > Cc: Alexandre Torgue <[email protected]> > > Cc: Chen-Yu Tsai <[email protected]> > > Cc: [email protected] > > Cc: [email protected] > > Cc: [email protected] > > Cc: [email protected] > > Cc: [email protected] > > Signed-off-by: Rob Herring <[email protected]> > > --- > > .../gpu/drm/arm/display/komeda/komeda_kms.c | 1 + > > drivers/gpu/drm/arm/malidp_drv.c | 1 + > > drivers/gpu/drm/drm_gem_cma_helper.c | 48 +++++++++++-------- > > drivers/gpu/drm/meson/meson_drv.c | 1 + > > drivers/gpu/drm/rcar-du/rcar_du_kms.c | 1 + > > drivers/gpu/drm/rockchip/rockchip_drm_gem.c | 1 + > > drivers/gpu/drm/stm/drv.c | 1 + > > drivers/gpu/drm/sun4i/sun4i_drv.c | 1 + > > 8 files changed, 36 insertions(+), 19 deletions(-) > > > > diff --git a/drivers/gpu/drm/arm/display/komeda/komeda_kms.c > > b/drivers/gpu/drm/arm/display/komeda/komeda_kms.c > > index d49772de93e0..7cf0dc4cbfc1 100644 > > --- a/drivers/gpu/drm/arm/display/komeda/komeda_kms.c > > +++ b/drivers/gpu/drm/arm/display/komeda/komeda_kms.c > > @@ -31,6 +31,7 @@ static int komeda_gem_cma_dumb_create(struct drm_file > > *file, > > u32 pitch = DIV_ROUND_UP(args->width * args->bpp, 8); > > > > args->pitch = ALIGN(pitch, mdev->chip.bus_width); > > + args->flags = DRM_MODE_DUMB_KERNEL_MAP; > > > > return drm_gem_cma_dumb_create_internal(file, dev, args); > > } > > diff --git a/drivers/gpu/drm/arm/malidp_drv.c > > b/drivers/gpu/drm/arm/malidp_drv.c > > index 8a76315aaa0f..aeb1a779ecc1 100644 > > --- a/drivers/gpu/drm/arm/malidp_drv.c > > +++ b/drivers/gpu/drm/arm/malidp_drv.c > > @@ -465,6 +465,7 @@ static int malidp_dumb_create(struct drm_file > > *file_priv, > > u8 alignment = malidp_hw_get_pitch_align(malidp->dev, 1); > > > > args->pitch = ALIGN(DIV_ROUND_UP(args->width * args->bpp, 8), > > alignment); > > + args->flags = DRM_MODE_DUMB_KERNEL_MAP; > > > > return drm_gem_cma_dumb_create_internal(file_priv, drm, args); > > } > > diff --git a/drivers/gpu/drm/drm_gem_cma_helper.c > > b/drivers/gpu/drm/drm_gem_cma_helper.c > > index 4cebfe01e6ea..f91e9e8adeaf 100644 > > --- a/drivers/gpu/drm/drm_gem_cma_helper.c > > +++ b/drivers/gpu/drm/drm_gem_cma_helper.c > > @@ -78,21 +78,8 @@ __drm_gem_cma_create(struct drm_device *drm, size_t size) > > return ERR_PTR(ret); > > } > > > > -/** > > - * drm_gem_cma_create - allocate an object with the given size > > - * @drm: DRM device > > - * @size: size of the object to allocate > > - * > > - * This function creates a CMA GEM object and allocates a contiguous chunk > > of > > - * memory as backing store. The backing memory has the writecombine > > attribute > > - * set. > > - * > > - * Returns: > > - * A struct drm_gem_cma_object * on success or an ERR_PTR()-encoded > > negative > > - * error code on failure. > > - */ > > -struct drm_gem_cma_object *drm_gem_cma_create(struct drm_device *drm, > > - size_t size) > > +static struct drm_gem_cma_object * > > +drm_gem_cma_create_flags(struct drm_device *drm, size_t size, u32 flags) > > { > > struct drm_gem_cma_object *cma_obj; > > int ret; > > @@ -103,6 +90,9 @@ struct drm_gem_cma_object *drm_gem_cma_create(struct > > drm_device *drm, > > if (IS_ERR(cma_obj)) > > return cma_obj; > > > > + if (!(flags & DRM_MODE_DUMB_KERNEL_MAP)) > > + cma_obj->dma_attrs |= DMA_ATTR_NO_KERNEL_MAPPING; > > + > > cma_obj->vaddr = dma_alloc_attrs(drm->dev, size, &cma_obj->paddr, > > GFP_KERNEL | __GFP_NOWARN, > > cma_obj->dma_attrs); > > @@ -119,6 +109,25 @@ struct drm_gem_cma_object *drm_gem_cma_create(struct > > drm_device *drm, > > drm_gem_object_put_unlocked(&cma_obj->base); > > return ERR_PTR(ret); > > } > > + > > +/** > > + * drm_gem_cma_create - allocate an object with the given size > > + * @drm: DRM device > > + * @size: size of the object to allocate > > + * > > + * This function creates a CMA GEM object and allocates a contiguous chunk > > of > > + * memory as backing store. The backing memory has the writecombine > > attribute > > + * set. > > + * > > Shouldn't you mention here that the function always creates a kernel > mapping, and that callers that don't need the mapping should use > drm_gem_cma_dumb_create_internal() instead ?
Are you confusing drm_gem_cma_create with drm_gem_cma_dumb_create? drm_gem_cma_dumb_create() uses defaults and drm_gem_cma_dumb_create_internal() allows the caller to tweak parameters. Nothing new there other than an additional param to tweak. > drm_gem_cma_dumb_create_internal() operates at a different level though, > and drm_gem_cma_create() is only exported for a single driver. There's > no equivalent to drm_gem_cma_create() that can skip the kernel mapping. Because we don't yet need one. drm_gem_cma_create_flags() can be made public when we do. I could do that now I guess and make drm_gem_cma_create an inline wrapper. Rob
