[v3 4/6] drm/vs: Add KMS crtc&plane
Keith Zhao
keith.zhao at starfivetech.com
Thu Feb 1 02:22:16 UTC 2024
> -----Original Message-----
> From: Maxime Ripard <mripard at kernel.org>
> Sent: 2024年1月31日 21:24
> To: Keith Zhao <keith.zhao at starfivetech.com>
> Cc: devicetree at vger.kernel.org; dri-devel at lists.freedesktop.org;
> linux-kernel at vger.kernel.org; linux-riscv at lists.infradead.org;
> tzimmermann at suse.de; airlied at gmail.com; krzysztof.kozlowski+dt at linaro.org;
> William Qiu <william.qiu at starfivetech.com>; Xingyu Wu
> <xingyu.wu at starfivetech.com>; paul.walmsley at sifive.com;
> aou at eecs.berkeley.edu; palmer at dabbelt.com; p.zabel at pengutronix.de;
> Shengyang Chen <shengyang.chen at starfivetech.com>; Jack Zhu
> <jack.zhu at starfivetech.com>; Changhuang Liang
> <changhuang.liang at starfivetech.com>; maarten.lankhorst at linux.intel.com
> Subject: Re: [v3 4/6] drm/vs: Add KMS crtc&plane
>
> On Wed, Jan 31, 2024 at 09:33:06AM +0000, Keith Zhao wrote:
> >
> >
> > > -----邮件原件-----
> > > 发件人: Maxime Ripard <mripard at kernel.org<mailto:mripard at kernel.org>>
> > > 发送时间: 2023年12月6日 16:56
> > > 收件人: Keith Zhao <keith.zhao at starfivetech.com<mailto:keith.zhao at starfivetech.com>>
> > > 抄送: devicetree at vger.kernel.org<mailto:devicetree at vger.kernel.org>; dri-devel at lists.freedesktop.org<mailto:dri-devel at lists.freedesktop.org>;
> > > linux-kernel at vger.kernel.org<mailto:linux-kernel at vger.kernel.org>; linux-riscv at lists.infradead.org<mailto:linux-riscv at lists.infradead.org>;
> > > tzimmermann at suse.de<mailto:tzimmermann at suse.de>; airlied at gmail.com<mailto:airlied at gmail.com>;
> > > krzysztof.kozlowski+dt at linaro.org<mailto:krzysztof.kozlowski+dt at linaro.org>;
> > > William Qiu <william.qiu at starfivetech.com<mailto:william.qiu at starfivetech.com>>; Xingyu Wu
> > > <xingyu.wu at starfivetech.com<mailto:xingyu.wu at starfivetech.com>>; paul.walmsley at sifive.com<mailto:paul.walmsley at sifive.com>;
> > > aou at eecs.berkeley.edu<mailto:aou at eecs.berkeley.edu>; palmer at dabbelt.com<mailto:palmer at dabbelt.com>; p.zabel at pengutronix.de<mailto:p.zabel at pengutronix.de>;
> > > Shengyang Chen <shengyang.chen at starfivetech.com<mailto:shengyang.chen at starfivetech.com>>; Jack Zhu
> > > <jack.zhu at starfivetech.com<mailto:jack.zhu at starfivetech.com>>; Changhuang Liang
> > > <changhuang.liang at starfivetech.com<mailto:changhuang.liang at starfivetech.com>>;
> > > maarten.lankhorst at linux.intel.com<mailto:maarten.lankhorst at linux.intel.com>;
> > > suijingfeng at loongson.cn<mailto:suijingfeng at loongson.cn>
> > > 主题: Re: [v3 4/6] drm/vs: Add KMS crtc&plane
> > >
> > > On Mon, Dec 04, 2023 at 08:33:13PM +0800, Keith Zhao wrote:
> > > > +static const struct vs_plane_info dc_hw_planes_rev0[PLANE_NUM] = {
> > > > + {
> > > > + .name = "Primary",
> > > > + .id = PRIMARY_PLANE_0,
> > > > + .type = DRM_PLANE_TYPE_PRIMARY,
> > > > + .num_formats = ARRAY_SIZE(primary_overlay_format0),
> > > > + .formats = primary_overlay_format0,
> > > > + .num_modifiers = ARRAY_SIZE(format_modifier0),
> > > > + .modifiers = format_modifier0,
> > > > + .min_width = 0,
> > > > + .min_height = 0,
> > > > + .max_width = 4096,
> > > > + .max_height = 4096,
> > > > + .rotation = DRM_MODE_ROTATE_0 |
> > > > + DRM_MODE_ROTATE_90 |
> > > > + DRM_MODE_ROTATE_180 |
> > > > + DRM_MODE_ROTATE_270 |
> > > > + DRM_MODE_REFLECT_X |
> > > > + DRM_MODE_REFLECT_Y,
> > > > + .blend_mode = BIT(DRM_MODE_BLEND_PIXEL_NONE) |
> > > > + BIT(DRM_MODE_BLEND_PREMULTI) |
> > > > + BIT(DRM_MODE_BLEND_COVERAGE),
> > > > + .color_encoding = BIT(DRM_COLOR_YCBCR_BT709) |
> > > > + BIT(DRM_COLOR_YCBCR_BT2020),
> > > > + .degamma_size = DEGAMMA_SIZE,
> > > > + .min_scale = FRAC_16_16(1, 3),
> > > > + .max_scale = FRAC_16_16(10, 1),
> > > > + .zpos = 0,
> > > > + .watermark = true,
> > > > + .color_mgmt = true,
> > > > + .roi = true,
> > > > + },
> > > > + {
> > > > + .name = "Overlay",
> > > > + .id = OVERLAY_PLANE_0,
> > > > + .type = DRM_PLANE_TYPE_OVERLAY,
> > > > + .num_formats = ARRAY_SIZE(primary_overlay_format0),
> > > > + .formats = primary_overlay_format0,
> > > > + .num_modifiers = ARRAY_SIZE(format_modifier0),
> > > > + .modifiers = format_modifier0,
> > > > + .min_width = 0,
> > > > + .min_height = 0,
> > > > + .max_width = 4096,
> > > > + .max_height = 4096,
> > > > + .rotation = DRM_MODE_ROTATE_0 |
> > > > + DRM_MODE_ROTATE_90 |
> > > > + DRM_MODE_ROTATE_180 |
> > > > + DRM_MODE_ROTATE_270 |
> > > > + DRM_MODE_REFLECT_X |
> > > > + DRM_MODE_REFLECT_Y,
> > > > + .blend_mode = BIT(DRM_MODE_BLEND_PIXEL_NONE) |
> > > > + BIT(DRM_MODE_BLEND_PREMULTI) |
> > > > + BIT(DRM_MODE_BLEND_COVERAGE),
> > > > + .color_encoding = BIT(DRM_COLOR_YCBCR_BT709) |
> > > > + BIT(DRM_COLOR_YCBCR_BT2020),
> > > > + .degamma_size = DEGAMMA_SIZE,
> > > > + .min_scale = FRAC_16_16(1, 3),
> > > > + .max_scale = FRAC_16_16(10, 1),
> > > > + .zpos = 1,
> > > > + .watermark = true,
> > > > + .color_mgmt = true,
> > > > + .roi = true,
> > > > + },
> > > > + {
> > > > + .name = "Overlay_1",
> > > > + .id = OVERLAY_PLANE_1,
> > > > + .type = DRM_PLANE_TYPE_OVERLAY,
> > > > + .num_formats = ARRAY_SIZE(primary_overlay_format0),
> > > > + .formats = primary_overlay_format0,
> > > > + .num_modifiers =
> ARRAY_SIZE(secondary_format_modifiers),
> > > > + .modifiers = secondary_format_modifiers,
> > > > + .min_width = 0,
> > > > + .min_height = 0,
> > > > + .max_width = 4096,
> > > > + .max_height = 4096,
> > > > + .rotation = 0,
> > > > + .blend_mode = BIT(DRM_MODE_BLEND_PIXEL_NONE) |
> > > > + BIT(DRM_MODE_BLEND_PREMULTI) |
> > > > + BIT(DRM_MODE_BLEND_COVERAGE),
> > > > + .color_encoding = BIT(DRM_COLOR_YCBCR_BT709) |
> > > > + BIT(DRM_COLOR_YCBCR_BT2020),
> > > > + .degamma_size = DEGAMMA_SIZE,
> > > > + .min_scale = DRM_PLANE_NO_SCALING,
> > > > + .max_scale = DRM_PLANE_NO_SCALING,
> > > > + .zpos = 2,
> > > > + .watermark = true,
> > > > + .color_mgmt = true,
> > > > + .roi = true,
> > > > + },
> > > > + {
> > > > + .name = "Primary_1",
> > > > + .id = PRIMARY_PLANE_1,
> > > > + .type = DRM_PLANE_TYPE_PRIMARY,
> > > > + .num_formats = ARRAY_SIZE(primary_overlay_format0),
> > > > + .formats = primary_overlay_format0,
> > > > + .num_modifiers = ARRAY_SIZE(format_modifier0),
> > > > + .modifiers = format_modifier0,
> > > > + .min_width = 0,
> > > > + .min_height = 0,
> > > > + .max_width = 4096,
> > > > + .max_height = 4096,
> > > > + .rotation = DRM_MODE_ROTATE_0 |
> > > > + DRM_MODE_ROTATE_90 |
> > > > + DRM_MODE_ROTATE_180 |
> > > > + DRM_MODE_ROTATE_270 |
> > > > + DRM_MODE_REFLECT_X |
> > > > + DRM_MODE_REFLECT_Y,
> > > > + .blend_mode = BIT(DRM_MODE_BLEND_PIXEL_NONE) |
> > > > + BIT(DRM_MODE_BLEND_PREMULTI) |
> > > > + BIT(DRM_MODE_BLEND_COVERAGE),
> > > > + .color_encoding = BIT(DRM_COLOR_YCBCR_BT709) |
> > > > + BIT(DRM_COLOR_YCBCR_BT2020),
> > > > + .degamma_size = DEGAMMA_SIZE,
> > > > + .min_scale = FRAC_16_16(1, 3),
> > > > + .max_scale = FRAC_16_16(10, 1),
> > > > + .zpos = 3,
> > > > + .watermark = true,
> > > > + .color_mgmt = true,
> > > > + .roi = true,
> > > > + },
> > > > + {
> > > > + .name = "Overlay_2",
> > > > + .id = OVERLAY_PLANE_2,
> > > > + .type = DRM_PLANE_TYPE_OVERLAY,
> > > > + .num_formats = ARRAY_SIZE(primary_overlay_format0),
> > > > + .formats = primary_overlay_format0,
> > > > + .num_modifiers = ARRAY_SIZE(format_modifier0),
> > > > + .modifiers = format_modifier0,
> > > > + .min_width = 0,
> > > > + .min_height = 0,
> > > > + .max_width = 4096,
> > > > + .max_height = 4096,
> > > > + .rotation = DRM_MODE_ROTATE_0 |
> > > > + DRM_MODE_ROTATE_90 |
> > > > + DRM_MODE_ROTATE_180 |
> > > > + DRM_MODE_ROTATE_270 |
> > > > + DRM_MODE_REFLECT_X |
> > > > + DRM_MODE_REFLECT_Y,
> > > > + .blend_mode = BIT(DRM_MODE_BLEND_PIXEL_NONE) |
> > > > + BIT(DRM_MODE_BLEND_PREMULTI) |
> > > > + BIT(DRM_MODE_BLEND_COVERAGE),
> > > > + .color_encoding = BIT(DRM_COLOR_YCBCR_BT709) |
> > > > + BIT(DRM_COLOR_YCBCR_BT2020),
> > > > + .degamma_size = DEGAMMA_SIZE,
> > > > + .min_scale = FRAC_16_16(1, 3),
> > > > + .max_scale = FRAC_16_16(10, 1),
> > > > + .zpos = 4,
> > > > + .watermark = true,
> > > > + .color_mgmt = true,
> > > > + .roi = true,
> > > > + },
> > > > + {
> > > > + .name = "Overlay_3",
> > > > + .id = OVERLAY_PLANE_3,
> > > > + .type = DRM_PLANE_TYPE_OVERLAY,
> > > > + .num_formats = ARRAY_SIZE(primary_overlay_format0),
> > > > + .formats = primary_overlay_format0,
> > > > + .num_modifiers =
> ARRAY_SIZE(secondary_format_modifiers),
> > > > + .modifiers = secondary_format_modifiers,
> > > > + .min_width = 0,
> > > > + .min_height = 0,
> > > > + .max_width = 4096,
> > > > + .max_height = 4096,
> > > > + .rotation = 0,
> > > > + .blend_mode = BIT(DRM_MODE_BLEND_PIXEL_NONE) |
> > > > + BIT(DRM_MODE_BLEND_PREMULTI) |
> > > > + BIT(DRM_MODE_BLEND_COVERAGE),
> > > > + .color_encoding = BIT(DRM_COLOR_YCBCR_BT709) |
> > > > + BIT(DRM_COLOR_YCBCR_BT2020),
> > > > + .degamma_size = DEGAMMA_SIZE,
> > > > + .min_scale = DRM_PLANE_NO_SCALING,
> > > > + .max_scale = DRM_PLANE_NO_SCALING,
> > > > + .zpos = 5,
> > > > + .watermark = true,
> > > > + .color_mgmt = true,
> > > > + .roi = true,
> > > > + },
> > > > + {
> > > > + .name = "Cursor",
> > > > + .id = CURSOR_PLANE_0,
> > > > + .type = DRM_PLANE_TYPE_CURSOR,
> > > > + .num_formats = ARRAY_SIZE(cursor_formats),
> > > > + .formats = cursor_formats,
> > > > + .num_modifiers = 0,
> > > > + .modifiers = NULL,
> > > > + .min_width = 32,
> > > > + .min_height = 32,
> > > > + .max_width = 64,
> > > > + .max_height = 64,
> > > > + .rotation = 0,
> > > > + .degamma_size = 0,
> > > > + .min_scale = DRM_PLANE_NO_SCALING,
> > > > + .max_scale = DRM_PLANE_NO_SCALING,
> > > > + .zpos = 255,
> > > > + .watermark = false,
> > > > + .color_mgmt = false,
> > > > + .roi = false,
> > > > + },
> > > > + {
> > > > + .name = "Cursor_1",
> > > > + .id = CURSOR_PLANE_1,
> > > > + .type = DRM_PLANE_TYPE_CURSOR,
> > > > + .num_formats = ARRAY_SIZE(cursor_formats),
> > > > + .formats = cursor_formats,
> > > > + .num_modifiers = 0,
> > > > + .modifiers = NULL,
> > > > + .min_width = 32,
> > > > + .min_height = 32,
> > > > + .max_width = 64,
> > > > + .max_height = 64,
> > > > + .rotation = 0,
> > > > + .degamma_size = 0,
> > > > + .min_scale = DRM_PLANE_NO_SCALING,
> > > > + .max_scale = DRM_PLANE_NO_SCALING,
> > > > + .zpos = 255,
> > > > + .watermark = false,
> > > > + .color_mgmt = false,
> > > > + .roi = false,
> > > > + },
> > > > +};
> > > > +
> > > > +static const struct vs_dc_info dc8200_info = {
> > > > + .name = "DC8200",
> > > > + .panel_num = 2,
> > > > + .plane_num = 8,
> > > > + .planes = dc_hw_planes_rev0,
> > > > + .layer_num = 6,
> > > > + .max_bpc = 10,
> > > > + .color_formats = DRM_COLOR_FORMAT_RGB444 |
> > > > + DRM_COLOR_FORMAT_YCBCR444 |
> > > > + DRM_COLOR_FORMAT_YCBCR422 |
> > > > + DRM_COLOR_FORMAT_YCBCR420,
> > > > + .gamma_size = GAMMA_EX_SIZE,
> > > > + .gamma_bits = 12,
> > > > + .pitch_alignment = 128,
> > > > + .pipe_sync = false,
> > > > + .background = true,
> > > > + .panel_sync = true,
> > > > + .cap_dec = true,
> > > > +};
> > >
> > > I really think that entire thing is to workaround a suboptimal device tree
> binding.
> > > You should have two CRTCs in the device tree, you'll probe twice,
> > > and you won't get to do that whole dance.
> > >
>
> > I tried to modify it according to this idea Found it too difficult In
> > terms of hardware, the two crtc designs are too close to separate, and
> > they are even designed into the same reg with different bits
> > representing crtc0 and crtc1. It seems not easy to described the 2
> > ctrc hardware by 2 device nodes
>
> What are these bits doing?
[cid:image001.png at 01DA54F5.ECEA9C10]
For example:
like this , bit0 and bit1 match ctrc0 and crtc1 , it is used to start crtc
A similar situation exists for other register definitions.
Another case is that ctrc0 and crtc1 have the same function and their offset is continuous,
instead of crtc0 being a continuous area, crtc1 being a continuous area
reg:
crtc0 X
crtc1 X+4
crtc0 X+8
crtc1 X+12
if to make it two separate devices, the device node dts reg attribute would be complex
>
> > The idea is to avoid a whole dance I don't know if I understand
> > correctly about whole dance. Is it means I create 2 ctrc and 8 plane
> > in the dc_bind?
>
> Yeah, you should strive to make it two separate devices.
>
> Maxime
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/dri-devel/attachments/20240201/572b3a0f/attachment-0001.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image001.png
Type: image/png
Size: 70280 bytes
Desc: image001.png
URL: <https://lists.freedesktop.org/archives/dri-devel/attachments/20240201/572b3a0f/attachment-0001.png>
More information about the dri-devel
mailing list