<html><body><p>
<pre>
Hi CK,

Thanks for the reviews.

On Mon, 2023-12-25 at 09:05 +0000, CK Hu (胡俊光) wrote:
> Hi, Jason:
>
>
> On Sun, 2023-12-24 at 02:29 +0800, Jason-JH.Lin wrote:
> > 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 2b0c35cacbc6..5d2a39e491aa 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"
> > @@ -569,6 +570,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),
>
> For secure buffer, we don't need map offset function. If you really
> need this function, separate this to another patch and describe why
> need this.
>
> Regards,
> CK

OK, I'll remove this function.

Regards
Jason-JH.Lin
>
> > +};
> > +
> > DEFINE_DRM_GEM_FOPS(mtk_drm_fops);
> >
> > /*
> > @@ -590,6 +599,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 4f2e3feabc0f..30e347adcbe9 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>
> > @@ -283,3 +284,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..f4d47577c94e
> > --- /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>
> > +
> > +/**
> > + * struct drm_mtk_gem_create - User-desired buffer creation
> > information structure.
> > + *
> > + * @size: user-desired memory allocation size.
> > + *- this size value would be page-aligned internally.
> > + * @flags: user request for setting memory type or cache
> > attributes.
> > + * @handle: returned a handle to created gem object.
> > + *- this handle will be set by gem module of kernel side.
> > + */
> > +struct drm_mtk_gem_create {
> > +uint64_t size;
> > +uint32_t flags;
> > +uint32_t handle;
> > +};
> > +
> > +/**
> > + * struct drm_mtk_gem_map_off - A structure for getting buffer
> > offset.
> > + *
> > + * @handle: a pointer to gem object created.
> > + * @pad: just padding to be 64-bit aligned.
> > + * @offset: relatived offset value of the memory region allocated.
> > + * - this value should be set by user.
> > + */
> > +struct drm_mtk_gem_map_off {
> > +uint32_t handle;
> > +uint32_t pad;
> > +uint64_t offset;
> > +};
> > +
> > +#define DRM_MTK_GEM_CREATE0x00
> > +#define DRM_MTK_GEM_MAP_OFFSET0x01
> > +
> > +#define DRM_IOCTL_MTK_GEM_CREATEDRM_IOWR(DRM_COMMAND_BASE + \
> > +DRM_MTK_GEM_CREATE, struct drm_mtk_gem_create)
> > +
> > +#define DRM_IOCTL_MTK_GEM_MAP_OFFSETDRM_IOWR(DRM_COMMAND_BA
> > SE + \
> > +DRM_MTK_GEM_MAP_OFFSET, struct drm_mtk_gem_map_off)
> > +
> > +#endif /* _UAPI_MEDIATEK_DRM_H */

</pre>
</p></body></html><!--type:text--><!--{--><pre>************* 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!
</pre><!--}-->