1170525Syongari/* SPDX-License-Identifier: GPL-2.0-or-later */
2170525Syongari/* Hisilicon Hibmc SoC drm driver
3170525Syongari *
4170525Syongari * Based on the bochs drm driver.
5170525Syongari *
6170525Syongari * Copyright (c) 2016 Huawei Limited.
7170525Syongari *
8170525Syongari * Author:
9170525Syongari *	Rongrong Zou <zourongrong@huawei.com>
10170525Syongari *	Rongrong Zou <zourongrong@gmail.com>
11170525Syongari *	Jianhua Li <lijianhua@huawei.com>
12170525Syongari */
13170525Syongari
14170525Syongari#ifndef HIBMC_DRM_HW_H
15170525Syongari#define HIBMC_DRM_HW_H
16170525Syongari
17170525Syongari/* register definition */
18170525Syongari#define HIBMC_MISC_CTRL				0x4
19170525Syongari
20170525Syongari#define HIBMC_MSCCTL_LOCALMEM_RESET(x)		((x) << 6)
21170525Syongari#define HIBMC_MSCCTL_LOCALMEM_RESET_MASK	0x40
22170525Syongari
23170525Syongari#define HIBMC_CURRENT_GATE			0x000040
24170525Syongari#define HIBMC_CURR_GATE_DISPLAY(x)		((x) << 2)
25170525Syongari#define HIBMC_CURR_GATE_DISPLAY_MASK		0x4
26170525Syongari
27170525Syongari#define HIBMC_CURR_GATE_LOCALMEM(x)		((x) << 1)
28170525Syongari#define HIBMC_CURR_GATE_LOCALMEM_MASK		0x2
29170525Syongari
30170525Syongari#define HIBMC_MODE0_GATE			0x000044
31170525Syongari#define HIBMC_MODE1_GATE			0x000048
32170525Syongari#define HIBMC_POWER_MODE_CTRL			0x00004C
33170525Syongari
34170525Syongari#define HIBMC_PW_MODE_CTL_OSC_INPUT(x)		((x) << 3)
35170525Syongari#define HIBMC_PW_MODE_CTL_OSC_INPUT_MASK	0x8
36170525Syongari
37170525Syongari#define HIBMC_PW_MODE_CTL_MODE(x)		((x) << 0)
38170525Syongari#define HIBMC_PW_MODE_CTL_MODE_MASK		0x03
39170525Syongari#define HIBMC_PW_MODE_CTL_MODE_SHIFT		0
40170525Syongari
41170525Syongari#define HIBMC_PW_MODE_CTL_MODE_MODE0		0
42170525Syongari#define HIBMC_PW_MODE_CTL_MODE_MODE1		1
43170525Syongari#define HIBMC_PW_MODE_CTL_MODE_SLEEP		2
44170525Syongari
45170525Syongari#define HIBMC_PANEL_PLL_CTRL			0x00005C
46170525Syongari#define HIBMC_CRT_PLL_CTRL			0x000060
47170525Syongari
48170525Syongari#define HIBMC_PLL_CTRL_BYPASS(x)		((x) << 18)
49170525Syongari#define HIBMC_PLL_CTRL_BYPASS_MASK		0x40000
50170525Syongari
51170525Syongari#define HIBMC_PLL_CTRL_POWER(x)			((x) << 17)
52170525Syongari#define HIBMC_PLL_CTRL_POWER_MASK		0x20000
53170525Syongari
54170525Syongari#define HIBMC_PLL_CTRL_INPUT(x)			((x) << 16)
55170525Syongari#define HIBMC_PLL_CTRL_INPUT_MASK		0x10000
56170525Syongari
57170525Syongari#define HIBMC_PLL_CTRL_POD(x)			((x) << 14)
58170525Syongari#define HIBMC_PLL_CTRL_POD_MASK			0xC000
59170525Syongari
60170525Syongari#define HIBMC_PLL_CTRL_OD(x)			((x) << 12)
61170525Syongari#define HIBMC_PLL_CTRL_OD_MASK			0x3000
62170525Syongari
63170525Syongari#define HIBMC_PLL_CTRL_N(x)			((x) << 8)
64170525Syongari#define HIBMC_PLL_CTRL_N_MASK			0xF00
65170525Syongari
66170525Syongari#define HIBMC_PLL_CTRL_M(x)			((x) << 0)
67170525Syongari#define HIBMC_PLL_CTRL_M_MASK			0xFF
68170525Syongari
69170525Syongari#define HIBMC_CRT_DISP_CTL			0x80200
70170525Syongari
71170525Syongari#define HIBMC_CRT_DISP_CTL_DPMS(x)		((x) << 30)
72170525Syongari#define HIBMC_CRT_DISP_CTL_DPMS_MASK		0xc0000000
73170525Syongari
74170525Syongari#define HIBMC_CRT_DPMS_ON			0
75170525Syongari#define HIBMC_CRT_DPMS_OFF			3
76170525Syongari
77170525Syongari#define HIBMC_CRT_DISP_CTL_CRTSELECT(x)		((x) << 25)
78170525Syongari#define HIBMC_CRT_DISP_CTL_CRTSELECT_MASK	0x2000000
79170525Syongari
80170525Syongari#define HIBMC_CRTSELECT_CRT			1
81170525Syongari
82170525Syongari#define HIBMC_CRT_DISP_CTL_CLOCK_PHASE(x)	((x) << 14)
83170525Syongari#define HIBMC_CRT_DISP_CTL_CLOCK_PHASE_MASK	0x4000
84170525Syongari
85170525Syongari#define HIBMC_CRT_DISP_CTL_VSYNC_PHASE(x)	((x) << 13)
86170525Syongari#define HIBMC_CRT_DISP_CTL_VSYNC_PHASE_MASK	0x2000
87170525Syongari
88170525Syongari#define HIBMC_CRT_DISP_CTL_HSYNC_PHASE(x)	((x) << 12)
89170525Syongari#define HIBMC_CRT_DISP_CTL_HSYNC_PHASE_MASK	0x1000
90170525Syongari
91170525Syongari#define HIBMC_CRT_DISP_CTL_TIMING(x)		((x) << 8)
92227908Smarius#define HIBMC_CRT_DISP_CTL_TIMING_MASK		0x100
93170525Syongari
94170525Syongari#define HIBMC_CTL_DISP_CTL_GAMMA(x)		((x) << 3)
95170525Syongari#define HIBMC_CTL_DISP_CTL_GAMMA_MASK		0x08
96170525Syongari
97170525Syongari#define HIBMC_CRT_DISP_CTL_PLANE(x)		((x) << 2)
98170525Syongari#define HIBMC_CRT_DISP_CTL_PLANE_MASK		4
99170525Syongari
100221407Smarius#define HIBMC_CRT_DISP_CTL_FORMAT(x)		((x) << 0)
101170525Syongari#define HIBMC_CRT_DISP_CTL_FORMAT_MASK		0x03
102170525Syongari
103170525Syongari#define HIBMC_CRT_FB_ADDRESS			0x080204
104170525Syongari
105170525Syongari#define HIBMC_CRT_FB_WIDTH			0x080208
106170525Syongari#define HIBMC_CRT_FB_WIDTH_WIDTH(x)		((x) << 16)
107170525Syongari#define HIBMC_CRT_FB_WIDTH_WIDTH_MASK		0x3FFF0000
108170525Syongari#define HIBMC_CRT_FB_WIDTH_OFFS(x)		((x) << 0)
109170525Syongari#define HIBMC_CRT_FB_WIDTH_OFFS_MASK		0x3FFF
110221407Smarius
111221407Smarius#define HIBMC_CRT_HORZ_TOTAL			0x08020C
112221407Smarius#define HIBMC_CRT_HORZ_TOTAL_TOTAL(x)		((x) << 16)
113221407Smarius#define HIBMC_CRT_HORZ_TOTAL_TOTAL_MASK		0xFFF0000
114337755Smarkj
115170525Syongari#define HIBMC_CRT_HORZ_TOTAL_DISP_END(x)	((x) << 0)
116170525Syongari#define HIBMC_CRT_HORZ_TOTAL_DISP_END_MASK	0xFFF
117170525Syongari
118221407Smarius#define HIBMC_CRT_HORZ_SYNC			0x080210
119221407Smarius#define HIBMC_CRT_HORZ_SYNC_WIDTH(x)		((x) << 16)
120221407Smarius#define HIBMC_CRT_HORZ_SYNC_WIDTH_MASK		0xFF0000
121221407Smarius
122221407Smarius#define HIBMC_CRT_HORZ_SYNC_START(x)		((x) << 0)
123221407Smarius#define HIBMC_CRT_HORZ_SYNC_START_MASK		0xFFF
124170525Syongari
125170525Syongari#define HIBMC_CRT_VERT_TOTAL			0x080214
126170525Syongari#define HIBMC_CRT_VERT_TOTAL_TOTAL(x)		((x) << 16)
127170525Syongari#define HIBMC_CRT_VERT_TOTAL_TOTAL_MASK		0x7FFF0000
128170525Syongari
129170525Syongari#define HIBMC_CRT_VERT_TOTAL_DISP_END(x)	((x) << 0)
130170525Syongari#define HIBMC_CRT_VERT_TOTAL_DISP_END_MASK	0x7FF
131170525Syongari
132170525Syongari#define HIBMC_CRT_VERT_SYNC			0x080218
133170525Syongari#define HIBMC_CRT_VERT_SYNC_HEIGHT(x)		((x) << 16)
134170525Syongari#define HIBMC_CRT_VERT_SYNC_HEIGHT_MASK		0x3F0000
135221407Smarius
136221407Smarius#define HIBMC_CRT_VERT_SYNC_START(x)		((x) << 0)
137170525Syongari#define HIBMC_CRT_VERT_SYNC_START_MASK		0x7FF
138170525Syongari
139170525Syongari/* Auto Centering */
140170525Syongari#define HIBMC_CRT_AUTO_CENTERING_TL		0x080280
141170525Syongari#define HIBMC_CRT_AUTO_CENTERING_TL_TOP(x)	((x) << 16)
142170525Syongari#define HIBMC_CRT_AUTO_CENTERING_TL_TOP_MASK	0x7FF0000
143170525Syongari
144170525Syongari#define HIBMC_CRT_AUTO_CENTERING_TL_LEFT(x)	((x) << 0)
145170525Syongari#define HIBMC_CRT_AUTO_CENTERING_TL_LEFT_MASK	0x7FF
146170525Syongari
147170525Syongari#define HIBMC_CRT_AUTO_CENTERING_BR		0x080284
148170525Syongari#define HIBMC_CRT_AUTO_CENTERING_BR_BOTTOM(x)	((x) << 16)
149170525Syongari#define HIBMC_CRT_AUTO_CENTERING_BR_BOTTOM_MASK	0x7FF0000
150170525Syongari
151170525Syongari#define HIBMC_CRT_AUTO_CENTERING_BR_RIGHT(x)	((x) << 0)
152170525Syongari#define HIBMC_CRT_AUTO_CENTERING_BR_RIGHT_MASK	0x7FF
153170525Syongari
154170525Syongari/* register to control panel output */
155170525Syongari#define HIBMC_DISPLAY_CONTROL_HISILE		0x80288
156170525Syongari#define HIBMC_DISPLAY_CONTROL_FPVDDEN(x)	((x) << 0)
157170525Syongari#define HIBMC_DISPLAY_CONTROL_PANELDATE(x)	((x) << 1)
158170525Syongari#define HIBMC_DISPLAY_CONTROL_FPEN(x)		((x) << 2)
159221407Smarius#define HIBMC_DISPLAY_CONTROL_VBIASEN(x)	((x) << 3)
160170525Syongari
161170525Syongari#define HIBMC_RAW_INTERRUPT			0x80290
162170525Syongari#define HIBMC_RAW_INTERRUPT_VBLANK(x)		((x) << 2)
163170525Syongari#define HIBMC_RAW_INTERRUPT_VBLANK_MASK		0x4
164170525Syongari
165170525Syongari#define HIBMC_RAW_INTERRUPT_EN			0x80298
166170525Syongari#define HIBMC_RAW_INTERRUPT_EN_VBLANK(x)	((x) << 2)
167170525Syongari#define HIBMC_RAW_INTERRUPT_EN_VBLANK_MASK	0x4
168170525Syongari
169170525Syongari/* register and values for PLL control */
170170525Syongari#define CRT_PLL1_HS				0x802a8
171170525Syongari#define CRT_PLL1_HS_OUTER_BYPASS(x)		((x) << 30)
172170525Syongari#define CRT_PLL1_HS_INTER_BYPASS(x)		((x) << 29)
173170525Syongari#define CRT_PLL1_HS_POWERON(x)			((x) << 24)
174170525Syongari
175170525Syongari#define CRT_PLL1_HS_25MHZ			0x23d40f02
176170525Syongari#define CRT_PLL1_HS_40MHZ			0x23940801
177170525Syongari#define CRT_PLL1_HS_65MHZ			0x23940d01
178170525Syongari#define CRT_PLL1_HS_78MHZ			0x23540F82
179170525Syongari#define CRT_PLL1_HS_74MHZ			0x23941dc2
180170525Syongari#define CRT_PLL1_HS_80MHZ			0x23941001
181170525Syongari#define CRT_PLL1_HS_80MHZ_1152			0x23540fc2
182170525Syongari#define CRT_PLL1_HS_106MHZ			0x237C1641
183170525Syongari#define CRT_PLL1_HS_108MHZ			0x23b41b01
184170525Syongari#define CRT_PLL1_HS_162MHZ			0x23480681
185170525Syongari#define CRT_PLL1_HS_148MHZ			0x23541dc2
186170525Syongari#define CRT_PLL1_HS_193MHZ			0x234807c1
187170525Syongari
188170525Syongari#define CRT_PLL2_HS				0x802ac
189170525Syongari#define CRT_PLL2_HS_25MHZ			0x206B851E
190170525Syongari#define CRT_PLL2_HS_40MHZ			0x30000000
191170525Syongari#define CRT_PLL2_HS_65MHZ			0x40000000
192170525Syongari#define CRT_PLL2_HS_78MHZ			0x50E147AE
193170525Syongari#define CRT_PLL2_HS_74MHZ			0x602B6AE7
194170525Syongari#define CRT_PLL2_HS_80MHZ			0x70000000
195170525Syongari#define CRT_PLL2_HS_106MHZ			0x0075c28f
196170525Syongari#define CRT_PLL2_HS_108MHZ			0x80000000
197170525Syongari#define CRT_PLL2_HS_162MHZ			0xA0000000
198170525Syongari#define CRT_PLL2_HS_148MHZ			0xB0CCCCCD
199170525Syongari#define CRT_PLL2_HS_193MHZ			0xC0872B02
200170525Syongari
201170525Syongari#define HIBMC_CRT_PALETTE                       0x80C00
202170525Syongari
203170525Syongari#define HIBMC_FIELD(field, value) (field(value) & field##_MASK)
204170525Syongari#endif
205170525Syongari