On Wed, Aug 21, 2019 at 1:06 AM John Stultz john.stultz@linaro.org wrote:
From: Xu YiPing xuyiping@hisilicon.com
As part of refactoring the kirin driver to better support different hardware revisions, this patch adds a flag to the device specific driver data so that we can conditionally register the connectors at init.
Cc: Rongrong Zou zourongrong@gmail.com Cc: Xinliang Liu z.liuxinliang@hisilicon.com Cc: David Airlie airlied@linux.ie Cc: Daniel Vetter daniel@ffwll.ch Cc: dri-devel dri-devel@lists.freedesktop.org Cc: Sam Ravnborg sam@ravnborg.org Acked-by: Xinliang Liu z.liuxinliang@hisilicon.com Reviewed-by: Sam Ravnborg sam@ravnborg.org Signed-off-by: Xu YiPing xuyiping@hisilicon.com [jstultz: reworded commit message] Signed-off-by: John Stultz john.stultz@linaro.org
Whatever it is you're doing, this is nonsense. drm_dev_register does register connectors for you. If you hotplug connectors later on, you have to register them (manually), but definitely that should happen in the hotplug code. General rule: If it's not a hotplugged dp mst connector, calling drm_connector_register from drivers is pointless (and yes I know there's tons of that stuff around, for historical reasons).
Further the flag isn't even set, so this is just dead code.
Please revert.
Thanks, Daniel
v5: checkpatch --strict whitespace fixups noticed by Sam
.../gpu/drm/hisilicon/kirin/kirin_drm_ade.c | 1 + .../gpu/drm/hisilicon/kirin/kirin_drm_drv.c | 43 +++++++++++++++++++ .../gpu/drm/hisilicon/kirin/kirin_drm_drv.h | 1 + 3 files changed, 45 insertions(+)
diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c index 21c5d457a97d..89bdc0388138 100644 --- a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c +++ b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c @@ -1073,6 +1073,7 @@ static struct drm_driver ade_driver = { };
struct kirin_drm_data ade_driver_data = {
.register_connects = false, .num_planes = ADE_CH_NUM, .prim_plane = ADE_CH1, .channel_formats = channel_formats,
diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c index c9faaa848cc6..68de8838da3c 100644 --- a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c +++ b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c @@ -98,6 +98,40 @@ static int compare_of(struct device *dev, void *data) return dev->of_node == data; }
+static int kirin_drm_connectors_register(struct drm_device *dev) +{
struct drm_connector *connector;
struct drm_connector *failed_connector;
struct drm_connector_list_iter conn_iter;
int ret;
mutex_lock(&dev->mode_config.mutex);
drm_connector_list_iter_begin(dev, &conn_iter);
drm_for_each_connector_iter(connector, &conn_iter) {
ret = drm_connector_register(connector);
if (ret) {
failed_connector = connector;
goto err;
}
}
drm_connector_list_iter_end(&conn_iter);
mutex_unlock(&dev->mode_config.mutex);
return 0;
+err:
drm_connector_list_iter_begin(dev, &conn_iter);
drm_for_each_connector_iter(connector, &conn_iter) {
if (failed_connector == connector)
break;
drm_connector_unregister(connector);
}
drm_connector_list_iter_end(&conn_iter);
mutex_unlock(&dev->mode_config.mutex);
return ret;
+}
static int kirin_drm_bind(struct device *dev) { struct drm_device *drm_dev; @@ -117,8 +151,17 @@ static int kirin_drm_bind(struct device *dev)
drm_fbdev_generic_setup(drm_dev, 32);
/* connectors should be registered after drm device register */
if (driver_data->register_connects) {
ret = kirin_drm_connectors_register(drm_dev);
if (ret)
goto err_drm_dev_unregister;
}
return 0;
+err_drm_dev_unregister:
drm_dev_unregister(drm_dev);
err_kms_cleanup: kirin_drm_kms_cleanup(drm_dev); err_drm_dev_put: diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.h b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.h index fdbfc4a90f22..95f56c9960d5 100644 --- a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.h +++ b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.h @@ -39,6 +39,7 @@ struct kirin_drm_data { u32 channel_formats_cnt; int config_max_width; int config_max_height;
bool register_connects; u32 num_planes; u32 prim_plane;
-- 2.17.1