cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

msm_media_info.h (42960B)


      1#ifndef __MEDIA_INFO_H__
      2#define __MEDIA_INFO_H__
      3
      4#ifndef MSM_MEDIA_ALIGN
      5#define MSM_MEDIA_ALIGN(__sz, __align) (((__align) & ((__align) - 1)) ?\
      6	((((__sz) + (__align) - 1) / (__align)) * (__align)) :\
      7	(((__sz) + (__align) - 1) & (~((__align) - 1))))
      8#endif
      9
     10#ifndef MSM_MEDIA_ROUNDUP
     11#define MSM_MEDIA_ROUNDUP(__sz, __r) (((__sz) + ((__r) - 1)) / (__r))
     12#endif
     13
     14#ifndef MSM_MEDIA_MAX
     15#define MSM_MEDIA_MAX(__a, __b) ((__a) > (__b)?(__a):(__b))
     16#endif
     17
     18enum color_fmts {
     19	/* Venus NV12:
     20	 * YUV 4:2:0 image with a plane of 8 bit Y samples followed
     21	 * by an interleaved U/V plane containing 8 bit 2x2 subsampled
     22	 * colour difference samples.
     23	 *
     24	 * <-------- Y/UV_Stride -------->
     25	 * <------- Width ------->
     26	 * Y Y Y Y Y Y Y Y Y Y Y Y . . . .  ^           ^
     27	 * Y Y Y Y Y Y Y Y Y Y Y Y . . . .  |           |
     28	 * Y Y Y Y Y Y Y Y Y Y Y Y . . . .  Height      |
     29	 * Y Y Y Y Y Y Y Y Y Y Y Y . . . .  |          Y_Scanlines
     30	 * Y Y Y Y Y Y Y Y Y Y Y Y . . . .  |           |
     31	 * Y Y Y Y Y Y Y Y Y Y Y Y . . . .  |           |
     32	 * Y Y Y Y Y Y Y Y Y Y Y Y . . . .  |           |
     33	 * Y Y Y Y Y Y Y Y Y Y Y Y . . . .  V           |
     34	 * . . . . . . . . . . . . . . . .              |
     35	 * . . . . . . . . . . . . . . . .              |
     36	 * . . . . . . . . . . . . . . . .              |
     37	 * . . . . . . . . . . . . . . . .              V
     38	 * U V U V U V U V U V U V . . . .  ^
     39	 * U V U V U V U V U V U V . . . .  |
     40	 * U V U V U V U V U V U V . . . .  |
     41	 * U V U V U V U V U V U V . . . .  UV_Scanlines
     42	 * . . . . . . . . . . . . . . . .  |
     43	 * . . . . . . . . . . . . . . . .  V
     44	 * . . . . . . . . . . . . . . . .  --> Buffer size alignment
     45	 *
     46	 * Y_Stride : Width aligned to 128
     47	 * UV_Stride : Width aligned to 128
     48	 * Y_Scanlines: Height aligned to 32
     49	 * UV_Scanlines: Height/2 aligned to 16
     50	 * Extradata: Arbitrary (software-imposed) padding
     51	 * Total size = align((Y_Stride * Y_Scanlines
     52	 *          + UV_Stride * UV_Scanlines
     53	 *          + max(Extradata, Y_Stride * 8), 4096)
     54	 */
     55	COLOR_FMT_NV12,
     56
     57	/* Venus NV21:
     58	 * YUV 4:2:0 image with a plane of 8 bit Y samples followed
     59	 * by an interleaved V/U plane containing 8 bit 2x2 subsampled
     60	 * colour difference samples.
     61	 *
     62	 * <-------- Y/UV_Stride -------->
     63	 * <------- Width ------->
     64	 * Y Y Y Y Y Y Y Y Y Y Y Y . . . .  ^           ^
     65	 * Y Y Y Y Y Y Y Y Y Y Y Y . . . .  |           |
     66	 * Y Y Y Y Y Y Y Y Y Y Y Y . . . .  Height      |
     67	 * Y Y Y Y Y Y Y Y Y Y Y Y . . . .  |          Y_Scanlines
     68	 * Y Y Y Y Y Y Y Y Y Y Y Y . . . .  |           |
     69	 * Y Y Y Y Y Y Y Y Y Y Y Y . . . .  |           |
     70	 * Y Y Y Y Y Y Y Y Y Y Y Y . . . .  |           |
     71	 * Y Y Y Y Y Y Y Y Y Y Y Y . . . .  V           |
     72	 * . . . . . . . . . . . . . . . .              |
     73	 * . . . . . . . . . . . . . . . .              |
     74	 * . . . . . . . . . . . . . . . .              |
     75	 * . . . . . . . . . . . . . . . .              V
     76	 * V U V U V U V U V U V U . . . .  ^
     77	 * V U V U V U V U V U V U . . . .  |
     78	 * V U V U V U V U V U V U . . . .  |
     79	 * V U V U V U V U V U V U . . . .  UV_Scanlines
     80	 * . . . . . . . . . . . . . . . .  |
     81	 * . . . . . . . . . . . . . . . .  V
     82	 * . . . . . . . . . . . . . . . .  --> Padding & Buffer size alignment
     83	 *
     84	 * Y_Stride : Width aligned to 128
     85	 * UV_Stride : Width aligned to 128
     86	 * Y_Scanlines: Height aligned to 32
     87	 * UV_Scanlines: Height/2 aligned to 16
     88	 * Extradata: Arbitrary (software-imposed) padding
     89	 * Total size = align((Y_Stride * Y_Scanlines
     90	 *          + UV_Stride * UV_Scanlines
     91	 *          + max(Extradata, Y_Stride * 8), 4096)
     92	 */
     93	COLOR_FMT_NV21,
     94	/* Venus NV12_MVTB:
     95	 * Two YUV 4:2:0 images/views one after the other
     96	 * in a top-bottom layout, same as NV12
     97	 * with a plane of 8 bit Y samples followed
     98	 * by an interleaved U/V plane containing 8 bit 2x2 subsampled
     99	 * colour difference samples.
    100	 *
    101	 *
    102	 * <-------- Y/UV_Stride -------->
    103	 * <------- Width ------->
    104	 * Y Y Y Y Y Y Y Y Y Y Y Y . . . .  ^           ^               ^
    105	 * Y Y Y Y Y Y Y Y Y Y Y Y . . . .  |           |               |
    106	 * Y Y Y Y Y Y Y Y Y Y Y Y . . . .  Height      |               |
    107	 * Y Y Y Y Y Y Y Y Y Y Y Y . . . .  |          Y_Scanlines      |
    108	 * Y Y Y Y Y Y Y Y Y Y Y Y . . . .  |           |               |
    109	 * Y Y Y Y Y Y Y Y Y Y Y Y . . . .  |           |               |
    110	 * Y Y Y Y Y Y Y Y Y Y Y Y . . . .  |           |               |
    111	 * Y Y Y Y Y Y Y Y Y Y Y Y . . . .  V           |               |
    112	 * . . . . . . . . . . . . . . . .              |             View_1
    113	 * . . . . . . . . . . . . . . . .              |               |
    114	 * . . . . . . . . . . . . . . . .              |               |
    115	 * . . . . . . . . . . . . . . . .              V               |
    116	 * U V U V U V U V U V U V . . . .  ^                           |
    117	 * U V U V U V U V U V U V . . . .  |                           |
    118	 * U V U V U V U V U V U V . . . .  |                           |
    119	 * U V U V U V U V U V U V . . . .  UV_Scanlines                |
    120	 * . . . . . . . . . . . . . . . .  |                           |
    121	 * . . . . . . . . . . . . . . . .  V                           V
    122	 * Y Y Y Y Y Y Y Y Y Y Y Y . . . .  ^           ^               ^
    123	 * Y Y Y Y Y Y Y Y Y Y Y Y . . . .  |           |               |
    124	 * Y Y Y Y Y Y Y Y Y Y Y Y . . . .  Height      |               |
    125	 * Y Y Y Y Y Y Y Y Y Y Y Y . . . .  |          Y_Scanlines      |
    126	 * Y Y Y Y Y Y Y Y Y Y Y Y . . . .  |           |               |
    127	 * Y Y Y Y Y Y Y Y Y Y Y Y . . . .  |           |               |
    128	 * Y Y Y Y Y Y Y Y Y Y Y Y . . . .  |           |               |
    129	 * Y Y Y Y Y Y Y Y Y Y Y Y . . . .  V           |               |
    130	 * . . . . . . . . . . . . . . . .              |             View_2
    131	 * . . . . . . . . . . . . . . . .              |               |
    132	 * . . . . . . . . . . . . . . . .              |               |
    133	 * . . . . . . . . . . . . . . . .              V               |
    134	 * U V U V U V U V U V U V . . . .  ^                           |
    135	 * U V U V U V U V U V U V . . . .  |                           |
    136	 * U V U V U V U V U V U V . . . .  |                           |
    137	 * U V U V U V U V U V U V . . . .  UV_Scanlines                |
    138	 * . . . . . . . . . . . . . . . .  |                           |
    139	 * . . . . . . . . . . . . . . . .  V                           V
    140	 * . . . . . . . . . . . . . . . .  --> Buffer size alignment
    141	 *
    142	 * Y_Stride : Width aligned to 128
    143	 * UV_Stride : Width aligned to 128
    144	 * Y_Scanlines: Height aligned to 32
    145	 * UV_Scanlines: Height/2 aligned to 16
    146	 * View_1 begin at: 0 (zero)
    147	 * View_2 begin at: Y_Stride * Y_Scanlines + UV_Stride * UV_Scanlines
    148	 * Extradata: Arbitrary (software-imposed) padding
    149	 * Total size = align((2*(Y_Stride * Y_Scanlines)
    150	 *          + 2*(UV_Stride * UV_Scanlines) + Extradata), 4096)
    151	 */
    152	COLOR_FMT_NV12_MVTB,
    153	/*
    154	 * The buffer can be of 2 types:
    155	 * (1) Venus NV12 UBWC Progressive
    156	 * (2) Venus NV12 UBWC Interlaced
    157	 *
    158	 * (1) Venus NV12 UBWC Progressive Buffer Format:
    159	 * Compressed Macro-tile format for NV12.
    160	 * Contains 4 planes in the following order -
    161	 * (A) Y_Meta_Plane
    162	 * (B) Y_UBWC_Plane
    163	 * (C) UV_Meta_Plane
    164	 * (D) UV_UBWC_Plane
    165	 *
    166	 * Y_Meta_Plane consists of meta information to decode compressed
    167	 * tile data in Y_UBWC_Plane.
    168	 * Y_UBWC_Plane consists of Y data in compressed macro-tile format.
    169	 * UBWC decoder block will use the Y_Meta_Plane data together with
    170	 * Y_UBWC_Plane data to produce loss-less uncompressed 8 bit Y samples.
    171	 *
    172	 * UV_Meta_Plane consists of meta information to decode compressed
    173	 * tile data in UV_UBWC_Plane.
    174	 * UV_UBWC_Plane consists of UV data in compressed macro-tile format.
    175	 * UBWC decoder block will use UV_Meta_Plane data together with
    176	 * UV_UBWC_Plane data to produce loss-less uncompressed 8 bit 2x2
    177	 * subsampled color difference samples.
    178	 *
    179	 * Each tile in Y_UBWC_Plane/UV_UBWC_Plane is independently decodable
    180	 * and randomly accessible. There is no dependency between tiles.
    181	 *
    182	 * <----- Y_Meta_Stride ---->
    183	 * <-------- Width ------>
    184	 * M M M M M M M M M M M M . .      ^           ^
    185	 * M M M M M M M M M M M M . .      |           |
    186	 * M M M M M M M M M M M M . .      Height      |
    187	 * M M M M M M M M M M M M . .      |         Meta_Y_Scanlines
    188	 * M M M M M M M M M M M M . .      |           |
    189	 * M M M M M M M M M M M M . .      |           |
    190	 * M M M M M M M M M M M M . .      |           |
    191	 * M M M M M M M M M M M M . .      V           |
    192	 * . . . . . . . . . . . . . .                  |
    193	 * . . . . . . . . . . . . . .                  |
    194	 * . . . . . . . . . . . . . .      -------> Buffer size aligned to 4k
    195	 * . . . . . . . . . . . . . .                  V
    196	 * <--Compressed tile Y Stride--->
    197	 * <------- Width ------->
    198	 * Y* Y* Y* Y* Y* Y* Y* Y* . . . .  ^           ^
    199	 * Y* Y* Y* Y* Y* Y* Y* Y* . . . .  |           |
    200	 * Y* Y* Y* Y* Y* Y* Y* Y* . . . .  Height      |
    201	 * Y* Y* Y* Y* Y* Y* Y* Y* . . . .  |        Macro_tile_Y_Scanlines
    202	 * Y* Y* Y* Y* Y* Y* Y* Y* . . . .  |           |
    203	 * Y* Y* Y* Y* Y* Y* Y* Y* . . . .  |           |
    204	 * Y* Y* Y* Y* Y* Y* Y* Y* . . . .  |           |
    205	 * Y* Y* Y* Y* Y* Y* Y* Y* . . . .  V           |
    206	 * . . . . . . . . . . . . . . . .              |
    207	 * . . . . . . . . . . . . . . . .              |
    208	 * . . . . . . . . . . . . . . . .  -------> Buffer size aligned to 4k
    209	 * . . . . . . . . . . . . . . . .              V
    210	 * <----- UV_Meta_Stride ---->
    211	 * M M M M M M M M M M M M . .      ^
    212	 * M M M M M M M M M M M M . .      |
    213	 * M M M M M M M M M M M M . .      |
    214	 * M M M M M M M M M M M M . .      M_UV_Scanlines
    215	 * . . . . . . . . . . . . . .      |
    216	 * . . . . . . . . . . . . . .      V
    217	 * . . . . . . . . . . . . . .      -------> Buffer size aligned to 4k
    218	 * <--Compressed tile UV Stride--->
    219	 * U* V* U* V* U* V* U* V* . . . .  ^
    220	 * U* V* U* V* U* V* U* V* . . . .  |
    221	 * U* V* U* V* U* V* U* V* . . . .  |
    222	 * U* V* U* V* U* V* U* V* . . . .  UV_Scanlines
    223	 * . . . . . . . . . . . . . . . .  |
    224	 * . . . . . . . . . . . . . . . .  V
    225	 * . . . . . . . . . . . . . . . .  -------> Buffer size aligned to 4k
    226	 *
    227	 * Y_Stride = align(Width, 128)
    228	 * UV_Stride = align(Width, 128)
    229	 * Y_Scanlines = align(Height, 32)
    230	 * UV_Scanlines = align(Height/2, 16)
    231	 * Y_UBWC_Plane_size = align(Y_Stride * Y_Scanlines, 4096)
    232	 * UV_UBWC_Plane_size = align(UV_Stride * UV_Scanlines, 4096)
    233	 * Y_Meta_Stride = align(roundup(Width, Y_TileWidth), 64)
    234	 * Y_Meta_Scanlines = align(roundup(Height, Y_TileHeight), 16)
    235	 * Y_Meta_Plane_size = align(Y_Meta_Stride * Y_Meta_Scanlines, 4096)
    236	 * UV_Meta_Stride = align(roundup(Width, UV_TileWidth), 64)
    237	 * UV_Meta_Scanlines = align(roundup(Height, UV_TileHeight), 16)
    238	 * UV_Meta_Plane_size = align(UV_Meta_Stride * UV_Meta_Scanlines, 4096)
    239	 * Extradata = 8k
    240	 *
    241	 * Total size = align( Y_UBWC_Plane_size + UV_UBWC_Plane_size +
    242	 *           Y_Meta_Plane_size + UV_Meta_Plane_size
    243	 *           + max(Extradata, Y_Stride * 48), 4096)
    244	 *
    245	 *
    246	 * (2) Venus NV12 UBWC Interlaced Buffer Format:
    247	 * Compressed Macro-tile format for NV12 interlaced.
    248	 * Contains 8 planes in the following order -
    249	 * (A) Y_Meta_Top_Field_Plane
    250	 * (B) Y_UBWC_Top_Field_Plane
    251	 * (C) UV_Meta_Top_Field_Plane
    252	 * (D) UV_UBWC_Top_Field_Plane
    253	 * (E) Y_Meta_Bottom_Field_Plane
    254	 * (F) Y_UBWC_Bottom_Field_Plane
    255	 * (G) UV_Meta_Bottom_Field_Plane
    256	 * (H) UV_UBWC_Bottom_Field_Plane
    257	 * Y_Meta_Top_Field_Plane consists of meta information to decode
    258	 * compressed tile data for Y_UBWC_Top_Field_Plane.
    259	 * Y_UBWC_Top_Field_Plane consists of Y data in compressed macro-tile
    260	 * format for top field of an interlaced frame.
    261	 * UBWC decoder block will use the Y_Meta_Top_Field_Plane data together
    262	 * with Y_UBWC_Top_Field_Plane data to produce loss-less uncompressed
    263	 * 8 bit Y samples for top field of an interlaced frame.
    264	 *
    265	 * UV_Meta_Top_Field_Plane consists of meta information to decode
    266	 * compressed tile data in UV_UBWC_Top_Field_Plane.
    267	 * UV_UBWC_Top_Field_Plane consists of UV data in compressed macro-tile
    268	 * format for top field of an interlaced frame.
    269	 * UBWC decoder block will use UV_Meta_Top_Field_Plane data together
    270	 * with UV_UBWC_Top_Field_Plane data to produce loss-less uncompressed
    271	 * 8 bit subsampled color difference samples for top field of an
    272	 * interlaced frame.
    273	 *
    274	 * Each tile in Y_UBWC_Top_Field_Plane/UV_UBWC_Top_Field_Plane is
    275	 * independently decodable and randomly accessible. There is no
    276	 * dependency between tiles.
    277	 *
    278	 * Y_Meta_Bottom_Field_Plane consists of meta information to decode
    279	 * compressed tile data for Y_UBWC_Bottom_Field_Plane.
    280	 * Y_UBWC_Bottom_Field_Plane consists of Y data in compressed macro-tile
    281	 * format for bottom field of an interlaced frame.
    282	 * UBWC decoder block will use the Y_Meta_Bottom_Field_Plane data
    283	 * together with Y_UBWC_Bottom_Field_Plane data to produce loss-less
    284	 * uncompressed 8 bit Y samples for bottom field of an interlaced frame.
    285	 *
    286	 * UV_Meta_Bottom_Field_Plane consists of meta information to decode
    287	 * compressed tile data in UV_UBWC_Bottom_Field_Plane.
    288	 * UV_UBWC_Bottom_Field_Plane consists of UV data in compressed
    289	 * macro-tile format for bottom field of an interlaced frame.
    290	 * UBWC decoder block will use UV_Meta_Bottom_Field_Plane data together
    291	 * with UV_UBWC_Bottom_Field_Plane data to produce loss-less
    292	 * uncompressed 8 bit subsampled color difference samples for bottom
    293	 * field of an interlaced frame.
    294	 *
    295	 * Each tile in Y_UBWC_Bottom_Field_Plane/UV_UBWC_Bottom_Field_Plane is
    296	 * independently decodable and randomly accessible. There is no
    297	 * dependency between tiles.
    298	 *
    299	 * <-----Y_TF_Meta_Stride---->
    300	 * <-------- Width ------>
    301	 * M M M M M M M M M M M M . .      ^           ^
    302	 * M M M M M M M M M M M M . .      |           |
    303	 * M M M M M M M M M M M M . . Half_height      |
    304	 * M M M M M M M M M M M M . .      |         Meta_Y_TF_Scanlines
    305	 * M M M M M M M M M M M M . .      |           |
    306	 * M M M M M M M M M M M M . .      |           |
    307	 * M M M M M M M M M M M M . .      |           |
    308	 * M M M M M M M M M M M M . .      V           |
    309	 * . . . . . . . . . . . . . .                  |
    310	 * . . . . . . . . . . . . . .                  |
    311	 * . . . . . . . . . . . . . .      -------> Buffer size aligned to 4k
    312	 * . . . . . . . . . . . . . .                  V
    313	 * <-Compressed tile Y_TF Stride->
    314	 * <------- Width ------->
    315	 * Y* Y* Y* Y* Y* Y* Y* Y* . . . .  ^           ^
    316	 * Y* Y* Y* Y* Y* Y* Y* Y* . . . .  |           |
    317	 * Y* Y* Y* Y* Y* Y* Y* Y* . . . . Half_height  |
    318	 * Y* Y* Y* Y* Y* Y* Y* Y* . . . .  |        Macro_tile_Y_TF_Scanlines
    319	 * Y* Y* Y* Y* Y* Y* Y* Y* . . . .  |           |
    320	 * Y* Y* Y* Y* Y* Y* Y* Y* . . . .  |           |
    321	 * Y* Y* Y* Y* Y* Y* Y* Y* . . . .  |           |
    322	 * Y* Y* Y* Y* Y* Y* Y* Y* . . . .  V           |
    323	 * . . . . . . . . . . . . . . . .              |
    324	 * . . . . . . . . . . . . . . . .              |
    325	 * . . . . . . . . . . . . . . . .  -------> Buffer size aligned to 4k
    326	 * . . . . . . . . . . . . . . . .              V
    327	 * <----UV_TF_Meta_Stride---->
    328	 * M M M M M M M M M M M M . .      ^
    329	 * M M M M M M M M M M M M . .      |
    330	 * M M M M M M M M M M M M . .      |
    331	 * M M M M M M M M M M M M . .      M_UV_TF_Scanlines
    332	 * . . . . . . . . . . . . . .      |
    333	 * . . . . . . . . . . . . . .      V
    334	 * . . . . . . . . . . . . . .      -------> Buffer size aligned to 4k
    335	 * <-Compressed tile UV_TF Stride->
    336	 * U* V* U* V* U* V* U* V* . . . .  ^
    337	 * U* V* U* V* U* V* U* V* . . . .  |
    338	 * U* V* U* V* U* V* U* V* . . . .  |
    339	 * U* V* U* V* U* V* U* V* . . . .  UV_TF_Scanlines
    340	 * . . . . . . . . . . . . . . . .  |
    341	 * . . . . . . . . . . . . . . . .  V
    342	 * . . . . . . . . . . . . . . . .  -------> Buffer size aligned to 4k
    343	 * <-----Y_BF_Meta_Stride---->
    344	 * <-------- Width ------>
    345	 * M M M M M M M M M M M M . .      ^           ^
    346	 * M M M M M M M M M M M M . .      |           |
    347	 * M M M M M M M M M M M M . . Half_height      |
    348	 * M M M M M M M M M M M M . .      |         Meta_Y_BF_Scanlines
    349	 * M M M M M M M M M M M M . .      |           |
    350	 * M M M M M M M M M M M M . .      |           |
    351	 * M M M M M M M M M M M M . .      |           |
    352	 * M M M M M M M M M M M M . .      V           |
    353	 * . . . . . . . . . . . . . .                  |
    354	 * . . . . . . . . . . . . . .                  |
    355	 * . . . . . . . . . . . . . .      -------> Buffer size aligned to 4k
    356	 * . . . . . . . . . . . . . .                  V
    357	 * <-Compressed tile Y_BF Stride->
    358	 * <------- Width ------->
    359	 * Y* Y* Y* Y* Y* Y* Y* Y* . . . .  ^           ^
    360	 * Y* Y* Y* Y* Y* Y* Y* Y* . . . .  |           |
    361	 * Y* Y* Y* Y* Y* Y* Y* Y* . . . . Half_height  |
    362	 * Y* Y* Y* Y* Y* Y* Y* Y* . . . .  |        Macro_tile_Y_BF_Scanlines
    363	 * Y* Y* Y* Y* Y* Y* Y* Y* . . . .  |           |
    364	 * Y* Y* Y* Y* Y* Y* Y* Y* . . . .  |           |
    365	 * Y* Y* Y* Y* Y* Y* Y* Y* . . . .  |           |
    366	 * Y* Y* Y* Y* Y* Y* Y* Y* . . . .  V           |
    367	 * . . . . . . . . . . . . . . . .              |
    368	 * . . . . . . . . . . . . . . . .              |
    369	 * . . . . . . . . . . . . . . . .  -------> Buffer size aligned to 4k
    370	 * . . . . . . . . . . . . . . . .              V
    371	 * <----UV_BF_Meta_Stride---->
    372	 * M M M M M M M M M M M M . .      ^
    373	 * M M M M M M M M M M M M . .      |
    374	 * M M M M M M M M M M M M . .      |
    375	 * M M M M M M M M M M M M . .      M_UV_BF_Scanlines
    376	 * . . . . . . . . . . . . . .      |
    377	 * . . . . . . . . . . . . . .      V
    378	 * . . . . . . . . . . . . . .      -------> Buffer size aligned to 4k
    379	 * <-Compressed tile UV_BF Stride->
    380	 * U* V* U* V* U* V* U* V* . . . .  ^
    381	 * U* V* U* V* U* V* U* V* . . . .  |
    382	 * U* V* U* V* U* V* U* V* . . . .  |
    383	 * U* V* U* V* U* V* U* V* . . . .  UV_BF_Scanlines
    384	 * . . . . . . . . . . . . . . . .  |
    385	 * . . . . . . . . . . . . . . . .  V
    386	 * . . . . . . . . . . . . . . . .  -------> Buffer size aligned to 4k
    387	 *
    388	 * Half_height = (Height+1)>>1
    389	 * Y_TF_Stride = align(Width, 128)
    390	 * UV_TF_Stride = align(Width, 128)
    391	 * Y_TF_Scanlines = align(Half_height, 32)
    392	 * UV_TF_Scanlines = align((Half_height+1)/2, 32)
    393	 * Y_UBWC_TF_Plane_size = align(Y_TF_Stride * Y_TF_Scanlines, 4096)
    394	 * UV_UBWC_TF_Plane_size = align(UV_TF_Stride * UV_TF_Scanlines, 4096)
    395	 * Y_TF_Meta_Stride = align(roundup(Width, Y_TileWidth), 64)
    396	 * Y_TF_Meta_Scanlines = align(roundup(Half_height, Y_TileHeight), 16)
    397	 * Y_TF_Meta_Plane_size =
    398	 *     align(Y_TF_Meta_Stride * Y_TF_Meta_Scanlines, 4096)
    399	 * UV_TF_Meta_Stride = align(roundup(Width, UV_TileWidth), 64)
    400	 * UV_TF_Meta_Scanlines = align(roundup(Half_height, UV_TileHeight), 16)
    401	 * UV_TF_Meta_Plane_size =
    402	 *     align(UV_TF_Meta_Stride * UV_TF_Meta_Scanlines, 4096)
    403	 * Y_BF_Stride = align(Width, 128)
    404	 * UV_BF_Stride = align(Width, 128)
    405	 * Y_BF_Scanlines = align(Half_height, 32)
    406	 * UV_BF_Scanlines = align((Half_height+1)/2, 32)
    407	 * Y_UBWC_BF_Plane_size = align(Y_BF_Stride * Y_BF_Scanlines, 4096)
    408	 * UV_UBWC_BF_Plane_size = align(UV_BF_Stride * UV_BF_Scanlines, 4096)
    409	 * Y_BF_Meta_Stride = align(roundup(Width, Y_TileWidth), 64)
    410	 * Y_BF_Meta_Scanlines = align(roundup(Half_height, Y_TileHeight), 16)
    411	 * Y_BF_Meta_Plane_size =
    412	 *     align(Y_BF_Meta_Stride * Y_BF_Meta_Scanlines, 4096)
    413	 * UV_BF_Meta_Stride = align(roundup(Width, UV_TileWidth), 64)
    414	 * UV_BF_Meta_Scanlines = align(roundup(Half_height, UV_TileHeight), 16)
    415	 * UV_BF_Meta_Plane_size =
    416	 *     align(UV_BF_Meta_Stride * UV_BF_Meta_Scanlines, 4096)
    417	 * Extradata = 8k
    418	 *
    419	 * Total size = align( Y_UBWC_TF_Plane_size + UV_UBWC_TF_Plane_size +
    420	 *           Y_TF_Meta_Plane_size + UV_TF_Meta_Plane_size +
    421	 *			 Y_UBWC_BF_Plane_size + UV_UBWC_BF_Plane_size +
    422	 *           Y_BF_Meta_Plane_size + UV_BF_Meta_Plane_size +
    423	 *           + max(Extradata, Y_TF_Stride * 48), 4096)
    424	 */
    425	COLOR_FMT_NV12_UBWC,
    426	/* Venus NV12 10-bit UBWC:
    427	 * Compressed Macro-tile format for NV12.
    428	 * Contains 4 planes in the following order -
    429	 * (A) Y_Meta_Plane
    430	 * (B) Y_UBWC_Plane
    431	 * (C) UV_Meta_Plane
    432	 * (D) UV_UBWC_Plane
    433	 *
    434	 * Y_Meta_Plane consists of meta information to decode compressed
    435	 * tile data in Y_UBWC_Plane.
    436	 * Y_UBWC_Plane consists of Y data in compressed macro-tile format.
    437	 * UBWC decoder block will use the Y_Meta_Plane data together with
    438	 * Y_UBWC_Plane data to produce loss-less uncompressed 10 bit Y samples.
    439	 *
    440	 * UV_Meta_Plane consists of meta information to decode compressed
    441	 * tile data in UV_UBWC_Plane.
    442	 * UV_UBWC_Plane consists of UV data in compressed macro-tile format.
    443	 * UBWC decoder block will use UV_Meta_Plane data together with
    444	 * UV_UBWC_Plane data to produce loss-less uncompressed 10 bit 2x2
    445	 * subsampled color difference samples.
    446	 *
    447	 * Each tile in Y_UBWC_Plane/UV_UBWC_Plane is independently decodable
    448	 * and randomly accessible. There is no dependency between tiles.
    449	 *
    450	 * <----- Y_Meta_Stride ----->
    451	 * <-------- Width ------>
    452	 * M M M M M M M M M M M M . .      ^           ^
    453	 * M M M M M M M M M M M M . .      |           |
    454	 * M M M M M M M M M M M M . .      Height      |
    455	 * M M M M M M M M M M M M . .      |         Meta_Y_Scanlines
    456	 * M M M M M M M M M M M M . .      |           |
    457	 * M M M M M M M M M M M M . .      |           |
    458	 * M M M M M M M M M M M M . .      |           |
    459	 * M M M M M M M M M M M M . .      V           |
    460	 * . . . . . . . . . . . . . .                  |
    461	 * . . . . . . . . . . . . . .                  |
    462	 * . . . . . . . . . . . . . .      -------> Buffer size aligned to 4k
    463	 * . . . . . . . . . . . . . .                  V
    464	 * <--Compressed tile Y Stride--->
    465	 * <------- Width ------->
    466	 * Y* Y* Y* Y* Y* Y* Y* Y* . . . .  ^           ^
    467	 * Y* Y* Y* Y* Y* Y* Y* Y* . . . .  |           |
    468	 * Y* Y* Y* Y* Y* Y* Y* Y* . . . .  Height      |
    469	 * Y* Y* Y* Y* Y* Y* Y* Y* . . . .  |        Macro_tile_Y_Scanlines
    470	 * Y* Y* Y* Y* Y* Y* Y* Y* . . . .  |           |
    471	 * Y* Y* Y* Y* Y* Y* Y* Y* . . . .  |           |
    472	 * Y* Y* Y* Y* Y* Y* Y* Y* . . . .  |           |
    473	 * Y* Y* Y* Y* Y* Y* Y* Y* . . . .  V           |
    474	 * . . . . . . . . . . . . . . . .              |
    475	 * . . . . . . . . . . . . . . . .              |
    476	 * . . . . . . . . . . . . . . . .  -------> Buffer size aligned to 4k
    477	 * . . . . . . . . . . . . . . . .              V
    478	 * <----- UV_Meta_Stride ---->
    479	 * M M M M M M M M M M M M . .      ^
    480	 * M M M M M M M M M M M M . .      |
    481	 * M M M M M M M M M M M M . .      |
    482	 * M M M M M M M M M M M M . .      M_UV_Scanlines
    483	 * . . . . . . . . . . . . . .      |
    484	 * . . . . . . . . . . . . . .      V
    485	 * . . . . . . . . . . . . . .      -------> Buffer size aligned to 4k
    486	 * <--Compressed tile UV Stride--->
    487	 * U* V* U* V* U* V* U* V* . . . .  ^
    488	 * U* V* U* V* U* V* U* V* . . . .  |
    489	 * U* V* U* V* U* V* U* V* . . . .  |
    490	 * U* V* U* V* U* V* U* V* . . . .  UV_Scanlines
    491	 * . . . . . . . . . . . . . . . .  |
    492	 * . . . . . . . . . . . . . . . .  V
    493	 * . . . . . . . . . . . . . . . .  -------> Buffer size aligned to 4k
    494	 *
    495	 *
    496	 * Y_Stride = align(Width * 4/3, 128)
    497	 * UV_Stride = align(Width * 4/3, 128)
    498	 * Y_Scanlines = align(Height, 32)
    499	 * UV_Scanlines = align(Height/2, 16)
    500	 * Y_UBWC_Plane_Size = align(Y_Stride * Y_Scanlines, 4096)
    501	 * UV_UBWC_Plane_Size = align(UV_Stride * UV_Scanlines, 4096)
    502	 * Y_Meta_Stride = align(roundup(Width, Y_TileWidth), 64)
    503	 * Y_Meta_Scanlines = align(roundup(Height, Y_TileHeight), 16)
    504	 * Y_Meta_Plane_size = align(Y_Meta_Stride * Y_Meta_Scanlines, 4096)
    505	 * UV_Meta_Stride = align(roundup(Width, UV_TileWidth), 64)
    506	 * UV_Meta_Scanlines = align(roundup(Height, UV_TileHeight), 16)
    507	 * UV_Meta_Plane_size = align(UV_Meta_Stride * UV_Meta_Scanlines, 4096)
    508	 * Extradata = 8k
    509	 *
    510	 * Total size = align(Y_UBWC_Plane_size + UV_UBWC_Plane_size +
    511	 *           Y_Meta_Plane_size + UV_Meta_Plane_size
    512	 *           + max(Extradata, Y_Stride * 48), 4096)
    513	 */
    514	COLOR_FMT_NV12_BPP10_UBWC,
    515	/* Venus RGBA8888 format:
    516	 * Contains 1 plane in the following order -
    517	 * (A) RGBA plane
    518	 *
    519	 * <-------- RGB_Stride -------->
    520	 * <------- Width ------->
    521	 * R R R R R R R R R R R R . . . .  ^           ^
    522	 * R R R R R R R R R R R R . . . .  |           |
    523	 * R R R R R R R R R R R R . . . .  Height      |
    524	 * R R R R R R R R R R R R . . . .  |       RGB_Scanlines
    525	 * R R R R R R R R R R R R . . . .  |           |
    526	 * R R R R R R R R R R R R . . . .  |           |
    527	 * R R R R R R R R R R R R . . . .  |           |
    528	 * R R R R R R R R R R R R . . . .  V           |
    529	 * . . . . . . . . . . . . . . . .              |
    530	 * . . . . . . . . . . . . . . . .              |
    531	 * . . . . . . . . . . . . . . . .              |
    532	 * . . . . . . . . . . . . . . . .              V
    533	 *
    534	 * RGB_Stride = align(Width * 4, 128)
    535	 * RGB_Scanlines = align(Height, 32)
    536	 * RGB_Plane_size = align(RGB_Stride * RGB_Scanlines, 4096)
    537	 * Extradata = 8k
    538	 *
    539	 * Total size = align(RGB_Plane_size + Extradata, 4096)
    540	 */
    541	COLOR_FMT_RGBA8888,
    542	/* Venus RGBA8888 UBWC format:
    543	 * Contains 2 planes in the following order -
    544	 * (A) Meta plane
    545	 * (B) RGBA plane
    546	 *
    547	 * <--- RGB_Meta_Stride ---->
    548	 * <-------- Width ------>
    549	 * M M M M M M M M M M M M . .      ^           ^
    550	 * M M M M M M M M M M M M . .      |           |
    551	 * M M M M M M M M M M M M . .      Height      |
    552	 * M M M M M M M M M M M M . .      |       Meta_RGB_Scanlines
    553	 * M M M M M M M M M M M M . .      |           |
    554	 * M M M M M M M M M M M M . .      |           |
    555	 * M M M M M M M M M M M M . .      |           |
    556	 * M M M M M M M M M M M M . .      V           |
    557	 * . . . . . . . . . . . . . .                  |
    558	 * . . . . . . . . . . . . . .                  |
    559	 * . . . . . . . . . . . . . .      -------> Buffer size aligned to 4k
    560	 * . . . . . . . . . . . . . .                  V
    561	 * <-------- RGB_Stride -------->
    562	 * <------- Width ------->
    563	 * R R R R R R R R R R R R . . . .  ^           ^
    564	 * R R R R R R R R R R R R . . . .  |           |
    565	 * R R R R R R R R R R R R . . . .  Height      |
    566	 * R R R R R R R R R R R R . . . .  |       RGB_Scanlines
    567	 * R R R R R R R R R R R R . . . .  |           |
    568	 * R R R R R R R R R R R R . . . .  |           |
    569	 * R R R R R R R R R R R R . . . .  |           |
    570	 * R R R R R R R R R R R R . . . .  V           |
    571	 * . . . . . . . . . . . . . . . .              |
    572	 * . . . . . . . . . . . . . . . .              |
    573	 * . . . . . . . . . . . . . . . .    -------> Buffer size aligned to 4k
    574	 * . . . . . . . . . . . . . . . .              V
    575	 *
    576	 * RGB_Stride = align(Width * 4, 128)
    577	 * RGB_Scanlines = align(Height, 32)
    578	 * RGB_Plane_size = align(RGB_Stride * RGB_Scanlines, 4096)
    579	 * RGB_Meta_Stride = align(roundup(Width, RGB_TileWidth), 64)
    580	 * RGB_Meta_Scanline = align(roundup(Height, RGB_TileHeight), 16)
    581	 * RGB_Meta_Plane_size = align(RGB_Meta_Stride *
    582	 *		RGB_Meta_Scanlines, 4096)
    583	 * Extradata = 8k
    584	 *
    585	 * Total size = align(RGB_Meta_Plane_size + RGB_Plane_size +
    586	 *		Extradata, 4096)
    587	 */
    588	COLOR_FMT_RGBA8888_UBWC,
    589	/* Venus RGBA1010102 UBWC format:
    590	 * Contains 2 planes in the following order -
    591	 * (A) Meta plane
    592	 * (B) RGBA plane
    593	 *
    594	 * <--- RGB_Meta_Stride ---->
    595	 * <-------- Width ------>
    596	 * M M M M M M M M M M M M . .      ^           ^
    597	 * M M M M M M M M M M M M . .      |           |
    598	 * M M M M M M M M M M M M . .      Height      |
    599	 * M M M M M M M M M M M M . .      |       Meta_RGB_Scanlines
    600	 * M M M M M M M M M M M M . .      |           |
    601	 * M M M M M M M M M M M M . .      |           |
    602	 * M M M M M M M M M M M M . .      |           |
    603	 * M M M M M M M M M M M M . .      V           |
    604	 * . . . . . . . . . . . . . .                  |
    605	 * . . . . . . . . . . . . . .                  |
    606	 * . . . . . . . . . . . . . .      -------> Buffer size aligned to 4k
    607	 * . . . . . . . . . . . . . .                  V
    608	 * <-------- RGB_Stride -------->
    609	 * <------- Width ------->
    610	 * R R R R R R R R R R R R . . . .  ^           ^
    611	 * R R R R R R R R R R R R . . . .  |           |
    612	 * R R R R R R R R R R R R . . . .  Height      |
    613	 * R R R R R R R R R R R R . . . .  |       RGB_Scanlines
    614	 * R R R R R R R R R R R R . . . .  |           |
    615	 * R R R R R R R R R R R R . . . .  |           |
    616	 * R R R R R R R R R R R R . . . .  |           |
    617	 * R R R R R R R R R R R R . . . .  V           |
    618	 * . . . . . . . . . . . . . . . .              |
    619	 * . . . . . . . . . . . . . . . .              |
    620	 * . . . . . . . . . . . . . . . .    -------> Buffer size aligned to 4k
    621	 * . . . . . . . . . . . . . . . .              V
    622	 *
    623	 * RGB_Stride = align(Width * 4, 256)
    624	 * RGB_Scanlines = align(Height, 16)
    625	 * RGB_Plane_size = align(RGB_Stride * RGB_Scanlines, 4096)
    626	 * RGB_Meta_Stride = align(roundup(Width, RGB_TileWidth), 64)
    627	 * RGB_Meta_Scanline = align(roundup(Height, RGB_TileHeight), 16)
    628	 * RGB_Meta_Plane_size = align(RGB_Meta_Stride *
    629	 *		RGB_Meta_Scanlines, 4096)
    630	 * Extradata = 8k
    631	 *
    632	 * Total size = align(RGB_Meta_Plane_size + RGB_Plane_size +
    633	 *		Extradata, 4096)
    634	 */
    635	COLOR_FMT_RGBA1010102_UBWC,
    636	/* Venus RGB565 UBWC format:
    637	 * Contains 2 planes in the following order -
    638	 * (A) Meta plane
    639	 * (B) RGB plane
    640	 *
    641	 * <--- RGB_Meta_Stride ---->
    642	 * <-------- Width ------>
    643	 * M M M M M M M M M M M M . .      ^           ^
    644	 * M M M M M M M M M M M M . .      |           |
    645	 * M M M M M M M M M M M M . .      Height      |
    646	 * M M M M M M M M M M M M . .      |       Meta_RGB_Scanlines
    647	 * M M M M M M M M M M M M . .      |           |
    648	 * M M M M M M M M M M M M . .      |           |
    649	 * M M M M M M M M M M M M . .      |           |
    650	 * M M M M M M M M M M M M . .      V           |
    651	 * . . . . . . . . . . . . . .                  |
    652	 * . . . . . . . . . . . . . .                  |
    653	 * . . . . . . . . . . . . . .      -------> Buffer size aligned to 4k
    654	 * . . . . . . . . . . . . . .                  V
    655	 * <-------- RGB_Stride -------->
    656	 * <------- Width ------->
    657	 * R R R R R R R R R R R R . . . .  ^           ^
    658	 * R R R R R R R R R R R R . . . .  |           |
    659	 * R R R R R R R R R R R R . . . .  Height      |
    660	 * R R R R R R R R R R R R . . . .  |       RGB_Scanlines
    661	 * R R R R R R R R R R R R . . . .  |           |
    662	 * R R R R R R R R R R R R . . . .  |           |
    663	 * R R R R R R R R R R R R . . . .  |           |
    664	 * R R R R R R R R R R R R . . . .  V           |
    665	 * . . . . . . . . . . . . . . . .              |
    666	 * . . . . . . . . . . . . . . . .              |
    667	 * . . . . . . . . . . . . . . . .    -------> Buffer size aligned to 4k
    668	 * . . . . . . . . . . . . . . . .              V
    669	 *
    670	 * RGB_Stride = align(Width * 2, 128)
    671	 * RGB_Scanlines = align(Height, 16)
    672	 * RGB_Plane_size = align(RGB_Stride * RGB_Scanlines, 4096)
    673	 * RGB_Meta_Stride = align(roundup(Width, RGB_TileWidth), 64)
    674	 * RGB_Meta_Scanline = align(roundup(Height, RGB_TileHeight), 16)
    675	 * RGB_Meta_Plane_size = align(RGB_Meta_Stride *
    676	 *		RGB_Meta_Scanlines, 4096)
    677	 * Extradata = 8k
    678	 *
    679	 * Total size = align(RGB_Meta_Plane_size + RGB_Plane_size +
    680	 *		Extradata, 4096)
    681	 */
    682	COLOR_FMT_RGB565_UBWC,
    683	/* P010 UBWC:
    684	 * Compressed Macro-tile format for NV12.
    685	 * Contains 4 planes in the following order -
    686	 * (A) Y_Meta_Plane
    687	 * (B) Y_UBWC_Plane
    688	 * (C) UV_Meta_Plane
    689	 * (D) UV_UBWC_Plane
    690	 *
    691	 * Y_Meta_Plane consists of meta information to decode compressed
    692	 * tile data in Y_UBWC_Plane.
    693	 * Y_UBWC_Plane consists of Y data in compressed macro-tile format.
    694	 * UBWC decoder block will use the Y_Meta_Plane data together with
    695	 * Y_UBWC_Plane data to produce loss-less uncompressed 10 bit Y samples.
    696	 *
    697	 * UV_Meta_Plane consists of meta information to decode compressed
    698	 * tile data in UV_UBWC_Plane.
    699	 * UV_UBWC_Plane consists of UV data in compressed macro-tile format.
    700	 * UBWC decoder block will use UV_Meta_Plane data together with
    701	 * UV_UBWC_Plane data to produce loss-less uncompressed 10 bit 2x2
    702	 * subsampled color difference samples.
    703	 *
    704	 * Each tile in Y_UBWC_Plane/UV_UBWC_Plane is independently decodable
    705	 * and randomly accessible. There is no dependency between tiles.
    706	 *
    707	 * <----- Y_Meta_Stride ----->
    708	 * <-------- Width ------>
    709	 * M M M M M M M M M M M M . .      ^           ^
    710	 * M M M M M M M M M M M M . .      |           |
    711	 * M M M M M M M M M M M M . .      Height      |
    712	 * M M M M M M M M M M M M . .      |         Meta_Y_Scanlines
    713	 * M M M M M M M M M M M M . .      |           |
    714	 * M M M M M M M M M M M M . .      |           |
    715	 * M M M M M M M M M M M M . .      |           |
    716	 * M M M M M M M M M M M M . .      V           |
    717	 * . . . . . . . . . . . . . .                  |
    718	 * . . . . . . . . . . . . . .                  |
    719	 * . . . . . . . . . . . . . .      -------> Buffer size aligned to 4k
    720	 * . . . . . . . . . . . . . .                  V
    721	 * <--Compressed tile Y Stride--->
    722	 * <------- Width ------->
    723	 * Y* Y* Y* Y* Y* Y* Y* Y* . . . .  ^           ^
    724	 * Y* Y* Y* Y* Y* Y* Y* Y* . . . .  |           |
    725	 * Y* Y* Y* Y* Y* Y* Y* Y* . . . .  Height      |
    726	 * Y* Y* Y* Y* Y* Y* Y* Y* . . . .  |        Macro_tile_Y_Scanlines
    727	 * Y* Y* Y* Y* Y* Y* Y* Y* . . . .  |           |
    728	 * Y* Y* Y* Y* Y* Y* Y* Y* . . . .  |           |
    729	 * Y* Y* Y* Y* Y* Y* Y* Y* . . . .  |           |
    730	 * Y* Y* Y* Y* Y* Y* Y* Y* . . . .  V           |
    731	 * . . . . . . . . . . . . . . . .              |
    732	 * . . . . . . . . . . . . . . . .              |
    733	 * . . . . . . . . . . . . . . . .  -------> Buffer size aligned to 4k
    734	 * . . . . . . . . . . . . . . . .              V
    735	 * <----- UV_Meta_Stride ---->
    736	 * M M M M M M M M M M M M . .      ^
    737	 * M M M M M M M M M M M M . .      |
    738	 * M M M M M M M M M M M M . .      |
    739	 * M M M M M M M M M M M M . .      M_UV_Scanlines
    740	 * . . . . . . . . . . . . . .      |
    741	 * . . . . . . . . . . . . . .      V
    742	 * . . . . . . . . . . . . . .      -------> Buffer size aligned to 4k
    743	 * <--Compressed tile UV Stride--->
    744	 * U* V* U* V* U* V* U* V* . . . .  ^
    745	 * U* V* U* V* U* V* U* V* . . . .  |
    746	 * U* V* U* V* U* V* U* V* . . . .  |
    747	 * U* V* U* V* U* V* U* V* . . . .  UV_Scanlines
    748	 * . . . . . . . . . . . . . . . .  |
    749	 * . . . . . . . . . . . . . . . .  V
    750	 * . . . . . . . . . . . . . . . .  -------> Buffer size aligned to 4k
    751	 *
    752	 *
    753	 * Y_Stride = align(Width * 2, 256)
    754	 * UV_Stride = align(Width * 2, 256)
    755	 * Y_Scanlines = align(Height, 16)
    756	 * UV_Scanlines = align(Height/2, 16)
    757	 * Y_UBWC_Plane_Size = align(Y_Stride * Y_Scanlines, 4096)
    758	 * UV_UBWC_Plane_Size = align(UV_Stride * UV_Scanlines, 4096)
    759	 * Y_Meta_Stride = align(roundup(Width, Y_TileWidth), 64)
    760	 * Y_Meta_Scanlines = align(roundup(Height, Y_TileHeight), 16)
    761	 * Y_Meta_Plane_size = align(Y_Meta_Stride * Y_Meta_Scanlines, 4096)
    762	 * UV_Meta_Stride = align(roundup(Width, UV_TileWidth), 64)
    763	 * UV_Meta_Scanlines = align(roundup(Height, UV_TileHeight), 16)
    764	 * UV_Meta_Plane_size = align(UV_Meta_Stride * UV_Meta_Scanlines, 4096)
    765	 * Extradata = 8k
    766	 *
    767	 * Total size = align(Y_UBWC_Plane_size + UV_UBWC_Plane_size +
    768	 *           Y_Meta_Plane_size + UV_Meta_Plane_size
    769	 *           + max(Extradata, Y_Stride * 48), 4096)
    770	 */
    771	COLOR_FMT_P010_UBWC,
    772	/* Venus P010:
    773	 * YUV 4:2:0 image with a plane of 10 bit Y samples followed
    774	 * by an interleaved U/V plane containing 10 bit 2x2 subsampled
    775	 * colour difference samples.
    776	 *
    777	 * <-------- Y/UV_Stride -------->
    778	 * <------- Width ------->
    779	 * Y Y Y Y Y Y Y Y Y Y Y Y . . . .  ^           ^
    780	 * Y Y Y Y Y Y Y Y Y Y Y Y . . . .  |           |
    781	 * Y Y Y Y Y Y Y Y Y Y Y Y . . . .  Height      |
    782	 * Y Y Y Y Y Y Y Y Y Y Y Y . . . .  |          Y_Scanlines
    783	 * Y Y Y Y Y Y Y Y Y Y Y Y . . . .  |           |
    784	 * Y Y Y Y Y Y Y Y Y Y Y Y . . . .  |           |
    785	 * Y Y Y Y Y Y Y Y Y Y Y Y . . . .  |           |
    786	 * Y Y Y Y Y Y Y Y Y Y Y Y . . . .  V           |
    787	 * . . . . . . . . . . . . . . . .              |
    788	 * . . . . . . . . . . . . . . . .              |
    789	 * . . . . . . . . . . . . . . . .              |
    790	 * . . . . . . . . . . . . . . . .              V
    791	 * U V U V U V U V U V U V . . . .  ^
    792	 * U V U V U V U V U V U V . . . .  |
    793	 * U V U V U V U V U V U V . . . .  |
    794	 * U V U V U V U V U V U V . . . .  UV_Scanlines
    795	 * . . . . . . . . . . . . . . . .  |
    796	 * . . . . . . . . . . . . . . . .  V
    797	 * . . . . . . . . . . . . . . . .  --> Buffer size alignment
    798	 *
    799	 * Y_Stride : Width * 2 aligned to 128
    800	 * UV_Stride : Width * 2 aligned to 128
    801	 * Y_Scanlines: Height aligned to 32
    802	 * UV_Scanlines: Height/2 aligned to 16
    803	 * Extradata: Arbitrary (software-imposed) padding
    804	 * Total size = align((Y_Stride * Y_Scanlines
    805	 *          + UV_Stride * UV_Scanlines
    806	 *          + max(Extradata, Y_Stride * 8), 4096)
    807	 */
    808	COLOR_FMT_P010,
    809};
    810
    811#define COLOR_FMT_RGBA1010102_UBWC	COLOR_FMT_RGBA1010102_UBWC
    812#define COLOR_FMT_RGB565_UBWC		COLOR_FMT_RGB565_UBWC
    813#define COLOR_FMT_P010_UBWC		COLOR_FMT_P010_UBWC
    814#define COLOR_FMT_P010		COLOR_FMT_P010
    815
    816/*
    817 * Function arguments:
    818 * @color_fmt
    819 * @width
    820 * Progressive: width
    821 * Interlaced: width
    822 */
    823static unsigned int VENUS_Y_STRIDE(int color_fmt, int width)
    824{
    825	unsigned int stride = 0;
    826
    827	if (!width)
    828		return 0;
    829
    830	switch (color_fmt) {
    831	case COLOR_FMT_NV21:
    832	case COLOR_FMT_NV12:
    833	case COLOR_FMT_NV12_MVTB:
    834	case COLOR_FMT_NV12_UBWC:
    835		stride = MSM_MEDIA_ALIGN(width, 128);
    836		break;
    837	case COLOR_FMT_NV12_BPP10_UBWC:
    838		stride = MSM_MEDIA_ALIGN(width, 192);
    839		stride = MSM_MEDIA_ALIGN(stride * 4 / 3, 256);
    840		break;
    841	case COLOR_FMT_P010_UBWC:
    842		stride = MSM_MEDIA_ALIGN(width * 2, 256);
    843		break;
    844	case COLOR_FMT_P010:
    845		stride = MSM_MEDIA_ALIGN(width * 2, 128);
    846		break;
    847	}
    848
    849	return stride;
    850}
    851
    852/*
    853 * Function arguments:
    854 * @color_fmt
    855 * @width
    856 * Progressive: width
    857 * Interlaced: width
    858 */
    859static unsigned int VENUS_UV_STRIDE(int color_fmt, int width)
    860{
    861	unsigned int stride = 0;
    862
    863	if (!width)
    864		return 0;
    865
    866	switch (color_fmt) {
    867	case COLOR_FMT_NV21:
    868	case COLOR_FMT_NV12:
    869	case COLOR_FMT_NV12_MVTB:
    870	case COLOR_FMT_NV12_UBWC:
    871		stride = MSM_MEDIA_ALIGN(width, 128);
    872		break;
    873	case COLOR_FMT_NV12_BPP10_UBWC:
    874		stride = MSM_MEDIA_ALIGN(width, 192);
    875		stride = MSM_MEDIA_ALIGN(stride * 4 / 3, 256);
    876		break;
    877	case COLOR_FMT_P010_UBWC:
    878		stride = MSM_MEDIA_ALIGN(width * 2, 256);
    879		break;
    880	case COLOR_FMT_P010:
    881		stride = MSM_MEDIA_ALIGN(width * 2, 128);
    882		break;
    883	}
    884
    885	return stride;
    886}
    887
    888/*
    889 * Function arguments:
    890 * @color_fmt
    891 * @height
    892 * Progressive: height
    893 * Interlaced: (height+1)>>1
    894 */
    895static unsigned int VENUS_Y_SCANLINES(int color_fmt, int height)
    896{
    897	unsigned int sclines = 0;
    898
    899	if (!height)
    900		return 0;
    901
    902	switch (color_fmt) {
    903	case COLOR_FMT_NV21:
    904	case COLOR_FMT_NV12:
    905	case COLOR_FMT_NV12_MVTB:
    906	case COLOR_FMT_NV12_UBWC:
    907	case COLOR_FMT_P010:
    908		sclines = MSM_MEDIA_ALIGN(height, 32);
    909		break;
    910	case COLOR_FMT_NV12_BPP10_UBWC:
    911	case COLOR_FMT_P010_UBWC:
    912		sclines = MSM_MEDIA_ALIGN(height, 16);
    913		break;
    914	}
    915
    916	return sclines;
    917}
    918
    919/*
    920 * Function arguments:
    921 * @color_fmt
    922 * @height
    923 * Progressive: height
    924 * Interlaced: (height+1)>>1
    925 */
    926static unsigned int VENUS_UV_SCANLINES(int color_fmt, int height)
    927{
    928	unsigned int sclines = 0;
    929
    930	if (!height)
    931		return 0;
    932
    933	switch (color_fmt) {
    934	case COLOR_FMT_NV21:
    935	case COLOR_FMT_NV12:
    936	case COLOR_FMT_NV12_MVTB:
    937	case COLOR_FMT_NV12_BPP10_UBWC:
    938	case COLOR_FMT_P010_UBWC:
    939	case COLOR_FMT_P010:
    940		sclines = MSM_MEDIA_ALIGN((height + 1) >> 1, 16);
    941		break;
    942	case COLOR_FMT_NV12_UBWC:
    943		sclines = MSM_MEDIA_ALIGN((height + 1) >> 1, 32);
    944		break;
    945	}
    946
    947	return sclines;
    948}
    949
    950/*
    951 * Function arguments:
    952 * @color_fmt
    953 * @width
    954 * Progressive: width
    955 * Interlaced: width
    956 */
    957static unsigned int VENUS_Y_META_STRIDE(int color_fmt, int width)
    958{
    959	int y_tile_width = 0, y_meta_stride;
    960
    961	if (!width)
    962		return 0;
    963
    964	switch (color_fmt) {
    965	case COLOR_FMT_NV12_UBWC:
    966	case COLOR_FMT_P010_UBWC:
    967		y_tile_width = 32;
    968		break;
    969	case COLOR_FMT_NV12_BPP10_UBWC:
    970		y_tile_width = 48;
    971		break;
    972	default:
    973		return 0;
    974	}
    975
    976	y_meta_stride = MSM_MEDIA_ROUNDUP(width, y_tile_width);
    977	return MSM_MEDIA_ALIGN(y_meta_stride, 64);
    978}
    979
    980/*
    981 * Function arguments:
    982 * @color_fmt
    983 * @height
    984 * Progressive: height
    985 * Interlaced: (height+1)>>1
    986 */
    987static unsigned int VENUS_Y_META_SCANLINES(int color_fmt, int height)
    988{
    989	int y_tile_height = 0, y_meta_scanlines;
    990
    991	if (!height)
    992		return 0;
    993
    994	switch (color_fmt) {
    995	case COLOR_FMT_NV12_UBWC:
    996		y_tile_height = 8;
    997		break;
    998	case COLOR_FMT_NV12_BPP10_UBWC:
    999	case COLOR_FMT_P010_UBWC:
   1000		y_tile_height = 4;
   1001		break;
   1002	default:
   1003		return 0;
   1004	}
   1005
   1006	y_meta_scanlines = MSM_MEDIA_ROUNDUP(height, y_tile_height);
   1007	return MSM_MEDIA_ALIGN(y_meta_scanlines, 16);
   1008}
   1009
   1010/*
   1011 * Function arguments:
   1012 * @color_fmt
   1013 * @width
   1014 * Progressive: width
   1015 * Interlaced: width
   1016 */
   1017static unsigned int VENUS_UV_META_STRIDE(int color_fmt, int width)
   1018{
   1019	int uv_tile_width = 0, uv_meta_stride;
   1020
   1021	if (!width)
   1022		return 0;
   1023
   1024	switch (color_fmt) {
   1025	case COLOR_FMT_NV12_UBWC:
   1026	case COLOR_FMT_P010_UBWC:
   1027		uv_tile_width = 16;
   1028		break;
   1029	case COLOR_FMT_NV12_BPP10_UBWC:
   1030		uv_tile_width = 24;
   1031		break;
   1032	default:
   1033		return 0;
   1034	}
   1035
   1036	uv_meta_stride = MSM_MEDIA_ROUNDUP((width+1)>>1, uv_tile_width);
   1037	return MSM_MEDIA_ALIGN(uv_meta_stride, 64);
   1038}
   1039
   1040/*
   1041 * Function arguments:
   1042 * @color_fmt
   1043 * @height
   1044 * Progressive: height
   1045 * Interlaced: (height+1)>>1
   1046 */
   1047static unsigned int VENUS_UV_META_SCANLINES(int color_fmt, int height)
   1048{
   1049	int uv_tile_height = 0, uv_meta_scanlines;
   1050
   1051	if (!height)
   1052		return 0;
   1053
   1054	switch (color_fmt) {
   1055	case COLOR_FMT_NV12_UBWC:
   1056		uv_tile_height = 8;
   1057		break;
   1058	case COLOR_FMT_NV12_BPP10_UBWC:
   1059	case COLOR_FMT_P010_UBWC:
   1060		uv_tile_height = 4;
   1061		break;
   1062	default:
   1063		return 0;
   1064	}
   1065
   1066	uv_meta_scanlines = MSM_MEDIA_ROUNDUP((height+1)>>1, uv_tile_height);
   1067	return MSM_MEDIA_ALIGN(uv_meta_scanlines, 16);
   1068}
   1069
   1070static unsigned int VENUS_RGB_STRIDE(int color_fmt, int width)
   1071{
   1072	unsigned int alignment = 0, bpp = 4;
   1073
   1074	if (!width)
   1075		return 0;
   1076
   1077	switch (color_fmt) {
   1078	case COLOR_FMT_RGBA8888:
   1079		alignment = 128;
   1080		break;
   1081	case COLOR_FMT_RGB565_UBWC:
   1082		alignment = 256;
   1083		bpp = 2;
   1084		break;
   1085	case COLOR_FMT_RGBA8888_UBWC:
   1086	case COLOR_FMT_RGBA1010102_UBWC:
   1087		alignment = 256;
   1088		break;
   1089	default:
   1090		return 0;
   1091	}
   1092
   1093	return MSM_MEDIA_ALIGN(width * bpp, alignment);
   1094}
   1095
   1096static unsigned int VENUS_RGB_SCANLINES(int color_fmt, int height)
   1097{
   1098	unsigned int alignment = 0;
   1099
   1100	if (!height)
   1101		return 0;
   1102
   1103	switch (color_fmt) {
   1104	case COLOR_FMT_RGBA8888:
   1105		alignment = 32;
   1106		break;
   1107	case COLOR_FMT_RGBA8888_UBWC:
   1108	case COLOR_FMT_RGBA1010102_UBWC:
   1109	case COLOR_FMT_RGB565_UBWC:
   1110		alignment = 16;
   1111		break;
   1112	default:
   1113		return 0;
   1114	}
   1115
   1116	return MSM_MEDIA_ALIGN(height, alignment);
   1117}
   1118
   1119static unsigned int VENUS_RGB_META_STRIDE(int color_fmt, int width)
   1120{
   1121	int rgb_meta_stride;
   1122
   1123	if (!width)
   1124		return 0;
   1125
   1126	switch (color_fmt) {
   1127	case COLOR_FMT_RGBA8888_UBWC:
   1128	case COLOR_FMT_RGBA1010102_UBWC:
   1129	case COLOR_FMT_RGB565_UBWC:
   1130		rgb_meta_stride = MSM_MEDIA_ROUNDUP(width, 16);
   1131		return MSM_MEDIA_ALIGN(rgb_meta_stride, 64);
   1132	}
   1133
   1134	return 0;
   1135}
   1136
   1137static unsigned int VENUS_RGB_META_SCANLINES(int color_fmt, int height)
   1138{
   1139	int rgb_meta_scanlines;
   1140
   1141	if (!height)
   1142		return 0;
   1143
   1144	switch (color_fmt) {
   1145	case COLOR_FMT_RGBA8888_UBWC:
   1146	case COLOR_FMT_RGBA1010102_UBWC:
   1147	case COLOR_FMT_RGB565_UBWC:
   1148		rgb_meta_scanlines = MSM_MEDIA_ROUNDUP(height, 4);
   1149		return MSM_MEDIA_ALIGN(rgb_meta_scanlines, 16);
   1150	}
   1151
   1152	return 0;
   1153}
   1154
   1155#endif