[PATCH] drm/bridge: analogix dp: Fix runtime PM state on driver bind

Archit Taneja architt at codeaurora.org
Mon Jan 9 09:47:22 UTC 2017



On 01/05/2017 01:01 PM, Sean Paul wrote:
> On Fri, Dec 30, 2016 at 4:57 AM, Marek Szyprowski
> <m.szyprowski at samsung.com> wrote:
>> Analogix_dp_bind() can be called from component framework, which doesn't
>> guarantee proper runtime PM state of the device during bind operation,
>> so ensure that device is runtime active before doing any register access.
>> This ensures that the power domain, to which DP module belongs, is turned
>> on. While at it, also fix the unbalanced call to phy_power_on() in
>> analogix_dp_bind() function.

Pushed to drm-misc-fixes.

Thanks,
Archit

>>
>> This patch solves the following kernel oops on Samsung Exynos5250 Snow
>> board:
>>
>> Unhandled fault: imprecise external abort (0x406) at 0x00000000
>> pgd = c0004000
>> [00000000] *pgd=00000000
>> Internal error: : 406 [#1] PREEMPT SMP ARM
>> Modules linked in:
>> CPU: 0 PID: 75 Comm: kworker/0:2 Not tainted 4.9.0 #1046
>> Hardware name: SAMSUNG EXYNOS (Flattened Device Tree)
>> Workqueue: events deferred_probe_work_func
>> task: ee272300 task.stack: ee312000
>> PC is at analogix_dp_enable_sw_function+0x18/0x2c
>> LR is at analogix_dp_init_dp+0x2c/0x50
>> ...
>> [<c03fcb38>] (analogix_dp_enable_sw_function) from [<c03fa9c4>] (analogix_dp_init_dp+0x2c/0x50)
>> [<c03fa9c4>] (analogix_dp_init_dp) from [<c03fab6c>] (analogix_dp_bind+0x184/0x42c)
>> [<c03fab6c>] (analogix_dp_bind) from [<c03fdb84>] (component_bind_all+0xf0/0x218)
>> [<c03fdb84>] (component_bind_all) from [<c03ed64c>] (exynos_drm_load+0x134/0x200)
>> [<c03ed64c>] (exynos_drm_load) from [<c03d5058>] (drm_dev_register+0xa0/0xd0)
>> [<c03d5058>] (drm_dev_register) from [<c03d66b8>] (drm_platform_init+0x58/0xb0)
>> [<c03d66b8>] (drm_platform_init) from [<c03fe0c4>] (try_to_bring_up_master+0x14c/0x188)
>> [<c03fe0c4>] (try_to_bring_up_master) from [<c03fe188>] (component_add+0x88/0x138)
>> [<c03fe188>] (component_add) from [<c0403a38>] (platform_drv_probe+0x50/0xb0)
>> [<c0403a38>] (platform_drv_probe) from [<c0402470>] (driver_probe_device+0x1f0/0x2a8)
>> [<c0402470>] (driver_probe_device) from [<c0400a54>] (bus_for_each_drv+0x44/0x8c)
>> [<c0400a54>] (bus_for_each_drv) from [<c04021f8>] (__device_attach+0x9c/0x100)
>> [<c04021f8>] (__device_attach) from [<c04018e8>] (bus_probe_device+0x84/0x8c)
>> [<c04018e8>] (bus_probe_device) from [<c0401d1c>] (deferred_probe_work_func+0x60/0x8c)
>> [<c0401d1c>] (deferred_probe_work_func) from [<c012fc14>] (process_one_work+0x120/0x318)
>> [<c012fc14>] (process_one_work) from [<c012fe34>] (process_scheduled_works+0x28/0x38)
>> [<c012fe34>] (process_scheduled_works) from [<c0130048>] (worker_thread+0x204/0x4ac)
>> [<c0130048>] (worker_thread) from [<c01352c4>] (kthread+0xd8/0xf4)
>> [<c01352c4>] (kthread) from [<c0107978>] (ret_from_fork+0x14/0x3c)
>> Code: e59035f0 e5935018 f57ff04f e3c55001 (f57ff04e)
>> ---[ end trace 3d1d0d87796de344 ]---
>>
>
> Reviewed-by: Sean Paul <seanpaul at chromium.org>
>
>> Signed-off-by: Marek Szyprowski <m.szyprowski at samsung.com>
>> ---
>>  drivers/gpu/drm/bridge/analogix/analogix_dp_core.c | 7 +++++++
>>  1 file changed, 7 insertions(+)
>>
>> diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c
>> index eb9bf8786c24..18eefdcbf1ba 100644
>> --- a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c
>> +++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c
>> @@ -1382,6 +1382,7 @@ int analogix_dp_bind(struct device *dev, struct drm_device *drm_dev,
>>
>>         pm_runtime_enable(dev);
>>
>> +       pm_runtime_get_sync(dev);
>>         phy_power_on(dp->phy);
>>
>>         analogix_dp_init_dp(dp);
>> @@ -1414,9 +1415,15 @@ int analogix_dp_bind(struct device *dev, struct drm_device *drm_dev,
>>                 goto err_disable_pm_runtime;
>>         }
>>
>> +       phy_power_off(dp->phy);
>> +       pm_runtime_put(dev);
>> +
>>         return 0;
>>
>>  err_disable_pm_runtime:
>> +
>> +       phy_power_off(dp->phy);
>> +       pm_runtime_put(dev);
>>         pm_runtime_disable(dev);
>>
>>         return ret;
>> --
>> 1.9.1
>>
>
>
>

-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project


More information about the dri-devel mailing list