1  /* SPDX-License-Identifier: MIT */
2  /*
3   * Copyright © 2024 Intel Corporation
4   */
5  
6  #ifndef __INTEL_VRR_REGS_H__
7  #define __INTEL_VRR_REGS_H__
8  
9  #include "intel_display_reg_defs.h"
10  
11  /* VRR registers */
12  #define _TRANS_VRR_CTL_A			0x60420
13  #define _TRANS_VRR_CTL_B			0x61420
14  #define _TRANS_VRR_CTL_C			0x62420
15  #define _TRANS_VRR_CTL_D			0x63420
16  #define TRANS_VRR_CTL(dev_priv, trans)		_MMIO_TRANS2(dev_priv, trans, _TRANS_VRR_CTL_A)
17  #define  VRR_CTL_VRR_ENABLE			REG_BIT(31)
18  #define  VRR_CTL_IGN_MAX_SHIFT			REG_BIT(30)
19  #define  VRR_CTL_FLIP_LINE_EN			REG_BIT(29)
20  #define  VRR_CTL_PIPELINE_FULL_MASK		REG_GENMASK(10, 3)
21  #define  VRR_CTL_PIPELINE_FULL(x)		REG_FIELD_PREP(VRR_CTL_PIPELINE_FULL_MASK, (x))
22  #define  VRR_CTL_PIPELINE_FULL_OVERRIDE		REG_BIT(0)
23  #define  XELPD_VRR_CTL_VRR_GUARDBAND_MASK	REG_GENMASK(15, 0)
24  #define  XELPD_VRR_CTL_VRR_GUARDBAND(x)		REG_FIELD_PREP(XELPD_VRR_CTL_VRR_GUARDBAND_MASK, (x))
25  
26  #define _TRANS_VRR_VMAX_A			0x60424
27  #define _TRANS_VRR_VMAX_B			0x61424
28  #define _TRANS_VRR_VMAX_C			0x62424
29  #define _TRANS_VRR_VMAX_D			0x63424
30  #define TRANS_VRR_VMAX(dev_priv, trans)		_MMIO_TRANS2(dev_priv, trans, _TRANS_VRR_VMAX_A)
31  #define  VRR_VMAX_MASK				REG_GENMASK(19, 0)
32  
33  #define _TRANS_VRR_VMIN_A			0x60434
34  #define _TRANS_VRR_VMIN_B			0x61434
35  #define _TRANS_VRR_VMIN_C			0x62434
36  #define _TRANS_VRR_VMIN_D			0x63434
37  #define TRANS_VRR_VMIN(dev_priv, trans)		_MMIO_TRANS2(dev_priv, trans, _TRANS_VRR_VMIN_A)
38  #define  VRR_VMIN_MASK				REG_GENMASK(15, 0)
39  
40  #define _TRANS_VRR_VMAXSHIFT_A			0x60428
41  #define _TRANS_VRR_VMAXSHIFT_B			0x61428
42  #define _TRANS_VRR_VMAXSHIFT_C			0x62428
43  #define _TRANS_VRR_VMAXSHIFT_D			0x63428
44  #define TRANS_VRR_VMAXSHIFT(dev_priv, trans)	_MMIO_TRANS2(dev_priv, trans, \
45  						_TRANS_VRR_VMAXSHIFT_A)
46  #define  VRR_VMAXSHIFT_DEC_MASK			REG_GENMASK(29, 16)
47  #define  VRR_VMAXSHIFT_DEC			REG_BIT(16)
48  #define  VRR_VMAXSHIFT_INC_MASK			REG_GENMASK(12, 0)
49  
50  #define _TRANS_VRR_STATUS_A			0x6042c
51  #define _TRANS_VRR_STATUS_B			0x6142c
52  #define _TRANS_VRR_STATUS_C			0x6242c
53  #define _TRANS_VRR_STATUS_D			0x6342c
54  #define TRANS_VRR_STATUS(dev_priv, trans)	_MMIO_TRANS2(dev_priv, trans, _TRANS_VRR_STATUS_A)
55  #define  VRR_STATUS_VMAX_REACHED		REG_BIT(31)
56  #define  VRR_STATUS_NOFLIP_TILL_BNDR		REG_BIT(30)
57  #define  VRR_STATUS_FLIP_BEF_BNDR		REG_BIT(29)
58  #define  VRR_STATUS_NO_FLIP_FRAME		REG_BIT(28)
59  #define  VRR_STATUS_VRR_EN_LIVE			REG_BIT(27)
60  #define  VRR_STATUS_FLIPS_SERVICED		REG_BIT(26)
61  #define  VRR_STATUS_VBLANK_MASK			REG_GENMASK(22, 20)
62  #define  STATUS_FSM_IDLE			REG_FIELD_PREP(VRR_STATUS_VBLANK_MASK, 0)
63  #define  STATUS_FSM_WAIT_TILL_FDB		REG_FIELD_PREP(VRR_STATUS_VBLANK_MASK, 1)
64  #define  STATUS_FSM_WAIT_TILL_FS		REG_FIELD_PREP(VRR_STATUS_VBLANK_MASK, 2)
65  #define  STATUS_FSM_WAIT_TILL_FLIP		REG_FIELD_PREP(VRR_STATUS_VBLANK_MASK, 3)
66  #define  STATUS_FSM_PIPELINE_FILL		REG_FIELD_PREP(VRR_STATUS_VBLANK_MASK, 4)
67  #define  STATUS_FSM_ACTIVE			REG_FIELD_PREP(VRR_STATUS_VBLANK_MASK, 5)
68  #define  STATUS_FSM_LEGACY_VBLANK		REG_FIELD_PREP(VRR_STATUS_VBLANK_MASK, 6)
69  
70  #define _TRANS_VRR_VTOTAL_PREV_A		0x60480
71  #define _TRANS_VRR_VTOTAL_PREV_B		0x61480
72  #define _TRANS_VRR_VTOTAL_PREV_C		0x62480
73  #define _TRANS_VRR_VTOTAL_PREV_D		0x63480
74  #define TRANS_VRR_VTOTAL_PREV(dev_priv, trans)	_MMIO_TRANS2(dev_priv, trans, \
75  						_TRANS_VRR_VTOTAL_PREV_A)
76  #define  VRR_VTOTAL_FLIP_BEFR_BNDR		REG_BIT(31)
77  #define  VRR_VTOTAL_FLIP_AFTER_BNDR		REG_BIT(30)
78  #define  VRR_VTOTAL_FLIP_AFTER_DBLBUF		REG_BIT(29)
79  #define  VRR_VTOTAL_PREV_FRAME_MASK		REG_GENMASK(19, 0)
80  
81  #define _TRANS_VRR_FLIPLINE_A			0x60438
82  #define _TRANS_VRR_FLIPLINE_B			0x61438
83  #define _TRANS_VRR_FLIPLINE_C			0x62438
84  #define _TRANS_VRR_FLIPLINE_D			0x63438
85  #define TRANS_VRR_FLIPLINE(dev_priv, trans)	_MMIO_TRANS2(dev_priv, trans, \
86  						_TRANS_VRR_FLIPLINE_A)
87  #define  VRR_FLIPLINE_MASK			REG_GENMASK(19, 0)
88  
89  #define _TRANS_VRR_STATUS2_A			0x6043c
90  #define _TRANS_VRR_STATUS2_B			0x6143c
91  #define _TRANS_VRR_STATUS2_C			0x6243c
92  #define _TRANS_VRR_STATUS2_D			0x6343c
93  #define TRANS_VRR_STATUS2(dev_priv, trans)	_MMIO_TRANS2(dev_priv, trans, _TRANS_VRR_STATUS2_A)
94  #define  VRR_STATUS2_VERT_LN_CNT_MASK		REG_GENMASK(19, 0)
95  
96  #define _TRANS_PUSH_A				0x60a70
97  #define _TRANS_PUSH_B				0x61a70
98  #define _TRANS_PUSH_C				0x62a70
99  #define _TRANS_PUSH_D				0x63a70
100  #define TRANS_PUSH(dev_priv, trans)		_MMIO_TRANS2(dev_priv, trans, _TRANS_PUSH_A)
101  #define  TRANS_PUSH_EN				REG_BIT(31)
102  #define  TRANS_PUSH_SEND			REG_BIT(30)
103  
104  #define _TRANS_VRR_VSYNC_A			0x60078
105  #define TRANS_VRR_VSYNC(dev_priv, trans)	_MMIO_TRANS2(dev_priv, trans, _TRANS_VRR_VSYNC_A)
106  #define VRR_VSYNC_END_MASK			REG_GENMASK(28, 16)
107  #define VRR_VSYNC_END(vsync_end)		REG_FIELD_PREP(VRR_VSYNC_END_MASK, (vsync_end))
108  #define VRR_VSYNC_START_MASK			REG_GENMASK(12, 0)
109  #define VRR_VSYNC_START(vsync_start)		REG_FIELD_PREP(VRR_VSYNC_START_MASK, (vsync_start))
110  
111  /*CMRR Registers*/
112  
113  #define _TRANS_CMRR_M_LO_A			0x604F0
114  #define TRANS_CMRR_M_LO(dev_priv, trans)        _MMIO_TRANS2(dev_priv, trans, _TRANS_CMRR_M_LO_A)
115  
116  #define _TRANS_CMRR_M_HI_A			0x604F4
117  #define TRANS_CMRR_M_HI(dev_priv, trans)        _MMIO_TRANS2(dev_priv, trans, _TRANS_CMRR_M_HI_A)
118  
119  #define _TRANS_CMRR_N_LO_A			0x604F8
120  #define TRANS_CMRR_N_LO(dev_priv, trans)        _MMIO_TRANS2(dev_priv, trans, _TRANS_CMRR_N_LO_A)
121  
122  #define _TRANS_CMRR_N_HI_A			0x604FC
123  #define TRANS_CMRR_N_HI(dev_priv, trans)        _MMIO_TRANS2(dev_priv, trans, _TRANS_CMRR_N_HI_A)
124  
125  #define VRR_CTL_CMRR_ENABLE			REG_BIT(27)
126  
127  #endif /* __INTEL_VRR_REGS__ */
128