[PATCH v2] drm/exynos: add G2D driver

Dave Airlie airlied at gmail.com
Thu May 17 03:27:20 PDT 2012


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.

Dave.


More information about the dri-devel mailing list