Skip to content

Commit b59ed26

Browse files
MoudyHoHans Verkuil
authored andcommitted
media: platform: mtk-mdp3: chip config split about component settings
For different chips, different types and numbers of components are configured in the MDP3 to achieve the desired application, which will cause ID compatibility problems in the same driver. Subdivide the component ID into two kinds: 1. public_id (compatible with other chips) 2. inner_id (what the current chip actually owns) In addition, the chip configuration related structures of MDP3 components are integrated into specific file. Signed-off-by: Moudy Ho <[email protected]> Signed-off-by: Hans Verkuil <[email protected]>
1 parent 0cbfa7c commit b59ed26

File tree

6 files changed

+222
-74
lines changed

6 files changed

+222
-74
lines changed

drivers/media/platform/mediatek/mdp3/mdp_cfg_data.c

Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,45 @@
44
* Author: Ping-Hsun Wu <[email protected]>
55
*/
66

7+
#include "mtk-mdp3-cfg.h"
78
#include "mtk-mdp3-core.h"
9+
#include "mtk-mdp3-comp.h"
10+
11+
enum mt8183_mdp_comp_id {
12+
/* ISP */
13+
MT8183_MDP_COMP_WPEI = 0,
14+
MT8183_MDP_COMP_WPEO, /* 1 */
15+
MT8183_MDP_COMP_WPEI2, /* 2 */
16+
MT8183_MDP_COMP_WPEO2, /* 3 */
17+
MT8183_MDP_COMP_ISP_IMGI, /* 4 */
18+
MT8183_MDP_COMP_ISP_IMGO, /* 5 */
19+
MT8183_MDP_COMP_ISP_IMG2O, /* 6 */
20+
21+
/* IPU */
22+
MT8183_MDP_COMP_IPUI, /* 7 */
23+
MT8183_MDP_COMP_IPUO, /* 8 */
24+
25+
/* MDP */
26+
MT8183_MDP_COMP_CAMIN, /* 9 */
27+
MT8183_MDP_COMP_CAMIN2, /* 10 */
28+
MT8183_MDP_COMP_RDMA0, /* 11 */
29+
MT8183_MDP_COMP_AAL0, /* 12 */
30+
MT8183_MDP_COMP_CCORR0, /* 13 */
31+
MT8183_MDP_COMP_RSZ0, /* 14 */
32+
MT8183_MDP_COMP_RSZ1, /* 15 */
33+
MT8183_MDP_COMP_TDSHP0, /* 16 */
34+
MT8183_MDP_COMP_COLOR0, /* 17 */
35+
MT8183_MDP_COMP_PATH0_SOUT, /* 18 */
36+
MT8183_MDP_COMP_PATH1_SOUT, /* 19 */
37+
MT8183_MDP_COMP_WROT0, /* 20 */
38+
MT8183_MDP_COMP_WDMA, /* 21 */
39+
40+
/* Dummy Engine */
41+
MT8183_MDP_COMP_RDMA1, /* 22 */
42+
MT8183_MDP_COMP_RSZ2, /* 23 */
43+
MT8183_MDP_COMP_TDSHP1, /* 24 */
44+
MT8183_MDP_COMP_WROT1, /* 25 */
45+
};
846

