Skip to content

Commit 7bdcead

Browse files
ckhu-mediatekmbgg
authored andcommitted
soc: mmsys: mediatek: add mask to mmsys routes
SOUT has many bits and need to be cleared before set new value. Write only could do the clear, but for MOUT, it clears bits that should not be cleared. So use a mask to reset only the needed bits. this fixes HDMI issues on MT7623/BPI-R2 since 5.13 Fixes: 4401476 ("soc: mediatek: mmsys: Use an array for setting the routing registers") Signed-off-by: Frank Wunderlich <[email protected]> Signed-off-by: CK Hu <[email protected]> Reviewed-by: Chun-Kuang Hu <[email protected]> Reviewed-by: Hsin-Yi Wang <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Matthias Brugger <[email protected]>
1 parent 1149565 commit 7bdcead

File tree

3 files changed

+112
-49
lines changed

3 files changed

+112
-49
lines changed

drivers/soc/mediatek/mt8183-mmsys.h

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,25 +28,32 @@
2828
static const struct mtk_mmsys_routes mmsys_mt8183_routing_table[] = {
2929
{
3030
DDP_COMPONENT_OVL0, DDP_COMPONENT_OVL_2L0,
31-
MT8183_DISP_OVL0_MOUT_EN, MT8183_OVL0_MOUT_EN_OVL0_2L
31+
MT8183_DISP_OVL0_MOUT_EN, MT8183_OVL0_MOUT_EN_OVL0_2L,
32+
MT8183_OVL0_MOUT_EN_OVL0_2L
3233
}, {
3334
DDP_COMPONENT_OVL_2L0, DDP_COMPONENT_RDMA0,
34-
MT8183_DISP_OVL0_2L_MOUT_EN, MT8183_OVL0_2L_MOUT_EN_DISP_PATH0
35+
MT8183_DISP_OVL0_2L_MOUT_EN, MT8183_OVL0_2L_MOUT_EN_DISP_PATH0,
36+
MT8183_OVL0_2L_MOUT_EN_DISP_PATH0
3537
}, {
3638
DDP_COMPONENT_OVL_2L1, DDP_COMPONENT_RDMA1,
37-
MT8183_DISP_OVL1_2L_MOUT_EN, MT8183_OVL1_2L_MOUT_EN_RDMA1
39+
MT8183_DISP_OVL1_2L_MOUT_EN, MT8183_OVL1_2L_MOUT_EN_RDMA1,
40+
MT8183_OVL1_2L_MOUT_EN_RDMA1
3841
}, {
3942
DDP_COMPONENT_DITHER, DDP_COMPONENT_DSI0,
40-
MT8183_DISP_DITHER0_MOUT_EN, MT8183_DITHER0_MOUT_IN_DSI0
43+
MT8183_DISP_DITHER0_MOUT_EN, MT8183_DITHER0_MOUT_IN_DSI0,
44+
MT8183_DITHER0_MOUT_IN_DSI0
4145
}, {
4246
DDP_COMPONENT_OVL_2L0, DDP_COMPONENT_RDMA0,
43-
MT8183_DISP_PATH0_SEL_IN, MT8183_DISP_PATH0_SEL_IN_OVL0_2L
47+
MT8183_DISP_PATH0_SEL_IN, MT8183_DISP_PATH0_SEL_IN_OVL0_2L,
48+
MT8183_DISP_PATH0_SEL_IN_OVL0_2L
4449
}, {
4550
DDP_COMPONENT_RDMA1, DDP_COMPONENT_DPI0,
46-
MT8183_DISP_DPI0_SEL_IN, MT8183_DPI0_SEL_IN_RDMA1
51+
MT8183_DISP_DPI0_SEL_IN, MT8183_DPI0_SEL_IN_RDMA1,
52+
MT8183_DPI0_SEL_IN_RDMA1
4753
}, {
4854
DDP_COMPONENT_RDMA0, DDP_COMPONENT_COLOR0,
49-
MT8183_DISP_RDMA0_SOUT_SEL_IN, MT8183_RDMA0_SOUT_COLOR0
55+
MT8183_DISP_RDMA0_SOUT_SEL_IN, MT8183_RDMA0_SOUT_COLOR0,
56+
MT8183_RDMA0_SOUT_COLOR0
5057
}
5158
};
5259

