12874c5fdSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */ 2109eee2fSJianwei Wang /* 3109eee2fSJianwei Wang * Copyright 2015 Freescale Semiconductor, Inc. 4109eee2fSJianwei Wang * 5109eee2fSJianwei Wang * Freescale DCU drm device driver 6109eee2fSJianwei Wang */ 7109eee2fSJianwei Wang 8109eee2fSJianwei Wang #ifndef __FSL_DCU_DRM_DRV_H__ 9109eee2fSJianwei Wang #define __FSL_DCU_DRM_DRV_H__ 10109eee2fSJianwei Wang 119338203cSLaurent Pinchart #include <drm/drm_encoder.h> 129338203cSLaurent Pinchart 13109eee2fSJianwei Wang #include "fsl_dcu_drm_crtc.h" 14109eee2fSJianwei Wang #include "fsl_dcu_drm_output.h" 15109eee2fSJianwei Wang #include "fsl_dcu_drm_plane.h" 16109eee2fSJianwei Wang 17109eee2fSJianwei Wang #define DCU_DCU_MODE 0x0010 18109eee2fSJianwei Wang #define DCU_MODE_BLEND_ITER(x) ((x) << 20) 19109eee2fSJianwei Wang #define DCU_MODE_RASTER_EN BIT(14) 20109eee2fSJianwei Wang #define DCU_MODE_DCU_MODE(x) (x) 21109eee2fSJianwei Wang #define DCU_MODE_DCU_MODE_MASK 0x03 22109eee2fSJianwei Wang #define DCU_MODE_OFF 0 23109eee2fSJianwei Wang #define DCU_MODE_NORMAL 1 24109eee2fSJianwei Wang #define DCU_MODE_TEST 2 25109eee2fSJianwei Wang #define DCU_MODE_COLORBAR 3 26109eee2fSJianwei Wang 27109eee2fSJianwei Wang #define DCU_BGND 0x0014 28109eee2fSJianwei Wang #define DCU_BGND_R(x) ((x) << 16) 29109eee2fSJianwei Wang #define DCU_BGND_G(x) ((x) << 8) 30109eee2fSJianwei Wang #define DCU_BGND_B(x) (x) 31109eee2fSJianwei Wang 32109eee2fSJianwei Wang #define DCU_DISP_SIZE 0x0018 33109eee2fSJianwei Wang #define DCU_DISP_SIZE_DELTA_Y(x) ((x) << 16) 34109eee2fSJianwei Wang /*Regisiter value 1/16 of horizontal resolution*/ 35109eee2fSJianwei Wang #define DCU_DISP_SIZE_DELTA_X(x) ((x) >> 4) 36109eee2fSJianwei Wang 37109eee2fSJianwei Wang #define DCU_HSYN_PARA 0x001c 38109eee2fSJianwei Wang #define DCU_HSYN_PARA_BP(x) ((x) << 22) 39109eee2fSJianwei Wang #define DCU_HSYN_PARA_PW(x) ((x) << 11) 40109eee2fSJianwei Wang #define DCU_HSYN_PARA_FP(x) (x) 41109eee2fSJianwei Wang 42109eee2fSJianwei Wang #define DCU_VSYN_PARA 0x0020 43109eee2fSJianwei Wang #define DCU_VSYN_PARA_BP(x) ((x) << 22) 44109eee2fSJianwei Wang #define DCU_VSYN_PARA_PW(x) ((x) << 11) 45109eee2fSJianwei Wang #define DCU_VSYN_PARA_FP(x) (x) 46109eee2fSJianwei Wang 47109eee2fSJianwei Wang #define DCU_SYN_POL 0x0024 482c80661dSStefan Agner #define DCU_SYN_POL_INV_PXCK BIT(6) 492c80661dSStefan Agner #define DCU_SYN_POL_NEG BIT(5) 50109eee2fSJianwei Wang #define DCU_SYN_POL_INV_VS_LOW BIT(1) 51109eee2fSJianwei Wang #define DCU_SYN_POL_INV_HS_LOW BIT(0) 52109eee2fSJianwei Wang 53109eee2fSJianwei Wang #define DCU_THRESHOLD 0x0028 54109eee2fSJianwei Wang #define DCU_THRESHOLD_LS_BF_VS(x) ((x) << 16) 55109eee2fSJianwei Wang #define DCU_THRESHOLD_OUT_BUF_HIGH(x) ((x) << 8) 56109eee2fSJianwei Wang #define DCU_THRESHOLD_OUT_BUF_LOW(x) (x) 57109eee2fSJianwei Wang #define BF_VS_VAL 0x03 58109eee2fSJianwei Wang #define BUF_MAX_VAL 0x78 59109eee2fSJianwei Wang #define BUF_MIN_VAL 0x0a 60109eee2fSJianwei Wang 61109eee2fSJianwei Wang #define DCU_INT_STATUS 0x002C 62109eee2fSJianwei Wang #define DCU_INT_STATUS_VSYNC BIT(0) 63109eee2fSJianwei Wang #define DCU_INT_STATUS_UNDRUN BIT(1) 64109eee2fSJianwei Wang #define DCU_INT_STATUS_LSBFVS BIT(2) 65109eee2fSJianwei Wang #define DCU_INT_STATUS_VBLANK BIT(3) 66109eee2fSJianwei Wang #define DCU_INT_STATUS_CRCREADY BIT(4) 67109eee2fSJianwei Wang #define DCU_INT_STATUS_CRCOVERFLOW BIT(5) 68109eee2fSJianwei Wang #define DCU_INT_STATUS_P1FIFOLO BIT(6) 69109eee2fSJianwei Wang #define DCU_INT_STATUS_P1FIFOHI BIT(7) 70109eee2fSJianwei Wang #define DCU_INT_STATUS_P2FIFOLO BIT(8) 71109eee2fSJianwei Wang #define DCU_INT_STATUS_P2FIFOHI BIT(9) 72109eee2fSJianwei Wang #define DCU_INT_STATUS_PROGEND BIT(10) 73109eee2fSJianwei Wang #define DCU_INT_STATUS_IPMERROR BIT(11) 74109eee2fSJianwei Wang #define DCU_INT_STATUS_LYRTRANS BIT(12) 75109eee2fSJianwei Wang #define DCU_INT_STATUS_DMATRANS BIT(14) 76109eee2fSJianwei Wang #define DCU_INT_STATUS_P3FIFOLO BIT(16) 77109eee2fSJianwei Wang #define DCU_INT_STATUS_P3FIFOHI BIT(17) 78109eee2fSJianwei Wang #define DCU_INT_STATUS_P4FIFOLO BIT(18) 79109eee2fSJianwei Wang #define DCU_INT_STATUS_P4FIFOHI BIT(19) 80109eee2fSJianwei Wang #define DCU_INT_STATUS_P1EMPTY BIT(26) 81109eee2fSJianwei Wang #define DCU_INT_STATUS_P2EMPTY BIT(27) 82109eee2fSJianwei Wang #define DCU_INT_STATUS_P3EMPTY BIT(28) 83109eee2fSJianwei Wang #define DCU_INT_STATUS_P4EMPTY BIT(29) 84109eee2fSJianwei Wang 85109eee2fSJianwei Wang #define DCU_INT_MASK 0x0030 86109eee2fSJianwei Wang #define DCU_INT_MASK_VSYNC BIT(0) 87109eee2fSJianwei Wang #define DCU_INT_MASK_UNDRUN BIT(1) 88109eee2fSJianwei Wang #define DCU_INT_MASK_LSBFVS BIT(2) 89109eee2fSJianwei Wang #define DCU_INT_MASK_VBLANK BIT(3) 90109eee2fSJianwei Wang #define DCU_INT_MASK_CRCREADY BIT(4) 91109eee2fSJianwei Wang #define DCU_INT_MASK_CRCOVERFLOW BIT(5) 92109eee2fSJianwei Wang #define DCU_INT_MASK_P1FIFOLO BIT(6) 93109eee2fSJianwei Wang #define DCU_INT_MASK_P1FIFOHI BIT(7) 94109eee2fSJianwei Wang #define DCU_INT_MASK_P2FIFOLO BIT(8) 95109eee2fSJianwei Wang #define DCU_INT_MASK_P2FIFOHI BIT(9) 96109eee2fSJianwei Wang #define DCU_INT_MASK_PROGEND BIT(10) 97109eee2fSJianwei Wang #define DCU_INT_MASK_IPMERROR BIT(11) 98109eee2fSJianwei Wang #define DCU_INT_MASK_LYRTRANS BIT(12) 99109eee2fSJianwei Wang #define DCU_INT_MASK_DMATRANS BIT(14) 100109eee2fSJianwei Wang #define DCU_INT_MASK_P3FIFOLO BIT(16) 101109eee2fSJianwei Wang #define DCU_INT_MASK_P3FIFOHI BIT(17) 102109eee2fSJianwei Wang #define DCU_INT_MASK_P4FIFOLO BIT(18) 103109eee2fSJianwei Wang #define DCU_INT_MASK_P4FIFOHI BIT(19) 104109eee2fSJianwei Wang #define DCU_INT_MASK_P1EMPTY BIT(26) 105109eee2fSJianwei Wang #define DCU_INT_MASK_P2EMPTY BIT(27) 106109eee2fSJianwei Wang #define DCU_INT_MASK_P3EMPTY BIT(28) 107109eee2fSJianwei Wang #define DCU_INT_MASK_P4EMPTY BIT(29) 108109eee2fSJianwei Wang 109109eee2fSJianwei Wang #define DCU_DIV_RATIO 0x0054 110109eee2fSJianwei Wang 111109eee2fSJianwei Wang #define DCU_UPDATE_MODE 0x00cc 112109eee2fSJianwei Wang #define DCU_UPDATE_MODE_MODE BIT(31) 113109eee2fSJianwei Wang #define DCU_UPDATE_MODE_READREG BIT(30) 114109eee2fSJianwei Wang 115109eee2fSJianwei Wang #define DCU_DCFB_MAX 0x300 116109eee2fSJianwei Wang 117109eee2fSJianwei Wang #define DCU_CTRLDESCLN(layer, reg) (0x200 + (reg - 1) * 4 + (layer) * 0x40) 118109eee2fSJianwei Wang 119109eee2fSJianwei Wang #define DCU_LAYER_HEIGHT(x) ((x) << 16) 120109eee2fSJianwei Wang #define DCU_LAYER_WIDTH(x) (x) 121109eee2fSJianwei Wang 122109eee2fSJianwei Wang #define DCU_LAYER_POSY(x) ((x) << 16) 123109eee2fSJianwei Wang #define DCU_LAYER_POSX(x) (x) 124109eee2fSJianwei Wang 125109eee2fSJianwei Wang #define DCU_LAYER_EN BIT(31) 126109eee2fSJianwei Wang #define DCU_LAYER_TILE_EN BIT(30) 127109eee2fSJianwei Wang #define DCU_LAYER_DATA_SEL_CLUT BIT(29) 128109eee2fSJianwei Wang #define DCU_LAYER_SAFETY_EN BIT(28) 129109eee2fSJianwei Wang #define DCU_LAYER_TRANS(x) ((x) << 20) 130109eee2fSJianwei Wang #define DCU_LAYER_BPP(x) ((x) << 16) 131109eee2fSJianwei Wang #define DCU_LAYER_RLE_EN BIT(15) 132109eee2fSJianwei Wang #define DCU_LAYER_LUOFFS(x) ((x) << 4) 133109eee2fSJianwei Wang #define DCU_LAYER_BB_ON BIT(2) 13469855819SStefan Agner #define DCU_LAYER_AB_NONE 0 13569855819SStefan Agner #define DCU_LAYER_AB_CHROMA_KEYING 1 13669855819SStefan Agner #define DCU_LAYER_AB_WHOLE_FRAME 2 137109eee2fSJianwei Wang 138109eee2fSJianwei Wang #define DCU_LAYER_CKMAX_R(x) ((x) << 16) 139109eee2fSJianwei Wang #define DCU_LAYER_CKMAX_G(x) ((x) << 8) 140109eee2fSJianwei Wang #define DCU_LAYER_CKMAX_B(x) (x) 141109eee2fSJianwei Wang 142109eee2fSJianwei Wang #define DCU_LAYER_CKMIN_R(x) ((x) << 16) 143109eee2fSJianwei Wang #define DCU_LAYER_CKMIN_G(x) ((x) << 8) 144109eee2fSJianwei Wang #define DCU_LAYER_CKMIN_B(x) (x) 145109eee2fSJianwei Wang 146109eee2fSJianwei Wang #define DCU_LAYER_TILE_VER(x) ((x) << 16) 147109eee2fSJianwei Wang #define DCU_LAYER_TILE_HOR(x) (x) 148109eee2fSJianwei Wang 149109eee2fSJianwei Wang #define DCU_LAYER_FG_FCOLOR(x) (x) 150109eee2fSJianwei Wang 151109eee2fSJianwei Wang #define DCU_LAYER_BG_BCOLOR(x) (x) 152109eee2fSJianwei Wang 153109eee2fSJianwei Wang #define DCU_LAYER_POST_SKIP(x) ((x) << 16) 154109eee2fSJianwei Wang #define DCU_LAYER_PRE_SKIP(x) (x) 155109eee2fSJianwei Wang 156109eee2fSJianwei Wang #define FSL_DCU_RGB565 4 157109eee2fSJianwei Wang #define FSL_DCU_RGB888 5 158109eee2fSJianwei Wang #define FSL_DCU_ARGB8888 6 159109eee2fSJianwei Wang #define FSL_DCU_ARGB1555 11 160109eee2fSJianwei Wang #define FSL_DCU_ARGB4444 12 161109eee2fSJianwei Wang #define FSL_DCU_YUV422 14 162109eee2fSJianwei Wang 163*0e5bcf51SMatthias Schiffer #define SCFG_PIXCLKCR 0x28 164*0e5bcf51SMatthias Schiffer #define SCFG_PIXCLKCR_PXCEN BIT(31) 165*0e5bcf51SMatthias Schiffer 166109eee2fSJianwei Wang #define VF610_LAYER_REG_NUM 9 167109eee2fSJianwei Wang #define LS1021A_LAYER_REG_NUM 10 168109eee2fSJianwei Wang 169109eee2fSJianwei Wang struct clk; 170109eee2fSJianwei Wang struct device; 171109eee2fSJianwei Wang struct drm_device; 172109eee2fSJianwei Wang 173109eee2fSJianwei Wang struct fsl_dcu_soc_data { 174109eee2fSJianwei Wang const char *name; 175109eee2fSJianwei Wang /*total layer number*/ 176109eee2fSJianwei Wang unsigned int total_layer; 177109eee2fSJianwei Wang /*max layer number DCU supported*/ 178109eee2fSJianwei Wang unsigned int max_layer; 1796aaf5a49SStefan Agner unsigned int layer_regs; 180109eee2fSJianwei Wang }; 181109eee2fSJianwei Wang 182109eee2fSJianwei Wang struct fsl_dcu_drm_device { 183109eee2fSJianwei Wang struct device *dev; 184109eee2fSJianwei Wang struct device_node *np; 185109eee2fSJianwei Wang struct regmap *regmap; 186109eee2fSJianwei Wang int irq; 187109eee2fSJianwei Wang struct clk *clk; 188f93500f4SStefan Agner struct clk *pix_clk; 189fb127b79SStefan Agner struct fsl_tcon *tcon; 190109eee2fSJianwei Wang /*protects hardware register*/ 191109eee2fSJianwei Wang spinlock_t irq_lock; 192109eee2fSJianwei Wang struct drm_device *drm; 193109eee2fSJianwei Wang struct drm_crtc crtc; 194109eee2fSJianwei Wang struct drm_encoder encoder; 195109eee2fSJianwei Wang struct fsl_dcu_drm_connector connector; 196109eee2fSJianwei Wang const struct fsl_dcu_soc_data *soc; 197109eee2fSJianwei Wang }; 198109eee2fSJianwei Wang 199109eee2fSJianwei Wang int fsl_dcu_drm_modeset_init(struct fsl_dcu_drm_device *fsl_dev); 200109eee2fSJianwei Wang 201109eee2fSJianwei Wang #endif /* __FSL_DCU_DRM_DRV_H__ */ 202