947
static const struct of_device_id mt8183_mdp_probe_infra[MDP_INFRA_MAX] = {
1048
[MDP_INFRA_MMSYS] = { .compatible = "mediatek,mt8183-mmsys" },
@@ -31,8 +69,114 @@ static const u32 mt8183_mutex_idx[MDP_MAX_COMP_COUNT] = {
3169
[MDP_COMP_CCORR0] = MUTEX_MOD_IDX_MDP_CCORR0,
3270
};
3371

72+
static const struct mdp_comp_data mt8183_mdp_comp_data[MDP_MAX_COMP_COUNT] = {
73+
[MDP_COMP_WPEI] = {
74+
{MDP_COMP_TYPE_WPEI, 0, MT8183_MDP_COMP_WPEI},
75+
{0, 0, 0}
76+
},
77+
[MDP_COMP_WPEO] = {
78+
{MDP_COMP_TYPE_EXTO, 2, MT8183_MDP_COMP_WPEO},
79+
{0, 0, 0}
80+
},
81+
[MDP_COMP_WPEI2] = {
82+
{MDP_COMP_TYPE_WPEI, 1, MT8183_MDP_COMP_WPEI2},
83+
{0, 0, 0}
84+
},
85+
[MDP_COMP_WPEO2] = {
86+
{MDP_COMP_TYPE_EXTO, 3, MT8183_MDP_COMP_WPEO2},
87+
{0, 0, 0}
88+
},
89+
[MDP_COMP_ISP_IMGI] = {
90+
{MDP_COMP_TYPE_IMGI, 0, MT8183_MDP_COMP_ISP_IMGI},
91+
{0, 0, 4}
92+
},
93+
[MDP_COMP_ISP_IMGO] = {
94+
{MDP_COMP_TYPE_EXTO, 0, MT8183_MDP_COMP_ISP_IMGO},
95+
{0, 0, 4}
96+
},
97+
[MDP_COMP_ISP_IMG2O] = {
98+
{MDP_COMP_TYPE_EXTO, 1, MT8183_MDP_COMP_ISP_IMG2O},
99+
{0, 0, 0}
100+
},
101+
[MDP_COMP_CAMIN] = {
102+
{MDP_COMP_TYPE_DL_PATH, 0, MT8183_MDP_COMP_CAMIN},
103+
{2, 2, 1}
104+
},
105+
[MDP_COMP_CAMIN2] = {
106+
{MDP_COMP_TYPE_DL_PATH, 1, MT8183_MDP_COMP_CAMIN2},
107+
{2, 4, 1}
108+
},
109+
[MDP_COMP_RDMA0] = {
110+
{MDP_COMP_TYPE_RDMA, 0, MT8183_MDP_COMP_RDMA0},
111+
{2, 0, 0}
112+
},
113+
[MDP_COMP_CCORR0] = {
114+
{MDP_COMP_TYPE_CCORR, 0, MT8183_MDP_COMP_CCORR0},
115+
{1, 0, 0}
116+
},
117+
[MDP_COMP_RSZ0] = {
118+
{MDP_COMP_TYPE_RSZ, 0, MT8183_MDP_COMP_RSZ0},
119+
{1, 0, 0}
120+
},
121+
[MDP_COMP_RSZ1] = {
122+
{MDP_COMP_TYPE_RSZ, 1, MT8183_MDP_COMP_RSZ1},
123+
{1, 0, 0}
124+
},
125+
[MDP_COMP_TDSHP0] = {
126+
{MDP_COMP_TYPE_TDSHP, 0, MT8183_MDP_COMP_TDSHP0},
127+
{0, 0, 0}
128+
},
129+
[MDP_COMP_PATH0_SOUT] = {
130+
{MDP_COMP_TYPE_PATH, 0, MT8183_MDP_COMP_PATH0_SOUT},
131+
{0, 0, 0}
132+
},
133+
[MDP_COMP_PATH1_SOUT] = {
134+
{MDP_COMP_TYPE_PATH, 1, MT8183_MDP_COMP_PATH1_SOUT},
135+
{0, 0, 0}
136+
},
137+
[MDP_COMP_WROT0] = {
138+
{MDP_COMP_TYPE_WROT, 0, MT8183_MDP_COMP_WROT0},
139+
{1, 0, 0}
140+
},
141+
[MDP_COMP_WDMA] = {
142+
{MDP_COMP_TYPE_WDMA, 0, MT8183_MDP_COMP_WDMA},
143+
{1, 0, 0}
144+
},
145+
};
146+
34147
const struct mtk_mdp_driver_data mt8183_mdp_driver_data = {
35148
.mdp_probe_infra = mt8183_mdp_probe_infra,
36149
.mdp_cfg = &mt8183_plat_cfg,
37150
.mdp_mutex_table_idx = mt8183_mutex_idx,
151+
.comp_data = mt8183_mdp_comp_data,
152+
.comp_data_len = ARRAY_SIZE(mt8183_mdp_comp_data),
38153
};
154+
155+
s32 mdp_cfg_get_id_inner(struct mdp_dev *mdp_dev, enum mtk_mdp_comp_id id)
156+
{
157+
if (!mdp_dev)
158+
return MDP_COMP_NONE;
159+
if (id <= MDP_COMP_NONE || id >= MDP_MAX_COMP_COUNT)
160+
return MDP_COMP_NONE;
161+
162+
return mdp_dev->mdp_data->comp_data[id].match.inner_id;
163+
}
164+
165+
enum mtk_mdp_comp_id mdp_cfg_get_id_public(struct mdp_dev *mdp_dev, s32 inner_id)
166+
{
167+
enum mtk_mdp_comp_id public_id = MDP_COMP_NONE;
168+
u32 i;
169+
170+
if (IS_ERR(mdp_dev) || !inner_id)
171+
goto err_public_id;
172+
173+
for (i = 0; i < MDP_MAX_COMP_COUNT; i++) {
174+
if (mdp_dev->mdp_data->comp_data[i].match.inner_id == inner_id) {
175+
public_id = i;
176+
return public_id;
177+
}
178+
}
179+
180+
err_public_id:
181+
return public_id;
182+
}

drivers/media/platform/mediatek/mdp3/mtk-mdp3-cfg.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,14 @@
77
#ifndef __MTK_MDP3_CFG_H__
88
#define __MTK_MDP3_CFG_H__
99

10+
#include <linux/types.h>
11+
1012
extern const struct mtk_mdp_driver_data mt8183_mdp_driver_data;
1113

14+
struct mdp_dev;
15+
enum mtk_mdp_comp_id;
16+
17+
s32 mdp_cfg_get_id_inner(struct mdp_dev *mdp_dev, enum mtk_mdp_comp_id id);
18+
enum mtk_mdp_comp_id mdp_cfg_get_id_public(struct mdp_dev *mdp_dev, s32 id);
19+
1220
#endif /* __MTK_MDP3_CFG_H__ */

drivers/media/platform/mediatek/mdp3/mtk-mdp3-cmdq.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ static int mdp_path_subfrm_require(const struct mdp_path *path,
4848
int id, index;
4949

5050
/* Decide which mutex to use based on the current pipeline */
51-
switch (path->comps[0].comp->id) {
51+
switch (path->comps[0].comp->public_id) {
5252
case MDP_COMP_RDMA0:
5353
*mutex_id = MDP_PIPE_RDMA0;
5454
break;
@@ -71,7 +71,7 @@ static int mdp_path_subfrm_require(const struct mdp_path *path,
7171
ctx = &path->comps[index];
7272
if (is_output_disabled(ctx->param, count))
7373
continue;
74-
id = ctx->comp->id;
74+
id = ctx->comp->public_id;
7575
mtk_mutex_write_mod(mutex[*mutex_id],
7676
data->mdp_mutex_table_idx[id], false);
7777
}

0 commit comments

Comments
 (0)