drivers/gpu/drm/mediatek/mtk_crtc.c | 1 + drivers/gpu/drm/mediatek/mtk_ddp_comp.c | 2 + drivers/gpu/drm/mediatek/mtk_ddp_comp.h | 10 ++++ drivers/gpu/drm/mediatek/mtk_disp_drv.h | 2 + drivers/gpu/drm/mediatek/mtk_disp_ovl.c | 48 ++++++++++++++++--- .../gpu/drm/mediatek/mtk_disp_ovl_adaptor.c | 7 +++ drivers/gpu/drm/mediatek/mtk_ethdr.c | 7 +++ drivers/gpu/drm/mediatek/mtk_ethdr.h | 1 + drivers/gpu/drm/mediatek/mtk_plane.c | 15 +++--- drivers/gpu/drm/mediatek/mtk_plane.h | 4 +- 10 files changed, 80 insertions(+), 17 deletions(-)
Some SoCs not support pre-multiplied pixel formats and extending configuration of OVL pre-multiplied color formats, such as MT8173. Fix the SoC degradation problem by this sreies. --- Change in v7: 1. Add the remove color format comment patch for OVL 2. Fix warning: 'const' type qualifier on return type has no effect Chnage in v6: 1. Use blend_modes instead of function pointer in OVL 2. Use ethdr instead of mdp_rdma to get blend_modes 3. Add 0 checking for adding blend_mode property for mtk_plane Change in v5: Add fix patch for mtk_plane Change in v4: Add lost cases of mtk_ovl_fmt_convert_with_blend Change in v3: Change MACRO approach to function pointer in driver data Change in v2: Fix build error and typo Change in v1: Add fix patch for OVL unsupport color format settings by driver data --- Jason-JH.Lin (3): drm/mediatek: ovl: Remove the color format comment for ovl_fmt_convert() drm/mediatek: ovl: Add blend_modes to driver data drm/mediatek: Add blend_modes to mtk_plane_init() for different SoCs drivers/gpu/drm/mediatek/mtk_crtc.c | 1 + drivers/gpu/drm/mediatek/mtk_ddp_comp.c | 2 + drivers/gpu/drm/mediatek/mtk_ddp_comp.h | 10 ++++ drivers/gpu/drm/mediatek/mtk_disp_drv.h | 2 + drivers/gpu/drm/mediatek/mtk_disp_ovl.c | 48 ++++++++++++++++--- .../gpu/drm/mediatek/mtk_disp_ovl_adaptor.c | 7 +++ drivers/gpu/drm/mediatek/mtk_ethdr.c | 7 +++ drivers/gpu/drm/mediatek/mtk_ethdr.h | 1 + drivers/gpu/drm/mediatek/mtk_plane.c | 15 +++--- drivers/gpu/drm/mediatek/mtk_plane.h | 4 +- 10 files changed, 80 insertions(+), 17 deletions(-) -- 2.43.0
Hi, On 2024-09-26 13:22 +03:00, Jason-JH.Lin wrote: > Some SoCs not support pre-multiplied pixel formats and extending > configuration of OVL pre-multiplied color formats, such as MT8173. > > Fix the SoC degradation problem by this sreies. > > --- > > Change in v7: > 1. Add the remove color format comment patch for OVL > 2. Fix warning: 'const' type qualifier on return type has no effect > > [...] I get warnings and "*ERROR* failed to create property: blend_mode" a few times until mediatek-drm initializes. It happens on MT8173 and MT8183, but not on MT8186. Colors are correct, though. (I'm tempted to add Tested-by.) ------8<------ From MT8173: [ +0.017201] ------------[ cut here ]------------ [ +0.009250] WARNING: CPU: 3 PID: 37 at drivers/gpu/drm/drm_blend.c:586 drm_plane_create_blend_mode_property+0xf0/0x110 [drm] [ +0.022533] Modules linked in: [...] [ +0.158166] CPU: 3 UID: 0 PID: 37 Comm: kworker/u16:1 Tainted: G W 6.11.0-next-20240927-deb-00006-ge514a0f89dd9 # [ +0.023542] Tainted: [W]=WARN [ +0.005936] Hardware name: Google Hana (DT) [ +0.008379] Workqueue: events_unbound deferred_probe_work_func [ +0.011694] pstate: 80000005 (Nzcv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--) [ +0.013959] pc : drm_plane_create_blend_mode_property+0xf0/0x110 [drm] [ +0.013111] lr : mtk_plane_init+0xf4/0x198 [mediatek_drm] [ +0.010829] sp : ffff800081d538c0 [ +0.006634] x29: ffff800081d538c0 x28: ffff0000c431e080 x27: ffff0000c19787a8 [ +0.014314] x26: 0000000000000548 x25: 0000000000000006 x24: ffff0000c431f000 [ +0.014317] x23: 0000000000000035 x22: 0000000000000006 x21: ffff0000c0ca1058 [ +0.014313] x20: 0000000000000006 x19: 0000000000000000 x18: ffffffffffffffff [ +0.014314] x17: 6f72702065746165 x16: 7263206f74206465 x15: ffff0000c414e626 [ +0.014316] x14: 0000000000000000 x13: 0000000000000028 x12: 0101010101010101 [ +0.014313] x11: 7f7f7f7f7f7f7f7f x10: fefefeff726e6f79 x9 : ffff800079e689dc [ +0.014316] x8 : ffff0000c5875554 x7 : 00000000eeeeeeee x6 : 00000000c0c0c0c0 [ +0.014314] x5 : 0000000000000000 x4 : ffff0000c0ca1190 x3 : ffff0000c0ca1190 [ +0.014313] x2 : 000000000000ffff x1 : 0000000000000006 x0 : ffff0000c0ca1058 [ +0.014314] Call trace: [ +0.004891] drm_plane_create_blend_mode_property+0xf0/0x110 [drm] [ +0.012415] mtk_plane_init+0xf4/0x198 [mediatek_drm] [ +0.010132] mtk_crtc_create+0x34c/0x858 [mediatek_drm] [ +0.010479] mtk_drm_bind+0x4b4/0x600 [mediatek_drm] [ +0.009956] try_to_bring_up_aggregate_device+0x21c/0x2e8 [ +0.010825] __component_add+0xc0/0x1c0 [ +0.007685] component_add+0x1c/0x38 [ +0.007163] mtk_disp_rdma_probe+0x148/0x230 [mediatek_drm] [ +0.011175] platform_probe+0x70/0xe8 [ +0.007338] really_probe+0xc8/0x3a0 [ +0.007161] __driver_probe_device+0x84/0x160 [ +0.008730] driver_probe_device+0x44/0x130 [ +0.008379] __device_attach_driver+0xc4/0x170 [ +0.008905] bus_for_each_drv+0x90/0x100 [ +0.007855] __device_attach+0xa8/0x1c8 [ +0.007685] device_initial_probe+0x1c/0x30 [ +0.008380] bus_probe_device+0xb0/0xc0 [ +0.007683] deferred_probe_work_func+0xbc/0x120 [ +0.009253] process_one_work+0x178/0x3d0 [ +0.008033] worker_thread+0x200/0x3f0 [ +0.007511] kthread+0xe8/0xf8 [ +0.006115] ret_from_fork+0x10/0x20 [ +0.007164] ---[ end trace 0000000000000000 ]--- [ +0.009278] [drm:mtk_plane_init [mediatek_drm]] *ERROR* failed to create property: blend_mode From MT8183: [ 13.936989] ------------[ cut here ]------------ [ 13.946224] WARNING: CPU: 5 PID: 60 at drivers/gpu/drm/drm_blend.c:586 drm_plane_create_blend_mode_property+0xf0/0x110 [drm] [ 13.968714] Modules linked in: [...] [ 14.116814] CPU: 5 UID: 0 PID: 60 Comm: kworker/u34:2 Tainted: G W 6.11.0-next-20240927-deb-00006-ge514a0f89dd9 #1 [ 14.140323] Tainted: [W]=WARN [ 14.146248] Hardware name: Google cozmo board (DT) [ 14.155830] Workqueue: events_unbound deferred_probe_work_func [ 14.167505] pstate: 80000005 (Nzcv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--) [ 14.181440] pc : drm_plane_create_blend_mode_property+0xf0/0x110 [drm] [ 14.194529] lr : mtk_plane_init+0xf4/0x188 [mediatek_drm] [ 14.205338] sp : ffff8000804a3860 [ 14.211960] x29: ffff8000804a3860 x28: ffff715445288080 x27: ffff7154417fa748 [ 14.226247] x26: 0000000000000548 x25: 0000000000000006 x24: ffff71544528a000 [ 14.240536] x23: 0000000000000035 x22: 0000000000000006 x21: ffff715445a49ae8 [ 14.254822] x20: 0000000000000006 x19: 0000000000000000 x18: ffffffffffffffff [ 14.269110] x17: 6f72702065746165 x16: ffffd6facceae8c0 x15: ffff715470421d46 [ 14.283398] x14: 0000000000000000 x13: 0000000000000028 x12: 0101010101010101 [ 14.297686] x11: 7f7f7f7f7f7f7f7f x10: fefefeff726e6f79 x9 : ffffd6fa92d179dc [ 14.311973] x8 : ffff715445156ad4 x7 : 00000000eeeeeeee x6 : 00000000c0c0c0c0 [ 14.326261] x5 : 0000000000000000 x4 : ffff715445a49c20 x3 : ffff715445a49c20 [ 14.340549] x2 : 000000000000ffff x1 : 0000000000000006 x0 : ffff715445a49ae8 [ 14.354837] Call trace: [ 14.359718] drm_plane_create_blend_mode_property+0xf0/0x110 [drm] [ 14.372111] mtk_plane_init+0xf4/0x188 [mediatek_drm] [ 14.382224] mtk_crtc_create+0x34c/0x858 [mediatek_drm] [ 14.392685] mtk_drm_bind+0x51c/0x600 [mediatek_drm] [ 14.402622] try_to_bring_up_aggregate_device+0x21c/0x2e8 [ 14.413425] __component_add+0xc0/0x1c0 [ 14.421094] component_add+0x1c/0x38 [ 14.428241] mtk_dsi_host_attach+0x80/0xe0 [mediatek_drm] [ 14.439049] devm_mipi_dsi_attach+0x3c/0xa0 [ 14.447413] anx7625_link_bridge+0xfc/0x1c8 [anx7625] [ 14.457522] dp_aux_ep_probe+0x54/0x110 [drm_dp_aux_bus] [ 14.468150] really_probe+0xc8/0x3a0 [ 14.475296] __driver_probe_device+0x84/0x160 [ 14.484009] driver_probe_device+0x44/0x130 [ 14.492374] __device_attach_driver+0xc4/0x170 [ 14.501261] bus_for_each_drv+0x90/0x100 [ 14.509103] __device_attach+0xa8/0x1c8 [ 14.516772] device_initial_probe+0x1c/0x30 [ 14.525137] bus_probe_device+0xb0/0xc0 [ 14.532805] deferred_probe_work_func+0xbc/0x120 [ 14.542040] process_one_work+0x178/0x3d0 [ 14.550059] worker_thread+0x200/0x3f0 [ 14.557553] kthread+0xe8/0xf8 [ 14.563656] ret_from_fork+0x10/0x20 [ 14.570803] ---[ end trace 0000000000000000 ]--- [ 14.580052] [drm:mtk_plane_init [mediatek_drm]] *ERROR* failed to create property: blend_mode
Hi Alper, On Sat, 2024-09-28 at 16:02 +0300, Alper Nebi Yasak wrote: > > External email : Please do not click links or open attachments until > you have verified the sender or the content. > Hi, > > On 2024-09-26 13:22 +03:00, Jason-JH.Lin wrote: > > Some SoCs not support pre-multiplied pixel formats and extending > > configuration of OVL pre-multiplied color formats, such as MT8173. > > > > Fix the SoC degradation problem by this sreies. > > > > --- > > > > Change in v7: > > 1. Add the remove color format comment patch for OVL > > 2. Fix warning: 'const' type qualifier on return type has no effect > > > > [...] > > I get warnings and "*ERROR* failed to create property: blend_mode" a > few > times until mediatek-drm initializes. It happens on MT8173 and > MT8183, but > not on MT8186. Colors are correct, though. (I'm tempted to add > Tested-by.) > MT8186 is using MT8192's compatible name, so its blend_modes suppots pre-multiplied. > ------8<------ > > From MT8173: > > [ +0.017201] ------------[ cut here ]------------ > [ +0.009250] WARNING: CPU: 3 PID: 37 at > drivers/gpu/drm/drm_blend.c:586 > drm_plane_create_blend_mode_property+0xf0/0x110 [drm] > [ +0.022533] Modules linked in: [...] > [ +0.158166] CPU: 3 UID: 0 PID: 37 Comm: kworker/u16:1 Tainted: > G W 6.11.0-next-20240927-deb-00006-ge514a0f89dd9 # > [ +0.023542] Tainted: [W]=WARN > [ +0.005936] Hardware name: Google Hana (DT) > [ +0.008379] Workqueue: events_unbound deferred_probe_work_func > [ +0.011694] pstate: 80000005 (Nzcv daif -PAN -UAO -TCO -DIT -SSBS > BTYPE=--) > [ +0.013959] pc : drm_plane_create_blend_mode_property+0xf0/0x110 > [drm] > [ +0.013111] lr : mtk_plane_init+0xf4/0x198 [mediatek_drm] > [ +0.010829] sp : ffff800081d538c0 > [ +0.006634] x29: ffff800081d538c0 x28: ffff0000c431e080 x27: > ffff0000c19787a8 > [ +0.014314] x26: 0000000000000548 x25: 0000000000000006 x24: > ffff0000c431f000 > [ +0.014317] x23: 0000000000000035 x22: 0000000000000006 x21: > ffff0000c0ca1058 > [ +0.014313] x20: 0000000000000006 x19: 0000000000000000 x18: > ffffffffffffffff > [ +0.014314] x17: 6f72702065746165 x16: 7263206f74206465 x15: > ffff0000c414e626 > [ +0.014316] x14: 0000000000000000 x13: 0000000000000028 x12: > 0101010101010101 > [ +0.014313] x11: 7f7f7f7f7f7f7f7f x10: fefefeff726e6f79 x9 : > ffff800079e689dc > [ +0.014316] x8 : ffff0000c5875554 x7 : 00000000eeeeeeee x6 : > 00000000c0c0c0c0 > [ +0.014314] x5 : 0000000000000000 x4 : ffff0000c0ca1190 x3 : > ffff0000c0ca1190 > [ +0.014313] x2 : 000000000000ffff x1 : 0000000000000006 x0 : > ffff0000c0ca1058 > [ +0.014314] Call trace: > [ +0.004891] drm_plane_create_blend_mode_property+0xf0/0x110 [drm] > [ +0.012415] mtk_plane_init+0xf4/0x198 [mediatek_drm] > [ +0.010132] mtk_crtc_create+0x34c/0x858 [mediatek_drm] > [ +0.010479] mtk_drm_bind+0x4b4/0x600 [mediatek_drm] > [ +0.009956] try_to_bring_up_aggregate_device+0x21c/0x2e8 > [ +0.010825] __component_add+0xc0/0x1c0 > [ +0.007685] component_add+0x1c/0x38 > [ +0.007163] mtk_disp_rdma_probe+0x148/0x230 [mediatek_drm] > [ +0.011175] platform_probe+0x70/0xe8 > [ +0.007338] really_probe+0xc8/0x3a0 > [ +0.007161] __driver_probe_device+0x84/0x160 > [ +0.008730] driver_probe_device+0x44/0x130 > [ +0.008379] __device_attach_driver+0xc4/0x170 > [ +0.008905] bus_for_each_drv+0x90/0x100 > [ +0.007855] __device_attach+0xa8/0x1c8 > [ +0.007685] device_initial_probe+0x1c/0x30 > [ +0.008380] bus_probe_device+0xb0/0xc0 > [ +0.007683] deferred_probe_work_func+0xbc/0x120 > [ +0.009253] process_one_work+0x178/0x3d0 > [ +0.008033] worker_thread+0x200/0x3f0 > [ +0.007511] kthread+0xe8/0xf8 > [ +0.006115] ret_from_fork+0x10/0x20 > [ +0.007164] ---[ end trace 0000000000000000 ]--- > [ +0.009278] [drm:mtk_plane_init [mediatek_drm]] *ERROR* failed to > create property: blend_mode > > From MT8183: > > [ 13.936989] ------------[ cut here ]------------ > [ 13.946224] WARNING: CPU: 5 PID: 60 at > drivers/gpu/drm/drm_blend.c:586 > drm_plane_create_blend_mode_property+0xf0/0x110 [drm] > [ 13.968714] Modules linked in: [...] > [ 14.116814] CPU: 5 UID: 0 PID: 60 Comm: kworker/u34:2 Tainted: > G W 6.11.0-next-20240927-deb-00006-ge514a0f89dd9 #1 > [ 14.140323] Tainted: [W]=WARN > [ 14.146248] Hardware name: Google cozmo board (DT) > [ 14.155830] Workqueue: events_unbound deferred_probe_work_func > [ 14.167505] pstate: 80000005 (Nzcv daif -PAN -UAO -TCO -DIT -SSBS > BTYPE=--) > [ 14.181440] pc : drm_plane_create_blend_mode_property+0xf0/0x110 > [drm] > [ 14.194529] lr : mtk_plane_init+0xf4/0x188 [mediatek_drm] > [ 14.205338] sp : ffff8000804a3860 > [ 14.211960] x29: ffff8000804a3860 x28: ffff715445288080 x27: > ffff7154417fa748 > [ 14.226247] x26: 0000000000000548 x25: 0000000000000006 x24: > ffff71544528a000 > [ 14.240536] x23: 0000000000000035 x22: 0000000000000006 x21: > ffff715445a49ae8 > [ 14.254822] x20: 0000000000000006 x19: 0000000000000000 x18: > ffffffffffffffff > [ 14.269110] x17: 6f72702065746165 x16: ffffd6facceae8c0 x15: > ffff715470421d46 > [ 14.283398] x14: 0000000000000000 x13: 0000000000000028 x12: > 0101010101010101 > [ 14.297686] x11: 7f7f7f7f7f7f7f7f x10: fefefeff726e6f79 x9 : > ffffd6fa92d179dc > [ 14.311973] x8 : ffff715445156ad4 x7 : 00000000eeeeeeee x6 : > 00000000c0c0c0c0 > [ 14.326261] x5 : 0000000000000000 x4 : ffff715445a49c20 x3 : > ffff715445a49c20 > [ 14.340549] x2 : 000000000000ffff x1 : 0000000000000006 x0 : > ffff715445a49ae8 > [ 14.354837] Call trace: > [ 14.359718] drm_plane_create_blend_mode_property+0xf0/0x110 [drm] > [ 14.372111] mtk_plane_init+0xf4/0x188 [mediatek_drm] > [ 14.382224] mtk_crtc_create+0x34c/0x858 [mediatek_drm] > [ 14.392685] mtk_drm_bind+0x51c/0x600 [mediatek_drm] > [ 14.402622] try_to_bring_up_aggregate_device+0x21c/0x2e8 > [ 14.413425] __component_add+0xc0/0x1c0 > [ 14.421094] component_add+0x1c/0x38 > [ 14.428241] mtk_dsi_host_attach+0x80/0xe0 [mediatek_drm] > [ 14.439049] devm_mipi_dsi_attach+0x3c/0xa0 > [ 14.447413] anx7625_link_bridge+0xfc/0x1c8 [anx7625] > [ 14.457522] dp_aux_ep_probe+0x54/0x110 [drm_dp_aux_bus] > [ 14.468150] really_probe+0xc8/0x3a0 > [ 14.475296] __driver_probe_device+0x84/0x160 > [ 14.484009] driver_probe_device+0x44/0x130 > [ 14.492374] __device_attach_driver+0xc4/0x170 > [ 14.501261] bus_for_each_drv+0x90/0x100 > [ 14.509103] __device_attach+0xa8/0x1c8 > [ 14.516772] device_initial_probe+0x1c/0x30 > [ 14.525137] bus_probe_device+0xb0/0xc0 > [ 14.532805] deferred_probe_work_func+0xbc/0x120 > [ 14.542040] process_one_work+0x178/0x3d0 > [ 14.550059] worker_thread+0x200/0x3f0 > [ 14.557553] kthread+0xe8/0xf8 > [ 14.563656] ret_from_fork+0x10/0x20 > [ 14.570803] ---[ end trace 0000000000000000 ]--- > [ 14.580052] [drm:mtk_plane_init [mediatek_drm]] *ERROR* failed to > create property: blend_mode Take a glimpse of drm_plane_create_blend_mode_property(), it can simply find the reason here: /** * drm_plane_create_blend_mode_property - create a new blend mode property * @plane: drm plane * @supported_modes: bitmask of supported modes, must include * BIT(DRM_MODE_BLEND_PREMULTI). Current DRM assumption is * that alpha is premultiplied, and old userspace can break if * the property defaults to anything else. ... * RETURNS: * Zero for success or -errno */ int drm_plane_create_blend_mode_property(struct drm_plane *plane, unsigned int supported_modes) { unsigned int valid_mode_mask = BIT(DRM_MODE_BLEND_PIXEL_NONE) | BIT(DRM_MODE_BLEND_PREMULTI) | BIT(DRM_MODE_BLEND_COVERAGE); ... if (WARN_ON((supported_modes & ~valid_mode_mask) || ((supported_modes & BIT(DRM_MODE_BLEND_PREMULTI)) == 0))) return -EINVAL; ... } So I think if the SoCs don't support pre-multiplied color formats, then just not create the blend_mode property and use the coverage mode color format as default settings for OVL. I'll send v8 for this. Thanks for the verification on MT8173, MT8183 and MT8186. Regards, Jason-JH.Lin
© 2016 - 2024 Red Hat, Inc.