diff options
| author | Rahul Sharma <rahsha@codeaurora.org> | 2019-04-13 13:19:46 +0530 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2019-04-15 21:10:25 -0700 |
| commit | a18089dad122452aeeca5c91da8a97512da29ca6 (patch) | |
| tree | 08abc2d217c11ded410ca4fbe0cc3a3996b70473 /drivers/gpu/drm/msm/ekms | |
| parent | 15e17660ba556c19a2d35770a2cd472872e1b450 (diff) | |
drm/msm: ensure msm_drm probe and eDRM Probe completion
There are issues when display driver probe() execution is scheduled
out during kernel boot because probe_type marked as
PROBE_PREFER_ASYNCHRONOUS.
Since there are few kernel modules that needs display driver to be
initialized. This change adds late_initcall() function which waits
for the completion of probes() to ensure that display is
initialized before other kernel module which can impact the system
boot behavior.
Change-Id: Idd83ac0450ed6f8e09dc98de8bbcec05942302e7
Signed-off-by: Rahul Sharma <rahsha@codeaurora.org>
Diffstat (limited to 'drivers/gpu/drm/msm/ekms')
| -rw-r--r-- | drivers/gpu/drm/msm/ekms/edrm_drv.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/drivers/gpu/drm/msm/ekms/edrm_drv.c b/drivers/gpu/drm/msm/ekms/edrm_drv.c index 69b8c01e59d4..3711b4680d0a 100644 --- a/drivers/gpu/drm/msm/ekms/edrm_drv.c +++ b/drivers/gpu/drm/msm/ekms/edrm_drv.c @@ -23,6 +23,8 @@ #include "msm_mmu.h" #include "edrm_kms.h" +static struct completion wait_display_completion; + static int msm_edrm_unload(struct drm_device *dev) { struct msm_drm_private *priv = dev->dev_private; @@ -367,6 +369,7 @@ static int msm_pdev_edrm_probe(struct platform_device *pdev) if (ret) DRM_ERROR("drm_platform_init failed: %d\n", ret); + complete(&wait_display_completion); return ret; } @@ -423,6 +426,7 @@ static struct platform_driver msm_platform_driver = { static int __init msm_edrm_register(void) { DBG("init"); + init_completion(&wait_display_completion); return platform_driver_register(&msm_platform_driver); } @@ -432,8 +436,18 @@ static void __exit msm_edrm_unregister(void) platform_driver_unregister(&msm_platform_driver); } +static int __init msm_edrm_late_register(void) +{ + pr_debug("wait for eDRM display probe completion\n"); + wait_for_completion(&wait_display_completion); + + return 0; +} + module_init(msm_edrm_register); module_exit(msm_edrm_unregister); +/* init level 7 */ +late_initcall(msm_edrm_late_register); MODULE_DESCRIPTION("MSM EARLY DRM Driver"); MODULE_LICENSE("GPL v2"); |
