* [PATCH v10 0/4] Separate panel orientation property creating and value setting @ 2022-05-30 8:19 ` Hsin-Yi Wang 0 siblings, 0 replies; 69+ messages in thread From: Hsin-Yi Wang @ 2022-05-30 8:19 UTC (permalink / raw) To: dri-devel, David Airlie, Daniel Vetter, amd-gfx, intel-gfx Cc: Rob Clark, Stephen Boyd, Douglas Anderson, Chun-Kuang Hu, Sean Paul, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, linux-kernel, Rob Herring, Matthias Brugger, devicetree, linux-arm-kernel, linux-mediatek, Simon Ser, Harry Wentland, Alex Deucher, Jani Nikula, Emil Velikov, Hans de Goede Some drivers, eg. mtk_drm and msm_drm, rely on the panel to set the orientation. Panel calls drm_connector_set_panel_orientation() to create orientation property and sets the value. However, connector properties can't be created after drm_dev_register() is called. The goal is to separate the orientation property creation, so drm drivers can create it earlier before drm_dev_register(). After this series, drm_connector_set_panel_orientation() works like before. It won't affect existing callers of drm_connector_set_panel_orientation(). The only difference is that some drm drivers can call drm_connector_init_panel_orientation_property() earlier. Hsin-Yi Wang (4): gpu: drm: separate panel orientation property creating and value setting drm/mediatek: init panel orientation property drm/msm: init panel orientation property arm64: dts: mt8183: Add panel rotation .../arm64/boot/dts/mediatek/mt8183-kukui.dtsi | 1 + drivers/gpu/drm/drm_connector.c | 58 ++++++++++++++----- drivers/gpu/drm/mediatek/mtk_dsi.c | 7 +++ drivers/gpu/drm/msm/dsi/dsi_manager.c | 4 ++ include/drm/drm_connector.h | 2 + 5 files changed, 59 insertions(+), 13 deletions(-) -- 2.36.1.124.g0e6072fb45-goog ^ permalink raw reply [flat|nested] 69+ messages in thread
* [PATCH v10 0/4] Separate panel orientation property creating and value setting @ 2022-05-30 8:19 ` Hsin-Yi Wang 0 siblings, 0 replies; 69+ messages in thread From: Hsin-Yi Wang @ 2022-05-30 8:19 UTC (permalink / raw) To: dri-devel, David Airlie, Daniel Vetter, amd-gfx, intel-gfx Cc: Rob Clark, Chun-Kuang Hu, Emil Velikov, Harry Wentland, devicetree, linux-kernel, Maarten Lankhorst, Douglas Anderson, Maxime Ripard, Stephen Boyd, Alex Deucher, Rob Herring, linux-mediatek, Jani Nikula, Thomas Zimmermann, Simon Ser, Matthias Brugger, Sean Paul, Hans de Goede, linux-arm-kernel Some drivers, eg. mtk_drm and msm_drm, rely on the panel to set the orientation. Panel calls drm_connector_set_panel_orientation() to create orientation property and sets the value. However, connector properties can't be created after drm_dev_register() is called. The goal is to separate the orientation property creation, so drm drivers can create it earlier before drm_dev_register(). After this series, drm_connector_set_panel_orientation() works like before. It won't affect existing callers of drm_connector_set_panel_orientation(). The only difference is that some drm drivers can call drm_connector_init_panel_orientation_property() earlier. Hsin-Yi Wang (4): gpu: drm: separate panel orientation property creating and value setting drm/mediatek: init panel orientation property drm/msm: init panel orientation property arm64: dts: mt8183: Add panel rotation .../arm64/boot/dts/mediatek/mt8183-kukui.dtsi | 1 + drivers/gpu/drm/drm_connector.c | 58 ++++++++++++++----- drivers/gpu/drm/mediatek/mtk_dsi.c | 7 +++ drivers/gpu/drm/msm/dsi/dsi_manager.c | 4 ++ include/drm/drm_connector.h | 2 + 5 files changed, 59 insertions(+), 13 deletions(-) -- 2.36.1.124.g0e6072fb45-goog ^ permalink raw reply [flat|nested] 69+ messages in thread
* [PATCH v10 0/4] Separate panel orientation property creating and value setting @ 2022-05-30 8:19 ` Hsin-Yi Wang 0 siblings, 0 replies; 69+ messages in thread From: Hsin-Yi Wang @ 2022-05-30 8:19 UTC (permalink / raw) To: dri-devel, David Airlie, Daniel Vetter, amd-gfx, intel-gfx Cc: Rob Clark, Stephen Boyd, Douglas Anderson, Chun-Kuang Hu, Sean Paul, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, linux-kernel, Rob Herring, Matthias Brugger, devicetree, linux-arm-kernel, linux-mediatek, Simon Ser, Harry Wentland, Alex Deucher, Jani Nikula, Emil Velikov, Hans de Goede Some drivers, eg. mtk_drm and msm_drm, rely on the panel to set the orientation. Panel calls drm_connector_set_panel_orientation() to create orientation property and sets the value. However, connector properties can't be created after drm_dev_register() is called. The goal is to separate the orientation property creation, so drm drivers can create it earlier before drm_dev_register(). After this series, drm_connector_set_panel_orientation() works like before. It won't affect existing callers of drm_connector_set_panel_orientation(). The only difference is that some drm drivers can call drm_connector_init_panel_orientation_property() earlier. Hsin-Yi Wang (4): gpu: drm: separate panel orientation property creating and value setting drm/mediatek: init panel orientation property drm/msm: init panel orientation property arm64: dts: mt8183: Add panel rotation .../arm64/boot/dts/mediatek/mt8183-kukui.dtsi | 1 + drivers/gpu/drm/drm_connector.c | 58 ++++++++++++++----- drivers/gpu/drm/mediatek/mtk_dsi.c | 7 +++ drivers/gpu/drm/msm/dsi/dsi_manager.c | 4 ++ include/drm/drm_connector.h | 2 + 5 files changed, 59 insertions(+), 13 deletions(-) -- 2.36.1.124.g0e6072fb45-goog _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 69+ messages in thread
* [Intel-gfx] [PATCH v10 0/4] Separate panel orientation property creating and value setting @ 2022-05-30 8:19 ` Hsin-Yi Wang 0 siblings, 0 replies; 69+ messages in thread From: Hsin-Yi Wang @ 2022-05-30 8:19 UTC (permalink / raw) To: dri-devel, David Airlie, Daniel Vetter, amd-gfx, intel-gfx Cc: Rob Clark, Chun-Kuang Hu, Harry Wentland, devicetree, linux-kernel, Douglas Anderson, Maxime Ripard, Stephen Boyd, Alex Deucher, Rob Herring, linux-mediatek, Thomas Zimmermann, Simon Ser, Matthias Brugger, linux-arm-kernel Some drivers, eg. mtk_drm and msm_drm, rely on the panel to set the orientation. Panel calls drm_connector_set_panel_orientation() to create orientation property and sets the value. However, connector properties can't be created after drm_dev_register() is called. The goal is to separate the orientation property creation, so drm drivers can create it earlier before drm_dev_register(). After this series, drm_connector_set_panel_orientation() works like before. It won't affect existing callers of drm_connector_set_panel_orientation(). The only difference is that some drm drivers can call drm_connector_init_panel_orientation_property() earlier. Hsin-Yi Wang (4): gpu: drm: separate panel orientation property creating and value setting drm/mediatek: init panel orientation property drm/msm: init panel orientation property arm64: dts: mt8183: Add panel rotation .../arm64/boot/dts/mediatek/mt8183-kukui.dtsi | 1 + drivers/gpu/drm/drm_connector.c | 58 ++++++++++++++----- drivers/gpu/drm/mediatek/mtk_dsi.c | 7 +++ drivers/gpu/drm/msm/dsi/dsi_manager.c | 4 ++ include/drm/drm_connector.h | 2 + 5 files changed, 59 insertions(+), 13 deletions(-) -- 2.36.1.124.g0e6072fb45-goog ^ permalink raw reply [flat|nested] 69+ messages in thread
* [PATCH v10 0/4] Separate panel orientation property creating and value setting @ 2022-05-30 8:19 ` Hsin-Yi Wang 0 siblings, 0 replies; 69+ messages in thread From: Hsin-Yi Wang @ 2022-05-30 8:19 UTC (permalink / raw) To: dri-devel, David Airlie, Daniel Vetter, amd-gfx, intel-gfx Cc: Rob Clark, Chun-Kuang Hu, Emil Velikov, devicetree, linux-kernel, Douglas Anderson, Stephen Boyd, Alex Deucher, Rob Herring, linux-mediatek, Thomas Zimmermann, Matthias Brugger, Sean Paul, Hans de Goede, linux-arm-kernel Some drivers, eg. mtk_drm and msm_drm, rely on the panel to set the orientation. Panel calls drm_connector_set_panel_orientation() to create orientation property and sets the value. However, connector properties can't be created after drm_dev_register() is called. The goal is to separate the orientation property creation, so drm drivers can create it earlier before drm_dev_register(). After this series, drm_connector_set_panel_orientation() works like before. It won't affect existing callers of drm_connector_set_panel_orientation(). The only difference is that some drm drivers can call drm_connector_init_panel_orientation_property() earlier. Hsin-Yi Wang (4): gpu: drm: separate panel orientation property creating and value setting drm/mediatek: init panel orientation property drm/msm: init panel orientation property arm64: dts: mt8183: Add panel rotation .../arm64/boot/dts/mediatek/mt8183-kukui.dtsi | 1 + drivers/gpu/drm/drm_connector.c | 58 ++++++++++++++----- drivers/gpu/drm/mediatek/mtk_dsi.c | 7 +++ drivers/gpu/drm/msm/dsi/dsi_manager.c | 4 ++ include/drm/drm_connector.h | 2 + 5 files changed, 59 insertions(+), 13 deletions(-) -- 2.36.1.124.g0e6072fb45-goog ^ permalink raw reply [flat|nested] 69+ messages in thread
* [PATCH v10 0/4] Separate panel orientation property creating and value setting @ 2022-05-30 8:19 ` Hsin-Yi Wang 0 siblings, 0 replies; 69+ messages in thread From: Hsin-Yi Wang @ 2022-05-30 8:19 UTC (permalink / raw) To: dri-devel, David Airlie, Daniel Vetter, amd-gfx, intel-gfx Cc: Rob Clark, Stephen Boyd, Douglas Anderson, Chun-Kuang Hu, Sean Paul, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, linux-kernel, Rob Herring, Matthias Brugger, devicetree, linux-arm-kernel, linux-mediatek, Simon Ser, Harry Wentland, Alex Deucher, Jani Nikula, Emil Velikov, Hans de Goede Some drivers, eg. mtk_drm and msm_drm, rely on the panel to set the orientation. Panel calls drm_connector_set_panel_orientation() to create orientation property and sets the value. However, connector properties can't be created after drm_dev_register() is called. The goal is to separate the orientation property creation, so drm drivers can create it earlier before drm_dev_register(). After this series, drm_connector_set_panel_orientation() works like before. It won't affect existing callers of drm_connector_set_panel_orientation(). The only difference is that some drm drivers can call drm_connector_init_panel_orientation_property() earlier. Hsin-Yi Wang (4): gpu: drm: separate panel orientation property creating and value setting drm/mediatek: init panel orientation property drm/msm: init panel orientation property arm64: dts: mt8183: Add panel rotation .../arm64/boot/dts/mediatek/mt8183-kukui.dtsi | 1 + drivers/gpu/drm/drm_connector.c | 58 ++++++++++++++----- drivers/gpu/drm/mediatek/mtk_dsi.c | 7 +++ drivers/gpu/drm/msm/dsi/dsi_manager.c | 4 ++ include/drm/drm_connector.h | 2 + 5 files changed, 59 insertions(+), 13 deletions(-) -- 2.36.1.124.g0e6072fb45-goog _______________________________________________ Linux-mediatek mailing list Linux-mediatek@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-mediatek ^ permalink raw reply [flat|nested] 69+ messages in thread
* [PATCH v10 1/4] gpu: drm: separate panel orientation property creating and value setting 2022-05-30 8:19 ` Hsin-Yi Wang ` (3 preceding siblings ...) (?) @ 2022-05-30 8:19 ` Hsin-Yi Wang -1 siblings, 0 replies; 69+ messages in thread From: Hsin-Yi Wang @ 2022-05-30 8:19 UTC (permalink / raw) To: dri-devel, David Airlie, Daniel Vetter, amd-gfx, intel-gfx Cc: Rob Clark, Stephen Boyd, Douglas Anderson, Chun-Kuang Hu, Sean Paul, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, linux-kernel, Rob Herring, Matthias Brugger, devicetree, linux-arm-kernel, linux-mediatek, Simon Ser, Harry Wentland, Alex Deucher, Jani Nikula, Emil Velikov, Hans de Goede drm_dev_register() sets connector->registration_state to DRM_CONNECTOR_REGISTERED and dev->registered to true. If drm_connector_set_panel_orientation() is first called after drm_dev_register(), it will fail several checks and results in following warning. Add a function to create panel orientation property and set default value to UNKNOWN, so drivers can call this function to init the property earlier , and let the panel set the real value later. [ 4.480976] ------------[ cut here ]------------ [ 4.485603] WARNING: CPU: 5 PID: 369 at drivers/gpu/drm/drm_mode_object.c:45 __drm_mode_object_add+0xb4/0xbc <snip> [ 4.609772] Call trace: [ 4.612208] __drm_mode_object_add+0xb4/0xbc [ 4.616466] drm_mode_object_add+0x20/0x2c [ 4.620552] drm_property_create+0xdc/0x174 [ 4.624723] drm_property_create_enum+0x34/0x98 [ 4.629241] drm_connector_set_panel_orientation+0x64/0xa0 [ 4.634716] boe_panel_get_modes+0x88/0xd8 [ 4.638802] drm_panel_get_modes+0x2c/0x48 [ 4.642887] panel_bridge_get_modes+0x1c/0x28 [ 4.647233] drm_bridge_connector_get_modes+0xa0/0xd4 [ 4.652273] drm_helper_probe_single_connector_modes+0x218/0x700 [ 4.658266] drm_mode_getconnector+0x1b4/0x45c [ 4.662699] drm_ioctl_kernel+0xac/0x128 [ 4.666611] drm_ioctl+0x268/0x410 [ 4.670002] drm_compat_ioctl+0xdc/0xf0 [ 4.673829] __arm64_compat_sys_ioctl+0xc8/0x100 [ 4.678436] el0_svc_common+0xf4/0x1c0 [ 4.682174] do_el0_svc_compat+0x28/0x3c [ 4.686088] el0_svc_compat+0x10/0x1c [ 4.689738] el0_sync_compat_handler+0xa8/0xcc [ 4.694171] el0_sync_compat+0x178/0x180 [ 4.698082] ---[ end trace b4f2db9d9c88610b ]--- [ 4.702721] ------------[ cut here ]------------ [ 4.707329] WARNING: CPU: 5 PID: 369 at drivers/gpu/drm/drm_mode_object.c:243 drm_object_attach_property+0x48/0xb8 <snip> [ 4.833830] Call trace: [ 4.836266] drm_object_attach_property+0x48/0xb8 [ 4.840958] drm_connector_set_panel_orientation+0x84/0xa0 [ 4.846432] boe_panel_get_modes+0x88/0xd8 [ 4.850516] drm_panel_get_modes+0x2c/0x48 [ 4.854600] panel_bridge_get_modes+0x1c/0x28 [ 4.858946] drm_bridge_connector_get_modes+0xa0/0xd4 [ 4.863984] drm_helper_probe_single_connector_modes+0x218/0x700 [ 4.869978] drm_mode_getconnector+0x1b4/0x45c [ 4.874410] drm_ioctl_kernel+0xac/0x128 [ 4.878320] drm_ioctl+0x268/0x410 [ 4.881711] drm_compat_ioctl+0xdc/0xf0 [ 4.885536] __arm64_compat_sys_ioctl+0xc8/0x100 [ 4.890142] el0_svc_common+0xf4/0x1c0 [ 4.893879] do_el0_svc_compat+0x28/0x3c [ 4.897791] el0_svc_compat+0x10/0x1c [ 4.901441] el0_sync_compat_handler+0xa8/0xcc [ 4.905873] el0_sync_compat+0x178/0x180 [ 4.909783] ---[ end trace b4f2db9d9c88610c ]--- Signed-off-by: Hsin-Yi Wang <hsinyi@chromium.org> Reviewed-by: Sean Paul <seanpaul@chromium.org> --- v9->v10: rebase to latest linux-next. v9: https://patchwork.kernel.org/project/linux-mediatek/patch/20220318074825.3359978-2-hsinyi@chromium.org/ v8: https://patchwork.kernel.org/project/linux-mediatek/patch/20220208084234.1684930-1-hsinyi@chromium.org/ v7: https://patchwork.kernel.org/project/linux-mediatek/patch/20220208073714.1540390-1-hsinyi@chromium.org/ --- drivers/gpu/drm/drm_connector.c | 58 +++++++++++++++++++++++++-------- include/drm/drm_connector.h | 2 ++ 2 files changed, 47 insertions(+), 13 deletions(-) diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c index 1c48d162c77e..d68cc78f6684 100644 --- a/drivers/gpu/drm/drm_connector.c +++ b/drivers/gpu/drm/drm_connector.c @@ -1252,7 +1252,7 @@ static const struct drm_prop_enum_list dp_colorspaces[] = { * INPUT_PROP_DIRECT) will still map 1:1 to the actual LCD panel * coordinates, so if userspace rotates the picture to adjust for * the orientation it must also apply the same transformation to the - * touchscreen input coordinates. This property is initialized by calling + * touchscreen input coordinates. This property value is set by calling * drm_connector_set_panel_orientation() or * drm_connector_set_panel_orientation_with_quirk() * @@ -2310,8 +2310,8 @@ EXPORT_SYMBOL(drm_connector_set_vrr_capable_property); * @connector: connector for which to set the panel-orientation property. * @panel_orientation: drm_panel_orientation value to set * - * This function sets the connector's panel_orientation and attaches - * a "panel orientation" property to the connector. + * This function sets the connector's panel_orientation value. If the property + * doesn't exist, it will try to create one. * * Calling this function on a connector where the panel_orientation has * already been set is a no-op (e.g. the orientation has been overridden with @@ -2343,18 +2343,13 @@ int drm_connector_set_panel_orientation( prop = dev->mode_config.panel_orientation_property; if (!prop) { - prop = drm_property_create_enum(dev, DRM_MODE_PROP_IMMUTABLE, - "panel orientation", - drm_panel_orientation_enum_list, - ARRAY_SIZE(drm_panel_orientation_enum_list)); - if (!prop) + if (drm_connector_init_panel_orientation_property(connector) < 0) return -ENOMEM; - - dev->mode_config.panel_orientation_property = prop; + prop = dev->mode_config.panel_orientation_property; } - drm_object_attach_property(&connector->base, prop, - info->panel_orientation); + drm_object_property_set_value(&connector->base, prop, + info->panel_orientation); return 0; } EXPORT_SYMBOL(drm_connector_set_panel_orientation); @@ -2362,7 +2357,7 @@ EXPORT_SYMBOL(drm_connector_set_panel_orientation); /** * drm_connector_set_panel_orientation_with_quirk - set the * connector's panel_orientation after checking for quirks - * @connector: connector for which to init the panel-orientation property. + * @connector: connector for which to set the panel-orientation property. * @panel_orientation: drm_panel_orientation value to set * @width: width in pixels of the panel, used for panel quirk detection * @height: height in pixels of the panel, used for panel quirk detection @@ -2389,6 +2384,43 @@ int drm_connector_set_panel_orientation_with_quirk( } EXPORT_SYMBOL(drm_connector_set_panel_orientation_with_quirk); +/** + * drm_connector_init_panel_orientation_property - + * create the connector's panel orientation property + * + * This function attaches a "panel orientation" property to the connector + * and initializes its value to DRM_MODE_PANEL_ORIENTATION_UNKNOWN. + * + * The value of the property can be set by drm_connector_set_panel_orientation() + * or drm_connector_set_panel_orientation_with_quirk() later. + * + * Returns: + * Zero on success, negative errno on failure. + */ +int drm_connector_init_panel_orientation_property( + struct drm_connector *connector) +{ + struct drm_device *dev = connector->dev; + struct drm_property *prop; + + if(dev->mode_config.panel_orientation_property) + return 0; + + prop = drm_property_create_enum(dev, DRM_MODE_PROP_IMMUTABLE, + "panel orientation", + drm_panel_orientation_enum_list, + ARRAY_SIZE(drm_panel_orientation_enum_list)); + if (!prop) + return -ENOMEM; + + dev->mode_config.panel_orientation_property = prop; + drm_object_attach_property(&connector->base, prop, + DRM_MODE_PANEL_ORIENTATION_UNKNOWN); + + return 0; +} +EXPORT_SYMBOL(drm_connector_init_panel_orientation_property); + static const struct drm_prop_enum_list privacy_screen_enum[] = { { PRIVACY_SCREEN_DISABLED, "Disabled" }, { PRIVACY_SCREEN_ENABLED, "Enabled" }, diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h index 3ac4bf87f257..f0681091c617 100644 --- a/include/drm/drm_connector.h +++ b/include/drm/drm_connector.h @@ -1802,6 +1802,8 @@ int drm_connector_set_panel_orientation_with_quirk( struct drm_connector *connector, enum drm_panel_orientation panel_orientation, int width, int height); +int drm_connector_init_panel_orientation_property( + struct drm_connector *connector); int drm_connector_attach_max_bpc_property(struct drm_connector *connector, int min, int max); void drm_connector_create_privacy_screen_properties(struct drm_connector *conn); -- 2.36.1.124.g0e6072fb45-goog ^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v10 1/4] gpu: drm: separate panel orientation property creating and value setting @ 2022-05-30 8:19 ` Hsin-Yi Wang 0 siblings, 0 replies; 69+ messages in thread From: Hsin-Yi Wang @ 2022-05-30 8:19 UTC (permalink / raw) To: dri-devel, David Airlie, Daniel Vetter, amd-gfx, intel-gfx Cc: Rob Clark, Chun-Kuang Hu, Emil Velikov, Harry Wentland, devicetree, linux-kernel, Maarten Lankhorst, Douglas Anderson, Maxime Ripard, Stephen Boyd, Alex Deucher, Rob Herring, linux-mediatek, Jani Nikula, Thomas Zimmermann, Simon Ser, Matthias Brugger, Sean Paul, Hans de Goede, linux-arm-kernel drm_dev_register() sets connector->registration_state to DRM_CONNECTOR_REGISTERED and dev->registered to true. If drm_connector_set_panel_orientation() is first called after drm_dev_register(), it will fail several checks and results in following warning. Add a function to create panel orientation property and set default value to UNKNOWN, so drivers can call this function to init the property earlier , and let the panel set the real value later. [ 4.480976] ------------[ cut here ]------------ [ 4.485603] WARNING: CPU: 5 PID: 369 at drivers/gpu/drm/drm_mode_object.c:45 __drm_mode_object_add+0xb4/0xbc <snip> [ 4.609772] Call trace: [ 4.612208] __drm_mode_object_add+0xb4/0xbc [ 4.616466] drm_mode_object_add+0x20/0x2c [ 4.620552] drm_property_create+0xdc/0x174 [ 4.624723] drm_property_create_enum+0x34/0x98 [ 4.629241] drm_connector_set_panel_orientation+0x64/0xa0 [ 4.634716] boe_panel_get_modes+0x88/0xd8 [ 4.638802] drm_panel_get_modes+0x2c/0x48 [ 4.642887] panel_bridge_get_modes+0x1c/0x28 [ 4.647233] drm_bridge_connector_get_modes+0xa0/0xd4 [ 4.652273] drm_helper_probe_single_connector_modes+0x218/0x700 [ 4.658266] drm_mode_getconnector+0x1b4/0x45c [ 4.662699] drm_ioctl_kernel+0xac/0x128 [ 4.666611] drm_ioctl+0x268/0x410 [ 4.670002] drm_compat_ioctl+0xdc/0xf0 [ 4.673829] __arm64_compat_sys_ioctl+0xc8/0x100 [ 4.678436] el0_svc_common+0xf4/0x1c0 [ 4.682174] do_el0_svc_compat+0x28/0x3c [ 4.686088] el0_svc_compat+0x10/0x1c [ 4.689738] el0_sync_compat_handler+0xa8/0xcc [ 4.694171] el0_sync_compat+0x178/0x180 [ 4.698082] ---[ end trace b4f2db9d9c88610b ]--- [ 4.702721] ------------[ cut here ]------------ [ 4.707329] WARNING: CPU: 5 PID: 369 at drivers/gpu/drm/drm_mode_object.c:243 drm_object_attach_property+0x48/0xb8 <snip> [ 4.833830] Call trace: [ 4.836266] drm_object_attach_property+0x48/0xb8 [ 4.840958] drm_connector_set_panel_orientation+0x84/0xa0 [ 4.846432] boe_panel_get_modes+0x88/0xd8 [ 4.850516] drm_panel_get_modes+0x2c/0x48 [ 4.854600] panel_bridge_get_modes+0x1c/0x28 [ 4.858946] drm_bridge_connector_get_modes+0xa0/0xd4 [ 4.863984] drm_helper_probe_single_connector_modes+0x218/0x700 [ 4.869978] drm_mode_getconnector+0x1b4/0x45c [ 4.874410] drm_ioctl_kernel+0xac/0x128 [ 4.878320] drm_ioctl+0x268/0x410 [ 4.881711] drm_compat_ioctl+0xdc/0xf0 [ 4.885536] __arm64_compat_sys_ioctl+0xc8/0x100 [ 4.890142] el0_svc_common+0xf4/0x1c0 [ 4.893879] do_el0_svc_compat+0x28/0x3c [ 4.897791] el0_svc_compat+0x10/0x1c [ 4.901441] el0_sync_compat_handler+0xa8/0xcc [ 4.905873] el0_sync_compat+0x178/0x180 [ 4.909783] ---[ end trace b4f2db9d9c88610c ]--- Signed-off-by: Hsin-Yi Wang <hsinyi@chromium.org> Reviewed-by: Sean Paul <seanpaul@chromium.org> --- v9->v10: rebase to latest linux-next. v9: https://patchwork.kernel.org/project/linux-mediatek/patch/20220318074825.3359978-2-hsinyi@chromium.org/ v8: https://patchwork.kernel.org/project/linux-mediatek/patch/20220208084234.1684930-1-hsinyi@chromium.org/ v7: https://patchwork.kernel.org/project/linux-mediatek/patch/20220208073714.1540390-1-hsinyi@chromium.org/ --- drivers/gpu/drm/drm_connector.c | 58 +++++++++++++++++++++++++-------- include/drm/drm_connector.h | 2 ++ 2 files changed, 47 insertions(+), 13 deletions(-) diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c index 1c48d162c77e..d68cc78f6684 100644 --- a/drivers/gpu/drm/drm_connector.c +++ b/drivers/gpu/drm/drm_connector.c @@ -1252,7 +1252,7 @@ static const struct drm_prop_enum_list dp_colorspaces[] = { * INPUT_PROP_DIRECT) will still map 1:1 to the actual LCD panel * coordinates, so if userspace rotates the picture to adjust for * the orientation it must also apply the same transformation to the - * touchscreen input coordinates. This property is initialized by calling + * touchscreen input coordinates. This property value is set by calling * drm_connector_set_panel_orientation() or * drm_connector_set_panel_orientation_with_quirk() * @@ -2310,8 +2310,8 @@ EXPORT_SYMBOL(drm_connector_set_vrr_capable_property); * @connector: connector for which to set the panel-orientation property. * @panel_orientation: drm_panel_orientation value to set * - * This function sets the connector's panel_orientation and attaches - * a "panel orientation" property to the connector. + * This function sets the connector's panel_orientation value. If the property + * doesn't exist, it will try to create one. * * Calling this function on a connector where the panel_orientation has * already been set is a no-op (e.g. the orientation has been overridden with @@ -2343,18 +2343,13 @@ int drm_connector_set_panel_orientation( prop = dev->mode_config.panel_orientation_property; if (!prop) { - prop = drm_property_create_enum(dev, DRM_MODE_PROP_IMMUTABLE, - "panel orientation", - drm_panel_orientation_enum_list, - ARRAY_SIZE(drm_panel_orientation_enum_list)); - if (!prop) + if (drm_connector_init_panel_orientation_property(connector) < 0) return -ENOMEM; - - dev->mode_config.panel_orientation_property = prop; + prop = dev->mode_config.panel_orientation_property; } - drm_object_attach_property(&connector->base, prop, - info->panel_orientation); + drm_object_property_set_value(&connector->base, prop, + info->panel_orientation); return 0; } EXPORT_SYMBOL(drm_connector_set_panel_orientation); @@ -2362,7 +2357,7 @@ EXPORT_SYMBOL(drm_connector_set_panel_orientation); /** * drm_connector_set_panel_orientation_with_quirk - set the * connector's panel_orientation after checking for quirks - * @connector: connector for which to init the panel-orientation property. + * @connector: connector for which to set the panel-orientation property. * @panel_orientation: drm_panel_orientation value to set * @width: width in pixels of the panel, used for panel quirk detection * @height: height in pixels of the panel, used for panel quirk detection @@ -2389,6 +2384,43 @@ int drm_connector_set_panel_orientation_with_quirk( } EXPORT_SYMBOL(drm_connector_set_panel_orientation_with_quirk); +/** + * drm_connector_init_panel_orientation_property - + * create the connector's panel orientation property + * + * This function attaches a "panel orientation" property to the connector + * and initializes its value to DRM_MODE_PANEL_ORIENTATION_UNKNOWN. + * + * The value of the property can be set by drm_connector_set_panel_orientation() + * or drm_connector_set_panel_orientation_with_quirk() later. + * + * Returns: + * Zero on success, negative errno on failure. + */ +int drm_connector_init_panel_orientation_property( + struct drm_connector *connector) +{ + struct drm_device *dev = connector->dev; + struct drm_property *prop; + + if(dev->mode_config.panel_orientation_property) + return 0; + + prop = drm_property_create_enum(dev, DRM_MODE_PROP_IMMUTABLE, + "panel orientation", + drm_panel_orientation_enum_list, + ARRAY_SIZE(drm_panel_orientation_enum_list)); + if (!prop) + return -ENOMEM; + + dev->mode_config.panel_orientation_property = prop; + drm_object_attach_property(&connector->base, prop, + DRM_MODE_PANEL_ORIENTATION_UNKNOWN); + + return 0; +} +EXPORT_SYMBOL(drm_connector_init_panel_orientation_property); + static const struct drm_prop_enum_list privacy_screen_enum[] = { { PRIVACY_SCREEN_DISABLED, "Disabled" }, { PRIVACY_SCREEN_ENABLED, "Enabled" }, diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h index 3ac4bf87f257..f0681091c617 100644 --- a/include/drm/drm_connector.h +++ b/include/drm/drm_connector.h @@ -1802,6 +1802,8 @@ int drm_connector_set_panel_orientation_with_quirk( struct drm_connector *connector, enum drm_panel_orientation panel_orientation, int width, int height); +int drm_connector_init_panel_orientation_property( + struct drm_connector *connector); int drm_connector_attach_max_bpc_property(struct drm_connector *connector, int min, int max); void drm_connector_create_privacy_screen_properties(struct drm_connector *conn); -- 2.36.1.124.g0e6072fb45-goog ^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v10 1/4] gpu: drm: separate panel orientation property creating and value setting @ 2022-05-30 8:19 ` Hsin-Yi Wang 0 siblings, 0 replies; 69+ messages in thread From: Hsin-Yi Wang @ 2022-05-30 8:19 UTC (permalink / raw) To: dri-devel, David Airlie, Daniel Vetter, amd-gfx, intel-gfx Cc: Rob Clark, Stephen Boyd, Douglas Anderson, Chun-Kuang Hu, Sean Paul, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, linux-kernel, Rob Herring, Matthias Brugger, devicetree, linux-arm-kernel, linux-mediatek, Simon Ser, Harry Wentland, Alex Deucher, Jani Nikula, Emil Velikov, Hans de Goede drm_dev_register() sets connector->registration_state to DRM_CONNECTOR_REGISTERED and dev->registered to true. If drm_connector_set_panel_orientation() is first called after drm_dev_register(), it will fail several checks and results in following warning. Add a function to create panel orientation property and set default value to UNKNOWN, so drivers can call this function to init the property earlier , and let the panel set the real value later. [ 4.480976] ------------[ cut here ]------------ [ 4.485603] WARNING: CPU: 5 PID: 369 at drivers/gpu/drm/drm_mode_object.c:45 __drm_mode_object_add+0xb4/0xbc <snip> [ 4.609772] Call trace: [ 4.612208] __drm_mode_object_add+0xb4/0xbc [ 4.616466] drm_mode_object_add+0x20/0x2c [ 4.620552] drm_property_create+0xdc/0x174 [ 4.624723] drm_property_create_enum+0x34/0x98 [ 4.629241] drm_connector_set_panel_orientation+0x64/0xa0 [ 4.634716] boe_panel_get_modes+0x88/0xd8 [ 4.638802] drm_panel_get_modes+0x2c/0x48 [ 4.642887] panel_bridge_get_modes+0x1c/0x28 [ 4.647233] drm_bridge_connector_get_modes+0xa0/0xd4 [ 4.652273] drm_helper_probe_single_connector_modes+0x218/0x700 [ 4.658266] drm_mode_getconnector+0x1b4/0x45c [ 4.662699] drm_ioctl_kernel+0xac/0x128 [ 4.666611] drm_ioctl+0x268/0x410 [ 4.670002] drm_compat_ioctl+0xdc/0xf0 [ 4.673829] __arm64_compat_sys_ioctl+0xc8/0x100 [ 4.678436] el0_svc_common+0xf4/0x1c0 [ 4.682174] do_el0_svc_compat+0x28/0x3c [ 4.686088] el0_svc_compat+0x10/0x1c [ 4.689738] el0_sync_compat_handler+0xa8/0xcc [ 4.694171] el0_sync_compat+0x178/0x180 [ 4.698082] ---[ end trace b4f2db9d9c88610b ]--- [ 4.702721] ------------[ cut here ]------------ [ 4.707329] WARNING: CPU: 5 PID: 369 at drivers/gpu/drm/drm_mode_object.c:243 drm_object_attach_property+0x48/0xb8 <snip> [ 4.833830] Call trace: [ 4.836266] drm_object_attach_property+0x48/0xb8 [ 4.840958] drm_connector_set_panel_orientation+0x84/0xa0 [ 4.846432] boe_panel_get_modes+0x88/0xd8 [ 4.850516] drm_panel_get_modes+0x2c/0x48 [ 4.854600] panel_bridge_get_modes+0x1c/0x28 [ 4.858946] drm_bridge_connector_get_modes+0xa0/0xd4 [ 4.863984] drm_helper_probe_single_connector_modes+0x218/0x700 [ 4.869978] drm_mode_getconnector+0x1b4/0x45c [ 4.874410] drm_ioctl_kernel+0xac/0x128 [ 4.878320] drm_ioctl+0x268/0x410 [ 4.881711] drm_compat_ioctl+0xdc/0xf0 [ 4.885536] __arm64_compat_sys_ioctl+0xc8/0x100 [ 4.890142] el0_svc_common+0xf4/0x1c0 [ 4.893879] do_el0_svc_compat+0x28/0x3c [ 4.897791] el0_svc_compat+0x10/0x1c [ 4.901441] el0_sync_compat_handler+0xa8/0xcc [ 4.905873] el0_sync_compat+0x178/0x180 [ 4.909783] ---[ end trace b4f2db9d9c88610c ]--- Signed-off-by: Hsin-Yi Wang <hsinyi@chromium.org> Reviewed-by: Sean Paul <seanpaul@chromium.org> --- v9->v10: rebase to latest linux-next. v9: https://patchwork.kernel.org/project/linux-mediatek/patch/20220318074825.3359978-2-hsinyi@chromium.org/ v8: https://patchwork.kernel.org/project/linux-mediatek/patch/20220208084234.1684930-1-hsinyi@chromium.org/ v7: https://patchwork.kernel.org/project/linux-mediatek/patch/20220208073714.1540390-1-hsinyi@chromium.org/ --- drivers/gpu/drm/drm_connector.c | 58 +++++++++++++++++++++++++-------- include/drm/drm_connector.h | 2 ++ 2 files changed, 47 insertions(+), 13 deletions(-) diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c index 1c48d162c77e..d68cc78f6684 100644 --- a/drivers/gpu/drm/drm_connector.c +++ b/drivers/gpu/drm/drm_connector.c @@ -1252,7 +1252,7 @@ static const struct drm_prop_enum_list dp_colorspaces[] = { * INPUT_PROP_DIRECT) will still map 1:1 to the actual LCD panel * coordinates, so if userspace rotates the picture to adjust for * the orientation it must also apply the same transformation to the - * touchscreen input coordinates. This property is initialized by calling + * touchscreen input coordinates. This property value is set by calling * drm_connector_set_panel_orientation() or * drm_connector_set_panel_orientation_with_quirk() * @@ -2310,8 +2310,8 @@ EXPORT_SYMBOL(drm_connector_set_vrr_capable_property); * @connector: connector for which to set the panel-orientation property. * @panel_orientation: drm_panel_orientation value to set * - * This function sets the connector's panel_orientation and attaches - * a "panel orientation" property to the connector. + * This function sets the connector's panel_orientation value. If the property + * doesn't exist, it will try to create one. * * Calling this function on a connector where the panel_orientation has * already been set is a no-op (e.g. the orientation has been overridden with @@ -2343,18 +2343,13 @@ int drm_connector_set_panel_orientation( prop = dev->mode_config.panel_orientation_property; if (!prop) { - prop = drm_property_create_enum(dev, DRM_MODE_PROP_IMMUTABLE, - "panel orientation", - drm_panel_orientation_enum_list, - ARRAY_SIZE(drm_panel_orientation_enum_list)); - if (!prop) + if (drm_connector_init_panel_orientation_property(connector) < 0) return -ENOMEM; - - dev->mode_config.panel_orientation_property = prop; + prop = dev->mode_config.panel_orientation_property; } - drm_object_attach_property(&connector->base, prop, - info->panel_orientation); + drm_object_property_set_value(&connector->base, prop, + info->panel_orientation); return 0; } EXPORT_SYMBOL(drm_connector_set_panel_orientation); @@ -2362,7 +2357,7 @@ EXPORT_SYMBOL(drm_connector_set_panel_orientation); /** * drm_connector_set_panel_orientation_with_quirk - set the * connector's panel_orientation after checking for quirks - * @connector: connector for which to init the panel-orientation property. + * @connector: connector for which to set the panel-orientation property. * @panel_orientation: drm_panel_orientation value to set * @width: width in pixels of the panel, used for panel quirk detection * @height: height in pixels of the panel, used for panel quirk detection @@ -2389,6 +2384,43 @@ int drm_connector_set_panel_orientation_with_quirk( } EXPORT_SYMBOL(drm_connector_set_panel_orientation_with_quirk); +/** + * drm_connector_init_panel_orientation_property - + * create the connector's panel orientation property + * + * This function attaches a "panel orientation" property to the connector + * and initializes its value to DRM_MODE_PANEL_ORIENTATION_UNKNOWN. + * + * The value of the property can be set by drm_connector_set_panel_orientation() + * or drm_connector_set_panel_orientation_with_quirk() later. + * + * Returns: + * Zero on success, negative errno on failure. + */ +int drm_connector_init_panel_orientation_property( + struct drm_connector *connector) +{ + struct drm_device *dev = connector->dev; + struct drm_property *prop; + + if(dev->mode_config.panel_orientation_property) + return 0; + + prop = drm_property_create_enum(dev, DRM_MODE_PROP_IMMUTABLE, + "panel orientation", + drm_panel_orientation_enum_list, + ARRAY_SIZE(drm_panel_orientation_enum_list)); + if (!prop) + return -ENOMEM; + + dev->mode_config.panel_orientation_property = prop; + drm_object_attach_property(&connector->base, prop, + DRM_MODE_PANEL_ORIENTATION_UNKNOWN); + + return 0; +} +EXPORT_SYMBOL(drm_connector_init_panel_orientation_property); + static const struct drm_prop_enum_list privacy_screen_enum[] = { { PRIVACY_SCREEN_DISABLED, "Disabled" }, { PRIVACY_SCREEN_ENABLED, "Enabled" }, diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h index 3ac4bf87f257..f0681091c617 100644 --- a/include/drm/drm_connector.h +++ b/include/drm/drm_connector.h @@ -1802,6 +1802,8 @@ int drm_connector_set_panel_orientation_with_quirk( struct drm_connector *connector, enum drm_panel_orientation panel_orientation, int width, int height); +int drm_connector_init_panel_orientation_property( + struct drm_connector *connector); int drm_connector_attach_max_bpc_property(struct drm_connector *connector, int min, int max); void drm_connector_create_privacy_screen_properties(struct drm_connector *conn); -- 2.36.1.124.g0e6072fb45-goog _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply related [flat|nested] 69+ messages in thread
* [Intel-gfx] [PATCH v10 1/4] gpu: drm: separate panel orientation property creating and value setting @ 2022-05-30 8:19 ` Hsin-Yi Wang 0 siblings, 0 replies; 69+ messages in thread From: Hsin-Yi Wang @ 2022-05-30 8:19 UTC (permalink / raw) To: dri-devel, David Airlie, Daniel Vetter, amd-gfx, intel-gfx Cc: Rob Clark, Chun-Kuang Hu, Harry Wentland, devicetree, linux-kernel, Douglas Anderson, Maxime Ripard, Stephen Boyd, Alex Deucher, Rob Herring, linux-mediatek, Thomas Zimmermann, Simon Ser, Matthias Brugger, linux-arm-kernel drm_dev_register() sets connector->registration_state to DRM_CONNECTOR_REGISTERED and dev->registered to true. If drm_connector_set_panel_orientation() is first called after drm_dev_register(), it will fail several checks and results in following warning. Add a function to create panel orientation property and set default value to UNKNOWN, so drivers can call this function to init the property earlier , and let the panel set the real value later. [ 4.480976] ------------[ cut here ]------------ [ 4.485603] WARNING: CPU: 5 PID: 369 at drivers/gpu/drm/drm_mode_object.c:45 __drm_mode_object_add+0xb4/0xbc <snip> [ 4.609772] Call trace: [ 4.612208] __drm_mode_object_add+0xb4/0xbc [ 4.616466] drm_mode_object_add+0x20/0x2c [ 4.620552] drm_property_create+0xdc/0x174 [ 4.624723] drm_property_create_enum+0x34/0x98 [ 4.629241] drm_connector_set_panel_orientation+0x64/0xa0 [ 4.634716] boe_panel_get_modes+0x88/0xd8 [ 4.638802] drm_panel_get_modes+0x2c/0x48 [ 4.642887] panel_bridge_get_modes+0x1c/0x28 [ 4.647233] drm_bridge_connector_get_modes+0xa0/0xd4 [ 4.652273] drm_helper_probe_single_connector_modes+0x218/0x700 [ 4.658266] drm_mode_getconnector+0x1b4/0x45c [ 4.662699] drm_ioctl_kernel+0xac/0x128 [ 4.666611] drm_ioctl+0x268/0x410 [ 4.670002] drm_compat_ioctl+0xdc/0xf0 [ 4.673829] __arm64_compat_sys_ioctl+0xc8/0x100 [ 4.678436] el0_svc_common+0xf4/0x1c0 [ 4.682174] do_el0_svc_compat+0x28/0x3c [ 4.686088] el0_svc_compat+0x10/0x1c [ 4.689738] el0_sync_compat_handler+0xa8/0xcc [ 4.694171] el0_sync_compat+0x178/0x180 [ 4.698082] ---[ end trace b4f2db9d9c88610b ]--- [ 4.702721] ------------[ cut here ]------------ [ 4.707329] WARNING: CPU: 5 PID: 369 at drivers/gpu/drm/drm_mode_object.c:243 drm_object_attach_property+0x48/0xb8 <snip> [ 4.833830] Call trace: [ 4.836266] drm_object_attach_property+0x48/0xb8 [ 4.840958] drm_connector_set_panel_orientation+0x84/0xa0 [ 4.846432] boe_panel_get_modes+0x88/0xd8 [ 4.850516] drm_panel_get_modes+0x2c/0x48 [ 4.854600] panel_bridge_get_modes+0x1c/0x28 [ 4.858946] drm_bridge_connector_get_modes+0xa0/0xd4 [ 4.863984] drm_helper_probe_single_connector_modes+0x218/0x700 [ 4.869978] drm_mode_getconnector+0x1b4/0x45c [ 4.874410] drm_ioctl_kernel+0xac/0x128 [ 4.878320] drm_ioctl+0x268/0x410 [ 4.881711] drm_compat_ioctl+0xdc/0xf0 [ 4.885536] __arm64_compat_sys_ioctl+0xc8/0x100 [ 4.890142] el0_svc_common+0xf4/0x1c0 [ 4.893879] do_el0_svc_compat+0x28/0x3c [ 4.897791] el0_svc_compat+0x10/0x1c [ 4.901441] el0_sync_compat_handler+0xa8/0xcc [ 4.905873] el0_sync_compat+0x178/0x180 [ 4.909783] ---[ end trace b4f2db9d9c88610c ]--- Signed-off-by: Hsin-Yi Wang <hsinyi@chromium.org> Reviewed-by: Sean Paul <seanpaul@chromium.org> --- v9->v10: rebase to latest linux-next. v9: https://patchwork.kernel.org/project/linux-mediatek/patch/20220318074825.3359978-2-hsinyi@chromium.org/ v8: https://patchwork.kernel.org/project/linux-mediatek/patch/20220208084234.1684930-1-hsinyi@chromium.org/ v7: https://patchwork.kernel.org/project/linux-mediatek/patch/20220208073714.1540390-1-hsinyi@chromium.org/ --- drivers/gpu/drm/drm_connector.c | 58 +++++++++++++++++++++++++-------- include/drm/drm_connector.h | 2 ++ 2 files changed, 47 insertions(+), 13 deletions(-) diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c index 1c48d162c77e..d68cc78f6684 100644 --- a/drivers/gpu/drm/drm_connector.c +++ b/drivers/gpu/drm/drm_connector.c @@ -1252,7 +1252,7 @@ static const struct drm_prop_enum_list dp_colorspaces[] = { * INPUT_PROP_DIRECT) will still map 1:1 to the actual LCD panel * coordinates, so if userspace rotates the picture to adjust for * the orientation it must also apply the same transformation to the - * touchscreen input coordinates. This property is initialized by calling + * touchscreen input coordinates. This property value is set by calling * drm_connector_set_panel_orientation() or * drm_connector_set_panel_orientation_with_quirk() * @@ -2310,8 +2310,8 @@ EXPORT_SYMBOL(drm_connector_set_vrr_capable_property); * @connector: connector for which to set the panel-orientation property. * @panel_orientation: drm_panel_orientation value to set * - * This function sets the connector's panel_orientation and attaches - * a "panel orientation" property to the connector. + * This function sets the connector's panel_orientation value. If the property + * doesn't exist, it will try to create one. * * Calling this function on a connector where the panel_orientation has * already been set is a no-op (e.g. the orientation has been overridden with @@ -2343,18 +2343,13 @@ int drm_connector_set_panel_orientation( prop = dev->mode_config.panel_orientation_property; if (!prop) { - prop = drm_property_create_enum(dev, DRM_MODE_PROP_IMMUTABLE, - "panel orientation", - drm_panel_orientation_enum_list, - ARRAY_SIZE(drm_panel_orientation_enum_list)); - if (!prop) + if (drm_connector_init_panel_orientation_property(connector) < 0) return -ENOMEM; - - dev->mode_config.panel_orientation_property = prop; + prop = dev->mode_config.panel_orientation_property; } - drm_object_attach_property(&connector->base, prop, - info->panel_orientation); + drm_object_property_set_value(&connector->base, prop, + info->panel_orientation); return 0; } EXPORT_SYMBOL(drm_connector_set_panel_orientation); @@ -2362,7 +2357,7 @@ EXPORT_SYMBOL(drm_connector_set_panel_orientation); /** * drm_connector_set_panel_orientation_with_quirk - set the * connector's panel_orientation after checking for quirks - * @connector: connector for which to init the panel-orientation property. + * @connector: connector for which to set the panel-orientation property. * @panel_orientation: drm_panel_orientation value to set * @width: width in pixels of the panel, used for panel quirk detection * @height: height in pixels of the panel, used for panel quirk detection @@ -2389,6 +2384,43 @@ int drm_connector_set_panel_orientation_with_quirk( } EXPORT_SYMBOL(drm_connector_set_panel_orientation_with_quirk); +/** + * drm_connector_init_panel_orientation_property - + * create the connector's panel orientation property + * + * This function attaches a "panel orientation" property to the connector + * and initializes its value to DRM_MODE_PANEL_ORIENTATION_UNKNOWN. + * + * The value of the property can be set by drm_connector_set_panel_orientation() + * or drm_connector_set_panel_orientation_with_quirk() later. + * + * Returns: + * Zero on success, negative errno on failure. + */ +int drm_connector_init_panel_orientation_property( + struct drm_connector *connector) +{ + struct drm_device *dev = connector->dev; + struct drm_property *prop; + + if(dev->mode_config.panel_orientation_property) + return 0; + + prop = drm_property_create_enum(dev, DRM_MODE_PROP_IMMUTABLE, + "panel orientation", + drm_panel_orientation_enum_list, + ARRAY_SIZE(drm_panel_orientation_enum_list)); + if (!prop) + return -ENOMEM; + + dev->mode_config.panel_orientation_property = prop; + drm_object_attach_property(&connector->base, prop, + DRM_MODE_PANEL_ORIENTATION_UNKNOWN); + + return 0; +} +EXPORT_SYMBOL(drm_connector_init_panel_orientation_property); + static const struct drm_prop_enum_list privacy_screen_enum[] = { { PRIVACY_SCREEN_DISABLED, "Disabled" }, { PRIVACY_SCREEN_ENABLED, "Enabled" }, diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h index 3ac4bf87f257..f0681091c617 100644 --- a/include/drm/drm_connector.h +++ b/include/drm/drm_connector.h @@ -1802,6 +1802,8 @@ int drm_connector_set_panel_orientation_with_quirk( struct drm_connector *connector, enum drm_panel_orientation panel_orientation, int width, int height); +int drm_connector_init_panel_orientation_property( + struct drm_connector *connector); int drm_connector_attach_max_bpc_property(struct drm_connector *connector, int min, int max); void drm_connector_create_privacy_screen_properties(struct drm_connector *conn); -- 2.36.1.124.g0e6072fb45-goog ^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v10 1/4] gpu: drm: separate panel orientation property creating and value setting @ 2022-05-30 8:19 ` Hsin-Yi Wang 0 siblings, 0 replies; 69+ messages in thread From: Hsin-Yi Wang @ 2022-05-30 8:19 UTC (permalink / raw) To: dri-devel, David Airlie, Daniel Vetter, amd-gfx, intel-gfx Cc: Rob Clark, Chun-Kuang Hu, Emil Velikov, devicetree, linux-kernel, Douglas Anderson, Stephen Boyd, Alex Deucher, Rob Herring, linux-mediatek, Thomas Zimmermann, Matthias Brugger, Sean Paul, Hans de Goede, linux-arm-kernel drm_dev_register() sets connector->registration_state to DRM_CONNECTOR_REGISTERED and dev->registered to true. If drm_connector_set_panel_orientation() is first called after drm_dev_register(), it will fail several checks and results in following warning. Add a function to create panel orientation property and set default value to UNKNOWN, so drivers can call this function to init the property earlier , and let the panel set the real value later. [ 4.480976] ------------[ cut here ]------------ [ 4.485603] WARNING: CPU: 5 PID: 369 at drivers/gpu/drm/drm_mode_object.c:45 __drm_mode_object_add+0xb4/0xbc <snip> [ 4.609772] Call trace: [ 4.612208] __drm_mode_object_add+0xb4/0xbc [ 4.616466] drm_mode_object_add+0x20/0x2c [ 4.620552] drm_property_create+0xdc/0x174 [ 4.624723] drm_property_create_enum+0x34/0x98 [ 4.629241] drm_connector_set_panel_orientation+0x64/0xa0 [ 4.634716] boe_panel_get_modes+0x88/0xd8 [ 4.638802] drm_panel_get_modes+0x2c/0x48 [ 4.642887] panel_bridge_get_modes+0x1c/0x28 [ 4.647233] drm_bridge_connector_get_modes+0xa0/0xd4 [ 4.652273] drm_helper_probe_single_connector_modes+0x218/0x700 [ 4.658266] drm_mode_getconnector+0x1b4/0x45c [ 4.662699] drm_ioctl_kernel+0xac/0x128 [ 4.666611] drm_ioctl+0x268/0x410 [ 4.670002] drm_compat_ioctl+0xdc/0xf0 [ 4.673829] __arm64_compat_sys_ioctl+0xc8/0x100 [ 4.678436] el0_svc_common+0xf4/0x1c0 [ 4.682174] do_el0_svc_compat+0x28/0x3c [ 4.686088] el0_svc_compat+0x10/0x1c [ 4.689738] el0_sync_compat_handler+0xa8/0xcc [ 4.694171] el0_sync_compat+0x178/0x180 [ 4.698082] ---[ end trace b4f2db9d9c88610b ]--- [ 4.702721] ------------[ cut here ]------------ [ 4.707329] WARNING: CPU: 5 PID: 369 at drivers/gpu/drm/drm_mode_object.c:243 drm_object_attach_property+0x48/0xb8 <snip> [ 4.833830] Call trace: [ 4.836266] drm_object_attach_property+0x48/0xb8 [ 4.840958] drm_connector_set_panel_orientation+0x84/0xa0 [ 4.846432] boe_panel_get_modes+0x88/0xd8 [ 4.850516] drm_panel_get_modes+0x2c/0x48 [ 4.854600] panel_bridge_get_modes+0x1c/0x28 [ 4.858946] drm_bridge_connector_get_modes+0xa0/0xd4 [ 4.863984] drm_helper_probe_single_connector_modes+0x218/0x700 [ 4.869978] drm_mode_getconnector+0x1b4/0x45c [ 4.874410] drm_ioctl_kernel+0xac/0x128 [ 4.878320] drm_ioctl+0x268/0x410 [ 4.881711] drm_compat_ioctl+0xdc/0xf0 [ 4.885536] __arm64_compat_sys_ioctl+0xc8/0x100 [ 4.890142] el0_svc_common+0xf4/0x1c0 [ 4.893879] do_el0_svc_compat+0x28/0x3c [ 4.897791] el0_svc_compat+0x10/0x1c [ 4.901441] el0_sync_compat_handler+0xa8/0xcc [ 4.905873] el0_sync_compat+0x178/0x180 [ 4.909783] ---[ end trace b4f2db9d9c88610c ]--- Signed-off-by: Hsin-Yi Wang <hsinyi@chromium.org> Reviewed-by: Sean Paul <seanpaul@chromium.org> --- v9->v10: rebase to latest linux-next. v9: https://patchwork.kernel.org/project/linux-mediatek/patch/20220318074825.3359978-2-hsinyi@chromium.org/ v8: https://patchwork.kernel.org/project/linux-mediatek/patch/20220208084234.1684930-1-hsinyi@chromium.org/ v7: https://patchwork.kernel.org/project/linux-mediatek/patch/20220208073714.1540390-1-hsinyi@chromium.org/ --- drivers/gpu/drm/drm_connector.c | 58 +++++++++++++++++++++++++-------- include/drm/drm_connector.h | 2 ++ 2 files changed, 47 insertions(+), 13 deletions(-) diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c index 1c48d162c77e..d68cc78f6684 100644 --- a/drivers/gpu/drm/drm_connector.c +++ b/drivers/gpu/drm/drm_connector.c @@ -1252,7 +1252,7 @@ static const struct drm_prop_enum_list dp_colorspaces[] = { * INPUT_PROP_DIRECT) will still map 1:1 to the actual LCD panel * coordinates, so if userspace rotates the picture to adjust for * the orientation it must also apply the same transformation to the - * touchscreen input coordinates. This property is initialized by calling + * touchscreen input coordinates. This property value is set by calling * drm_connector_set_panel_orientation() or * drm_connector_set_panel_orientation_with_quirk() * @@ -2310,8 +2310,8 @@ EXPORT_SYMBOL(drm_connector_set_vrr_capable_property); * @connector: connector for which to set the panel-orientation property. * @panel_orientation: drm_panel_orientation value to set * - * This function sets the connector's panel_orientation and attaches - * a "panel orientation" property to the connector. + * This function sets the connector's panel_orientation value. If the property + * doesn't exist, it will try to create one. * * Calling this function on a connector where the panel_orientation has * already been set is a no-op (e.g. the orientation has been overridden with @@ -2343,18 +2343,13 @@ int drm_connector_set_panel_orientation( prop = dev->mode_config.panel_orientation_property; if (!prop) { - prop = drm_property_create_enum(dev, DRM_MODE_PROP_IMMUTABLE, - "panel orientation", - drm_panel_orientation_enum_list, - ARRAY_SIZE(drm_panel_orientation_enum_list)); - if (!prop) + if (drm_connector_init_panel_orientation_property(connector) < 0) return -ENOMEM; - - dev->mode_config.panel_orientation_property = prop; + prop = dev->mode_config.panel_orientation_property; } - drm_object_attach_property(&connector->base, prop, - info->panel_orientation); + drm_object_property_set_value(&connector->base, prop, + info->panel_orientation); return 0; } EXPORT_SYMBOL(drm_connector_set_panel_orientation); @@ -2362,7 +2357,7 @@ EXPORT_SYMBOL(drm_connector_set_panel_orientation); /** * drm_connector_set_panel_orientation_with_quirk - set the * connector's panel_orientation after checking for quirks - * @connector: connector for which to init the panel-orientation property. + * @connector: connector for which to set the panel-orientation property. * @panel_orientation: drm_panel_orientation value to set * @width: width in pixels of the panel, used for panel quirk detection * @height: height in pixels of the panel, used for panel quirk detection @@ -2389,6 +2384,43 @@ int drm_connector_set_panel_orientation_with_quirk( } EXPORT_SYMBOL(drm_connector_set_panel_orientation_with_quirk); +/** + * drm_connector_init_panel_orientation_property - + * create the connector's panel orientation property + * + * This function attaches a "panel orientation" property to the connector + * and initializes its value to DRM_MODE_PANEL_ORIENTATION_UNKNOWN. + * + * The value of the property can be set by drm_connector_set_panel_orientation() + * or drm_connector_set_panel_orientation_with_quirk() later. + * + * Returns: + * Zero on success, negative errno on failure. + */ +int drm_connector_init_panel_orientation_property( + struct drm_connector *connector) +{ + struct drm_device *dev = connector->dev; + struct drm_property *prop; + + if(dev->mode_config.panel_orientation_property) + return 0; + + prop = drm_property_create_enum(dev, DRM_MODE_PROP_IMMUTABLE, + "panel orientation", + drm_panel_orientation_enum_list, + ARRAY_SIZE(drm_panel_orientation_enum_list)); + if (!prop) + return -ENOMEM; + + dev->mode_config.panel_orientation_property = prop; + drm_object_attach_property(&connector->base, prop, + DRM_MODE_PANEL_ORIENTATION_UNKNOWN); + + return 0; +} +EXPORT_SYMBOL(drm_connector_init_panel_orientation_property); + static const struct drm_prop_enum_list privacy_screen_enum[] = { { PRIVACY_SCREEN_DISABLED, "Disabled" }, { PRIVACY_SCREEN_ENABLED, "Enabled" }, diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h index 3ac4bf87f257..f0681091c617 100644 --- a/include/drm/drm_connector.h +++ b/include/drm/drm_connector.h @@ -1802,6 +1802,8 @@ int drm_connector_set_panel_orientation_with_quirk( struct drm_connector *connector, enum drm_panel_orientation panel_orientation, int width, int height); +int drm_connector_init_panel_orientation_property( + struct drm_connector *connector); int drm_connector_attach_max_bpc_property(struct drm_connector *connector, int min, int max); void drm_connector_create_privacy_screen_properties(struct drm_connector *conn); -- 2.36.1.124.g0e6072fb45-goog ^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v10 1/4] gpu: drm: separate panel orientation property creating and value setting @ 2022-05-30 8:19 ` Hsin-Yi Wang 0 siblings, 0 replies; 69+ messages in thread From: Hsin-Yi Wang @ 2022-05-30 8:19 UTC (permalink / raw) To: dri-devel, David Airlie, Daniel Vetter, amd-gfx, intel-gfx Cc: Rob Clark, Stephen Boyd, Douglas Anderson, Chun-Kuang Hu, Sean Paul, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, linux-kernel, Rob Herring, Matthias Brugger, devicetree, linux-arm-kernel, linux-mediatek, Simon Ser, Harry Wentland, Alex Deucher, Jani Nikula, Emil Velikov, Hans de Goede drm_dev_register() sets connector->registration_state to DRM_CONNECTOR_REGISTERED and dev->registered to true. If drm_connector_set_panel_orientation() is first called after drm_dev_register(), it will fail several checks and results in following warning. Add a function to create panel orientation property and set default value to UNKNOWN, so drivers can call this function to init the property earlier , and let the panel set the real value later. [ 4.480976] ------------[ cut here ]------------ [ 4.485603] WARNING: CPU: 5 PID: 369 at drivers/gpu/drm/drm_mode_object.c:45 __drm_mode_object_add+0xb4/0xbc <snip> [ 4.609772] Call trace: [ 4.612208] __drm_mode_object_add+0xb4/0xbc [ 4.616466] drm_mode_object_add+0x20/0x2c [ 4.620552] drm_property_create+0xdc/0x174 [ 4.624723] drm_property_create_enum+0x34/0x98 [ 4.629241] drm_connector_set_panel_orientation+0x64/0xa0 [ 4.634716] boe_panel_get_modes+0x88/0xd8 [ 4.638802] drm_panel_get_modes+0x2c/0x48 [ 4.642887] panel_bridge_get_modes+0x1c/0x28 [ 4.647233] drm_bridge_connector_get_modes+0xa0/0xd4 [ 4.652273] drm_helper_probe_single_connector_modes+0x218/0x700 [ 4.658266] drm_mode_getconnector+0x1b4/0x45c [ 4.662699] drm_ioctl_kernel+0xac/0x128 [ 4.666611] drm_ioctl+0x268/0x410 [ 4.670002] drm_compat_ioctl+0xdc/0xf0 [ 4.673829] __arm64_compat_sys_ioctl+0xc8/0x100 [ 4.678436] el0_svc_common+0xf4/0x1c0 [ 4.682174] do_el0_svc_compat+0x28/0x3c [ 4.686088] el0_svc_compat+0x10/0x1c [ 4.689738] el0_sync_compat_handler+0xa8/0xcc [ 4.694171] el0_sync_compat+0x178/0x180 [ 4.698082] ---[ end trace b4f2db9d9c88610b ]--- [ 4.702721] ------------[ cut here ]------------ [ 4.707329] WARNING: CPU: 5 PID: 369 at drivers/gpu/drm/drm_mode_object.c:243 drm_object_attach_property+0x48/0xb8 <snip> [ 4.833830] Call trace: [ 4.836266] drm_object_attach_property+0x48/0xb8 [ 4.840958] drm_connector_set_panel_orientation+0x84/0xa0 [ 4.846432] boe_panel_get_modes+0x88/0xd8 [ 4.850516] drm_panel_get_modes+0x2c/0x48 [ 4.854600] panel_bridge_get_modes+0x1c/0x28 [ 4.858946] drm_bridge_connector_get_modes+0xa0/0xd4 [ 4.863984] drm_helper_probe_single_connector_modes+0x218/0x700 [ 4.869978] drm_mode_getconnector+0x1b4/0x45c [ 4.874410] drm_ioctl_kernel+0xac/0x128 [ 4.878320] drm_ioctl+0x268/0x410 [ 4.881711] drm_compat_ioctl+0xdc/0xf0 [ 4.885536] __arm64_compat_sys_ioctl+0xc8/0x100 [ 4.890142] el0_svc_common+0xf4/0x1c0 [ 4.893879] do_el0_svc_compat+0x28/0x3c [ 4.897791] el0_svc_compat+0x10/0x1c [ 4.901441] el0_sync_compat_handler+0xa8/0xcc [ 4.905873] el0_sync_compat+0x178/0x180 [ 4.909783] ---[ end trace b4f2db9d9c88610c ]--- Signed-off-by: Hsin-Yi Wang <hsinyi@chromium.org> Reviewed-by: Sean Paul <seanpaul@chromium.org> --- v9->v10: rebase to latest linux-next. v9: https://patchwork.kernel.org/project/linux-mediatek/patch/20220318074825.3359978-2-hsinyi@chromium.org/ v8: https://patchwork.kernel.org/project/linux-mediatek/patch/20220208084234.1684930-1-hsinyi@chromium.org/ v7: https://patchwork.kernel.org/project/linux-mediatek/patch/20220208073714.1540390-1-hsinyi@chromium.org/ --- drivers/gpu/drm/drm_connector.c | 58 +++++++++++++++++++++++++-------- include/drm/drm_connector.h | 2 ++ 2 files changed, 47 insertions(+), 13 deletions(-) diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c index 1c48d162c77e..d68cc78f6684 100644 --- a/drivers/gpu/drm/drm_connector.c +++ b/drivers/gpu/drm/drm_connector.c @@ -1252,7 +1252,7 @@ static const struct drm_prop_enum_list dp_colorspaces[] = { * INPUT_PROP_DIRECT) will still map 1:1 to the actual LCD panel * coordinates, so if userspace rotates the picture to adjust for * the orientation it must also apply the same transformation to the - * touchscreen input coordinates. This property is initialized by calling + * touchscreen input coordinates. This property value is set by calling * drm_connector_set_panel_orientation() or * drm_connector_set_panel_orientation_with_quirk() * @@ -2310,8 +2310,8 @@ EXPORT_SYMBOL(drm_connector_set_vrr_capable_property); * @connector: connector for which to set the panel-orientation property. * @panel_orientation: drm_panel_orientation value to set * - * This function sets the connector's panel_orientation and attaches - * a "panel orientation" property to the connector. + * This function sets the connector's panel_orientation value. If the property + * doesn't exist, it will try to create one. * * Calling this function on a connector where the panel_orientation has * already been set is a no-op (e.g. the orientation has been overridden with @@ -2343,18 +2343,13 @@ int drm_connector_set_panel_orientation( prop = dev->mode_config.panel_orientation_property; if (!prop) { - prop = drm_property_create_enum(dev, DRM_MODE_PROP_IMMUTABLE, - "panel orientation", - drm_panel_orientation_enum_list, - ARRAY_SIZE(drm_panel_orientation_enum_list)); - if (!prop) + if (drm_connector_init_panel_orientation_property(connector) < 0) return -ENOMEM; - - dev->mode_config.panel_orientation_property = prop; + prop = dev->mode_config.panel_orientation_property; } - drm_object_attach_property(&connector->base, prop, - info->panel_orientation); + drm_object_property_set_value(&connector->base, prop, + info->panel_orientation); return 0; } EXPORT_SYMBOL(drm_connector_set_panel_orientation); @@ -2362,7 +2357,7 @@ EXPORT_SYMBOL(drm_connector_set_panel_orientation); /** * drm_connector_set_panel_orientation_with_quirk - set the * connector's panel_orientation after checking for quirks - * @connector: connector for which to init the panel-orientation property. + * @connector: connector for which to set the panel-orientation property. * @panel_orientation: drm_panel_orientation value to set * @width: width in pixels of the panel, used for panel quirk detection * @height: height in pixels of the panel, used for panel quirk detection @@ -2389,6 +2384,43 @@ int drm_connector_set_panel_orientation_with_quirk( } EXPORT_SYMBOL(drm_connector_set_panel_orientation_with_quirk); +/** + * drm_connector_init_panel_orientation_property - + * create the connector's panel orientation property + * + * This function attaches a "panel orientation" property to the connector + * and initializes its value to DRM_MODE_PANEL_ORIENTATION_UNKNOWN. + * + * The value of the property can be set by drm_connector_set_panel_orientation() + * or drm_connector_set_panel_orientation_with_quirk() later. + * + * Returns: + * Zero on success, negative errno on failure. + */ +int drm_connector_init_panel_orientation_property( + struct drm_connector *connector) +{ + struct drm_device *dev = connector->dev; + struct drm_property *prop; + + if(dev->mode_config.panel_orientation_property) + return 0; + + prop = drm_property_create_enum(dev, DRM_MODE_PROP_IMMUTABLE, + "panel orientation", + drm_panel_orientation_enum_list, + ARRAY_SIZE(drm_panel_orientation_enum_list)); + if (!prop) + return -ENOMEM; + + dev->mode_config.panel_orientation_property = prop; + drm_object_attach_property(&connector->base, prop, + DRM_MODE_PANEL_ORIENTATION_UNKNOWN); + + return 0; +} +EXPORT_SYMBOL(drm_connector_init_panel_orientation_property); + static const struct drm_prop_enum_list privacy_screen_enum[] = { { PRIVACY_SCREEN_DISABLED, "Disabled" }, { PRIVACY_SCREEN_ENABLED, "Enabled" }, diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h index 3ac4bf87f257..f0681091c617 100644 --- a/include/drm/drm_connector.h +++ b/include/drm/drm_connector.h @@ -1802,6 +1802,8 @@ int drm_connector_set_panel_orientation_with_quirk( struct drm_connector *connector, enum drm_panel_orientation panel_orientation, int width, int height); +int drm_connector_init_panel_orientation_property( + struct drm_connector *connector); int drm_connector_attach_max_bpc_property(struct drm_connector *connector, int min, int max); void drm_connector_create_privacy_screen_properties(struct drm_connector *conn); -- 2.36.1.124.g0e6072fb45-goog _______________________________________________ Linux-mediatek mailing list Linux-mediatek@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-mediatek ^ permalink raw reply related [flat|nested] 69+ messages in thread
* Re: [PATCH v10 1/4] gpu: drm: separate panel orientation property creating and value setting 2022-05-30 8:19 ` Hsin-Yi Wang ` (3 preceding siblings ...) (?) @ 2022-05-30 8:57 ` Hans de Goede -1 siblings, 0 replies; 69+ messages in thread From: Hans de Goede @ 2022-05-30 8:57 UTC (permalink / raw) To: Hsin-Yi Wang, dri-devel, David Airlie, Daniel Vetter, amd-gfx, intel-gfx Cc: Rob Clark, Stephen Boyd, Douglas Anderson, Chun-Kuang Hu, Sean Paul, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, linux-kernel, Rob Herring, Matthias Brugger, devicetree, linux-arm-kernel, linux-mediatek, Simon Ser, Harry Wentland, Alex Deucher, Jani Nikula, Emil Velikov Hi, On 5/30/22 10:19, Hsin-Yi Wang wrote: > drm_dev_register() sets connector->registration_state to > DRM_CONNECTOR_REGISTERED and dev->registered to true. If > drm_connector_set_panel_orientation() is first called after > drm_dev_register(), it will fail several checks and results in following > warning. > > Add a function to create panel orientation property and set default value > to UNKNOWN, so drivers can call this function to init the property earlier > , and let the panel set the real value later. > > [ 4.480976] ------------[ cut here ]------------ > [ 4.485603] WARNING: CPU: 5 PID: 369 at drivers/gpu/drm/drm_mode_object.c:45 __drm_mode_object_add+0xb4/0xbc > <snip> > [ 4.609772] Call trace: > [ 4.612208] __drm_mode_object_add+0xb4/0xbc > [ 4.616466] drm_mode_object_add+0x20/0x2c > [ 4.620552] drm_property_create+0xdc/0x174 > [ 4.624723] drm_property_create_enum+0x34/0x98 > [ 4.629241] drm_connector_set_panel_orientation+0x64/0xa0 > [ 4.634716] boe_panel_get_modes+0x88/0xd8 > [ 4.638802] drm_panel_get_modes+0x2c/0x48 > [ 4.642887] panel_bridge_get_modes+0x1c/0x28 > [ 4.647233] drm_bridge_connector_get_modes+0xa0/0xd4 > [ 4.652273] drm_helper_probe_single_connector_modes+0x218/0x700 > [ 4.658266] drm_mode_getconnector+0x1b4/0x45c > [ 4.662699] drm_ioctl_kernel+0xac/0x128 > [ 4.666611] drm_ioctl+0x268/0x410 > [ 4.670002] drm_compat_ioctl+0xdc/0xf0 > [ 4.673829] __arm64_compat_sys_ioctl+0xc8/0x100 > [ 4.678436] el0_svc_common+0xf4/0x1c0 > [ 4.682174] do_el0_svc_compat+0x28/0x3c > [ 4.686088] el0_svc_compat+0x10/0x1c > [ 4.689738] el0_sync_compat_handler+0xa8/0xcc > [ 4.694171] el0_sync_compat+0x178/0x180 > [ 4.698082] ---[ end trace b4f2db9d9c88610b ]--- > [ 4.702721] ------------[ cut here ]------------ > [ 4.707329] WARNING: CPU: 5 PID: 369 at drivers/gpu/drm/drm_mode_object.c:243 drm_object_attach_property+0x48/0xb8 > <snip> > [ 4.833830] Call trace: > [ 4.836266] drm_object_attach_property+0x48/0xb8 > [ 4.840958] drm_connector_set_panel_orientation+0x84/0xa0 > [ 4.846432] boe_panel_get_modes+0x88/0xd8 > [ 4.850516] drm_panel_get_modes+0x2c/0x48 > [ 4.854600] panel_bridge_get_modes+0x1c/0x28 > [ 4.858946] drm_bridge_connector_get_modes+0xa0/0xd4 > [ 4.863984] drm_helper_probe_single_connector_modes+0x218/0x700 > [ 4.869978] drm_mode_getconnector+0x1b4/0x45c > [ 4.874410] drm_ioctl_kernel+0xac/0x128 > [ 4.878320] drm_ioctl+0x268/0x410 > [ 4.881711] drm_compat_ioctl+0xdc/0xf0 > [ 4.885536] __arm64_compat_sys_ioctl+0xc8/0x100 > [ 4.890142] el0_svc_common+0xf4/0x1c0 > [ 4.893879] do_el0_svc_compat+0x28/0x3c > [ 4.897791] el0_svc_compat+0x10/0x1c > [ 4.901441] el0_sync_compat_handler+0xa8/0xcc > [ 4.905873] el0_sync_compat+0x178/0x180 > [ 4.909783] ---[ end trace b4f2db9d9c88610c ]--- > > Signed-off-by: Hsin-Yi Wang <hsinyi@chromium.org> > Reviewed-by: Sean Paul <seanpaul@chromium.org> > --- > v9->v10: rebase to latest linux-next. > v9: https://patchwork.kernel.org/project/linux-mediatek/patch/20220318074825.3359978-2-hsinyi@chromium.org/ > v8: https://patchwork.kernel.org/project/linux-mediatek/patch/20220208084234.1684930-1-hsinyi@chromium.org/ > v7: https://patchwork.kernel.org/project/linux-mediatek/patch/20220208073714.1540390-1-hsinyi@chromium.org/ > --- > drivers/gpu/drm/drm_connector.c | 58 +++++++++++++++++++++++++-------- > include/drm/drm_connector.h | 2 ++ > 2 files changed, 47 insertions(+), 13 deletions(-) > > diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c > index 1c48d162c77e..d68cc78f6684 100644 > --- a/drivers/gpu/drm/drm_connector.c > +++ b/drivers/gpu/drm/drm_connector.c > @@ -1252,7 +1252,7 @@ static const struct drm_prop_enum_list dp_colorspaces[] = { > * INPUT_PROP_DIRECT) will still map 1:1 to the actual LCD panel > * coordinates, so if userspace rotates the picture to adjust for > * the orientation it must also apply the same transformation to the > - * touchscreen input coordinates. This property is initialized by calling > + * touchscreen input coordinates. This property value is set by calling > * drm_connector_set_panel_orientation() or > * drm_connector_set_panel_orientation_with_quirk() > * > @@ -2310,8 +2310,8 @@ EXPORT_SYMBOL(drm_connector_set_vrr_capable_property); > * @connector: connector for which to set the panel-orientation property. > * @panel_orientation: drm_panel_orientation value to set > * > - * This function sets the connector's panel_orientation and attaches > - * a "panel orientation" property to the connector. > + * This function sets the connector's panel_orientation value. If the property > + * doesn't exist, it will try to create one. > * > * Calling this function on a connector where the panel_orientation has > * already been set is a no-op (e.g. the orientation has been overridden with > @@ -2343,18 +2343,13 @@ int drm_connector_set_panel_orientation( > > prop = dev->mode_config.panel_orientation_property; > if (!prop) { > - prop = drm_property_create_enum(dev, DRM_MODE_PROP_IMMUTABLE, > - "panel orientation", > - drm_panel_orientation_enum_list, > - ARRAY_SIZE(drm_panel_orientation_enum_list)); > - if (!prop) > + if (drm_connector_init_panel_orientation_property(connector) < 0) > return -ENOMEM; > - > - dev->mode_config.panel_orientation_property = prop; > + prop = dev->mode_config.panel_orientation_property; > } > > - drm_object_attach_property(&connector->base, prop, > - info->panel_orientation); > + drm_object_property_set_value(&connector->base, prop, > + info->panel_orientation); > return 0; > } > EXPORT_SYMBOL(drm_connector_set_panel_orientation); > @@ -2362,7 +2357,7 @@ EXPORT_SYMBOL(drm_connector_set_panel_orientation); > /** > * drm_connector_set_panel_orientation_with_quirk - set the > * connector's panel_orientation after checking for quirks > - * @connector: connector for which to init the panel-orientation property. > + * @connector: connector for which to set the panel-orientation property. > * @panel_orientation: drm_panel_orientation value to set > * @width: width in pixels of the panel, used for panel quirk detection > * @height: height in pixels of the panel, used for panel quirk detection > @@ -2389,6 +2384,43 @@ int drm_connector_set_panel_orientation_with_quirk( > } > EXPORT_SYMBOL(drm_connector_set_panel_orientation_with_quirk); > > +/** > + * drm_connector_init_panel_orientation_property - > + * create the connector's panel orientation property > + * > + * This function attaches a "panel orientation" property to the connector > + * and initializes its value to DRM_MODE_PANEL_ORIENTATION_UNKNOWN. > + * > + * The value of the property can be set by drm_connector_set_panel_orientation() > + * or drm_connector_set_panel_orientation_with_quirk() later. > + * > + * Returns: > + * Zero on success, negative errno on failure. > + */ > +int drm_connector_init_panel_orientation_property( > + struct drm_connector *connector) > +{ > + struct drm_device *dev = connector->dev; > + struct drm_property *prop; > + > + if(dev->mode_config.panel_orientation_property) > + return 0; > + > + prop = drm_property_create_enum(dev, DRM_MODE_PROP_IMMUTABLE, > + "panel orientation", > + drm_panel_orientation_enum_list, > + ARRAY_SIZE(drm_panel_orientation_enum_list)); > + if (!prop) > + return -ENOMEM; > + > + dev->mode_config.panel_orientation_property = prop; > + drm_object_attach_property(&connector->base, prop, > + DRM_MODE_PANEL_ORIENTATION_UNKNOWN); DRM_MODE_PANEL_ORIENTATION_UNKNOWN is -1 which is not a valid value for an enum. IOW when the panel-orientation is DRM_MODE_PANEL_ORIENTATION_UNKNOWN then the property should not be created on the drm-connector object at all. Which brings us back to what I said in reply to the coverletter, it seems that you have a probe ordering problem here; and fixing that issue would make this patch-set unnecessary. Regards, Hans > + > + return 0; > +} > +EXPORT_SYMBOL(drm_connector_init_panel_orientation_property); > + > static const struct drm_prop_enum_list privacy_screen_enum[] = { > { PRIVACY_SCREEN_DISABLED, "Disabled" }, > { PRIVACY_SCREEN_ENABLED, "Enabled" }, > diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h > index 3ac4bf87f257..f0681091c617 100644 > --- a/include/drm/drm_connector.h > +++ b/include/drm/drm_connector.h > @@ -1802,6 +1802,8 @@ int drm_connector_set_panel_orientation_with_quirk( > struct drm_connector *connector, > enum drm_panel_orientation panel_orientation, > int width, int height); > +int drm_connector_init_panel_orientation_property( > + struct drm_connector *connector); > int drm_connector_attach_max_bpc_property(struct drm_connector *connector, > int min, int max); > void drm_connector_create_privacy_screen_properties(struct drm_connector *conn); ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v10 1/4] gpu: drm: separate panel orientation property creating and value setting @ 2022-05-30 8:57 ` Hans de Goede 0 siblings, 0 replies; 69+ messages in thread From: Hans de Goede @ 2022-05-30 8:57 UTC (permalink / raw) To: Hsin-Yi Wang, dri-devel, David Airlie, Daniel Vetter, amd-gfx, intel-gfx Cc: Rob Clark, Chun-Kuang Hu, Emil Velikov, Harry Wentland, devicetree, linux-kernel, Maarten Lankhorst, Douglas Anderson, Maxime Ripard, Stephen Boyd, Alex Deucher, Rob Herring, linux-mediatek, Jani Nikula, Thomas Zimmermann, Simon Ser, Matthias Brugger, Sean Paul, linux-arm-kernel Hi, On 5/30/22 10:19, Hsin-Yi Wang wrote: > drm_dev_register() sets connector->registration_state to > DRM_CONNECTOR_REGISTERED and dev->registered to true. If > drm_connector_set_panel_orientation() is first called after > drm_dev_register(), it will fail several checks and results in following > warning. > > Add a function to create panel orientation property and set default value > to UNKNOWN, so drivers can call this function to init the property earlier > , and let the panel set the real value later. > > [ 4.480976] ------------[ cut here ]------------ > [ 4.485603] WARNING: CPU: 5 PID: 369 at drivers/gpu/drm/drm_mode_object.c:45 __drm_mode_object_add+0xb4/0xbc > <snip> > [ 4.609772] Call trace: > [ 4.612208] __drm_mode_object_add+0xb4/0xbc > [ 4.616466] drm_mode_object_add+0x20/0x2c > [ 4.620552] drm_property_create+0xdc/0x174 > [ 4.624723] drm_property_create_enum+0x34/0x98 > [ 4.629241] drm_connector_set_panel_orientation+0x64/0xa0 > [ 4.634716] boe_panel_get_modes+0x88/0xd8 > [ 4.638802] drm_panel_get_modes+0x2c/0x48 > [ 4.642887] panel_bridge_get_modes+0x1c/0x28 > [ 4.647233] drm_bridge_connector_get_modes+0xa0/0xd4 > [ 4.652273] drm_helper_probe_single_connector_modes+0x218/0x700 > [ 4.658266] drm_mode_getconnector+0x1b4/0x45c > [ 4.662699] drm_ioctl_kernel+0xac/0x128 > [ 4.666611] drm_ioctl+0x268/0x410 > [ 4.670002] drm_compat_ioctl+0xdc/0xf0 > [ 4.673829] __arm64_compat_sys_ioctl+0xc8/0x100 > [ 4.678436] el0_svc_common+0xf4/0x1c0 > [ 4.682174] do_el0_svc_compat+0x28/0x3c > [ 4.686088] el0_svc_compat+0x10/0x1c > [ 4.689738] el0_sync_compat_handler+0xa8/0xcc > [ 4.694171] el0_sync_compat+0x178/0x180 > [ 4.698082] ---[ end trace b4f2db9d9c88610b ]--- > [ 4.702721] ------------[ cut here ]------------ > [ 4.707329] WARNING: CPU: 5 PID: 369 at drivers/gpu/drm/drm_mode_object.c:243 drm_object_attach_property+0x48/0xb8 > <snip> > [ 4.833830] Call trace: > [ 4.836266] drm_object_attach_property+0x48/0xb8 > [ 4.840958] drm_connector_set_panel_orientation+0x84/0xa0 > [ 4.846432] boe_panel_get_modes+0x88/0xd8 > [ 4.850516] drm_panel_get_modes+0x2c/0x48 > [ 4.854600] panel_bridge_get_modes+0x1c/0x28 > [ 4.858946] drm_bridge_connector_get_modes+0xa0/0xd4 > [ 4.863984] drm_helper_probe_single_connector_modes+0x218/0x700 > [ 4.869978] drm_mode_getconnector+0x1b4/0x45c > [ 4.874410] drm_ioctl_kernel+0xac/0x128 > [ 4.878320] drm_ioctl+0x268/0x410 > [ 4.881711] drm_compat_ioctl+0xdc/0xf0 > [ 4.885536] __arm64_compat_sys_ioctl+0xc8/0x100 > [ 4.890142] el0_svc_common+0xf4/0x1c0 > [ 4.893879] do_el0_svc_compat+0x28/0x3c > [ 4.897791] el0_svc_compat+0x10/0x1c > [ 4.901441] el0_sync_compat_handler+0xa8/0xcc > [ 4.905873] el0_sync_compat+0x178/0x180 > [ 4.909783] ---[ end trace b4f2db9d9c88610c ]--- > > Signed-off-by: Hsin-Yi Wang <hsinyi@chromium.org> > Reviewed-by: Sean Paul <seanpaul@chromium.org> > --- > v9->v10: rebase to latest linux-next. > v9: https://patchwork.kernel.org/project/linux-mediatek/patch/20220318074825.3359978-2-hsinyi@chromium.org/ > v8: https://patchwork.kernel.org/project/linux-mediatek/patch/20220208084234.1684930-1-hsinyi@chromium.org/ > v7: https://patchwork.kernel.org/project/linux-mediatek/patch/20220208073714.1540390-1-hsinyi@chromium.org/ > --- > drivers/gpu/drm/drm_connector.c | 58 +++++++++++++++++++++++++-------- > include/drm/drm_connector.h | 2 ++ > 2 files changed, 47 insertions(+), 13 deletions(-) > > diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c > index 1c48d162c77e..d68cc78f6684 100644 > --- a/drivers/gpu/drm/drm_connector.c > +++ b/drivers/gpu/drm/drm_connector.c > @@ -1252,7 +1252,7 @@ static const struct drm_prop_enum_list dp_colorspaces[] = { > * INPUT_PROP_DIRECT) will still map 1:1 to the actual LCD panel > * coordinates, so if userspace rotates the picture to adjust for > * the orientation it must also apply the same transformation to the > - * touchscreen input coordinates. This property is initialized by calling > + * touchscreen input coordinates. This property value is set by calling > * drm_connector_set_panel_orientation() or > * drm_connector_set_panel_orientation_with_quirk() > * > @@ -2310,8 +2310,8 @@ EXPORT_SYMBOL(drm_connector_set_vrr_capable_property); > * @connector: connector for which to set the panel-orientation property. > * @panel_orientation: drm_panel_orientation value to set > * > - * This function sets the connector's panel_orientation and attaches > - * a "panel orientation" property to the connector. > + * This function sets the connector's panel_orientation value. If the property > + * doesn't exist, it will try to create one. > * > * Calling this function on a connector where the panel_orientation has > * already been set is a no-op (e.g. the orientation has been overridden with > @@ -2343,18 +2343,13 @@ int drm_connector_set_panel_orientation( > > prop = dev->mode_config.panel_orientation_property; > if (!prop) { > - prop = drm_property_create_enum(dev, DRM_MODE_PROP_IMMUTABLE, > - "panel orientation", > - drm_panel_orientation_enum_list, > - ARRAY_SIZE(drm_panel_orientation_enum_list)); > - if (!prop) > + if (drm_connector_init_panel_orientation_property(connector) < 0) > return -ENOMEM; > - > - dev->mode_config.panel_orientation_property = prop; > + prop = dev->mode_config.panel_orientation_property; > } > > - drm_object_attach_property(&connector->base, prop, > - info->panel_orientation); > + drm_object_property_set_value(&connector->base, prop, > + info->panel_orientation); > return 0; > } > EXPORT_SYMBOL(drm_connector_set_panel_orientation); > @@ -2362,7 +2357,7 @@ EXPORT_SYMBOL(drm_connector_set_panel_orientation); > /** > * drm_connector_set_panel_orientation_with_quirk - set the > * connector's panel_orientation after checking for quirks > - * @connector: connector for which to init the panel-orientation property. > + * @connector: connector for which to set the panel-orientation property. > * @panel_orientation: drm_panel_orientation value to set > * @width: width in pixels of the panel, used for panel quirk detection > * @height: height in pixels of the panel, used for panel quirk detection > @@ -2389,6 +2384,43 @@ int drm_connector_set_panel_orientation_with_quirk( > } > EXPORT_SYMBOL(drm_connector_set_panel_orientation_with_quirk); > > +/** > + * drm_connector_init_panel_orientation_property - > + * create the connector's panel orientation property > + * > + * This function attaches a "panel orientation" property to the connector > + * and initializes its value to DRM_MODE_PANEL_ORIENTATION_UNKNOWN. > + * > + * The value of the property can be set by drm_connector_set_panel_orientation() > + * or drm_connector_set_panel_orientation_with_quirk() later. > + * > + * Returns: > + * Zero on success, negative errno on failure. > + */ > +int drm_connector_init_panel_orientation_property( > + struct drm_connector *connector) > +{ > + struct drm_device *dev = connector->dev; > + struct drm_property *prop; > + > + if(dev->mode_config.panel_orientation_property) > + return 0; > + > + prop = drm_property_create_enum(dev, DRM_MODE_PROP_IMMUTABLE, > + "panel orientation", > + drm_panel_orientation_enum_list, > + ARRAY_SIZE(drm_panel_orientation_enum_list)); > + if (!prop) > + return -ENOMEM; > + > + dev->mode_config.panel_orientation_property = prop; > + drm_object_attach_property(&connector->base, prop, > + DRM_MODE_PANEL_ORIENTATION_UNKNOWN); DRM_MODE_PANEL_ORIENTATION_UNKNOWN is -1 which is not a valid value for an enum. IOW when the panel-orientation is DRM_MODE_PANEL_ORIENTATION_UNKNOWN then the property should not be created on the drm-connector object at all. Which brings us back to what I said in reply to the coverletter, it seems that you have a probe ordering problem here; and fixing that issue would make this patch-set unnecessary. Regards, Hans > + > + return 0; > +} > +EXPORT_SYMBOL(drm_connector_init_panel_orientation_property); > + > static const struct drm_prop_enum_list privacy_screen_enum[] = { > { PRIVACY_SCREEN_DISABLED, "Disabled" }, > { PRIVACY_SCREEN_ENABLED, "Enabled" }, > diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h > index 3ac4bf87f257..f0681091c617 100644 > --- a/include/drm/drm_connector.h > +++ b/include/drm/drm_connector.h > @@ -1802,6 +1802,8 @@ int drm_connector_set_panel_orientation_with_quirk( > struct drm_connector *connector, > enum drm_panel_orientation panel_orientation, > int width, int height); > +int drm_connector_init_panel_orientation_property( > + struct drm_connector *connector); > int drm_connector_attach_max_bpc_property(struct drm_connector *connector, > int min, int max); > void drm_connector_create_privacy_screen_properties(struct drm_connector *conn); ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v10 1/4] gpu: drm: separate panel orientation property creating and value setting @ 2022-05-30 8:57 ` Hans de Goede 0 siblings, 0 replies; 69+ messages in thread From: Hans de Goede @ 2022-05-30 8:57 UTC (permalink / raw) To: Hsin-Yi Wang, dri-devel, David Airlie, Daniel Vetter, amd-gfx, intel-gfx Cc: Rob Clark, Stephen Boyd, Douglas Anderson, Chun-Kuang Hu, Sean Paul, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, linux-kernel, Rob Herring, Matthias Brugger, devicetree, linux-arm-kernel, linux-mediatek, Simon Ser, Harry Wentland, Alex Deucher, Jani Nikula, Emil Velikov Hi, On 5/30/22 10:19, Hsin-Yi Wang wrote: > drm_dev_register() sets connector->registration_state to > DRM_CONNECTOR_REGISTERED and dev->registered to true. If > drm_connector_set_panel_orientation() is first called after > drm_dev_register(), it will fail several checks and results in following > warning. > > Add a function to create panel orientation property and set default value > to UNKNOWN, so drivers can call this function to init the property earlier > , and let the panel set the real value later. > > [ 4.480976] ------------[ cut here ]------------ > [ 4.485603] WARNING: CPU: 5 PID: 369 at drivers/gpu/drm/drm_mode_object.c:45 __drm_mode_object_add+0xb4/0xbc > <snip> > [ 4.609772] Call trace: > [ 4.612208] __drm_mode_object_add+0xb4/0xbc > [ 4.616466] drm_mode_object_add+0x20/0x2c > [ 4.620552] drm_property_create+0xdc/0x174 > [ 4.624723] drm_property_create_enum+0x34/0x98 > [ 4.629241] drm_connector_set_panel_orientation+0x64/0xa0 > [ 4.634716] boe_panel_get_modes+0x88/0xd8 > [ 4.638802] drm_panel_get_modes+0x2c/0x48 > [ 4.642887] panel_bridge_get_modes+0x1c/0x28 > [ 4.647233] drm_bridge_connector_get_modes+0xa0/0xd4 > [ 4.652273] drm_helper_probe_single_connector_modes+0x218/0x700 > [ 4.658266] drm_mode_getconnector+0x1b4/0x45c > [ 4.662699] drm_ioctl_kernel+0xac/0x128 > [ 4.666611] drm_ioctl+0x268/0x410 > [ 4.670002] drm_compat_ioctl+0xdc/0xf0 > [ 4.673829] __arm64_compat_sys_ioctl+0xc8/0x100 > [ 4.678436] el0_svc_common+0xf4/0x1c0 > [ 4.682174] do_el0_svc_compat+0x28/0x3c > [ 4.686088] el0_svc_compat+0x10/0x1c > [ 4.689738] el0_sync_compat_handler+0xa8/0xcc > [ 4.694171] el0_sync_compat+0x178/0x180 > [ 4.698082] ---[ end trace b4f2db9d9c88610b ]--- > [ 4.702721] ------------[ cut here ]------------ > [ 4.707329] WARNING: CPU: 5 PID: 369 at drivers/gpu/drm/drm_mode_object.c:243 drm_object_attach_property+0x48/0xb8 > <snip> > [ 4.833830] Call trace: > [ 4.836266] drm_object_attach_property+0x48/0xb8 > [ 4.840958] drm_connector_set_panel_orientation+0x84/0xa0 > [ 4.846432] boe_panel_get_modes+0x88/0xd8 > [ 4.850516] drm_panel_get_modes+0x2c/0x48 > [ 4.854600] panel_bridge_get_modes+0x1c/0x28 > [ 4.858946] drm_bridge_connector_get_modes+0xa0/0xd4 > [ 4.863984] drm_helper_probe_single_connector_modes+0x218/0x700 > [ 4.869978] drm_mode_getconnector+0x1b4/0x45c > [ 4.874410] drm_ioctl_kernel+0xac/0x128 > [ 4.878320] drm_ioctl+0x268/0x410 > [ 4.881711] drm_compat_ioctl+0xdc/0xf0 > [ 4.885536] __arm64_compat_sys_ioctl+0xc8/0x100 > [ 4.890142] el0_svc_common+0xf4/0x1c0 > [ 4.893879] do_el0_svc_compat+0x28/0x3c > [ 4.897791] el0_svc_compat+0x10/0x1c > [ 4.901441] el0_sync_compat_handler+0xa8/0xcc > [ 4.905873] el0_sync_compat+0x178/0x180 > [ 4.909783] ---[ end trace b4f2db9d9c88610c ]--- > > Signed-off-by: Hsin-Yi Wang <hsinyi@chromium.org> > Reviewed-by: Sean Paul <seanpaul@chromium.org> > --- > v9->v10: rebase to latest linux-next. > v9: https://patchwork.kernel.org/project/linux-mediatek/patch/20220318074825.3359978-2-hsinyi@chromium.org/ > v8: https://patchwork.kernel.org/project/linux-mediatek/patch/20220208084234.1684930-1-hsinyi@chromium.org/ > v7: https://patchwork.kernel.org/project/linux-mediatek/patch/20220208073714.1540390-1-hsinyi@chromium.org/ > --- > drivers/gpu/drm/drm_connector.c | 58 +++++++++++++++++++++++++-------- > include/drm/drm_connector.h | 2 ++ > 2 files changed, 47 insertions(+), 13 deletions(-) > > diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c > index 1c48d162c77e..d68cc78f6684 100644 > --- a/drivers/gpu/drm/drm_connector.c > +++ b/drivers/gpu/drm/drm_connector.c > @@ -1252,7 +1252,7 @@ static const struct drm_prop_enum_list dp_colorspaces[] = { > * INPUT_PROP_DIRECT) will still map 1:1 to the actual LCD panel > * coordinates, so if userspace rotates the picture to adjust for > * the orientation it must also apply the same transformation to the > - * touchscreen input coordinates. This property is initialized by calling > + * touchscreen input coordinates. This property value is set by calling > * drm_connector_set_panel_orientation() or > * drm_connector_set_panel_orientation_with_quirk() > * > @@ -2310,8 +2310,8 @@ EXPORT_SYMBOL(drm_connector_set_vrr_capable_property); > * @connector: connector for which to set the panel-orientation property. > * @panel_orientation: drm_panel_orientation value to set > * > - * This function sets the connector's panel_orientation and attaches > - * a "panel orientation" property to the connector. > + * This function sets the connector's panel_orientation value. If the property > + * doesn't exist, it will try to create one. > * > * Calling this function on a connector where the panel_orientation has > * already been set is a no-op (e.g. the orientation has been overridden with > @@ -2343,18 +2343,13 @@ int drm_connector_set_panel_orientation( > > prop = dev->mode_config.panel_orientation_property; > if (!prop) { > - prop = drm_property_create_enum(dev, DRM_MODE_PROP_IMMUTABLE, > - "panel orientation", > - drm_panel_orientation_enum_list, > - ARRAY_SIZE(drm_panel_orientation_enum_list)); > - if (!prop) > + if (drm_connector_init_panel_orientation_property(connector) < 0) > return -ENOMEM; > - > - dev->mode_config.panel_orientation_property = prop; > + prop = dev->mode_config.panel_orientation_property; > } > > - drm_object_attach_property(&connector->base, prop, > - info->panel_orientation); > + drm_object_property_set_value(&connector->base, prop, > + info->panel_orientation); > return 0; > } > EXPORT_SYMBOL(drm_connector_set_panel_orientation); > @@ -2362,7 +2357,7 @@ EXPORT_SYMBOL(drm_connector_set_panel_orientation); > /** > * drm_connector_set_panel_orientation_with_quirk - set the > * connector's panel_orientation after checking for quirks > - * @connector: connector for which to init the panel-orientation property. > + * @connector: connector for which to set the panel-orientation property. > * @panel_orientation: drm_panel_orientation value to set > * @width: width in pixels of the panel, used for panel quirk detection > * @height: height in pixels of the panel, used for panel quirk detection > @@ -2389,6 +2384,43 @@ int drm_connector_set_panel_orientation_with_quirk( > } > EXPORT_SYMBOL(drm_connector_set_panel_orientation_with_quirk); > > +/** > + * drm_connector_init_panel_orientation_property - > + * create the connector's panel orientation property > + * > + * This function attaches a "panel orientation" property to the connector > + * and initializes its value to DRM_MODE_PANEL_ORIENTATION_UNKNOWN. > + * > + * The value of the property can be set by drm_connector_set_panel_orientation() > + * or drm_connector_set_panel_orientation_with_quirk() later. > + * > + * Returns: > + * Zero on success, negative errno on failure. > + */ > +int drm_connector_init_panel_orientation_property( > + struct drm_connector *connector) > +{ > + struct drm_device *dev = connector->dev; > + struct drm_property *prop; > + > + if(dev->mode_config.panel_orientation_property) > + return 0; > + > + prop = drm_property_create_enum(dev, DRM_MODE_PROP_IMMUTABLE, > + "panel orientation", > + drm_panel_orientation_enum_list, > + ARRAY_SIZE(drm_panel_orientation_enum_list)); > + if (!prop) > + return -ENOMEM; > + > + dev->mode_config.panel_orientation_property = prop; > + drm_object_attach_property(&connector->base, prop, > + DRM_MODE_PANEL_ORIENTATION_UNKNOWN); DRM_MODE_PANEL_ORIENTATION_UNKNOWN is -1 which is not a valid value for an enum. IOW when the panel-orientation is DRM_MODE_PANEL_ORIENTATION_UNKNOWN then the property should not be created on the drm-connector object at all. Which brings us back to what I said in reply to the coverletter, it seems that you have a probe ordering problem here; and fixing that issue would make this patch-set unnecessary. Regards, Hans > + > + return 0; > +} > +EXPORT_SYMBOL(drm_connector_init_panel_orientation_property); > + > static const struct drm_prop_enum_list privacy_screen_enum[] = { > { PRIVACY_SCREEN_DISABLED, "Disabled" }, > { PRIVACY_SCREEN_ENABLED, "Enabled" }, > diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h > index 3ac4bf87f257..f0681091c617 100644 > --- a/include/drm/drm_connector.h > +++ b/include/drm/drm_connector.h > @@ -1802,6 +1802,8 @@ int drm_connector_set_panel_orientation_with_quirk( > struct drm_connector *connector, > enum drm_panel_orientation panel_orientation, > int width, int height); > +int drm_connector_init_panel_orientation_property( > + struct drm_connector *connector); > int drm_connector_attach_max_bpc_property(struct drm_connector *connector, > int min, int max); > void drm_connector_create_privacy_screen_properties(struct drm_connector *conn); _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v10 1/4] gpu: drm: separate panel orientation property creating and value setting @ 2022-05-30 8:57 ` Hans de Goede 0 siblings, 0 replies; 69+ messages in thread From: Hans de Goede @ 2022-05-30 8:57 UTC (permalink / raw) To: Hsin-Yi Wang, dri-devel, David Airlie, Daniel Vetter, amd-gfx, intel-gfx Cc: Rob Clark, Stephen Boyd, Douglas Anderson, Chun-Kuang Hu, Sean Paul, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, linux-kernel, Rob Herring, Matthias Brugger, devicetree, linux-arm-kernel, linux-mediatek, Simon Ser, Harry Wentland, Alex Deucher, Jani Nikula, Emil Velikov Hi, On 5/30/22 10:19, Hsin-Yi Wang wrote: > drm_dev_register() sets connector->registration_state to > DRM_CONNECTOR_REGISTERED and dev->registered to true. If > drm_connector_set_panel_orientation() is first called after > drm_dev_register(), it will fail several checks and results in following > warning. > > Add a function to create panel orientation property and set default value > to UNKNOWN, so drivers can call this function to init the property earlier > , and let the panel set the real value later. > > [ 4.480976] ------------[ cut here ]------------ > [ 4.485603] WARNING: CPU: 5 PID: 369 at drivers/gpu/drm/drm_mode_object.c:45 __drm_mode_object_add+0xb4/0xbc > <snip> > [ 4.609772] Call trace: > [ 4.612208] __drm_mode_object_add+0xb4/0xbc > [ 4.616466] drm_mode_object_add+0x20/0x2c > [ 4.620552] drm_property_create+0xdc/0x174 > [ 4.624723] drm_property_create_enum+0x34/0x98 > [ 4.629241] drm_connector_set_panel_orientation+0x64/0xa0 > [ 4.634716] boe_panel_get_modes+0x88/0xd8 > [ 4.638802] drm_panel_get_modes+0x2c/0x48 > [ 4.642887] panel_bridge_get_modes+0x1c/0x28 > [ 4.647233] drm_bridge_connector_get_modes+0xa0/0xd4 > [ 4.652273] drm_helper_probe_single_connector_modes+0x218/0x700 > [ 4.658266] drm_mode_getconnector+0x1b4/0x45c > [ 4.662699] drm_ioctl_kernel+0xac/0x128 > [ 4.666611] drm_ioctl+0x268/0x410 > [ 4.670002] drm_compat_ioctl+0xdc/0xf0 > [ 4.673829] __arm64_compat_sys_ioctl+0xc8/0x100 > [ 4.678436] el0_svc_common+0xf4/0x1c0 > [ 4.682174] do_el0_svc_compat+0x28/0x3c > [ 4.686088] el0_svc_compat+0x10/0x1c > [ 4.689738] el0_sync_compat_handler+0xa8/0xcc > [ 4.694171] el0_sync_compat+0x178/0x180 > [ 4.698082] ---[ end trace b4f2db9d9c88610b ]--- > [ 4.702721] ------------[ cut here ]------------ > [ 4.707329] WARNING: CPU: 5 PID: 369 at drivers/gpu/drm/drm_mode_object.c:243 drm_object_attach_property+0x48/0xb8 > <snip> > [ 4.833830] Call trace: > [ 4.836266] drm_object_attach_property+0x48/0xb8 > [ 4.840958] drm_connector_set_panel_orientation+0x84/0xa0 > [ 4.846432] boe_panel_get_modes+0x88/0xd8 > [ 4.850516] drm_panel_get_modes+0x2c/0x48 > [ 4.854600] panel_bridge_get_modes+0x1c/0x28 > [ 4.858946] drm_bridge_connector_get_modes+0xa0/0xd4 > [ 4.863984] drm_helper_probe_single_connector_modes+0x218/0x700 > [ 4.869978] drm_mode_getconnector+0x1b4/0x45c > [ 4.874410] drm_ioctl_kernel+0xac/0x128 > [ 4.878320] drm_ioctl+0x268/0x410 > [ 4.881711] drm_compat_ioctl+0xdc/0xf0 > [ 4.885536] __arm64_compat_sys_ioctl+0xc8/0x100 > [ 4.890142] el0_svc_common+0xf4/0x1c0 > [ 4.893879] do_el0_svc_compat+0x28/0x3c > [ 4.897791] el0_svc_compat+0x10/0x1c > [ 4.901441] el0_sync_compat_handler+0xa8/0xcc > [ 4.905873] el0_sync_compat+0x178/0x180 > [ 4.909783] ---[ end trace b4f2db9d9c88610c ]--- > > Signed-off-by: Hsin-Yi Wang <hsinyi@chromium.org> > Reviewed-by: Sean Paul <seanpaul@chromium.org> > --- > v9->v10: rebase to latest linux-next. > v9: https://patchwork.kernel.org/project/linux-mediatek/patch/20220318074825.3359978-2-hsinyi@chromium.org/ > v8: https://patchwork.kernel.org/project/linux-mediatek/patch/20220208084234.1684930-1-hsinyi@chromium.org/ > v7: https://patchwork.kernel.org/project/linux-mediatek/patch/20220208073714.1540390-1-hsinyi@chromium.org/ > --- > drivers/gpu/drm/drm_connector.c | 58 +++++++++++++++++++++++++-------- > include/drm/drm_connector.h | 2 ++ > 2 files changed, 47 insertions(+), 13 deletions(-) > > diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c > index 1c48d162c77e..d68cc78f6684 100644 > --- a/drivers/gpu/drm/drm_connector.c > +++ b/drivers/gpu/drm/drm_connector.c > @@ -1252,7 +1252,7 @@ static const struct drm_prop_enum_list dp_colorspaces[] = { > * INPUT_PROP_DIRECT) will still map 1:1 to the actual LCD panel > * coordinates, so if userspace rotates the picture to adjust for > * the orientation it must also apply the same transformation to the > - * touchscreen input coordinates. This property is initialized by calling > + * touchscreen input coordinates. This property value is set by calling > * drm_connector_set_panel_orientation() or > * drm_connector_set_panel_orientation_with_quirk() > * > @@ -2310,8 +2310,8 @@ EXPORT_SYMBOL(drm_connector_set_vrr_capable_property); > * @connector: connector for which to set the panel-orientation property. > * @panel_orientation: drm_panel_orientation value to set > * > - * This function sets the connector's panel_orientation and attaches > - * a "panel orientation" property to the connector. > + * This function sets the connector's panel_orientation value. If the property > + * doesn't exist, it will try to create one. > * > * Calling this function on a connector where the panel_orientation has > * already been set is a no-op (e.g. the orientation has been overridden with > @@ -2343,18 +2343,13 @@ int drm_connector_set_panel_orientation( > > prop = dev->mode_config.panel_orientation_property; > if (!prop) { > - prop = drm_property_create_enum(dev, DRM_MODE_PROP_IMMUTABLE, > - "panel orientation", > - drm_panel_orientation_enum_list, > - ARRAY_SIZE(drm_panel_orientation_enum_list)); > - if (!prop) > + if (drm_connector_init_panel_orientation_property(connector) < 0) > return -ENOMEM; > - > - dev->mode_config.panel_orientation_property = prop; > + prop = dev->mode_config.panel_orientation_property; > } > > - drm_object_attach_property(&connector->base, prop, > - info->panel_orientation); > + drm_object_property_set_value(&connector->base, prop, > + info->panel_orientation); > return 0; > } > EXPORT_SYMBOL(drm_connector_set_panel_orientation); > @@ -2362,7 +2357,7 @@ EXPORT_SYMBOL(drm_connector_set_panel_orientation); > /** > * drm_connector_set_panel_orientation_with_quirk - set the > * connector's panel_orientation after checking for quirks > - * @connector: connector for which to init the panel-orientation property. > + * @connector: connector for which to set the panel-orientation property. > * @panel_orientation: drm_panel_orientation value to set > * @width: width in pixels of the panel, used for panel quirk detection > * @height: height in pixels of the panel, used for panel quirk detection > @@ -2389,6 +2384,43 @@ int drm_connector_set_panel_orientation_with_quirk( > } > EXPORT_SYMBOL(drm_connector_set_panel_orientation_with_quirk); > > +/** > + * drm_connector_init_panel_orientation_property - > + * create the connector's panel orientation property > + * > + * This function attaches a "panel orientation" property to the connector > + * and initializes its value to DRM_MODE_PANEL_ORIENTATION_UNKNOWN. > + * > + * The value of the property can be set by drm_connector_set_panel_orientation() > + * or drm_connector_set_panel_orientation_with_quirk() later. > + * > + * Returns: > + * Zero on success, negative errno on failure. > + */ > +int drm_connector_init_panel_orientation_property( > + struct drm_connector *connector) > +{ > + struct drm_device *dev = connector->dev; > + struct drm_property *prop; > + > + if(dev->mode_config.panel_orientation_property) > + return 0; > + > + prop = drm_property_create_enum(dev, DRM_MODE_PROP_IMMUTABLE, > + "panel orientation", > + drm_panel_orientation_enum_list, > + ARRAY_SIZE(drm_panel_orientation_enum_list)); > + if (!prop) > + return -ENOMEM; > + > + dev->mode_config.panel_orientation_property = prop; > + drm_object_attach_property(&connector->base, prop, > + DRM_MODE_PANEL_ORIENTATION_UNKNOWN); DRM_MODE_PANEL_ORIENTATION_UNKNOWN is -1 which is not a valid value for an enum. IOW when the panel-orientation is DRM_MODE_PANEL_ORIENTATION_UNKNOWN then the property should not be created on the drm-connector object at all. Which brings us back to what I said in reply to the coverletter, it seems that you have a probe ordering problem here; and fixing that issue would make this patch-set unnecessary. Regards, Hans > + > + return 0; > +} > +EXPORT_SYMBOL(drm_connector_init_panel_orientation_property); > + > static const struct drm_prop_enum_list privacy_screen_enum[] = { > { PRIVACY_SCREEN_DISABLED, "Disabled" }, > { PRIVACY_SCREEN_ENABLED, "Enabled" }, > diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h > index 3ac4bf87f257..f0681091c617 100644 > --- a/include/drm/drm_connector.h > +++ b/include/drm/drm_connector.h > @@ -1802,6 +1802,8 @@ int drm_connector_set_panel_orientation_with_quirk( > struct drm_connector *connector, > enum drm_panel_orientation panel_orientation, > int width, int height); > +int drm_connector_init_panel_orientation_property( > + struct drm_connector *connector); > int drm_connector_attach_max_bpc_property(struct drm_connector *connector, > int min, int max); > void drm_connector_create_privacy_screen_properties(struct drm_connector *conn); _______________________________________________ Linux-mediatek mailing list Linux-mediatek@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-mediatek ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [Intel-gfx] [PATCH v10 1/4] gpu: drm: separate panel orientation property creating and value setting @ 2022-05-30 8:57 ` Hans de Goede 0 siblings, 0 replies; 69+ messages in thread From: Hans de Goede @ 2022-05-30 8:57 UTC (permalink / raw) To: Hsin-Yi Wang, dri-devel, David Airlie, Daniel Vetter, amd-gfx, intel-gfx Cc: Rob Clark, Chun-Kuang Hu, Harry Wentland, devicetree, linux-kernel, Douglas Anderson, Maxime Ripard, Stephen Boyd, Alex Deucher, Rob Herring, linux-mediatek, Thomas Zimmermann, Simon Ser, Matthias Brugger, linux-arm-kernel Hi, On 5/30/22 10:19, Hsin-Yi Wang wrote: > drm_dev_register() sets connector->registration_state to > DRM_CONNECTOR_REGISTERED and dev->registered to true. If > drm_connector_set_panel_orientation() is first called after > drm_dev_register(), it will fail several checks and results in following > warning. > > Add a function to create panel orientation property and set default value > to UNKNOWN, so drivers can call this function to init the property earlier > , and let the panel set the real value later. > > [ 4.480976] ------------[ cut here ]------------ > [ 4.485603] WARNING: CPU: 5 PID: 369 at drivers/gpu/drm/drm_mode_object.c:45 __drm_mode_object_add+0xb4/0xbc > <snip> > [ 4.609772] Call trace: > [ 4.612208] __drm_mode_object_add+0xb4/0xbc > [ 4.616466] drm_mode_object_add+0x20/0x2c > [ 4.620552] drm_property_create+0xdc/0x174 > [ 4.624723] drm_property_create_enum+0x34/0x98 > [ 4.629241] drm_connector_set_panel_orientation+0x64/0xa0 > [ 4.634716] boe_panel_get_modes+0x88/0xd8 > [ 4.638802] drm_panel_get_modes+0x2c/0x48 > [ 4.642887] panel_bridge_get_modes+0x1c/0x28 > [ 4.647233] drm_bridge_connector_get_modes+0xa0/0xd4 > [ 4.652273] drm_helper_probe_single_connector_modes+0x218/0x700 > [ 4.658266] drm_mode_getconnector+0x1b4/0x45c > [ 4.662699] drm_ioctl_kernel+0xac/0x128 > [ 4.666611] drm_ioctl+0x268/0x410 > [ 4.670002] drm_compat_ioctl+0xdc/0xf0 > [ 4.673829] __arm64_compat_sys_ioctl+0xc8/0x100 > [ 4.678436] el0_svc_common+0xf4/0x1c0 > [ 4.682174] do_el0_svc_compat+0x28/0x3c > [ 4.686088] el0_svc_compat+0x10/0x1c > [ 4.689738] el0_sync_compat_handler+0xa8/0xcc > [ 4.694171] el0_sync_compat+0x178/0x180 > [ 4.698082] ---[ end trace b4f2db9d9c88610b ]--- > [ 4.702721] ------------[ cut here ]------------ > [ 4.707329] WARNING: CPU: 5 PID: 369 at drivers/gpu/drm/drm_mode_object.c:243 drm_object_attach_property+0x48/0xb8 > <snip> > [ 4.833830] Call trace: > [ 4.836266] drm_object_attach_property+0x48/0xb8 > [ 4.840958] drm_connector_set_panel_orientation+0x84/0xa0 > [ 4.846432] boe_panel_get_modes+0x88/0xd8 > [ 4.850516] drm_panel_get_modes+0x2c/0x48 > [ 4.854600] panel_bridge_get_modes+0x1c/0x28 > [ 4.858946] drm_bridge_connector_get_modes+0xa0/0xd4 > [ 4.863984] drm_helper_probe_single_connector_modes+0x218/0x700 > [ 4.869978] drm_mode_getconnector+0x1b4/0x45c > [ 4.874410] drm_ioctl_kernel+0xac/0x128 > [ 4.878320] drm_ioctl+0x268/0x410 > [ 4.881711] drm_compat_ioctl+0xdc/0xf0 > [ 4.885536] __arm64_compat_sys_ioctl+0xc8/0x100 > [ 4.890142] el0_svc_common+0xf4/0x1c0 > [ 4.893879] do_el0_svc_compat+0x28/0x3c > [ 4.897791] el0_svc_compat+0x10/0x1c > [ 4.901441] el0_sync_compat_handler+0xa8/0xcc > [ 4.905873] el0_sync_compat+0x178/0x180 > [ 4.909783] ---[ end trace b4f2db9d9c88610c ]--- > > Signed-off-by: Hsin-Yi Wang <hsinyi@chromium.org> > Reviewed-by: Sean Paul <seanpaul@chromium.org> > --- > v9->v10: rebase to latest linux-next. > v9: https://patchwork.kernel.org/project/linux-mediatek/patch/20220318074825.3359978-2-hsinyi@chromium.org/ > v8: https://patchwork.kernel.org/project/linux-mediatek/patch/20220208084234.1684930-1-hsinyi@chromium.org/ > v7: https://patchwork.kernel.org/project/linux-mediatek/patch/20220208073714.1540390-1-hsinyi@chromium.org/ > --- > drivers/gpu/drm/drm_connector.c | 58 +++++++++++++++++++++++++-------- > include/drm/drm_connector.h | 2 ++ > 2 files changed, 47 insertions(+), 13 deletions(-) > > diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c > index 1c48d162c77e..d68cc78f6684 100644 > --- a/drivers/gpu/drm/drm_connector.c > +++ b/drivers/gpu/drm/drm_connector.c > @@ -1252,7 +1252,7 @@ static const struct drm_prop_enum_list dp_colorspaces[] = { > * INPUT_PROP_DIRECT) will still map 1:1 to the actual LCD panel > * coordinates, so if userspace rotates the picture to adjust for > * the orientation it must also apply the same transformation to the > - * touchscreen input coordinates. This property is initialized by calling > + * touchscreen input coordinates. This property value is set by calling > * drm_connector_set_panel_orientation() or > * drm_connector_set_panel_orientation_with_quirk() > * > @@ -2310,8 +2310,8 @@ EXPORT_SYMBOL(drm_connector_set_vrr_capable_property); > * @connector: connector for which to set the panel-orientation property. > * @panel_orientation: drm_panel_orientation value to set > * > - * This function sets the connector's panel_orientation and attaches > - * a "panel orientation" property to the connector. > + * This function sets the connector's panel_orientation value. If the property > + * doesn't exist, it will try to create one. > * > * Calling this function on a connector where the panel_orientation has > * already been set is a no-op (e.g. the orientation has been overridden with > @@ -2343,18 +2343,13 @@ int drm_connector_set_panel_orientation( > > prop = dev->mode_config.panel_orientation_property; > if (!prop) { > - prop = drm_property_create_enum(dev, DRM_MODE_PROP_IMMUTABLE, > - "panel orientation", > - drm_panel_orientation_enum_list, > - ARRAY_SIZE(drm_panel_orientation_enum_list)); > - if (!prop) > + if (drm_connector_init_panel_orientation_property(connector) < 0) > return -ENOMEM; > - > - dev->mode_config.panel_orientation_property = prop; > + prop = dev->mode_config.panel_orientation_property; > } > > - drm_object_attach_property(&connector->base, prop, > - info->panel_orientation); > + drm_object_property_set_value(&connector->base, prop, > + info->panel_orientation); > return 0; > } > EXPORT_SYMBOL(drm_connector_set_panel_orientation); > @@ -2362,7 +2357,7 @@ EXPORT_SYMBOL(drm_connector_set_panel_orientation); > /** > * drm_connector_set_panel_orientation_with_quirk - set the > * connector's panel_orientation after checking for quirks > - * @connector: connector for which to init the panel-orientation property. > + * @connector: connector for which to set the panel-orientation property. > * @panel_orientation: drm_panel_orientation value to set > * @width: width in pixels of the panel, used for panel quirk detection > * @height: height in pixels of the panel, used for panel quirk detection > @@ -2389,6 +2384,43 @@ int drm_connector_set_panel_orientation_with_quirk( > } > EXPORT_SYMBOL(drm_connector_set_panel_orientation_with_quirk); > > +/** > + * drm_connector_init_panel_orientation_property - > + * create the connector's panel orientation property > + * > + * This function attaches a "panel orientation" property to the connector > + * and initializes its value to DRM_MODE_PANEL_ORIENTATION_UNKNOWN. > + * > + * The value of the property can be set by drm_connector_set_panel_orientation() > + * or drm_connector_set_panel_orientation_with_quirk() later. > + * > + * Returns: > + * Zero on success, negative errno on failure. > + */ > +int drm_connector_init_panel_orientation_property( > + struct drm_connector *connector) > +{ > + struct drm_device *dev = connector->dev; > + struct drm_property *prop; > + > + if(dev->mode_config.panel_orientation_property) > + return 0; > + > + prop = drm_property_create_enum(dev, DRM_MODE_PROP_IMMUTABLE, > + "panel orientation", > + drm_panel_orientation_enum_list, > + ARRAY_SIZE(drm_panel_orientation_enum_list)); > + if (!prop) > + return -ENOMEM; > + > + dev->mode_config.panel_orientation_property = prop; > + drm_object_attach_property(&connector->base, prop, > + DRM_MODE_PANEL_ORIENTATION_UNKNOWN); DRM_MODE_PANEL_ORIENTATION_UNKNOWN is -1 which is not a valid value for an enum. IOW when the panel-orientation is DRM_MODE_PANEL_ORIENTATION_UNKNOWN then the property should not be created on the drm-connector object at all. Which brings us back to what I said in reply to the coverletter, it seems that you have a probe ordering problem here; and fixing that issue would make this patch-set unnecessary. Regards, Hans > + > + return 0; > +} > +EXPORT_SYMBOL(drm_connector_init_panel_orientation_property); > + > static const struct drm_prop_enum_list privacy_screen_enum[] = { > { PRIVACY_SCREEN_DISABLED, "Disabled" }, > { PRIVACY_SCREEN_ENABLED, "Enabled" }, > diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h > index 3ac4bf87f257..f0681091c617 100644 > --- a/include/drm/drm_connector.h > +++ b/include/drm/drm_connector.h > @@ -1802,6 +1802,8 @@ int drm_connector_set_panel_orientation_with_quirk( > struct drm_connector *connector, > enum drm_panel_orientation panel_orientation, > int width, int height); > +int drm_connector_init_panel_orientation_property( > + struct drm_connector *connector); > int drm_connector_attach_max_bpc_property(struct drm_connector *connector, > int min, int max); > void drm_connector_create_privacy_screen_properties(struct drm_connector *conn); ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v10 1/4] gpu: drm: separate panel orientation property creating and value setting @ 2022-05-30 8:57 ` Hans de Goede 0 siblings, 0 replies; 69+ messages in thread From: Hans de Goede @ 2022-05-30 8:57 UTC (permalink / raw) To: Hsin-Yi Wang, dri-devel, David Airlie, Daniel Vetter, amd-gfx, intel-gfx Cc: Rob Clark, Chun-Kuang Hu, Emil Velikov, devicetree, linux-kernel, Douglas Anderson, Stephen Boyd, Alex Deucher, Rob Herring, linux-mediatek, Thomas Zimmermann, Matthias Brugger, Sean Paul, linux-arm-kernel Hi, On 5/30/22 10:19, Hsin-Yi Wang wrote: > drm_dev_register() sets connector->registration_state to > DRM_CONNECTOR_REGISTERED and dev->registered to true. If > drm_connector_set_panel_orientation() is first called after > drm_dev_register(), it will fail several checks and results in following > warning. > > Add a function to create panel orientation property and set default value > to UNKNOWN, so drivers can call this function to init the property earlier > , and let the panel set the real value later. > > [ 4.480976] ------------[ cut here ]------------ > [ 4.485603] WARNING: CPU: 5 PID: 369 at drivers/gpu/drm/drm_mode_object.c:45 __drm_mode_object_add+0xb4/0xbc > <snip> > [ 4.609772] Call trace: > [ 4.612208] __drm_mode_object_add+0xb4/0xbc > [ 4.616466] drm_mode_object_add+0x20/0x2c > [ 4.620552] drm_property_create+0xdc/0x174 > [ 4.624723] drm_property_create_enum+0x34/0x98 > [ 4.629241] drm_connector_set_panel_orientation+0x64/0xa0 > [ 4.634716] boe_panel_get_modes+0x88/0xd8 > [ 4.638802] drm_panel_get_modes+0x2c/0x48 > [ 4.642887] panel_bridge_get_modes+0x1c/0x28 > [ 4.647233] drm_bridge_connector_get_modes+0xa0/0xd4 > [ 4.652273] drm_helper_probe_single_connector_modes+0x218/0x700 > [ 4.658266] drm_mode_getconnector+0x1b4/0x45c > [ 4.662699] drm_ioctl_kernel+0xac/0x128 > [ 4.666611] drm_ioctl+0x268/0x410 > [ 4.670002] drm_compat_ioctl+0xdc/0xf0 > [ 4.673829] __arm64_compat_sys_ioctl+0xc8/0x100 > [ 4.678436] el0_svc_common+0xf4/0x1c0 > [ 4.682174] do_el0_svc_compat+0x28/0x3c > [ 4.686088] el0_svc_compat+0x10/0x1c > [ 4.689738] el0_sync_compat_handler+0xa8/0xcc > [ 4.694171] el0_sync_compat+0x178/0x180 > [ 4.698082] ---[ end trace b4f2db9d9c88610b ]--- > [ 4.702721] ------------[ cut here ]------------ > [ 4.707329] WARNING: CPU: 5 PID: 369 at drivers/gpu/drm/drm_mode_object.c:243 drm_object_attach_property+0x48/0xb8 > <snip> > [ 4.833830] Call trace: > [ 4.836266] drm_object_attach_property+0x48/0xb8 > [ 4.840958] drm_connector_set_panel_orientation+0x84/0xa0 > [ 4.846432] boe_panel_get_modes+0x88/0xd8 > [ 4.850516] drm_panel_get_modes+0x2c/0x48 > [ 4.854600] panel_bridge_get_modes+0x1c/0x28 > [ 4.858946] drm_bridge_connector_get_modes+0xa0/0xd4 > [ 4.863984] drm_helper_probe_single_connector_modes+0x218/0x700 > [ 4.869978] drm_mode_getconnector+0x1b4/0x45c > [ 4.874410] drm_ioctl_kernel+0xac/0x128 > [ 4.878320] drm_ioctl+0x268/0x410 > [ 4.881711] drm_compat_ioctl+0xdc/0xf0 > [ 4.885536] __arm64_compat_sys_ioctl+0xc8/0x100 > [ 4.890142] el0_svc_common+0xf4/0x1c0 > [ 4.893879] do_el0_svc_compat+0x28/0x3c > [ 4.897791] el0_svc_compat+0x10/0x1c > [ 4.901441] el0_sync_compat_handler+0xa8/0xcc > [ 4.905873] el0_sync_compat+0x178/0x180 > [ 4.909783] ---[ end trace b4f2db9d9c88610c ]--- > > Signed-off-by: Hsin-Yi Wang <hsinyi@chromium.org> > Reviewed-by: Sean Paul <seanpaul@chromium.org> > --- > v9->v10: rebase to latest linux-next. > v9: https://patchwork.kernel.org/project/linux-mediatek/patch/20220318074825.3359978-2-hsinyi@chromium.org/ > v8: https://patchwork.kernel.org/project/linux-mediatek/patch/20220208084234.1684930-1-hsinyi@chromium.org/ > v7: https://patchwork.kernel.org/project/linux-mediatek/patch/20220208073714.1540390-1-hsinyi@chromium.org/ > --- > drivers/gpu/drm/drm_connector.c | 58 +++++++++++++++++++++++++-------- > include/drm/drm_connector.h | 2 ++ > 2 files changed, 47 insertions(+), 13 deletions(-) > > diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c > index 1c48d162c77e..d68cc78f6684 100644 > --- a/drivers/gpu/drm/drm_connector.c > +++ b/drivers/gpu/drm/drm_connector.c > @@ -1252,7 +1252,7 @@ static const struct drm_prop_enum_list dp_colorspaces[] = { > * INPUT_PROP_DIRECT) will still map 1:1 to the actual LCD panel > * coordinates, so if userspace rotates the picture to adjust for > * the orientation it must also apply the same transformation to the > - * touchscreen input coordinates. This property is initialized by calling > + * touchscreen input coordinates. This property value is set by calling > * drm_connector_set_panel_orientation() or > * drm_connector_set_panel_orientation_with_quirk() > * > @@ -2310,8 +2310,8 @@ EXPORT_SYMBOL(drm_connector_set_vrr_capable_property); > * @connector: connector for which to set the panel-orientation property. > * @panel_orientation: drm_panel_orientation value to set > * > - * This function sets the connector's panel_orientation and attaches > - * a "panel orientation" property to the connector. > + * This function sets the connector's panel_orientation value. If the property > + * doesn't exist, it will try to create one. > * > * Calling this function on a connector where the panel_orientation has > * already been set is a no-op (e.g. the orientation has been overridden with > @@ -2343,18 +2343,13 @@ int drm_connector_set_panel_orientation( > > prop = dev->mode_config.panel_orientation_property; > if (!prop) { > - prop = drm_property_create_enum(dev, DRM_MODE_PROP_IMMUTABLE, > - "panel orientation", > - drm_panel_orientation_enum_list, > - ARRAY_SIZE(drm_panel_orientation_enum_list)); > - if (!prop) > + if (drm_connector_init_panel_orientation_property(connector) < 0) > return -ENOMEM; > - > - dev->mode_config.panel_orientation_property = prop; > + prop = dev->mode_config.panel_orientation_property; > } > > - drm_object_attach_property(&connector->base, prop, > - info->panel_orientation); > + drm_object_property_set_value(&connector->base, prop, > + info->panel_orientation); > return 0; > } > EXPORT_SYMBOL(drm_connector_set_panel_orientation); > @@ -2362,7 +2357,7 @@ EXPORT_SYMBOL(drm_connector_set_panel_orientation); > /** > * drm_connector_set_panel_orientation_with_quirk - set the > * connector's panel_orientation after checking for quirks > - * @connector: connector for which to init the panel-orientation property. > + * @connector: connector for which to set the panel-orientation property. > * @panel_orientation: drm_panel_orientation value to set > * @width: width in pixels of the panel, used for panel quirk detection > * @height: height in pixels of the panel, used for panel quirk detection > @@ -2389,6 +2384,43 @@ int drm_connector_set_panel_orientation_with_quirk( > } > EXPORT_SYMBOL(drm_connector_set_panel_orientation_with_quirk); > > +/** > + * drm_connector_init_panel_orientation_property - > + * create the connector's panel orientation property > + * > + * This function attaches a "panel orientation" property to the connector > + * and initializes its value to DRM_MODE_PANEL_ORIENTATION_UNKNOWN. > + * > + * The value of the property can be set by drm_connector_set_panel_orientation() > + * or drm_connector_set_panel_orientation_with_quirk() later. > + * > + * Returns: > + * Zero on success, negative errno on failure. > + */ > +int drm_connector_init_panel_orientation_property( > + struct drm_connector *connector) > +{ > + struct drm_device *dev = connector->dev; > + struct drm_property *prop; > + > + if(dev->mode_config.panel_orientation_property) > + return 0; > + > + prop = drm_property_create_enum(dev, DRM_MODE_PROP_IMMUTABLE, > + "panel orientation", > + drm_panel_orientation_enum_list, > + ARRAY_SIZE(drm_panel_orientation_enum_list)); > + if (!prop) > + return -ENOMEM; > + > + dev->mode_config.panel_orientation_property = prop; > + drm_object_attach_property(&connector->base, prop, > + DRM_MODE_PANEL_ORIENTATION_UNKNOWN); DRM_MODE_PANEL_ORIENTATION_UNKNOWN is -1 which is not a valid value for an enum. IOW when the panel-orientation is DRM_MODE_PANEL_ORIENTATION_UNKNOWN then the property should not be created on the drm-connector object at all. Which brings us back to what I said in reply to the coverletter, it seems that you have a probe ordering problem here; and fixing that issue would make this patch-set unnecessary. Regards, Hans > + > + return 0; > +} > +EXPORT_SYMBOL(drm_connector_init_panel_orientation_property); > + > static const struct drm_prop_enum_list privacy_screen_enum[] = { > { PRIVACY_SCREEN_DISABLED, "Disabled" }, > { PRIVACY_SCREEN_ENABLED, "Enabled" }, > diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h > index 3ac4bf87f257..f0681091c617 100644 > --- a/include/drm/drm_connector.h > +++ b/include/drm/drm_connector.h > @@ -1802,6 +1802,8 @@ int drm_connector_set_panel_orientation_with_quirk( > struct drm_connector *connector, > enum drm_panel_orientation panel_orientation, > int width, int height); > +int drm_connector_init_panel_orientation_property( > + struct drm_connector *connector); > int drm_connector_attach_max_bpc_property(struct drm_connector *connector, > int min, int max); > void drm_connector_create_privacy_screen_properties(struct drm_connector *conn); ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v10 1/4] gpu: drm: separate panel orientation property creating and value setting 2022-05-30 8:57 ` Hans de Goede ` (3 preceding siblings ...) (?) @ 2022-05-30 9:01 ` Hans de Goede -1 siblings, 0 replies; 69+ messages in thread From: Hans de Goede @ 2022-05-30 9:01 UTC (permalink / raw) To: Hsin-Yi Wang, dri-devel, David Airlie, Daniel Vetter, amd-gfx, intel-gfx Cc: Rob Clark, Stephen Boyd, Douglas Anderson, Chun-Kuang Hu, Sean Paul, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, linux-kernel, Rob Herring, Matthias Brugger, devicetree, linux-arm-kernel, linux-mediatek, Simon Ser, Harry Wentland, Alex Deucher, Jani Nikula, Emil Velikov Hi, On 5/30/22 10:57, Hans de Goede wrote: > Hi, > > On 5/30/22 10:19, Hsin-Yi Wang wrote: >> drm_dev_register() sets connector->registration_state to >> DRM_CONNECTOR_REGISTERED and dev->registered to true. If >> drm_connector_set_panel_orientation() is first called after >> drm_dev_register(), it will fail several checks and results in following >> warning. >> >> Add a function to create panel orientation property and set default value >> to UNKNOWN, so drivers can call this function to init the property earlier >> , and let the panel set the real value later. >> >> [ 4.480976] ------------[ cut here ]------------ >> [ 4.485603] WARNING: CPU: 5 PID: 369 at drivers/gpu/drm/drm_mode_object.c:45 __drm_mode_object_add+0xb4/0xbc >> <snip> >> [ 4.609772] Call trace: >> [ 4.612208] __drm_mode_object_add+0xb4/0xbc >> [ 4.616466] drm_mode_object_add+0x20/0x2c >> [ 4.620552] drm_property_create+0xdc/0x174 >> [ 4.624723] drm_property_create_enum+0x34/0x98 >> [ 4.629241] drm_connector_set_panel_orientation+0x64/0xa0 >> [ 4.634716] boe_panel_get_modes+0x88/0xd8 >> [ 4.638802] drm_panel_get_modes+0x2c/0x48 >> [ 4.642887] panel_bridge_get_modes+0x1c/0x28 >> [ 4.647233] drm_bridge_connector_get_modes+0xa0/0xd4 >> [ 4.652273] drm_helper_probe_single_connector_modes+0x218/0x700 >> [ 4.658266] drm_mode_getconnector+0x1b4/0x45c >> [ 4.662699] drm_ioctl_kernel+0xac/0x128 >> [ 4.666611] drm_ioctl+0x268/0x410 >> [ 4.670002] drm_compat_ioctl+0xdc/0xf0 >> [ 4.673829] __arm64_compat_sys_ioctl+0xc8/0x100 >> [ 4.678436] el0_svc_common+0xf4/0x1c0 >> [ 4.682174] do_el0_svc_compat+0x28/0x3c >> [ 4.686088] el0_svc_compat+0x10/0x1c >> [ 4.689738] el0_sync_compat_handler+0xa8/0xcc >> [ 4.694171] el0_sync_compat+0x178/0x180 >> [ 4.698082] ---[ end trace b4f2db9d9c88610b ]--- >> [ 4.702721] ------------[ cut here ]------------ >> [ 4.707329] WARNING: CPU: 5 PID: 369 at drivers/gpu/drm/drm_mode_object.c:243 drm_object_attach_property+0x48/0xb8 >> <snip> >> [ 4.833830] Call trace: >> [ 4.836266] drm_object_attach_property+0x48/0xb8 >> [ 4.840958] drm_connector_set_panel_orientation+0x84/0xa0 >> [ 4.846432] boe_panel_get_modes+0x88/0xd8 >> [ 4.850516] drm_panel_get_modes+0x2c/0x48 >> [ 4.854600] panel_bridge_get_modes+0x1c/0x28 >> [ 4.858946] drm_bridge_connector_get_modes+0xa0/0xd4 >> [ 4.863984] drm_helper_probe_single_connector_modes+0x218/0x700 >> [ 4.869978] drm_mode_getconnector+0x1b4/0x45c >> [ 4.874410] drm_ioctl_kernel+0xac/0x128 >> [ 4.878320] drm_ioctl+0x268/0x410 >> [ 4.881711] drm_compat_ioctl+0xdc/0xf0 >> [ 4.885536] __arm64_compat_sys_ioctl+0xc8/0x100 >> [ 4.890142] el0_svc_common+0xf4/0x1c0 >> [ 4.893879] do_el0_svc_compat+0x28/0x3c >> [ 4.897791] el0_svc_compat+0x10/0x1c >> [ 4.901441] el0_sync_compat_handler+0xa8/0xcc >> [ 4.905873] el0_sync_compat+0x178/0x180 >> [ 4.909783] ---[ end trace b4f2db9d9c88610c ]--- >> >> Signed-off-by: Hsin-Yi Wang <hsinyi@chromium.org> >> Reviewed-by: Sean Paul <seanpaul@chromium.org> >> --- >> v9->v10: rebase to latest linux-next. >> v9: https://patchwork.kernel.org/project/linux-mediatek/patch/20220318074825.3359978-2-hsinyi@chromium.org/ >> v8: https://patchwork.kernel.org/project/linux-mediatek/patch/20220208084234.1684930-1-hsinyi@chromium.org/ >> v7: https://patchwork.kernel.org/project/linux-mediatek/patch/20220208073714.1540390-1-hsinyi@chromium.org/ >> --- >> drivers/gpu/drm/drm_connector.c | 58 +++++++++++++++++++++++++-------- >> include/drm/drm_connector.h | 2 ++ >> 2 files changed, 47 insertions(+), 13 deletions(-) >> >> diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c >> index 1c48d162c77e..d68cc78f6684 100644 >> --- a/drivers/gpu/drm/drm_connector.c >> +++ b/drivers/gpu/drm/drm_connector.c >> @@ -1252,7 +1252,7 @@ static const struct drm_prop_enum_list dp_colorspaces[] = { >> * INPUT_PROP_DIRECT) will still map 1:1 to the actual LCD panel >> * coordinates, so if userspace rotates the picture to adjust for >> * the orientation it must also apply the same transformation to the >> - * touchscreen input coordinates. This property is initialized by calling >> + * touchscreen input coordinates. This property value is set by calling >> * drm_connector_set_panel_orientation() or >> * drm_connector_set_panel_orientation_with_quirk() >> * >> @@ -2310,8 +2310,8 @@ EXPORT_SYMBOL(drm_connector_set_vrr_capable_property); >> * @connector: connector for which to set the panel-orientation property. >> * @panel_orientation: drm_panel_orientation value to set >> * >> - * This function sets the connector's panel_orientation and attaches >> - * a "panel orientation" property to the connector. >> + * This function sets the connector's panel_orientation value. If the property >> + * doesn't exist, it will try to create one. >> * >> * Calling this function on a connector where the panel_orientation has >> * already been set is a no-op (e.g. the orientation has been overridden with >> @@ -2343,18 +2343,13 @@ int drm_connector_set_panel_orientation( >> >> prop = dev->mode_config.panel_orientation_property; >> if (!prop) { >> - prop = drm_property_create_enum(dev, DRM_MODE_PROP_IMMUTABLE, >> - "panel orientation", >> - drm_panel_orientation_enum_list, >> - ARRAY_SIZE(drm_panel_orientation_enum_list)); >> - if (!prop) >> + if (drm_connector_init_panel_orientation_property(connector) < 0) >> return -ENOMEM; >> - >> - dev->mode_config.panel_orientation_property = prop; >> + prop = dev->mode_config.panel_orientation_property; >> } >> >> - drm_object_attach_property(&connector->base, prop, >> - info->panel_orientation); >> + drm_object_property_set_value(&connector->base, prop, >> + info->panel_orientation); >> return 0; >> } >> EXPORT_SYMBOL(drm_connector_set_panel_orientation); >> @@ -2362,7 +2357,7 @@ EXPORT_SYMBOL(drm_connector_set_panel_orientation); >> /** >> * drm_connector_set_panel_orientation_with_quirk - set the >> * connector's panel_orientation after checking for quirks >> - * @connector: connector for which to init the panel-orientation property. >> + * @connector: connector for which to set the panel-orientation property. >> * @panel_orientation: drm_panel_orientation value to set >> * @width: width in pixels of the panel, used for panel quirk detection >> * @height: height in pixels of the panel, used for panel quirk detection >> @@ -2389,6 +2384,43 @@ int drm_connector_set_panel_orientation_with_quirk( >> } >> EXPORT_SYMBOL(drm_connector_set_panel_orientation_with_quirk); >> >> +/** >> + * drm_connector_init_panel_orientation_property - >> + * create the connector's panel orientation property >> + * >> + * This function attaches a "panel orientation" property to the connector >> + * and initializes its value to DRM_MODE_PANEL_ORIENTATION_UNKNOWN. >> + * >> + * The value of the property can be set by drm_connector_set_panel_orientation() >> + * or drm_connector_set_panel_orientation_with_quirk() later. >> + * >> + * Returns: >> + * Zero on success, negative errno on failure. >> + */ >> +int drm_connector_init_panel_orientation_property( >> + struct drm_connector *connector) >> +{ >> + struct drm_device *dev = connector->dev; >> + struct drm_property *prop; >> + >> + if(dev->mode_config.panel_orientation_property) >> + return 0; >> + >> + prop = drm_property_create_enum(dev, DRM_MODE_PROP_IMMUTABLE, >> + "panel orientation", >> + drm_panel_orientation_enum_list, >> + ARRAY_SIZE(drm_panel_orientation_enum_list)); >> + if (!prop) >> + return -ENOMEM; >> + >> + dev->mode_config.panel_orientation_property = prop; >> + drm_object_attach_property(&connector->base, prop, >> + DRM_MODE_PANEL_ORIENTATION_UNKNOWN); > > DRM_MODE_PANEL_ORIENTATION_UNKNOWN is -1 which is not a valid value > for an enum. IOW when the panel-orientation is DRM_MODE_PANEL_ORIENTATION_UNKNOWN > then the property should not be created on the drm-connector object at all. p.s. note that the original drm_connector_set_panel_orientation() avoids ever creating the property when the orientation is unknown because of this bit of code near the top of the function: /* Don't attach the property if the orientation is unknown */ if (panel_orientation == DRM_MODE_PANEL_ORIENTATION_UNKNOWN) return 0; > Which brings us back to what I said in reply to the coverletter, > it seems that you have a probe ordering problem here; and fixing that > issue would make this patch-set unnecessary. Regards, Hans >> + >> + return 0; >> +} >> +EXPORT_SYMBOL(drm_connector_init_panel_orientation_property); >> + >> static const struct drm_prop_enum_list privacy_screen_enum[] = { >> { PRIVACY_SCREEN_DISABLED, "Disabled" }, >> { PRIVACY_SCREEN_ENABLED, "Enabled" }, >> diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h >> index 3ac4bf87f257..f0681091c617 100644 >> --- a/include/drm/drm_connector.h >> +++ b/include/drm/drm_connector.h >> @@ -1802,6 +1802,8 @@ int drm_connector_set_panel_orientation_with_quirk( >> struct drm_connector *connector, >> enum drm_panel_orientation panel_orientation, >> int width, int height); >> +int drm_connector_init_panel_orientation_property( >> + struct drm_connector *connector); >> int drm_connector_attach_max_bpc_property(struct drm_connector *connector, >> int min, int max); >> void drm_connector_create_privacy_screen_properties(struct drm_connector *conn); ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v10 1/4] gpu: drm: separate panel orientation property creating and value setting @ 2022-05-30 9:01 ` Hans de Goede 0 siblings, 0 replies; 69+ messages in thread From: Hans de Goede @ 2022-05-30 9:01 UTC (permalink / raw) To: Hsin-Yi Wang, dri-devel, David Airlie, Daniel Vetter, amd-gfx, intel-gfx Cc: Rob Clark, Chun-Kuang Hu, Emil Velikov, Harry Wentland, devicetree, linux-kernel, Maarten Lankhorst, Douglas Anderson, Maxime Ripard, Stephen Boyd, Alex Deucher, Rob Herring, linux-mediatek, Jani Nikula, Thomas Zimmermann, Simon Ser, Matthias Brugger, Sean Paul, linux-arm-kernel Hi, On 5/30/22 10:57, Hans de Goede wrote: > Hi, > > On 5/30/22 10:19, Hsin-Yi Wang wrote: >> drm_dev_register() sets connector->registration_state to >> DRM_CONNECTOR_REGISTERED and dev->registered to true. If >> drm_connector_set_panel_orientation() is first called after >> drm_dev_register(), it will fail several checks and results in following >> warning. >> >> Add a function to create panel orientation property and set default value >> to UNKNOWN, so drivers can call this function to init the property earlier >> , and let the panel set the real value later. >> >> [ 4.480976] ------------[ cut here ]------------ >> [ 4.485603] WARNING: CPU: 5 PID: 369 at drivers/gpu/drm/drm_mode_object.c:45 __drm_mode_object_add+0xb4/0xbc >> <snip> >> [ 4.609772] Call trace: >> [ 4.612208] __drm_mode_object_add+0xb4/0xbc >> [ 4.616466] drm_mode_object_add+0x20/0x2c >> [ 4.620552] drm_property_create+0xdc/0x174 >> [ 4.624723] drm_property_create_enum+0x34/0x98 >> [ 4.629241] drm_connector_set_panel_orientation+0x64/0xa0 >> [ 4.634716] boe_panel_get_modes+0x88/0xd8 >> [ 4.638802] drm_panel_get_modes+0x2c/0x48 >> [ 4.642887] panel_bridge_get_modes+0x1c/0x28 >> [ 4.647233] drm_bridge_connector_get_modes+0xa0/0xd4 >> [ 4.652273] drm_helper_probe_single_connector_modes+0x218/0x700 >> [ 4.658266] drm_mode_getconnector+0x1b4/0x45c >> [ 4.662699] drm_ioctl_kernel+0xac/0x128 >> [ 4.666611] drm_ioctl+0x268/0x410 >> [ 4.670002] drm_compat_ioctl+0xdc/0xf0 >> [ 4.673829] __arm64_compat_sys_ioctl+0xc8/0x100 >> [ 4.678436] el0_svc_common+0xf4/0x1c0 >> [ 4.682174] do_el0_svc_compat+0x28/0x3c >> [ 4.686088] el0_svc_compat+0x10/0x1c >> [ 4.689738] el0_sync_compat_handler+0xa8/0xcc >> [ 4.694171] el0_sync_compat+0x178/0x180 >> [ 4.698082] ---[ end trace b4f2db9d9c88610b ]--- >> [ 4.702721] ------------[ cut here ]------------ >> [ 4.707329] WARNING: CPU: 5 PID: 369 at drivers/gpu/drm/drm_mode_object.c:243 drm_object_attach_property+0x48/0xb8 >> <snip> >> [ 4.833830] Call trace: >> [ 4.836266] drm_object_attach_property+0x48/0xb8 >> [ 4.840958] drm_connector_set_panel_orientation+0x84/0xa0 >> [ 4.846432] boe_panel_get_modes+0x88/0xd8 >> [ 4.850516] drm_panel_get_modes+0x2c/0x48 >> [ 4.854600] panel_bridge_get_modes+0x1c/0x28 >> [ 4.858946] drm_bridge_connector_get_modes+0xa0/0xd4 >> [ 4.863984] drm_helper_probe_single_connector_modes+0x218/0x700 >> [ 4.869978] drm_mode_getconnector+0x1b4/0x45c >> [ 4.874410] drm_ioctl_kernel+0xac/0x128 >> [ 4.878320] drm_ioctl+0x268/0x410 >> [ 4.881711] drm_compat_ioctl+0xdc/0xf0 >> [ 4.885536] __arm64_compat_sys_ioctl+0xc8/0x100 >> [ 4.890142] el0_svc_common+0xf4/0x1c0 >> [ 4.893879] do_el0_svc_compat+0x28/0x3c >> [ 4.897791] el0_svc_compat+0x10/0x1c >> [ 4.901441] el0_sync_compat_handler+0xa8/0xcc >> [ 4.905873] el0_sync_compat+0x178/0x180 >> [ 4.909783] ---[ end trace b4f2db9d9c88610c ]--- >> >> Signed-off-by: Hsin-Yi Wang <hsinyi@chromium.org> >> Reviewed-by: Sean Paul <seanpaul@chromium.org> >> --- >> v9->v10: rebase to latest linux-next. >> v9: https://patchwork.kernel.org/project/linux-mediatek/patch/20220318074825.3359978-2-hsinyi@chromium.org/ >> v8: https://patchwork.kernel.org/project/linux-mediatek/patch/20220208084234.1684930-1-hsinyi@chromium.org/ >> v7: https://patchwork.kernel.org/project/linux-mediatek/patch/20220208073714.1540390-1-hsinyi@chromium.org/ >> --- >> drivers/gpu/drm/drm_connector.c | 58 +++++++++++++++++++++++++-------- >> include/drm/drm_connector.h | 2 ++ >> 2 files changed, 47 insertions(+), 13 deletions(-) >> >> diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c >> index 1c48d162c77e..d68cc78f6684 100644 >> --- a/drivers/gpu/drm/drm_connector.c >> +++ b/drivers/gpu/drm/drm_connector.c >> @@ -1252,7 +1252,7 @@ static const struct drm_prop_enum_list dp_colorspaces[] = { >> * INPUT_PROP_DIRECT) will still map 1:1 to the actual LCD panel >> * coordinates, so if userspace rotates the picture to adjust for >> * the orientation it must also apply the same transformation to the >> - * touchscreen input coordinates. This property is initialized by calling >> + * touchscreen input coordinates. This property value is set by calling >> * drm_connector_set_panel_orientation() or >> * drm_connector_set_panel_orientation_with_quirk() >> * >> @@ -2310,8 +2310,8 @@ EXPORT_SYMBOL(drm_connector_set_vrr_capable_property); >> * @connector: connector for which to set the panel-orientation property. >> * @panel_orientation: drm_panel_orientation value to set >> * >> - * This function sets the connector's panel_orientation and attaches >> - * a "panel orientation" property to the connector. >> + * This function sets the connector's panel_orientation value. If the property >> + * doesn't exist, it will try to create one. >> * >> * Calling this function on a connector where the panel_orientation has >> * already been set is a no-op (e.g. the orientation has been overridden with >> @@ -2343,18 +2343,13 @@ int drm_connector_set_panel_orientation( >> >> prop = dev->mode_config.panel_orientation_property; >> if (!prop) { >> - prop = drm_property_create_enum(dev, DRM_MODE_PROP_IMMUTABLE, >> - "panel orientation", >> - drm_panel_orientation_enum_list, >> - ARRAY_SIZE(drm_panel_orientation_enum_list)); >> - if (!prop) >> + if (drm_connector_init_panel_orientation_property(connector) < 0) >> return -ENOMEM; >> - >> - dev->mode_config.panel_orientation_property = prop; >> + prop = dev->mode_config.panel_orientation_property; >> } >> >> - drm_object_attach_property(&connector->base, prop, >> - info->panel_orientation); >> + drm_object_property_set_value(&connector->base, prop, >> + info->panel_orientation); >> return 0; >> } >> EXPORT_SYMBOL(drm_connector_set_panel_orientation); >> @@ -2362,7 +2357,7 @@ EXPORT_SYMBOL(drm_connector_set_panel_orientation); >> /** >> * drm_connector_set_panel_orientation_with_quirk - set the >> * connector's panel_orientation after checking for quirks >> - * @connector: connector for which to init the panel-orientation property. >> + * @connector: connector for which to set the panel-orientation property. >> * @panel_orientation: drm_panel_orientation value to set >> * @width: width in pixels of the panel, used for panel quirk detection >> * @height: height in pixels of the panel, used for panel quirk detection >> @@ -2389,6 +2384,43 @@ int drm_connector_set_panel_orientation_with_quirk( >> } >> EXPORT_SYMBOL(drm_connector_set_panel_orientation_with_quirk); >> >> +/** >> + * drm_connector_init_panel_orientation_property - >> + * create the connector's panel orientation property >> + * >> + * This function attaches a "panel orientation" property to the connector >> + * and initializes its value to DRM_MODE_PANEL_ORIENTATION_UNKNOWN. >> + * >> + * The value of the property can be set by drm_connector_set_panel_orientation() >> + * or drm_connector_set_panel_orientation_with_quirk() later. >> + * >> + * Returns: >> + * Zero on success, negative errno on failure. >> + */ >> +int drm_connector_init_panel_orientation_property( >> + struct drm_connector *connector) >> +{ >> + struct drm_device *dev = connector->dev; >> + struct drm_property *prop; >> + >> + if(dev->mode_config.panel_orientation_property) >> + return 0; >> + >> + prop = drm_property_create_enum(dev, DRM_MODE_PROP_IMMUTABLE, >> + "panel orientation", >> + drm_panel_orientation_enum_list, >> + ARRAY_SIZE(drm_panel_orientation_enum_list)); >> + if (!prop) >> + return -ENOMEM; >> + >> + dev->mode_config.panel_orientation_property = prop; >> + drm_object_attach_property(&connector->base, prop, >> + DRM_MODE_PANEL_ORIENTATION_UNKNOWN); > > DRM_MODE_PANEL_ORIENTATION_UNKNOWN is -1 which is not a valid value > for an enum. IOW when the panel-orientation is DRM_MODE_PANEL_ORIENTATION_UNKNOWN > then the property should not be created on the drm-connector object at all. p.s. note that the original drm_connector_set_panel_orientation() avoids ever creating the property when the orientation is unknown because of this bit of code near the top of the function: /* Don't attach the property if the orientation is unknown */ if (panel_orientation == DRM_MODE_PANEL_ORIENTATION_UNKNOWN) return 0; > Which brings us back to what I said in reply to the coverletter, > it seems that you have a probe ordering problem here; and fixing that > issue would make this patch-set unnecessary. Regards, Hans >> + >> + return 0; >> +} >> +EXPORT_SYMBOL(drm_connector_init_panel_orientation_property); >> + >> static const struct drm_prop_enum_list privacy_screen_enum[] = { >> { PRIVACY_SCREEN_DISABLED, "Disabled" }, >> { PRIVACY_SCREEN_ENABLED, "Enabled" }, >> diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h >> index 3ac4bf87f257..f0681091c617 100644 >> --- a/include/drm/drm_connector.h >> +++ b/include/drm/drm_connector.h >> @@ -1802,6 +1802,8 @@ int drm_connector_set_panel_orientation_with_quirk( >> struct drm_connector *connector, >> enum drm_panel_orientation panel_orientation, >> int width, int height); >> +int drm_connector_init_panel_orientation_property( >> + struct drm_connector *connector); >> int drm_connector_attach_max_bpc_property(struct drm_connector *connector, >> int min, int max); >> void drm_connector_create_privacy_screen_properties(struct drm_connector *conn); ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v10 1/4] gpu: drm: separate panel orientation property creating and value setting @ 2022-05-30 9:01 ` Hans de Goede 0 siblings, 0 replies; 69+ messages in thread From: Hans de Goede @ 2022-05-30 9:01 UTC (permalink / raw) To: Hsin-Yi Wang, dri-devel, David Airlie, Daniel Vetter, amd-gfx, intel-gfx Cc: Rob Clark, Stephen Boyd, Douglas Anderson, Chun-Kuang Hu, Sean Paul, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, linux-kernel, Rob Herring, Matthias Brugger, devicetree, linux-arm-kernel, linux-mediatek, Simon Ser, Harry Wentland, Alex Deucher, Jani Nikula, Emil Velikov Hi, On 5/30/22 10:57, Hans de Goede wrote: > Hi, > > On 5/30/22 10:19, Hsin-Yi Wang wrote: >> drm_dev_register() sets connector->registration_state to >> DRM_CONNECTOR_REGISTERED and dev->registered to true. If >> drm_connector_set_panel_orientation() is first called after >> drm_dev_register(), it will fail several checks and results in following >> warning. >> >> Add a function to create panel orientation property and set default value >> to UNKNOWN, so drivers can call this function to init the property earlier >> , and let the panel set the real value later. >> >> [ 4.480976] ------------[ cut here ]------------ >> [ 4.485603] WARNING: CPU: 5 PID: 369 at drivers/gpu/drm/drm_mode_object.c:45 __drm_mode_object_add+0xb4/0xbc >> <snip> >> [ 4.609772] Call trace: >> [ 4.612208] __drm_mode_object_add+0xb4/0xbc >> [ 4.616466] drm_mode_object_add+0x20/0x2c >> [ 4.620552] drm_property_create+0xdc/0x174 >> [ 4.624723] drm_property_create_enum+0x34/0x98 >> [ 4.629241] drm_connector_set_panel_orientation+0x64/0xa0 >> [ 4.634716] boe_panel_get_modes+0x88/0xd8 >> [ 4.638802] drm_panel_get_modes+0x2c/0x48 >> [ 4.642887] panel_bridge_get_modes+0x1c/0x28 >> [ 4.647233] drm_bridge_connector_get_modes+0xa0/0xd4 >> [ 4.652273] drm_helper_probe_single_connector_modes+0x218/0x700 >> [ 4.658266] drm_mode_getconnector+0x1b4/0x45c >> [ 4.662699] drm_ioctl_kernel+0xac/0x128 >> [ 4.666611] drm_ioctl+0x268/0x410 >> [ 4.670002] drm_compat_ioctl+0xdc/0xf0 >> [ 4.673829] __arm64_compat_sys_ioctl+0xc8/0x100 >> [ 4.678436] el0_svc_common+0xf4/0x1c0 >> [ 4.682174] do_el0_svc_compat+0x28/0x3c >> [ 4.686088] el0_svc_compat+0x10/0x1c >> [ 4.689738] el0_sync_compat_handler+0xa8/0xcc >> [ 4.694171] el0_sync_compat+0x178/0x180 >> [ 4.698082] ---[ end trace b4f2db9d9c88610b ]--- >> [ 4.702721] ------------[ cut here ]------------ >> [ 4.707329] WARNING: CPU: 5 PID: 369 at drivers/gpu/drm/drm_mode_object.c:243 drm_object_attach_property+0x48/0xb8 >> <snip> >> [ 4.833830] Call trace: >> [ 4.836266] drm_object_attach_property+0x48/0xb8 >> [ 4.840958] drm_connector_set_panel_orientation+0x84/0xa0 >> [ 4.846432] boe_panel_get_modes+0x88/0xd8 >> [ 4.850516] drm_panel_get_modes+0x2c/0x48 >> [ 4.854600] panel_bridge_get_modes+0x1c/0x28 >> [ 4.858946] drm_bridge_connector_get_modes+0xa0/0xd4 >> [ 4.863984] drm_helper_probe_single_connector_modes+0x218/0x700 >> [ 4.869978] drm_mode_getconnector+0x1b4/0x45c >> [ 4.874410] drm_ioctl_kernel+0xac/0x128 >> [ 4.878320] drm_ioctl+0x268/0x410 >> [ 4.881711] drm_compat_ioctl+0xdc/0xf0 >> [ 4.885536] __arm64_compat_sys_ioctl+0xc8/0x100 >> [ 4.890142] el0_svc_common+0xf4/0x1c0 >> [ 4.893879] do_el0_svc_compat+0x28/0x3c >> [ 4.897791] el0_svc_compat+0x10/0x1c >> [ 4.901441] el0_sync_compat_handler+0xa8/0xcc >> [ 4.905873] el0_sync_compat+0x178/0x180 >> [ 4.909783] ---[ end trace b4f2db9d9c88610c ]--- >> >> Signed-off-by: Hsin-Yi Wang <hsinyi@chromium.org> >> Reviewed-by: Sean Paul <seanpaul@chromium.org> >> --- >> v9->v10: rebase to latest linux-next. >> v9: https://patchwork.kernel.org/project/linux-mediatek/patch/20220318074825.3359978-2-hsinyi@chromium.org/ >> v8: https://patchwork.kernel.org/project/linux-mediatek/patch/20220208084234.1684930-1-hsinyi@chromium.org/ >> v7: https://patchwork.kernel.org/project/linux-mediatek/patch/20220208073714.1540390-1-hsinyi@chromium.org/ >> --- >> drivers/gpu/drm/drm_connector.c | 58 +++++++++++++++++++++++++-------- >> include/drm/drm_connector.h | 2 ++ >> 2 files changed, 47 insertions(+), 13 deletions(-) >> >> diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c >> index 1c48d162c77e..d68cc78f6684 100644 >> --- a/drivers/gpu/drm/drm_connector.c >> +++ b/drivers/gpu/drm/drm_connector.c >> @@ -1252,7 +1252,7 @@ static const struct drm_prop_enum_list dp_colorspaces[] = { >> * INPUT_PROP_DIRECT) will still map 1:1 to the actual LCD panel >> * coordinates, so if userspace rotates the picture to adjust for >> * the orientation it must also apply the same transformation to the >> - * touchscreen input coordinates. This property is initialized by calling >> + * touchscreen input coordinates. This property value is set by calling >> * drm_connector_set_panel_orientation() or >> * drm_connector_set_panel_orientation_with_quirk() >> * >> @@ -2310,8 +2310,8 @@ EXPORT_SYMBOL(drm_connector_set_vrr_capable_property); >> * @connector: connector for which to set the panel-orientation property. >> * @panel_orientation: drm_panel_orientation value to set >> * >> - * This function sets the connector's panel_orientation and attaches >> - * a "panel orientation" property to the connector. >> + * This function sets the connector's panel_orientation value. If the property >> + * doesn't exist, it will try to create one. >> * >> * Calling this function on a connector where the panel_orientation has >> * already been set is a no-op (e.g. the orientation has been overridden with >> @@ -2343,18 +2343,13 @@ int drm_connector_set_panel_orientation( >> >> prop = dev->mode_config.panel_orientation_property; >> if (!prop) { >> - prop = drm_property_create_enum(dev, DRM_MODE_PROP_IMMUTABLE, >> - "panel orientation", >> - drm_panel_orientation_enum_list, >> - ARRAY_SIZE(drm_panel_orientation_enum_list)); >> - if (!prop) >> + if (drm_connector_init_panel_orientation_property(connector) < 0) >> return -ENOMEM; >> - >> - dev->mode_config.panel_orientation_property = prop; >> + prop = dev->mode_config.panel_orientation_property; >> } >> >> - drm_object_attach_property(&connector->base, prop, >> - info->panel_orientation); >> + drm_object_property_set_value(&connector->base, prop, >> + info->panel_orientation); >> return 0; >> } >> EXPORT_SYMBOL(drm_connector_set_panel_orientation); >> @@ -2362,7 +2357,7 @@ EXPORT_SYMBOL(drm_connector_set_panel_orientation); >> /** >> * drm_connector_set_panel_orientation_with_quirk - set the >> * connector's panel_orientation after checking for quirks >> - * @connector: connector for which to init the panel-orientation property. >> + * @connector: connector for which to set the panel-orientation property. >> * @panel_orientation: drm_panel_orientation value to set >> * @width: width in pixels of the panel, used for panel quirk detection >> * @height: height in pixels of the panel, used for panel quirk detection >> @@ -2389,6 +2384,43 @@ int drm_connector_set_panel_orientation_with_quirk( >> } >> EXPORT_SYMBOL(drm_connector_set_panel_orientation_with_quirk); >> >> +/** >> + * drm_connector_init_panel_orientation_property - >> + * create the connector's panel orientation property >> + * >> + * This function attaches a "panel orientation" property to the connector >> + * and initializes its value to DRM_MODE_PANEL_ORIENTATION_UNKNOWN. >> + * >> + * The value of the property can be set by drm_connector_set_panel_orientation() >> + * or drm_connector_set_panel_orientation_with_quirk() later. >> + * >> + * Returns: >> + * Zero on success, negative errno on failure. >> + */ >> +int drm_connector_init_panel_orientation_property( >> + struct drm_connector *connector) >> +{ >> + struct drm_device *dev = connector->dev; >> + struct drm_property *prop; >> + >> + if(dev->mode_config.panel_orientation_property) >> + return 0; >> + >> + prop = drm_property_create_enum(dev, DRM_MODE_PROP_IMMUTABLE, >> + "panel orientation", >> + drm_panel_orientation_enum_list, >> + ARRAY_SIZE(drm_panel_orientation_enum_list)); >> + if (!prop) >> + return -ENOMEM; >> + >> + dev->mode_config.panel_orientation_property = prop; >> + drm_object_attach_property(&connector->base, prop, >> + DRM_MODE_PANEL_ORIENTATION_UNKNOWN); > > DRM_MODE_PANEL_ORIENTATION_UNKNOWN is -1 which is not a valid value > for an enum. IOW when the panel-orientation is DRM_MODE_PANEL_ORIENTATION_UNKNOWN > then the property should not be created on the drm-connector object at all. p.s. note that the original drm_connector_set_panel_orientation() avoids ever creating the property when the orientation is unknown because of this bit of code near the top of the function: /* Don't attach the property if the orientation is unknown */ if (panel_orientation == DRM_MODE_PANEL_ORIENTATION_UNKNOWN) return 0; > Which brings us back to what I said in reply to the coverletter, > it seems that you have a probe ordering problem here; and fixing that > issue would make this patch-set unnecessary. Regards, Hans >> + >> + return 0; >> +} >> +EXPORT_SYMBOL(drm_connector_init_panel_orientation_property); >> + >> static const struct drm_prop_enum_list privacy_screen_enum[] = { >> { PRIVACY_SCREEN_DISABLED, "Disabled" }, >> { PRIVACY_SCREEN_ENABLED, "Enabled" }, >> diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h >> index 3ac4bf87f257..f0681091c617 100644 >> --- a/include/drm/drm_connector.h >> +++ b/include/drm/drm_connector.h >> @@ -1802,6 +1802,8 @@ int drm_connector_set_panel_orientation_with_quirk( >> struct drm_connector *connector, >> enum drm_panel_orientation panel_orientation, >> int width, int height); >> +int drm_connector_init_panel_orientation_property( >> + struct drm_connector *connector); >> int drm_connector_attach_max_bpc_property(struct drm_connector *connector, >> int min, int max); >> void drm_connector_create_privacy_screen_properties(struct drm_connector *conn); _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [Intel-gfx] [PATCH v10 1/4] gpu: drm: separate panel orientation property creating and value setting @ 2022-05-30 9:01 ` Hans de Goede 0 siblings, 0 replies; 69+ messages in thread From: Hans de Goede @ 2022-05-30 9:01 UTC (permalink / raw) To: Hsin-Yi Wang, dri-devel, David Airlie, Daniel Vetter, amd-gfx, intel-gfx Cc: Rob Clark, Chun-Kuang Hu, Harry Wentland, devicetree, linux-kernel, Douglas Anderson, Maxime Ripard, Stephen Boyd, Alex Deucher, Rob Herring, linux-mediatek, Thomas Zimmermann, Simon Ser, Matthias Brugger, linux-arm-kernel Hi, On 5/30/22 10:57, Hans de Goede wrote: > Hi, > > On 5/30/22 10:19, Hsin-Yi Wang wrote: >> drm_dev_register() sets connector->registration_state to >> DRM_CONNECTOR_REGISTERED and dev->registered to true. If >> drm_connector_set_panel_orientation() is first called after >> drm_dev_register(), it will fail several checks and results in following >> warning. >> >> Add a function to create panel orientation property and set default value >> to UNKNOWN, so drivers can call this function to init the property earlier >> , and let the panel set the real value later. >> >> [ 4.480976] ------------[ cut here ]------------ >> [ 4.485603] WARNING: CPU: 5 PID: 369 at drivers/gpu/drm/drm_mode_object.c:45 __drm_mode_object_add+0xb4/0xbc >> <snip> >> [ 4.609772] Call trace: >> [ 4.612208] __drm_mode_object_add+0xb4/0xbc >> [ 4.616466] drm_mode_object_add+0x20/0x2c >> [ 4.620552] drm_property_create+0xdc/0x174 >> [ 4.624723] drm_property_create_enum+0x34/0x98 >> [ 4.629241] drm_connector_set_panel_orientation+0x64/0xa0 >> [ 4.634716] boe_panel_get_modes+0x88/0xd8 >> [ 4.638802] drm_panel_get_modes+0x2c/0x48 >> [ 4.642887] panel_bridge_get_modes+0x1c/0x28 >> [ 4.647233] drm_bridge_connector_get_modes+0xa0/0xd4 >> [ 4.652273] drm_helper_probe_single_connector_modes+0x218/0x700 >> [ 4.658266] drm_mode_getconnector+0x1b4/0x45c >> [ 4.662699] drm_ioctl_kernel+0xac/0x128 >> [ 4.666611] drm_ioctl+0x268/0x410 >> [ 4.670002] drm_compat_ioctl+0xdc/0xf0 >> [ 4.673829] __arm64_compat_sys_ioctl+0xc8/0x100 >> [ 4.678436] el0_svc_common+0xf4/0x1c0 >> [ 4.682174] do_el0_svc_compat+0x28/0x3c >> [ 4.686088] el0_svc_compat+0x10/0x1c >> [ 4.689738] el0_sync_compat_handler+0xa8/0xcc >> [ 4.694171] el0_sync_compat+0x178/0x180 >> [ 4.698082] ---[ end trace b4f2db9d9c88610b ]--- >> [ 4.702721] ------------[ cut here ]------------ >> [ 4.707329] WARNING: CPU: 5 PID: 369 at drivers/gpu/drm/drm_mode_object.c:243 drm_object_attach_property+0x48/0xb8 >> <snip> >> [ 4.833830] Call trace: >> [ 4.836266] drm_object_attach_property+0x48/0xb8 >> [ 4.840958] drm_connector_set_panel_orientation+0x84/0xa0 >> [ 4.846432] boe_panel_get_modes+0x88/0xd8 >> [ 4.850516] drm_panel_get_modes+0x2c/0x48 >> [ 4.854600] panel_bridge_get_modes+0x1c/0x28 >> [ 4.858946] drm_bridge_connector_get_modes+0xa0/0xd4 >> [ 4.863984] drm_helper_probe_single_connector_modes+0x218/0x700 >> [ 4.869978] drm_mode_getconnector+0x1b4/0x45c >> [ 4.874410] drm_ioctl_kernel+0xac/0x128 >> [ 4.878320] drm_ioctl+0x268/0x410 >> [ 4.881711] drm_compat_ioctl+0xdc/0xf0 >> [ 4.885536] __arm64_compat_sys_ioctl+0xc8/0x100 >> [ 4.890142] el0_svc_common+0xf4/0x1c0 >> [ 4.893879] do_el0_svc_compat+0x28/0x3c >> [ 4.897791] el0_svc_compat+0x10/0x1c >> [ 4.901441] el0_sync_compat_handler+0xa8/0xcc >> [ 4.905873] el0_sync_compat+0x178/0x180 >> [ 4.909783] ---[ end trace b4f2db9d9c88610c ]--- >> >> Signed-off-by: Hsin-Yi Wang <hsinyi@chromium.org> >> Reviewed-by: Sean Paul <seanpaul@chromium.org> >> --- >> v9->v10: rebase to latest linux-next. >> v9: https://patchwork.kernel.org/project/linux-mediatek/patch/20220318074825.3359978-2-hsinyi@chromium.org/ >> v8: https://patchwork.kernel.org/project/linux-mediatek/patch/20220208084234.1684930-1-hsinyi@chromium.org/ >> v7: https://patchwork.kernel.org/project/linux-mediatek/patch/20220208073714.1540390-1-hsinyi@chromium.org/ >> --- >> drivers/gpu/drm/drm_connector.c | 58 +++++++++++++++++++++++++-------- >> include/drm/drm_connector.h | 2 ++ >> 2 files changed, 47 insertions(+), 13 deletions(-) >> >> diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c >> index 1c48d162c77e..d68cc78f6684 100644 >> --- a/drivers/gpu/drm/drm_connector.c >> +++ b/drivers/gpu/drm/drm_connector.c >> @@ -1252,7 +1252,7 @@ static const struct drm_prop_enum_list dp_colorspaces[] = { >> * INPUT_PROP_DIRECT) will still map 1:1 to the actual LCD panel >> * coordinates, so if userspace rotates the picture to adjust for >> * the orientation it must also apply the same transformation to the >> - * touchscreen input coordinates. This property is initialized by calling >> + * touchscreen input coordinates. This property value is set by calling >> * drm_connector_set_panel_orientation() or >> * drm_connector_set_panel_orientation_with_quirk() >> * >> @@ -2310,8 +2310,8 @@ EXPORT_SYMBOL(drm_connector_set_vrr_capable_property); >> * @connector: connector for which to set the panel-orientation property. >> * @panel_orientation: drm_panel_orientation value to set >> * >> - * This function sets the connector's panel_orientation and attaches >> - * a "panel orientation" property to the connector. >> + * This function sets the connector's panel_orientation value. If the property >> + * doesn't exist, it will try to create one. >> * >> * Calling this function on a connector where the panel_orientation has >> * already been set is a no-op (e.g. the orientation has been overridden with >> @@ -2343,18 +2343,13 @@ int drm_connector_set_panel_orientation( >> >> prop = dev->mode_config.panel_orientation_property; >> if (!prop) { >> - prop = drm_property_create_enum(dev, DRM_MODE_PROP_IMMUTABLE, >> - "panel orientation", >> - drm_panel_orientation_enum_list, >> - ARRAY_SIZE(drm_panel_orientation_enum_list)); >> - if (!prop) >> + if (drm_connector_init_panel_orientation_property(connector) < 0) >> return -ENOMEM; >> - >> - dev->mode_config.panel_orientation_property = prop; >> + prop = dev->mode_config.panel_orientation_property; >> } >> >> - drm_object_attach_property(&connector->base, prop, >> - info->panel_orientation); >> + drm_object_property_set_value(&connector->base, prop, >> + info->panel_orientation); >> return 0; >> } >> EXPORT_SYMBOL(drm_connector_set_panel_orientation); >> @@ -2362,7 +2357,7 @@ EXPORT_SYMBOL(drm_connector_set_panel_orientation); >> /** >> * drm_connector_set_panel_orientation_with_quirk - set the >> * connector's panel_orientation after checking for quirks >> - * @connector: connector for which to init the panel-orientation property. >> + * @connector: connector for which to set the panel-orientation property. >> * @panel_orientation: drm_panel_orientation value to set >> * @width: width in pixels of the panel, used for panel quirk detection >> * @height: height in pixels of the panel, used for panel quirk detection >> @@ -2389,6 +2384,43 @@ int drm_connector_set_panel_orientation_with_quirk( >> } >> EXPORT_SYMBOL(drm_connector_set_panel_orientation_with_quirk); >> >> +/** >> + * drm_connector_init_panel_orientation_property - >> + * create the connector's panel orientation property >> + * >> + * This function attaches a "panel orientation" property to the connector >> + * and initializes its value to DRM_MODE_PANEL_ORIENTATION_UNKNOWN. >> + * >> + * The value of the property can be set by drm_connector_set_panel_orientation() >> + * or drm_connector_set_panel_orientation_with_quirk() later. >> + * >> + * Returns: >> + * Zero on success, negative errno on failure. >> + */ >> +int drm_connector_init_panel_orientation_property( >> + struct drm_connector *connector) >> +{ >> + struct drm_device *dev = connector->dev; >> + struct drm_property *prop; >> + >> + if(dev->mode_config.panel_orientation_property) >> + return 0; >> + >> + prop = drm_property_create_enum(dev, DRM_MODE_PROP_IMMUTABLE, >> + "panel orientation", >> + drm_panel_orientation_enum_list, >> + ARRAY_SIZE(drm_panel_orientation_enum_list)); >> + if (!prop) >> + return -ENOMEM; >> + >> + dev->mode_config.panel_orientation_property = prop; >> + drm_object_attach_property(&connector->base, prop, >> + DRM_MODE_PANEL_ORIENTATION_UNKNOWN); > > DRM_MODE_PANEL_ORIENTATION_UNKNOWN is -1 which is not a valid value > for an enum. IOW when the panel-orientation is DRM_MODE_PANEL_ORIENTATION_UNKNOWN > then the property should not be created on the drm-connector object at all. p.s. note that the original drm_connector_set_panel_orientation() avoids ever creating the property when the orientation is unknown because of this bit of code near the top of the function: /* Don't attach the property if the orientation is unknown */ if (panel_orientation == DRM_MODE_PANEL_ORIENTATION_UNKNOWN) return 0; > Which brings us back to what I said in reply to the coverletter, > it seems that you have a probe ordering problem here; and fixing that > issue would make this patch-set unnecessary. Regards, Hans >> + >> + return 0; >> +} >> +EXPORT_SYMBOL(drm_connector_init_panel_orientation_property); >> + >> static const struct drm_prop_enum_list privacy_screen_enum[] = { >> { PRIVACY_SCREEN_DISABLED, "Disabled" }, >> { PRIVACY_SCREEN_ENABLED, "Enabled" }, >> diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h >> index 3ac4bf87f257..f0681091c617 100644 >> --- a/include/drm/drm_connector.h >> +++ b/include/drm/drm_connector.h >> @@ -1802,6 +1802,8 @@ int drm_connector_set_panel_orientation_with_quirk( >> struct drm_connector *connector, >> enum drm_panel_orientation panel_orientation, >> int width, int height); >> +int drm_connector_init_panel_orientation_property( >> + struct drm_connector *connector); >> int drm_connector_attach_max_bpc_property(struct drm_connector *connector, >> int min, int max); >> void drm_connector_create_privacy_screen_properties(struct drm_connector *conn); ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v10 1/4] gpu: drm: separate panel orientation property creating and value setting @ 2022-05-30 9:01 ` Hans de Goede 0 siblings, 0 replies; 69+ messages in thread From: Hans de Goede @ 2022-05-30 9:01 UTC (permalink / raw) To: Hsin-Yi Wang, dri-devel, David Airlie, Daniel Vetter, amd-gfx, intel-gfx Cc: Rob Clark, Chun-Kuang Hu, Emil Velikov, devicetree, linux-kernel, Douglas Anderson, Stephen Boyd, Alex Deucher, Rob Herring, linux-mediatek, Thomas Zimmermann, Matthias Brugger, Sean Paul, linux-arm-kernel Hi, On 5/30/22 10:57, Hans de Goede wrote: > Hi, > > On 5/30/22 10:19, Hsin-Yi Wang wrote: >> drm_dev_register() sets connector->registration_state to >> DRM_CONNECTOR_REGISTERED and dev->registered to true. If >> drm_connector_set_panel_orientation() is first called after >> drm_dev_register(), it will fail several checks and results in following >> warning. >> >> Add a function to create panel orientation property and set default value >> to UNKNOWN, so drivers can call this function to init the property earlier >> , and let the panel set the real value later. >> >> [ 4.480976] ------------[ cut here ]------------ >> [ 4.485603] WARNING: CPU: 5 PID: 369 at drivers/gpu/drm/drm_mode_object.c:45 __drm_mode_object_add+0xb4/0xbc >> <snip> >> [ 4.609772] Call trace: >> [ 4.612208] __drm_mode_object_add+0xb4/0xbc >> [ 4.616466] drm_mode_object_add+0x20/0x2c >> [ 4.620552] drm_property_create+0xdc/0x174 >> [ 4.624723] drm_property_create_enum+0x34/0x98 >> [ 4.629241] drm_connector_set_panel_orientation+0x64/0xa0 >> [ 4.634716] boe_panel_get_modes+0x88/0xd8 >> [ 4.638802] drm_panel_get_modes+0x2c/0x48 >> [ 4.642887] panel_bridge_get_modes+0x1c/0x28 >> [ 4.647233] drm_bridge_connector_get_modes+0xa0/0xd4 >> [ 4.652273] drm_helper_probe_single_connector_modes+0x218/0x700 >> [ 4.658266] drm_mode_getconnector+0x1b4/0x45c >> [ 4.662699] drm_ioctl_kernel+0xac/0x128 >> [ 4.666611] drm_ioctl+0x268/0x410 >> [ 4.670002] drm_compat_ioctl+0xdc/0xf0 >> [ 4.673829] __arm64_compat_sys_ioctl+0xc8/0x100 >> [ 4.678436] el0_svc_common+0xf4/0x1c0 >> [ 4.682174] do_el0_svc_compat+0x28/0x3c >> [ 4.686088] el0_svc_compat+0x10/0x1c >> [ 4.689738] el0_sync_compat_handler+0xa8/0xcc >> [ 4.694171] el0_sync_compat+0x178/0x180 >> [ 4.698082] ---[ end trace b4f2db9d9c88610b ]--- >> [ 4.702721] ------------[ cut here ]------------ >> [ 4.707329] WARNING: CPU: 5 PID: 369 at drivers/gpu/drm/drm_mode_object.c:243 drm_object_attach_property+0x48/0xb8 >> <snip> >> [ 4.833830] Call trace: >> [ 4.836266] drm_object_attach_property+0x48/0xb8 >> [ 4.840958] drm_connector_set_panel_orientation+0x84/0xa0 >> [ 4.846432] boe_panel_get_modes+0x88/0xd8 >> [ 4.850516] drm_panel_get_modes+0x2c/0x48 >> [ 4.854600] panel_bridge_get_modes+0x1c/0x28 >> [ 4.858946] drm_bridge_connector_get_modes+0xa0/0xd4 >> [ 4.863984] drm_helper_probe_single_connector_modes+0x218/0x700 >> [ 4.869978] drm_mode_getconnector+0x1b4/0x45c >> [ 4.874410] drm_ioctl_kernel+0xac/0x128 >> [ 4.878320] drm_ioctl+0x268/0x410 >> [ 4.881711] drm_compat_ioctl+0xdc/0xf0 >> [ 4.885536] __arm64_compat_sys_ioctl+0xc8/0x100 >> [ 4.890142] el0_svc_common+0xf4/0x1c0 >> [ 4.893879] do_el0_svc_compat+0x28/0x3c >> [ 4.897791] el0_svc_compat+0x10/0x1c >> [ 4.901441] el0_sync_compat_handler+0xa8/0xcc >> [ 4.905873] el0_sync_compat+0x178/0x180 >> [ 4.909783] ---[ end trace b4f2db9d9c88610c ]--- >> >> Signed-off-by: Hsin-Yi Wang <hsinyi@chromium.org> >> Reviewed-by: Sean Paul <seanpaul@chromium.org> >> --- >> v9->v10: rebase to latest linux-next. >> v9: https://patchwork.kernel.org/project/linux-mediatek/patch/20220318074825.3359978-2-hsinyi@chromium.org/ >> v8: https://patchwork.kernel.org/project/linux-mediatek/patch/20220208084234.1684930-1-hsinyi@chromium.org/ >> v7: https://patchwork.kernel.org/project/linux-mediatek/patch/20220208073714.1540390-1-hsinyi@chromium.org/ >> --- >> drivers/gpu/drm/drm_connector.c | 58 +++++++++++++++++++++++++-------- >> include/drm/drm_connector.h | 2 ++ >> 2 files changed, 47 insertions(+), 13 deletions(-) >> >> diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c >> index 1c48d162c77e..d68cc78f6684 100644 >> --- a/drivers/gpu/drm/drm_connector.c >> +++ b/drivers/gpu/drm/drm_connector.c >> @@ -1252,7 +1252,7 @@ static const struct drm_prop_enum_list dp_colorspaces[] = { >> * INPUT_PROP_DIRECT) will still map 1:1 to the actual LCD panel >> * coordinates, so if userspace rotates the picture to adjust for >> * the orientation it must also apply the same transformation to the >> - * touchscreen input coordinates. This property is initialized by calling >> + * touchscreen input coordinates. This property value is set by calling >> * drm_connector_set_panel_orientation() or >> * drm_connector_set_panel_orientation_with_quirk() >> * >> @@ -2310,8 +2310,8 @@ EXPORT_SYMBOL(drm_connector_set_vrr_capable_property); >> * @connector: connector for which to set the panel-orientation property. >> * @panel_orientation: drm_panel_orientation value to set >> * >> - * This function sets the connector's panel_orientation and attaches >> - * a "panel orientation" property to the connector. >> + * This function sets the connector's panel_orientation value. If the property >> + * doesn't exist, it will try to create one. >> * >> * Calling this function on a connector where the panel_orientation has >> * already been set is a no-op (e.g. the orientation has been overridden with >> @@ -2343,18 +2343,13 @@ int drm_connector_set_panel_orientation( >> >> prop = dev->mode_config.panel_orientation_property; >> if (!prop) { >> - prop = drm_property_create_enum(dev, DRM_MODE_PROP_IMMUTABLE, >> - "panel orientation", >> - drm_panel_orientation_enum_list, >> - ARRAY_SIZE(drm_panel_orientation_enum_list)); >> - if (!prop) >> + if (drm_connector_init_panel_orientation_property(connector) < 0) >> return -ENOMEM; >> - >> - dev->mode_config.panel_orientation_property = prop; >> + prop = dev->mode_config.panel_orientation_property; >> } >> >> - drm_object_attach_property(&connector->base, prop, >> - info->panel_orientation); >> + drm_object_property_set_value(&connector->base, prop, >> + info->panel_orientation); >> return 0; >> } >> EXPORT_SYMBOL(drm_connector_set_panel_orientation); >> @@ -2362,7 +2357,7 @@ EXPORT_SYMBOL(drm_connector_set_panel_orientation); >> /** >> * drm_connector_set_panel_orientation_with_quirk - set the >> * connector's panel_orientation after checking for quirks >> - * @connector: connector for which to init the panel-orientation property. >> + * @connector: connector for which to set the panel-orientation property. >> * @panel_orientation: drm_panel_orientation value to set >> * @width: width in pixels of the panel, used for panel quirk detection >> * @height: height in pixels of the panel, used for panel quirk detection >> @@ -2389,6 +2384,43 @@ int drm_connector_set_panel_orientation_with_quirk( >> } >> EXPORT_SYMBOL(drm_connector_set_panel_orientation_with_quirk); >> >> +/** >> + * drm_connector_init_panel_orientation_property - >> + * create the connector's panel orientation property >> + * >> + * This function attaches a "panel orientation" property to the connector >> + * and initializes its value to DRM_MODE_PANEL_ORIENTATION_UNKNOWN. >> + * >> + * The value of the property can be set by drm_connector_set_panel_orientation() >> + * or drm_connector_set_panel_orientation_with_quirk() later. >> + * >> + * Returns: >> + * Zero on success, negative errno on failure. >> + */ >> +int drm_connector_init_panel_orientation_property( >> + struct drm_connector *connector) >> +{ >> + struct drm_device *dev = connector->dev; >> + struct drm_property *prop; >> + >> + if(dev->mode_config.panel_orientation_property) >> + return 0; >> + >> + prop = drm_property_create_enum(dev, DRM_MODE_PROP_IMMUTABLE, >> + "panel orientation", >> + drm_panel_orientation_enum_list, >> + ARRAY_SIZE(drm_panel_orientation_enum_list)); >> + if (!prop) >> + return -ENOMEM; >> + >> + dev->mode_config.panel_orientation_property = prop; >> + drm_object_attach_property(&connector->base, prop, >> + DRM_MODE_PANEL_ORIENTATION_UNKNOWN); > > DRM_MODE_PANEL_ORIENTATION_UNKNOWN is -1 which is not a valid value > for an enum. IOW when the panel-orientation is DRM_MODE_PANEL_ORIENTATION_UNKNOWN > then the property should not be created on the drm-connector object at all. p.s. note that the original drm_connector_set_panel_orientation() avoids ever creating the property when the orientation is unknown because of this bit of code near the top of the function: /* Don't attach the property if the orientation is unknown */ if (panel_orientation == DRM_MODE_PANEL_ORIENTATION_UNKNOWN) return 0; > Which brings us back to what I said in reply to the coverletter, > it seems that you have a probe ordering problem here; and fixing that > issue would make this patch-set unnecessary. Regards, Hans >> + >> + return 0; >> +} >> +EXPORT_SYMBOL(drm_connector_init_panel_orientation_property); >> + >> static const struct drm_prop_enum_list privacy_screen_enum[] = { >> { PRIVACY_SCREEN_DISABLED, "Disabled" }, >> { PRIVACY_SCREEN_ENABLED, "Enabled" }, >> diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h >> index 3ac4bf87f257..f0681091c617 100644 >> --- a/include/drm/drm_connector.h >> +++ b/include/drm/drm_connector.h >> @@ -1802,6 +1802,8 @@ int drm_connector_set_panel_orientation_with_quirk( >> struct drm_connector *connector, >> enum drm_panel_orientation panel_orientation, >> int width, int height); >> +int drm_connector_init_panel_orientation_property( >> + struct drm_connector *connector); >> int drm_connector_attach_max_bpc_property(struct drm_connector *connector, >> int min, int max); >> void drm_connector_create_privacy_screen_properties(struct drm_connector *conn); ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v10 1/4] gpu: drm: separate panel orientation property creating and value setting @ 2022-05-30 9:01 ` Hans de Goede 0 siblings, 0 replies; 69+ messages in thread From: Hans de Goede @ 2022-05-30 9:01 UTC (permalink / raw) To: Hsin-Yi Wang, dri-devel, David Airlie, Daniel Vetter, amd-gfx, intel-gfx Cc: Rob Clark, Stephen Boyd, Douglas Anderson, Chun-Kuang Hu, Sean Paul, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, linux-kernel, Rob Herring, Matthias Brugger, devicetree, linux-arm-kernel, linux-mediatek, Simon Ser, Harry Wentland, Alex Deucher, Jani Nikula, Emil Velikov Hi, On 5/30/22 10:57, Hans de Goede wrote: > Hi, > > On 5/30/22 10:19, Hsin-Yi Wang wrote: >> drm_dev_register() sets connector->registration_state to >> DRM_CONNECTOR_REGISTERED and dev->registered to true. If >> drm_connector_set_panel_orientation() is first called after >> drm_dev_register(), it will fail several checks and results in following >> warning. >> >> Add a function to create panel orientation property and set default value >> to UNKNOWN, so drivers can call this function to init the property earlier >> , and let the panel set the real value later. >> >> [ 4.480976] ------------[ cut here ]------------ >> [ 4.485603] WARNING: CPU: 5 PID: 369 at drivers/gpu/drm/drm_mode_object.c:45 __drm_mode_object_add+0xb4/0xbc >> <snip> >> [ 4.609772] Call trace: >> [ 4.612208] __drm_mode_object_add+0xb4/0xbc >> [ 4.616466] drm_mode_object_add+0x20/0x2c >> [ 4.620552] drm_property_create+0xdc/0x174 >> [ 4.624723] drm_property_create_enum+0x34/0x98 >> [ 4.629241] drm_connector_set_panel_orientation+0x64/0xa0 >> [ 4.634716] boe_panel_get_modes+0x88/0xd8 >> [ 4.638802] drm_panel_get_modes+0x2c/0x48 >> [ 4.642887] panel_bridge_get_modes+0x1c/0x28 >> [ 4.647233] drm_bridge_connector_get_modes+0xa0/0xd4 >> [ 4.652273] drm_helper_probe_single_connector_modes+0x218/0x700 >> [ 4.658266] drm_mode_getconnector+0x1b4/0x45c >> [ 4.662699] drm_ioctl_kernel+0xac/0x128 >> [ 4.666611] drm_ioctl+0x268/0x410 >> [ 4.670002] drm_compat_ioctl+0xdc/0xf0 >> [ 4.673829] __arm64_compat_sys_ioctl+0xc8/0x100 >> [ 4.678436] el0_svc_common+0xf4/0x1c0 >> [ 4.682174] do_el0_svc_compat+0x28/0x3c >> [ 4.686088] el0_svc_compat+0x10/0x1c >> [ 4.689738] el0_sync_compat_handler+0xa8/0xcc >> [ 4.694171] el0_sync_compat+0x178/0x180 >> [ 4.698082] ---[ end trace b4f2db9d9c88610b ]--- >> [ 4.702721] ------------[ cut here ]------------ >> [ 4.707329] WARNING: CPU: 5 PID: 369 at drivers/gpu/drm/drm_mode_object.c:243 drm_object_attach_property+0x48/0xb8 >> <snip> >> [ 4.833830] Call trace: >> [ 4.836266] drm_object_attach_property+0x48/0xb8 >> [ 4.840958] drm_connector_set_panel_orientation+0x84/0xa0 >> [ 4.846432] boe_panel_get_modes+0x88/0xd8 >> [ 4.850516] drm_panel_get_modes+0x2c/0x48 >> [ 4.854600] panel_bridge_get_modes+0x1c/0x28 >> [ 4.858946] drm_bridge_connector_get_modes+0xa0/0xd4 >> [ 4.863984] drm_helper_probe_single_connector_modes+0x218/0x700 >> [ 4.869978] drm_mode_getconnector+0x1b4/0x45c >> [ 4.874410] drm_ioctl_kernel+0xac/0x128 >> [ 4.878320] drm_ioctl+0x268/0x410 >> [ 4.881711] drm_compat_ioctl+0xdc/0xf0 >> [ 4.885536] __arm64_compat_sys_ioctl+0xc8/0x100 >> [ 4.890142] el0_svc_common+0xf4/0x1c0 >> [ 4.893879] do_el0_svc_compat+0x28/0x3c >> [ 4.897791] el0_svc_compat+0x10/0x1c >> [ 4.901441] el0_sync_compat_handler+0xa8/0xcc >> [ 4.905873] el0_sync_compat+0x178/0x180 >> [ 4.909783] ---[ end trace b4f2db9d9c88610c ]--- >> >> Signed-off-by: Hsin-Yi Wang <hsinyi@chromium.org> >> Reviewed-by: Sean Paul <seanpaul@chromium.org> >> --- >> v9->v10: rebase to latest linux-next. >> v9: https://patchwork.kernel.org/project/linux-mediatek/patch/20220318074825.3359978-2-hsinyi@chromium.org/ >> v8: https://patchwork.kernel.org/project/linux-mediatek/patch/20220208084234.1684930-1-hsinyi@chromium.org/ >> v7: https://patchwork.kernel.org/project/linux-mediatek/patch/20220208073714.1540390-1-hsinyi@chromium.org/ >> --- >> drivers/gpu/drm/drm_connector.c | 58 +++++++++++++++++++++++++-------- >> include/drm/drm_connector.h | 2 ++ >> 2 files changed, 47 insertions(+), 13 deletions(-) >> >> diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c >> index 1c48d162c77e..d68cc78f6684 100644 >> --- a/drivers/gpu/drm/drm_connector.c >> +++ b/drivers/gpu/drm/drm_connector.c >> @@ -1252,7 +1252,7 @@ static const struct drm_prop_enum_list dp_colorspaces[] = { >> * INPUT_PROP_DIRECT) will still map 1:1 to the actual LCD panel >> * coordinates, so if userspace rotates the picture to adjust for >> * the orientation it must also apply the same transformation to the >> - * touchscreen input coordinates. This property is initialized by calling >> + * touchscreen input coordinates. This property value is set by calling >> * drm_connector_set_panel_orientation() or >> * drm_connector_set_panel_orientation_with_quirk() >> * >> @@ -2310,8 +2310,8 @@ EXPORT_SYMBOL(drm_connector_set_vrr_capable_property); >> * @connector: connector for which to set the panel-orientation property. >> * @panel_orientation: drm_panel_orientation value to set >> * >> - * This function sets the connector's panel_orientation and attaches >> - * a "panel orientation" property to the connector. >> + * This function sets the connector's panel_orientation value. If the property >> + * doesn't exist, it will try to create one. >> * >> * Calling this function on a connector where the panel_orientation has >> * already been set is a no-op (e.g. the orientation has been overridden with >> @@ -2343,18 +2343,13 @@ int drm_connector_set_panel_orientation( >> >> prop = dev->mode_config.panel_orientation_property; >> if (!prop) { >> - prop = drm_property_create_enum(dev, DRM_MODE_PROP_IMMUTABLE, >> - "panel orientation", >> - drm_panel_orientation_enum_list, >> - ARRAY_SIZE(drm_panel_orientation_enum_list)); >> - if (!prop) >> + if (drm_connector_init_panel_orientation_property(connector) < 0) >> return -ENOMEM; >> - >> - dev->mode_config.panel_orientation_property = prop; >> + prop = dev->mode_config.panel_orientation_property; >> } >> >> - drm_object_attach_property(&connector->base, prop, >> - info->panel_orientation); >> + drm_object_property_set_value(&connector->base, prop, >> + info->panel_orientation); >> return 0; >> } >> EXPORT_SYMBOL(drm_connector_set_panel_orientation); >> @@ -2362,7 +2357,7 @@ EXPORT_SYMBOL(drm_connector_set_panel_orientation); >> /** >> * drm_connector_set_panel_orientation_with_quirk - set the >> * connector's panel_orientation after checking for quirks >> - * @connector: connector for which to init the panel-orientation property. >> + * @connector: connector for which to set the panel-orientation property. >> * @panel_orientation: drm_panel_orientation value to set >> * @width: width in pixels of the panel, used for panel quirk detection >> * @height: height in pixels of the panel, used for panel quirk detection >> @@ -2389,6 +2384,43 @@ int drm_connector_set_panel_orientation_with_quirk( >> } >> EXPORT_SYMBOL(drm_connector_set_panel_orientation_with_quirk); >> >> +/** >> + * drm_connector_init_panel_orientation_property - >> + * create the connector's panel orientation property >> + * >> + * This function attaches a "panel orientation" property to the connector >> + * and initializes its value to DRM_MODE_PANEL_ORIENTATION_UNKNOWN. >> + * >> + * The value of the property can be set by drm_connector_set_panel_orientation() >> + * or drm_connector_set_panel_orientation_with_quirk() later. >> + * >> + * Returns: >> + * Zero on success, negative errno on failure. >> + */ >> +int drm_connector_init_panel_orientation_property( >> + struct drm_connector *connector) >> +{ >> + struct drm_device *dev = connector->dev; >> + struct drm_property *prop; >> + >> + if(dev->mode_config.panel_orientation_property) >> + return 0; >> + >> + prop = drm_property_create_enum(dev, DRM_MODE_PROP_IMMUTABLE, >> + "panel orientation", >> + drm_panel_orientation_enum_list, >> + ARRAY_SIZE(drm_panel_orientation_enum_list)); >> + if (!prop) >> + return -ENOMEM; >> + >> + dev->mode_config.panel_orientation_property = prop; >> + drm_object_attach_property(&connector->base, prop, >> + DRM_MODE_PANEL_ORIENTATION_UNKNOWN); > > DRM_MODE_PANEL_ORIENTATION_UNKNOWN is -1 which is not a valid value > for an enum. IOW when the panel-orientation is DRM_MODE_PANEL_ORIENTATION_UNKNOWN > then the property should not be created on the drm-connector object at all. p.s. note that the original drm_connector_set_panel_orientation() avoids ever creating the property when the orientation is unknown because of this bit of code near the top of the function: /* Don't attach the property if the orientation is unknown */ if (panel_orientation == DRM_MODE_PANEL_ORIENTATION_UNKNOWN) return 0; > Which brings us back to what I said in reply to the coverletter, > it seems that you have a probe ordering problem here; and fixing that > issue would make this patch-set unnecessary. Regards, Hans >> + >> + return 0; >> +} >> +EXPORT_SYMBOL(drm_connector_init_panel_orientation_property); >> + >> static const struct drm_prop_enum_list privacy_screen_enum[] = { >> { PRIVACY_SCREEN_DISABLED, "Disabled" }, >> { PRIVACY_SCREEN_ENABLED, "Enabled" }, >> diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h >> index 3ac4bf87f257..f0681091c617 100644 >> --- a/include/drm/drm_connector.h >> +++ b/include/drm/drm_connector.h >> @@ -1802,6 +1802,8 @@ int drm_connector_set_panel_orientation_with_quirk( >> struct drm_connector *connector, >> enum drm_panel_orientation panel_orientation, >> int width, int height); >> +int drm_connector_init_panel_orientation_property( >> + struct drm_connector *connector); >> int drm_connector_attach_max_bpc_property(struct drm_connector *connector, >> int min, int max); >> void drm_connector_create_privacy_screen_properties(struct drm_connector *conn); _______________________________________________ Linux-mediatek mailing list Linux-mediatek@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-mediatek ^ permalink raw reply [flat|nested] 69+ messages in thread
* [PATCH v10 2/4] drm/mediatek: init panel orientation property 2022-05-30 8:19 ` Hsin-Yi Wang ` (3 preceding siblings ...) (?) @ 2022-05-30 8:19 ` Hsin-Yi Wang -1 siblings, 0 replies; 69+ messages in thread From: Hsin-Yi Wang @ 2022-05-30 8:19 UTC (permalink / raw) To: dri-devel, David Airlie, Daniel Vetter, amd-gfx, intel-gfx Cc: Rob Clark, Stephen Boyd, Douglas Anderson, Chun-Kuang Hu, Sean Paul, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, linux-kernel, Rob Herring, Matthias Brugger, devicetree, linux-arm-kernel, linux-mediatek, Simon Ser, Harry Wentland, Alex Deucher, Jani Nikula, Emil Velikov, Hans de Goede Init panel orientation property after connector is initialized. Let the panel driver decides the orientation value later. Signed-off-by: Hsin-Yi Wang <hsinyi@chromium.org> Acked-by: Chun-Kuang Hu <chunkuang.hu@kernel.org> --- drivers/gpu/drm/mediatek/mtk_dsi.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/gpu/drm/mediatek/mtk_dsi.c b/drivers/gpu/drm/mediatek/mtk_dsi.c index d9f10a33e6fa..3db44d9b161a 100644 --- a/drivers/gpu/drm/mediatek/mtk_dsi.c +++ b/drivers/gpu/drm/mediatek/mtk_dsi.c @@ -822,6 +822,13 @@ static int mtk_dsi_encoder_init(struct drm_device *drm, struct mtk_dsi *dsi) ret = PTR_ERR(dsi->connector); goto err_cleanup_encoder; } + + ret = drm_connector_init_panel_orientation_property(dsi->connector); + if (ret) { + DRM_ERROR("Unable to init panel orientation\n"); + goto err_cleanup_encoder; + } + drm_connector_attach_encoder(dsi->connector, &dsi->encoder); return 0; -- 2.36.1.124.g0e6072fb45-goog ^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v10 2/4] drm/mediatek: init panel orientation property @ 2022-05-30 8:19 ` Hsin-Yi Wang 0 siblings, 0 replies; 69+ messages in thread From: Hsin-Yi Wang @ 2022-05-30 8:19 UTC (permalink / raw) To: dri-devel, David Airlie, Daniel Vetter, amd-gfx, intel-gfx Cc: Rob Clark, Chun-Kuang Hu, Emil Velikov, Harry Wentland, devicetree, linux-kernel, Maarten Lankhorst, Douglas Anderson, Maxime Ripard, Stephen Boyd, Alex Deucher, Rob Herring, linux-mediatek, Jani Nikula, Thomas Zimmermann, Simon Ser, Matthias Brugger, Sean Paul, Hans de Goede, linux-arm-kernel Init panel orientation property after connector is initialized. Let the panel driver decides the orientation value later. Signed-off-by: Hsin-Yi Wang <hsinyi@chromium.org> Acked-by: Chun-Kuang Hu <chunkuang.hu@kernel.org> --- drivers/gpu/drm/mediatek/mtk_dsi.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/gpu/drm/mediatek/mtk_dsi.c b/drivers/gpu/drm/mediatek/mtk_dsi.c index d9f10a33e6fa..3db44d9b161a 100644 --- a/drivers/gpu/drm/mediatek/mtk_dsi.c +++ b/drivers/gpu/drm/mediatek/mtk_dsi.c @@ -822,6 +822,13 @@ static int mtk_dsi_encoder_init(struct drm_device *drm, struct mtk_dsi *dsi) ret = PTR_ERR(dsi->connector); goto err_cleanup_encoder; } + + ret = drm_connector_init_panel_orientation_property(dsi->connector); + if (ret) { + DRM_ERROR("Unable to init panel orientation\n"); + goto err_cleanup_encoder; + } + drm_connector_attach_encoder(dsi->connector, &dsi->encoder); return 0; -- 2.36.1.124.g0e6072fb45-goog ^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v10 2/4] drm/mediatek: init panel orientation property @ 2022-05-30 8:19 ` Hsin-Yi Wang 0 siblings, 0 replies; 69+ messages in thread From: Hsin-Yi Wang @ 2022-05-30 8:19 UTC (permalink / raw) To: dri-devel, David Airlie, Daniel Vetter, amd-gfx, intel-gfx Cc: Rob Clark, Stephen Boyd, Douglas Anderson, Chun-Kuang Hu, Sean Paul, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, linux-kernel, Rob Herring, Matthias Brugger, devicetree, linux-arm-kernel, linux-mediatek, Simon Ser, Harry Wentland, Alex Deucher, Jani Nikula, Emil Velikov, Hans de Goede Init panel orientation property after connector is initialized. Let the panel driver decides the orientation value later. Signed-off-by: Hsin-Yi Wang <hsinyi@chromium.org> Acked-by: Chun-Kuang Hu <chunkuang.hu@kernel.org> --- drivers/gpu/drm/mediatek/mtk_dsi.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/gpu/drm/mediatek/mtk_dsi.c b/drivers/gpu/drm/mediatek/mtk_dsi.c index d9f10a33e6fa..3db44d9b161a 100644 --- a/drivers/gpu/drm/mediatek/mtk_dsi.c +++ b/drivers/gpu/drm/mediatek/mtk_dsi.c @@ -822,6 +822,13 @@ static int mtk_dsi_encoder_init(struct drm_device *drm, struct mtk_dsi *dsi) ret = PTR_ERR(dsi->connector); goto err_cleanup_encoder; } + + ret = drm_connector_init_panel_orientation_property(dsi->connector); + if (ret) { + DRM_ERROR("Unable to init panel orientation\n"); + goto err_cleanup_encoder; + } + drm_connector_attach_encoder(dsi->connector, &dsi->encoder); return 0; -- 2.36.1.124.g0e6072fb45-goog _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v10 2/4] drm/mediatek: init panel orientation property @ 2022-05-30 8:19 ` Hsin-Yi Wang 0 siblings, 0 replies; 69+ messages in thread From: Hsin-Yi Wang @ 2022-05-30 8:19 UTC (permalink / raw) To: dri-devel, David Airlie, Daniel Vetter, amd-gfx, intel-gfx Cc: Rob Clark, Stephen Boyd, Douglas Anderson, Chun-Kuang Hu, Sean Paul, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, linux-kernel, Rob Herring, Matthias Brugger, devicetree, linux-arm-kernel, linux-mediatek, Simon Ser, Harry Wentland, Alex Deucher, Jani Nikula, Emil Velikov, Hans de Goede Init panel orientation property after connector is initialized. Let the panel driver decides the orientation value later. Signed-off-by: Hsin-Yi Wang <hsinyi@chromium.org> Acked-by: Chun-Kuang Hu <chunkuang.hu@kernel.org> --- drivers/gpu/drm/mediatek/mtk_dsi.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/gpu/drm/mediatek/mtk_dsi.c b/drivers/gpu/drm/mediatek/mtk_dsi.c index d9f10a33e6fa..3db44d9b161a 100644 --- a/drivers/gpu/drm/mediatek/mtk_dsi.c +++ b/drivers/gpu/drm/mediatek/mtk_dsi.c @@ -822,6 +822,13 @@ static int mtk_dsi_encoder_init(struct drm_device *drm, struct mtk_dsi *dsi) ret = PTR_ERR(dsi->connector); goto err_cleanup_encoder; } + + ret = drm_connector_init_panel_orientation_property(dsi->connector); + if (ret) { + DRM_ERROR("Unable to init panel orientation\n"); + goto err_cleanup_encoder; + } + drm_connector_attach_encoder(dsi->connector, &dsi->encoder); return 0; -- 2.36.1.124.g0e6072fb45-goog _______________________________________________ Linux-mediatek mailing list Linux-mediatek@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-mediatek ^ permalink raw reply related [flat|nested] 69+ messages in thread
* [Intel-gfx] [PATCH v10 2/4] drm/mediatek: init panel orientation property @ 2022-05-30 8:19 ` Hsin-Yi Wang 0 siblings, 0 replies; 69+ messages in thread From: Hsin-Yi Wang @ 2022-05-30 8:19 UTC (permalink / raw) To: dri-devel, David Airlie, Daniel Vetter, amd-gfx, intel-gfx Cc: Rob Clark, Chun-Kuang Hu, Harry Wentland, devicetree, linux-kernel, Douglas Anderson, Maxime Ripard, Stephen Boyd, Alex Deucher, Rob Herring, linux-mediatek, Thomas Zimmermann, Simon Ser, Matthias Brugger, linux-arm-kernel Init panel orientation property after connector is initialized. Let the panel driver decides the orientation value later. Signed-off-by: Hsin-Yi Wang <hsinyi@chromium.org> Acked-by: Chun-Kuang Hu <chunkuang.hu@kernel.org> --- drivers/gpu/drm/mediatek/mtk_dsi.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/gpu/drm/mediatek/mtk_dsi.c b/drivers/gpu/drm/mediatek/mtk_dsi.c index d9f10a33e6fa..3db44d9b161a 100644 --- a/drivers/gpu/drm/mediatek/mtk_dsi.c +++ b/drivers/gpu/drm/mediatek/mtk_dsi.c @@ -822,6 +822,13 @@ static int mtk_dsi_encoder_init(struct drm_device *drm, struct mtk_dsi *dsi) ret = PTR_ERR(dsi->connector); goto err_cleanup_encoder; } + + ret = drm_connector_init_panel_orientation_property(dsi->connector); + if (ret) { + DRM_ERROR("Unable to init panel orientation\n"); + goto err_cleanup_encoder; + } + drm_connector_attach_encoder(dsi->connector, &dsi->encoder); return 0; -- 2.36.1.124.g0e6072fb45-goog ^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v10 2/4] drm/mediatek: init panel orientation property @ 2022-05-30 8:19 ` Hsin-Yi Wang 0 siblings, 0 replies; 69+ messages in thread From: Hsin-Yi Wang @ 2022-05-30 8:19 UTC (permalink / raw) To: dri-devel, David Airlie, Daniel Vetter, amd-gfx, intel-gfx Cc: Rob Clark, Chun-Kuang Hu, Emil Velikov, devicetree, linux-kernel, Douglas Anderson, Stephen Boyd, Alex Deucher, Rob Herring, linux-mediatek, Thomas Zimmermann, Matthias Brugger, Sean Paul, Hans de Goede, linux-arm-kernel Init panel orientation property after connector is initialized. Let the panel driver decides the orientation value later. Signed-off-by: Hsin-Yi Wang <hsinyi@chromium.org> Acked-by: Chun-Kuang Hu <chunkuang.hu@kernel.org> --- drivers/gpu/drm/mediatek/mtk_dsi.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/gpu/drm/mediatek/mtk_dsi.c b/drivers/gpu/drm/mediatek/mtk_dsi.c index d9f10a33e6fa..3db44d9b161a 100644 --- a/drivers/gpu/drm/mediatek/mtk_dsi.c +++ b/drivers/gpu/drm/mediatek/mtk_dsi.c @@ -822,6 +822,13 @@ static int mtk_dsi_encoder_init(struct drm_device *drm, struct mtk_dsi *dsi) ret = PTR_ERR(dsi->connector); goto err_cleanup_encoder; } + + ret = drm_connector_init_panel_orientation_property(dsi->connector); + if (ret) { + DRM_ERROR("Unable to init panel orientation\n"); + goto err_cleanup_encoder; + } + drm_connector_attach_encoder(dsi->connector, &dsi->encoder); return 0; -- 2.36.1.124.g0e6072fb45-goog ^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v10 3/4] drm/msm: init panel orientation property 2022-05-30 8:19 ` Hsin-Yi Wang ` (3 preceding siblings ...) (?) @ 2022-05-30 8:19 ` Hsin-Yi Wang -1 siblings, 0 replies; 69+ messages in thread From: Hsin-Yi Wang @ 2022-05-30 8:19 UTC (permalink / raw) To: dri-devel, David Airlie, Daniel Vetter, amd-gfx, intel-gfx Cc: Rob Clark, Stephen Boyd, Douglas Anderson, Chun-Kuang Hu, Sean Paul, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, linux-kernel, Rob Herring, Matthias Brugger, devicetree, linux-arm-kernel, linux-mediatek, Simon Ser, Harry Wentland, Alex Deucher, Jani Nikula, Emil Velikov, Hans de Goede Init panel orientation property after connector is initialized. Let the panel driver decides the orientation value later. Signed-off-by: Hsin-Yi Wang <hsinyi@chromium.org> --- drivers/gpu/drm/msm/dsi/dsi_manager.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/gpu/drm/msm/dsi/dsi_manager.c b/drivers/gpu/drm/msm/dsi/dsi_manager.c index cb84d185d73a..16ad3d8fab4d 100644 --- a/drivers/gpu/drm/msm/dsi/dsi_manager.c +++ b/drivers/gpu/drm/msm/dsi/dsi_manager.c @@ -669,6 +669,10 @@ struct drm_connector *msm_dsi_manager_connector_init(u8 id) connector->interlace_allowed = 0; connector->doublescan_allowed = 0; + ret = drm_connector_init_panel_orientation_property(connector); + if (ret) + goto fail; + drm_connector_attach_encoder(connector, msm_dsi->encoder); ret = msm_dsi_manager_panel_init(connector, id); -- 2.36.1.124.g0e6072fb45-goog ^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v10 3/4] drm/msm: init panel orientation property @ 2022-05-30 8:19 ` Hsin-Yi Wang 0 siblings, 0 replies; 69+ messages in thread From: Hsin-Yi Wang @ 2022-05-30 8:19 UTC (permalink / raw) To: dri-devel, David Airlie, Daniel Vetter, amd-gfx, intel-gfx Cc: Rob Clark, Chun-Kuang Hu, Emil Velikov, Harry Wentland, devicetree, linux-kernel, Maarten Lankhorst, Douglas Anderson, Maxime Ripard, Stephen Boyd, Alex Deucher, Rob Herring, linux-mediatek, Jani Nikula, Thomas Zimmermann, Simon Ser, Matthias Brugger, Sean Paul, Hans de Goede, linux-arm-kernel Init panel orientation property after connector is initialized. Let the panel driver decides the orientation value later. Signed-off-by: Hsin-Yi Wang <hsinyi@chromium.org> --- drivers/gpu/drm/msm/dsi/dsi_manager.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/gpu/drm/msm/dsi/dsi_manager.c b/drivers/gpu/drm/msm/dsi/dsi_manager.c index cb84d185d73a..16ad3d8fab4d 100644 --- a/drivers/gpu/drm/msm/dsi/dsi_manager.c +++ b/drivers/gpu/drm/msm/dsi/dsi_manager.c @@ -669,6 +669,10 @@ struct drm_connector *msm_dsi_manager_connector_init(u8 id) connector->interlace_allowed = 0; connector->doublescan_allowed = 0; + ret = drm_connector_init_panel_orientation_property(connector); + if (ret) + goto fail; + drm_connector_attach_encoder(connector, msm_dsi->encoder); ret = msm_dsi_manager_panel_init(connector, id); -- 2.36.1.124.g0e6072fb45-goog ^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v10 3/4] drm/msm: init panel orientation property @ 2022-05-30 8:19 ` Hsin-Yi Wang 0 siblings, 0 replies; 69+ messages in thread From: Hsin-Yi Wang @ 2022-05-30 8:19 UTC (permalink / raw) To: dri-devel, David Airlie, Daniel Vetter, amd-gfx, intel-gfx Cc: Rob Clark, Stephen Boyd, Douglas Anderson, Chun-Kuang Hu, Sean Paul, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, linux-kernel, Rob Herring, Matthias Brugger, devicetree, linux-arm-kernel, linux-mediatek, Simon Ser, Harry Wentland, Alex Deucher, Jani Nikula, Emil Velikov, Hans de Goede Init panel orientation property after connector is initialized. Let the panel driver decides the orientation value later. Signed-off-by: Hsin-Yi Wang <hsinyi@chromium.org> --- drivers/gpu/drm/msm/dsi/dsi_manager.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/gpu/drm/msm/dsi/dsi_manager.c b/drivers/gpu/drm/msm/dsi/dsi_manager.c index cb84d185d73a..16ad3d8fab4d 100644 --- a/drivers/gpu/drm/msm/dsi/dsi_manager.c +++ b/drivers/gpu/drm/msm/dsi/dsi_manager.c @@ -669,6 +669,10 @@ struct drm_connector *msm_dsi_manager_connector_init(u8 id) connector->interlace_allowed = 0; connector->doublescan_allowed = 0; + ret = drm_connector_init_panel_orientation_property(connector); + if (ret) + goto fail; + drm_connector_attach_encoder(connector, msm_dsi->encoder); ret = msm_dsi_manager_panel_init(connector, id); -- 2.36.1.124.g0e6072fb45-goog _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v10 3/4] drm/msm: init panel orientation property @ 2022-05-30 8:19 ` Hsin-Yi Wang 0 siblings, 0 replies; 69+ messages in thread From: Hsin-Yi Wang @ 2022-05-30 8:19 UTC (permalink / raw) To: dri-devel, David Airlie, Daniel Vetter, amd-gfx, intel-gfx Cc: Rob Clark, Stephen Boyd, Douglas Anderson, Chun-Kuang Hu, Sean Paul, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, linux-kernel, Rob Herring, Matthias Brugger, devicetree, linux-arm-kernel, linux-mediatek, Simon Ser, Harry Wentland, Alex Deucher, Jani Nikula, Emil Velikov, Hans de Goede Init panel orientation property after connector is initialized. Let the panel driver decides the orientation value later. Signed-off-by: Hsin-Yi Wang <hsinyi@chromium.org> --- drivers/gpu/drm/msm/dsi/dsi_manager.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/gpu/drm/msm/dsi/dsi_manager.c b/drivers/gpu/drm/msm/dsi/dsi_manager.c index cb84d185d73a..16ad3d8fab4d 100644 --- a/drivers/gpu/drm/msm/dsi/dsi_manager.c +++ b/drivers/gpu/drm/msm/dsi/dsi_manager.c @@ -669,6 +669,10 @@ struct drm_connector *msm_dsi_manager_connector_init(u8 id) connector->interlace_allowed = 0; connector->doublescan_allowed = 0; + ret = drm_connector_init_panel_orientation_property(connector); + if (ret) + goto fail; + drm_connector_attach_encoder(connector, msm_dsi->encoder); ret = msm_dsi_manager_panel_init(connector, id); -- 2.36.1.124.g0e6072fb45-goog _______________________________________________ Linux-mediatek mailing list Linux-mediatek@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-mediatek ^ permalink raw reply related [flat|nested] 69+ messages in thread
* [Intel-gfx] [PATCH v10 3/4] drm/msm: init panel orientation property @ 2022-05-30 8:19 ` Hsin-Yi Wang 0 siblings, 0 replies; 69+ messages in thread From: Hsin-Yi Wang @ 2022-05-30 8:19 UTC (permalink / raw) To: dri-devel, David Airlie, Daniel Vetter, amd-gfx, intel-gfx Cc: Rob Clark, Chun-Kuang Hu, Harry Wentland, devicetree, linux-kernel, Douglas Anderson, Maxime Ripard, Stephen Boyd, Alex Deucher, Rob Herring, linux-mediatek, Thomas Zimmermann, Simon Ser, Matthias Brugger, linux-arm-kernel Init panel orientation property after connector is initialized. Let the panel driver decides the orientation value later. Signed-off-by: Hsin-Yi Wang <hsinyi@chromium.org> --- drivers/gpu/drm/msm/dsi/dsi_manager.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/gpu/drm/msm/dsi/dsi_manager.c b/drivers/gpu/drm/msm/dsi/dsi_manager.c index cb84d185d73a..16ad3d8fab4d 100644 --- a/drivers/gpu/drm/msm/dsi/dsi_manager.c +++ b/drivers/gpu/drm/msm/dsi/dsi_manager.c @@ -669,6 +669,10 @@ struct drm_connector *msm_dsi_manager_connector_init(u8 id) connector->interlace_allowed = 0; connector->doublescan_allowed = 0; + ret = drm_connector_init_panel_orientation_property(connector); + if (ret) + goto fail; + drm_connector_attach_encoder(connector, msm_dsi->encoder); ret = msm_dsi_manager_panel_init(connector, id); -- 2.36.1.124.g0e6072fb45-goog ^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v10 3/4] drm/msm: init panel orientation property @ 2022-05-30 8:19 ` Hsin-Yi Wang 0 siblings, 0 replies; 69+ messages in thread From: Hsin-Yi Wang @ 2022-05-30 8:19 UTC (permalink / raw) To: dri-devel, David Airlie, Daniel Vetter, amd-gfx, intel-gfx Cc: Rob Clark, Chun-Kuang Hu, Emil Velikov, devicetree, linux-kernel, Douglas Anderson, Stephen Boyd, Alex Deucher, Rob Herring, linux-mediatek, Thomas Zimmermann, Matthias Brugger, Sean Paul, Hans de Goede, linux-arm-kernel Init panel orientation property after connector is initialized. Let the panel driver decides the orientation value later. Signed-off-by: Hsin-Yi Wang <hsinyi@chromium.org> --- drivers/gpu/drm/msm/dsi/dsi_manager.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/gpu/drm/msm/dsi/dsi_manager.c b/drivers/gpu/drm/msm/dsi/dsi_manager.c index cb84d185d73a..16ad3d8fab4d 100644 --- a/drivers/gpu/drm/msm/dsi/dsi_manager.c +++ b/drivers/gpu/drm/msm/dsi/dsi_manager.c @@ -669,6 +669,10 @@ struct drm_connector *msm_dsi_manager_connector_init(u8 id) connector->interlace_allowed = 0; connector->doublescan_allowed = 0; + ret = drm_connector_init_panel_orientation_property(connector); + if (ret) + goto fail; + drm_connector_attach_encoder(connector, msm_dsi->encoder); ret = msm_dsi_manager_panel_init(connector, id); -- 2.36.1.124.g0e6072fb45-goog ^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v10 4/4] arm64: dts: mt8183: Add panel rotation 2022-05-30 8:19 ` Hsin-Yi Wang ` (3 preceding siblings ...) (?) @ 2022-05-30 8:19 ` Hsin-Yi Wang -1 siblings, 0 replies; 69+ messages in thread From: Hsin-Yi Wang @ 2022-05-30 8:19 UTC (permalink / raw) To: dri-devel, David Airlie, Daniel Vetter, amd-gfx, intel-gfx Cc: Rob Clark, Stephen Boyd, Douglas Anderson, Chun-Kuang Hu, Sean Paul, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, linux-kernel, Rob Herring, Matthias Brugger, devicetree, linux-arm-kernel, linux-mediatek, Simon Ser, Harry Wentland, Alex Deucher, Jani Nikula, Emil Velikov, Hans de Goede krane, kakadu, and kodama boards have a default panel rotation. Signed-off-by: Hsin-Yi Wang <hsinyi@chromium.org> Reviewed-by: Enric Balletbo i Serra <enric.balletbo@collabora.com> Tested-by: Enric Balletbo i Serra <enric.balletbo@collabora.com> --- arch/arm64/boot/dts/mediatek/mt8183-kukui.dtsi | 1 + 1 file changed, 1 insertion(+) diff --git a/arch/arm64/boot/dts/mediatek/mt8183-kukui.dtsi b/arch/arm64/boot/dts/mediatek/mt8183-kukui.dtsi index 8d5bf73a9099..f0dd5a06629d 100644 --- a/arch/arm64/boot/dts/mediatek/mt8183-kukui.dtsi +++ b/arch/arm64/boot/dts/mediatek/mt8183-kukui.dtsi @@ -276,6 +276,7 @@ panel: panel@0 { avee-supply = <&ppvarp_lcd>; pp1800-supply = <&pp1800_lcd>; backlight = <&backlight_lcd0>; + rotation = <270>; port { panel_in: endpoint { remote-endpoint = <&dsi_out>; -- 2.36.1.124.g0e6072fb45-goog ^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v10 4/4] arm64: dts: mt8183: Add panel rotation @ 2022-05-30 8:19 ` Hsin-Yi Wang 0 siblings, 0 replies; 69+ messages in thread From: Hsin-Yi Wang @ 2022-05-30 8:19 UTC (permalink / raw) To: dri-devel, David Airlie, Daniel Vetter, amd-gfx, intel-gfx Cc: Rob Clark, Chun-Kuang Hu, Emil Velikov, Harry Wentland, devicetree, linux-kernel, Maarten Lankhorst, Douglas Anderson, Maxime Ripard, Stephen Boyd, Alex Deucher, Rob Herring, linux-mediatek, Jani Nikula, Thomas Zimmermann, Simon Ser, Matthias Brugger, Sean Paul, Hans de Goede, linux-arm-kernel krane, kakadu, and kodama boards have a default panel rotation. Signed-off-by: Hsin-Yi Wang <hsinyi@chromium.org> Reviewed-by: Enric Balletbo i Serra <enric.balletbo@collabora.com> Tested-by: Enric Balletbo i Serra <enric.balletbo@collabora.com> --- arch/arm64/boot/dts/mediatek/mt8183-kukui.dtsi | 1 + 1 file changed, 1 insertion(+) diff --git a/arch/arm64/boot/dts/mediatek/mt8183-kukui.dtsi b/arch/arm64/boot/dts/mediatek/mt8183-kukui.dtsi index 8d5bf73a9099..f0dd5a06629d 100644 --- a/arch/arm64/boot/dts/mediatek/mt8183-kukui.dtsi +++ b/arch/arm64/boot/dts/mediatek/mt8183-kukui.dtsi @@ -276,6 +276,7 @@ panel: panel@0 { avee-supply = <&ppvarp_lcd>; pp1800-supply = <&pp1800_lcd>; backlight = <&backlight_lcd0>; + rotation = <270>; port { panel_in: endpoint { remote-endpoint = <&dsi_out>; -- 2.36.1.124.g0e6072fb45-goog ^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v10 4/4] arm64: dts: mt8183: Add panel rotation @ 2022-05-30 8:19 ` Hsin-Yi Wang 0 siblings, 0 replies; 69+ messages in thread From: Hsin-Yi Wang @ 2022-05-30 8:19 UTC (permalink / raw) To: dri-devel, David Airlie, Daniel Vetter, amd-gfx, intel-gfx Cc: Rob Clark, Stephen Boyd, Douglas Anderson, Chun-Kuang Hu, Sean Paul, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, linux-kernel, Rob Herring, Matthias Brugger, devicetree, linux-arm-kernel, linux-mediatek, Simon Ser, Harry Wentland, Alex Deucher, Jani Nikula, Emil Velikov, Hans de Goede krane, kakadu, and kodama boards have a default panel rotation. Signed-off-by: Hsin-Yi Wang <hsinyi@chromium.org> Reviewed-by: Enric Balletbo i Serra <enric.balletbo@collabora.com> Tested-by: Enric Balletbo i Serra <enric.balletbo@collabora.com> --- arch/arm64/boot/dts/mediatek/mt8183-kukui.dtsi | 1 + 1 file changed, 1 insertion(+) diff --git a/arch/arm64/boot/dts/mediatek/mt8183-kukui.dtsi b/arch/arm64/boot/dts/mediatek/mt8183-kukui.dtsi index 8d5bf73a9099..f0dd5a06629d 100644 --- a/arch/arm64/boot/dts/mediatek/mt8183-kukui.dtsi +++ b/arch/arm64/boot/dts/mediatek/mt8183-kukui.dtsi @@ -276,6 +276,7 @@ panel: panel@0 { avee-supply = <&ppvarp_lcd>; pp1800-supply = <&pp1800_lcd>; backlight = <&backlight_lcd0>; + rotation = <270>; port { panel_in: endpoint { remote-endpoint = <&dsi_out>; -- 2.36.1.124.g0e6072fb45-goog _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v10 4/4] arm64: dts: mt8183: Add panel rotation @ 2022-05-30 8:19 ` Hsin-Yi Wang 0 siblings, 0 replies; 69+ messages in thread From: Hsin-Yi Wang @ 2022-05-30 8:19 UTC (permalink / raw) To: dri-devel, David Airlie, Daniel Vetter, amd-gfx, intel-gfx Cc: Rob Clark, Stephen Boyd, Douglas Anderson, Chun-Kuang Hu, Sean Paul, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, linux-kernel, Rob Herring, Matthias Brugger, devicetree, linux-arm-kernel, linux-mediatek, Simon Ser, Harry Wentland, Alex Deucher, Jani Nikula, Emil Velikov, Hans de Goede krane, kakadu, and kodama boards have a default panel rotation. Signed-off-by: Hsin-Yi Wang <hsinyi@chromium.org> Reviewed-by: Enric Balletbo i Serra <enric.balletbo@collabora.com> Tested-by: Enric Balletbo i Serra <enric.balletbo@collabora.com> --- arch/arm64/boot/dts/mediatek/mt8183-kukui.dtsi | 1 + 1 file changed, 1 insertion(+) diff --git a/arch/arm64/boot/dts/mediatek/mt8183-kukui.dtsi b/arch/arm64/boot/dts/mediatek/mt8183-kukui.dtsi index 8d5bf73a9099..f0dd5a06629d 100644 --- a/arch/arm64/boot/dts/mediatek/mt8183-kukui.dtsi +++ b/arch/arm64/boot/dts/mediatek/mt8183-kukui.dtsi @@ -276,6 +276,7 @@ panel: panel@0 { avee-supply = <&ppvarp_lcd>; pp1800-supply = <&pp1800_lcd>; backlight = <&backlight_lcd0>; + rotation = <270>; port { panel_in: endpoint { remote-endpoint = <&dsi_out>; -- 2.36.1.124.g0e6072fb45-goog _______________________________________________ Linux-mediatek mailing list Linux-mediatek@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-mediatek ^ permalink raw reply related [flat|nested] 69+ messages in thread
* [Intel-gfx] [PATCH v10 4/4] arm64: dts: mt8183: Add panel rotation @ 2022-05-30 8:19 ` Hsin-Yi Wang 0 siblings, 0 replies; 69+ messages in thread From: Hsin-Yi Wang @ 2022-05-30 8:19 UTC (permalink / raw) To: dri-devel, David Airlie, Daniel Vetter, amd-gfx, intel-gfx Cc: Rob Clark, Chun-Kuang Hu, Harry Wentland, devicetree, linux-kernel, Douglas Anderson, Maxime Ripard, Stephen Boyd, Alex Deucher, Rob Herring, linux-mediatek, Thomas Zimmermann, Simon Ser, Matthias Brugger, linux-arm-kernel krane, kakadu, and kodama boards have a default panel rotation. Signed-off-by: Hsin-Yi Wang <hsinyi@chromium.org> Reviewed-by: Enric Balletbo i Serra <enric.balletbo@collabora.com> Tested-by: Enric Balletbo i Serra <enric.balletbo@collabora.com> --- arch/arm64/boot/dts/mediatek/mt8183-kukui.dtsi | 1 + 1 file changed, 1 insertion(+) diff --git a/arch/arm64/boot/dts/mediatek/mt8183-kukui.dtsi b/arch/arm64/boot/dts/mediatek/mt8183-kukui.dtsi index 8d5bf73a9099..f0dd5a06629d 100644 --- a/arch/arm64/boot/dts/mediatek/mt8183-kukui.dtsi +++ b/arch/arm64/boot/dts/mediatek/mt8183-kukui.dtsi @@ -276,6 +276,7 @@ panel: panel@0 { avee-supply = <&ppvarp_lcd>; pp1800-supply = <&pp1800_lcd>; backlight = <&backlight_lcd0>; + rotation = <270>; port { panel_in: endpoint { remote-endpoint = <&dsi_out>; -- 2.36.1.124.g0e6072fb45-goog ^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v10 4/4] arm64: dts: mt8183: Add panel rotation @ 2022-05-30 8:19 ` Hsin-Yi Wang 0 siblings, 0 replies; 69+ messages in thread From: Hsin-Yi Wang @ 2022-05-30 8:19 UTC (permalink / raw) To: dri-devel, David Airlie, Daniel Vetter, amd-gfx, intel-gfx Cc: Rob Clark, Chun-Kuang Hu, Emil Velikov, devicetree, linux-kernel, Douglas Anderson, Stephen Boyd, Alex Deucher, Rob Herring, linux-mediatek, Thomas Zimmermann, Matthias Brugger, Sean Paul, Hans de Goede, linux-arm-kernel krane, kakadu, and kodama boards have a default panel rotation. Signed-off-by: Hsin-Yi Wang <hsinyi@chromium.org> Reviewed-by: Enric Balletbo i Serra <enric.balletbo@collabora.com> Tested-by: Enric Balletbo i Serra <enric.balletbo@collabora.com> --- arch/arm64/boot/dts/mediatek/mt8183-kukui.dtsi | 1 + 1 file changed, 1 insertion(+) diff --git a/arch/arm64/boot/dts/mediatek/mt8183-kukui.dtsi b/arch/arm64/boot/dts/mediatek/mt8183-kukui.dtsi index 8d5bf73a9099..f0dd5a06629d 100644 --- a/arch/arm64/boot/dts/mediatek/mt8183-kukui.dtsi +++ b/arch/arm64/boot/dts/mediatek/mt8183-kukui.dtsi @@ -276,6 +276,7 @@ panel: panel@0 { avee-supply = <&ppvarp_lcd>; pp1800-supply = <&pp1800_lcd>; backlight = <&backlight_lcd0>; + rotation = <270>; port { panel_in: endpoint { remote-endpoint = <&dsi_out>; -- 2.36.1.124.g0e6072fb45-goog ^ permalink raw reply related [flat|nested] 69+ messages in thread
* [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for Separate panel orientation property creating and value setting (rev2) 2022-05-30 8:19 ` Hsin-Yi Wang ` (8 preceding siblings ...) (?) @ 2022-05-30 8:44 ` Patchwork -1 siblings, 0 replies; 69+ messages in thread From: Patchwork @ 2022-05-30 8:44 UTC (permalink / raw) To: Hsin-Yi Wang; +Cc: intel-gfx == Series Details == Series: Separate panel orientation property creating and value setting (rev2) URL : https://patchwork.freedesktop.org/series/101530/ State : warning == Summary == Error: dim checkpatch failed bf8654ee2da6 gpu: drm: separate panel orientation property creating and value setting -:130: WARNING:SPACE_BEFORE_TAB: please, no space before tabs #130: FILE: drivers/gpu/drm/drm_connector.c:2389: + * ^Icreate the connector's panel orientation property$ -:141: CHECK:OPEN_ENDED_LINE: Lines should not end with a '(' #141: FILE: drivers/gpu/drm/drm_connector.c:2400: +int drm_connector_init_panel_orientation_property( -:147: ERROR:SPACING: space required before the open parenthesis '(' #147: FILE: drivers/gpu/drm/drm_connector.c:2406: + if(dev->mode_config.panel_orientation_property) -:151: CHECK:PARENTHESIS_ALIGNMENT: Alignment should match open parenthesis #151: FILE: drivers/gpu/drm/drm_connector.c:2410: + prop = drm_property_create_enum(dev, DRM_MODE_PROP_IMMUTABLE, + "panel orientation", -:176: CHECK:OPEN_ENDED_LINE: Lines should not end with a '(' #176: FILE: include/drm/drm_connector.h:1805: +int drm_connector_init_panel_orientation_property( total: 1 errors, 1 warnings, 3 checks, 99 lines checked fb63fbb19c0d drm/mediatek: init panel orientation property 24e07972d2f3 drm/msm: init panel orientation property 205b521cb9de arm64: dts: mt8183: Add panel rotation ^ permalink raw reply [flat|nested] 69+ messages in thread
* [Intel-gfx] ✗ Fi.CI.SPARSE: warning for Separate panel orientation property creating and value setting (rev2) 2022-05-30 8:19 ` Hsin-Yi Wang ` (9 preceding siblings ...) (?) @ 2022-05-30 8:44 ` Patchwork -1 siblings, 0 replies; 69+ messages in thread From: Patchwork @ 2022-05-30 8:44 UTC (permalink / raw) To: Hsin-Yi Wang; +Cc: intel-gfx == Series Details == Series: Separate panel orientation property creating and value setting (rev2) URL : https://patchwork.freedesktop.org/series/101530/ State : warning == Summary == Error: dim sparse failed Sparse version: v0.6.2 Fast mode used, each commit won't be checked separately. ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v10 0/4] Separate panel orientation property creating and value setting 2022-05-30 8:19 ` Hsin-Yi Wang ` (3 preceding siblings ...) (?) @ 2022-05-30 8:53 ` Hans de Goede -1 siblings, 0 replies; 69+ messages in thread From: Hans de Goede @ 2022-05-30 8:53 UTC (permalink / raw) To: Hsin-Yi Wang, dri-devel, David Airlie, Daniel Vetter, amd-gfx, intel-gfx Cc: Rob Clark, Chun-Kuang Hu, Emil Velikov, devicetree, linux-kernel, Douglas Anderson, Stephen Boyd, Alex Deucher, Rob Herring, linux-mediatek, Thomas Zimmermann, Matthias Brugger, Sean Paul, linux-arm-kernel Hi, On 5/30/22 10:19, Hsin-Yi Wang wrote: > Some drivers, eg. mtk_drm and msm_drm, rely on the panel to set the > orientation. Panel calls drm_connector_set_panel_orientation() to create > orientation property and sets the value. However, connector properties > can't be created after drm_dev_register() is called. The goal is to > separate the orientation property creation, so drm drivers can create it > earlier before drm_dev_register(). Sorry for jumping in pretty late in the discussion (based on the v10 I seem to have missed this before). This sounds to me like the real issue here is that drm_dev_register() is getting called too early? To me it seems sensible to delay calling drm_dev_register() and thus allowing userspace to start detecting available displays + features until after the panel has been probed. I see a devicetree patch in this series, so I guess that the panel is described in devicetree. Especially in the case of devicetree I would expect the kernel to have enough info to do the right thing and make sure the panel is probed before calling drm_dev_register() ? Regards, Hans > > After this series, drm_connector_set_panel_orientation() works like > before. It won't affect existing callers of > drm_connector_set_panel_orientation(). The only difference is that > some drm drivers can call drm_connector_init_panel_orientation_property() > earlier. > > Hsin-Yi Wang (4): > gpu: drm: separate panel orientation property creating and value > setting > drm/mediatek: init panel orientation property > drm/msm: init panel orientation property > arm64: dts: mt8183: Add panel rotation > > .../arm64/boot/dts/mediatek/mt8183-kukui.dtsi | 1 + > drivers/gpu/drm/drm_connector.c | 58 ++++++++++++++----- > drivers/gpu/drm/mediatek/mtk_dsi.c | 7 +++ > drivers/gpu/drm/msm/dsi/dsi_manager.c | 4 ++ > include/drm/drm_connector.h | 2 + > 5 files changed, 59 insertions(+), 13 deletions(-) > ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v10 0/4] Separate panel orientation property creating and value setting @ 2022-05-30 8:53 ` Hans de Goede 0 siblings, 0 replies; 69+ messages in thread From: Hans de Goede @ 2022-05-30 8:53 UTC (permalink / raw) To: Hsin-Yi Wang, dri-devel, David Airlie, Daniel Vetter, amd-gfx, intel-gfx Cc: Rob Clark, Chun-Kuang Hu, Emil Velikov, Harry Wentland, devicetree, linux-kernel, Maarten Lankhorst, Douglas Anderson, Maxime Ripard, Stephen Boyd, Alex Deucher, Rob Herring, linux-mediatek, Jani Nikula, Thomas Zimmermann, Simon Ser, Matthias Brugger, Sean Paul, linux-arm-kernel Hi, On 5/30/22 10:19, Hsin-Yi Wang wrote: > Some drivers, eg. mtk_drm and msm_drm, rely on the panel to set the > orientation. Panel calls drm_connector_set_panel_orientation() to create > orientation property and sets the value. However, connector properties > can't be created after drm_dev_register() is called. The goal is to > separate the orientation property creation, so drm drivers can create it > earlier before drm_dev_register(). Sorry for jumping in pretty late in the discussion (based on the v10 I seem to have missed this before). This sounds to me like the real issue here is that drm_dev_register() is getting called too early? To me it seems sensible to delay calling drm_dev_register() and thus allowing userspace to start detecting available displays + features until after the panel has been probed. I see a devicetree patch in this series, so I guess that the panel is described in devicetree. Especially in the case of devicetree I would expect the kernel to have enough info to do the right thing and make sure the panel is probed before calling drm_dev_register() ? Regards, Hans > > After this series, drm_connector_set_panel_orientation() works like > before. It won't affect existing callers of > drm_connector_set_panel_orientation(). The only difference is that > some drm drivers can call drm_connector_init_panel_orientation_property() > earlier. > > Hsin-Yi Wang (4): > gpu: drm: separate panel orientation property creating and value > setting > drm/mediatek: init panel orientation property > drm/msm: init panel orientation property > arm64: dts: mt8183: Add panel rotation > > .../arm64/boot/dts/mediatek/mt8183-kukui.dtsi | 1 + > drivers/gpu/drm/drm_connector.c | 58 ++++++++++++++----- > drivers/gpu/drm/mediatek/mtk_dsi.c | 7 +++ > drivers/gpu/drm/msm/dsi/dsi_manager.c | 4 ++ > include/drm/drm_connector.h | 2 + > 5 files changed, 59 insertions(+), 13 deletions(-) > ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v10 0/4] Separate panel orientation property creating and value setting @ 2022-05-30 8:53 ` Hans de Goede 0 siblings, 0 replies; 69+ messages in thread From: Hans de Goede @ 2022-05-30 8:53 UTC (permalink / raw) To: Hsin-Yi Wang, dri-devel, David Airlie, Daniel Vetter, amd-gfx, intel-gfx Cc: Rob Clark, Stephen Boyd, Douglas Anderson, Chun-Kuang Hu, Sean Paul, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, linux-kernel, Rob Herring, Matthias Brugger, devicetree, linux-arm-kernel, linux-mediatek, Simon Ser, Harry Wentland, Alex Deucher, Jani Nikula, Emil Velikov Hi, On 5/30/22 10:19, Hsin-Yi Wang wrote: > Some drivers, eg. mtk_drm and msm_drm, rely on the panel to set the > orientation. Panel calls drm_connector_set_panel_orientation() to create > orientation property and sets the value. However, connector properties > can't be created after drm_dev_register() is called. The goal is to > separate the orientation property creation, so drm drivers can create it > earlier before drm_dev_register(). Sorry for jumping in pretty late in the discussion (based on the v10 I seem to have missed this before). This sounds to me like the real issue here is that drm_dev_register() is getting called too early? To me it seems sensible to delay calling drm_dev_register() and thus allowing userspace to start detecting available displays + features until after the panel has been probed. I see a devicetree patch in this series, so I guess that the panel is described in devicetree. Especially in the case of devicetree I would expect the kernel to have enough info to do the right thing and make sure the panel is probed before calling drm_dev_register() ? Regards, Hans > > After this series, drm_connector_set_panel_orientation() works like > before. It won't affect existing callers of > drm_connector_set_panel_orientation(). The only difference is that > some drm drivers can call drm_connector_init_panel_orientation_property() > earlier. > > Hsin-Yi Wang (4): > gpu: drm: separate panel orientation property creating and value > setting > drm/mediatek: init panel orientation property > drm/msm: init panel orientation property > arm64: dts: mt8183: Add panel rotation > > .../arm64/boot/dts/mediatek/mt8183-kukui.dtsi | 1 + > drivers/gpu/drm/drm_connector.c | 58 ++++++++++++++----- > drivers/gpu/drm/mediatek/mtk_dsi.c | 7 +++ > drivers/gpu/drm/msm/dsi/dsi_manager.c | 4 ++ > include/drm/drm_connector.h | 2 + > 5 files changed, 59 insertions(+), 13 deletions(-) > _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v10 0/4] Separate panel orientation property creating and value setting @ 2022-05-30 8:53 ` Hans de Goede 0 siblings, 0 replies; 69+ messages in thread From: Hans de Goede @ 2022-05-30 8:53 UTC (permalink / raw) To: Hsin-Yi Wang, dri-devel, David Airlie, Daniel Vetter, amd-gfx, intel-gfx Cc: Rob Clark, Stephen Boyd, Douglas Anderson, Chun-Kuang Hu, Sean Paul, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, linux-kernel, Rob Herring, Matthias Brugger, devicetree, linux-arm-kernel, linux-mediatek, Simon Ser, Harry Wentland, Alex Deucher, Jani Nikula, Emil Velikov Hi, On 5/30/22 10:19, Hsin-Yi Wang wrote: > Some drivers, eg. mtk_drm and msm_drm, rely on the panel to set the > orientation. Panel calls drm_connector_set_panel_orientation() to create > orientation property and sets the value. However, connector properties > can't be created after drm_dev_register() is called. The goal is to > separate the orientation property creation, so drm drivers can create it > earlier before drm_dev_register(). Sorry for jumping in pretty late in the discussion (based on the v10 I seem to have missed this before). This sounds to me like the real issue here is that drm_dev_register() is getting called too early? To me it seems sensible to delay calling drm_dev_register() and thus allowing userspace to start detecting available displays + features until after the panel has been probed. I see a devicetree patch in this series, so I guess that the panel is described in devicetree. Especially in the case of devicetree I would expect the kernel to have enough info to do the right thing and make sure the panel is probed before calling drm_dev_register() ? Regards, Hans > > After this series, drm_connector_set_panel_orientation() works like > before. It won't affect existing callers of > drm_connector_set_panel_orientation(). The only difference is that > some drm drivers can call drm_connector_init_panel_orientation_property() > earlier. > > Hsin-Yi Wang (4): > gpu: drm: separate panel orientation property creating and value > setting > drm/mediatek: init panel orientation property > drm/msm: init panel orientation property > arm64: dts: mt8183: Add panel rotation > > .../arm64/boot/dts/mediatek/mt8183-kukui.dtsi | 1 + > drivers/gpu/drm/drm_connector.c | 58 ++++++++++++++----- > drivers/gpu/drm/mediatek/mtk_dsi.c | 7 +++ > drivers/gpu/drm/msm/dsi/dsi_manager.c | 4 ++ > include/drm/drm_connector.h | 2 + > 5 files changed, 59 insertions(+), 13 deletions(-) > _______________________________________________ Linux-mediatek mailing list Linux-mediatek@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-mediatek ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v10 0/4] Separate panel orientation property creating and value setting @ 2022-05-30 8:53 ` Hans de Goede 0 siblings, 0 replies; 69+ messages in thread From: Hans de Goede @ 2022-05-30 8:53 UTC (permalink / raw) To: Hsin-Yi Wang, dri-devel, David Airlie, Daniel Vetter, amd-gfx, intel-gfx Cc: Rob Clark, Stephen Boyd, Douglas Anderson, Chun-Kuang Hu, Sean Paul, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, linux-kernel, Rob Herring, Matthias Brugger, devicetree, linux-arm-kernel, linux-mediatek, Simon Ser, Harry Wentland, Alex Deucher, Jani Nikula, Emil Velikov Hi, On 5/30/22 10:19, Hsin-Yi Wang wrote: > Some drivers, eg. mtk_drm and msm_drm, rely on the panel to set the > orientation. Panel calls drm_connector_set_panel_orientation() to create > orientation property and sets the value. However, connector properties > can't be created after drm_dev_register() is called. The goal is to > separate the orientation property creation, so drm drivers can create it > earlier before drm_dev_register(). Sorry for jumping in pretty late in the discussion (based on the v10 I seem to have missed this before). This sounds to me like the real issue here is that drm_dev_register() is getting called too early? To me it seems sensible to delay calling drm_dev_register() and thus allowing userspace to start detecting available displays + features until after the panel has been probed. I see a devicetree patch in this series, so I guess that the panel is described in devicetree. Especially in the case of devicetree I would expect the kernel to have enough info to do the right thing and make sure the panel is probed before calling drm_dev_register() ? Regards, Hans > > After this series, drm_connector_set_panel_orientation() works like > before. It won't affect existing callers of > drm_connector_set_panel_orientation(). The only difference is that > some drm drivers can call drm_connector_init_panel_orientation_property() > earlier. > > Hsin-Yi Wang (4): > gpu: drm: separate panel orientation property creating and value > setting > drm/mediatek: init panel orientation property > drm/msm: init panel orientation property > arm64: dts: mt8183: Add panel rotation > > .../arm64/boot/dts/mediatek/mt8183-kukui.dtsi | 1 + > drivers/gpu/drm/drm_connector.c | 58 ++++++++++++++----- > drivers/gpu/drm/mediatek/mtk_dsi.c | 7 +++ > drivers/gpu/drm/msm/dsi/dsi_manager.c | 4 ++ > include/drm/drm_connector.h | 2 + > 5 files changed, 59 insertions(+), 13 deletions(-) > ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [Intel-gfx] [PATCH v10 0/4] Separate panel orientation property creating and value setting @ 2022-05-30 8:53 ` Hans de Goede 0 siblings, 0 replies; 69+ messages in thread From: Hans de Goede @ 2022-05-30 8:53 UTC (permalink / raw) To: Hsin-Yi Wang, dri-devel, David Airlie, Daniel Vetter, amd-gfx, intel-gfx Cc: Rob Clark, Chun-Kuang Hu, Harry Wentland, devicetree, linux-kernel, Douglas Anderson, Maxime Ripard, Stephen Boyd, Alex Deucher, Rob Herring, linux-mediatek, Thomas Zimmermann, Simon Ser, Matthias Brugger, linux-arm-kernel Hi, On 5/30/22 10:19, Hsin-Yi Wang wrote: > Some drivers, eg. mtk_drm and msm_drm, rely on the panel to set the > orientation. Panel calls drm_connector_set_panel_orientation() to create > orientation property and sets the value. However, connector properties > can't be created after drm_dev_register() is called. The goal is to > separate the orientation property creation, so drm drivers can create it > earlier before drm_dev_register(). Sorry for jumping in pretty late in the discussion (based on the v10 I seem to have missed this before). This sounds to me like the real issue here is that drm_dev_register() is getting called too early? To me it seems sensible to delay calling drm_dev_register() and thus allowing userspace to start detecting available displays + features until after the panel has been probed. I see a devicetree patch in this series, so I guess that the panel is described in devicetree. Especially in the case of devicetree I would expect the kernel to have enough info to do the right thing and make sure the panel is probed before calling drm_dev_register() ? Regards, Hans > > After this series, drm_connector_set_panel_orientation() works like > before. It won't affect existing callers of > drm_connector_set_panel_orientation(). The only difference is that > some drm drivers can call drm_connector_init_panel_orientation_property() > earlier. > > Hsin-Yi Wang (4): > gpu: drm: separate panel orientation property creating and value > setting > drm/mediatek: init panel orientation property > drm/msm: init panel orientation property > arm64: dts: mt8183: Add panel rotation > > .../arm64/boot/dts/mediatek/mt8183-kukui.dtsi | 1 + > drivers/gpu/drm/drm_connector.c | 58 ++++++++++++++----- > drivers/gpu/drm/mediatek/mtk_dsi.c | 7 +++ > drivers/gpu/drm/msm/dsi/dsi_manager.c | 4 ++ > include/drm/drm_connector.h | 2 + > 5 files changed, 59 insertions(+), 13 deletions(-) > ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v10 0/4] Separate panel orientation property creating and value setting 2022-05-30 8:53 ` [Intel-gfx] " Hans de Goede ` (3 preceding siblings ...) (?) @ 2022-05-30 11:34 ` Hsin-Yi Wang -1 siblings, 0 replies; 69+ messages in thread From: Hsin-Yi Wang @ 2022-05-30 11:34 UTC (permalink / raw) To: Hans de Goede Cc: dri-devel, David Airlie, Daniel Vetter, amd-gfx, intel-gfx, Rob Clark, Stephen Boyd, Douglas Anderson, Chun-Kuang Hu, Sean Paul, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, linux-kernel, Rob Herring, Matthias Brugger, devicetree, linux-arm-kernel, linux-mediatek, Simon Ser, Harry Wentland, Alex Deucher, Jani Nikula, Emil Velikov On Mon, May 30, 2022 at 4:53 PM Hans de Goede <hdegoede@redhat.com> wrote: > > Hi, > > On 5/30/22 10:19, Hsin-Yi Wang wrote: > > Some drivers, eg. mtk_drm and msm_drm, rely on the panel to set the > > orientation. Panel calls drm_connector_set_panel_orientation() to create > > orientation property and sets the value. However, connector properties > > can't be created after drm_dev_register() is called. The goal is to > > separate the orientation property creation, so drm drivers can create it > > earlier before drm_dev_register(). > > Sorry for jumping in pretty late in the discussion (based on the v10 > I seem to have missed this before). > > This sounds to me like the real issue here is that drm_dev_register() > is getting called too early? > Right. > To me it seems sensible to delay calling drm_dev_register() and > thus allowing userspace to start detecting available displays + > features until after the panel has been probed. > Most panels set this value very late, in .get_modes callback (since it is when the connector is known), though the value was known during panel probe. I think we can also let drm check if they have remote panel nodes: If there is a panel and the panel sets the orientation, let the drm read this value and set the property. Does this workflow sound reasonable? The corresponding patch to implement this: https://patchwork.kernel.org/project/linux-mediatek/patch/20220530113033.124072-1-hsinyi@chromium.org/ Thanks > I see a devicetree patch in this series, so I guess that the panel > is described in devicetree. Especially in the case of devicetree > I would expect the kernel to have enough info to do the right > thing and make sure the panel is probed before calling > drm_dev_register() ? > > Regards, > > Hans > > > > > > > > After this series, drm_connector_set_panel_orientation() works like > > before. It won't affect existing callers of > > drm_connector_set_panel_orientation(). The only difference is that > > some drm drivers can call drm_connector_init_panel_orientation_property() > > earlier. > > > > Hsin-Yi Wang (4): > > gpu: drm: separate panel orientation property creating and value > > setting > > drm/mediatek: init panel orientation property > > drm/msm: init panel orientation property > > arm64: dts: mt8183: Add panel rotation > > > > .../arm64/boot/dts/mediatek/mt8183-kukui.dtsi | 1 + > > drivers/gpu/drm/drm_connector.c | 58 ++++++++++++++----- > > drivers/gpu/drm/mediatek/mtk_dsi.c | 7 +++ > > drivers/gpu/drm/msm/dsi/dsi_manager.c | 4 ++ > > include/drm/drm_connector.h | 2 + > > 5 files changed, 59 insertions(+), 13 deletions(-) > > > ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v10 0/4] Separate panel orientation property creating and value setting @ 2022-05-30 11:34 ` Hsin-Yi Wang 0 siblings, 0 replies; 69+ messages in thread From: Hsin-Yi Wang @ 2022-05-30 11:34 UTC (permalink / raw) To: Hans de Goede Cc: devicetree, David Airlie, dri-devel, linux-kernel, Rob Clark, amd-gfx, Harry Wentland, Chun-Kuang Hu, Daniel Vetter, intel-gfx, Maarten Lankhorst, Maxime Ripard, Stephen Boyd, Rob Herring, linux-mediatek, Jani Nikula, Matthias Brugger, Sean Paul, linux-arm-kernel, Simon Ser, Emil Velikov, Douglas Anderson, Thomas Zimmermann, Alex Deucher On Mon, May 30, 2022 at 4:53 PM Hans de Goede <hdegoede@redhat.com> wrote: > > Hi, > > On 5/30/22 10:19, Hsin-Yi Wang wrote: > > Some drivers, eg. mtk_drm and msm_drm, rely on the panel to set the > > orientation. Panel calls drm_connector_set_panel_orientation() to create > > orientation property and sets the value. However, connector properties > > can't be created after drm_dev_register() is called. The goal is to > > separate the orientation property creation, so drm drivers can create it > > earlier before drm_dev_register(). > > Sorry for jumping in pretty late in the discussion (based on the v10 > I seem to have missed this before). > > This sounds to me like the real issue here is that drm_dev_register() > is getting called too early? > Right. > To me it seems sensible to delay calling drm_dev_register() and > thus allowing userspace to start detecting available displays + > features until after the panel has been probed. > Most panels set this value very late, in .get_modes callback (since it is when the connector is known), though the value was known during panel probe. I think we can also let drm check if they have remote panel nodes: If there is a panel and the panel sets the orientation, let the drm read this value and set the property. Does this workflow sound reasonable? The corresponding patch to implement this: https://patchwork.kernel.org/project/linux-mediatek/patch/20220530113033.124072-1-hsinyi@chromium.org/ Thanks > I see a devicetree patch in this series, so I guess that the panel > is described in devicetree. Especially in the case of devicetree > I would expect the kernel to have enough info to do the right > thing and make sure the panel is probed before calling > drm_dev_register() ? > > Regards, > > Hans > > > > > > > > After this series, drm_connector_set_panel_orientation() works like > > before. It won't affect existing callers of > > drm_connector_set_panel_orientation(). The only difference is that > > some drm drivers can call drm_connector_init_panel_orientation_property() > > earlier. > > > > Hsin-Yi Wang (4): > > gpu: drm: separate panel orientation property creating and value > > setting > > drm/mediatek: init panel orientation property > > drm/msm: init panel orientation property > > arm64: dts: mt8183: Add panel rotation > > > > .../arm64/boot/dts/mediatek/mt8183-kukui.dtsi | 1 + > > drivers/gpu/drm/drm_connector.c | 58 ++++++++++++++----- > > drivers/gpu/drm/mediatek/mtk_dsi.c | 7 +++ > > drivers/gpu/drm/msm/dsi/dsi_manager.c | 4 ++ > > include/drm/drm_connector.h | 2 + > > 5 files changed, 59 insertions(+), 13 deletions(-) > > > ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v10 0/4] Separate panel orientation property creating and value setting @ 2022-05-30 11:34 ` Hsin-Yi Wang 0 siblings, 0 replies; 69+ messages in thread From: Hsin-Yi Wang @ 2022-05-30 11:34 UTC (permalink / raw) To: Hans de Goede Cc: dri-devel, David Airlie, Daniel Vetter, amd-gfx, intel-gfx, Rob Clark, Stephen Boyd, Douglas Anderson, Chun-Kuang Hu, Sean Paul, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, linux-kernel, Rob Herring, Matthias Brugger, devicetree, linux-arm-kernel, linux-mediatek, Simon Ser, Harry Wentland, Alex Deucher, Jani Nikula, Emil Velikov On Mon, May 30, 2022 at 4:53 PM Hans de Goede <hdegoede@redhat.com> wrote: > > Hi, > > On 5/30/22 10:19, Hsin-Yi Wang wrote: > > Some drivers, eg. mtk_drm and msm_drm, rely on the panel to set the > > orientation. Panel calls drm_connector_set_panel_orientation() to create > > orientation property and sets the value. However, connector properties > > can't be created after drm_dev_register() is called. The goal is to > > separate the orientation property creation, so drm drivers can create it > > earlier before drm_dev_register(). > > Sorry for jumping in pretty late in the discussion (based on the v10 > I seem to have missed this before). > > This sounds to me like the real issue here is that drm_dev_register() > is getting called too early? > Right. > To me it seems sensible to delay calling drm_dev_register() and > thus allowing userspace to start detecting available displays + > features until after the panel has been probed. > Most panels set this value very late, in .get_modes callback (since it is when the connector is known), though the value was known during panel probe. I think we can also let drm check if they have remote panel nodes: If there is a panel and the panel sets the orientation, let the drm read this value and set the property. Does this workflow sound reasonable? The corresponding patch to implement this: https://patchwork.kernel.org/project/linux-mediatek/patch/20220530113033.124072-1-hsinyi@chromium.org/ Thanks > I see a devicetree patch in this series, so I guess that the panel > is described in devicetree. Especially in the case of devicetree > I would expect the kernel to have enough info to do the right > thing and make sure the panel is probed before calling > drm_dev_register() ? > > Regards, > > Hans > > > > > > > > After this series, drm_connector_set_panel_orientation() works like > > before. It won't affect existing callers of > > drm_connector_set_panel_orientation(). The only difference is that > > some drm drivers can call drm_connector_init_panel_orientation_property() > > earlier. > > > > Hsin-Yi Wang (4): > > gpu: drm: separate panel orientation property creating and value > > setting > > drm/mediatek: init panel orientation property > > drm/msm: init panel orientation property > > arm64: dts: mt8183: Add panel rotation > > > > .../arm64/boot/dts/mediatek/mt8183-kukui.dtsi | 1 + > > drivers/gpu/drm/drm_connector.c | 58 ++++++++++++++----- > > drivers/gpu/drm/mediatek/mtk_dsi.c | 7 +++ > > drivers/gpu/drm/msm/dsi/dsi_manager.c | 4 ++ > > include/drm/drm_connector.h | 2 + > > 5 files changed, 59 insertions(+), 13 deletions(-) > > > _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [Intel-gfx] [PATCH v10 0/4] Separate panel orientation property creating and value setting @ 2022-05-30 11:34 ` Hsin-Yi Wang 0 siblings, 0 replies; 69+ messages in thread From: Hsin-Yi Wang @ 2022-05-30 11:34 UTC (permalink / raw) To: Hans de Goede Cc: devicetree, David Airlie, dri-devel, linux-kernel, Rob Clark, amd-gfx, Harry Wentland, Chun-Kuang Hu, intel-gfx, Maxime Ripard, Stephen Boyd, Rob Herring, linux-mediatek, Matthias Brugger, linux-arm-kernel, Simon Ser, Douglas Anderson, Thomas Zimmermann, Alex Deucher On Mon, May 30, 2022 at 4:53 PM Hans de Goede <hdegoede@redhat.com> wrote: > > Hi, > > On 5/30/22 10:19, Hsin-Yi Wang wrote: > > Some drivers, eg. mtk_drm and msm_drm, rely on the panel to set the > > orientation. Panel calls drm_connector_set_panel_orientation() to create > > orientation property and sets the value. However, connector properties > > can't be created after drm_dev_register() is called. The goal is to > > separate the orientation property creation, so drm drivers can create it > > earlier before drm_dev_register(). > > Sorry for jumping in pretty late in the discussion (based on the v10 > I seem to have missed this before). > > This sounds to me like the real issue here is that drm_dev_register() > is getting called too early? > Right. > To me it seems sensible to delay calling drm_dev_register() and > thus allowing userspace to start detecting available displays + > features until after the panel has been probed. > Most panels set this value very late, in .get_modes callback (since it is when the connector is known), though the value was known during panel probe. I think we can also let drm check if they have remote panel nodes: If there is a panel and the panel sets the orientation, let the drm read this value and set the property. Does this workflow sound reasonable? The corresponding patch to implement this: https://patchwork.kernel.org/project/linux-mediatek/patch/20220530113033.124072-1-hsinyi@chromium.org/ Thanks > I see a devicetree patch in this series, so I guess that the panel > is described in devicetree. Especially in the case of devicetree > I would expect the kernel to have enough info to do the right > thing and make sure the panel is probed before calling > drm_dev_register() ? > > Regards, > > Hans > > > > > > > > After this series, drm_connector_set_panel_orientation() works like > > before. It won't affect existing callers of > > drm_connector_set_panel_orientation(). The only difference is that > > some drm drivers can call drm_connector_init_panel_orientation_property() > > earlier. > > > > Hsin-Yi Wang (4): > > gpu: drm: separate panel orientation property creating and value > > setting > > drm/mediatek: init panel orientation property > > drm/msm: init panel orientation property > > arm64: dts: mt8183: Add panel rotation > > > > .../arm64/boot/dts/mediatek/mt8183-kukui.dtsi | 1 + > > drivers/gpu/drm/drm_connector.c | 58 ++++++++++++++----- > > drivers/gpu/drm/mediatek/mtk_dsi.c | 7 +++ > > drivers/gpu/drm/msm/dsi/dsi_manager.c | 4 ++ > > include/drm/drm_connector.h | 2 + > > 5 files changed, 59 insertions(+), 13 deletions(-) > > > ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v10 0/4] Separate panel orientation property creating and value setting @ 2022-05-30 11:34 ` Hsin-Yi Wang 0 siblings, 0 replies; 69+ messages in thread From: Hsin-Yi Wang @ 2022-05-30 11:34 UTC (permalink / raw) To: Hans de Goede Cc: devicetree, David Airlie, dri-devel, linux-kernel, Rob Clark, amd-gfx, Chun-Kuang Hu, intel-gfx, Stephen Boyd, Rob Herring, linux-mediatek, Matthias Brugger, Sean Paul, linux-arm-kernel, Emil Velikov, Douglas Anderson, Thomas Zimmermann, Alex Deucher On Mon, May 30, 2022 at 4:53 PM Hans de Goede <hdegoede@redhat.com> wrote: > > Hi, > > On 5/30/22 10:19, Hsin-Yi Wang wrote: > > Some drivers, eg. mtk_drm and msm_drm, rely on the panel to set the > > orientation. Panel calls drm_connector_set_panel_orientation() to create > > orientation property and sets the value. However, connector properties > > can't be created after drm_dev_register() is called. The goal is to > > separate the orientation property creation, so drm drivers can create it > > earlier before drm_dev_register(). > > Sorry for jumping in pretty late in the discussion (based on the v10 > I seem to have missed this before). > > This sounds to me like the real issue here is that drm_dev_register() > is getting called too early? > Right. > To me it seems sensible to delay calling drm_dev_register() and > thus allowing userspace to start detecting available displays + > features until after the panel has been probed. > Most panels set this value very late, in .get_modes callback (since it is when the connector is known), though the value was known during panel probe. I think we can also let drm check if they have remote panel nodes: If there is a panel and the panel sets the orientation, let the drm read this value and set the property. Does this workflow sound reasonable? The corresponding patch to implement this: https://patchwork.kernel.org/project/linux-mediatek/patch/20220530113033.124072-1-hsinyi@chromium.org/ Thanks > I see a devicetree patch in this series, so I guess that the panel > is described in devicetree. Especially in the case of devicetree > I would expect the kernel to have enough info to do the right > thing and make sure the panel is probed before calling > drm_dev_register() ? > > Regards, > > Hans > > > > > > > > After this series, drm_connector_set_panel_orientation() works like > > before. It won't affect existing callers of > > drm_connector_set_panel_orientation(). The only difference is that > > some drm drivers can call drm_connector_init_panel_orientation_property() > > earlier. > > > > Hsin-Yi Wang (4): > > gpu: drm: separate panel orientation property creating and value > > setting > > drm/mediatek: init panel orientation property > > drm/msm: init panel orientation property > > arm64: dts: mt8183: Add panel rotation > > > > .../arm64/boot/dts/mediatek/mt8183-kukui.dtsi | 1 + > > drivers/gpu/drm/drm_connector.c | 58 ++++++++++++++----- > > drivers/gpu/drm/mediatek/mtk_dsi.c | 7 +++ > > drivers/gpu/drm/msm/dsi/dsi_manager.c | 4 ++ > > include/drm/drm_connector.h | 2 + > > 5 files changed, 59 insertions(+), 13 deletions(-) > > > ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v10 0/4] Separate panel orientation property creating and value setting @ 2022-05-30 11:34 ` Hsin-Yi Wang 0 siblings, 0 replies; 69+ messages in thread From: Hsin-Yi Wang @ 2022-05-30 11:34 UTC (permalink / raw) To: Hans de Goede Cc: dri-devel, David Airlie, Daniel Vetter, amd-gfx, intel-gfx, Rob Clark, Stephen Boyd, Douglas Anderson, Chun-Kuang Hu, Sean Paul, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, linux-kernel, Rob Herring, Matthias Brugger, devicetree, linux-arm-kernel, linux-mediatek, Simon Ser, Harry Wentland, Alex Deucher, Jani Nikula, Emil Velikov On Mon, May 30, 2022 at 4:53 PM Hans de Goede <hdegoede@redhat.com> wrote: > > Hi, > > On 5/30/22 10:19, Hsin-Yi Wang wrote: > > Some drivers, eg. mtk_drm and msm_drm, rely on the panel to set the > > orientation. Panel calls drm_connector_set_panel_orientation() to create > > orientation property and sets the value. However, connector properties > > can't be created after drm_dev_register() is called. The goal is to > > separate the orientation property creation, so drm drivers can create it > > earlier before drm_dev_register(). > > Sorry for jumping in pretty late in the discussion (based on the v10 > I seem to have missed this before). > > This sounds to me like the real issue here is that drm_dev_register() > is getting called too early? > Right. > To me it seems sensible to delay calling drm_dev_register() and > thus allowing userspace to start detecting available displays + > features until after the panel has been probed. > Most panels set this value very late, in .get_modes callback (since it is when the connector is known), though the value was known during panel probe. I think we can also let drm check if they have remote panel nodes: If there is a panel and the panel sets the orientation, let the drm read this value and set the property. Does this workflow sound reasonable? The corresponding patch to implement this: https://patchwork.kernel.org/project/linux-mediatek/patch/20220530113033.124072-1-hsinyi@chromium.org/ Thanks > I see a devicetree patch in this series, so I guess that the panel > is described in devicetree. Especially in the case of devicetree > I would expect the kernel to have enough info to do the right > thing and make sure the panel is probed before calling > drm_dev_register() ? > > Regards, > > Hans > > > > > > > > After this series, drm_connector_set_panel_orientation() works like > > before. It won't affect existing callers of > > drm_connector_set_panel_orientation(). The only difference is that > > some drm drivers can call drm_connector_init_panel_orientation_property() > > earlier. > > > > Hsin-Yi Wang (4): > > gpu: drm: separate panel orientation property creating and value > > setting > > drm/mediatek: init panel orientation property > > drm/msm: init panel orientation property > > arm64: dts: mt8183: Add panel rotation > > > > .../arm64/boot/dts/mediatek/mt8183-kukui.dtsi | 1 + > > drivers/gpu/drm/drm_connector.c | 58 ++++++++++++++----- > > drivers/gpu/drm/mediatek/mtk_dsi.c | 7 +++ > > drivers/gpu/drm/msm/dsi/dsi_manager.c | 4 ++ > > include/drm/drm_connector.h | 2 + > > 5 files changed, 59 insertions(+), 13 deletions(-) > > > _______________________________________________ Linux-mediatek mailing list Linux-mediatek@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-mediatek ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v10 0/4] Separate panel orientation property creating and value setting 2022-05-30 11:34 ` Hsin-Yi Wang ` (3 preceding siblings ...) (?) @ 2022-05-31 10:56 ` Hans de Goede -1 siblings, 0 replies; 69+ messages in thread From: Hans de Goede @ 2022-05-31 10:56 UTC (permalink / raw) To: Hsin-Yi Wang Cc: dri-devel, David Airlie, Daniel Vetter, amd-gfx, intel-gfx, Rob Clark, Stephen Boyd, Douglas Anderson, Chun-Kuang Hu, Sean Paul, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, linux-kernel, Rob Herring, Matthias Brugger, devicetree, linux-arm-kernel, linux-mediatek, Simon Ser, Harry Wentland, Alex Deucher, Jani Nikula, Emil Velikov Hi, On 5/30/22 13:34, Hsin-Yi Wang wrote: > On Mon, May 30, 2022 at 4:53 PM Hans de Goede <hdegoede@redhat.com> wrote: >> >> Hi, >> >> On 5/30/22 10:19, Hsin-Yi Wang wrote: >>> Some drivers, eg. mtk_drm and msm_drm, rely on the panel to set the >>> orientation. Panel calls drm_connector_set_panel_orientation() to create >>> orientation property and sets the value. However, connector properties >>> can't be created after drm_dev_register() is called. The goal is to >>> separate the orientation property creation, so drm drivers can create it >>> earlier before drm_dev_register(). >> >> Sorry for jumping in pretty late in the discussion (based on the v10 >> I seem to have missed this before). >> >> This sounds to me like the real issue here is that drm_dev_register() >> is getting called too early? >> > Right. > >> To me it seems sensible to delay calling drm_dev_register() and >> thus allowing userspace to start detecting available displays + >> features until after the panel has been probed. >> > > Most panels set this value very late, in .get_modes callback (since it > is when the connector is known), though the value was known during > panel probe. Hmm I would expect the main drm/kms driver to register the drm_connector object after probing the panel, right ? So maybe this is a problem with the panel API? How about adding separate callback to the panel API to get the orientation, which the main drm/kms driver can then call before registering the connector ? And then have the main drm/kms driver call drm_connector_set_panel_orientation() with the returned orientation on the connecter before registering it. The new get_orientation callback for the panel should of course be optional (IOW amy be NULL), so we probably want a small helper for drivers using panel (sub)drivers to take care of the process of getting the panel orientation from the panel (if supported) and then setting it on the connector. > I think we can also let drm check if they have remote panel nodes: If > there is a panel and the panel sets the orientation, let the drm read > this value and set the property. Does this workflow sound reasonable? > > The corresponding patch to implement this: > https://patchwork.kernel.org/project/linux-mediatek/patch/20220530113033.124072-1-hsinyi@chromium.org/ That is a suprisingly small patch (which is good). I guess that my suggestion to add a new panel driver callback to get the orientation would be a bit bigget then this. Still I think that that would be a bit cleaner, as it would also solve this for cases where the orientation comes from the panel itself (through say some EDID extenstion) rather then from devicetree. Still I think either way should be acceptable upstream. Opinions from other drm devs on the above are very much welcome! Your small patch nicely avoids the probe ordering problem, so it is much better then this patch series. Regards, Hans > > Thanks > >> I see a devicetree patch in this series, so I guess that the panel >> is described in devicetree. Especially in the case of devicetree >> I would expect the kernel to have enough info to do the right >> thing and make sure the panel is probed before calling >> drm_dev_register() ? >> >> Regards, >> >> Hans >> >> >> >> >>> >>> After this series, drm_connector_set_panel_orientation() works like >>> before. It won't affect existing callers of >>> drm_connector_set_panel_orientation(). The only difference is that >>> some drm drivers can call drm_connector_init_panel_orientation_property() >>> earlier. >>> >>> Hsin-Yi Wang (4): >>> gpu: drm: separate panel orientation property creating and value >>> setting >>> drm/mediatek: init panel orientation property >>> drm/msm: init panel orientation property >>> arm64: dts: mt8183: Add panel rotation >>> >>> .../arm64/boot/dts/mediatek/mt8183-kukui.dtsi | 1 + >>> drivers/gpu/drm/drm_connector.c | 58 ++++++++++++++----- >>> drivers/gpu/drm/mediatek/mtk_dsi.c | 7 +++ >>> drivers/gpu/drm/msm/dsi/dsi_manager.c | 4 ++ >>> include/drm/drm_connector.h | 2 + >>> 5 files changed, 59 insertions(+), 13 deletions(-) >>> >> > ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v10 0/4] Separate panel orientation property creating and value setting @ 2022-05-31 10:56 ` Hans de Goede 0 siblings, 0 replies; 69+ messages in thread From: Hans de Goede @ 2022-05-31 10:56 UTC (permalink / raw) To: Hsin-Yi Wang Cc: devicetree, David Airlie, dri-devel, linux-kernel, Rob Clark, amd-gfx, Harry Wentland, Chun-Kuang Hu, Daniel Vetter, intel-gfx, Maarten Lankhorst, Maxime Ripard, Stephen Boyd, Rob Herring, linux-mediatek, Jani Nikula, Matthias Brugger, Sean Paul, linux-arm-kernel, Simon Ser, Emil Velikov, Douglas Anderson, Thomas Zimmermann, Alex Deucher Hi, On 5/30/22 13:34, Hsin-Yi Wang wrote: > On Mon, May 30, 2022 at 4:53 PM Hans de Goede <hdegoede@redhat.com> wrote: >> >> Hi, >> >> On 5/30/22 10:19, Hsin-Yi Wang wrote: >>> Some drivers, eg. mtk_drm and msm_drm, rely on the panel to set the >>> orientation. Panel calls drm_connector_set_panel_orientation() to create >>> orientation property and sets the value. However, connector properties >>> can't be created after drm_dev_register() is called. The goal is to >>> separate the orientation property creation, so drm drivers can create it >>> earlier before drm_dev_register(). >> >> Sorry for jumping in pretty late in the discussion (based on the v10 >> I seem to have missed this before). >> >> This sounds to me like the real issue here is that drm_dev_register() >> is getting called too early? >> > Right. > >> To me it seems sensible to delay calling drm_dev_register() and >> thus allowing userspace to start detecting available displays + >> features until after the panel has been probed. >> > > Most panels set this value very late, in .get_modes callback (since it > is when the connector is known), though the value was known during > panel probe. Hmm I would expect the main drm/kms driver to register the drm_connector object after probing the panel, right ? So maybe this is a problem with the panel API? How about adding separate callback to the panel API to get the orientation, which the main drm/kms driver can then call before registering the connector ? And then have the main drm/kms driver call drm_connector_set_panel_orientation() with the returned orientation on the connecter before registering it. The new get_orientation callback for the panel should of course be optional (IOW amy be NULL), so we probably want a small helper for drivers using panel (sub)drivers to take care of the process of getting the panel orientation from the panel (if supported) and then setting it on the connector. > I think we can also let drm check if they have remote panel nodes: If > there is a panel and the panel sets the orientation, let the drm read > this value and set the property. Does this workflow sound reasonable? > > The corresponding patch to implement this: > https://patchwork.kernel.org/project/linux-mediatek/patch/20220530113033.124072-1-hsinyi@chromium.org/ That is a suprisingly small patch (which is good). I guess that my suggestion to add a new panel driver callback to get the orientation would be a bit bigget then this. Still I think that that would be a bit cleaner, as it would also solve this for cases where the orientation comes from the panel itself (through say some EDID extenstion) rather then from devicetree. Still I think either way should be acceptable upstream. Opinions from other drm devs on the above are very much welcome! Your small patch nicely avoids the probe ordering problem, so it is much better then this patch series. Regards, Hans > > Thanks > >> I see a devicetree patch in this series, so I guess that the panel >> is described in devicetree. Especially in the case of devicetree >> I would expect the kernel to have enough info to do the right >> thing and make sure the panel is probed before calling >> drm_dev_register() ? >> >> Regards, >> >> Hans >> >> >> >> >>> >>> After this series, drm_connector_set_panel_orientation() works like >>> before. It won't affect existing callers of >>> drm_connector_set_panel_orientation(). The only difference is that >>> some drm drivers can call drm_connector_init_panel_orientation_property() >>> earlier. >>> >>> Hsin-Yi Wang (4): >>> gpu: drm: separate panel orientation property creating and value >>> setting >>> drm/mediatek: init panel orientation property >>> drm/msm: init panel orientation property >>> arm64: dts: mt8183: Add panel rotation >>> >>> .../arm64/boot/dts/mediatek/mt8183-kukui.dtsi | 1 + >>> drivers/gpu/drm/drm_connector.c | 58 ++++++++++++++----- >>> drivers/gpu/drm/mediatek/mtk_dsi.c | 7 +++ >>> drivers/gpu/drm/msm/dsi/dsi_manager.c | 4 ++ >>> include/drm/drm_connector.h | 2 + >>> 5 files changed, 59 insertions(+), 13 deletions(-) >>> >> > ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v10 0/4] Separate panel orientation property creating and value setting @ 2022-05-31 10:56 ` Hans de Goede 0 siblings, 0 replies; 69+ messages in thread From: Hans de Goede @ 2022-05-31 10:56 UTC (permalink / raw) To: Hsin-Yi Wang Cc: dri-devel, David Airlie, Daniel Vetter, amd-gfx, intel-gfx, Rob Clark, Stephen Boyd, Douglas Anderson, Chun-Kuang Hu, Sean Paul, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, linux-kernel, Rob Herring, Matthias Brugger, devicetree, linux-arm-kernel, linux-mediatek, Simon Ser, Harry Wentland, Alex Deucher, Jani Nikula, Emil Velikov Hi, On 5/30/22 13:34, Hsin-Yi Wang wrote: > On Mon, May 30, 2022 at 4:53 PM Hans de Goede <hdegoede@redhat.com> wrote: >> >> Hi, >> >> On 5/30/22 10:19, Hsin-Yi Wang wrote: >>> Some drivers, eg. mtk_drm and msm_drm, rely on the panel to set the >>> orientation. Panel calls drm_connector_set_panel_orientation() to create >>> orientation property and sets the value. However, connector properties >>> can't be created after drm_dev_register() is called. The goal is to >>> separate the orientation property creation, so drm drivers can create it >>> earlier before drm_dev_register(). >> >> Sorry for jumping in pretty late in the discussion (based on the v10 >> I seem to have missed this before). >> >> This sounds to me like the real issue here is that drm_dev_register() >> is getting called too early? >> > Right. > >> To me it seems sensible to delay calling drm_dev_register() and >> thus allowing userspace to start detecting available displays + >> features until after the panel has been probed. >> > > Most panels set this value very late, in .get_modes callback (since it > is when the connector is known), though the value was known during > panel probe. Hmm I would expect the main drm/kms driver to register the drm_connector object after probing the panel, right ? So maybe this is a problem with the panel API? How about adding separate callback to the panel API to get the orientation, which the main drm/kms driver can then call before registering the connector ? And then have the main drm/kms driver call drm_connector_set_panel_orientation() with the returned orientation on the connecter before registering it. The new get_orientation callback for the panel should of course be optional (IOW amy be NULL), so we probably want a small helper for drivers using panel (sub)drivers to take care of the process of getting the panel orientation from the panel (if supported) and then setting it on the connector. > I think we can also let drm check if they have remote panel nodes: If > there is a panel and the panel sets the orientation, let the drm read > this value and set the property. Does this workflow sound reasonable? > > The corresponding patch to implement this: > https://patchwork.kernel.org/project/linux-mediatek/patch/20220530113033.124072-1-hsinyi@chromium.org/ That is a suprisingly small patch (which is good). I guess that my suggestion to add a new panel driver callback to get the orientation would be a bit bigget then this. Still I think that that would be a bit cleaner, as it would also solve this for cases where the orientation comes from the panel itself (through say some EDID extenstion) rather then from devicetree. Still I think either way should be acceptable upstream. Opinions from other drm devs on the above are very much welcome! Your small patch nicely avoids the probe ordering problem, so it is much better then this patch series. Regards, Hans > > Thanks > >> I see a devicetree patch in this series, so I guess that the panel >> is described in devicetree. Especially in the case of devicetree >> I would expect the kernel to have enough info to do the right >> thing and make sure the panel is probed before calling >> drm_dev_register() ? >> >> Regards, >> >> Hans >> >> >> >> >>> >>> After this series, drm_connector_set_panel_orientation() works like >>> before. It won't affect existing callers of >>> drm_connector_set_panel_orientation(). The only difference is that >>> some drm drivers can call drm_connector_init_panel_orientation_property() >>> earlier. >>> >>> Hsin-Yi Wang (4): >>> gpu: drm: separate panel orientation property creating and value >>> setting >>> drm/mediatek: init panel orientation property >>> drm/msm: init panel orientation property >>> arm64: dts: mt8183: Add panel rotation >>> >>> .../arm64/boot/dts/mediatek/mt8183-kukui.dtsi | 1 + >>> drivers/gpu/drm/drm_connector.c | 58 ++++++++++++++----- >>> drivers/gpu/drm/mediatek/mtk_dsi.c | 7 +++ >>> drivers/gpu/drm/msm/dsi/dsi_manager.c | 4 ++ >>> include/drm/drm_connector.h | 2 + >>> 5 files changed, 59 insertions(+), 13 deletions(-) >>> >> > _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v10 0/4] Separate panel orientation property creating and value setting @ 2022-05-31 10:56 ` Hans de Goede 0 siblings, 0 replies; 69+ messages in thread From: Hans de Goede @ 2022-05-31 10:56 UTC (permalink / raw) To: Hsin-Yi Wang Cc: dri-devel, David Airlie, Daniel Vetter, amd-gfx, intel-gfx, Rob Clark, Stephen Boyd, Douglas Anderson, Chun-Kuang Hu, Sean Paul, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, linux-kernel, Rob Herring, Matthias Brugger, devicetree, linux-arm-kernel, linux-mediatek, Simon Ser, Harry Wentland, Alex Deucher, Jani Nikula, Emil Velikov Hi, On 5/30/22 13:34, Hsin-Yi Wang wrote: > On Mon, May 30, 2022 at 4:53 PM Hans de Goede <hdegoede@redhat.com> wrote: >> >> Hi, >> >> On 5/30/22 10:19, Hsin-Yi Wang wrote: >>> Some drivers, eg. mtk_drm and msm_drm, rely on the panel to set the >>> orientation. Panel calls drm_connector_set_panel_orientation() to create >>> orientation property and sets the value. However, connector properties >>> can't be created after drm_dev_register() is called. The goal is to >>> separate the orientation property creation, so drm drivers can create it >>> earlier before drm_dev_register(). >> >> Sorry for jumping in pretty late in the discussion (based on the v10 >> I seem to have missed this before). >> >> This sounds to me like the real issue here is that drm_dev_register() >> is getting called too early? >> > Right. > >> To me it seems sensible to delay calling drm_dev_register() and >> thus allowing userspace to start detecting available displays + >> features until after the panel has been probed. >> > > Most panels set this value very late, in .get_modes callback (since it > is when the connector is known), though the value was known during > panel probe. Hmm I would expect the main drm/kms driver to register the drm_connector object after probing the panel, right ? So maybe this is a problem with the panel API? How about adding separate callback to the panel API to get the orientation, which the main drm/kms driver can then call before registering the connector ? And then have the main drm/kms driver call drm_connector_set_panel_orientation() with the returned orientation on the connecter before registering it. The new get_orientation callback for the panel should of course be optional (IOW amy be NULL), so we probably want a small helper for drivers using panel (sub)drivers to take care of the process of getting the panel orientation from the panel (if supported) and then setting it on the connector. > I think we can also let drm check if they have remote panel nodes: If > there is a panel and the panel sets the orientation, let the drm read > this value and set the property. Does this workflow sound reasonable? > > The corresponding patch to implement this: > https://patchwork.kernel.org/project/linux-mediatek/patch/20220530113033.124072-1-hsinyi@chromium.org/ That is a suprisingly small patch (which is good). I guess that my suggestion to add a new panel driver callback to get the orientation would be a bit bigget then this. Still I think that that would be a bit cleaner, as it would also solve this for cases where the orientation comes from the panel itself (through say some EDID extenstion) rather then from devicetree. Still I think either way should be acceptable upstream. Opinions from other drm devs on the above are very much welcome! Your small patch nicely avoids the probe ordering problem, so it is much better then this patch series. Regards, Hans > > Thanks > >> I see a devicetree patch in this series, so I guess that the panel >> is described in devicetree. Especially in the case of devicetree >> I would expect the kernel to have enough info to do the right >> thing and make sure the panel is probed before calling >> drm_dev_register() ? >> >> Regards, >> >> Hans >> >> >> >> >>> >>> After this series, drm_connector_set_panel_orientation() works like >>> before. It won't affect existing callers of >>> drm_connector_set_panel_orientation(). The only difference is that >>> some drm drivers can call drm_connector_init_panel_orientation_property() >>> earlier. >>> >>> Hsin-Yi Wang (4): >>> gpu: drm: separate panel orientation property creating and value >>> setting >>> drm/mediatek: init panel orientation property >>> drm/msm: init panel orientation property >>> arm64: dts: mt8183: Add panel rotation >>> >>> .../arm64/boot/dts/mediatek/mt8183-kukui.dtsi | 1 + >>> drivers/gpu/drm/drm_connector.c | 58 ++++++++++++++----- >>> drivers/gpu/drm/mediatek/mtk_dsi.c | 7 +++ >>> drivers/gpu/drm/msm/dsi/dsi_manager.c | 4 ++ >>> include/drm/drm_connector.h | 2 + >>> 5 files changed, 59 insertions(+), 13 deletions(-) >>> >> > _______________________________________________ Linux-mediatek mailing list Linux-mediatek@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-mediatek ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [Intel-gfx] [PATCH v10 0/4] Separate panel orientation property creating and value setting @ 2022-05-31 10:56 ` Hans de Goede 0 siblings, 0 replies; 69+ messages in thread From: Hans de Goede @ 2022-05-31 10:56 UTC (permalink / raw) To: Hsin-Yi Wang Cc: devicetree, David Airlie, dri-devel, linux-kernel, Rob Clark, amd-gfx, Harry Wentland, Chun-Kuang Hu, intel-gfx, Maxime Ripard, Stephen Boyd, Rob Herring, linux-mediatek, Matthias Brugger, linux-arm-kernel, Simon Ser, Douglas Anderson, Thomas Zimmermann, Alex Deucher Hi, On 5/30/22 13:34, Hsin-Yi Wang wrote: > On Mon, May 30, 2022 at 4:53 PM Hans de Goede <hdegoede@redhat.com> wrote: >> >> Hi, >> >> On 5/30/22 10:19, Hsin-Yi Wang wrote: >>> Some drivers, eg. mtk_drm and msm_drm, rely on the panel to set the >>> orientation. Panel calls drm_connector_set_panel_orientation() to create >>> orientation property and sets the value. However, connector properties >>> can't be created after drm_dev_register() is called. The goal is to >>> separate the orientation property creation, so drm drivers can create it >>> earlier before drm_dev_register(). >> >> Sorry for jumping in pretty late in the discussion (based on the v10 >> I seem to have missed this before). >> >> This sounds to me like the real issue here is that drm_dev_register() >> is getting called too early? >> > Right. > >> To me it seems sensible to delay calling drm_dev_register() and >> thus allowing userspace to start detecting available displays + >> features until after the panel has been probed. >> > > Most panels set this value very late, in .get_modes callback (since it > is when the connector is known), though the value was known during > panel probe. Hmm I would expect the main drm/kms driver to register the drm_connector object after probing the panel, right ? So maybe this is a problem with the panel API? How about adding separate callback to the panel API to get the orientation, which the main drm/kms driver can then call before registering the connector ? And then have the main drm/kms driver call drm_connector_set_panel_orientation() with the returned orientation on the connecter before registering it. The new get_orientation callback for the panel should of course be optional (IOW amy be NULL), so we probably want a small helper for drivers using panel (sub)drivers to take care of the process of getting the panel orientation from the panel (if supported) and then setting it on the connector. > I think we can also let drm check if they have remote panel nodes: If > there is a panel and the panel sets the orientation, let the drm read > this value and set the property. Does this workflow sound reasonable? > > The corresponding patch to implement this: > https://patchwork.kernel.org/project/linux-mediatek/patch/20220530113033.124072-1-hsinyi@chromium.org/ That is a suprisingly small patch (which is good). I guess that my suggestion to add a new panel driver callback to get the orientation would be a bit bigget then this. Still I think that that would be a bit cleaner, as it would also solve this for cases where the orientation comes from the panel itself (through say some EDID extenstion) rather then from devicetree. Still I think either way should be acceptable upstream. Opinions from other drm devs on the above are very much welcome! Your small patch nicely avoids the probe ordering problem, so it is much better then this patch series. Regards, Hans > > Thanks > >> I see a devicetree patch in this series, so I guess that the panel >> is described in devicetree. Especially in the case of devicetree >> I would expect the kernel to have enough info to do the right >> thing and make sure the panel is probed before calling >> drm_dev_register() ? >> >> Regards, >> >> Hans >> >> >> >> >>> >>> After this series, drm_connector_set_panel_orientation() works like >>> before. It won't affect existing callers of >>> drm_connector_set_panel_orientation(). The only difference is that >>> some drm drivers can call drm_connector_init_panel_orientation_property() >>> earlier. >>> >>> Hsin-Yi Wang (4): >>> gpu: drm: separate panel orientation property creating and value >>> setting >>> drm/mediatek: init panel orientation property >>> drm/msm: init panel orientation property >>> arm64: dts: mt8183: Add panel rotation >>> >>> .../arm64/boot/dts/mediatek/mt8183-kukui.dtsi | 1 + >>> drivers/gpu/drm/drm_connector.c | 58 ++++++++++++++----- >>> drivers/gpu/drm/mediatek/mtk_dsi.c | 7 +++ >>> drivers/gpu/drm/msm/dsi/dsi_manager.c | 4 ++ >>> include/drm/drm_connector.h | 2 + >>> 5 files changed, 59 insertions(+), 13 deletions(-) >>> >> > ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v10 0/4] Separate panel orientation property creating and value setting @ 2022-05-31 10:56 ` Hans de Goede 0 siblings, 0 replies; 69+ messages in thread From: Hans de Goede @ 2022-05-31 10:56 UTC (permalink / raw) To: Hsin-Yi Wang Cc: devicetree, David Airlie, dri-devel, linux-kernel, Rob Clark, amd-gfx, Chun-Kuang Hu, intel-gfx, Stephen Boyd, Rob Herring, linux-mediatek, Matthias Brugger, Sean Paul, linux-arm-kernel, Emil Velikov, Douglas Anderson, Thomas Zimmermann, Alex Deucher Hi, On 5/30/22 13:34, Hsin-Yi Wang wrote: > On Mon, May 30, 2022 at 4:53 PM Hans de Goede <hdegoede@redhat.com> wrote: >> >> Hi, >> >> On 5/30/22 10:19, Hsin-Yi Wang wrote: >>> Some drivers, eg. mtk_drm and msm_drm, rely on the panel to set the >>> orientation. Panel calls drm_connector_set_panel_orientation() to create >>> orientation property and sets the value. However, connector properties >>> can't be created after drm_dev_register() is called. The goal is to >>> separate the orientation property creation, so drm drivers can create it >>> earlier before drm_dev_register(). >> >> Sorry for jumping in pretty late in the discussion (based on the v10 >> I seem to have missed this before). >> >> This sounds to me like the real issue here is that drm_dev_register() >> is getting called too early? >> > Right. > >> To me it seems sensible to delay calling drm_dev_register() and >> thus allowing userspace to start detecting available displays + >> features until after the panel has been probed. >> > > Most panels set this value very late, in .get_modes callback (since it > is when the connector is known), though the value was known during > panel probe. Hmm I would expect the main drm/kms driver to register the drm_connector object after probing the panel, right ? So maybe this is a problem with the panel API? How about adding separate callback to the panel API to get the orientation, which the main drm/kms driver can then call before registering the connector ? And then have the main drm/kms driver call drm_connector_set_panel_orientation() with the returned orientation on the connecter before registering it. The new get_orientation callback for the panel should of course be optional (IOW amy be NULL), so we probably want a small helper for drivers using panel (sub)drivers to take care of the process of getting the panel orientation from the panel (if supported) and then setting it on the connector. > I think we can also let drm check if they have remote panel nodes: If > there is a panel and the panel sets the orientation, let the drm read > this value and set the property. Does this workflow sound reasonable? > > The corresponding patch to implement this: > https://patchwork.kernel.org/project/linux-mediatek/patch/20220530113033.124072-1-hsinyi@chromium.org/ That is a suprisingly small patch (which is good). I guess that my suggestion to add a new panel driver callback to get the orientation would be a bit bigget then this. Still I think that that would be a bit cleaner, as it would also solve this for cases where the orientation comes from the panel itself (through say some EDID extenstion) rather then from devicetree. Still I think either way should be acceptable upstream. Opinions from other drm devs on the above are very much welcome! Your small patch nicely avoids the probe ordering problem, so it is much better then this patch series. Regards, Hans > > Thanks > >> I see a devicetree patch in this series, so I guess that the panel >> is described in devicetree. Especially in the case of devicetree >> I would expect the kernel to have enough info to do the right >> thing and make sure the panel is probed before calling >> drm_dev_register() ? >> >> Regards, >> >> Hans >> >> >> >> >>> >>> After this series, drm_connector_set_panel_orientation() works like >>> before. It won't affect existing callers of >>> drm_connector_set_panel_orientation(). The only difference is that >>> some drm drivers can call drm_connector_init_panel_orientation_property() >>> earlier. >>> >>> Hsin-Yi Wang (4): >>> gpu: drm: separate panel orientation property creating and value >>> setting >>> drm/mediatek: init panel orientation property >>> drm/msm: init panel orientation property >>> arm64: dts: mt8183: Add panel rotation >>> >>> .../arm64/boot/dts/mediatek/mt8183-kukui.dtsi | 1 + >>> drivers/gpu/drm/drm_connector.c | 58 ++++++++++++++----- >>> drivers/gpu/drm/mediatek/mtk_dsi.c | 7 +++ >>> drivers/gpu/drm/msm/dsi/dsi_manager.c | 4 ++ >>> include/drm/drm_connector.h | 2 + >>> 5 files changed, 59 insertions(+), 13 deletions(-) >>> >> > ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v10 0/4] Separate panel orientation property creating and value setting 2022-05-31 10:56 ` Hans de Goede ` (3 preceding siblings ...) (?) @ 2022-06-01 8:26 ` Hsin-Yi Wang -1 siblings, 0 replies; 69+ messages in thread From: Hsin-Yi Wang @ 2022-06-01 8:26 UTC (permalink / raw) To: Hans de Goede Cc: dri-devel, David Airlie, Daniel Vetter, amd-gfx, intel-gfx, Rob Clark, Stephen Boyd, Douglas Anderson, Chun-Kuang Hu, Sean Paul, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, linux-kernel, Rob Herring, Matthias Brugger, devicetree, linux-arm-kernel, linux-mediatek, Simon Ser, Harry Wentland, Alex Deucher, Jani Nikula, Emil Velikov On Tue, May 31, 2022 at 6:56 PM Hans de Goede <hdegoede@redhat.com> wrote: > > Hi, > > On 5/30/22 13:34, Hsin-Yi Wang wrote: > > On Mon, May 30, 2022 at 4:53 PM Hans de Goede <hdegoede@redhat.com> wrote: > >> > >> Hi, > >> > >> On 5/30/22 10:19, Hsin-Yi Wang wrote: > >>> Some drivers, eg. mtk_drm and msm_drm, rely on the panel to set the > >>> orientation. Panel calls drm_connector_set_panel_orientation() to create > >>> orientation property and sets the value. However, connector properties > >>> can't be created after drm_dev_register() is called. The goal is to > >>> separate the orientation property creation, so drm drivers can create it > >>> earlier before drm_dev_register(). > >> > >> Sorry for jumping in pretty late in the discussion (based on the v10 > >> I seem to have missed this before). > >> > >> This sounds to me like the real issue here is that drm_dev_register() > >> is getting called too early? > >> > > Right. > > > >> To me it seems sensible to delay calling drm_dev_register() and > >> thus allowing userspace to start detecting available displays + > >> features until after the panel has been probed. > >> > > > > Most panels set this value very late, in .get_modes callback (since it > > is when the connector is known), though the value was known during > > panel probe. > > Hmm I would expect the main drm/kms driver to register the drm_connector > object after probing the panel, right ? > > So maybe this is a problem with the panel API? How about adding > separate callback to the panel API to get the orientation, which the > main drm/kms driver can then call before registering the connector ? > > And then have the main drm/kms driver call > drm_connector_set_panel_orientation() with the returned orientation > on the connecter before registering it. > > The new get_orientation callback for the panel should of course > be optional (IOW amy be NULL), so we probably want a small > helper for drivers using panel (sub)drivers to take care of > the process of getting the panel orientation from the panel > (if supported) and then setting it on the connector. > Hi Hans, Thanks for the suggestion. I've sent a new version for this: https://patchwork.kernel.org/project/dri-devel/patch/20220601081823.1038797-2-hsinyi@chromium.org/ Panel can implement the optional callback to return the orientation property, while drm/kms driver will call a drm API to get the value then they can call drm_connector_set_panel_orientation(). Panel .get_mode will still call drm_connector_set_panel_orientation() but now it will be a no-op as the value was set by drm/kms driver previously. This is similar to the small patch below: https://patchwork.kernel.org/project/linux-mediatek/patch/20220530113033.124072-1-hsinyi@chromium.org/ But it's now using the panel API. > > > I think we can also let drm check if they have remote panel nodes: If > > there is a panel and the panel sets the orientation, let the drm read > > this value and set the property. Does this workflow sound reasonable? > > > > The corresponding patch to implement this: > > https://patchwork.kernel.org/project/linux-mediatek/patch/20220530113033.124072-1-hsinyi@chromium.org/ > > That is a suprisingly small patch (which is good). I guess that > my suggestion to add a new panel driver callback to get > the orientation would be a bit bigget then this. Still I think > that that would be a bit cleaner, as it would also solve this > for cases where the orientation comes from the panel itself > (through say some EDID extenstion) rather then from devicetree. > > Still I think either way should be acceptable upstream. > > Opinions from other drm devs on the above are very much welcome! > > Your small patch nicely avoids the probe ordering problem, > so it is much better then this patch series. > > Regards, > > Hans > > > > > > > Thanks > > > >> I see a devicetree patch in this series, so I guess that the panel > >> is described in devicetree. Especially in the case of devicetree > >> I would expect the kernel to have enough info to do the right > >> thing and make sure the panel is probed before calling > >> drm_dev_register() ? > >> > >> Regards, > >> > >> Hans > >> > >> > >> > >> > >>> > >>> After this series, drm_connector_set_panel_orientation() works like > >>> before. It won't affect existing callers of > >>> drm_connector_set_panel_orientation(). The only difference is that > >>> some drm drivers can call drm_connector_init_panel_orientation_property() > >>> earlier. > >>> > >>> Hsin-Yi Wang (4): > >>> gpu: drm: separate panel orientation property creating and value > >>> setting > >>> drm/mediatek: init panel orientation property > >>> drm/msm: init panel orientation property > >>> arm64: dts: mt8183: Add panel rotation > >>> > >>> .../arm64/boot/dts/mediatek/mt8183-kukui.dtsi | 1 + > >>> drivers/gpu/drm/drm_connector.c | 58 ++++++++++++++----- > >>> drivers/gpu/drm/mediatek/mtk_dsi.c | 7 +++ > >>> drivers/gpu/drm/msm/dsi/dsi_manager.c | 4 ++ > >>> include/drm/drm_connector.h | 2 + > >>> 5 files changed, 59 insertions(+), 13 deletions(-) > >>> > >> > > > ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v10 0/4] Separate panel orientation property creating and value setting @ 2022-06-01 8:26 ` Hsin-Yi Wang 0 siblings, 0 replies; 69+ messages in thread From: Hsin-Yi Wang @ 2022-06-01 8:26 UTC (permalink / raw) To: Hans de Goede Cc: devicetree, David Airlie, dri-devel, linux-kernel, Rob Clark, amd-gfx, Harry Wentland, Chun-Kuang Hu, Daniel Vetter, intel-gfx, Maarten Lankhorst, Maxime Ripard, Stephen Boyd, Rob Herring, linux-mediatek, Jani Nikula, Matthias Brugger, Sean Paul, linux-arm-kernel, Simon Ser, Emil Velikov, Douglas Anderson, Thomas Zimmermann, Alex Deucher On Tue, May 31, 2022 at 6:56 PM Hans de Goede <hdegoede@redhat.com> wrote: > > Hi, > > On 5/30/22 13:34, Hsin-Yi Wang wrote: > > On Mon, May 30, 2022 at 4:53 PM Hans de Goede <hdegoede@redhat.com> wrote: > >> > >> Hi, > >> > >> On 5/30/22 10:19, Hsin-Yi Wang wrote: > >>> Some drivers, eg. mtk_drm and msm_drm, rely on the panel to set the > >>> orientation. Panel calls drm_connector_set_panel_orientation() to create > >>> orientation property and sets the value. However, connector properties > >>> can't be created after drm_dev_register() is called. The goal is to > >>> separate the orientation property creation, so drm drivers can create it > >>> earlier before drm_dev_register(). > >> > >> Sorry for jumping in pretty late in the discussion (based on the v10 > >> I seem to have missed this before). > >> > >> This sounds to me like the real issue here is that drm_dev_register() > >> is getting called too early? > >> > > Right. > > > >> To me it seems sensible to delay calling drm_dev_register() and > >> thus allowing userspace to start detecting available displays + > >> features until after the panel has been probed. > >> > > > > Most panels set this value very late, in .get_modes callback (since it > > is when the connector is known), though the value was known during > > panel probe. > > Hmm I would expect the main drm/kms driver to register the drm_connector > object after probing the panel, right ? > > So maybe this is a problem with the panel API? How about adding > separate callback to the panel API to get the orientation, which the > main drm/kms driver can then call before registering the connector ? > > And then have the main drm/kms driver call > drm_connector_set_panel_orientation() with the returned orientation > on the connecter before registering it. > > The new get_orientation callback for the panel should of course > be optional (IOW amy be NULL), so we probably want a small > helper for drivers using panel (sub)drivers to take care of > the process of getting the panel orientation from the panel > (if supported) and then setting it on the connector. > Hi Hans, Thanks for the suggestion. I've sent a new version for this: https://patchwork.kernel.org/project/dri-devel/patch/20220601081823.1038797-2-hsinyi@chromium.org/ Panel can implement the optional callback to return the orientation property, while drm/kms driver will call a drm API to get the value then they can call drm_connector_set_panel_orientation(). Panel .get_mode will still call drm_connector_set_panel_orientation() but now it will be a no-op as the value was set by drm/kms driver previously. This is similar to the small patch below: https://patchwork.kernel.org/project/linux-mediatek/patch/20220530113033.124072-1-hsinyi@chromium.org/ But it's now using the panel API. > > > I think we can also let drm check if they have remote panel nodes: If > > there is a panel and the panel sets the orientation, let the drm read > > this value and set the property. Does this workflow sound reasonable? > > > > The corresponding patch to implement this: > > https://patchwork.kernel.org/project/linux-mediatek/patch/20220530113033.124072-1-hsinyi@chromium.org/ > > That is a suprisingly small patch (which is good). I guess that > my suggestion to add a new panel driver callback to get > the orientation would be a bit bigget then this. Still I think > that that would be a bit cleaner, as it would also solve this > for cases where the orientation comes from the panel itself > (through say some EDID extenstion) rather then from devicetree. > > Still I think either way should be acceptable upstream. > > Opinions from other drm devs on the above are very much welcome! > > Your small patch nicely avoids the probe ordering problem, > so it is much better then this patch series. > > Regards, > > Hans > > > > > > > Thanks > > > >> I see a devicetree patch in this series, so I guess that the panel > >> is described in devicetree. Especially in the case of devicetree > >> I would expect the kernel to have enough info to do the right > >> thing and make sure the panel is probed before calling > >> drm_dev_register() ? > >> > >> Regards, > >> > >> Hans > >> > >> > >> > >> > >>> > >>> After this series, drm_connector_set_panel_orientation() works like > >>> before. It won't affect existing callers of > >>> drm_connector_set_panel_orientation(). The only difference is that > >>> some drm drivers can call drm_connector_init_panel_orientation_property() > >>> earlier. > >>> > >>> Hsin-Yi Wang (4): > >>> gpu: drm: separate panel orientation property creating and value > >>> setting > >>> drm/mediatek: init panel orientation property > >>> drm/msm: init panel orientation property > >>> arm64: dts: mt8183: Add panel rotation > >>> > >>> .../arm64/boot/dts/mediatek/mt8183-kukui.dtsi | 1 + > >>> drivers/gpu/drm/drm_connector.c | 58 ++++++++++++++----- > >>> drivers/gpu/drm/mediatek/mtk_dsi.c | 7 +++ > >>> drivers/gpu/drm/msm/dsi/dsi_manager.c | 4 ++ > >>> include/drm/drm_connector.h | 2 + > >>> 5 files changed, 59 insertions(+), 13 deletions(-) > >>> > >> > > > ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v10 0/4] Separate panel orientation property creating and value setting @ 2022-06-01 8:26 ` Hsin-Yi Wang 0 siblings, 0 replies; 69+ messages in thread From: Hsin-Yi Wang @ 2022-06-01 8:26 UTC (permalink / raw) To: Hans de Goede Cc: dri-devel, David Airlie, Daniel Vetter, amd-gfx, intel-gfx, Rob Clark, Stephen Boyd, Douglas Anderson, Chun-Kuang Hu, Sean Paul, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, linux-kernel, Rob Herring, Matthias Brugger, devicetree, linux-arm-kernel, linux-mediatek, Simon Ser, Harry Wentland, Alex Deucher, Jani Nikula, Emil Velikov On Tue, May 31, 2022 at 6:56 PM Hans de Goede <hdegoede@redhat.com> wrote: > > Hi, > > On 5/30/22 13:34, Hsin-Yi Wang wrote: > > On Mon, May 30, 2022 at 4:53 PM Hans de Goede <hdegoede@redhat.com> wrote: > >> > >> Hi, > >> > >> On 5/30/22 10:19, Hsin-Yi Wang wrote: > >>> Some drivers, eg. mtk_drm and msm_drm, rely on the panel to set the > >>> orientation. Panel calls drm_connector_set_panel_orientation() to create > >>> orientation property and sets the value. However, connector properties > >>> can't be created after drm_dev_register() is called. The goal is to > >>> separate the orientation property creation, so drm drivers can create it > >>> earlier before drm_dev_register(). > >> > >> Sorry for jumping in pretty late in the discussion (based on the v10 > >> I seem to have missed this before). > >> > >> This sounds to me like the real issue here is that drm_dev_register() > >> is getting called too early? > >> > > Right. > > > >> To me it seems sensible to delay calling drm_dev_register() and > >> thus allowing userspace to start detecting available displays + > >> features until after the panel has been probed. > >> > > > > Most panels set this value very late, in .get_modes callback (since it > > is when the connector is known), though the value was known during > > panel probe. > > Hmm I would expect the main drm/kms driver to register the drm_connector > object after probing the panel, right ? > > So maybe this is a problem with the panel API? How about adding > separate callback to the panel API to get the orientation, which the > main drm/kms driver can then call before registering the connector ? > > And then have the main drm/kms driver call > drm_connector_set_panel_orientation() with the returned orientation > on the connecter before registering it. > > The new get_orientation callback for the panel should of course > be optional (IOW amy be NULL), so we probably want a small > helper for drivers using panel (sub)drivers to take care of > the process of getting the panel orientation from the panel > (if supported) and then setting it on the connector. > Hi Hans, Thanks for the suggestion. I've sent a new version for this: https://patchwork.kernel.org/project/dri-devel/patch/20220601081823.1038797-2-hsinyi@chromium.org/ Panel can implement the optional callback to return the orientation property, while drm/kms driver will call a drm API to get the value then they can call drm_connector_set_panel_orientation(). Panel .get_mode will still call drm_connector_set_panel_orientation() but now it will be a no-op as the value was set by drm/kms driver previously. This is similar to the small patch below: https://patchwork.kernel.org/project/linux-mediatek/patch/20220530113033.124072-1-hsinyi@chromium.org/ But it's now using the panel API. > > > I think we can also let drm check if they have remote panel nodes: If > > there is a panel and the panel sets the orientation, let the drm read > > this value and set the property. Does this workflow sound reasonable? > > > > The corresponding patch to implement this: > > https://patchwork.kernel.org/project/linux-mediatek/patch/20220530113033.124072-1-hsinyi@chromium.org/ > > That is a suprisingly small patch (which is good). I guess that > my suggestion to add a new panel driver callback to get > the orientation would be a bit bigget then this. Still I think > that that would be a bit cleaner, as it would also solve this > for cases where the orientation comes from the panel itself > (through say some EDID extenstion) rather then from devicetree. > > Still I think either way should be acceptable upstream. > > Opinions from other drm devs on the above are very much welcome! > > Your small patch nicely avoids the probe ordering problem, > so it is much better then this patch series. > > Regards, > > Hans > > > > > > > Thanks > > > >> I see a devicetree patch in this series, so I guess that the panel > >> is described in devicetree. Especially in the case of devicetree > >> I would expect the kernel to have enough info to do the right > >> thing and make sure the panel is probed before calling > >> drm_dev_register() ? > >> > >> Regards, > >> > >> Hans > >> > >> > >> > >> > >>> > >>> After this series, drm_connector_set_panel_orientation() works like > >>> before. It won't affect existing callers of > >>> drm_connector_set_panel_orientation(). The only difference is that > >>> some drm drivers can call drm_connector_init_panel_orientation_property() > >>> earlier. > >>> > >>> Hsin-Yi Wang (4): > >>> gpu: drm: separate panel orientation property creating and value > >>> setting > >>> drm/mediatek: init panel orientation property > >>> drm/msm: init panel orientation property > >>> arm64: dts: mt8183: Add panel rotation > >>> > >>> .../arm64/boot/dts/mediatek/mt8183-kukui.dtsi | 1 + > >>> drivers/gpu/drm/drm_connector.c | 58 ++++++++++++++----- > >>> drivers/gpu/drm/mediatek/mtk_dsi.c | 7 +++ > >>> drivers/gpu/drm/msm/dsi/dsi_manager.c | 4 ++ > >>> include/drm/drm_connector.h | 2 + > >>> 5 files changed, 59 insertions(+), 13 deletions(-) > >>> > >> > > > _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [Intel-gfx] [PATCH v10 0/4] Separate panel orientation property creating and value setting @ 2022-06-01 8:26 ` Hsin-Yi Wang 0 siblings, 0 replies; 69+ messages in thread From: Hsin-Yi Wang @ 2022-06-01 8:26 UTC (permalink / raw) To: Hans de Goede Cc: devicetree, David Airlie, dri-devel, linux-kernel, Rob Clark, amd-gfx, Harry Wentland, Chun-Kuang Hu, intel-gfx, Maxime Ripard, Stephen Boyd, Rob Herring, linux-mediatek, Matthias Brugger, linux-arm-kernel, Simon Ser, Douglas Anderson, Thomas Zimmermann, Alex Deucher On Tue, May 31, 2022 at 6:56 PM Hans de Goede <hdegoede@redhat.com> wrote: > > Hi, > > On 5/30/22 13:34, Hsin-Yi Wang wrote: > > On Mon, May 30, 2022 at 4:53 PM Hans de Goede <hdegoede@redhat.com> wrote: > >> > >> Hi, > >> > >> On 5/30/22 10:19, Hsin-Yi Wang wrote: > >>> Some drivers, eg. mtk_drm and msm_drm, rely on the panel to set the > >>> orientation. Panel calls drm_connector_set_panel_orientation() to create > >>> orientation property and sets the value. However, connector properties > >>> can't be created after drm_dev_register() is called. The goal is to > >>> separate the orientation property creation, so drm drivers can create it > >>> earlier before drm_dev_register(). > >> > >> Sorry for jumping in pretty late in the discussion (based on the v10 > >> I seem to have missed this before). > >> > >> This sounds to me like the real issue here is that drm_dev_register() > >> is getting called too early? > >> > > Right. > > > >> To me it seems sensible to delay calling drm_dev_register() and > >> thus allowing userspace to start detecting available displays + > >> features until after the panel has been probed. > >> > > > > Most panels set this value very late, in .get_modes callback (since it > > is when the connector is known), though the value was known during > > panel probe. > > Hmm I would expect the main drm/kms driver to register the drm_connector > object after probing the panel, right ? > > So maybe this is a problem with the panel API? How about adding > separate callback to the panel API to get the orientation, which the > main drm/kms driver can then call before registering the connector ? > > And then have the main drm/kms driver call > drm_connector_set_panel_orientation() with the returned orientation > on the connecter before registering it. > > The new get_orientation callback for the panel should of course > be optional (IOW amy be NULL), so we probably want a small > helper for drivers using panel (sub)drivers to take care of > the process of getting the panel orientation from the panel > (if supported) and then setting it on the connector. > Hi Hans, Thanks for the suggestion. I've sent a new version for this: https://patchwork.kernel.org/project/dri-devel/patch/20220601081823.1038797-2-hsinyi@chromium.org/ Panel can implement the optional callback to return the orientation property, while drm/kms driver will call a drm API to get the value then they can call drm_connector_set_panel_orientation(). Panel .get_mode will still call drm_connector_set_panel_orientation() but now it will be a no-op as the value was set by drm/kms driver previously. This is similar to the small patch below: https://patchwork.kernel.org/project/linux-mediatek/patch/20220530113033.124072-1-hsinyi@chromium.org/ But it's now using the panel API. > > > I think we can also let drm check if they have remote panel nodes: If > > there is a panel and the panel sets the orientation, let the drm read > > this value and set the property. Does this workflow sound reasonable? > > > > The corresponding patch to implement this: > > https://patchwork.kernel.org/project/linux-mediatek/patch/20220530113033.124072-1-hsinyi@chromium.org/ > > That is a suprisingly small patch (which is good). I guess that > my suggestion to add a new panel driver callback to get > the orientation would be a bit bigget then this. Still I think > that that would be a bit cleaner, as it would also solve this > for cases where the orientation comes from the panel itself > (through say some EDID extenstion) rather then from devicetree. > > Still I think either way should be acceptable upstream. > > Opinions from other drm devs on the above are very much welcome! > > Your small patch nicely avoids the probe ordering problem, > so it is much better then this patch series. > > Regards, > > Hans > > > > > > > Thanks > > > >> I see a devicetree patch in this series, so I guess that the panel > >> is described in devicetree. Especially in the case of devicetree > >> I would expect the kernel to have enough info to do the right > >> thing and make sure the panel is probed before calling > >> drm_dev_register() ? > >> > >> Regards, > >> > >> Hans > >> > >> > >> > >> > >>> > >>> After this series, drm_connector_set_panel_orientation() works like > >>> before. It won't affect existing callers of > >>> drm_connector_set_panel_orientation(). The only difference is that > >>> some drm drivers can call drm_connector_init_panel_orientation_property() > >>> earlier. > >>> > >>> Hsin-Yi Wang (4): > >>> gpu: drm: separate panel orientation property creating and value > >>> setting > >>> drm/mediatek: init panel orientation property > >>> drm/msm: init panel orientation property > >>> arm64: dts: mt8183: Add panel rotation > >>> > >>> .../arm64/boot/dts/mediatek/mt8183-kukui.dtsi | 1 + > >>> drivers/gpu/drm/drm_connector.c | 58 ++++++++++++++----- > >>> drivers/gpu/drm/mediatek/mtk_dsi.c | 7 +++ > >>> drivers/gpu/drm/msm/dsi/dsi_manager.c | 4 ++ > >>> include/drm/drm_connector.h | 2 + > >>> 5 files changed, 59 insertions(+), 13 deletions(-) > >>> > >> > > > ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v10 0/4] Separate panel orientation property creating and value setting @ 2022-06-01 8:26 ` Hsin-Yi Wang 0 siblings, 0 replies; 69+ messages in thread From: Hsin-Yi Wang @ 2022-06-01 8:26 UTC (permalink / raw) To: Hans de Goede Cc: devicetree, David Airlie, dri-devel, linux-kernel, Rob Clark, amd-gfx, Chun-Kuang Hu, intel-gfx, Stephen Boyd, Rob Herring, linux-mediatek, Matthias Brugger, Sean Paul, linux-arm-kernel, Emil Velikov, Douglas Anderson, Thomas Zimmermann, Alex Deucher On Tue, May 31, 2022 at 6:56 PM Hans de Goede <hdegoede@redhat.com> wrote: > > Hi, > > On 5/30/22 13:34, Hsin-Yi Wang wrote: > > On Mon, May 30, 2022 at 4:53 PM Hans de Goede <hdegoede@redhat.com> wrote: > >> > >> Hi, > >> > >> On 5/30/22 10:19, Hsin-Yi Wang wrote: > >>> Some drivers, eg. mtk_drm and msm_drm, rely on the panel to set the > >>> orientation. Panel calls drm_connector_set_panel_orientation() to create > >>> orientation property and sets the value. However, connector properties > >>> can't be created after drm_dev_register() is called. The goal is to > >>> separate the orientation property creation, so drm drivers can create it > >>> earlier before drm_dev_register(). > >> > >> Sorry for jumping in pretty late in the discussion (based on the v10 > >> I seem to have missed this before). > >> > >> This sounds to me like the real issue here is that drm_dev_register() > >> is getting called too early? > >> > > Right. > > > >> To me it seems sensible to delay calling drm_dev_register() and > >> thus allowing userspace to start detecting available displays + > >> features until after the panel has been probed. > >> > > > > Most panels set this value very late, in .get_modes callback (since it > > is when the connector is known), though the value was known during > > panel probe. > > Hmm I would expect the main drm/kms driver to register the drm_connector > object after probing the panel, right ? > > So maybe this is a problem with the panel API? How about adding > separate callback to the panel API to get the orientation, which the > main drm/kms driver can then call before registering the connector ? > > And then have the main drm/kms driver call > drm_connector_set_panel_orientation() with the returned orientation > on the connecter before registering it. > > The new get_orientation callback for the panel should of course > be optional (IOW amy be NULL), so we probably want a small > helper for drivers using panel (sub)drivers to take care of > the process of getting the panel orientation from the panel > (if supported) and then setting it on the connector. > Hi Hans, Thanks for the suggestion. I've sent a new version for this: https://patchwork.kernel.org/project/dri-devel/patch/20220601081823.1038797-2-hsinyi@chromium.org/ Panel can implement the optional callback to return the orientation property, while drm/kms driver will call a drm API to get the value then they can call drm_connector_set_panel_orientation(). Panel .get_mode will still call drm_connector_set_panel_orientation() but now it will be a no-op as the value was set by drm/kms driver previously. This is similar to the small patch below: https://patchwork.kernel.org/project/linux-mediatek/patch/20220530113033.124072-1-hsinyi@chromium.org/ But it's now using the panel API. > > > I think we can also let drm check if they have remote panel nodes: If > > there is a panel and the panel sets the orientation, let the drm read > > this value and set the property. Does this workflow sound reasonable? > > > > The corresponding patch to implement this: > > https://patchwork.kernel.org/project/linux-mediatek/patch/20220530113033.124072-1-hsinyi@chromium.org/ > > That is a suprisingly small patch (which is good). I guess that > my suggestion to add a new panel driver callback to get > the orientation would be a bit bigget then this. Still I think > that that would be a bit cleaner, as it would also solve this > for cases where the orientation comes from the panel itself > (through say some EDID extenstion) rather then from devicetree. > > Still I think either way should be acceptable upstream. > > Opinions from other drm devs on the above are very much welcome! > > Your small patch nicely avoids the probe ordering problem, > so it is much better then this patch series. > > Regards, > > Hans > > > > > > > Thanks > > > >> I see a devicetree patch in this series, so I guess that the panel > >> is described in devicetree. Especially in the case of devicetree > >> I would expect the kernel to have enough info to do the right > >> thing and make sure the panel is probed before calling > >> drm_dev_register() ? > >> > >> Regards, > >> > >> Hans > >> > >> > >> > >> > >>> > >>> After this series, drm_connector_set_panel_orientation() works like > >>> before. It won't affect existing callers of > >>> drm_connector_set_panel_orientation(). The only difference is that > >>> some drm drivers can call drm_connector_init_panel_orientation_property() > >>> earlier. > >>> > >>> Hsin-Yi Wang (4): > >>> gpu: drm: separate panel orientation property creating and value > >>> setting > >>> drm/mediatek: init panel orientation property > >>> drm/msm: init panel orientation property > >>> arm64: dts: mt8183: Add panel rotation > >>> > >>> .../arm64/boot/dts/mediatek/mt8183-kukui.dtsi | 1 + > >>> drivers/gpu/drm/drm_connector.c | 58 ++++++++++++++----- > >>> drivers/gpu/drm/mediatek/mtk_dsi.c | 7 +++ > >>> drivers/gpu/drm/msm/dsi/dsi_manager.c | 4 ++ > >>> include/drm/drm_connector.h | 2 + > >>> 5 files changed, 59 insertions(+), 13 deletions(-) > >>> > >> > > > ^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v10 0/4] Separate panel orientation property creating and value setting @ 2022-06-01 8:26 ` Hsin-Yi Wang 0 siblings, 0 replies; 69+ messages in thread From: Hsin-Yi Wang @ 2022-06-01 8:26 UTC (permalink / raw) To: Hans de Goede Cc: dri-devel, David Airlie, Daniel Vetter, amd-gfx, intel-gfx, Rob Clark, Stephen Boyd, Douglas Anderson, Chun-Kuang Hu, Sean Paul, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, linux-kernel, Rob Herring, Matthias Brugger, devicetree, linux-arm-kernel, linux-mediatek, Simon Ser, Harry Wentland, Alex Deucher, Jani Nikula, Emil Velikov On Tue, May 31, 2022 at 6:56 PM Hans de Goede <hdegoede@redhat.com> wrote: > > Hi, > > On 5/30/22 13:34, Hsin-Yi Wang wrote: > > On Mon, May 30, 2022 at 4:53 PM Hans de Goede <hdegoede@redhat.com> wrote: > >> > >> Hi, > >> > >> On 5/30/22 10:19, Hsin-Yi Wang wrote: > >>> Some drivers, eg. mtk_drm and msm_drm, rely on the panel to set the > >>> orientation. Panel calls drm_connector_set_panel_orientation() to create > >>> orientation property and sets the value. However, connector properties > >>> can't be created after drm_dev_register() is called. The goal is to > >>> separate the orientation property creation, so drm drivers can create it > >>> earlier before drm_dev_register(). > >> > >> Sorry for jumping in pretty late in the discussion (based on the v10 > >> I seem to have missed this before). > >> > >> This sounds to me like the real issue here is that drm_dev_register() > >> is getting called too early? > >> > > Right. > > > >> To me it seems sensible to delay calling drm_dev_register() and > >> thus allowing userspace to start detecting available displays + > >> features until after the panel has been probed. > >> > > > > Most panels set this value very late, in .get_modes callback (since it > > is when the connector is known), though the value was known during > > panel probe. > > Hmm I would expect the main drm/kms driver to register the drm_connector > object after probing the panel, right ? > > So maybe this is a problem with the panel API? How about adding > separate callback to the panel API to get the orientation, which the > main drm/kms driver can then call before registering the connector ? > > And then have the main drm/kms driver call > drm_connector_set_panel_orientation() with the returned orientation > on the connecter before registering it. > > The new get_orientation callback for the panel should of course > be optional (IOW amy be NULL), so we probably want a small > helper for drivers using panel (sub)drivers to take care of > the process of getting the panel orientation from the panel > (if supported) and then setting it on the connector. > Hi Hans, Thanks for the suggestion. I've sent a new version for this: https://patchwork.kernel.org/project/dri-devel/patch/20220601081823.1038797-2-hsinyi@chromium.org/ Panel can implement the optional callback to return the orientation property, while drm/kms driver will call a drm API to get the value then they can call drm_connector_set_panel_orientation(). Panel .get_mode will still call drm_connector_set_panel_orientation() but now it will be a no-op as the value was set by drm/kms driver previously. This is similar to the small patch below: https://patchwork.kernel.org/project/linux-mediatek/patch/20220530113033.124072-1-hsinyi@chromium.org/ But it's now using the panel API. > > > I think we can also let drm check if they have remote panel nodes: If > > there is a panel and the panel sets the orientation, let the drm read > > this value and set the property. Does this workflow sound reasonable? > > > > The corresponding patch to implement this: > > https://patchwork.kernel.org/project/linux-mediatek/patch/20220530113033.124072-1-hsinyi@chromium.org/ > > That is a suprisingly small patch (which is good). I guess that > my suggestion to add a new panel driver callback to get > the orientation would be a bit bigget then this. Still I think > that that would be a bit cleaner, as it would also solve this > for cases where the orientation comes from the panel itself > (through say some EDID extenstion) rather then from devicetree. > > Still I think either way should be acceptable upstream. > > Opinions from other drm devs on the above are very much welcome! > > Your small patch nicely avoids the probe ordering problem, > so it is much better then this patch series. > > Regards, > > Hans > > > > > > > Thanks > > > >> I see a devicetree patch in this series, so I guess that the panel > >> is described in devicetree. Especially in the case of devicetree > >> I would expect the kernel to have enough info to do the right > >> thing and make sure the panel is probed before calling > >> drm_dev_register() ? > >> > >> Regards, > >> > >> Hans > >> > >> > >> > >> > >>> > >>> After this series, drm_connector_set_panel_orientation() works like > >>> before. It won't affect existing callers of > >>> drm_connector_set_panel_orientation(). The only difference is that > >>> some drm drivers can call drm_connector_init_panel_orientation_property() > >>> earlier. > >>> > >>> Hsin-Yi Wang (4): > >>> gpu: drm: separate panel orientation property creating and value > >>> setting > >>> drm/mediatek: init panel orientation property > >>> drm/msm: init panel orientation property > >>> arm64: dts: mt8183: Add panel rotation > >>> > >>> .../arm64/boot/dts/mediatek/mt8183-kukui.dtsi | 1 + > >>> drivers/gpu/drm/drm_connector.c | 58 ++++++++++++++----- > >>> drivers/gpu/drm/mediatek/mtk_dsi.c | 7 +++ > >>> drivers/gpu/drm/msm/dsi/dsi_manager.c | 4 ++ > >>> include/drm/drm_connector.h | 2 + > >>> 5 files changed, 59 insertions(+), 13 deletions(-) > >>> > >> > > > _______________________________________________ Linux-mediatek mailing list Linux-mediatek@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-mediatek ^ permalink raw reply [flat|nested] 69+ messages in thread
* [Intel-gfx] ✗ Fi.CI.BAT: failure for Separate panel orientation property creating and value setting (rev2) 2022-05-30 8:19 ` Hsin-Yi Wang ` (11 preceding siblings ...) (?) @ 2022-05-30 9:08 ` Patchwork -1 siblings, 0 replies; 69+ messages in thread From: Patchwork @ 2022-05-30 9:08 UTC (permalink / raw) To: Hsin-Yi Wang; +Cc: intel-gfx [-- Attachment #1: Type: text/plain, Size: 12974 bytes --] == Series Details == Series: Separate panel orientation property creating and value setting (rev2) URL : https://patchwork.freedesktop.org/series/101530/ State : failure == Summary == CI Bug Log - changes from CI_DRM_11705 -> Patchwork_101530v2 ==================================================== Summary ------- **FAILURE** Serious unknown changes coming with Patchwork_101530v2 absolutely need to be verified manually. If you think the reported changes have nothing to do with the changes introduced in Patchwork_101530v2, please notify your bug team to allow them to document this new failure mode, which will reduce false positives in CI. External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_101530v2/index.html Participating hosts (42 -> 46) ------------------------------ Additional (4): bat-dg2-8 fi-rkl-11600 fi-bsw-nick fi-tgl-u2 Possible new issues ------------------- Here are the unknown changes that may have been introduced in Patchwork_101530v2: ### IGT changes ### #### Possible regressions #### * igt@prime_self_import@basic-with_one_bo_two_files: - fi-kbl-soraka: [PASS][1] -> [INCOMPLETE][2] [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11705/fi-kbl-soraka/igt@prime_self_import@basic-with_one_bo_two_files.html [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_101530v2/fi-kbl-soraka/igt@prime_self_import@basic-with_one_bo_two_files.html Known issues ------------ Here are the changes found in Patchwork_101530v2 that come from known issues: ### IGT changes ### #### Issues hit #### * igt@gem_huc_copy@huc-copy: - fi-tgl-u2: NOTRUN -> [SKIP][3] ([i915#2190]) [3]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_101530v2/fi-tgl-u2/igt@gem_huc_copy@huc-copy.html - fi-rkl-11600: NOTRUN -> [SKIP][4] ([i915#2190]) [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_101530v2/fi-rkl-11600/igt@gem_huc_copy@huc-copy.html * igt@gem_lmem_swapping@basic: - fi-rkl-11600: NOTRUN -> [SKIP][5] ([i915#4613]) +3 similar issues [5]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_101530v2/fi-rkl-11600/igt@gem_lmem_swapping@basic.html * igt@gem_lmem_swapping@parallel-random-engines: - fi-bsw-nick: NOTRUN -> [SKIP][6] ([fdo#109271]) +48 similar issues [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_101530v2/fi-bsw-nick/igt@gem_lmem_swapping@parallel-random-engines.html * igt@gem_tiled_pread_basic: - fi-rkl-11600: NOTRUN -> [SKIP][7] ([i915#3282]) [7]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_101530v2/fi-rkl-11600/igt@gem_tiled_pread_basic.html * igt@i915_pm_backlight@basic-brightness: - fi-rkl-11600: NOTRUN -> [SKIP][8] ([i915#3012]) [8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_101530v2/fi-rkl-11600/igt@i915_pm_backlight@basic-brightness.html * igt@i915_selftest@live@gem: - fi-blb-e6850: NOTRUN -> [DMESG-FAIL][9] ([i915#4528]) [9]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_101530v2/fi-blb-e6850/igt@i915_selftest@live@gem.html * igt@i915_selftest@live@hangcheck: - bat-dg1-6: [PASS][10] -> [DMESG-FAIL][11] ([i915#4494] / [i915#4957]) [10]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11705/bat-dg1-6/igt@i915_selftest@live@hangcheck.html [11]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_101530v2/bat-dg1-6/igt@i915_selftest@live@hangcheck.html * igt@i915_suspend@basic-s2idle-without-i915: - fi-bdw-gvtdvm: NOTRUN -> [INCOMPLETE][12] ([i915#4817]) [12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_101530v2/fi-bdw-gvtdvm/igt@i915_suspend@basic-s2idle-without-i915.html * igt@i915_suspend@basic-s3-without-i915: - fi-rkl-11600: NOTRUN -> [INCOMPLETE][13] ([i915#5982]) [13]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_101530v2/fi-rkl-11600/igt@i915_suspend@basic-s3-without-i915.html * igt@kms_chamelium@hdmi-edid-read: - fi-tgl-u2: NOTRUN -> [SKIP][14] ([fdo#109284] / [fdo#111827]) +7 similar issues [14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_101530v2/fi-tgl-u2/igt@kms_chamelium@hdmi-edid-read.html - fi-rkl-11600: NOTRUN -> [SKIP][15] ([fdo#111827]) +7 similar issues [15]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_101530v2/fi-rkl-11600/igt@kms_chamelium@hdmi-edid-read.html * igt@kms_chamelium@hdmi-hpd-fast: - fi-bsw-nick: NOTRUN -> [SKIP][16] ([fdo#109271] / [fdo#111827]) +8 similar issues [16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_101530v2/fi-bsw-nick/igt@kms_chamelium@hdmi-hpd-fast.html * igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy: - fi-tgl-u2: NOTRUN -> [SKIP][17] ([i915#4103]) +1 similar issue [17]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_101530v2/fi-tgl-u2/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy.html - fi-rkl-11600: NOTRUN -> [SKIP][18] ([i915#4070] / [i915#4103]) +1 similar issue [18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_101530v2/fi-rkl-11600/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy.html * igt@kms_flip@basic-flip-vs-modeset@a-edp1: - fi-tgl-u2: NOTRUN -> [DMESG-WARN][19] ([i915#402]) +2 similar issues [19]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_101530v2/fi-tgl-u2/igt@kms_flip@basic-flip-vs-modeset@a-edp1.html * igt@kms_flip@basic-flip-vs-modeset@b-edp1: - bat-adlp-4: [PASS][20] -> [DMESG-WARN][21] ([i915#3576]) +1 similar issue [20]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11705/bat-adlp-4/igt@kms_flip@basic-flip-vs-modeset@b-edp1.html [21]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_101530v2/bat-adlp-4/igt@kms_flip@basic-flip-vs-modeset@b-edp1.html * igt@kms_force_connector_basic@force-load-detect: - fi-tgl-u2: NOTRUN -> [SKIP][22] ([fdo#109285]) [22]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_101530v2/fi-tgl-u2/igt@kms_force_connector_basic@force-load-detect.html - fi-rkl-11600: NOTRUN -> [SKIP][23] ([fdo#109285] / [i915#4098]) [23]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_101530v2/fi-rkl-11600/igt@kms_force_connector_basic@force-load-detect.html * igt@kms_pipe_crc_basic@compare-crc-sanitycheck-pipe-d: - fi-rkl-11600: NOTRUN -> [SKIP][24] ([i915#4070] / [i915#533]) [24]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_101530v2/fi-rkl-11600/igt@kms_pipe_crc_basic@compare-crc-sanitycheck-pipe-d.html * igt@kms_psr@primary_page_flip: - fi-rkl-11600: NOTRUN -> [SKIP][25] ([i915#1072]) +3 similar issues [25]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_101530v2/fi-rkl-11600/igt@kms_psr@primary_page_flip.html * igt@kms_setmode@basic-clone-single-crtc: - fi-rkl-11600: NOTRUN -> [SKIP][26] ([i915#3555] / [i915#4098]) [26]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_101530v2/fi-rkl-11600/igt@kms_setmode@basic-clone-single-crtc.html - fi-tgl-u2: NOTRUN -> [SKIP][27] ([i915#3555]) [27]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_101530v2/fi-tgl-u2/igt@kms_setmode@basic-clone-single-crtc.html * igt@prime_vgem@basic-read: - fi-rkl-11600: NOTRUN -> [SKIP][28] ([fdo#109295] / [i915#3291] / [i915#3708]) +2 similar issues [28]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_101530v2/fi-rkl-11600/igt@prime_vgem@basic-read.html * igt@prime_vgem@basic-userptr: - fi-tgl-u2: NOTRUN -> [SKIP][29] ([fdo#109295] / [i915#3301]) [29]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_101530v2/fi-tgl-u2/igt@prime_vgem@basic-userptr.html - fi-rkl-11600: NOTRUN -> [SKIP][30] ([fdo#109295] / [i915#3301] / [i915#3708]) [30]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_101530v2/fi-rkl-11600/igt@prime_vgem@basic-userptr.html #### Possible fixes #### * igt@i915_selftest@live@coherency: - {bat-dg2-9}: [DMESG-WARN][31] ([i915#5763]) -> [PASS][32] +5 similar issues [31]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11705/bat-dg2-9/igt@i915_selftest@live@coherency.html [32]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_101530v2/bat-dg2-9/igt@i915_selftest@live@coherency.html * igt@i915_selftest@live@execlists: - fi-bdw-gvtdvm: [INCOMPLETE][33] ([i915#2940] / [i915#5801]) -> [PASS][34] [33]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11705/fi-bdw-gvtdvm/igt@i915_selftest@live@execlists.html [34]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_101530v2/fi-bdw-gvtdvm/igt@i915_selftest@live@execlists.html * igt@i915_selftest@live@requests: - fi-blb-e6850: [DMESG-FAIL][35] ([i915#4528]) -> [PASS][36] [35]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11705/fi-blb-e6850/igt@i915_selftest@live@requests.html [36]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_101530v2/fi-blb-e6850/igt@i915_selftest@live@requests.html * igt@kms_busy@basic@flip: - bat-adlp-4: [DMESG-WARN][37] ([i915#3576]) -> [PASS][38] +1 similar issue [37]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_11705/bat-adlp-4/igt@kms_busy@basic@flip.html [38]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_101530v2/bat-adlp-4/igt@kms_busy@basic@flip.html {name}: This element is suppressed. This means it is ignored when computing the status of the difference (SUCCESS, WARNING, or FAILURE). [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271 [fdo#109284]: https://bugs.freedesktop.org/show_bug.cgi?id=109284 [fdo#109285]: https://bugs.freedesktop.org/show_bug.cgi?id=109285 [fdo#109295]: https://bugs.freedesktop.org/show_bug.cgi?id=109295 [fdo#111827]: https://bugs.freedesktop.org/show_bug.cgi?id=111827 [i915#1072]: https://gitlab.freedesktop.org/drm/intel/issues/1072 [i915#2190]: https://gitlab.freedesktop.org/drm/intel/issues/2190 [i915#2575]: https://gitlab.freedesktop.org/drm/intel/issues/2575 [i915#2582]: https://gitlab.freedesktop.org/drm/intel/issues/2582 [i915#2940]: https://gitlab.freedesktop.org/drm/intel/issues/2940 [i915#3012]: https://gitlab.freedesktop.org/drm/intel/issues/3012 [i915#3282]: https://gitlab.freedesktop.org/drm/intel/issues/3282 [i915#3291]: https://gitlab.freedesktop.org/drm/intel/issues/3291 [i915#3301]: https://gitlab.freedesktop.org/drm/intel/issues/3301 [i915#3555]: https://gitlab.freedesktop.org/drm/intel/issues/3555 [i915#3576]: https://gitlab.freedesktop.org/drm/intel/issues/3576 [i915#3708]: https://gitlab.freedesktop.org/drm/intel/issues/3708 [i915#402]: https://gitlab.freedesktop.org/drm/intel/issues/402 [i915#4070]: https://gitlab.freedesktop.org/drm/intel/issues/4070 [i915#4098]: https://gitlab.freedesktop.org/drm/intel/issues/4098 [i915#4103]: https://gitlab.freedesktop.org/drm/intel/issues/4103 [i915#4312]: https://gitlab.freedesktop.org/drm/intel/issues/4312 [i915#4494]: https://gitlab.freedesktop.org/drm/intel/issues/4494 [i915#4528]: https://gitlab.freedesktop.org/drm/intel/issues/4528 [i915#4613]: https://gitlab.freedesktop.org/drm/intel/issues/4613 [i915#4817]: https://gitlab.freedesktop.org/drm/intel/issues/4817 [i915#4957]: https://gitlab.freedesktop.org/drm/intel/issues/4957 [i915#5122]: https://gitlab.freedesktop.org/drm/intel/issues/5122 [i915#5171]: https://gitlab.freedesktop.org/drm/intel/issues/5171 [i915#5174]: https://gitlab.freedesktop.org/drm/intel/issues/5174 [i915#5181]: https://gitlab.freedesktop.org/drm/intel/issues/5181 [i915#5190]: https://gitlab.freedesktop.org/drm/intel/issues/5190 [i915#533]: https://gitlab.freedesktop.org/drm/intel/issues/533 [i915#5606]: https://gitlab.freedesktop.org/drm/intel/issues/5606 [i915#5703]: https://gitlab.freedesktop.org/drm/intel/issues/5703 [i915#5763]: https://gitlab.freedesktop.org/drm/intel/issues/5763 [i915#5775]: https://gitlab.freedesktop.org/drm/intel/issues/5775 [i915#5801]: https://gitlab.freedesktop.org/drm/intel/issues/5801 [i915#5903]: https://gitlab.freedesktop.org/drm/intel/issues/5903 [i915#5982]: https://gitlab.freedesktop.org/drm/intel/issues/5982 Build changes ------------- * Linux: CI_DRM_11705 -> Patchwork_101530v2 CI-20190529: 20190529 CI_DRM_11705: 18a2e6dbca526f996da04741cf5ef169e810a50e @ git://anongit.freedesktop.org/gfx-ci/linux IGT_6495: 7e2033da45f024a0348e6034fcb7f70a91b80ee9 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git Patchwork_101530v2: 18a2e6dbca526f996da04741cf5ef169e810a50e @ git://anongit.freedesktop.org/gfx-ci/linux ### Linux commits 01d561b9bb95 arm64: dts: mt8183: Add panel rotation 21530cae4fa3 drm/msm: init panel orientation property a026c392838a drm/mediatek: init panel orientation property d1faead57b36 gpu: drm: separate panel orientation property creating and value setting == Logs == For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_101530v2/index.html [-- Attachment #2: Type: text/html, Size: 14532 bytes --] ^ permalink raw reply [flat|nested] 69+ messages in thread
end of thread, other threads:[~2022-06-01 14:04 UTC | newest] Thread overview: 69+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2022-05-30 8:19 [PATCH v10 0/4] Separate panel orientation property creating and value setting Hsin-Yi Wang 2022-05-30 8:19 ` Hsin-Yi Wang 2022-05-30 8:19 ` Hsin-Yi Wang 2022-05-30 8:19 ` [Intel-gfx] " Hsin-Yi Wang 2022-05-30 8:19 ` Hsin-Yi Wang 2022-05-30 8:19 ` Hsin-Yi Wang 2022-05-30 8:19 ` [PATCH v10 1/4] gpu: drm: separate " Hsin-Yi Wang 2022-05-30 8:19 ` Hsin-Yi Wang 2022-05-30 8:19 ` Hsin-Yi Wang 2022-05-30 8:19 ` [Intel-gfx] " Hsin-Yi Wang 2022-05-30 8:19 ` Hsin-Yi Wang 2022-05-30 8:19 ` Hsin-Yi Wang 2022-05-30 8:57 ` Hans de Goede 2022-05-30 8:57 ` Hans de Goede 2022-05-30 8:57 ` Hans de Goede 2022-05-30 8:57 ` Hans de Goede 2022-05-30 8:57 ` [Intel-gfx] " Hans de Goede 2022-05-30 8:57 ` Hans de Goede 2022-05-30 9:01 ` Hans de Goede 2022-05-30 9:01 ` Hans de Goede 2022-05-30 9:01 ` Hans de Goede 2022-05-30 9:01 ` [Intel-gfx] " Hans de Goede 2022-05-30 9:01 ` Hans de Goede 2022-05-30 9:01 ` Hans de Goede 2022-05-30 8:19 ` [PATCH v10 2/4] drm/mediatek: init panel orientation property Hsin-Yi Wang 2022-05-30 8:19 ` Hsin-Yi Wang 2022-05-30 8:19 ` Hsin-Yi Wang 2022-05-30 8:19 ` Hsin-Yi Wang 2022-05-30 8:19 ` [Intel-gfx] " Hsin-Yi Wang 2022-05-30 8:19 ` Hsin-Yi Wang 2022-05-30 8:19 ` [PATCH v10 3/4] drm/msm: " Hsin-Yi Wang 2022-05-30 8:19 ` Hsin-Yi Wang 2022-05-30 8:19 ` Hsin-Yi Wang 2022-05-30 8:19 ` Hsin-Yi Wang 2022-05-30 8:19 ` [Intel-gfx] " Hsin-Yi Wang 2022-05-30 8:19 ` Hsin-Yi Wang 2022-05-30 8:19 ` [PATCH v10 4/4] arm64: dts: mt8183: Add panel rotation Hsin-Yi Wang 2022-05-30 8:19 ` Hsin-Yi Wang 2022-05-30 8:19 ` Hsin-Yi Wang 2022-05-30 8:19 ` Hsin-Yi Wang 2022-05-30 8:19 ` [Intel-gfx] " Hsin-Yi Wang 2022-05-30 8:19 ` Hsin-Yi Wang 2022-05-30 8:44 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for Separate panel orientation property creating and value setting (rev2) Patchwork 2022-05-30 8:44 ` [Intel-gfx] ✗ Fi.CI.SPARSE: " Patchwork 2022-05-30 8:53 ` [PATCH v10 0/4] Separate panel orientation property creating and value setting Hans de Goede 2022-05-30 8:53 ` Hans de Goede 2022-05-30 8:53 ` Hans de Goede 2022-05-30 8:53 ` Hans de Goede 2022-05-30 8:53 ` Hans de Goede 2022-05-30 8:53 ` [Intel-gfx] " Hans de Goede 2022-05-30 11:34 ` Hsin-Yi Wang 2022-05-30 11:34 ` Hsin-Yi Wang 2022-05-30 11:34 ` Hsin-Yi Wang 2022-05-30 11:34 ` [Intel-gfx] " Hsin-Yi Wang 2022-05-30 11:34 ` Hsin-Yi Wang 2022-05-30 11:34 ` Hsin-Yi Wang 2022-05-31 10:56 ` Hans de Goede 2022-05-31 10:56 ` Hans de Goede 2022-05-31 10:56 ` Hans de Goede 2022-05-31 10:56 ` Hans de Goede 2022-05-31 10:56 ` [Intel-gfx] " Hans de Goede 2022-05-31 10:56 ` Hans de Goede 2022-06-01 8:26 ` Hsin-Yi Wang 2022-06-01 8:26 ` Hsin-Yi Wang 2022-06-01 8:26 ` Hsin-Yi Wang 2022-06-01 8:26 ` [Intel-gfx] " Hsin-Yi Wang 2022-06-01 8:26 ` Hsin-Yi Wang 2022-06-01 8:26 ` Hsin-Yi Wang 2022-05-30 9:08 ` [Intel-gfx] ✗ Fi.CI.BAT: failure for Separate panel orientation property creating and value setting (rev2) Patchwork
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.