xref: /OK3568_Linux_fs/kernel/drivers/gpu/drm/meson/meson_dw_hdmi.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Copyright (C) 2016 BayLibre, SAS
4*4882a593Smuzhiyun  * Author: Neil Armstrong <narmstrong@baylibre.com>
5*4882a593Smuzhiyun  * Copyright (C) 2015 Amlogic, Inc. All rights reserved.
6*4882a593Smuzhiyun  */
7*4882a593Smuzhiyun 
8*4882a593Smuzhiyun #ifndef __MESON_DW_HDMI_H
9*4882a593Smuzhiyun #define __MESON_DW_HDMI_H
10*4882a593Smuzhiyun 
11*4882a593Smuzhiyun /*
12*4882a593Smuzhiyun  * Bit 15-10: RW Reserved. Default 1 starting from G12A
13*4882a593Smuzhiyun  * Bit 9 RW sw_reset_i2c starting from G12A
14*4882a593Smuzhiyun  * Bit 8 RW sw_reset_axiarb starting from G12A
15*4882a593Smuzhiyun  * Bit 7 RW Reserved. Default 1, sw_reset_emp starting from G12A
16*4882a593Smuzhiyun  * Bit 6 RW Reserved. Default 1, sw_reset_flt starting from G12A
17*4882a593Smuzhiyun  * Bit 5 RW Reserved. Default 1, sw_reset_hdcp22 starting from G12A
18*4882a593Smuzhiyun  * Bit 4 RW sw_reset_phyif: PHY interface. 1=Apply reset; 0=Release from reset.
19*4882a593Smuzhiyun  *     Default 1.
20*4882a593Smuzhiyun  * Bit 3 RW sw_reset_intr: interrupt module. 1=Apply reset;
21*4882a593Smuzhiyun  *     0=Release from reset.
22*4882a593Smuzhiyun  *     Default 1.
23*4882a593Smuzhiyun  * Bit 2 RW sw_reset_mem: KSV/REVOC mem. 1=Apply reset; 0=Release from reset.
24*4882a593Smuzhiyun  *     Default 1.
25*4882a593Smuzhiyun  * Bit 1 RW sw_reset_rnd: random number interface to HDCP. 1=Apply reset;
26*4882a593Smuzhiyun  *     0=Release from reset. Default 1.
27*4882a593Smuzhiyun  * Bit 0 RW sw_reset_core: connects to IP's ~irstz. 1=Apply reset;
28*4882a593Smuzhiyun  *     0=Release from reset. Default 1.
29*4882a593Smuzhiyun  */
30*4882a593Smuzhiyun #define HDMITX_TOP_SW_RESET                     (0x000)
31*4882a593Smuzhiyun 
32*4882a593Smuzhiyun /*
33*4882a593Smuzhiyun  * Bit 31 RW free_clk_en: 0=Enable clock gating for power saving; 1= Disable
34*4882a593Smuzhiyun  * Bit 12 RW i2s_ws_inv:1=Invert i2s_ws; 0=No invert. Default 0.
35*4882a593Smuzhiyun  * Bit 11 RW i2s_clk_inv: 1=Invert i2s_clk; 0=No invert. Default 0.
36*4882a593Smuzhiyun  * Bit 10 RW spdif_clk_inv: 1=Invert spdif_clk; 0=No invert. Default 0.
37*4882a593Smuzhiyun  * Bit 9 RW tmds_clk_inv: 1=Invert tmds_clk; 0=No invert. Default 0.
38*4882a593Smuzhiyun  * Bit 8 RW pixel_clk_inv: 1=Invert pixel_clk; 0=No invert. Default 0.
39*4882a593Smuzhiyun  * Bit 7 RW hdcp22_skpclk_en: starting from G12A, 1=enable; 0=disable
40*4882a593Smuzhiyun  * Bit 6 RW hdcp22_esmclk_en: starting from G12A, 1=enable; 0=disable
41*4882a593Smuzhiyun  * Bit 5 RW hdcp22_tmdsclk_en: starting from G12A, 1=enable; 0=disable
42*4882a593Smuzhiyun  * Bit 4 RW cec_clk_en: 1=enable cec_clk; 0=disable. Default 0. Reserved for G12A
43*4882a593Smuzhiyun  * Bit 3 RW i2s_clk_en: 1=enable i2s_clk; 0=disable. Default 0.
44*4882a593Smuzhiyun  * Bit 2 RW spdif_clk_en: 1=enable spdif_clk; 0=disable. Default 0.
45*4882a593Smuzhiyun  * Bit 1 RW tmds_clk_en: 1=enable tmds_clk;  0=disable. Default 0.
46*4882a593Smuzhiyun  * Bit 0 RW pixel_clk_en: 1=enable pixel_clk; 0=disable. Default 0.
47*4882a593Smuzhiyun  */
48*4882a593Smuzhiyun #define HDMITX_TOP_CLK_CNTL                     (0x001)
49*4882a593Smuzhiyun 
50*4882a593Smuzhiyun /*
51*4882a593Smuzhiyun  * Bit 31:28 RW rxsense_glitch_width: starting from G12A
52*4882a593Smuzhiyun  * Bit 27:16 RW rxsense_valid_width: starting from G12A
53*4882a593Smuzhiyun  * Bit 11: 0 RW hpd_valid_width: filter out width <= M*1024.    Default 0.
54*4882a593Smuzhiyun  * Bit 15:12 RW hpd_glitch_width: filter out glitch <= N.       Default 0.
55*4882a593Smuzhiyun  */
56*4882a593Smuzhiyun #define HDMITX_TOP_HPD_FILTER                   (0x002)
57*4882a593Smuzhiyun 
58*4882a593Smuzhiyun /*
59*4882a593Smuzhiyun  * intr_maskn: MASK_N, one bit per interrupt source.
60*4882a593Smuzhiyun  *     1=Enable interrupt source; 0=Disable interrupt source. Default 0.
61*4882a593Smuzhiyun  * [  7] rxsense_fall starting from G12A
62*4882a593Smuzhiyun  * [  6] rxsense_rise starting from G12A
63*4882a593Smuzhiyun  * [  5] err_i2c_timeout starting from G12A
64*4882a593Smuzhiyun  * [  4] hdcp22_rndnum_err
65*4882a593Smuzhiyun  * [  3] nonce_rfrsh_rise
66*4882a593Smuzhiyun  * [  2] hpd_fall_intr
67*4882a593Smuzhiyun  * [  1] hpd_rise_intr
68*4882a593Smuzhiyun  * [  0] core_intr
69*4882a593Smuzhiyun  */
70*4882a593Smuzhiyun #define HDMITX_TOP_INTR_MASKN                   (0x003)
71*4882a593Smuzhiyun 
72*4882a593Smuzhiyun /*
73*4882a593Smuzhiyun  * Bit 30: 0 RW intr_stat: For each bit, write 1 to manually set the interrupt
74*4882a593Smuzhiyun  *     bit, read back the interrupt status.
75*4882a593Smuzhiyun  * Bit    31 R  IP interrupt status
76*4882a593Smuzhiyun  * Bit     7 RW rxsense_fall starting from G12A
77*4882a593Smuzhiyun  * Bit     6 RW rxsense_rise starting from G12A
78*4882a593Smuzhiyun  * Bit     5 RW err_i2c_timeout starting from G12A
79*4882a593Smuzhiyun  * Bit     2 RW hpd_fall
80*4882a593Smuzhiyun  * Bit     1 RW hpd_rise
81*4882a593Smuzhiyun  * Bit     0 RW IP interrupt
82*4882a593Smuzhiyun  */
83*4882a593Smuzhiyun #define HDMITX_TOP_INTR_STAT                    (0x004)
84*4882a593Smuzhiyun 
85*4882a593Smuzhiyun /*
86*4882a593Smuzhiyun  * [7]    rxsense_fall starting from G12A
87*4882a593Smuzhiyun  * [6]    rxsense_rise starting from G12A
88*4882a593Smuzhiyun  * [5]    err_i2c_timeout starting from G12A
89*4882a593Smuzhiyun  * [4]	  hdcp22_rndnum_err
90*4882a593Smuzhiyun  * [3]	  nonce_rfrsh_rise
91*4882a593Smuzhiyun  * [2]	  hpd_fall
92*4882a593Smuzhiyun  * [1]	  hpd_rise
93*4882a593Smuzhiyun  * [0]	  core_intr_rise
94*4882a593Smuzhiyun  */
95*4882a593Smuzhiyun #define HDMITX_TOP_INTR_STAT_CLR                (0x005)
96*4882a593Smuzhiyun 
97*4882a593Smuzhiyun #define HDMITX_TOP_INTR_CORE		BIT(0)
98*4882a593Smuzhiyun #define HDMITX_TOP_INTR_HPD_RISE	BIT(1)
99*4882a593Smuzhiyun #define HDMITX_TOP_INTR_HPD_FALL	BIT(2)
100*4882a593Smuzhiyun #define HDMITX_TOP_INTR_RXSENSE_RISE	BIT(6)
101*4882a593Smuzhiyun #define HDMITX_TOP_INTR_RXSENSE_FALL	BIT(7)
102*4882a593Smuzhiyun 
103*4882a593Smuzhiyun /*
104*4882a593Smuzhiyun  * Bit 14:12 RW tmds_sel: 3'b000=Output zero; 3'b001=Output normal TMDS data;
105*4882a593Smuzhiyun  *     3'b010=Output PRBS data; 3'b100=Output shift pattern. Default 0.
106*4882a593Smuzhiyun  * Bit 11: 9 RW shift_pttn_repeat: 0=New pattern every clk cycle; 1=New pattern
107*4882a593Smuzhiyun  *     every 2 clk cycles; ...; 7=New pattern every 8 clk cycles. Default 0.
108*4882a593Smuzhiyun  * Bit 8 RW shift_pttn_en: 1= Enable shift pattern generator; 0=Disable.
109*4882a593Smuzhiyun  *     Default 0.
110*4882a593Smuzhiyun  * Bit 4: 3 RW prbs_pttn_mode: 0=PRBS11; 1=PRBS15; 2=PRBS7; 3=PRBS31. Default 0.
111*4882a593Smuzhiyun  * Bit 2: 1 RW prbs_pttn_width: 0=idle; 1=output 8-bit pattern;
112*4882a593Smuzhiyun  *     2=Output 1-bit pattern; 3=output 10-bit pattern. Default 0.
113*4882a593Smuzhiyun  * Bit 0 RW prbs_pttn_en: 1=Enable PRBS generator; 0=Disable. Default 0.
114*4882a593Smuzhiyun  */
115*4882a593Smuzhiyun #define HDMITX_TOP_BIST_CNTL                    (0x006)
116*4882a593Smuzhiyun 
117*4882a593Smuzhiyun /* Bit 29:20 RW shift_pttn_data[59:50]. Default 0. */
118*4882a593Smuzhiyun /* Bit 19:10 RW shift_pttn_data[69:60]. Default 0. */
119*4882a593Smuzhiyun /* Bit  9: 0 RW shift_pttn_data[79:70]. Default 0. */
120*4882a593Smuzhiyun #define HDMITX_TOP_SHIFT_PTTN_012               (0x007)
121*4882a593Smuzhiyun 
122*4882a593Smuzhiyun /* Bit 29:20 RW shift_pttn_data[29:20]. Default 0. */
123*4882a593Smuzhiyun /* Bit 19:10 RW shift_pttn_data[39:30]. Default 0. */
124*4882a593Smuzhiyun /* Bit  9: 0 RW shift_pttn_data[49:40]. Default 0. */
125*4882a593Smuzhiyun #define HDMITX_TOP_SHIFT_PTTN_345               (0x008)
126*4882a593Smuzhiyun 
127*4882a593Smuzhiyun /* Bit 19:10 RW shift_pttn_data[ 9: 0]. Default 0. */
128*4882a593Smuzhiyun /* Bit  9: 0 RW shift_pttn_data[19:10]. Default 0. */
129*4882a593Smuzhiyun #define HDMITX_TOP_SHIFT_PTTN_67                (0x009)
130*4882a593Smuzhiyun 
131*4882a593Smuzhiyun /* Bit 25:16 RW tmds_clk_pttn[19:10]. Default 0. */
132*4882a593Smuzhiyun /* Bit  9: 0 RW tmds_clk_pttn[ 9: 0]. Default 0. */
133*4882a593Smuzhiyun #define HDMITX_TOP_TMDS_CLK_PTTN_01             (0x00A)
134*4882a593Smuzhiyun 
135*4882a593Smuzhiyun /* Bit 25:16 RW tmds_clk_pttn[39:30]. Default 0. */
136*4882a593Smuzhiyun /* Bit  9: 0 RW tmds_clk_pttn[29:20]. Default 0. */
137*4882a593Smuzhiyun #define HDMITX_TOP_TMDS_CLK_PTTN_23             (0x00B)
138*4882a593Smuzhiyun 
139*4882a593Smuzhiyun /*
140*4882a593Smuzhiyun  * Bit 1 RW shift_tmds_clk_pttn:1=Enable shifting clk pattern,
141*4882a593Smuzhiyun  * used when TMDS CLK rate = TMDS character rate /4. Default 0.
142*4882a593Smuzhiyun  * Bit 0 R  Reserved. Default 0.
143*4882a593Smuzhiyun  * [	1] shift_tmds_clk_pttn
144*4882a593Smuzhiyun  * [	0] load_tmds_clk_pttn
145*4882a593Smuzhiyun  */
146*4882a593Smuzhiyun #define HDMITX_TOP_TMDS_CLK_PTTN_CNTL           (0x00C)
147*4882a593Smuzhiyun 
148*4882a593Smuzhiyun /*
149*4882a593Smuzhiyun  * Bit 0 RW revocmem_wr_fail: Read back 1 to indicate Host write REVOC MEM
150*4882a593Smuzhiyun  * failure, write 1 to clear the failure flag.  Default 0.
151*4882a593Smuzhiyun  */
152*4882a593Smuzhiyun #define HDMITX_TOP_REVOCMEM_STAT                (0x00D)
153*4882a593Smuzhiyun 
154*4882a593Smuzhiyun /*
155*4882a593Smuzhiyun  * Bit	   1 R	filtered RxSense status
156*4882a593Smuzhiyun  * Bit     0 R  filtered HPD status.
157*4882a593Smuzhiyun  */
158*4882a593Smuzhiyun #define HDMITX_TOP_STAT0                        (0x00E)
159*4882a593Smuzhiyun 
160*4882a593Smuzhiyun #endif /* __MESON_DW_HDMI_H */
161