On Tue, 2023-10-24 at 10:37 +0200, AngeloGioacchino Del Regno wrote:
> Il 23/10/23 06:45, Jason-JH.Lin ha scritto:
> > From: CK Hu <ck.hu@mediatek.com>
> > 
> > Add an interface to allocate MediaTek GEM buffers, allow the IOCTLs
> > to be used by render nodes.
> > This patch also sets the RENDER driver feature.
> > 
> > Signed-off-by: CK Hu <ck.hu@mediatek.com>
> > Signed-off-by: Nicolas Boichat <drinkcat@chromium.org>
> > Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
> > Signed-off-by: Jason-JH.Lin <jason-jh.lin@mediatek.com>
> > Reviewed-by: Daniel Kurtz <djkurtz@chromium.org>
> > Reviewed-by: Nicolas Boichat <drinkcat@chromium.org>
> > Tested-by: Daniel Kurtz <djkurtz@chromium.org>
> > Tested-by: Pi-Hsun Shih <pihsun@chromium.org>
> > 
> > ---
> >   drivers/gpu/drm/mediatek/mtk_drm_drv.c | 13 ++++++
> >   drivers/gpu/drm/mediatek/mtk_drm_gem.c | 39 +++++++++++++++++
> >   drivers/gpu/drm/mediatek/mtk_drm_gem.h | 12 ++++++
> >   include/uapi/drm/mediatek_drm.h        | 58
> > ++++++++++++++++++++++++++
> >   4 files changed, 122 insertions(+)
> >   create mode 100644 include/uapi/drm/mediatek_drm.h
> > 
> > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> > b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> > index 93552d76b6e7..e3e9dbdf265b 100644
> > --- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> > +++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> > @@ -24,6 +24,7 @@
> >   #include <drm/drm_of.h>
> >   #include <drm/drm_probe_helper.h>
> >   #include <drm/drm_vblank.h>
> > +#include <drm/mediatek_drm.h>
> >   
> >   #include "mtk_drm_crtc.h"
> >   #include "mtk_drm_ddp_comp.h"
> > @@ -541,6 +542,14 @@ static void mtk_drm_kms_deinit(struct
> > drm_device *drm)
> >   component_unbind_all(drm->dev, drm);
> >   }
> >   
> > +static const struct drm_ioctl_desc mtk_ioctls[] = {
> > +DRM_IOCTL_DEF_DRV(MTK_GEM_CREATE, mtk_gem_create_ioctl,
> > +  DRM_UNLOCKED | DRM_AUTH | DRM_RENDER_ALLOW),
> > +DRM_IOCTL_DEF_DRV(MTK_GEM_MAP_OFFSET,
> > +  mtk_gem_map_offset_ioctl,
> > +  DRM_UNLOCKED | DRM_AUTH | DRM_RENDER_ALLOW),
> > +};
> > +
> >   DEFINE_DRM_GEM_FOPS(mtk_drm_fops);
> >   
> >   /*
> > @@ -562,6 +571,10 @@ static const struct drm_driver mtk_drm_driver
> > = {
> >   
> >   .gem_prime_import = mtk_drm_gem_prime_import,
> >   .gem_prime_import_sg_table = mtk_gem_prime_import_sg_table,
> > +
> > +.ioctls = mtk_ioctls,
> > +.num_ioctls = ARRAY_SIZE(mtk_ioctls),
> > +
> >   .fops = &mtk_drm_fops,
> >   
> >   .name = DRIVER_NAME,
> > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_gem.c
> > b/drivers/gpu/drm/mediatek/mtk_drm_gem.c
> > index 9f364df52478..bcce723f257d 100644
> > --- a/drivers/gpu/drm/mediatek/mtk_drm_gem.c
> > +++ b/drivers/gpu/drm/mediatek/mtk_drm_gem.c
> > @@ -4,6 +4,7 @@
> >    */
> >   
> >   #include <linux/dma-buf.h>
> > +#include <drm/mediatek_drm.h>
> >   
> >   #include <drm/drm.h>
> >   #include <drm/drm_device.h>
> > @@ -272,3 +273,41 @@ void mtk_drm_gem_prime_vunmap(struct
> > drm_gem_object *obj,
> >   mtk_gem->kvaddr = NULL;
> >   kfree(mtk_gem->pages);
> >   }
> > +
> > +int mtk_gem_map_offset_ioctl(struct drm_device *drm, void *data,
> > +     struct drm_file *file_priv)
> > +{
> > +struct drm_mtk_gem_map_off *args = data;
> > +
> > +return drm_gem_dumb_map_offset(file_priv, drm, args->handle,
> > +       &args->offset);
> > +}
> > +
> > +int mtk_gem_create_ioctl(struct drm_device *dev, void *data,
> > + struct drm_file *file_priv)
> > +{
> > +struct mtk_drm_gem_obj *mtk_gem;
> > +struct drm_mtk_gem_create *args = data;
> > +int ret;
> > +
> > +mtk_gem = mtk_drm_gem_create(dev, args->size, false);
> > +if (IS_ERR(mtk_gem))
> > +return PTR_ERR(mtk_gem);
> > +
> > +/*
> > + * allocate a id of idr table where the obj is registered
> > + * and handle has the id what user can see.
> > + */
> > +ret = drm_gem_handle_create(file_priv, &mtk_gem->base, &args-
> > >handle);
> > +if (ret)
> > +goto err_handle_create;
> > +
> > +/* drop reference from allocate - handle holds it now. */
> > +drm_gem_object_put(&mtk_gem->base);
> > +
> > +return 0;
> > +
> > +err_handle_create:
> > +mtk_drm_gem_free_object(&mtk_gem->base);
> > +return ret;
> > +}
> > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_gem.h
> > b/drivers/gpu/drm/mediatek/mtk_drm_gem.h
> > index 78f23b07a02e..90f3d2916ec5 100644
> > --- a/drivers/gpu/drm/mediatek/mtk_drm_gem.h
> > +++ b/drivers/gpu/drm/mediatek/mtk_drm_gem.h
> > @@ -46,4 +46,16 @@ int mtk_drm_gem_prime_vmap(struct drm_gem_object
> > *obj, struct iosys_map *map);
> >   void mtk_drm_gem_prime_vunmap(struct drm_gem_object *obj,
> >         struct iosys_map *map);
> >   
> > +/*
> > + * request gem object creation and buffer allocation as the size
> > + * that it is calculated with framebuffer information such as
> > width,
> > + * height and bpp.
> > + */
> > +int mtk_gem_create_ioctl(struct drm_device *dev, void *data,
> > + struct drm_file *file_priv);
> > +
> > +/* get buffer offset to map to user space. */
> > +int mtk_gem_map_offset_ioctl(struct drm_device *dev, void *data,
> > +     struct drm_file *file_priv);
> > +
> >   #endif
> > diff --git a/include/uapi/drm/mediatek_drm.h
> > b/include/uapi/drm/mediatek_drm.h
> > new file mode 100644
> > index 000000000000..c050de320a84
> > --- /dev/null
> > +++ b/include/uapi/drm/mediatek_drm.h
> > @@ -0,0 +1,58 @@
> > +/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
> > +/*
> > + * Copyright (c) 2015 MediaTek Inc.
> > + *
> > + * This program is free software; you can redistribute it and/or
> > modify
> > + * it under the terms of the GNU General Public License version 2
> > as
> > + * published by the Free Software Foundation.
> > + *
> > + * This program is distributed in the hope that it will be useful,
> > + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> > + * GNU General Public License for more details.
> > + */
> > +
> > +#ifndef _UAPI_MEDIATEK_DRM_H
> > +#define _UAPI_MEDIATEK_DRM_H
> > +
> > +#include <drm/drm.h>
> > +
> > +/**
> > + * User-desired buffer creation information structure.
> 
> You're almost there.... Read:
> 
> 
https://urldefense.com/v3/__https://docs.kernel.org/doc-guide/kernel-doc.html*structure-union-and-enumeration-documentation__;Iw!!CTRNKA9wMg0ARbw!kERlb86VAz8ud_XHQQwv1hHLb2Ffjz-ECgPk74SE7PUwOIyIbCh8cHKZj2w12qOeIKktUQQAIklBO9aQ8_W_A2VaNK09ty9HBQ$
>  

OK, Thanks for your help.
I can use that `scripts/kernel-doc` to scan my code now!

Will fix them in the next version.

Regards,
Jason-JH.Lin

> 
> Regards,
> Angelo
> 
> 

************* MEDIATEK Confidentiality Notice ********************
The information contained in this e-mail message (including any 
attachments) may be confidential, proprietary, privileged, or otherwise
exempt from disclosure under applicable laws. It is intended to be 
conveyed only to the designated recipient(s). Any use, dissemination, 
distribution, printing, retaining or copying of this e-mail (including its 
attachments) by unintended recipient(s) is strictly prohibited and may 
be unlawful. If you are not an intended recipient of this e-mail, or believe 
that you have received this e-mail in error, please notify the sender 
immediately (by replying to this e-mail), delete any and all copies of 
this e-mail (including any attachments) from your system, and do not
disclose the content of this e-mail to any other person. Thank you!