drivers/soc/mediatek/mtk-mmsys.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,9 @@ void mtk_mmsys_ddp_connect(struct device *dev,
6868

6969
for (i = 0; i < mmsys->data->num_routes; i++)
7070
if (cur == routes[i].from_comp && next == routes[i].to_comp) {
71-
reg = readl_relaxed(mmsys->regs + routes[i].addr) | routes[i].val;
71+
reg = readl_relaxed(mmsys->regs + routes[i].addr);
72+
reg &= ~routes[i].mask;
73+
reg |= routes[i].val;
7274
writel_relaxed(reg, mmsys->regs + routes[i].addr);
7375
}
7476
}
@@ -85,7 +87,8 @@ void mtk_mmsys_ddp_disconnect(struct device *dev,
8587

8688
for (i = 0; i < mmsys->data->num_routes; i++)
8789
if (cur == routes[i].from_comp && next == routes[i].to_comp) {
88-
reg = readl_relaxed(mmsys->regs + routes[i].addr) & ~routes[i].val;
90+
reg = readl_relaxed(mmsys->regs + routes[i].addr);
91+
reg &= ~routes[i].mask;
8992
writel_relaxed(reg, mmsys->regs + routes[i].addr);
9093
}
9194
}

drivers/soc/mediatek/mtk-mmsys.h

Lines changed: 93 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -35,41 +35,54 @@
3535
#define RDMA0_SOUT_DSI1 0x1
3636
#define RDMA0_SOUT_DSI2 0x4
3737
#define RDMA0_SOUT_DSI3 0x5
38+
#define RDMA0_SOUT_MASK 0x7
3839
#define RDMA1_SOUT_DPI0 0x2
3940
#define RDMA1_SOUT_DPI1 0x3
4041
#define RDMA1_SOUT_DSI1 0x1
4142
#define RDMA1_SOUT_DSI2 0x4
4243
#define RDMA1_SOUT_DSI3 0x5
44+
#define RDMA1_SOUT_MASK 0x7
4345
#define RDMA2_SOUT_DPI0 0x2
4446
#define RDMA2_SOUT_DPI1 0x3
4547
#define RDMA2_SOUT_DSI1 0x1
4648
#define RDMA2_SOUT_DSI2 0x4
4749
#define RDMA2_SOUT_DSI3 0x5
50+
#define RDMA2_SOUT_MASK 0x7
4851
#define DPI0_SEL_IN_RDMA1 0x1
4952
#define DPI0_SEL_IN_RDMA2 0x3
53+
#define DPI0_SEL_IN_MASK 0x3
5054
#define DPI1_SEL_IN_RDMA1 (0x1 << 8)
5155
#define DPI1_SEL_IN_RDMA2 (0x3 << 8)
56+
#define DPI1_SEL_IN_MASK (0x3 << 8)
5257
#define DSI0_SEL_IN_RDMA1 0x1
5358
#define DSI0_SEL_IN_RDMA2 0x4
59+
#define DSI0_SEL_IN_MASK 0x7
5460
#define DSI1_SEL_IN_RDMA1 0x1
5561
#define DSI1_SEL_IN_RDMA2 0x4
62+
#define DSI1_SEL_IN_MASK 0x7
5663
#define DSI2_SEL_IN_RDMA1 (0x1 << 16)
5764
#define DSI2_SEL_IN_RDMA2 (0x4 << 16)
65+
#define DSI2_SEL_IN_MASK (0x7 << 16)
5866
#define DSI3_SEL_IN_RDMA1 (0x1 << 16)
5967
#define DSI3_SEL_IN_RDMA2 (0x4 << 16)
68+
#define DSI3_SEL_IN_MASK (0x7 << 16)
6069
#define COLOR1_SEL_IN_OVL1 0x1
6170

6271
#define OVL_MOUT_EN_RDMA 0x1
6372
#define BLS_TO_DSI_RDMA1_TO_DPI1 0x8
6473
#define BLS_TO_DPI_RDMA1_TO_DSI 0x2
74+
#define BLS_RDMA1_DSI_DPI_MASK 0xf
6575
#define DSI_SEL_IN_BLS 0x0
6676
#define DPI_SEL_IN_BLS 0x0
77+
#define DPI_SEL_IN_MASK 0x1
6778
#define DSI_SEL_IN_RDMA 0x1
79+
#define DSI_SEL_IN_MASK 0x1
6880

