};
static struct tegra_dc_feature_entry t124_feature_entries_a[] = {
- { 0, TEGRA_DC_FEATURE_FORMATS, {TEGRA_WIN_FMT_BASE,} },
+ { 0, TEGRA_DC_FEATURE_FORMATS,
+ { TEGRA_WIN_FMT_BASE, TEGRA_WIN_FMT_T124_HIGH } },
{ 0, TEGRA_DC_FEATURE_BLEND_TYPE, {2,} },
{ 0, TEGRA_DC_FEATURE_MAXIMUM_SIZE, {4096, 1, 4096, 1,} },
{ 0, TEGRA_DC_FEATURE_MAXIMUM_SCALE, {2, 2, 2, 2,} },
{ 0, TEGRA_DC_FEATURE_INVERT_TYPE, {1, 1, 0,} },
{ 0, TEGRA_DC_FEATURE_FIELD_TYPE, {1,} },
- { 1, TEGRA_DC_FEATURE_FORMATS, {TEGRA_WIN_FMT_BASE,} },
+ { 1, TEGRA_DC_FEATURE_FORMATS,
+ { TEGRA_WIN_FMT_BASE, TEGRA_WIN_FMT_T124_HIGH } },
{ 1, TEGRA_DC_FEATURE_BLEND_TYPE, {2,} },
{ 1, TEGRA_DC_FEATURE_MAXIMUM_SIZE, {4096, 1, 4096, 1,} },
{ 1, TEGRA_DC_FEATURE_MAXIMUM_SCALE, {2, 2, 2, 2,} },
{ 1, TEGRA_DC_FEATURE_INVERT_TYPE, {1, 1, 0,} },
{ 1, TEGRA_DC_FEATURE_FIELD_TYPE, {1,} },
- { 2, TEGRA_DC_FEATURE_FORMATS, {TEGRA_WIN_FMT_BASE,} },
+ { 2, TEGRA_DC_FEATURE_FORMATS,
+ { TEGRA_WIN_FMT_BASE, TEGRA_WIN_FMT_T124_HIGH } },
{ 2, TEGRA_DC_FEATURE_BLEND_TYPE, {2,} },
{ 2, TEGRA_DC_FEATURE_MAXIMUM_SIZE, {4096, 1, 4096, 1,} },
{ 2, TEGRA_DC_FEATURE_MAXIMUM_SCALE, {2, 2, 2, 2,} },
};
static struct tegra_dc_feature_entry t124_feature_entries_b[] = {
- { 0, TEGRA_DC_FEATURE_FORMATS, {TEGRA_WIN_FMT_BASE,} },
+ { 0, TEGRA_DC_FEATURE_FORMATS,
+ { TEGRA_WIN_FMT_BASE, TEGRA_WIN_FMT_T124_HIGH } },
{ 0, TEGRA_DC_FEATURE_BLEND_TYPE, {2,} },
{ 0, TEGRA_DC_FEATURE_MAXIMUM_SIZE, {4096, 1, 4096, 1,} },
{ 0, TEGRA_DC_FEATURE_MAXIMUM_SCALE, {2, 2, 2, 2,} },
{ 0, TEGRA_DC_FEATURE_INVERT_TYPE, {1, 1, 0,} },
{ 0, TEGRA_DC_FEATURE_FIELD_TYPE, {1,} },
- { 1, TEGRA_DC_FEATURE_FORMATS, {TEGRA_WIN_FMT_BASE,} },
+ { 1, TEGRA_DC_FEATURE_FORMATS,
+ { TEGRA_WIN_FMT_BASE, TEGRA_WIN_FMT_T124_HIGH } },
{ 1, TEGRA_DC_FEATURE_BLEND_TYPE, {2,} },
{ 1, TEGRA_DC_FEATURE_MAXIMUM_SIZE, {4096, 1, 4096, 1,} },
{ 1, TEGRA_DC_FEATURE_MAXIMUM_SCALE, {2, 2, 2, 2,} },
{ 1, TEGRA_DC_FEATURE_INVERT_TYPE, {1, 1, 0,} },
{ 1, TEGRA_DC_FEATURE_FIELD_TYPE, {1,} },
- { 2, TEGRA_DC_FEATURE_FORMATS, {TEGRA_WIN_FMT_BASE,} },
+ { 2, TEGRA_DC_FEATURE_FORMATS,
+ { TEGRA_WIN_FMT_BASE, TEGRA_WIN_FMT_T124_HIGH } },
{ 2, TEGRA_DC_FEATURE_BLEND_TYPE, {2,} },
{ 2, TEGRA_DC_FEATURE_MAXIMUM_SIZE, {4096, 1, 4096, 1,} },
{ 2, TEGRA_DC_FEATURE_MAXIMUM_SCALE, {2, 2, 2, 2,} },
#define ENTRY_SIZE 4 /* Size of feature entry args */
+/* adjust large bit shift for an individual 32-bit word */
+#define BIT_FOR_WORD(word, x) ( \
+ (x) >= (word) * 32 && \
+ (x) < 32 + (word) * 32 \
+ ? BIT((x) - 32) : 0)
+#define HIGHBIT(x) BIT_FOR_WORD(1, x)
+#define LOWBIT(x) BIT_FOR_WORD(0, x)
+
/* Define the supported formats. TEGRA_WIN_FMT_WIN_x macros are defined
* based on T20/T30 formats. */
-#define TEGRA_WIN_FMT_BASE_CNT (TEGRA_WIN_FMT_YUV422RA + 1)
-#define TEGRA_WIN_FMT_BASE ((1 << TEGRA_WIN_FMT_P8) | \
- (1 << TEGRA_WIN_FMT_B4G4R4A4) | \
- (1 << TEGRA_WIN_FMT_B5G5R5A) | \
- (1 << TEGRA_WIN_FMT_B5G6R5) | \
- (1 << TEGRA_WIN_FMT_AB5G5R5) | \
- (1 << TEGRA_WIN_FMT_B8G8R8A8) | \
- (1 << TEGRA_WIN_FMT_R8G8B8A8) | \
- (1 << TEGRA_WIN_FMT_YCbCr422) | \
- (1 << TEGRA_WIN_FMT_YUV422) | \
- (1 << TEGRA_WIN_FMT_YCbCr420P) | \
- (1 << TEGRA_WIN_FMT_YUV420P) | \
- (1 << TEGRA_WIN_FMT_YCbCr422P) | \
- (1 << TEGRA_WIN_FMT_YUV422P) | \
- (1 << TEGRA_WIN_FMT_YCbCr422R) | \
- (1 << TEGRA_WIN_FMT_YUV422R))
-
-#define TEGRA_WIN_FMT_WIN_A ((1 << TEGRA_WIN_FMT_P1) | \
- (1 << TEGRA_WIN_FMT_P2) | \
- (1 << TEGRA_WIN_FMT_P4) | \
- (1 << TEGRA_WIN_FMT_P8) | \
- (1 << TEGRA_WIN_FMT_B4G4R4A4) | \
- (1 << TEGRA_WIN_FMT_B5G5R5A) | \
- (1 << TEGRA_WIN_FMT_B5G6R5) | \
- (1 << TEGRA_WIN_FMT_AB5G5R5) | \
- (1 << TEGRA_WIN_FMT_B8G8R8A8) | \
- (1 << TEGRA_WIN_FMT_R8G8B8A8) | \
- (1 << TEGRA_WIN_FMT_B6x2G6x2R6x2A8) | \
- (1 << TEGRA_WIN_FMT_R6x2G6x2B6x2A8))
+#define TEGRA_WIN_FMT_BASE (BIT(TEGRA_WIN_FMT_P8) | \
+ BIT(TEGRA_WIN_FMT_B4G4R4A4) | \
+ BIT(TEGRA_WIN_FMT_B5G5R5A) | \
+ BIT(TEGRA_WIN_FMT_B5G6R5) | \
+ BIT(TEGRA_WIN_FMT_AB5G5R5) | \
+ BIT(TEGRA_WIN_FMT_B8G8R8A8) | \
+ BIT(TEGRA_WIN_FMT_R8G8B8A8) | \
+ BIT(TEGRA_WIN_FMT_YCbCr422) | \
+ BIT(TEGRA_WIN_FMT_YUV422) | \
+ BIT(TEGRA_WIN_FMT_YCbCr420P) | \
+ BIT(TEGRA_WIN_FMT_YUV420P) | \
+ BIT(TEGRA_WIN_FMT_YCbCr422P) | \
+ BIT(TEGRA_WIN_FMT_YUV422P) | \
+ BIT(TEGRA_WIN_FMT_YCbCr422R) | \
+ BIT(TEGRA_WIN_FMT_YUV422R))
+
+#define TEGRA_WIN_FMT_T124_LOW TEGRA_WIN_FMT_BASE
+#define TEGRA_WIN_FMT_T124_HIGH (HIGHBIT(TEGRA_DC_EXT_FMT_YCbCr444P) | \
+ HIGHBIT(TEGRA_DC_EXT_FMT_YUV444P) | \
+ HIGHBIT(TEGRA_DC_EXT_FMT_YCrCb420SP) | \
+ HIGHBIT(TEGRA_DC_EXT_FMT_YCbCr420SP) | \
+ HIGHBIT(TEGRA_DC_EXT_FMT_YCrCb422SP) | \
+ HIGHBIT(TEGRA_DC_EXT_FMT_YCbCr422SP) | \
+ HIGHBIT(TEGRA_DC_EXT_FMT_YVU420SP) | \
+ HIGHBIT(TEGRA_DC_EXT_FMT_YUV420SP) | \
+ HIGHBIT(TEGRA_DC_EXT_FMT_YVU422SP) | \
+ HIGHBIT(TEGRA_DC_EXT_FMT_YUV422SP) | \
+ HIGHBIT(TEGRA_DC_EXT_FMT_YVU444SP) | \
+ HIGHBIT(TEGRA_DC_EXT_FMT_YUV444SP))
+
+#define TEGRA_WIN_FMT_WIN_A (BIT(TEGRA_WIN_FMT_P1) | \
+ BIT(TEGRA_WIN_FMT_P2) | \
+ BIT(TEGRA_WIN_FMT_P4) | \
+ BIT(TEGRA_WIN_FMT_P8) | \
+ BIT(TEGRA_WIN_FMT_B4G4R4A4) | \
+ BIT(TEGRA_WIN_FMT_B5G5R5A) | \
+ BIT(TEGRA_WIN_FMT_B5G6R5) | \
+ BIT(TEGRA_WIN_FMT_AB5G5R5) | \
+ BIT(TEGRA_WIN_FMT_B8G8R8A8) | \
+ BIT(TEGRA_WIN_FMT_R8G8B8A8) | \
+ BIT(TEGRA_WIN_FMT_B6x2G6x2R6x2A8) | \
+ BIT(TEGRA_WIN_FMT_R6x2G6x2B6x2A8))
#define TEGRA_WIN_FMT_WIN_B (TEGRA_WIN_FMT_BASE | \
- (1 << TEGRA_WIN_FMT_B6x2G6x2R6x2A8) | \
- (1 << TEGRA_WIN_FMT_R6x2G6x2B6x2A8) | \
- (1 << TEGRA_WIN_FMT_YCbCr422RA) | \
- (1 << TEGRA_WIN_FMT_YUV422RA))
+ BIT(TEGRA_WIN_FMT_B6x2G6x2R6x2A8) | \
+ BIT(TEGRA_WIN_FMT_R6x2G6x2B6x2A8) | \
+ BIT(TEGRA_WIN_FMT_YCbCr422RA) | \
+ BIT(TEGRA_WIN_FMT_YUV422RA))
#define TEGRA_WIN_FMT_WIN_C (TEGRA_WIN_FMT_BASE | \
- (1 << TEGRA_WIN_FMT_B6x2G6x2R6x2A8) | \
- (1 << TEGRA_WIN_FMT_R6x2G6x2B6x2A8) | \
- (1 << TEGRA_WIN_FMT_YCbCr422RA) | \
- (1 << TEGRA_WIN_FMT_YUV422RA))
+ BIT(TEGRA_WIN_FMT_B6x2G6x2R6x2A8) | \
+ BIT(TEGRA_WIN_FMT_R6x2G6x2B6x2A8) | \
+ BIT(TEGRA_WIN_FMT_YCbCr422RA) | \
+ BIT(TEGRA_WIN_FMT_YUV422RA))
/* preferred formats do not include 32-bpp formats */
#define TEGRA_WIN_PREF_FMT_WIN_B (TEGRA_WIN_FMT_WIN_B & \
- ~(1 << TEGRA_WIN_FMT_B8G8R8A8) & \
- ~(1 << TEGRA_WIN_FMT_R8G8B8A8))
-
-#define TEGRA_WIN_FMT_SIMPLE ((1 << TEGRA_WIN_FMT_B4G4R4A4) | \
- (1 << TEGRA_WIN_FMT_B5G5R5A) | \
- (1 << TEGRA_WIN_FMT_B5G6R5) | \
- (1 << TEGRA_WIN_FMT_B8G8R8A8) | \
- (1 << TEGRA_WIN_FMT_R8G8B8A8))
+ ~BIT(TEGRA_WIN_FMT_B8G8R8A8) & \
+ ~BIT(TEGRA_WIN_FMT_R8G8B8A8))
+
+#define TEGRA_WIN_FMT_SIMPLE (BIT(TEGRA_WIN_FMT_B4G4R4A4) | \
+ BIT(TEGRA_WIN_FMT_B5G5R5A) | \
+ BIT(TEGRA_WIN_FMT_B5G6R5) | \
+ BIT(TEGRA_WIN_FMT_B8G8R8A8) | \
+ BIT(TEGRA_WIN_FMT_R8G8B8A8))
/* For each entry, we define the offset to read specific feature. Define the