Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-or-later */
0002 /* Hisilicon Hibmc SoC drm driver
0003  *
0004  * Based on the bochs drm driver.
0005  *
0006  * Copyright (c) 2016 Huawei Limited.
0007  *
0008  * Author:
0009  *  Rongrong Zou <zourongrong@huawei.com>
0010  *  Rongrong Zou <zourongrong@gmail.com>
0011  *  Jianhua Li <lijianhua@huawei.com>
0012  */
0013 
0014 #ifndef HIBMC_DRM_HW_H
0015 #define HIBMC_DRM_HW_H
0016 
0017 /* register definition */
0018 #define HIBMC_MISC_CTRL             0x4
0019 
0020 #define HIBMC_MSCCTL_LOCALMEM_RESET(x)      ((x) << 6)
0021 #define HIBMC_MSCCTL_LOCALMEM_RESET_MASK    0x40
0022 
0023 #define HIBMC_CURRENT_GATE          0x000040
0024 #define HIBMC_CURR_GATE_DISPLAY(x)      ((x) << 2)
0025 #define HIBMC_CURR_GATE_DISPLAY_MASK        0x4
0026 
0027 #define HIBMC_CURR_GATE_LOCALMEM(x)     ((x) << 1)
0028 #define HIBMC_CURR_GATE_LOCALMEM_MASK       0x2
0029 
0030 #define HIBMC_MODE0_GATE            0x000044
0031 #define HIBMC_MODE1_GATE            0x000048
0032 #define HIBMC_POWER_MODE_CTRL           0x00004C
0033 
0034 #define HIBMC_PW_MODE_CTL_OSC_INPUT(x)      ((x) << 3)
0035 #define HIBMC_PW_MODE_CTL_OSC_INPUT_MASK    0x8
0036 
0037 #define HIBMC_PW_MODE_CTL_MODE(x)       ((x) << 0)
0038 #define HIBMC_PW_MODE_CTL_MODE_MASK     0x03
0039 #define HIBMC_PW_MODE_CTL_MODE_SHIFT        0
0040 
0041 #define HIBMC_PW_MODE_CTL_MODE_MODE0        0
0042 #define HIBMC_PW_MODE_CTL_MODE_MODE1        1
0043 #define HIBMC_PW_MODE_CTL_MODE_SLEEP        2
0044 
0045 #define HIBMC_PANEL_PLL_CTRL            0x00005C
0046 #define HIBMC_CRT_PLL_CTRL          0x000060
0047 
0048 #define HIBMC_PLL_CTRL_BYPASS(x)        ((x) << 18)
0049 #define HIBMC_PLL_CTRL_BYPASS_MASK      0x40000
0050 
0051 #define HIBMC_PLL_CTRL_POWER(x)         ((x) << 17)
0052 #define HIBMC_PLL_CTRL_POWER_MASK       0x20000
0053 
0054 #define HIBMC_PLL_CTRL_INPUT(x)         ((x) << 16)
0055 #define HIBMC_PLL_CTRL_INPUT_MASK       0x10000
0056 
0057 #define HIBMC_PLL_CTRL_POD(x)           ((x) << 14)
0058 #define HIBMC_PLL_CTRL_POD_MASK         0xC000
0059 
0060 #define HIBMC_PLL_CTRL_OD(x)            ((x) << 12)
0061 #define HIBMC_PLL_CTRL_OD_MASK          0x3000
0062 
0063 #define HIBMC_PLL_CTRL_N(x)         ((x) << 8)
0064 #define HIBMC_PLL_CTRL_N_MASK           0xF00
0065 
0066 #define HIBMC_PLL_CTRL_M(x)         ((x) << 0)
0067 #define HIBMC_PLL_CTRL_M_MASK           0xFF
0068 
0069 #define HIBMC_CRT_DISP_CTL          0x80200
0070 
0071 #define HIBMC_CRT_DISP_CTL_DPMS(x)      ((x) << 30)
0072 #define HIBMC_CRT_DISP_CTL_DPMS_MASK        0xc0000000
0073 
0074 #define HIBMC_CRT_DPMS_ON           0
0075 #define HIBMC_CRT_DPMS_OFF          3
0076 
0077 #define HIBMC_CRT_DISP_CTL_CRTSELECT(x)     ((x) << 25)
0078 #define HIBMC_CRT_DISP_CTL_CRTSELECT_MASK   0x2000000
0079 
0080 #define HIBMC_CRTSELECT_CRT         1
0081 
0082 #define HIBMC_CRT_DISP_CTL_CLOCK_PHASE(x)   ((x) << 14)
0083 #define HIBMC_CRT_DISP_CTL_CLOCK_PHASE_MASK 0x4000
0084 
0085 #define HIBMC_CRT_DISP_CTL_VSYNC_PHASE(x)   ((x) << 13)
0086 #define HIBMC_CRT_DISP_CTL_VSYNC_PHASE_MASK 0x2000
0087 
0088 #define HIBMC_CRT_DISP_CTL_HSYNC_PHASE(x)   ((x) << 12)
0089 #define HIBMC_CRT_DISP_CTL_HSYNC_PHASE_MASK 0x1000
0090 
0091 #define HIBMC_CRT_DISP_CTL_TIMING(x)        ((x) << 8)
0092 #define HIBMC_CRT_DISP_CTL_TIMING_MASK      0x100
0093 
0094 #define HIBMC_CTL_DISP_CTL_GAMMA(x)     ((x) << 3)
0095 #define HIBMC_CTL_DISP_CTL_GAMMA_MASK       0x08
0096 
0097 #define HIBMC_CRT_DISP_CTL_PLANE(x)     ((x) << 2)
0098 #define HIBMC_CRT_DISP_CTL_PLANE_MASK       4
0099 
0100 #define HIBMC_CRT_DISP_CTL_FORMAT(x)        ((x) << 0)
0101 #define HIBMC_CRT_DISP_CTL_FORMAT_MASK      0x03
0102 
0103 #define HIBMC_CRT_FB_ADDRESS            0x080204
0104 
0105 #define HIBMC_CRT_FB_WIDTH          0x080208
0106 #define HIBMC_CRT_FB_WIDTH_WIDTH(x)     ((x) << 16)
0107 #define HIBMC_CRT_FB_WIDTH_WIDTH_MASK       0x3FFF0000
0108 #define HIBMC_CRT_FB_WIDTH_OFFS(x)      ((x) << 0)
0109 #define HIBMC_CRT_FB_WIDTH_OFFS_MASK        0x3FFF
0110 
0111 #define HIBMC_CRT_HORZ_TOTAL            0x08020C
0112 #define HIBMC_CRT_HORZ_TOTAL_TOTAL(x)       ((x) << 16)
0113 #define HIBMC_CRT_HORZ_TOTAL_TOTAL_MASK     0xFFF0000
0114 
0115 #define HIBMC_CRT_HORZ_TOTAL_DISP_END(x)    ((x) << 0)
0116 #define HIBMC_CRT_HORZ_TOTAL_DISP_END_MASK  0xFFF
0117 
0118 #define HIBMC_CRT_HORZ_SYNC         0x080210
0119 #define HIBMC_CRT_HORZ_SYNC_WIDTH(x)        ((x) << 16)
0120 #define HIBMC_CRT_HORZ_SYNC_WIDTH_MASK      0xFF0000
0121 
0122 #define HIBMC_CRT_HORZ_SYNC_START(x)        ((x) << 0)
0123 #define HIBMC_CRT_HORZ_SYNC_START_MASK      0xFFF
0124 
0125 #define HIBMC_CRT_VERT_TOTAL            0x080214
0126 #define HIBMC_CRT_VERT_TOTAL_TOTAL(x)       ((x) << 16)
0127 #define HIBMC_CRT_VERT_TOTAL_TOTAL_MASK     0x7FFF0000
0128 
0129 #define HIBMC_CRT_VERT_TOTAL_DISP_END(x)    ((x) << 0)
0130 #define HIBMC_CRT_VERT_TOTAL_DISP_END_MASK  0x7FF
0131 
0132 #define HIBMC_CRT_VERT_SYNC         0x080218
0133 #define HIBMC_CRT_VERT_SYNC_HEIGHT(x)       ((x) << 16)
0134 #define HIBMC_CRT_VERT_SYNC_HEIGHT_MASK     0x3F0000
0135 
0136 #define HIBMC_CRT_VERT_SYNC_START(x)        ((x) << 0)
0137 #define HIBMC_CRT_VERT_SYNC_START_MASK      0x7FF
0138 
0139 /* Auto Centering */
0140 #define HIBMC_CRT_AUTO_CENTERING_TL     0x080280
0141 #define HIBMC_CRT_AUTO_CENTERING_TL_TOP(x)  ((x) << 16)
0142 #define HIBMC_CRT_AUTO_CENTERING_TL_TOP_MASK    0x7FF0000
0143 
0144 #define HIBMC_CRT_AUTO_CENTERING_TL_LEFT(x) ((x) << 0)
0145 #define HIBMC_CRT_AUTO_CENTERING_TL_LEFT_MASK   0x7FF
0146 
0147 #define HIBMC_CRT_AUTO_CENTERING_BR     0x080284
0148 #define HIBMC_CRT_AUTO_CENTERING_BR_BOTTOM(x)   ((x) << 16)
0149 #define HIBMC_CRT_AUTO_CENTERING_BR_BOTTOM_MASK 0x7FF0000
0150 
0151 #define HIBMC_CRT_AUTO_CENTERING_BR_RIGHT(x)    ((x) << 0)
0152 #define HIBMC_CRT_AUTO_CENTERING_BR_RIGHT_MASK  0x7FF
0153 
0154 /* register to control panel output */
0155 #define HIBMC_DISPLAY_CONTROL_HISILE        0x80288
0156 #define HIBMC_DISPLAY_CONTROL_FPVDDEN(x)    ((x) << 0)
0157 #define HIBMC_DISPLAY_CONTROL_PANELDATE(x)  ((x) << 1)
0158 #define HIBMC_DISPLAY_CONTROL_FPEN(x)       ((x) << 2)
0159 #define HIBMC_DISPLAY_CONTROL_VBIASEN(x)    ((x) << 3)
0160 
0161 #define HIBMC_RAW_INTERRUPT         0x80290
0162 #define HIBMC_RAW_INTERRUPT_VBLANK(x)       ((x) << 2)
0163 #define HIBMC_RAW_INTERRUPT_VBLANK_MASK     0x4
0164 
0165 #define HIBMC_RAW_INTERRUPT_EN          0x80298
0166 #define HIBMC_RAW_INTERRUPT_EN_VBLANK(x)    ((x) << 2)
0167 #define HIBMC_RAW_INTERRUPT_EN_VBLANK_MASK  0x4
0168 
0169 /* register and values for PLL control */
0170 #define CRT_PLL1_HS             0x802a8
0171 #define CRT_PLL1_HS_OUTER_BYPASS(x)     ((x) << 30)
0172 #define CRT_PLL1_HS_INTER_BYPASS(x)     ((x) << 29)
0173 #define CRT_PLL1_HS_POWERON(x)          ((x) << 24)
0174 
0175 #define CRT_PLL1_HS_25MHZ           0x23d40f02
0176 #define CRT_PLL1_HS_40MHZ           0x23940801
0177 #define CRT_PLL1_HS_65MHZ           0x23940d01
0178 #define CRT_PLL1_HS_78MHZ           0x23540F82
0179 #define CRT_PLL1_HS_74MHZ           0x23941dc2
0180 #define CRT_PLL1_HS_80MHZ           0x23941001
0181 #define CRT_PLL1_HS_80MHZ_1152          0x23540fc2
0182 #define CRT_PLL1_HS_106MHZ          0x237C1641
0183 #define CRT_PLL1_HS_108MHZ          0x23b41b01
0184 #define CRT_PLL1_HS_162MHZ          0x23480681
0185 #define CRT_PLL1_HS_148MHZ          0x23541dc2
0186 #define CRT_PLL1_HS_193MHZ          0x234807c1
0187 
0188 #define CRT_PLL2_HS             0x802ac
0189 #define CRT_PLL2_HS_25MHZ           0x206B851E
0190 #define CRT_PLL2_HS_40MHZ           0x30000000
0191 #define CRT_PLL2_HS_65MHZ           0x40000000
0192 #define CRT_PLL2_HS_78MHZ           0x50E147AE
0193 #define CRT_PLL2_HS_74MHZ           0x602B6AE7
0194 #define CRT_PLL2_HS_80MHZ           0x70000000
0195 #define CRT_PLL2_HS_106MHZ          0x0075c28f
0196 #define CRT_PLL2_HS_108MHZ          0x80000000
0197 #define CRT_PLL2_HS_162MHZ          0xA0000000
0198 #define CRT_PLL2_HS_148MHZ          0xB0CCCCCD
0199 #define CRT_PLL2_HS_193MHZ          0xC0872B02
0200 
0201 #define HIBMC_CRT_PALETTE                       0x80C00
0202 
0203 #define HIBMC_FIELD(field, value) (field(value) & field##_MASK)
0204 #endif