1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 /* Hisilicon Hibmc SoC drm driver
3  *
4  * Based on the bochs drm driver.
5  *
6  * Copyright (c) 2016 Huawei Limited.
7  *
8  * Author:
9  *	Rongrong Zou <zourongrong@huawei.com>
10  *	Rongrong Zou <zourongrong@gmail.com>
11  *	Jianhua Li <lijianhua@huawei.com>
12  */
13 
14 #ifndef HIBMC_DRM_HW_H
15 #define HIBMC_DRM_HW_H
16 
17 /* register definition */
18 #define HIBMC_MISC_CTRL				0x4
19 
20 #define HIBMC_MSCCTL_LOCALMEM_RESET(x)		((x) << 6)
21 #define HIBMC_MSCCTL_LOCALMEM_RESET_MASK	0x40
22 
23 #define HIBMC_CURRENT_GATE			0x000040
24 #define HIBMC_CURR_GATE_DISPLAY(x)		((x) << 2)
25 #define HIBMC_CURR_GATE_DISPLAY_MASK		0x4
26 
27 #define HIBMC_CURR_GATE_LOCALMEM(x)		((x) << 1)
28 #define HIBMC_CURR_GATE_LOCALMEM_MASK		0x2
29 
30 #define HIBMC_MODE0_GATE			0x000044
31 #define HIBMC_MODE1_GATE			0x000048
32 #define HIBMC_POWER_MODE_CTRL			0x00004C
33 
34 #define HIBMC_PW_MODE_CTL_OSC_INPUT(x)		((x) << 3)
35 #define HIBMC_PW_MODE_CTL_OSC_INPUT_MASK	0x8
36 
37 #define HIBMC_PW_MODE_CTL_MODE(x)		((x) << 0)
38 #define HIBMC_PW_MODE_CTL_MODE_MASK		0x03
39 #define HIBMC_PW_MODE_CTL_MODE_SHIFT		0
40 
41 #define HIBMC_PW_MODE_CTL_MODE_MODE0		0
42 #define HIBMC_PW_MODE_CTL_MODE_MODE1		1
43 #define HIBMC_PW_MODE_CTL_MODE_SLEEP		2
44 
45 #define HIBMC_PANEL_PLL_CTRL			0x00005C
46 #define HIBMC_CRT_PLL_CTRL			0x000060
47 
48 #define HIBMC_PLL_CTRL_BYPASS(x)		((x) << 18)
49 #define HIBMC_PLL_CTRL_BYPASS_MASK		0x40000
50 
51 #define HIBMC_PLL_CTRL_POWER(x)			((x) << 17)
52 #define HIBMC_PLL_CTRL_POWER_MASK		0x20000
53 
54 #define HIBMC_PLL_CTRL_INPUT(x)			((x) << 16)
55 #define HIBMC_PLL_CTRL_INPUT_MASK		0x10000
56 
57 #define HIBMC_PLL_CTRL_POD(x)			((x) << 14)
58 #define HIBMC_PLL_CTRL_POD_MASK			0xC000
59 
60 #define HIBMC_PLL_CTRL_OD(x)			((x) << 12)
61 #define HIBMC_PLL_CTRL_OD_MASK			0x3000
62 
63 #define HIBMC_PLL_CTRL_N(x)			((x) << 8)
64 #define HIBMC_PLL_CTRL_N_MASK			0xF00
65 
66 #define HIBMC_PLL_CTRL_M(x)			((x) << 0)
67 #define HIBMC_PLL_CTRL_M_MASK			0xFF
68 
69 #define HIBMC_CRT_DISP_CTL			0x80200
70 
71 #define HIBMC_CRT_DISP_CTL_DPMS(x)		((x) << 30)
72 #define HIBMC_CRT_DISP_CTL_DPMS_MASK		0xc0000000
73 
74 #define HIBMC_CRT_DPMS_ON			0
75 #define HIBMC_CRT_DPMS_OFF			3
76 
77 #define HIBMC_CRT_DISP_CTL_CRTSELECT(x)		((x) << 25)
78 #define HIBMC_CRT_DISP_CTL_CRTSELECT_MASK	0x2000000
79 
80 #define HIBMC_CRTSELECT_CRT			1
81 
82 #define HIBMC_CRT_DISP_CTL_CLOCK_PHASE(x)	((x) << 14)
83 #define HIBMC_CRT_DISP_CTL_CLOCK_PHASE_MASK	0x4000
84 
85 #define HIBMC_CRT_DISP_CTL_VSYNC_PHASE(x)	((x) << 13)
86 #define HIBMC_CRT_DISP_CTL_VSYNC_PHASE_MASK	0x2000
87 
88 #define HIBMC_CRT_DISP_CTL_HSYNC_PHASE(x)	((x) << 12)
89 #define HIBMC_CRT_DISP_CTL_HSYNC_PHASE_MASK	0x1000
90 
91 #define HIBMC_CRT_DISP_CTL_TIMING(x)		((x) << 8)
92 #define HIBMC_CRT_DISP_CTL_TIMING_MASK		0x100
93 
94 #define HIBMC_CTL_DISP_CTL_GAMMA(x)		((x) << 3)
95 #define HIBMC_CTL_DISP_CTL_GAMMA_MASK		0x08
96 
97 #define HIBMC_CRT_DISP_CTL_PLANE(x)		((x) << 2)
98 #define HIBMC_CRT_DISP_CTL_PLANE_MASK		4
99 
100 #define HIBMC_CRT_DISP_CTL_FORMAT(x)		((x) << 0)
101 #define HIBMC_CRT_DISP_CTL_FORMAT_MASK		0x03
102 
103 #define HIBMC_CRT_FB_ADDRESS			0x080204
104 
105 #define HIBMC_CRT_FB_WIDTH			0x080208
106 #define HIBMC_CRT_FB_WIDTH_WIDTH(x)		((x) << 16)
107 #define HIBMC_CRT_FB_WIDTH_WIDTH_MASK		0x3FFF0000
108 #define HIBMC_CRT_FB_WIDTH_OFFS(x)		((x) << 0)
109 #define HIBMC_CRT_FB_WIDTH_OFFS_MASK		0x3FFF
110 
111 #define HIBMC_CRT_HORZ_TOTAL			0x08020C
112 #define HIBMC_CRT_HORZ_TOTAL_TOTAL(x)		((x) << 16)
113 #define HIBMC_CRT_HORZ_TOTAL_TOTAL_MASK		0xFFF0000
114 
115 #define HIBMC_CRT_HORZ_TOTAL_DISP_END(x)	((x) << 0)
116 #define HIBMC_CRT_HORZ_TOTAL_DISP_END_MASK	0xFFF
117 
118 #define HIBMC_CRT_HORZ_SYNC			0x080210
119 #define HIBMC_CRT_HORZ_SYNC_WIDTH(x)		((x) << 16)
120 #define HIBMC_CRT_HORZ_SYNC_WIDTH_MASK		0xFF0000
121 
122 #define HIBMC_CRT_HORZ_SYNC_START(x)		((x) << 0)
123 #define HIBMC_CRT_HORZ_SYNC_START_MASK		0xFFF
124 
125 #define HIBMC_CRT_VERT_TOTAL			0x080214
126 #define HIBMC_CRT_VERT_TOTAL_TOTAL(x)		((x) << 16)
127 #define HIBMC_CRT_VERT_TOTAL_TOTAL_MASK		0x7FFF0000
128 
129 #define HIBMC_CRT_VERT_TOTAL_DISP_END(x)	((x) << 0)
130 #define HIBMC_CRT_VERT_TOTAL_DISP_END_MASK	0x7FF
131 
132 #define HIBMC_CRT_VERT_SYNC			0x080218
133 #define HIBMC_CRT_VERT_SYNC_HEIGHT(x)		((x) << 16)
134 #define HIBMC_CRT_VERT_SYNC_HEIGHT_MASK		0x3F0000
135 
136 #define HIBMC_CRT_VERT_SYNC_START(x)		((x) << 0)
137 #define HIBMC_CRT_VERT_SYNC_START_MASK		0x7FF
138 
139 /* Auto Centering */
140 #define HIBMC_CRT_AUTO_CENTERING_TL		0x080280
141 #define HIBMC_CRT_AUTO_CENTERING_TL_TOP(x)	((x) << 16)
142 #define HIBMC_CRT_AUTO_CENTERING_TL_TOP_MASK	0x7FF0000
143 
144 #define HIBMC_CRT_AUTO_CENTERING_TL_LEFT(x)	((x) << 0)
145 #define HIBMC_CRT_AUTO_CENTERING_TL_LEFT_MASK	0x7FF
146 
147 #define HIBMC_CRT_AUTO_CENTERING_BR		0x080284
148 #define HIBMC_CRT_AUTO_CENTERING_BR_BOTTOM(x)	((x) << 16)
149 #define HIBMC_CRT_AUTO_CENTERING_BR_BOTTOM_MASK	0x7FF0000
150 
151 #define HIBMC_CRT_AUTO_CENTERING_BR_RIGHT(x)	((x) << 0)
152 #define HIBMC_CRT_AUTO_CENTERING_BR_RIGHT_MASK	0x7FF
153 
154 /* register to control panel output */
155 #define HIBMC_DISPLAY_CONTROL_HISILE		0x80288
156 #define HIBMC_DISPLAY_CONTROL_FPVDDEN(x)	((x) << 0)
157 #define HIBMC_DISPLAY_CONTROL_PANELDATE(x)	((x) << 1)
158 #define HIBMC_DISPLAY_CONTROL_FPEN(x)		((x) << 2)
159 #define HIBMC_DISPLAY_CONTROL_VBIASEN(x)	((x) << 3)
160 
161 #define HIBMC_RAW_INTERRUPT			0x80290
162 #define HIBMC_RAW_INTERRUPT_VBLANK(x)		((x) << 2)
163 #define HIBMC_RAW_INTERRUPT_VBLANK_MASK		0x4
164 
165 #define HIBMC_RAW_INTERRUPT_EN			0x80298
166 #define HIBMC_RAW_INTERRUPT_EN_VBLANK(x)	((x) << 2)
167 #define HIBMC_RAW_INTERRUPT_EN_VBLANK_MASK	0x4
168 
169 /* register and values for PLL control */
170 #define CRT_PLL1_HS				0x802a8
171 #define CRT_PLL1_HS_OUTER_BYPASS(x)		((x) << 30)
172 #define CRT_PLL1_HS_INTER_BYPASS(x)		((x) << 29)
173 #define CRT_PLL1_HS_POWERON(x)			((x) << 24)
174 
175 #define CRT_PLL1_HS_25MHZ			0x23d40f02
176 #define CRT_PLL1_HS_40MHZ			0x23940801
177 #define CRT_PLL1_HS_65MHZ			0x23940d01
178 #define CRT_PLL1_HS_78MHZ			0x23540F82
179 #define CRT_PLL1_HS_74MHZ			0x23941dc2
180 #define CRT_PLL1_HS_80MHZ			0x23941001
181 #define CRT_PLL1_HS_80MHZ_1152			0x23540fc2
182 #define CRT_PLL1_HS_106MHZ			0x237C1641
183 #define CRT_PLL1_HS_108MHZ			0x23b41b01
184 #define CRT_PLL1_HS_162MHZ			0x23480681
185 #define CRT_PLL1_HS_148MHZ			0x23541dc2
186 #define CRT_PLL1_HS_193MHZ			0x234807c1
187 
188 #define CRT_PLL2_HS				0x802ac
189 #define CRT_PLL2_HS_25MHZ			0x206B851E
190 #define CRT_PLL2_HS_40MHZ			0x30000000
191 #define CRT_PLL2_HS_65MHZ			0x40000000
192 #define CRT_PLL2_HS_78MHZ			0x50E147AE
193 #define CRT_PLL2_HS_74MHZ			0x602B6AE7
194 #define CRT_PLL2_HS_80MHZ			0x70000000
195 #define CRT_PLL2_HS_106MHZ			0x0075c28f
196 #define CRT_PLL2_HS_108MHZ			0x80000000
197 #define CRT_PLL2_HS_162MHZ			0xA0000000
198 #define CRT_PLL2_HS_148MHZ			0xB0CCCCCD
199 #define CRT_PLL2_HS_193MHZ			0xC0872B02
200 
201 #define HIBMC_CRT_PALETTE                       0x80C00
202 
203 #define HIBMC_FIELD(field, value) (field(value) & field##_MASK)
204 #endif
205