1 | /* SPDX-License-Identifier: MIT */ |
2 | /* |
3 | * Copyright © 2023 Intel Corporation |
4 | */ |
5 | |
6 | #ifndef __SKL_WATERMARK_REGS_H__ |
7 | #define __SKL_WATERMARK_REGS_H__ |
8 | |
9 | #include "intel_display_reg_defs.h" |
10 | |
11 | #define _PIPEA_MBUS_DBOX_CTL 0x7003C |
12 | #define _PIPEB_MBUS_DBOX_CTL 0x7103C |
13 | #define PIPE_MBUS_DBOX_CTL(pipe) _MMIO_PIPE(pipe, _PIPEA_MBUS_DBOX_CTL, \ |
14 | _PIPEB_MBUS_DBOX_CTL) |
15 | #define MBUS_DBOX_B2B_TRANSACTIONS_MAX_MASK REG_GENMASK(24, 20) /* tgl+ */ |
16 | #define MBUS_DBOX_B2B_TRANSACTIONS_MAX(x) REG_FIELD_PREP(MBUS_DBOX_B2B_TRANSACTIONS_MAX_MASK, x) |
17 | #define MBUS_DBOX_B2B_TRANSACTIONS_DELAY_MASK REG_GENMASK(19, 17) /* tgl+ */ |
18 | #define MBUS_DBOX_B2B_TRANSACTIONS_DELAY(x) REG_FIELD_PREP(MBUS_DBOX_B2B_TRANSACTIONS_DELAY_MASK, x) |
19 | #define MBUS_DBOX_REGULATE_B2B_TRANSACTIONS_EN REG_BIT(16) /* tgl+ */ |
20 | #define MBUS_DBOX_BW_CREDIT_MASK REG_GENMASK(15, 14) |
21 | #define MBUS_DBOX_BW_CREDIT(x) REG_FIELD_PREP(MBUS_DBOX_BW_CREDIT_MASK, x) |
22 | #define MBUS_DBOX_BW_4CREDITS_MTL REG_FIELD_PREP(MBUS_DBOX_BW_CREDIT_MASK, 0x2) |
23 | #define MBUS_DBOX_BW_8CREDITS_MTL REG_FIELD_PREP(MBUS_DBOX_BW_CREDIT_MASK, 0x3) |
24 | #define MBUS_DBOX_B_CREDIT_MASK REG_GENMASK(12, 8) |
25 | #define MBUS_DBOX_B_CREDIT(x) REG_FIELD_PREP(MBUS_DBOX_B_CREDIT_MASK, x) |
26 | #define MBUS_DBOX_I_CREDIT_MASK REG_GENMASK(7, 5) |
27 | #define MBUS_DBOX_I_CREDIT(x) REG_FIELD_PREP(MBUS_DBOX_I_CREDIT_MASK, x) |
28 | #define MBUS_DBOX_A_CREDIT_MASK REG_GENMASK(3, 0) |
29 | #define MBUS_DBOX_A_CREDIT(x) REG_FIELD_PREP(MBUS_DBOX_A_CREDIT_MASK, x) |
30 | |
31 | #define MBUS_UBOX_CTL _MMIO(0x4503C) |
32 | #define MBUS_BBOX_CTL_S1 _MMIO(0x45040) |
33 | #define MBUS_BBOX_CTL_S2 _MMIO(0x45044) |
34 | |
35 | #define MBUS_CTL _MMIO(0x4438C) |
36 | #define MBUS_JOIN REG_BIT(31) |
37 | #define MBUS_HASHING_MODE_MASK REG_BIT(30) |
38 | #define MBUS_HASHING_MODE_2x2 REG_FIELD_PREP(MBUS_HASHING_MODE_MASK, 0) |
39 | #define MBUS_HASHING_MODE_1x4 REG_FIELD_PREP(MBUS_HASHING_MODE_MASK, 1) |
40 | #define MBUS_JOIN_PIPE_SELECT_MASK REG_GENMASK(28, 26) |
41 | #define MBUS_JOIN_PIPE_SELECT(pipe) REG_FIELD_PREP(MBUS_JOIN_PIPE_SELECT_MASK, pipe) |
42 | #define MBUS_JOIN_PIPE_SELECT_NONE MBUS_JOIN_PIPE_SELECT(7) |
43 | |
44 | /* Watermark register definitions for SKL */ |
45 | #define _CUR_WM_A_0 0x70140 |
46 | #define _CUR_WM_B_0 0x71140 |
47 | #define _CUR_WM_SAGV_A 0x70158 |
48 | #define _CUR_WM_SAGV_B 0x71158 |
49 | #define _CUR_WM_SAGV_TRANS_A 0x7015C |
50 | #define _CUR_WM_SAGV_TRANS_B 0x7115C |
51 | #define _CUR_WM_TRANS_A 0x70168 |
52 | #define _CUR_WM_TRANS_B 0x71168 |
53 | #define _PLANE_WM_1_A_0 0x70240 |
54 | #define _PLANE_WM_1_B_0 0x71240 |
55 | #define _PLANE_WM_2_A_0 0x70340 |
56 | #define _PLANE_WM_2_B_0 0x71340 |
57 | #define _PLANE_WM_SAGV_1_A 0x70258 |
58 | #define _PLANE_WM_SAGV_1_B 0x71258 |
59 | #define _PLANE_WM_SAGV_2_A 0x70358 |
60 | #define _PLANE_WM_SAGV_2_B 0x71358 |
61 | #define _PLANE_WM_SAGV_TRANS_1_A 0x7025C |
62 | #define _PLANE_WM_SAGV_TRANS_1_B 0x7125C |
63 | #define _PLANE_WM_SAGV_TRANS_2_A 0x7035C |
64 | #define _PLANE_WM_SAGV_TRANS_2_B 0x7135C |
65 | #define _PLANE_WM_TRANS_1_A 0x70268 |
66 | #define _PLANE_WM_TRANS_1_B 0x71268 |
67 | #define _PLANE_WM_TRANS_2_A 0x70368 |
68 | #define _PLANE_WM_TRANS_2_B 0x71368 |
69 | #define PLANE_WM_EN (1 << 31) |
70 | #define PLANE_WM_IGNORE_LINES (1 << 30) |
71 | #define PLANE_WM_LINES_MASK REG_GENMASK(26, 14) |
72 | #define PLANE_WM_BLOCKS_MASK REG_GENMASK(11, 0) |
73 | |
74 | #define _CUR_WM_0(pipe) _PIPE(pipe, _CUR_WM_A_0, _CUR_WM_B_0) |
75 | #define CUR_WM(pipe, level) _MMIO(_CUR_WM_0(pipe) + ((4) * (level))) |
76 | #define CUR_WM_SAGV(pipe) _MMIO_PIPE(pipe, _CUR_WM_SAGV_A, _CUR_WM_SAGV_B) |
77 | #define CUR_WM_SAGV_TRANS(pipe) _MMIO_PIPE(pipe, _CUR_WM_SAGV_TRANS_A, _CUR_WM_SAGV_TRANS_B) |
78 | #define CUR_WM_TRANS(pipe) _MMIO_PIPE(pipe, _CUR_WM_TRANS_A, _CUR_WM_TRANS_B) |
79 | #define _PLANE_WM_1(pipe) _PIPE(pipe, _PLANE_WM_1_A_0, _PLANE_WM_1_B_0) |
80 | #define _PLANE_WM_2(pipe) _PIPE(pipe, _PLANE_WM_2_A_0, _PLANE_WM_2_B_0) |
81 | #define _PLANE_WM_BASE(pipe, plane) \ |
82 | _PLANE(plane, _PLANE_WM_1(pipe), _PLANE_WM_2(pipe)) |
83 | #define PLANE_WM(pipe, plane, level) \ |
84 | _MMIO(_PLANE_WM_BASE(pipe, plane) + ((4) * (level))) |
85 | #define _PLANE_WM_SAGV_1(pipe) \ |
86 | _PIPE(pipe, _PLANE_WM_SAGV_1_A, _PLANE_WM_SAGV_1_B) |
87 | #define _PLANE_WM_SAGV_2(pipe) \ |
88 | _PIPE(pipe, _PLANE_WM_SAGV_2_A, _PLANE_WM_SAGV_2_B) |
89 | #define PLANE_WM_SAGV(pipe, plane) \ |
90 | _MMIO(_PLANE(plane, _PLANE_WM_SAGV_1(pipe), _PLANE_WM_SAGV_2(pipe))) |
91 | #define _PLANE_WM_SAGV_TRANS_1(pipe) \ |
92 | _PIPE(pipe, _PLANE_WM_SAGV_TRANS_1_A, _PLANE_WM_SAGV_TRANS_1_B) |
93 | #define _PLANE_WM_SAGV_TRANS_2(pipe) \ |
94 | _PIPE(pipe, _PLANE_WM_SAGV_TRANS_2_A, _PLANE_WM_SAGV_TRANS_2_B) |
95 | #define PLANE_WM_SAGV_TRANS(pipe, plane) \ |
96 | _MMIO(_PLANE(plane, _PLANE_WM_SAGV_TRANS_1(pipe), _PLANE_WM_SAGV_TRANS_2(pipe))) |
97 | #define _PLANE_WM_TRANS_1(pipe) \ |
98 | _PIPE(pipe, _PLANE_WM_TRANS_1_A, _PLANE_WM_TRANS_1_B) |
99 | #define _PLANE_WM_TRANS_2(pipe) \ |
100 | _PIPE(pipe, _PLANE_WM_TRANS_2_A, _PLANE_WM_TRANS_2_B) |
101 | #define PLANE_WM_TRANS(pipe, plane) \ |
102 | _MMIO(_PLANE(plane, _PLANE_WM_TRANS_1(pipe), _PLANE_WM_TRANS_2(pipe))) |
103 | |
104 | #define _PLANE_BUF_CFG_1_B 0x7127c |
105 | #define _PLANE_BUF_CFG_2_B 0x7137c |
106 | #define _PLANE_BUF_CFG_1(pipe) \ |
107 | _PIPE(pipe, _PLANE_BUF_CFG_1_A, _PLANE_BUF_CFG_1_B) |
108 | #define _PLANE_BUF_CFG_2(pipe) \ |
109 | _PIPE(pipe, _PLANE_BUF_CFG_2_A, _PLANE_BUF_CFG_2_B) |
110 | #define PLANE_BUF_CFG(pipe, plane) \ |
111 | _MMIO_PLANE(plane, _PLANE_BUF_CFG_1(pipe), _PLANE_BUF_CFG_2(pipe)) |
112 | |
113 | #define _PLANE_NV12_BUF_CFG_1_B 0x71278 |
114 | #define _PLANE_NV12_BUF_CFG_2_B 0x71378 |
115 | #define _PLANE_NV12_BUF_CFG_1(pipe) \ |
116 | _PIPE(pipe, _PLANE_NV12_BUF_CFG_1_A, _PLANE_NV12_BUF_CFG_1_B) |
117 | #define _PLANE_NV12_BUF_CFG_2(pipe) \ |
118 | _PIPE(pipe, _PLANE_NV12_BUF_CFG_2_A, _PLANE_NV12_BUF_CFG_2_B) |
119 | #define PLANE_NV12_BUF_CFG(pipe, plane) \ |
120 | _MMIO_PLANE(plane, _PLANE_NV12_BUF_CFG_1(pipe), _PLANE_NV12_BUF_CFG_2(pipe)) |
121 | |
122 | /* SKL new cursor registers */ |
123 | #define _CUR_BUF_CFG_A 0x7017c |
124 | #define _CUR_BUF_CFG_B 0x7117c |
125 | #define CUR_BUF_CFG(pipe) _MMIO_PIPE(pipe, _CUR_BUF_CFG_A, _CUR_BUF_CFG_B) |
126 | |
127 | /* |
128 | * The below are numbered starting from "S1" on gen11/gen12, but starting |
129 | * with display 13, the bspec switches to a 0-based numbering scheme |
130 | * (although the addresses stay the same so new S0 = old S1, new S1 = old S2). |
131 | * We'll just use the 0-based numbering here for all platforms since it's the |
132 | * way things will be named by the hardware team going forward, plus it's more |
133 | * consistent with how most of the rest of our registers are named. |
134 | */ |
135 | #define _DBUF_CTL_S0 0x45008 |
136 | #define _DBUF_CTL_S1 0x44FE8 |
137 | #define _DBUF_CTL_S2 0x44300 |
138 | #define _DBUF_CTL_S3 0x44304 |
139 | #define DBUF_CTL_S(slice) _MMIO(_PICK(slice, \ |
140 | _DBUF_CTL_S0, \ |
141 | _DBUF_CTL_S1, \ |
142 | _DBUF_CTL_S2, \ |
143 | _DBUF_CTL_S3)) |
144 | #define DBUF_POWER_REQUEST REG_BIT(31) |
145 | #define DBUF_POWER_STATE REG_BIT(30) |
146 | #define DBUF_TRACKER_STATE_SERVICE_MASK REG_GENMASK(23, 19) |
147 | #define DBUF_TRACKER_STATE_SERVICE(x) REG_FIELD_PREP(DBUF_TRACKER_STATE_SERVICE_MASK, x) |
148 | #define DBUF_MIN_TRACKER_STATE_SERVICE_MASK REG_GENMASK(18, 16) /* ADL-P+ */ |
149 | #define DBUF_MIN_TRACKER_STATE_SERVICE(x) REG_FIELD_PREP(DBUF_MIN_TRACKER_STATE_SERVICE_MASK, x) /* ADL-P+ */ |
150 | |
151 | #define MTL_LATENCY_LP0_LP1 _MMIO(0x45780) |
152 | #define MTL_LATENCY_LP2_LP3 _MMIO(0x45784) |
153 | #define MTL_LATENCY_LP4_LP5 _MMIO(0x45788) |
154 | #define MTL_LATENCY_LEVEL_EVEN_MASK REG_GENMASK(12, 0) |
155 | #define MTL_LATENCY_LEVEL_ODD_MASK REG_GENMASK(28, 16) |
156 | |
157 | #define MTL_LATENCY_SAGV _MMIO(0x4578c) |
158 | #define MTL_LATENCY_QCLK_SAGV REG_GENMASK(12, 0) |
159 | |
160 | #define LNL_PKG_C_LATENCY _MMIO(0x46460) |
161 | #define LNL_ADDED_WAKE_TIME_MASK REG_GENMASK(28, 16) |
162 | #define LNL_PKG_C_LATENCY_MASK REG_GENMASK(12, 0) |
163 | |
164 | #endif /* __SKL_WATERMARK_REGS_H__ */ |
165 | |