6981
struct mtk_mmsys_routes {
7082
u32 from_comp;
7183
u32 to_comp;
7284
u32 addr;
85+
u32 mask;
7386
u32 val;
7487
};
7588

@@ -91,124 +104,164 @@ struct mtk_mmsys_driver_data {
91104
static const struct mtk_mmsys_routes mmsys_default_routing_table[] = {
92105
{
93106
DDP_COMPONENT_BLS, DDP_COMPONENT_DSI0,
94-
DISP_REG_CONFIG_OUT_SEL, BLS_TO_DSI_RDMA1_TO_DPI1
107+
DISP_REG_CONFIG_OUT_SEL, BLS_RDMA1_DSI_DPI_MASK,
108+
BLS_TO_DSI_RDMA1_TO_DPI1
95109
}, {
96110
DDP_COMPONENT_BLS, DDP_COMPONENT_DSI0,
97-
DISP_REG_CONFIG_DSI_SEL, DSI_SEL_IN_BLS
111+
DISP_REG_CONFIG_DSI_SEL, DSI_SEL_IN_MASK,
112+
DSI_SEL_IN_BLS
98113
}, {
99114
DDP_COMPONENT_BLS, DDP_COMPONENT_DPI0,
100-
DISP_REG_CONFIG_OUT_SEL, BLS_TO_DPI_RDMA1_TO_DSI
115+
DISP_REG_CONFIG_OUT_SEL, BLS_RDMA1_DSI_DPI_MASK,
116+
BLS_TO_DPI_RDMA1_TO_DSI
101117
}, {
102118
DDP_COMPONENT_BLS, DDP_COMPONENT_DPI0,
103-
DISP_REG_CONFIG_DSI_SEL, DSI_SEL_IN_RDMA
119+
DISP_REG_CONFIG_DSI_SEL, DSI_SEL_IN_MASK,
120+
DSI_SEL_IN_RDMA
104121
}, {
105122
DDP_COMPONENT_BLS, DDP_COMPONENT_DPI0,
106-
DISP_REG_CONFIG_DPI_SEL, DPI_SEL_IN_BLS
123+
DISP_REG_CONFIG_DPI_SEL, DPI_SEL_IN_MASK,
124+
DPI_SEL_IN_BLS
107125
}, {
108126
DDP_COMPONENT_GAMMA, DDP_COMPONENT_RDMA1,
109-
DISP_REG_CONFIG_DISP_GAMMA_MOUT_EN, GAMMA_MOUT_EN_RDMA1
127+
DISP_REG_CONFIG_DISP_GAMMA_MOUT_EN, GAMMA_MOUT_EN_RDMA1,
128+
GAMMA_MOUT_EN_RDMA1
110129
}, {
111130
DDP_COMPONENT_OD0, DDP_COMPONENT_RDMA0,
112-
DISP_REG_CONFIG_DISP_OD_MOUT_EN, OD_MOUT_EN_RDMA0
131+
DISP_REG_CONFIG_DISP_OD_MOUT_EN, OD_MOUT_EN_RDMA0,
132+
OD_MOUT_EN_RDMA0
113133
}, {
114134
DDP_COMPONENT_OD1, DDP_COMPONENT_RDMA1,
115-
DISP_REG_CONFIG_DISP_OD_MOUT_EN, OD1_MOUT_EN_RDMA1
135+
DISP_REG_CONFIG_DISP_OD_MOUT_EN, OD1_MOUT_EN_RDMA1,
136+
OD1_MOUT_EN_RDMA1
116137
}, {
117138
DDP_COMPONENT_OVL0, DDP_COMPONENT_COLOR0,
118-
DISP_REG_CONFIG_DISP_OVL0_MOUT_EN, OVL0_MOUT_EN_COLOR0
139+
DISP_REG_CONFIG_DISP_OVL0_MOUT_EN, OVL0_MOUT_EN_COLOR0,
140+
OVL0_MOUT_EN_COLOR0
119141
}, {
120142
DDP_COMPONENT_OVL0, DDP_COMPONENT_COLOR0,
121-
DISP_REG_CONFIG_DISP_COLOR0_SEL_IN, COLOR0_SEL_IN_OVL0
143+
DISP_REG_CONFIG_DISP_COLOR0_SEL_IN, COLOR0_SEL_IN_OVL0,
144+
COLOR0_SEL_IN_OVL0
122145
}, {
123146
DDP_COMPONENT_OVL0, DDP_COMPONENT_RDMA0,
124-
DISP_REG_CONFIG_DISP_OVL_MOUT_EN, OVL_MOUT_EN_RDMA
147+
DISP_REG_CONFIG_DISP_OVL_MOUT_EN, OVL_MOUT_EN_RDMA,
148+
OVL_MOUT_EN_RDMA
125149
}, {
126150
DDP_COMPONENT_OVL1, DDP_COMPONENT_COLOR1,
127-
DISP_REG_CONFIG_DISP_OVL1_MOUT_EN, OVL1_MOUT_EN_COLOR1
151+
DISP_REG_CONFIG_DISP_OVL1_MOUT_EN, OVL1_MOUT_EN_COLOR1,
152+
OVL1_MOUT_EN_COLOR1
128153
}, {
129154
DDP_COMPONENT_OVL1, DDP_COMPONENT_COLOR1,
130-
DISP_REG_CONFIG_DISP_COLOR1_SEL_IN, COLOR1_SEL_IN_OVL1
155+
DISP_REG_CONFIG_DISP_COLOR1_SEL_IN, COLOR1_SEL_IN_OVL1,
156+
COLOR1_SEL_IN_OVL1
131157
}, {
132158
DDP_COMPONENT_RDMA0, DDP_COMPONENT_DPI0,
133-
DISP_REG_CONFIG_DISP_RDMA0_SOUT_EN, RDMA0_SOUT_DPI0
159+
DISP_REG_CONFIG_DISP_RDMA0_SOUT_EN, RDMA0_SOUT_MASK,
160+
RDMA0_SOUT_DPI0
134161
}, {
135162
DDP_COMPONENT_RDMA0, DDP_COMPONENT_DPI1,
136-
DISP_REG_CONFIG_DISP_RDMA0_SOUT_EN, RDMA0_SOUT_DPI1
163+
DISP_REG_CONFIG_DISP_RDMA0_SOUT_EN, RDMA0_SOUT_MASK,
164+
RDMA0_SOUT_DPI1
137165
}, {
138166
DDP_COMPONENT_RDMA0, DDP_COMPONENT_DSI1,
139-
DISP_REG_CONFIG_DISP_RDMA0_SOUT_EN, RDMA0_SOUT_DSI1
167+
DISP_REG_CONFIG_DISP_RDMA0_SOUT_EN, RDMA0_SOUT_MASK,
168+
RDMA0_SOUT_DSI1
140169
}, {
141170
DDP_COMPONENT_RDMA0, DDP_COMPONENT_DSI2,
142-
DISP_REG_CONFIG_DISP_RDMA0_SOUT_EN, RDMA0_SOUT_DSI2
171+
DISP_REG_CONFIG_DISP_RDMA0_SOUT_EN, RDMA0_SOUT_MASK,
172+
RDMA0_SOUT_DSI2
143173
}, {
144174
DDP_COMPONENT_RDMA0, DDP_COMPONENT_DSI3,
145-
DISP_REG_CONFIG_DISP_RDMA0_SOUT_EN, RDMA0_SOUT_DSI3
175+
DISP_REG_CONFIG_DISP_RDMA0_SOUT_EN, RDMA0_SOUT_MASK,
176+
RDMA0_SOUT_DSI3
146177
}, {
147178
DDP_COMPONENT_RDMA1, DDP_COMPONENT_DPI0,
148-
DISP_REG_CONFIG_DISP_RDMA1_SOUT_EN, RDMA1_SOUT_DPI0
179+
DISP_REG_CONFIG_DISP_RDMA1_SOUT_EN, RDMA1_SOUT_MASK,
180+
RDMA1_SOUT_DPI0
149181
}, {
150182
DDP_COMPONENT_RDMA1, DDP_COMPONENT_DPI0,
151-
DISP_REG_CONFIG_DPI_SEL_IN, DPI0_SEL_IN_RDMA1
183+
DISP_REG_CONFIG_DPI_SEL_IN, DPI0_SEL_IN_MASK,
184+
DPI0_SEL_IN_RDMA1
152185
}, {
153186
DDP_COMPONENT_RDMA1, DDP_COMPONENT_DPI1,
154-
DISP_REG_CONFIG_DISP_RDMA1_SOUT_EN, RDMA1_SOUT_DPI1
187+
DISP_REG_CONFIG_DISP_RDMA1_SOUT_EN, RDMA1_SOUT_MASK,
188+
RDMA1_SOUT_DPI1
155189
}, {
156190
DDP_COMPONENT_RDMA1, DDP_COMPONENT_DPI1,
157-
DISP_REG_CONFIG_DPI_SEL_IN, DPI1_SEL_IN_RDMA1
191+
DISP_REG_CONFIG_DPI_SEL_IN, DPI1_SEL_IN_MASK,
192+
DPI1_SEL_IN_RDMA1
158193
}, {
159194
DDP_COMPONENT_RDMA1, DDP_COMPONENT_DSI0,
160-
DISP_REG_CONFIG_DSIE_SEL_IN, DSI0_SEL_IN_RDMA1
195+
DISP_REG_CONFIG_DSIE_SEL_IN, DSI0_SEL_IN_MASK,
196+
DSI0_SEL_IN_RDMA1
161197
}, {
162198
DDP_COMPONENT_RDMA1, DDP_COMPONENT_DSI1,
163-
DISP_REG_CONFIG_DISP_RDMA1_SOUT_EN, RDMA1_SOUT_DSI1
199+
DISP_REG_CONFIG_DISP_RDMA1_SOUT_EN, RDMA1_SOUT_MASK,
200+
RDMA1_SOUT_DSI1
164201
}, {
165202
DDP_COMPONENT_RDMA1, DDP_COMPONENT_DSI1,
166-
DISP_REG_CONFIG_DSIO_SEL_IN, DSI1_SEL_IN_RDMA1
203+
DISP_REG_CONFIG_DSIO_SEL_IN, DSI1_SEL_IN_MASK,
204+
DSI1_SEL_IN_RDMA1
167205
}, {
168206
DDP_COMPONENT_RDMA1, DDP_COMPONENT_DSI2,
169-
DISP_REG_CONFIG_DISP_RDMA1_SOUT_EN, RDMA1_SOUT_DSI2
207+
DISP_REG_CONFIG_DISP_RDMA1_SOUT_EN, RDMA1_SOUT_MASK,
208+
RDMA1_SOUT_DSI2
170209
}, {
171210
DDP_COMPONENT_RDMA1, DDP_COMPONENT_DSI2,
172-
DISP_REG_CONFIG_DSIE_SEL_IN, DSI2_SEL_IN_RDMA1
211+
DISP_REG_CONFIG_DSIE_SEL_IN, DSI2_SEL_IN_MASK,
212+
DSI2_SEL_IN_RDMA1
173213
}, {
174214
DDP_COMPONENT_RDMA1, DDP_COMPONENT_DSI3,
175-
DISP_REG_CONFIG_DISP_RDMA1_SOUT_EN, RDMA1_SOUT_DSI3
215+
DISP_REG_CONFIG_DISP_RDMA1_SOUT_EN, RDMA1_SOUT_MASK,
216+
RDMA1_SOUT_DSI3
176217
}, {
177218
DDP_COMPONENT_RDMA1, DDP_COMPONENT_DSI3,
178-
DISP_REG_CONFIG_DSIO_SEL_IN, DSI3_SEL_IN_RDMA1
219+
DISP_REG_CONFIG_DSIO_SEL_IN, DSI3_SEL_IN_MASK,
220+
DSI3_SEL_IN_RDMA1
179221
}, {
180222
DDP_COMPONENT_RDMA2, DDP_COMPONENT_DPI0,
181-
DISP_REG_CONFIG_DISP_RDMA2_SOUT, RDMA2_SOUT_DPI0
223+
DISP_REG_CONFIG_DISP_RDMA2_SOUT, RDMA2_SOUT_MASK,
224+
RDMA2_SOUT_DPI0
182225
}, {
183226
DDP_COMPONENT_RDMA2, DDP_COMPONENT_DPI0,
184-
DISP_REG_CONFIG_DPI_SEL_IN, DPI0_SEL_IN_RDMA2
227+
DISP_REG_CONFIG_DPI_SEL_IN, DPI0_SEL_IN_MASK,
228+
DPI0_SEL_IN_RDMA2
185229
}, {
186230
DDP_COMPONENT_RDMA2, DDP_COMPONENT_DPI1,
187-
DISP_REG_CONFIG_DISP_RDMA2_SOUT, RDMA2_SOUT_DPI1
231+
DISP_REG_CONFIG_DISP_RDMA2_SOUT, RDMA2_SOUT_MASK,
232+
RDMA2_SOUT_DPI1
188233
}, {
189234
DDP_COMPONENT_RDMA2, DDP_COMPONENT_DPI1,
190-
DISP_REG_CONFIG_DPI_SEL_IN, DPI1_SEL_IN_RDMA2
235+
DISP_REG_CONFIG_DPI_SEL_IN, DPI1_SEL_IN_MASK,
236+
DPI1_SEL_IN_RDMA2
191237
}, {
192238
DDP_COMPONENT_RDMA2, DDP_COMPONENT_DSI0,
193-
DISP_REG_CONFIG_DSIE_SEL_IN, DSI0_SEL_IN_RDMA2
239+
DISP_REG_CONFIG_DSIE_SEL_IN, DSI0_SEL_IN_MASK,
240+
DSI0_SEL_IN_RDMA2
194241
}, {
195242
DDP_COMPONENT_RDMA2, DDP_COMPONENT_DSI1,
196-
DISP_REG_CONFIG_DISP_RDMA2_SOUT, RDMA2_SOUT_DSI1
243+
DISP_REG_CONFIG_DISP_RDMA2_SOUT, RDMA2_SOUT_MASK,
244+
RDMA2_SOUT_DSI1
197245
}, {
198246
DDP_COMPONENT_RDMA2, DDP_COMPONENT_DSI1,
199-
DISP_REG_CONFIG_DSIO_SEL_IN, DSI1_SEL_IN_RDMA2
247+
DISP_REG_CONFIG_DSIO_SEL_IN, DSI1_SEL_IN_MASK,
248+
DSI1_SEL_IN_RDMA2
200249
}, {
201250
DDP_COMPONENT_RDMA2, DDP_COMPONENT_DSI2,
202-
DISP_REG_CONFIG_DISP_RDMA2_SOUT, RDMA2_SOUT_DSI2
251+
DISP_REG_CONFIG_DISP_RDMA2_SOUT, RDMA2_SOUT_MASK,
252+
RDMA2_SOUT_DSI2
203253
}, {
204254
DDP_COMPONENT_RDMA2, DDP_COMPONENT_DSI2,
205-
DISP_REG_CONFIG_DSIE_SEL_IN, DSI2_SEL_IN_RDMA2
255+
DISP_REG_CONFIG_DSIE_SEL_IN, DSI2_SEL_IN_MASK,
256+
DSI2_SEL_IN_RDMA2
206257
}, {
207258
DDP_COMPONENT_RDMA2, DDP_COMPONENT_DSI3,
208-
DISP_REG_CONFIG_DISP_RDMA2_SOUT, RDMA2_SOUT_DSI3
259+
DISP_REG_CONFIG_DISP_RDMA2_SOUT, RDMA2_SOUT_MASK,
260+
RDMA2_SOUT_DSI3
209261
}, {
210262
DDP_COMPONENT_RDMA2, DDP_COMPONENT_DSI3,
211-
DISP_REG_CONFIG_DSIO_SEL_IN, DSI3_SEL_IN_RDMA2
263+
DISP_REG_CONFIG_DSIO_SEL_IN, DSI3_SEL_IN_MASK,
264+
DSI3_SEL_IN_RDMA2
212265
}
213266
};
214267

0 commit comments

Comments
 (0)