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