summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_regs.h
blob: f7035bf3ec1fa689696b08d3f6fbdbbfd47560c3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
/* Hisilicon Hibmc SoC drm driver
 *
 * Based on the bochs drm driver.
 *
 * Copyright (c) 2016 Huawei Limited.
 *
 * Author:
 *	Rongrong Zou <zourongrong@huawei.com>
 *	Rongrong Zou <zourongrong@gmail.com>
 *	Jianhua Li <lijianhua@huawei.com>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 */

#ifndef HIBMC_DRM_HW_H
#define HIBMC_DRM_HW_H

/* register definition */
#define HIBMC_MISC_CTRL				0x4

#define HIBMC_MSCCTL_LOCALMEM_RESET(x)		((x) << 6)
#define HIBMC_MSCCTL_LOCALMEM_RESET_MASK	0x40

#define HIBMC_CURRENT_GATE			0x000040
#define HIBMC_CURR_GATE_DISPLAY(x)		((x) << 2)
#define HIBMC_CURR_GATE_DISPLAY_MASK		0x4

#define HIBMC_CURR_GATE_LOCALMEM(x)		((x) << 1)
#define HIBMC_CURR_GATE_LOCALMEM_MASK		0x2

#define HIBMC_MODE0_GATE			0x000044
#define HIBMC_MODE1_GATE			0x000048
#define HIBMC_POWER_MODE_CTRL			0x00004C

#define HIBMC_PW_MODE_CTL_OSC_INPUT(x)		((x) << 3)
#define HIBMC_PW_MODE_CTL_OSC_INPUT_MASK	0x8

#define HIBMC_PW_MODE_CTL_MODE(x)		((x) << 0)
#define HIBMC_PW_MODE_CTL_MODE_MASK		0x03
#define HIBMC_PW_MODE_CTL_MODE_SHIFT		0

#define HIBMC_PW_MODE_CTL_MODE_MODE0		0
#define HIBMC_PW_MODE_CTL_MODE_MODE1		1
#define HIBMC_PW_MODE_CTL_MODE_SLEEP		2

#define HIBMC_PANEL_PLL_CTRL			0x00005C
#define HIBMC_CRT_PLL_CTRL			0x000060

#define HIBMC_PLL_CTRL_BYPASS(x)		((x) << 18)
#define HIBMC_PLL_CTRL_BYPASS_MASK		0x40000

#define HIBMC_PLL_CTRL_POWER(x)			((x) << 17)
#define HIBMC_PLL_CTRL_POWER_MASK		0x20000

#define HIBMC_PLL_CTRL_INPUT(x)			((x) << 16)
#define HIBMC_PLL_CTRL_INPUT_MASK		0x10000

#define HIBMC_PLL_CTRL_POD(x)			((x) << 14)
#define HIBMC_PLL_CTRL_POD_MASK			0xC000

#define HIBMC_PLL_CTRL_OD(x)			((x) << 12)
#define HIBMC_PLL_CTRL_OD_MASK			0x3000

#define HIBMC_PLL_CTRL_N(x)			((x) << 8)
#define HIBMC_PLL_CTRL_N_MASK			0xF00

#define HIBMC_PLL_CTRL_M(x)			((x) << 0)
#define HIBMC_PLL_CTRL_M_MASK			0xFF

#define HIBMC_CRT_DISP_CTL			0x80200

#define HIBMC_CRT_DISP_CTL_CRTSELECT(x)		((x) << 25)
#define HIBMC_CRT_DISP_CTL_CRTSELECT_MASK	0x2000000

#define HIBMC_CRTSELECT_CRT			1

#define HIBMC_CRT_DISP_CTL_CLOCK_PHASE(x)	((x) << 14)
#define HIBMC_CRT_DISP_CTL_CLOCK_PHASE_MASK	0x4000

#define HIBMC_CRT_DISP_CTL_VSYNC_PHASE(x)	((x) << 13)
#define HIBMC_CRT_DISP_CTL_VSYNC_PHASE_MASK	0x2000

#define HIBMC_CRT_DISP_CTL_HSYNC_PHASE(x)	((x) << 12)
#define HIBMC_CRT_DISP_CTL_HSYNC_PHASE_MASK	0x1000

#define HIBMC_CRT_DISP_CTL_TIMING(x)		((x) << 8)
#define HIBMC_CRT_DISP_CTL_TIMING_MASK		0x100

#define HIBMC_CRT_DISP_CTL_PLANE(x)		((x) << 2)
#define HIBMC_CRT_DISP_CTL_PLANE_MASK		4

#define HIBMC_CRT_DISP_CTL_FORMAT(x)		((x) << 0)
#define HIBMC_CRT_DISP_CTL_FORMAT_MASK		0x03

#define HIBMC_CRT_FB_ADDRESS			0x080204

#define HIBMC_CRT_FB_WIDTH			0x080208
#define HIBMC_CRT_FB_WIDTH_WIDTH(x)		((x) << 16)
#define HIBMC_CRT_FB_WIDTH_WIDTH_MASK		0x3FFF0000
#define HIBMC_CRT_FB_WIDTH_OFFS(x)		((x) << 0)
#define HIBMC_CRT_FB_WIDTH_OFFS_MASK		0x3FFF

#define HIBMC_CRT_HORZ_TOTAL			0x08020C
#define HIBMC_CRT_HORZ_TOTAL_TOTAL(x)		((x) << 16)
#define HIBMC_CRT_HORZ_TOTAL_TOTAL_MASK		0xFFF0000

