xref: /linux/drivers/gpu/drm/msm/disp/mdp_format.h (revision db5d28c0bfe566908719bec8e25443aabecbb802)
17120d8a0SDmitry Baryshkov /* SPDX-License-Identifier: GPL-2.0-only */
27120d8a0SDmitry Baryshkov /*
37120d8a0SDmitry Baryshkov  * Copyright (c) 2016-2018, The Linux Foundation. All rights reserved.
47120d8a0SDmitry Baryshkov  * Copyright (C) 2013 Red Hat
57120d8a0SDmitry Baryshkov  * Author: Rob Clark <robdclark@gmail.com>
67120d8a0SDmitry Baryshkov  */
77120d8a0SDmitry Baryshkov 
87120d8a0SDmitry Baryshkov #ifndef __MSM_FORMAT_H__
97120d8a0SDmitry Baryshkov #define __MSM_FORMAT_H__
107120d8a0SDmitry Baryshkov 
117120d8a0SDmitry Baryshkov #include "mdp_common.xml.h"
127120d8a0SDmitry Baryshkov 
137120d8a0SDmitry Baryshkov enum msm_format_flags {
147120d8a0SDmitry Baryshkov 	MSM_FORMAT_FLAG_YUV_BIT,
157120d8a0SDmitry Baryshkov 	MSM_FORMAT_FLAG_DX_BIT,
167120d8a0SDmitry Baryshkov 	MSM_FORMAT_FLAG_COMPRESSED_BIT,
17e0925148SDmitry Baryshkov 	MSM_FORMAT_FLAG_UNPACK_TIGHT_BIT,
18f4f39207SDmitry Baryshkov 	MSM_FORMAT_FLAG_UNPACK_ALIGN_MSB_BIT,
197120d8a0SDmitry Baryshkov };
207120d8a0SDmitry Baryshkov 
217120d8a0SDmitry Baryshkov #define MSM_FORMAT_FLAG_YUV		BIT(MSM_FORMAT_FLAG_YUV_BIT)
227120d8a0SDmitry Baryshkov #define MSM_FORMAT_FLAG_DX		BIT(MSM_FORMAT_FLAG_DX_BIT)
237120d8a0SDmitry Baryshkov #define MSM_FORMAT_FLAG_COMPRESSED	BIT(MSM_FORMAT_FLAG_COMPRESSED_BIT)
24e0925148SDmitry Baryshkov #define MSM_FORMAT_FLAG_UNPACK_TIGHT	BIT(MSM_FORMAT_FLAG_UNPACK_TIGHT_BIT)
25f4f39207SDmitry Baryshkov #define MSM_FORMAT_FLAG_UNPACK_ALIGN_MSB BIT(MSM_FORMAT_FLAG_UNPACK_ALIGN_MSB_BIT)
267120d8a0SDmitry Baryshkov 
270e67f514SDmitry Baryshkov /**
28*b228501fSDmitry Baryshkov  * DPU HW,Component order color map
29*b228501fSDmitry Baryshkov  */
30*b228501fSDmitry Baryshkov enum {
31*b228501fSDmitry Baryshkov 	C0_G_Y = 0,
32*b228501fSDmitry Baryshkov 	C1_B_Cb = 1,
33*b228501fSDmitry Baryshkov 	C2_R_Cr = 2,
34*b228501fSDmitry Baryshkov 	C3_ALPHA = 3
35*b228501fSDmitry Baryshkov };
36*b228501fSDmitry Baryshkov 
37*b228501fSDmitry Baryshkov /**
380e67f514SDmitry Baryshkov  * struct msm_format: defines the format configuration
390e67f514SDmitry Baryshkov  * @pixel_format: format fourcc
400e67f514SDmitry Baryshkov  * @element: element color ordering
410e67f514SDmitry Baryshkov  * @fetch_type: how the color components are packed in pixel format
420e67f514SDmitry Baryshkov  * @chroma_sample: chroma sub-samplng type
430e67f514SDmitry Baryshkov  * @alpha_enable: whether the format has an alpha channel
440e67f514SDmitry Baryshkov  * @unpack_count: number of the components to unpack
450e67f514SDmitry Baryshkov  * @bpp: bytes per pixel
460e67f514SDmitry Baryshkov  * @flags: usage bit flags
470e67f514SDmitry Baryshkov  * @num_planes: number of planes (including meta data planes)
480e67f514SDmitry Baryshkov  * @fetch_mode: linear, tiled, or ubwc hw fetch behavior
490e67f514SDmitry Baryshkov  * @tile_height: format tile height
500e67f514SDmitry Baryshkov  */
517120d8a0SDmitry Baryshkov struct msm_format {
527120d8a0SDmitry Baryshkov 	uint32_t pixel_format;
530e67f514SDmitry Baryshkov 	enum mdp_bpc bpc_g_y, bpc_b_cb, bpc_r_cr;
540e67f514SDmitry Baryshkov 	enum mdp_bpc_alpha bpc_a;
550e67f514SDmitry Baryshkov 	u8 element[4];
560e67f514SDmitry Baryshkov 	enum mdp_fetch_type fetch_type;
570e67f514SDmitry Baryshkov 	enum mdp_chroma_samp_type chroma_sample;
580e67f514SDmitry Baryshkov 	bool alpha_enable;
590e67f514SDmitry Baryshkov 	u8 unpack_count;
600e67f514SDmitry Baryshkov 	u8 bpp;
617120d8a0SDmitry Baryshkov 	unsigned long flags;
620e67f514SDmitry Baryshkov 	u8 num_planes;
637120d8a0SDmitry Baryshkov 	enum mdp_fetch_mode fetch_mode;
640e67f514SDmitry Baryshkov 	u16 tile_height;
657120d8a0SDmitry Baryshkov };
667120d8a0SDmitry Baryshkov 
677120d8a0SDmitry Baryshkov #define MSM_FORMAT_IS_YUV(X)		((X)->flags & MSM_FORMAT_FLAG_YUV)
687120d8a0SDmitry Baryshkov #define MSM_FORMAT_IS_DX(X)		((X)->flags & MSM_FORMAT_FLAG_DX)
697120d8a0SDmitry Baryshkov #define MSM_FORMAT_IS_LINEAR(X)		((X)->fetch_mode == MDP_FETCH_LINEAR)
707120d8a0SDmitry Baryshkov #define MSM_FORMAT_IS_TILE(X) \
717120d8a0SDmitry Baryshkov 	(((X)->fetch_mode == MDP_FETCH_UBWC) && \
727120d8a0SDmitry Baryshkov 	 !((X)->flags & MSM_FORMAT_FLAG_COMPRESSED))
737120d8a0SDmitry Baryshkov #define MSM_FORMAT_IS_UBWC(X) \
747120d8a0SDmitry Baryshkov 	(((X)->fetch_mode == MDP_FETCH_UBWC) && \
757120d8a0SDmitry Baryshkov 	 ((X)->flags & MSM_FORMAT_FLAG_COMPRESSED))
767120d8a0SDmitry Baryshkov 
777120d8a0SDmitry Baryshkov #endif
78