[PATCH v2] drm/exynos: add G2D driver
Inki Dae
inki.dae at samsung.com
Thu May 17 03:36:35 PDT 2012
> -----Original Message-----
> From: Dave Airlie [mailto:airlied at gmail.com]
> Sent: Thursday, May 17, 2012 7:27 PM
> To: Joonyoung Shim
> Cc: dri-devel at lists.freedesktop.org; kyungmin.park at samsung.com;
> inki.dae at samsung.com
> Subject: Re: [PATCH v2] drm/exynos: add G2D driver
>
> On Thu, Apr 26, 2012 at 9:48 AM, Joonyoung Shim <jy0922.shim at samsung.com>
> wrote:
> > The G2D is a 2D graphic accelerator that supports Bit Block Transfer.
> > This G2D driver is exynos drm specific and supports only G2D(version
> > 4.1) of later Exynos series from Exynos4X12 because supporting DMA.
> >
> > The G2D is performed by two tasks simply.
> > 1. Configures the rendering parameters, such as foreground color and
> > coordinates data by setting the drawing context registers.
> > 2. Start the rendering process by setting thre relevant command
> > registers accordingly.
> >
> > The G2D version 4.1 supports DMA mode as host interface. User can make
> > command list to reduce HOST(ARM) loads. The contents of The command list
> > is setted to relevant registers of G2D by DMA.
> >
> > The command list is composed Header and command sets and Tail.
> > - Header: The number of command set(4Bytes)
> > - Command set: Register offset(4Bytes) + Register data(4Bytes)
> > - Tail: Pointer of base address of the other command list(4Bytes)
> >
> > By Tail field, the G2D can process many command lists without halt at
> > one go.
> >
> > The G2D has following the rendering pipeline.
> > --> Primitive Drawing --> Rotation --> Clipping --> Bilinear Sampling
> > --> Color Key --> ROP --> Mask Operation --> Alpha Blending -->
> > Dithering --> FrameBuffer
> >
> > And supports various operations from the rendering pipeline.
> > - copy
> > - fast solid color fill
> > - window clipping
> > - rotation
> > - flip
> > - 4 operand raster operation(ROP4)
> > - masking operation
> > - alpha blending
> > - color key
> > - dithering
> > - etc
> >
> > User should make the command list to data and registers needed by
> > operation to use. The Exynos G2D driver only manages the command lists
> > received from user. Some registers needs memory base address(physical
> > address) of image. User doesn't know its physical address, so fills the
> > gem handle of that memory than address to command sets, then G2D driver
> > converts it to memory base address.
> >
> > We adds three ioctls and one event for Exynos G2D.
> >
> > - ioctls
> > DRM_EXYNOS_G2D_GET_VER: get the G2D hardware version
> > DRM_EXYNOS_G2D_SET_CMDLIST: set the command list from user to driver
> > DRM_EXYNOS_G2D_EXEC: execute the command lists setted to driver
> >
> > - event
> > DRM_EXYNOS_G2D_EVENT: event to give notification completion of the
> > command list to user
> >
> > Signed-off-by: Joonyoung Shim <jy0922.shim at samsung.com>
> > Signed-off-by: Inki Dae <inki.dae at samsung.com>
> > Signed-off-by: Kyungmin Park <kyungmin.park at samsung.com>
> > ---
> > The validation check codes are added to this patch v2 to prevent
> > security problem from patch v1.
> >
> > v2 changelog:
> >
> > Some code clean and added to check follows about cmdlist from user.
> >
> > 1. size of cmdlist
> > 2. registers offset validation: the registers offset shouldn't get out
> > the range - 0x0104 ~ 0x0880 and it has to be multiple of 4. The cmd
> > can't have registers offset for base address and the cmd_gem can have
> > only registers offset for base address.
>
> Okay I started to pull -next this morning then realise this still has
> bad ioctls defines in it.
>
> NO POINTERS in IOCTL STRUCTS, use __u64. I think I've had this problem
> with nearly every
> ioctl you guys add, some someone down the chain of command isn't
> getting this message.
> > +
> > +struct drm_exynos_g2d_set_cmdlist {
> > + struct drm_exynos_g2d_cmd *cmd;
> > + struct drm_exynos_g2d_cmd *cmd_gem;
>
> ^^ pointers.
>
Ah, I'm so sorry. Right, Compiler can't aware of 64bit from pointer so I
should have checked this. I will fix it soon.
Thanks,
Inki Dae
> Dave.
More information about the dri-devel
mailing list