#define HIBMC_CRT_HORZ_TOTAL_DISP_END(x)	((x) << 0)
#define HIBMC_CRT_HORZ_TOTAL_DISP_END_MASK	0xFFF

#define HIBMC_CRT_HORZ_SYNC			0x080210
#define HIBMC_CRT_HORZ_SYNC_WIDTH(x)		((x) << 16)
#define HIBMC_CRT_HORZ_SYNC_WIDTH_MASK		0xFF0000

#define HIBMC_CRT_HORZ_SYNC_START(x)		((x) << 0)
#define HIBMC_CRT_HORZ_SYNC_START_MASK		0xFFF

#define HIBMC_CRT_VERT_TOTAL			0x080214
#define HIBMC_CRT_VERT_TOTAL_TOTAL(x)		((x) << 16)
#define HIBMC_CRT_VERT_TOTAL_TOTAL_MASK		0x7FFF0000

#define HIBMC_CRT_VERT_TOTAL_DISP_END(x)	((x) << 0)
#define HIBMC_CRT_VERT_TOTAL_DISP_END_MASK	0x7FF

#define HIBMC_CRT_VERT_SYNC			0x080218
#define HIBMC_CRT_VERT_SYNC_HEIGHT(x)		((x) << 16)
#define HIBMC_CRT_VERT_SYNC_HEIGHT_MASK		0x3F0000

#define HIBMC_CRT_VERT_SYNC_START(x)		((x) << 0)
#define HIBMC_CRT_VERT_SYNC_START_MASK		0x7FF

/* Auto Centering */
#define HIBMC_CRT_AUTO_CENTERING_TL		0x080280
#define HIBMC_CRT_AUTO_CENTERING_TL_TOP(x)	((x) << 16)
#define HIBMC_CRT_AUTO_CENTERING_TL_TOP_MASK	0x7FF0000

#define HIBMC_CRT_AUTO_CENTERING_TL_LEFT(x)	((x) << 0)
#define HIBMC_CRT_AUTO_CENTERING_TL_LEFT_MASK	0x7FF

#define HIBMC_CRT_AUTO_CENTERING_BR		0x080284
#define HIBMC_CRT_AUTO_CENTERING_BR_BOTTOM(x)	((x) << 16)
#define HIBMC_CRT_AUTO_CENTERING_BR_BOTTOM_MASK	0x7FF0000

#define HIBMC_CRT_AUTO_CENTERING_BR_RIGHT(x)	((x) << 0)
#define HIBMC_CRT_AUTO_CENTERING_BR_RIGHT_MASK	0x7FF

/* register to control panel output */
#define HIBMC_DISPLAY_CONTROL_HISILE		0x80288
#define HIBMC_DISPLAY_CONTROL_FPVDDEN(x)	((x) << 0)
#define HIBMC_DISPLAY_CONTROL_PANELDATE(x)	((x) << 1)
#define HIBMC_DISPLAY_CONTROL_FPEN(x)		((x) << 2)
#define HIBMC_DISPLAY_CONTROL_VBIASEN(x)	((x) << 3)

#define HIBMC_RAW_INTERRUPT			0x80290
#define HIBMC_RAW_INTERRUPT_VBLANK(x)		((x) << 2)
#define HIBMC_RAW_INTERRUPT_VBLANK_MASK		0x4

#define HIBMC_RAW_INTERRUPT_EN			0x80298
#define HIBMC_RAW_INTERRUPT_EN_VBLANK(x)	((x) << 2)
#define HIBMC_RAW_INTERRUPT_EN_VBLANK_MASK	0x4

/* register and values for PLL control */
#define CRT_PLL1_HS				0x802a8
#define CRT_PLL1_HS_OUTER_BYPASS(x)		((x) << 30)
#define CRT_PLL1_HS_INTER_BYPASS(x)		((x) << 29)
#define CRT_PLL1_HS_POWERON(x)			((x) << 24)

#define CRT_PLL1_HS_25MHZ			0x23d40f02
#define CRT_PLL1_HS_40MHZ			0x23940801
#define CRT_PLL1_HS_65MHZ			0x23940d01
#define CRT_PLL1_HS_78MHZ			0x23540F82
#define CRT_PLL1_HS_74MHZ			0x23941dc2
#define CRT_PLL1_HS_80MHZ			0x23941001
#define CRT_PLL1_HS_80MHZ_1152			0x23540fc2
#define CRT_PLL1_HS_108MHZ			0x23b41b01
#define CRT_PLL1_HS_162MHZ			0x23480681
#define CRT_PLL1_HS_148MHZ			0x23541dc2
#define CRT_PLL1_HS_193MHZ			0x234807c1

#define CRT_PLL2_HS				0x802ac
#define CRT_PLL2_HS_25MHZ			0x206B851E
#define CRT_PLL2_HS_40MHZ			0x30000000
#define CRT_PLL2_HS_65MHZ			0x40000000
#define CRT_PLL2_HS_78MHZ			0x50E147AE
#define CRT_PLL2_HS_74MHZ			0x602B6AE7
#define CRT_PLL2_HS_80MHZ			0x70000000
#define CRT_PLL2_HS_108MHZ			0x80000000
#define CRT_PLL2_HS_162MHZ			0xA0000000
#define CRT_PLL2_HS_148MHZ			0xB0CCCCCD
#define CRT_PLL2_HS_193MHZ			0xC0872B02

#define HIBMC_FIELD(field, value) (field(value) & field##_MASK)
#endif