1 /* SPDX-License-Identifier: GPL-2.0+ */
2 /*
3  * Sunxi platform display controller register and constant defines
4  *
5  * (C) Copyright 2017 Jernej Skrabec <jernej.skrabec@siol.net>
6  *
7  * Based on out of tree Linux DRM driver defines:
8  * Copyright (C) 2016 Jean-Francois Moine <moinejf@free.fr>
9  * Copyright (c) 2016 Allwinnertech Co., Ltd.
10  */
11 
12 #ifndef _SUNXI_DISPLAY2_H
13 #define _SUNXI_DISPLAY2_H
14 
15 /* internal clock settings */
16 struct de_clk {
17 	u32 gate_cfg;
18 	u32 bus_cfg;
19 	u32 rst_cfg;
20 	u32 div_cfg;
21 	u32 sel_cfg;
22 };
23 
24 /* global control */
25 struct de_glb {
26 	u32 ctl;
27 	u32 status;
28 	u32 dbuff;
29 	u32 size;
30 };
31 
32 /* alpha blending */
33 struct de_bld {
34 	u32 fcolor_ctl;
35 	struct {
36 		u32 fcolor;
37 		u32 insize;
38 		u32 offset;
39 		u32 dum;
40 	} attr[4];
41 	u32 dum0[15];
42 	u32 route;
43 	u32 premultiply;
44 	u32 bkcolor;
45 	u32 output_size;
46 	u32 bld_mode[4];
47 	u32 dum1[4];
48 	u32 ck_ctl;
49 	u32 ck_cfg;
50 	u32 dum2[2];
51 	u32 ck_max[4];
52 	u32 dum3[4];
53 	u32 ck_min[4];
54 	u32 dum4[3];
55 	u32 out_ctl;
56 };
57 
58 /* VI channel */
59 struct de_vi {
60 	struct {
61 		u32 attr;
62 		u32 size;
63 		u32 coord;
64 		u32 pitch[3];
65 		u32 top_laddr[3];
66 		u32 bot_laddr[3];
67 	} cfg[4];
68 	u32 fcolor[4];
69 	u32 top_haddr[3];
70 	u32 bot_haddr[3];
71 	u32 ovl_size[2];
72 	u32 hori[2];
73 	u32 vert[2];
74 };
75 
76 struct de_ui {
77 	struct {
78 		u32 attr;
79 		u32 size;
80 		u32 coord;
81 		u32 pitch;
82 		u32 top_laddr;
83 		u32 bot_laddr;
84 		u32 fcolor;
85 		u32 dum;
86 	} cfg[4];
87 	u32 top_haddr;
88 	u32 bot_haddr;
89 	u32 ovl_size;
90 };
91 
92 struct de_csc {
93 	u32 csc_ctl;
94 	u8 res[0xc];
95 	u32 coef11;
96 	u32 coef12;
97 	u32 coef13;
98 	u32 coef14;
99 	u32 coef21;
100 	u32 coef22;
101 	u32 coef23;
102 	u32 coef24;
103 	u32 coef31;
104 	u32 coef32;
105 	u32 coef33;
106 	u32 coef34;
107 };
108 
109 /*
110  * DE register constants.
111  */
112 #define SUNXI_DE2_MUX0_BASE			(SUNXI_DE2_BASE + 0x100000)
113 #define SUNXI_DE2_MUX1_BASE			(SUNXI_DE2_BASE + 0x200000)
114 
115 #define SUNXI_DE2_MUX_GLB_REGS			0x00000
116 #define SUNXI_DE2_MUX_BLD_REGS			0x01000
117 #define SUNXI_DE2_MUX_CHAN_REGS			0x02000
118 #define SUNXI_DE2_MUX_CHAN_SZ			0x1000
119 #define SUNXI_DE2_MUX_VSU_REGS			0x20000
120 #define SUNXI_DE2_MUX_GSU1_REGS			0x30000
121 #define SUNXI_DE2_MUX_GSU2_REGS			0x40000
122 #define SUNXI_DE2_MUX_GSU3_REGS			0x50000
123 #define SUNXI_DE2_MUX_FCE_REGS			0xa0000
124 #define SUNXI_DE2_MUX_BWS_REGS			0xa2000
125 #define SUNXI_DE2_MUX_LTI_REGS			0xa4000
126 #define SUNXI_DE2_MUX_PEAK_REGS			0xa6000
127 #define SUNXI_DE2_MUX_ASE_REGS			0xa8000
128 #define SUNXI_DE2_MUX_FCC_REGS			0xaa000
129 #define SUNXI_DE2_MUX_DCSC_REGS			0xb0000
130 
131 #define SUNXI_DE2_FORMAT_XRGB_8888		4
132 #define SUNXI_DE2_FORMAT_RGB_565		10
133 
134 #define SUNXI_DE2_MUX_GLB_CTL_EN		(1 << 0)
135 #define SUNXI_DE2_UI_CFG_ATTR_EN		(1 << 0)
136 #define SUNXI_DE2_UI_CFG_ATTR_FMT(f)		((f & 0xf) << 8)
137 
138 #define SUNXI_DE2_WH(w, h)			(((h - 1) << 16) | (w - 1))
139 
140 #endif /* _SUNXI_DISPLAY2_H */
141