1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Copyright (c) 2020 Rockchip Electronics Co. Ltd. 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Author: Guochun Huang <hero.huang@rock-chips.com> 6*4882a593Smuzhiyun */ 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun #ifndef RK628_GVI_H 9*4882a593Smuzhiyun #define RK628_GVI_H 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun #include "rk628.h" 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun #define GVI_BASE 0x80000 14*4882a593Smuzhiyun #define HOSTREG(x) ((x) + GVI_BASE) 15*4882a593Smuzhiyun #define GVI_SYS_CTRL0 HOSTREG(0x0000) 16*4882a593Smuzhiyun #define GVI_SYS_CTRL1 HOSTREG(0x0004) 17*4882a593Smuzhiyun #define GVI_SYS_CTRL2 HOSTREG(0x0008) 18*4882a593Smuzhiyun #define GVI_SYS_CTRL3 HOSTREG(0x000c) 19*4882a593Smuzhiyun #define GVI_VERSION HOSTREG(0x0010) 20*4882a593Smuzhiyun #define GVI_SYS_RST HOSTREG(0x0014) 21*4882a593Smuzhiyun #define GVI_LINE_FLAG HOSTREG(0x0018) 22*4882a593Smuzhiyun #define GVI_STATUS HOSTREG(0x001c) 23*4882a593Smuzhiyun #define GVI_PLL_LOCK_TIMEOUT HOSTREG(0x0030) 24*4882a593Smuzhiyun #define GVI_HTPDN_TIMEOUT HOSTREG(0x0034) 25*4882a593Smuzhiyun #define GVI_LOCKN_TIMEOUT HOSTREG(0x0038) 26*4882a593Smuzhiyun #define GVI_WAIT_LOCKN HOSTREG(0x003C) 27*4882a593Smuzhiyun #define GVI_WAIT_HTPDN HOSTREG(0x0040) 28*4882a593Smuzhiyun #define GVI_INTR_EN HOSTREG(0x0050) 29*4882a593Smuzhiyun #define GVI_INTR_CLR HOSTREG(0x0054) 30*4882a593Smuzhiyun #define GVI_INTR_RAW_STATUS HOSTREG(0x0058) 31*4882a593Smuzhiyun #define GVI_INTR_STATUS HOSTREG(0x005c) 32*4882a593Smuzhiyun #define GVI_COLOR_BAR_CTRL HOSTREG(0x0060) 33*4882a593Smuzhiyun #define GVI_COLOR_BAR_HTIMING0 HOSTREG(0x0070) 34*4882a593Smuzhiyun #define GVI_COLOR_BAR_HTIMING1 HOSTREG(0x0074) 35*4882a593Smuzhiyun #define GVI_COLOR_BAR_VTIMING0 HOSTREG(0x0078) 36*4882a593Smuzhiyun #define GVI_COLOR_BAR_VTIMING1 HOSTREG(0x007c) 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun /* SYS_CTRL0 */ 39*4882a593Smuzhiyun #define SYS_CTRL0_GVI_EN BIT(0) 40*4882a593Smuzhiyun #define SYS_CTRL0_AUTO_GATING BIT(1) 41*4882a593Smuzhiyun #define SYS_CTRL0_FRM_RST_EN BIT(2) 42*4882a593Smuzhiyun #define SYS_CTRL0_FRM_RST_MODE BIT(3) 43*4882a593Smuzhiyun #define SYS_CTRL0_LANE_NUM_MASK GENMASK(7, 4) 44*4882a593Smuzhiyun #define SYS_CTRL0_LANE_NUM(x) UPDATE(x, 7, 4) 45*4882a593Smuzhiyun #define SYS_CTRL0_BYTE_MODE_MASK GENMASK(9, 8) 46*4882a593Smuzhiyun #define SYS_CTRL0_BYTE_MODE(x) UPDATE(x, 9, 8) 47*4882a593Smuzhiyun #define SYS_CTRL0_SECTION_NUM_MASK GENMASK(11, 10) 48*4882a593Smuzhiyun #define SYS_CTRL0_SECTION_NUM(x) UPDATE(x, 11, 10) 49*4882a593Smuzhiyun #define SYS_CTRL0_CDR_ENDIAN_SWAP BIT(12) 50*4882a593Smuzhiyun #define SYS_CTRL0_PACK_BYTE_SWAP BIT(13) 51*4882a593Smuzhiyun #define SYS_CTRL0_PACK_ENDIAN_SWAP BIT(14) 52*4882a593Smuzhiyun #define SYS_CTRL0_ENC8B10B_ENDIAN_SWAP BIT(15) 53*4882a593Smuzhiyun #define SYS_CTRL0_CDR_EN BIT(16) 54*4882a593Smuzhiyun #define SYS_CTRL0_ALN_EN BIT(17) 55*4882a593Smuzhiyun #define SYS_CTRL0_NOR_EN BIT(18) 56*4882a593Smuzhiyun #define SYS_CTRL0_ALN_NOR_MODE BIT(19) 57*4882a593Smuzhiyun #define SYS_CTRL0_GVI_MASK GENMASK(19, 16) 58*4882a593Smuzhiyun #define SYS_CTRL0_GVI_GN_EN(x) UPDATE(x, 19, 16) 59*4882a593Smuzhiyun 60*4882a593Smuzhiyun #define SYS_CTRL0_SCRAMBLER_EN BIT(20) 61*4882a593Smuzhiyun #define SYS_CTRL0_ENCODE8B10B_EN BIT(21) 62*4882a593Smuzhiyun #define SYS_CTRL0_INIT_RD_EN BIT(22) 63*4882a593Smuzhiyun #define SYS_CTRL0_INIT_RD_VALUE BIT(23) 64*4882a593Smuzhiyun #define SYS_CTRL0_FORCE_HTPDN_EN BIT(24) 65*4882a593Smuzhiyun #define SYS_CTRL0_FORCE_HTPDN_VALUE BIT(25) 66*4882a593Smuzhiyun #define SYS_CTRL0_FORCE_PLL_EN BIT(26) 67*4882a593Smuzhiyun #define SYS_CTRL0_FORCE_PLL_VALUE BIT(27) 68*4882a593Smuzhiyun #define SYS_CTRL0_FORCE_LOCKN_EN BIT(28) 69*4882a593Smuzhiyun #define SYS_CTRL0_FORCE_LOCKN_VALUE BIT(29) 70*4882a593Smuzhiyun 71*4882a593Smuzhiyun /* SYS_CTRL1 */ 72*4882a593Smuzhiyun #define SYS_CTRL1_COLOR_DEPTH_MASK GENMASK(3, 0) 73*4882a593Smuzhiyun #define SYS_CTRL1_COLOR_DEPTH(x) UPDATE(x, 3, 0) 74*4882a593Smuzhiyun #define SYS_CTRL1_DUAL_PIXEL_EN BIT(4) 75*4882a593Smuzhiyun #define SYS_CTRL1_TIMING_ALIGN_EN BIT(8) 76*4882a593Smuzhiyun #define SYS_CTRL1_LANE_ALIGN_EN BIT(9) 77*4882a593Smuzhiyun 78*4882a593Smuzhiyun #define SYS_CTRL1_DUAL_PIXEL_SWAP BIT(12) 79*4882a593Smuzhiyun #define SYS_CTRL1_RB_SWAP BIT(13) 80*4882a593Smuzhiyun #define SYS_CTRL1_YC_SWAP BIT(14) 81*4882a593Smuzhiyun #define SYS_CTRL1_WHOLE_FRM_EN BIT(16) 82*4882a593Smuzhiyun #define SYS_CTRL1_NOR_PROTECT BIT(17) 83*4882a593Smuzhiyun #define SYS_CTRL1_RD_WCNT_UPDATE BIT(31) 84*4882a593Smuzhiyun 85*4882a593Smuzhiyun /* SYS_CTRL2 */ 86*4882a593Smuzhiyun #define SYS_CTRL2_AFIFO_READ_THOLD_MASK GENMASK(7, 0) 87*4882a593Smuzhiyun #define SYS_CTRL2_AFIFO_READ_THOLD(x) UPDATE(x, 7, 0) 88*4882a593Smuzhiyun #define SYS_CTRL2_AFIFO_ALMOST_FULL_THOLD_MASK GENMASK(23, 16) 89*4882a593Smuzhiyun #define SYS_CTRL2_AFIFO_ALMOST_FULL_THOLD(x) UPDATE(x, 23, 16) 90*4882a593Smuzhiyun #define SYS_CTRL2_AFIFO_ALMOST_EMPTY_THOLD_MASK GENMASK(31, 24) 91*4882a593Smuzhiyun #define SYS_CTRL2_AFIFO_ALMOST_EMPTY_THOLD(x) UPDATE(x, 31, 24) 92*4882a593Smuzhiyun 93*4882a593Smuzhiyun /* SYS_CTRL3 */ 94*4882a593Smuzhiyun #define SYS_CTRL3_LANE0_SEL_MASK GENMASK(2, 0) 95*4882a593Smuzhiyun #define SYS_CTRL3_LANE0_SEL(x) UPDATE(x, 2, 0) 96*4882a593Smuzhiyun #define SYS_CTRL3_LANE1_SEL_MASK GENMASK(6, 4) 97*4882a593Smuzhiyun #define SYS_CTRL3_LANE1_SEL(x) UPDATE(x, 6, 4) 98*4882a593Smuzhiyun #define SYS_CTRL3_LANE2_SEL_MASK GENMASK(10, 8) 99*4882a593Smuzhiyun #define SYS_CTRL3_LANE2_SEL(x) UPDATE(x, 10, 8) 100*4882a593Smuzhiyun #define SYS_CTRL3_LANE3_SEL_MASK GENMASK(14, 12) 101*4882a593Smuzhiyun #define SYS_CTRL3_LANE3_SEL(x) UPDATE(x, 14, 12) 102*4882a593Smuzhiyun #define SYS_CTRL3_LANE4_SEL_MASK GENMASK(18, 16) 103*4882a593Smuzhiyun #define SYS_CTRL3_LANE4_SEL(x) UPDATE(x, 18, 16) 104*4882a593Smuzhiyun #define SYS_CTRL3_LANE5_SEL_MASK GENMASK(22, 20) 105*4882a593Smuzhiyun #define SYS_CTRL3_LANE5_SEL(x) UPDATE(x, 22, 20) 106*4882a593Smuzhiyun #define SYS_CTRL3_LANE6_SEL_MASK GENMASK(26, 24) 107*4882a593Smuzhiyun #define SYS_CTRL3_LANE6_SEL(x) UPDATE(x, 26, 24) 108*4882a593Smuzhiyun #define SYS_CTRL3_LANE7_SEL_MASK GENMASK(30, 28) 109*4882a593Smuzhiyun #define SYS_CTRL3_LANE7_SEL(x) UPDATE(x, 30, 28) 110*4882a593Smuzhiyun /* VERSIION */ 111*4882a593Smuzhiyun #define VERSION_VERSION(x) UPDATE(x, 31, 0) 112*4882a593Smuzhiyun /* SYS_RESET*/ 113*4882a593Smuzhiyun #define SYS_RST_SOFT_RST BIT(0) 114*4882a593Smuzhiyun /* LINE_FLAG */ 115*4882a593Smuzhiyun #define LINE_FLAG_LANE_FLAG0_MASK GENMASK(15, 0) 116*4882a593Smuzhiyun #define LINE_FLAG_LANE_FLAG0(x) UPDATE(x, 15, 0) 117*4882a593Smuzhiyun #define LINE_FLAG_LANE_FLAG1_MASK GENMASK(31, 16) 118*4882a593Smuzhiyun #define LINE_FLAG_LANE_FLAG1(x) UPDATE(x, 31, 16) 119*4882a593Smuzhiyun /* STATUS */ 120*4882a593Smuzhiyun #define STATUS_HTDPN BIT(4) 121*4882a593Smuzhiyun #define STATUS_LOCKN BIT(5) 122*4882a593Smuzhiyun #define STATUS_PLL_LOCKN BIT(6) 123*4882a593Smuzhiyun #define STATUS_AFIFO0_WCNT_MASK GENMASK(23, 16) 124*4882a593Smuzhiyun #define STATUS_AFIFO0_WCNT(x) UPDATE(x, 23, 16) 125*4882a593Smuzhiyun #define STATUS_AFIFO1_WCNT_MASK GENMASK(31, 24) 126*4882a593Smuzhiyun #define STATUS_AFIFO1_WCNT(x) UPDATE(x, 31, 24) 127*4882a593Smuzhiyun /* PLL_LTIMEOUT */ 128*4882a593Smuzhiyun #define PLL_LOCK_TIMEOUT_PLL_LOCK_TIME_OUT_MASK GENMASK(31, 0) 129*4882a593Smuzhiyun #define PLL_LOCK_TIMEOUT_PLL_LOCK_TIME_OUT(x) UPDATE(x, 31, 0) 130*4882a593Smuzhiyun /* HTPDNEOUT */ 131*4882a593Smuzhiyun #define HTPDN_TIMEOUT_HTPDN_TIME_OUT_MASK GENMASK(31, 0) 132*4882a593Smuzhiyun #define HTPDN_TIMEOUT_HTPDN_TIME_OUT(x) UPDATE(x, 31, 0) 133*4882a593Smuzhiyun /* LOCKNEOUT */ 134*4882a593Smuzhiyun #define LOCKN_TIMEOUT_LOCKN_TIME_OUT_MASK GENMASK(31, 0) 135*4882a593Smuzhiyun #define LOCKN_TIMEOUT_LOCKN_TIME_OUT(x) UPDATE(x, 31, 0) 136*4882a593Smuzhiyun /* WAIT_LOCKN */ 137*4882a593Smuzhiyun #define WAIT_LOCKN_WAIT_LOCKN_TIME_MASK GENMASK(30, 0) 138*4882a593Smuzhiyun #define WAIT_LOCKN_WAIT_LOCKN_TIME(x) UPDATE(x, 30, 0) 139*4882a593Smuzhiyun #define WAIT_LOCKN_WAIT_LOCKN_TIME_EN BIT(31) 140*4882a593Smuzhiyun /* WAIT_HTPDN */ 141*4882a593Smuzhiyun #define WAIT_HTPDN_WAIT_HTPDN_TIME_MASK GENMASK(30, 0) 142*4882a593Smuzhiyun #define WAIT_HTPDN_WAIT_HTPDN_TIME(x) UPDATE(x, 30, 0) 143*4882a593Smuzhiyun #define WAIT_HTPDN_WAIT_HTPDN_EN BIT(31) 144*4882a593Smuzhiyun /* INTR_EN */ 145*4882a593Smuzhiyun #define INTR_EN_INTR_FRM_ST_EN BIT(0) 146*4882a593Smuzhiyun #define INTR_EN_INTR_PLL_LOCK_EN BIT(1) 147*4882a593Smuzhiyun #define INTR_EN_INTR_HTPDN_EN BIT(2) 148*4882a593Smuzhiyun #define INTR_EN_INTR_LOCKN_EN BIT(3) 149*4882a593Smuzhiyun #define INTR_EN_INTR_PLL_TIMEOUT_EN BIT(4) 150*4882a593Smuzhiyun #define INTR_EN_INTR_HTPDN_TIMEOUT_EN BIT(5) 151*4882a593Smuzhiyun #define INTR_EN_INTR_LOCKN_TIMEOUT_EN BIT(6) 152*4882a593Smuzhiyun #define INTR_EN_INTR_LINE_FLAG0_EN BIT(8) 153*4882a593Smuzhiyun #define INTR_EN_INTR_LINE_FLAG1_EN BIT(9) 154*4882a593Smuzhiyun #define INTR_EN_INTR_AFIFO_OVERFLOW_EN BIT(10) 155*4882a593Smuzhiyun #define INTR_EN_INTR_AFIFO_UNDERFLOW_EN BIT(11) 156*4882a593Smuzhiyun #define INTR_EN_INTR_PLL_ERR_EN BIT(12) 157*4882a593Smuzhiyun #define INTR_EN_INTR_HTPDN_ERR_EN BIT(13) 158*4882a593Smuzhiyun #define INTR_EN_INTR_LOCKN_ERR_EN BIT(14) 159*4882a593Smuzhiyun /* INTR_CLR*/ 160*4882a593Smuzhiyun #define INTR_CLR_INTR_FRM_ST_CLR BIT(0) 161*4882a593Smuzhiyun #define INTR_CLR_INTR_PLL_LOCK_CLR BIT(1) 162*4882a593Smuzhiyun #define INTR_CLR_INTR_HTPDN_CLR BIT(2) 163*4882a593Smuzhiyun #define INTR_CLR_INTR_LOCKN_CLR BIT(3) 164*4882a593Smuzhiyun #define INTR_CLR_INTR_PLL_TIMEOUT_CLR BIT(4) 165*4882a593Smuzhiyun #define INTR_CLR_INTR_HTPDN_TIMEOUT_CLR BIT(5) 166*4882a593Smuzhiyun #define INTR_CLR_INTR_LOCKN_TIMEOUT_CLR BIT(6) 167*4882a593Smuzhiyun #define INTR_CLR_INTR_LINE_FLAG0_CLR BIT(8) 168*4882a593Smuzhiyun #define INTR_CLR_INTR_LINE_FLAG1_CLR BIT(9) 169*4882a593Smuzhiyun #define INTR_CLR_INTR_AFIFO_OVERFLOW_CLR BIT(10) 170*4882a593Smuzhiyun #define INTR_CLR_INTR_AFIFO_UNDERFLOW_CLR BIT(11) 171*4882a593Smuzhiyun #define INTR_CLR_INTR_PLL_ERR_CLR BIT(12) 172*4882a593Smuzhiyun #define INTR_CLR_INTR_HTPDN_ERR_CLR BIT(13) 173*4882a593Smuzhiyun #define INTR_CLR_INTR_LOCKN_ERR_CLR BIT(14) 174*4882a593Smuzhiyun /* INTR_RAW_STATUS */ 175*4882a593Smuzhiyun #define INTR_RAW_STATUS_RAW_INTR_FRM_ST BIT(0) 176*4882a593Smuzhiyun #define INTR_RAW_STATUS_RAW_INTR_PLL_LOCK BIT(1) 177*4882a593Smuzhiyun #define INTR_RAW_STATUS_RAW_INTR_HTPDN BIT(2) 178*4882a593Smuzhiyun #define INTR_RAW_STATUS_RAW_INTR_LOCKN BIT(3) 179*4882a593Smuzhiyun #define INTR_RAW_STATUS_RAW_INTR_PLL_TIMEOUT BIT(4) 180*4882a593Smuzhiyun #define INTR_RAW_STATUS_RAW_INTR_HTPDN_TIMEOUT BIT(5) 181*4882a593Smuzhiyun #define INTR_RAW_STATUS_RAW_INTR_LOCKN_TIMEOUT BIT(6) 182*4882a593Smuzhiyun #define INTR_RAW_STATUS_RAW_INTR_LINE_FLAG0 BIT(8) 183*4882a593Smuzhiyun #define INTR_RAW_STATUS_RAW_INTR_LINE_FLAG1 BIT(9) 184*4882a593Smuzhiyun #define INTR_RAW_STATUS_RAW_INTR_AFIFO_OVERFLOW BIT(10) 185*4882a593Smuzhiyun #define INTR_RAW_STATUS_RAW_INTR_AFIFO_UNDERFLOW BIT(11) 186*4882a593Smuzhiyun #define INTR_RAW_STATUS_RAW_INTR_PLL_ERR BIT(12) 187*4882a593Smuzhiyun #define INTR_RAW_STATUS_RAW_INTR_HTPDN_ERR BIT(13) 188*4882a593Smuzhiyun #define INTR_RAW_STATUS_RAW_INTR_LOCKN_ERR BIT(14) 189*4882a593Smuzhiyun /* INTR_STATUS */ 190*4882a593Smuzhiyun #define INTR_STATUS_INTR_FRM_ST BIT(0) 191*4882a593Smuzhiyun #define INTR_STATUS_INTR_PLL_LOCK BIT(1) 192*4882a593Smuzhiyun #define INTR_STATUS_INTR_HTPDN BIT(2) 193*4882a593Smuzhiyun #define INTR_STATUS_INTR_LOCKN BIT(3) 194*4882a593Smuzhiyun #define INTR_STATUS_INTR_PLL_TIMEOUT BIT(4) 195*4882a593Smuzhiyun #define INTR_STATUS_INTR_HTPDN_TIMEOUT BIT(5) 196*4882a593Smuzhiyun #define INTR_STATUS_INTR_LOCKN_TIMEOUT BIT(6) 197*4882a593Smuzhiyun #define INTR_STATUS_INTR_LINE_FLAG0 BIT(8) 198*4882a593Smuzhiyun #define INTR_STATUS_INTR_LINE_FLAG1 BIT(9) 199*4882a593Smuzhiyun #define INTR_STATUS_INTR_AFIFO_OVERFLOW BIT(10) 200*4882a593Smuzhiyun #define INTR_STATUS_INTR_AFIFO_UNDERFLOW BIT(11) 201*4882a593Smuzhiyun #define INTR_STATUS_INTR_PLL_ERR BIT(12) 202*4882a593Smuzhiyun #define INTR_STATUS_INTR_HTPDN_ERR BIT(13) 203*4882a593Smuzhiyun #define INTR_STATUS_INTR_LOCKN_ERR BIT(14) 204*4882a593Smuzhiyun 205*4882a593Smuzhiyun /* COLOR_BAR_CTRL */ 206*4882a593Smuzhiyun #define COLOR_BAR_EN BIT(0) 207*4882a593Smuzhiyun 208*4882a593Smuzhiyun #define COLOR_DEPTH_RGB_YUV444_18BIT 0 209*4882a593Smuzhiyun #define COLOR_DEPTH_RGB_YUV444_24BIT 1 210*4882a593Smuzhiyun #define COLOR_DEPTH_RGB_YUV444_30BIT 2 211*4882a593Smuzhiyun #define COLOR_DEPTH_YUV422_16BIT 8 212*4882a593Smuzhiyun #define COLOR_DEPTH_YUV422_20BIT 9 213*4882a593Smuzhiyun 214*4882a593Smuzhiyun int rk628_gvi_parse(struct rk628 *rk628, struct device_node *gvi_np); 215*4882a593Smuzhiyun void rk628_gvi_enable(struct rk628 *rk628); 216*4882a593Smuzhiyun void rk628_gvi_disable(struct rk628 *rk628); 217*4882a593Smuzhiyun 218*4882a593Smuzhiyun #endif 219