123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943 |
- // SPDX-License-Identifier: GPL-2.0-only
- /*
- * Copyright (c) 2012, 2015-2019, The Linux Foundation. All rights reserved.
- */
- #include <media/msm_sde_rotator.h>
- #include "sde_rotator_formats.h"
- #include "sde_rotator_util.h"
- #define FMT_RGB_565(fmt, desc, frame_fmt, flag_arg, e0, e1, e2, isubwc) \
- { \
- .format = (fmt), \
- .description = (desc), \
- .flag = flag_arg, \
- .fetch_planes = SDE_MDP_PLANE_INTERLEAVED, \
- .unpack_tight = 1, \
- .unpack_align_msb = 0, \
- .alpha_enable = 0, \
- .unpack_count = 3, \
- .bpp = 2, \
- .frame_format = (frame_fmt), \
- .pixel_mode = SDE_MDP_PIXEL_NORMAL, \
- .element = { (e0), (e1), (e2) }, \
- .bits = { \
- [C2_R_Cr] = SDE_COLOR_5BIT, \
- [C0_G_Y] = SDE_COLOR_6BIT, \
- [C1_B_Cb] = SDE_COLOR_5BIT, \
- }, \
- .is_ubwc = isubwc, \
- }
- #define FMT_RGB_888(fmt, desc, frame_fmt, flag_arg, e0, e1, e2, isubwc) \
- { \
- .format = (fmt), \
- .description = (desc), \
- .flag = flag_arg, \
- .fetch_planes = SDE_MDP_PLANE_INTERLEAVED, \
- .unpack_tight = 1, \
- .unpack_align_msb = 0, \
- .alpha_enable = 0, \
- .unpack_count = 3, \
- .bpp = 3, \
- .frame_format = (frame_fmt), \
- .pixel_mode = SDE_MDP_PIXEL_NORMAL, \
- .element = { (e0), (e1), (e2) }, \
- .bits = { \
- [C2_R_Cr] = SDE_COLOR_8BIT, \
- [C0_G_Y] = SDE_COLOR_8BIT, \
- [C1_B_Cb] = SDE_COLOR_8BIT, \
- }, \
- .is_ubwc = isubwc, \
- }
- #define FMT_RGB_8888(fmt, desc, frame_fmt, flag_arg, \
- alpha_en, e0, e1, e2, e3, isubwc) \
- { \
- .format = (fmt), \
- .description = (desc), \
- .flag = flag_arg, \
- .fetch_planes = SDE_MDP_PLANE_INTERLEAVED, \
- .unpack_tight = 1, \
- .unpack_align_msb = 0, \
- .alpha_enable = (alpha_en), \
- .unpack_count = 4, \
- .bpp = 4, \
- .frame_format = (frame_fmt), \
- .pixel_mode = SDE_MDP_PIXEL_NORMAL, \
- .element = { (e0), (e1), (e2), (e3) }, \
- .bits = { \
- [C3_ALPHA] = SDE_COLOR_8BIT, \
- [C2_R_Cr] = SDE_COLOR_8BIT, \
- [C0_G_Y] = SDE_COLOR_8BIT, \
- [C1_B_Cb] = SDE_COLOR_8BIT, \
- }, \
- .is_ubwc = isubwc, \
- }
- #define FMT_YUV10_COMMON(fmt) \
- .format = (fmt), \
- .is_yuv = 1, \
- .bits = { \
- [C2_R_Cr] = SDE_COLOR_8BIT, \
- [C0_G_Y] = SDE_COLOR_8BIT, \
- [C1_B_Cb] = SDE_COLOR_8BIT, \
- }, \
- .alpha_enable = 0
- #define FMT_YUV_COMMON(fmt) \
- .format = (fmt), \
- .is_yuv = 1, \
- .bits = { \
- [C2_R_Cr] = SDE_COLOR_8BIT, \
- [C0_G_Y] = SDE_COLOR_8BIT, \
- [C1_B_Cb] = SDE_COLOR_8BIT, \
- }, \
- .alpha_enable = 0, \
- .unpack_tight = 1, \
- .unpack_align_msb = 0
- #define FMT_YUV_PSEUDO(fmt, desc, frame_fmt, samp, pixel_type, \
- flag_arg, e0, e1, isubwc) \
- { \
- FMT_YUV_COMMON(fmt), \
- .description = (desc), \
- .flag = flag_arg, \
- .fetch_planes = SDE_MDP_PLANE_PSEUDO_PLANAR, \
- .chroma_sample = samp, \
- .unpack_count = 2, \
- .bpp = 2, \
- .frame_format = (frame_fmt), \
- .pixel_mode = (pixel_type), \
- .element = { (e0), (e1) }, \
- .is_ubwc = isubwc, \
- }
- #define FMT_YUV_PLANR(fmt, desc, frame_fmt, samp, \
- flag_arg, e0, e1) \
- { \
- FMT_YUV_COMMON(fmt), \
- .description = (desc), \
- .flag = flag_arg, \
- .fetch_planes = SDE_MDP_PLANE_PLANAR, \
- .chroma_sample = samp, \
- .bpp = 1, \
- .unpack_count = 1, \
- .frame_format = (frame_fmt), \
- .pixel_mode = SDE_MDP_PIXEL_NORMAL, \
- .element = { (e0), (e1) }, \
- .is_ubwc = SDE_MDP_COMPRESS_NONE, \
- }
- #define FMT_RGB_1555(fmt, desc, alpha_en, flag_arg, e0, e1, e2, e3) \
- { \
- .format = (fmt), \
- .description = (desc), \
- .flag = flag_arg, \
- .fetch_planes = SDE_MDP_PLANE_INTERLEAVED, \
- .unpack_tight = 1, \
- .unpack_align_msb = 0, \
- .alpha_enable = (alpha_en), \
- .unpack_count = 4, \
- .bpp = 2, \
- .element = { (e0), (e1), (e2), (e3) }, \
- .frame_format = SDE_MDP_FMT_LINEAR, \
- .pixel_mode = SDE_MDP_PIXEL_NORMAL, \
- .bits = { \
- [C3_ALPHA] = SDE_COLOR_ALPHA_1BIT, \
- [C2_R_Cr] = SDE_COLOR_5BIT, \
- [C0_G_Y] = SDE_COLOR_5BIT, \
- [C1_B_Cb] = SDE_COLOR_5BIT, \
- }, \
- .is_ubwc = SDE_MDP_COMPRESS_NONE, \
- }
- #define FMT_RGB_4444(fmt, desc, alpha_en, flag_arg, e0, e1, e2, e3) \
- { \
- .format = (fmt), \
- .description = (desc), \
- .flag = flag_arg, \
- .fetch_planes = SDE_MDP_PLANE_INTERLEAVED, \
- .unpack_tight = 1, \
- .unpack_align_msb = 0, \
- .alpha_enable = (alpha_en), \
- .unpack_count = 4, \
- .bpp = 2, \
- .frame_format = SDE_MDP_FMT_LINEAR, \
- .pixel_mode = SDE_MDP_PIXEL_NORMAL, \
- .element = { (e0), (e1), (e2), (e3) }, \
- .bits = { \
- [C3_ALPHA] = SDE_COLOR_ALPHA_4BIT, \
- [C2_R_Cr] = SDE_COLOR_4BIT, \
- [C0_G_Y] = SDE_COLOR_4BIT, \
- [C1_B_Cb] = SDE_COLOR_4BIT, \
- }, \
- .is_ubwc = SDE_MDP_COMPRESS_NONE, \
- }
- #define FMT_RGB_1010102(fmt, desc, frame_fmt, flag_arg, \
- alpha_en, e0, e1, e2, e3, isubwc) \
- { \
- .format = (fmt), \
- .description = (desc), \
- .flag = flag_arg, \
- .fetch_planes = SDE_MDP_PLANE_INTERLEAVED, \
- .unpack_tight = 1, \
- .unpack_align_msb = 0, \
- .alpha_enable = (alpha_en), \
- .unpack_count = 4, \
- .bpp = 4, \
- .frame_format = frame_fmt, \
- .pixel_mode = SDE_MDP_PIXEL_10BIT, \
- .element = { (e0), (e1), (e2), (e3) }, \
- .bits = { \
- [C3_ALPHA] = SDE_COLOR_8BIT, \
- [C2_R_Cr] = SDE_COLOR_8BIT, \
- [C0_G_Y] = SDE_COLOR_8BIT, \
- [C1_B_Cb] = SDE_COLOR_8BIT, \
- }, \
- .is_ubwc = isubwc, \
- }
- /*
- * UBWC formats table:
- * This table holds the UBWC formats supported.
- * If a compression ratio needs to be used for this or any other format,
- * the data will be passed by user-space.
- */
- static struct sde_mdp_format_params_ubwc sde_mdp_format_ubwc_map[] = {
- {
- .mdp_format = FMT_RGB_565(SDE_PIX_FMT_RGB_565_UBWC,
- "SDE/RGB_565_UBWC",
- SDE_MDP_FMT_TILE_A5X, 0,
- C2_R_Cr, C0_G_Y, C1_B_Cb, SDE_MDP_COMPRESS_UBWC),
- .micro = {
- .tile_height = 4,
- .tile_width = 16,
- },
- },
- {
- .mdp_format = FMT_RGB_8888(SDE_PIX_FMT_RGBA_8888_UBWC,
- "SDE/RGBA_8888_UBWC",
- SDE_MDP_FMT_TILE_A5X, 0, 1,
- C2_R_Cr, C0_G_Y, C1_B_Cb, C3_ALPHA,
- SDE_MDP_COMPRESS_UBWC),
- .micro = {
- .tile_height = 4,
- .tile_width = 16,
- },
- },
- {
- .mdp_format = FMT_RGB_8888(SDE_PIX_FMT_RGBX_8888_UBWC,
- "SDE/RGBX_8888_UBWC",
- SDE_MDP_FMT_TILE_A5X, 0, 0,
- C2_R_Cr, C0_G_Y, C1_B_Cb, C3_ALPHA,
- SDE_MDP_COMPRESS_UBWC),
- .micro = {
- .tile_height = 4,
- .tile_width = 16,
- },
- },
- {
- .mdp_format = FMT_YUV_PSEUDO(SDE_PIX_FMT_Y_CBCR_H2V2_UBWC,
- "SDE/Y_CBCR_H2V2_UBWC",
- SDE_MDP_FMT_TILE_A5X, SDE_MDP_CHROMA_420,
- SDE_MDP_PIXEL_NORMAL,
- 0, C1_B_Cb, C2_R_Cr,
- SDE_MDP_COMPRESS_UBWC),
- .micro = {
- .tile_height = 8,
- .tile_width = 32,
- },
- },
- {
- .mdp_format = FMT_RGB_1010102(SDE_PIX_FMT_RGBA_1010102_UBWC,
- "SDE/RGBA_1010102_UBWC",
- SDE_MDP_FMT_TILE_A5X, 0, 1,
- C2_R_Cr, C0_G_Y, C1_B_Cb, C3_ALPHA,
- SDE_MDP_COMPRESS_UBWC),
- .micro = {
- .tile_height = 4,
- .tile_width = 16,
- },
- },
- {
- .mdp_format = FMT_RGB_1010102(SDE_PIX_FMT_RGBX_1010102_UBWC,
- "SDE/RGBX_1010102_UBWC",
- SDE_MDP_FMT_TILE_A5X, 0, 0,
- C2_R_Cr, C0_G_Y, C1_B_Cb, C3_ALPHA,
- SDE_MDP_COMPRESS_UBWC),
- .micro = {
- .tile_height = 4,
- .tile_width = 16,
- },
- },
- {
- .mdp_format = FMT_YUV_PSEUDO(SDE_PIX_FMT_Y_CBCR_H2V2_TP10_UBWC,
- "SDE/Y_CBCR_H2V2_TP10_UBWC",
- SDE_MDP_FMT_TILE_A5X, SDE_MDP_CHROMA_420,
- SDE_MDP_PIXEL_10BIT,
- 0,
- C1_B_Cb, C2_R_Cr, SDE_MDP_COMPRESS_UBWC),
- .micro = {
- .tile_height = 4,
- .tile_width = 48,
- },
- },
- {
- .mdp_format = {
- FMT_YUV_COMMON(SDE_PIX_FMT_Y_CBCR_H2V2_P010_UBWC),
- .description = "SDE/Y_CBCR_H2V2_P010_UBWC",
- .flag = 0,
- .fetch_planes = SDE_MDP_PLANE_PSEUDO_PLANAR,
- .chroma_sample = SDE_MDP_CHROMA_420,
- .unpack_count = 2,
- .bpp = 2,
- .frame_format = SDE_MDP_FMT_TILE_A5X,
- .pixel_mode = SDE_MDP_PIXEL_10BIT,
- .element = { C1_B_Cb, C2_R_Cr },
- .unpack_tight = 0,
- .unpack_align_msb = 1,
- .is_ubwc = SDE_MDP_COMPRESS_UBWC
- },
- .micro = {
- .tile_height = 4,
- .tile_width = 32,
- },
- },
- {
- .mdp_format =
- FMT_RGB_1010102(SDE_PIX_FMT_RGBA_1010102_TILE,
- "SDE/RGBA_1010102_TILE",
- SDE_MDP_FMT_TILE_A5X,
- SDE_MDP_FORMAT_FLAG_PRIVATE,
- 1, C2_R_Cr, C0_G_Y, C1_B_Cb, C3_ALPHA,
- SDE_MDP_COMPRESS_NONE),
- .micro = {
- .tile_height = 4,
- .tile_width = 16,
- },
- },
- {
- .mdp_format =
- FMT_RGB_1010102(SDE_PIX_FMT_RGBX_1010102_TILE,
- "SDE/RGBX_1010102102_TILE",
- SDE_MDP_FMT_TILE_A5X,
- SDE_MDP_FORMAT_FLAG_PRIVATE,
- 0, C2_R_Cr, C0_G_Y, C1_B_Cb, C3_ALPHA,
- SDE_MDP_COMPRESS_NONE),
- .micro = {
- .tile_height = 4,
- .tile_width = 16,
- },
- },
- {
- .mdp_format =
- FMT_RGB_1010102(SDE_PIX_FMT_BGRA_1010102_TILE,
- "SDE/BGRA_1010102_TILE",
- SDE_MDP_FMT_TILE_A5X,
- SDE_MDP_FORMAT_FLAG_PRIVATE,
- 1, C1_B_Cb, C0_G_Y, C2_R_Cr, C3_ALPHA,
- SDE_MDP_COMPRESS_NONE),
- .micro = {
- .tile_height = 4,
- .tile_width = 16,
- },
- },
- {
- .mdp_format =
- FMT_RGB_1010102(SDE_PIX_FMT_BGRX_1010102_TILE,
- "SDE/BGRX_1010102_TILE",
- SDE_MDP_FMT_TILE_A5X,
- SDE_MDP_FORMAT_FLAG_PRIVATE,
- 0, C1_B_Cb, C0_G_Y, C2_R_Cr, C3_ALPHA,
- SDE_MDP_COMPRESS_NONE),
- .micro = {
- .tile_height = 4,
- .tile_width = 16,
- },
- },
- {
- .mdp_format =
- FMT_RGB_1010102(SDE_PIX_FMT_ARGB_2101010_TILE,
- "SDE/ARGB_2101010_TILE",
- SDE_MDP_FMT_TILE_A5X,
- SDE_MDP_FORMAT_FLAG_PRIVATE,
- 1, C3_ALPHA, C2_R_Cr, C0_G_Y, C1_B_Cb,
- SDE_MDP_COMPRESS_NONE),
- .micro = {
- .tile_height = 4,
- .tile_width = 16,
- },
- },
- {
- .mdp_format =
- FMT_RGB_1010102(SDE_PIX_FMT_XRGB_2101010_TILE,
- "SDE/XRGB_2101010_TILE",
- SDE_MDP_FMT_TILE_A5X,
- SDE_MDP_FORMAT_FLAG_PRIVATE,
- 0, C3_ALPHA, C2_R_Cr, C0_G_Y, C1_B_Cb,
- SDE_MDP_COMPRESS_NONE),
- .micro = {
- .tile_height = 4,
- .tile_width = 16,
- },
- },
- {
- .mdp_format =
- FMT_RGB_1010102(SDE_PIX_FMT_ABGR_2101010_TILE,
- "SDE/ABGR_2101010_TILE",
- SDE_MDP_FMT_TILE_A5X,
- SDE_MDP_FORMAT_FLAG_PRIVATE,
- 1, C3_ALPHA, C1_B_Cb, C0_G_Y, C2_R_Cr,
- SDE_MDP_COMPRESS_NONE),
- .micro = {
- .tile_height = 4,
- .tile_width = 16,
- },
- },
- {
- .mdp_format =
- FMT_RGB_1010102(SDE_PIX_FMT_XBGR_2101010_TILE,
- "SDE/XBGR_2101010_TILE",
- SDE_MDP_FMT_TILE_A5X,
- SDE_MDP_FORMAT_FLAG_PRIVATE,
- 0, C3_ALPHA, C1_B_Cb, C0_G_Y, C2_R_Cr,
- SDE_MDP_COMPRESS_NONE),
- .micro = {
- .tile_height = 4,
- .tile_width = 16,
- },
- },
- {
- .mdp_format =
- FMT_YUV_PSEUDO(SDE_PIX_FMT_Y_CRCB_H2V2_TILE,
- "Y_CRCB_H2V2_TILE",
- SDE_MDP_FMT_TILE_A5X,
- SDE_MDP_CHROMA_420, SDE_MDP_PIXEL_NORMAL,
- SDE_MDP_FORMAT_FLAG_PRIVATE,
- C2_R_Cr, C1_B_Cb, SDE_MDP_COMPRESS_NONE),
- .micro = {
- .tile_height = 8,
- .tile_width = 32,
- },
- },
- {
- .mdp_format =
- FMT_YUV_PSEUDO(SDE_PIX_FMT_Y_CBCR_H2V2_TILE,
- "Y_CBCR_H2V2_TILE",
- SDE_MDP_FMT_TILE_A5X,
- SDE_MDP_CHROMA_420, SDE_MDP_PIXEL_NORMAL,
- SDE_MDP_FORMAT_FLAG_PRIVATE,
- C1_B_Cb, C2_R_Cr, SDE_MDP_COMPRESS_NONE),
- .micro = {
- .tile_height = 8,
- .tile_width = 32,
- },
- },
- {
- .mdp_format =
- FMT_RGB_8888(SDE_PIX_FMT_ABGR_8888_TILE,
- "SDE/ABGR_8888_TILE",
- SDE_MDP_FMT_TILE_A5X,
- SDE_MDP_FORMAT_FLAG_PRIVATE,
- 1, C3_ALPHA, C1_B_Cb, C0_G_Y, C2_R_Cr,
- SDE_MDP_COMPRESS_NONE),
- .micro = {
- .tile_height = 4,
- .tile_width = 16,
- },
- },
- {
- .mdp_format =
- FMT_RGB_8888(SDE_PIX_FMT_XRGB_8888_TILE,
- "SDE/XRGB_8888_TILE",
- SDE_MDP_FMT_TILE_A5X,
- SDE_MDP_FORMAT_FLAG_PRIVATE,
- 0, C3_ALPHA, C2_R_Cr, C0_G_Y, C1_B_Cb,
- SDE_MDP_COMPRESS_NONE),
- .micro = {
- .tile_height = 4,
- .tile_width = 32,
- },
- },
- {
- .mdp_format =
- FMT_RGB_8888(SDE_PIX_FMT_ARGB_8888_TILE,
- "SDE/ARGB_8888_TILE",
- SDE_MDP_FMT_TILE_A5X,
- SDE_MDP_FORMAT_FLAG_PRIVATE,
- 1, C3_ALPHA, C2_R_Cr, C0_G_Y, C1_B_Cb,
- SDE_MDP_COMPRESS_NONE),
- .micro = {
- .tile_height = 4,
- .tile_width = 16,
- },
- },
- {
- .mdp_format =
- FMT_RGB_8888(SDE_PIX_FMT_RGBA_8888_TILE,
- "SDE/RGBA_8888_TILE",
- SDE_MDP_FMT_TILE_A5X,
- SDE_MDP_FORMAT_FLAG_PRIVATE,
- 1, C2_R_Cr, C0_G_Y, C1_B_Cb, C3_ALPHA,
- SDE_MDP_COMPRESS_NONE),
- .micro = {
- .tile_height = 4,
- .tile_width = 16,
- },
- },
- {
- .mdp_format =
- FMT_RGB_8888(SDE_PIX_FMT_RGBX_8888_TILE,
- "SDE/RGBX_8888_TILE",
- SDE_MDP_FMT_TILE_A5X,
- SDE_MDP_FORMAT_FLAG_PRIVATE,
- 0, C2_R_Cr, C0_G_Y, C1_B_Cb, C3_ALPHA,
- SDE_MDP_COMPRESS_NONE),
- .micro = {
- .tile_height = 4,
- .tile_width = 16,
- },
- },
- {
- .mdp_format =
- FMT_RGB_8888(SDE_PIX_FMT_BGRA_8888_TILE,
- "SDE/BGRA_8888_TILE",
- SDE_MDP_FMT_TILE_A5X,
- SDE_MDP_FORMAT_FLAG_PRIVATE,
- 1, C1_B_Cb, C0_G_Y, C2_R_Cr, C3_ALPHA,
- SDE_MDP_COMPRESS_NONE),
- .micro = {
- .tile_height = 4,
- .tile_width = 16,
- },
- },
- {
- .mdp_format =
- FMT_RGB_8888(SDE_PIX_FMT_BGRX_8888_TILE,
- "SDE/BGRX_8888_TILE",
- SDE_MDP_FMT_TILE_A5X,
- SDE_MDP_FORMAT_FLAG_PRIVATE,
- 0, C1_B_Cb, C0_G_Y, C2_R_Cr, C3_ALPHA,
- SDE_MDP_COMPRESS_NONE),
- .micro = {
- .tile_height = 4,
- .tile_width = 16,
- },
- },
- {
- .mdp_format =
- FMT_RGB_8888(SDE_PIX_FMT_XBGR_8888_TILE,
- "SDE/XBGR_8888_TILE",
- SDE_MDP_FMT_TILE_A5X,
- SDE_MDP_FORMAT_FLAG_PRIVATE,
- 0, C3_ALPHA, C1_B_Cb, C0_G_Y, C2_R_Cr,
- SDE_MDP_COMPRESS_NONE),
- .micro = {
- .tile_height = 4,
- .tile_width = 16,
- },
- },
- {
- .mdp_format = {
- FMT_YUV_COMMON(SDE_PIX_FMT_Y_CBCR_H2V2_P010_TILE),
- .description = "SDE/Y_CBCR_H2V2_P010_TILE",
- .flag = SDE_MDP_FORMAT_FLAG_PRIVATE,
- .fetch_planes = SDE_MDP_PLANE_PSEUDO_PLANAR,
- .chroma_sample = SDE_MDP_CHROMA_420,
- .unpack_count = 2,
- .bpp = 2,
- .frame_format = SDE_MDP_FMT_TILE_A5X,
- .pixel_mode = SDE_MDP_PIXEL_10BIT,
- .element = { C1_B_Cb, C2_R_Cr },
- .unpack_tight = 0,
- .unpack_align_msb = 1,
- .is_ubwc = SDE_MDP_COMPRESS_NONE,
- },
- .micro = {
- .tile_height = 4,
- .tile_width = 32,
- },
- },
- };
- static struct sde_mdp_format_params sde_mdp_format_map[] = {
- FMT_RGB_565(
- SDE_PIX_FMT_RGB_565, "RGB_565", SDE_MDP_FMT_LINEAR,
- 0, C1_B_Cb, C0_G_Y, C2_R_Cr, SDE_MDP_COMPRESS_NONE),
- FMT_RGB_565(
- SDE_PIX_FMT_BGR_565, "BGR_565", SDE_MDP_FMT_LINEAR,
- 0, C2_R_Cr, C0_G_Y, C1_B_Cb, SDE_MDP_COMPRESS_NONE),
- FMT_RGB_888(
- SDE_PIX_FMT_RGB_888, "RGB_888", SDE_MDP_FMT_LINEAR,
- 0, C2_R_Cr, C0_G_Y, C1_B_Cb, SDE_MDP_COMPRESS_NONE),
- FMT_RGB_888(
- SDE_PIX_FMT_BGR_888, "BGR_888", SDE_MDP_FMT_LINEAR,
- 0, C1_B_Cb, C0_G_Y, C2_R_Cr, SDE_MDP_COMPRESS_NONE),
- FMT_RGB_8888(
- SDE_PIX_FMT_ABGR_8888, "SDE/ABGR_8888", SDE_MDP_FMT_LINEAR,
- 0, 1, C3_ALPHA, C1_B_Cb, C0_G_Y, C2_R_Cr,
- SDE_MDP_COMPRESS_NONE),
- FMT_RGB_8888(
- SDE_PIX_FMT_XRGB_8888, "SDE/XRGB_8888", SDE_MDP_FMT_LINEAR,
- 0, 0, C3_ALPHA, C2_R_Cr, C0_G_Y, C1_B_Cb,
- SDE_MDP_COMPRESS_NONE),
- FMT_RGB_8888(
- SDE_PIX_FMT_ARGB_8888, "SDE/ARGB_8888", SDE_MDP_FMT_LINEAR,
- 0, 1, C3_ALPHA, C2_R_Cr, C0_G_Y, C1_B_Cb,
- SDE_MDP_COMPRESS_NONE),
- FMT_RGB_8888(
- SDE_PIX_FMT_RGBA_8888, "SDE/RGBA_8888", SDE_MDP_FMT_LINEAR,
- 0, 1, C2_R_Cr, C0_G_Y, C1_B_Cb, C3_ALPHA,
- SDE_MDP_COMPRESS_NONE),
- FMT_RGB_8888(
- SDE_PIX_FMT_RGBX_8888, "SDE/RGBX_8888", SDE_MDP_FMT_LINEAR,
- 0, 0, C2_R_Cr, C0_G_Y, C1_B_Cb, C3_ALPHA,
- SDE_MDP_COMPRESS_NONE),
- FMT_RGB_8888(
- SDE_PIX_FMT_BGRA_8888, "SDE/BGRA_8888", SDE_MDP_FMT_LINEAR,
- 0, 1, C1_B_Cb, C0_G_Y, C2_R_Cr, C3_ALPHA,
- SDE_MDP_COMPRESS_NONE),
- FMT_RGB_8888(
- SDE_PIX_FMT_BGRX_8888, "SDE/BGRX_8888", SDE_MDP_FMT_LINEAR,
- 0, 0, C1_B_Cb, C0_G_Y, C2_R_Cr, C3_ALPHA,
- SDE_MDP_COMPRESS_NONE),
- FMT_RGB_8888(
- SDE_PIX_FMT_XBGR_8888, "SDE/XBGR_8888", SDE_MDP_FMT_LINEAR,
- 0, 0, C3_ALPHA, C1_B_Cb, C0_G_Y, C2_R_Cr,
- SDE_MDP_COMPRESS_NONE),
- FMT_YUV_PSEUDO(SDE_PIX_FMT_Y_CRCB_H2V1, "Y_CRCB_H2V1",
- SDE_MDP_FMT_LINEAR,
- SDE_MDP_CHROMA_H2V1, SDE_MDP_PIXEL_NORMAL,
- 0, C2_R_Cr, C1_B_Cb, SDE_MDP_COMPRESS_NONE),
- FMT_YUV_PSEUDO(SDE_PIX_FMT_Y_CBCR_H2V1, "Y_CBCR_H2V1",
- SDE_MDP_FMT_LINEAR,
- SDE_MDP_CHROMA_H2V1, SDE_MDP_PIXEL_NORMAL,
- 0, C1_B_Cb, C2_R_Cr, SDE_MDP_COMPRESS_NONE),
- FMT_YUV_PSEUDO(SDE_PIX_FMT_Y_CRCB_H1V2, "Y_CRCB_H1V2",
- SDE_MDP_FMT_LINEAR,
- SDE_MDP_CHROMA_H1V2, SDE_MDP_PIXEL_NORMAL,
- 0, C2_R_Cr, C1_B_Cb, SDE_MDP_COMPRESS_NONE),
- FMT_YUV_PSEUDO(SDE_PIX_FMT_Y_CBCR_H1V2, "Y_CBCR_H1V2",
- SDE_MDP_FMT_LINEAR,
- SDE_MDP_CHROMA_H1V2, SDE_MDP_PIXEL_NORMAL,
- 0, C1_B_Cb, C2_R_Cr, SDE_MDP_COMPRESS_NONE),
- FMT_YUV_PSEUDO(SDE_PIX_FMT_Y_CRCB_H2V2, "Y_CRCB_H2V2",
- SDE_MDP_FMT_LINEAR,
- SDE_MDP_CHROMA_420, SDE_MDP_PIXEL_NORMAL,
- 0, C2_R_Cr, C1_B_Cb, SDE_MDP_COMPRESS_NONE),
- FMT_YUV_PSEUDO(SDE_PIX_FMT_Y_CBCR_H2V2, "Y_CBCR_H2V2",
- SDE_MDP_FMT_LINEAR,
- SDE_MDP_CHROMA_420, SDE_MDP_PIXEL_NORMAL,
- 0, C1_B_Cb, C2_R_Cr, SDE_MDP_COMPRESS_NONE),
- FMT_YUV_PSEUDO(SDE_PIX_FMT_Y_CBCR_H2V2_VENUS, "SDE/Y_CBCR_H2V2_VENUS",
- SDE_MDP_FMT_LINEAR,
- SDE_MDP_CHROMA_420, SDE_MDP_PIXEL_NORMAL,
- 0, C1_B_Cb, C2_R_Cr, SDE_MDP_COMPRESS_NONE),
- FMT_YUV_PSEUDO(SDE_PIX_FMT_Y_CRCB_H2V2_VENUS, "SDE/Y_CRCB_H2V2_VENUS",
- SDE_MDP_FMT_LINEAR,
- SDE_MDP_CHROMA_420, SDE_MDP_PIXEL_NORMAL,
- 0, C2_R_Cr, C1_B_Cb, SDE_MDP_COMPRESS_NONE),
- {
- FMT_YUV10_COMMON(SDE_PIX_FMT_Y_CBCR_H2V2_P010),
- .description = "SDE/Y_CBCR_H2V2_P010",
- .flag = 0,
- .fetch_planes = SDE_MDP_PLANE_PSEUDO_PLANAR,
- .chroma_sample = SDE_MDP_CHROMA_420,
- .unpack_count = 2,
- .bpp = 2,
- .frame_format = SDE_MDP_FMT_LINEAR,
- .pixel_mode = SDE_MDP_PIXEL_10BIT,
- .element = { C1_B_Cb, C2_R_Cr },
- .unpack_tight = 0,
- .unpack_align_msb = 1,
- .is_ubwc = SDE_MDP_COMPRESS_NONE,
- },
- {
- FMT_YUV10_COMMON(SDE_PIX_FMT_Y_CBCR_H2V2_P010_VENUS),
- .description = "SDE/Y_CBCR_H2V2_P010_VENUS",
- .flag = 0,
- .fetch_planes = SDE_MDP_PLANE_PSEUDO_PLANAR,
- .chroma_sample = SDE_MDP_CHROMA_420,
- .unpack_count = 2,
- .bpp = 2,
- .frame_format = SDE_MDP_FMT_LINEAR,
- .pixel_mode = SDE_MDP_PIXEL_10BIT,
- .element = { C1_B_Cb, C2_R_Cr },
- .unpack_tight = 0,
- .unpack_align_msb = 1,
- .is_ubwc = SDE_MDP_COMPRESS_NONE,
- },
- {
- FMT_YUV_COMMON(SDE_PIX_FMT_Y_CBCR_H2V2_TP10),
- .description = "SDE/Y_CBCR_H2V2_TP10",
- .flag = 0,
- .fetch_planes = SDE_MDP_PLANE_PSEUDO_PLANAR,
- .chroma_sample = SDE_MDP_CHROMA_420,
- .unpack_count = 2,
- .bpp = 2,
- .frame_format = SDE_MDP_FMT_TILE_A5X,
- .pixel_mode = SDE_MDP_PIXEL_10BIT,
- .element = { C1_B_Cb, C2_R_Cr },
- .unpack_tight = 1,
- .unpack_align_msb = 0,
- .is_ubwc = SDE_MDP_COMPRESS_NONE,
- },
- FMT_YUV_PLANR(SDE_PIX_FMT_Y_CB_CR_H2V2, "Y_CB_CR_H2V2",
- SDE_MDP_FMT_LINEAR,
- SDE_MDP_CHROMA_420, 0, C2_R_Cr, C1_B_Cb),
- FMT_YUV_PLANR(SDE_PIX_FMT_Y_CR_CB_H2V2, "Y_CR_CB_H2V2",
- SDE_MDP_FMT_LINEAR,
- SDE_MDP_CHROMA_420, 0, C1_B_Cb, C2_R_Cr),
- FMT_YUV_PLANR(SDE_PIX_FMT_Y_CR_CB_GH2V2, "SDE/Y_CR_CB_GH2V2",
- SDE_MDP_FMT_LINEAR,
- SDE_MDP_CHROMA_420, 0, C1_B_Cb, C2_R_Cr),
- {
- FMT_YUV_COMMON(SDE_PIX_FMT_YCBYCR_H2V1),
- .description = "YCBYCR_H2V1",
- .flag = 0,
- .fetch_planes = SDE_MDP_PLANE_INTERLEAVED,
- .chroma_sample = SDE_MDP_CHROMA_H2V1,
- .unpack_count = 4,
- .bpp = 2,
- .frame_format = SDE_MDP_FMT_LINEAR,
- .pixel_mode = SDE_MDP_PIXEL_NORMAL,
- .element = { C2_R_Cr, C0_G_Y, C1_B_Cb, C0_G_Y },
- .is_ubwc = SDE_MDP_COMPRESS_NONE,
- },
- FMT_RGB_1555(SDE_PIX_FMT_RGBA_5551, "RGBA_5551", 1, 0,
- C3_ALPHA, C1_B_Cb, C0_G_Y, C2_R_Cr),
- FMT_RGB_1555(SDE_PIX_FMT_ARGB_1555, "ARGB_1555", 1, 0,
- C1_B_Cb, C0_G_Y, C2_R_Cr, C3_ALPHA),
- FMT_RGB_1555(SDE_PIX_FMT_ABGR_1555, "ABGR_1555", 1, 0,
- C2_R_Cr, C0_G_Y, C1_B_Cb, C3_ALPHA),
- FMT_RGB_1555(SDE_PIX_FMT_BGRA_5551, "BGRA_5551", 1, 0,
- C3_ALPHA, C2_R_Cr, C0_G_Y, C1_B_Cb),
- FMT_RGB_1555(SDE_PIX_FMT_BGRX_5551, "BGRX_5551", 0, 0,
- C3_ALPHA, C2_R_Cr, C0_G_Y, C1_B_Cb),
- FMT_RGB_1555(SDE_PIX_FMT_RGBX_5551, "RGBX_5551", 0, 0,
- C3_ALPHA, C1_B_Cb, C0_G_Y, C2_R_Cr),
- FMT_RGB_1555(SDE_PIX_FMT_XBGR_1555, "XBGR_1555", 0, 0,
- C2_R_Cr, C0_G_Y, C1_B_Cb, C3_ALPHA),
- FMT_RGB_1555(SDE_PIX_FMT_XRGB_1555, "XRGB_1555", 0, 0,
- C1_B_Cb, C0_G_Y, C2_R_Cr, C3_ALPHA),
- FMT_RGB_4444(SDE_PIX_FMT_RGBA_4444, "RGBA_4444", 1, 0,
- C3_ALPHA, C1_B_Cb, C0_G_Y, C2_R_Cr),
- FMT_RGB_4444(SDE_PIX_FMT_ARGB_4444, "ARGB_4444", 1, 0,
- C1_B_Cb, C0_G_Y, C2_R_Cr, C3_ALPHA),
- FMT_RGB_4444(SDE_PIX_FMT_BGRA_4444, "BGRA_4444", 1, 0,
- C3_ALPHA, C2_R_Cr, C0_G_Y, C1_B_Cb),
- FMT_RGB_4444(SDE_PIX_FMT_ABGR_4444, "ABGR_4444", 1, 0,
- C2_R_Cr, C0_G_Y, C1_B_Cb, C3_ALPHA),
- FMT_RGB_4444(SDE_PIX_FMT_RGBX_4444, "RGBX_4444", 0, 0,
- C3_ALPHA, C1_B_Cb, C0_G_Y, C2_R_Cr),
- FMT_RGB_4444(SDE_PIX_FMT_XRGB_4444, "XRGB_4444", 0, 0,
- C1_B_Cb, C0_G_Y, C2_R_Cr, C3_ALPHA),
- FMT_RGB_4444(SDE_PIX_FMT_BGRX_4444, "BGRX_4444", 0, 0,
- C3_ALPHA, C2_R_Cr, C0_G_Y, C1_B_Cb),
- FMT_RGB_4444(SDE_PIX_FMT_XBGR_4444, "XBGR_4444", 0, 0,
- C2_R_Cr, C0_G_Y, C1_B_Cb, C3_ALPHA),
- FMT_RGB_1010102(SDE_PIX_FMT_RGBA_1010102, "SDE/RGBA_1010102",
- SDE_MDP_FMT_LINEAR,
- 0, 1, C2_R_Cr, C0_G_Y, C1_B_Cb, C3_ALPHA,
- SDE_MDP_COMPRESS_NONE),
- FMT_RGB_1010102(SDE_PIX_FMT_RGBX_1010102, "SDE/RGBX_1010102",
- SDE_MDP_FMT_LINEAR,
- 0, 0, C2_R_Cr, C0_G_Y, C1_B_Cb, C3_ALPHA,
- SDE_MDP_COMPRESS_NONE),
- FMT_RGB_1010102(SDE_PIX_FMT_BGRA_1010102, "SDE/BGRA_1010102",
- SDE_MDP_FMT_LINEAR,
- 0, 1, C1_B_Cb, C0_G_Y, C2_R_Cr, C3_ALPHA,
- SDE_MDP_COMPRESS_NONE),
- FMT_RGB_1010102(SDE_PIX_FMT_BGRX_1010102, "SDE/BGRX_1010102",
- SDE_MDP_FMT_LINEAR,
- 0, 0, C1_B_Cb, C0_G_Y, C2_R_Cr, C3_ALPHA,
- SDE_MDP_COMPRESS_NONE),
- FMT_RGB_1010102(SDE_PIX_FMT_ARGB_2101010, "SDE/ARGB_2101010",
- SDE_MDP_FMT_LINEAR,
- 0, 1, C3_ALPHA, C2_R_Cr, C0_G_Y, C1_B_Cb,
- SDE_MDP_COMPRESS_NONE),
- FMT_RGB_1010102(SDE_PIX_FMT_XRGB_2101010, "SDE/XRGB_2101010",
- SDE_MDP_FMT_LINEAR,
- 0, 0, C3_ALPHA, C2_R_Cr, C0_G_Y, C1_B_Cb,
- SDE_MDP_COMPRESS_NONE),
- FMT_RGB_1010102(SDE_PIX_FMT_ABGR_2101010, "SDE/ABGR_2101010",
- SDE_MDP_FMT_LINEAR,
- 0, 1, C3_ALPHA, C1_B_Cb, C0_G_Y, C2_R_Cr,
- SDE_MDP_COMPRESS_NONE),
- FMT_RGB_1010102(SDE_PIX_FMT_XBGR_2101010, "SDE/XBGR_2101010",
- SDE_MDP_FMT_LINEAR,
- 0, 0, C3_ALPHA, C1_B_Cb, C0_G_Y, C2_R_Cr,
- SDE_MDP_COMPRESS_NONE),
- };
- /*
- * sde_get_format_params - return format parameter of the given format
- * @format: format to lookup
- */
- struct sde_mdp_format_params *sde_get_format_params(u32 format)
- {
- struct sde_mdp_format_params *fmt = NULL;
- int i;
- bool fmt_found = false;
- for (i = 0; i < ARRAY_SIZE(sde_mdp_format_map); i++) {
- fmt = &sde_mdp_format_map[i];
- if (format == fmt->format) {
- fmt_found = true;
- break;
- }
- }
- if (!fmt_found) {
- for (i = 0; i < ARRAY_SIZE(sde_mdp_format_ubwc_map); i++) {
- fmt = &sde_mdp_format_ubwc_map[i].mdp_format;
- if (format == fmt->format) {
- fmt_found = true;
- break;
- }
- }
- }
- /* If format not supported than return NULL */
- if (!fmt_found)
- fmt = NULL;
- return fmt;
- }
- /*
- * sde_rot_get_ubwc_micro_dim - return micro dimension of the given ubwc format
- * @format: format to lookup
- * @w: Pointer to returned width dimension
- * @h: Pointer to returned height dimension
- */
- int sde_rot_get_ubwc_micro_dim(u32 format, u16 *w, u16 *h)
- {
- struct sde_mdp_format_params_ubwc *fmt = NULL;
- bool fmt_found = false;
- int i;
- for (i = 0; i < ARRAY_SIZE(sde_mdp_format_ubwc_map); i++) {
- fmt = &sde_mdp_format_ubwc_map[i];
- if (format == fmt->mdp_format.format) {
- fmt_found = true;
- break;
- }
- }
- if (!fmt_found)
- return -EINVAL;
- *w = fmt->micro.tile_width;
- *h = fmt->micro.tile_height;
- return 0;
- }
- /*
- * sde_rot_get_tilea5x_pixfmt - get base a5x tile format of given source format
- * @src_pixfmt: source pixel format to be converted
- * @dst_pixfmt: pointer to base a5x tile pixel format
- * return: 0 if success; error code otherwise
- */
- int sde_rot_get_base_tilea5x_pixfmt(u32 src_pixfmt, u32 *dst_pixfmt)
- {
- int rc = 0;
- if (!dst_pixfmt) {
- SDEROT_ERR("invalid parameters\n");
- return -EINVAL;
- }
- switch (src_pixfmt) {
- case SDE_PIX_FMT_Y_CBCR_H2V2:
- case SDE_PIX_FMT_Y_CBCR_H2V2_UBWC:
- case SDE_PIX_FMT_Y_CBCR_H2V2_TILE:
- *dst_pixfmt = SDE_PIX_FMT_Y_CBCR_H2V2_TILE;
- break;
- case SDE_PIX_FMT_Y_CRCB_H2V2:
- case SDE_PIX_FMT_Y_CRCB_H2V2_TILE:
- *dst_pixfmt = SDE_PIX_FMT_Y_CRCB_H2V2_TILE;
- break;
- case V4L2_PIX_FMT_RGB565:
- case SDE_PIX_FMT_RGB_565_UBWC:
- case SDE_PIX_FMT_RGB_565_TILE:
- *dst_pixfmt = SDE_PIX_FMT_RGB_565_TILE;
- break;
- case SDE_PIX_FMT_RGBA_8888:
- case SDE_PIX_FMT_RGBA_8888_UBWC:
- case SDE_PIX_FMT_RGBA_8888_TILE:
- *dst_pixfmt = SDE_PIX_FMT_RGBA_8888_TILE;
- break;
- case SDE_PIX_FMT_RGBX_8888:
- case SDE_PIX_FMT_RGBX_8888_UBWC:
- case SDE_PIX_FMT_RGBX_8888_TILE:
- *dst_pixfmt = SDE_PIX_FMT_RGBX_8888_TILE;
- break;
- case SDE_PIX_FMT_ARGB_8888:
- case SDE_PIX_FMT_ARGB_8888_TILE:
- *dst_pixfmt = SDE_PIX_FMT_ARGB_8888_TILE;
- break;
- case SDE_PIX_FMT_XRGB_8888:
- case SDE_PIX_FMT_XRGB_8888_TILE:
- *dst_pixfmt = SDE_PIX_FMT_XRGB_8888_TILE;
- break;
- case SDE_PIX_FMT_ABGR_8888:
- case SDE_PIX_FMT_ABGR_8888_TILE:
- *dst_pixfmt = SDE_PIX_FMT_ABGR_8888_TILE;
- break;
- case SDE_PIX_FMT_XBGR_8888:
- case SDE_PIX_FMT_XBGR_8888_TILE:
- *dst_pixfmt = SDE_PIX_FMT_XBGR_8888_TILE;
- break;
- case SDE_PIX_FMT_ARGB_2101010:
- case SDE_PIX_FMT_ARGB_2101010_TILE:
- *dst_pixfmt = SDE_PIX_FMT_ARGB_2101010_TILE;
- break;
- case SDE_PIX_FMT_XRGB_2101010:
- case SDE_PIX_FMT_XRGB_2101010_TILE:
- *dst_pixfmt = SDE_PIX_FMT_XRGB_2101010_TILE;
- break;
- case SDE_PIX_FMT_ABGR_2101010:
- case SDE_PIX_FMT_ABGR_2101010_TILE:
- *dst_pixfmt = SDE_PIX_FMT_ABGR_2101010_TILE;
- break;
- case SDE_PIX_FMT_XBGR_2101010:
- case SDE_PIX_FMT_XBGR_2101010_TILE:
- *dst_pixfmt = SDE_PIX_FMT_XBGR_2101010_TILE;
- break;
- case SDE_PIX_FMT_BGRA_1010102:
- case SDE_PIX_FMT_BGRA_1010102_TILE:
- *dst_pixfmt = SDE_PIX_FMT_BGRA_1010102_TILE;
- break;
- case SDE_PIX_FMT_BGRX_1010102:
- case SDE_PIX_FMT_BGRX_1010102_TILE:
- *dst_pixfmt = SDE_PIX_FMT_BGRX_1010102_TILE;
- break;
- case SDE_PIX_FMT_Y_CBCR_H2V2_P010:
- case SDE_PIX_FMT_Y_CBCR_H2V2_P010_TILE:
- case SDE_PIX_FMT_Y_CBCR_H2V2_P010_UBWC:
- *dst_pixfmt = SDE_PIX_FMT_Y_CBCR_H2V2_P010_TILE;
- break;
- case SDE_PIX_FMT_Y_CBCR_H2V2_TP10:
- case SDE_PIX_FMT_Y_CBCR_H2V2_TP10_UBWC:
- *dst_pixfmt = SDE_PIX_FMT_Y_CBCR_H2V2_TP10;
- break;
- default:
- SDEROT_ERR("invalid src pixel format %c%c%c%c\n",
- src_pixfmt >> 0, src_pixfmt >> 8,
- src_pixfmt >> 16, src_pixfmt >> 24);
- rc = -EINVAL;
- break;
- }
- return rc;
- }
|