mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-18 22:14:16 +00:00
drm/rockchip: vop2: Set plane possible crtcs by possible vp mask
In the upcoming VOP of rk3576, a window cannot attach to all Video Ports, we introduce a possible_vp_mask for every window to indicate which Video Ports this window can attach to. Signed-off-by: Andy Yan <andy.yan@rock-chips.com> Tested-by: Michael Riesch <michael.riesch@wolfvision.net> # on RK3568 Tested-by: Detlev Casanova <detlev.casanova@collabora.com> Signed-off-by: Heiko Stuebner <heiko@sntech.de> Link: https://patchwork.freedesktop.org/patch/msgid/20250303034436.192400-3-andyshrk@163.com
This commit is contained in:
parent
6fd4f8a26a
commit
b90fa71a11
3 changed files with 32 additions and 1 deletions
|
@ -2349,6 +2349,10 @@ static int vop2_create_crtcs(struct vop2 *vop2)
|
|||
if (win->base.type == DRM_PLANE_TYPE_PRIMARY)
|
||||
continue;
|
||||
|
||||
/* If this win can not attached to this VP */
|
||||
if (!(win->data->possible_vp_mask & BIT(vp->id)))
|
||||
continue;
|
||||
|
||||
if (vop2_is_mirror_win(win))
|
||||
continue;
|
||||
|
||||
|
@ -2379,7 +2383,19 @@ static int vop2_create_crtcs(struct vop2 *vop2)
|
|||
|
||||
win->type = DRM_PLANE_TYPE_OVERLAY;
|
||||
|
||||
possible_crtcs = (1 << nvps) - 1;
|
||||
possible_crtcs = 0;
|
||||
nvp = 0;
|
||||
for (j = 0; j < vop2_data->nr_vps; j++) {
|
||||
vp = &vop2->vps[j];
|
||||
|
||||
if (!vp->crtc.port)
|
||||
continue;
|
||||
|
||||
if (win->data->possible_vp_mask & BIT(vp->id))
|
||||
possible_crtcs |= BIT(nvp);
|
||||
nvp++;
|
||||
}
|
||||
|
||||
ret = vop2_plane_init(vop2, win, possible_crtcs);
|
||||
if (ret)
|
||||
return dev_err_probe(drm->dev, ret, "failed to init overlay plane %s\n",
|
||||
|
|
|
@ -167,6 +167,7 @@ struct vop2_win_data {
|
|||
unsigned int phys_id;
|
||||
|
||||
u32 base;
|
||||
u32 possible_vp_mask;
|
||||
enum drm_plane_type type;
|
||||
|
||||
u32 nformats;
|
||||
|
|
|
@ -347,6 +347,7 @@ static const struct vop2_win_data rk3568_vop_win_data[] = {
|
|||
.name = "Smart0-win0",
|
||||
.phys_id = ROCKCHIP_VOP2_SMART0,
|
||||
.base = 0x1c00,
|
||||
.possible_vp_mask = BIT(0) | BIT(1) | BIT(2),
|
||||
.formats = formats_smart,
|
||||
.nformats = ARRAY_SIZE(formats_smart),
|
||||
.format_modifiers = format_modifiers,
|
||||
|
@ -360,6 +361,7 @@ static const struct vop2_win_data rk3568_vop_win_data[] = {
|
|||
}, {
|
||||
.name = "Smart1-win0",
|
||||
.phys_id = ROCKCHIP_VOP2_SMART1,
|
||||
.possible_vp_mask = BIT(0) | BIT(1) | BIT(2),
|
||||
.formats = formats_smart,
|
||||
.nformats = ARRAY_SIZE(formats_smart),
|
||||
.format_modifiers = format_modifiers,
|
||||
|
@ -373,6 +375,7 @@ static const struct vop2_win_data rk3568_vop_win_data[] = {
|
|||
}, {
|
||||
.name = "Esmart1-win0",
|
||||
.phys_id = ROCKCHIP_VOP2_ESMART1,
|
||||
.possible_vp_mask = BIT(0) | BIT(1) | BIT(2),
|
||||
.formats = formats_rk356x_esmart,
|
||||
.nformats = ARRAY_SIZE(formats_rk356x_esmart),
|
||||
.format_modifiers = format_modifiers,
|
||||
|
@ -386,6 +389,7 @@ static const struct vop2_win_data rk3568_vop_win_data[] = {
|
|||
}, {
|
||||
.name = "Esmart0-win0",
|
||||
.phys_id = ROCKCHIP_VOP2_ESMART0,
|
||||
.possible_vp_mask = BIT(0) | BIT(1) | BIT(2),
|
||||
.formats = formats_rk356x_esmart,
|
||||
.nformats = ARRAY_SIZE(formats_rk356x_esmart),
|
||||
.format_modifiers = format_modifiers,
|
||||
|
@ -400,6 +404,7 @@ static const struct vop2_win_data rk3568_vop_win_data[] = {
|
|||
.name = "Cluster0-win0",
|
||||
.phys_id = ROCKCHIP_VOP2_CLUSTER0,
|
||||
.base = 0x1000,
|
||||
.possible_vp_mask = BIT(0) | BIT(1) | BIT(2),
|
||||
.formats = formats_cluster,
|
||||
.nformats = ARRAY_SIZE(formats_cluster),
|
||||
.format_modifiers = format_modifiers_afbc,
|
||||
|
@ -415,6 +420,7 @@ static const struct vop2_win_data rk3568_vop_win_data[] = {
|
|||
.name = "Cluster1-win0",
|
||||
.phys_id = ROCKCHIP_VOP2_CLUSTER1,
|
||||
.base = 0x1200,
|
||||
.possible_vp_mask = BIT(0) | BIT(1) | BIT(2),
|
||||
.formats = formats_cluster,
|
||||
.nformats = ARRAY_SIZE(formats_cluster),
|
||||
.format_modifiers = format_modifiers_afbc,
|
||||
|
@ -580,6 +586,7 @@ static const struct vop2_win_data rk3588_vop_win_data[] = {
|
|||
.name = "Cluster0-win0",
|
||||
.phys_id = ROCKCHIP_VOP2_CLUSTER0,
|
||||
.base = 0x1000,
|
||||
.possible_vp_mask = BIT(0) | BIT(1) | BIT(2) | BIT(3),
|
||||
.formats = formats_cluster,
|
||||
.nformats = ARRAY_SIZE(formats_cluster),
|
||||
.format_modifiers = format_modifiers_afbc,
|
||||
|
@ -598,6 +605,7 @@ static const struct vop2_win_data rk3588_vop_win_data[] = {
|
|||
.name = "Cluster1-win0",
|
||||
.phys_id = ROCKCHIP_VOP2_CLUSTER1,
|
||||
.base = 0x1200,
|
||||
.possible_vp_mask = BIT(0) | BIT(1) | BIT(2) | BIT(3),
|
||||
.formats = formats_cluster,
|
||||
.nformats = ARRAY_SIZE(formats_cluster),
|
||||
.format_modifiers = format_modifiers_afbc,
|
||||
|
@ -616,6 +624,7 @@ static const struct vop2_win_data rk3588_vop_win_data[] = {
|
|||
.name = "Cluster2-win0",
|
||||
.phys_id = ROCKCHIP_VOP2_CLUSTER2,
|
||||
.base = 0x1400,
|
||||
.possible_vp_mask = BIT(0) | BIT(1) | BIT(2) | BIT(3),
|
||||
.formats = formats_cluster,
|
||||
.nformats = ARRAY_SIZE(formats_cluster),
|
||||
.format_modifiers = format_modifiers_afbc,
|
||||
|
@ -634,6 +643,7 @@ static const struct vop2_win_data rk3588_vop_win_data[] = {
|
|||
.name = "Cluster3-win0",
|
||||
.phys_id = ROCKCHIP_VOP2_CLUSTER3,
|
||||
.base = 0x1600,
|
||||
.possible_vp_mask = BIT(0) | BIT(1) | BIT(2) | BIT(3),
|
||||
.formats = formats_cluster,
|
||||
.nformats = ARRAY_SIZE(formats_cluster),
|
||||
.format_modifiers = format_modifiers_afbc,
|
||||
|
@ -651,6 +661,7 @@ static const struct vop2_win_data rk3588_vop_win_data[] = {
|
|||
}, {
|
||||
.name = "Esmart0-win0",
|
||||
.phys_id = ROCKCHIP_VOP2_ESMART0,
|
||||
.possible_vp_mask = BIT(0) | BIT(1) | BIT(2) | BIT(3),
|
||||
.formats = formats_esmart,
|
||||
.nformats = ARRAY_SIZE(formats_esmart),
|
||||
.format_modifiers = format_modifiers,
|
||||
|
@ -667,6 +678,7 @@ static const struct vop2_win_data rk3588_vop_win_data[] = {
|
|||
}, {
|
||||
.name = "Esmart1-win0",
|
||||
.phys_id = ROCKCHIP_VOP2_ESMART1,
|
||||
.possible_vp_mask = BIT(0) | BIT(1) | BIT(2) | BIT(3),
|
||||
.formats = formats_esmart,
|
||||
.nformats = ARRAY_SIZE(formats_esmart),
|
||||
.format_modifiers = format_modifiers,
|
||||
|
@ -684,6 +696,7 @@ static const struct vop2_win_data rk3588_vop_win_data[] = {
|
|||
.name = "Esmart2-win0",
|
||||
.phys_id = ROCKCHIP_VOP2_ESMART2,
|
||||
.base = 0x1c00,
|
||||
.possible_vp_mask = BIT(0) | BIT(1) | BIT(2) | BIT(3),
|
||||
.formats = formats_esmart,
|
||||
.nformats = ARRAY_SIZE(formats_esmart),
|
||||
.format_modifiers = format_modifiers,
|
||||
|
@ -699,6 +712,7 @@ static const struct vop2_win_data rk3588_vop_win_data[] = {
|
|||
}, {
|
||||
.name = "Esmart3-win0",
|
||||
.phys_id = ROCKCHIP_VOP2_ESMART3,
|
||||
.possible_vp_mask = BIT(0) | BIT(1) | BIT(2) | BIT(3),
|
||||
.formats = formats_esmart,
|
||||
.nformats = ARRAY_SIZE(formats_esmart),
|
||||
.format_modifiers = format_modifiers,
|
||||
|
|
Loading…
Add table
Reference in a new issue