1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Copyright 2016 Linaro Ltd. 4*4882a593Smuzhiyun * Copyright 2016 ZTE Corporation. 5*4882a593Smuzhiyun */ 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun #ifndef __ZX_VOU_REGS_H__ 8*4882a593Smuzhiyun #define __ZX_VOU_REGS_H__ 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun /* Sub-module offset */ 11*4882a593Smuzhiyun #define MAIN_GL_OFFSET 0x130 12*4882a593Smuzhiyun #define MAIN_GL_CSC_OFFSET 0x580 13*4882a593Smuzhiyun #define MAIN_CHN_CSC_OFFSET 0x6c0 14*4882a593Smuzhiyun #define MAIN_HBSC_OFFSET 0x820 15*4882a593Smuzhiyun #define MAIN_DITHER_OFFSET 0x960 16*4882a593Smuzhiyun #define MAIN_RSZ_OFFSET 0x600 /* OTFPPU sub-module */ 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun #define AUX_GL_OFFSET 0x200 19*4882a593Smuzhiyun #define AUX_GL_CSC_OFFSET 0x5d0 20*4882a593Smuzhiyun #define AUX_CHN_CSC_OFFSET 0x710 21*4882a593Smuzhiyun #define AUX_HBSC_OFFSET 0x860 22*4882a593Smuzhiyun #define AUX_DITHER_OFFSET 0x970 23*4882a593Smuzhiyun #define AUX_RSZ_OFFSET 0x800 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun #define OSD_VL0_OFFSET 0x040 26*4882a593Smuzhiyun #define OSD_VL_OFFSET(i) (OSD_VL0_OFFSET + 0x050 * (i)) 27*4882a593Smuzhiyun 28*4882a593Smuzhiyun #define HBSC_VL0_OFFSET 0x760 29*4882a593Smuzhiyun #define HBSC_VL_OFFSET(i) (HBSC_VL0_OFFSET + 0x040 * (i)) 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun #define RSZ_VL1_U0 0xa00 32*4882a593Smuzhiyun #define RSZ_VL_OFFSET(i) (RSZ_VL1_U0 + 0x200 * (i)) 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun /* OSD (GPC_GLOBAL) registers */ 35*4882a593Smuzhiyun #define OSD_INT_STA 0x04 36*4882a593Smuzhiyun #define OSD_INT_CLRSTA 0x08 37*4882a593Smuzhiyun #define OSD_INT_MSK 0x0c 38*4882a593Smuzhiyun #define OSD_INT_AUX_UPT BIT(14) 39*4882a593Smuzhiyun #define OSD_INT_MAIN_UPT BIT(13) 40*4882a593Smuzhiyun #define OSD_INT_GL1_LBW BIT(10) 41*4882a593Smuzhiyun #define OSD_INT_GL0_LBW BIT(9) 42*4882a593Smuzhiyun #define OSD_INT_VL2_LBW BIT(8) 43*4882a593Smuzhiyun #define OSD_INT_VL1_LBW BIT(7) 44*4882a593Smuzhiyun #define OSD_INT_VL0_LBW BIT(6) 45*4882a593Smuzhiyun #define OSD_INT_BUS_ERR BIT(3) 46*4882a593Smuzhiyun #define OSD_INT_CFG_ERR BIT(2) 47*4882a593Smuzhiyun #define OSD_INT_ERROR (\ 48*4882a593Smuzhiyun OSD_INT_GL1_LBW | OSD_INT_GL0_LBW | \ 49*4882a593Smuzhiyun OSD_INT_VL2_LBW | OSD_INT_VL1_LBW | OSD_INT_VL0_LBW | \ 50*4882a593Smuzhiyun OSD_INT_BUS_ERR | OSD_INT_CFG_ERR \ 51*4882a593Smuzhiyun ) 52*4882a593Smuzhiyun #define OSD_INT_ENABLE (OSD_INT_ERROR | OSD_INT_AUX_UPT | OSD_INT_MAIN_UPT) 53*4882a593Smuzhiyun #define OSD_CTRL0 0x10 54*4882a593Smuzhiyun #define OSD_CTRL0_VL0_EN BIT(13) 55*4882a593Smuzhiyun #define OSD_CTRL0_VL0_SEL BIT(12) 56*4882a593Smuzhiyun #define OSD_CTRL0_VL1_EN BIT(11) 57*4882a593Smuzhiyun #define OSD_CTRL0_VL1_SEL BIT(10) 58*4882a593Smuzhiyun #define OSD_CTRL0_VL2_EN BIT(9) 59*4882a593Smuzhiyun #define OSD_CTRL0_VL2_SEL BIT(8) 60*4882a593Smuzhiyun #define OSD_CTRL0_GL0_EN BIT(7) 61*4882a593Smuzhiyun #define OSD_CTRL0_GL0_SEL BIT(6) 62*4882a593Smuzhiyun #define OSD_CTRL0_GL1_EN BIT(5) 63*4882a593Smuzhiyun #define OSD_CTRL0_GL1_SEL BIT(4) 64*4882a593Smuzhiyun #define OSD_RST_CLR 0x1c 65*4882a593Smuzhiyun #define RST_PER_FRAME BIT(19) 66*4882a593Smuzhiyun 67*4882a593Smuzhiyun /* Main/Aux channel registers */ 68*4882a593Smuzhiyun #define OSD_MAIN_CHN 0x470 69*4882a593Smuzhiyun #define OSD_AUX_CHN 0x4d0 70*4882a593Smuzhiyun #define CHN_CTRL0 0x00 71*4882a593Smuzhiyun #define CHN_ENABLE BIT(0) 72*4882a593Smuzhiyun #define CHN_CTRL1 0x04 73*4882a593Smuzhiyun #define CHN_SCREEN_W_SHIFT 18 74*4882a593Smuzhiyun #define CHN_SCREEN_W_MASK (0x1fff << CHN_SCREEN_W_SHIFT) 75*4882a593Smuzhiyun #define CHN_SCREEN_H_SHIFT 5 76*4882a593Smuzhiyun #define CHN_SCREEN_H_MASK (0x1fff << CHN_SCREEN_H_SHIFT) 77*4882a593Smuzhiyun #define CHN_UPDATE 0x08 78*4882a593Smuzhiyun #define CHN_INTERLACE_BUF_CTRL 0x24 79*4882a593Smuzhiyun #define CHN_INTERLACE_EN BIT(2) 80*4882a593Smuzhiyun 81*4882a593Smuzhiyun /* Dither registers */ 82*4882a593Smuzhiyun #define OSD_DITHER_CTRL0 0x00 83*4882a593Smuzhiyun #define DITHER_BYSPASS BIT(31) 84*4882a593Smuzhiyun 85*4882a593Smuzhiyun /* TIMING_CTRL registers */ 86*4882a593Smuzhiyun #define TIMING_TC_ENABLE 0x04 87*4882a593Smuzhiyun #define AUX_TC_EN BIT(1) 88*4882a593Smuzhiyun #define MAIN_TC_EN BIT(0) 89*4882a593Smuzhiyun #define FIR_MAIN_ACTIVE 0x08 90*4882a593Smuzhiyun #define FIR_AUX_ACTIVE 0x0c 91*4882a593Smuzhiyun #define V_ACTIVE_SHIFT 16 92*4882a593Smuzhiyun #define V_ACTIVE_MASK (0xffff << V_ACTIVE_SHIFT) 93*4882a593Smuzhiyun #define H_ACTIVE_SHIFT 0 94*4882a593Smuzhiyun #define H_ACTIVE_MASK (0xffff << H_ACTIVE_SHIFT) 95*4882a593Smuzhiyun #define FIR_MAIN_H_TIMING 0x10 96*4882a593Smuzhiyun #define FIR_MAIN_V_TIMING 0x14 97*4882a593Smuzhiyun #define FIR_AUX_H_TIMING 0x18 98*4882a593Smuzhiyun #define FIR_AUX_V_TIMING 0x1c 99*4882a593Smuzhiyun #define SYNC_WIDE_SHIFT 22 100*4882a593Smuzhiyun #define SYNC_WIDE_MASK (0x3ff << SYNC_WIDE_SHIFT) 101*4882a593Smuzhiyun #define BACK_PORCH_SHIFT 11 102*4882a593Smuzhiyun #define BACK_PORCH_MASK (0x7ff << BACK_PORCH_SHIFT) 103*4882a593Smuzhiyun #define FRONT_PORCH_SHIFT 0 104*4882a593Smuzhiyun #define FRONT_PORCH_MASK (0x7ff << FRONT_PORCH_SHIFT) 105*4882a593Smuzhiyun #define TIMING_CTRL 0x20 106*4882a593Smuzhiyun #define AUX_POL_SHIFT 3 107*4882a593Smuzhiyun #define AUX_POL_MASK (0x7 << AUX_POL_SHIFT) 108*4882a593Smuzhiyun #define MAIN_POL_SHIFT 0 109*4882a593Smuzhiyun #define MAIN_POL_MASK (0x7 << MAIN_POL_SHIFT) 110*4882a593Smuzhiyun #define POL_DE_SHIFT 2 111*4882a593Smuzhiyun #define POL_VSYNC_SHIFT 1 112*4882a593Smuzhiyun #define POL_HSYNC_SHIFT 0 113*4882a593Smuzhiyun #define TIMING_INT_CTRL 0x24 114*4882a593Smuzhiyun #define TIMING_INT_STATE 0x28 115*4882a593Smuzhiyun #define TIMING_INT_AUX_FRAME BIT(3) 116*4882a593Smuzhiyun #define TIMING_INT_MAIN_FRAME BIT(1) 117*4882a593Smuzhiyun #define TIMING_INT_AUX_FRAME_SEL_VSW (0x2 << 10) 118*4882a593Smuzhiyun #define TIMING_INT_MAIN_FRAME_SEL_VSW (0x2 << 6) 119*4882a593Smuzhiyun #define TIMING_INT_ENABLE (\ 120*4882a593Smuzhiyun TIMING_INT_MAIN_FRAME_SEL_VSW | TIMING_INT_AUX_FRAME_SEL_VSW | \ 121*4882a593Smuzhiyun TIMING_INT_MAIN_FRAME | TIMING_INT_AUX_FRAME \ 122*4882a593Smuzhiyun ) 123*4882a593Smuzhiyun #define TIMING_MAIN_SHIFT 0x2c 124*4882a593Smuzhiyun #define TIMING_AUX_SHIFT 0x30 125*4882a593Smuzhiyun #define H_SHIFT_VAL 0x0048 126*4882a593Smuzhiyun #define V_SHIFT_VAL 0x0001 127*4882a593Smuzhiyun #define SCAN_CTRL 0x34 128*4882a593Smuzhiyun #define AUX_PI_EN BIT(19) 129*4882a593Smuzhiyun #define MAIN_PI_EN BIT(18) 130*4882a593Smuzhiyun #define AUX_INTERLACE_SEL BIT(1) 131*4882a593Smuzhiyun #define MAIN_INTERLACE_SEL BIT(0) 132*4882a593Smuzhiyun #define SEC_V_ACTIVE 0x38 133*4882a593Smuzhiyun #define SEC_VACT_MAIN_SHIFT 0 134*4882a593Smuzhiyun #define SEC_VACT_MAIN_MASK (0xffff << SEC_VACT_MAIN_SHIFT) 135*4882a593Smuzhiyun #define SEC_VACT_AUX_SHIFT 16 136*4882a593Smuzhiyun #define SEC_VACT_AUX_MASK (0xffff << SEC_VACT_AUX_SHIFT) 137*4882a593Smuzhiyun #define SEC_MAIN_V_TIMING 0x3c 138*4882a593Smuzhiyun #define SEC_AUX_V_TIMING 0x40 139*4882a593Smuzhiyun #define TIMING_MAIN_PI_SHIFT 0x68 140*4882a593Smuzhiyun #define TIMING_AUX_PI_SHIFT 0x6c 141*4882a593Smuzhiyun #define H_PI_SHIFT_VAL 0x000f 142*4882a593Smuzhiyun 143*4882a593Smuzhiyun #define V_ACTIVE(x) (((x) << V_ACTIVE_SHIFT) & V_ACTIVE_MASK) 144*4882a593Smuzhiyun #define H_ACTIVE(x) (((x) << H_ACTIVE_SHIFT) & H_ACTIVE_MASK) 145*4882a593Smuzhiyun 146*4882a593Smuzhiyun #define SYNC_WIDE(x) (((x) << SYNC_WIDE_SHIFT) & SYNC_WIDE_MASK) 147*4882a593Smuzhiyun #define BACK_PORCH(x) (((x) << BACK_PORCH_SHIFT) & BACK_PORCH_MASK) 148*4882a593Smuzhiyun #define FRONT_PORCH(x) (((x) << FRONT_PORCH_SHIFT) & FRONT_PORCH_MASK) 149*4882a593Smuzhiyun 150*4882a593Smuzhiyun /* DTRC registers */ 151*4882a593Smuzhiyun #define DTRC_F0_CTRL 0x2c 152*4882a593Smuzhiyun #define DTRC_F1_CTRL 0x5c 153*4882a593Smuzhiyun #define DTRC_DECOMPRESS_BYPASS BIT(17) 154*4882a593Smuzhiyun #define DTRC_DETILE_CTRL 0x68 155*4882a593Smuzhiyun #define TILE2RASTESCAN_BYPASS_MODE BIT(30) 156*4882a593Smuzhiyun #define DETILE_ARIDR_MODE_MASK (0x3 << 0) 157*4882a593Smuzhiyun #define DETILE_ARID_ALL 0 158*4882a593Smuzhiyun #define DETILE_ARID_IN_ARIDR 1 159*4882a593Smuzhiyun #define DETILE_ARID_BYP_BUT_ARIDR 2 160*4882a593Smuzhiyun #define DETILE_ARID_IN_ARIDR2 3 161*4882a593Smuzhiyun #define DTRC_ARID 0x6c 162*4882a593Smuzhiyun #define DTRC_ARID3_SHIFT 24 163*4882a593Smuzhiyun #define DTRC_ARID3_MASK (0xff << DTRC_ARID3_SHIFT) 164*4882a593Smuzhiyun #define DTRC_ARID2_SHIFT 16 165*4882a593Smuzhiyun #define DTRC_ARID2_MASK (0xff << DTRC_ARID2_SHIFT) 166*4882a593Smuzhiyun #define DTRC_ARID1_SHIFT 8 167*4882a593Smuzhiyun #define DTRC_ARID1_MASK (0xff << DTRC_ARID1_SHIFT) 168*4882a593Smuzhiyun #define DTRC_ARID0_SHIFT 0 169*4882a593Smuzhiyun #define DTRC_ARID0_MASK (0xff << DTRC_ARID0_SHIFT) 170*4882a593Smuzhiyun #define DTRC_DEC2DDR_ARID 0x70 171*4882a593Smuzhiyun 172*4882a593Smuzhiyun #define DTRC_ARID3(x) (((x) << DTRC_ARID3_SHIFT) & DTRC_ARID3_MASK) 173*4882a593Smuzhiyun #define DTRC_ARID2(x) (((x) << DTRC_ARID2_SHIFT) & DTRC_ARID2_MASK) 174*4882a593Smuzhiyun #define DTRC_ARID1(x) (((x) << DTRC_ARID1_SHIFT) & DTRC_ARID1_MASK) 175*4882a593Smuzhiyun #define DTRC_ARID0(x) (((x) << DTRC_ARID0_SHIFT) & DTRC_ARID0_MASK) 176*4882a593Smuzhiyun 177*4882a593Smuzhiyun /* VOU_CTRL registers */ 178*4882a593Smuzhiyun #define VOU_INF_EN 0x00 179*4882a593Smuzhiyun #define VOU_INF_CH_SEL 0x04 180*4882a593Smuzhiyun #define VOU_INF_DATA_SEL 0x08 181*4882a593Smuzhiyun #define VOU_SOFT_RST 0x14 182*4882a593Smuzhiyun #define VOU_CLK_SEL 0x18 183*4882a593Smuzhiyun #define VGA_AUX_DIV_SHIFT 29 184*4882a593Smuzhiyun #define VGA_MAIN_DIV_SHIFT 26 185*4882a593Smuzhiyun #define PIC_MAIN_DIV_SHIFT 23 186*4882a593Smuzhiyun #define PIC_AUX_DIV_SHIFT 20 187*4882a593Smuzhiyun #define VOU_CLK_VL2_SEL BIT(8) 188*4882a593Smuzhiyun #define VOU_CLK_VL1_SEL BIT(7) 189*4882a593Smuzhiyun #define VOU_CLK_VL0_SEL BIT(6) 190*4882a593Smuzhiyun #define VOU_CLK_GL1_SEL BIT(5) 191*4882a593Smuzhiyun #define VOU_CLK_GL0_SEL BIT(4) 192*4882a593Smuzhiyun #define VOU_DIV_PARA 0x1c 193*4882a593Smuzhiyun #define DIV_PARA_UPDATE BIT(31) 194*4882a593Smuzhiyun #define TVENC_AUX_DIV_SHIFT 28 195*4882a593Smuzhiyun #define HDMI_AUX_PNX_DIV_SHIFT 25 196*4882a593Smuzhiyun #define HDMI_MAIN_PNX_DIV_SHIFT 22 197*4882a593Smuzhiyun #define HDMI_AUX_DIV_SHIFT 19 198*4882a593Smuzhiyun #define HDMI_MAIN_DIV_SHIFT 16 199*4882a593Smuzhiyun #define TVENC_MAIN_DIV_SHIFT 13 200*4882a593Smuzhiyun #define INF_AUX_DIV_SHIFT 9 201*4882a593Smuzhiyun #define INF_MAIN_DIV_SHIFT 6 202*4882a593Smuzhiyun #define LAYER_AUX_DIV_SHIFT 3 203*4882a593Smuzhiyun #define LAYER_MAIN_DIV_SHIFT 0 204*4882a593Smuzhiyun #define VOU_CLK_REQEN 0x20 205*4882a593Smuzhiyun #define VOU_CLK_EN 0x24 206*4882a593Smuzhiyun #define VOU_INF_HDMI_CTRL 0x30 207*4882a593Smuzhiyun #define VOU_HDMI_AUD_MASK 0x1f 208*4882a593Smuzhiyun 209*4882a593Smuzhiyun /* OTFPPU_CTRL registers */ 210*4882a593Smuzhiyun #define OTFPPU_RSZ_DATA_SOURCE 0x04 211*4882a593Smuzhiyun 212*4882a593Smuzhiyun #endif /* __ZX_VOU_REGS_H__ */ 213