Loading drivers/gpu/drm/msm/sde_rsc.c +52 −15 Original line number Diff line number Diff line /* Copyright (c) 2016-2018, The Linux Foundation. All rights reserved. /* Copyright (c) 2016-2019, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -755,6 +755,34 @@ bool sde_rsc_client_is_state_update_complete( return vsync_timestamp0 != 0; } static int sde_rsc_hw_init(struct sde_rsc_priv *rsc) { int ret; ret = regulator_enable(rsc->fs); if (ret) { pr_err("sde rsc: fs on failed ret:%d\n", ret); goto sde_rsc_fail; } rsc->sw_fs_enabled = true; ret = sde_rsc_clk_enable(&rsc->phandle, rsc->pclient, true); if (ret) { pr_err("failed to enable sde rsc power resources\n"); goto sde_rsc_fail; } ret = sde_rsc_timer_calculate(rsc, NULL); if (ret) goto sde_rsc_fail; sde_rsc_clk_enable(&rsc->phandle, rsc->pclient, false); sde_rsc_fail: return ret; } /** * sde_rsc_client_state_update() - rsc client state update * Video mode, cmd mode and clk state are suppoed as modes. A client need to Loading Loading @@ -816,6 +844,12 @@ int sde_rsc_client_state_update(struct sde_rsc_client *caller_client, __builtin_return_address(0), rsc->current_state, caller_client->name, state); /* hw init is required after hibernation */ if (rsc->need_hwinit && state != SDE_RSC_IDLE_STATE) { sde_rsc_hw_init(rsc); rsc->need_hwinit = false; } if (rsc->current_state == SDE_RSC_IDLE_STATE) sde_rsc_clk_enable(&rsc->phandle, rsc->pclient, true); Loading Loading @@ -1423,24 +1457,12 @@ static int sde_rsc_probe(struct platform_device *pdev) goto sde_rsc_fail; } ret = regulator_enable(rsc->fs); ret = sde_rsc_hw_init(rsc); if (ret) { pr_err("sde rsc: fs on failed ret:%d\n", ret); goto sde_rsc_fail; } rsc->sw_fs_enabled = true; if (sde_rsc_clk_enable(&rsc->phandle, rsc->pclient, true)) { pr_err("failed to enable sde rsc power resources\n"); pr_err("sde rsc: hw init failed ret:%d\n", ret); goto sde_rsc_fail; } if (sde_rsc_timer_calculate(rsc, NULL)) goto sde_rsc_fail; sde_rsc_clk_enable(&rsc->phandle, rsc->pclient, false); INIT_LIST_HEAD(&rsc->client_list); INIT_LIST_HEAD(&rsc->event_list); mutex_init(&rsc->client_lock); Loading Loading @@ -1475,6 +1497,20 @@ static int sde_rsc_remove(struct platform_device *pdev) return 0; } static int sde_rsc_pm_freeze_late(struct device *dev) { struct platform_device *pdev = to_platform_device(dev); struct sde_rsc_priv *rsc = platform_get_drvdata(pdev); rsc->need_hwinit = true; return 0; } static const struct dev_pm_ops sde_rsc_pm_ops = { .freeze_late = sde_rsc_pm_freeze_late, }; static const struct of_device_id dt_match[] = { { .compatible = "qcom,sde-rsc"}, {} Loading @@ -1488,6 +1524,7 @@ static struct platform_driver sde_rsc_platform_driver = { .driver = { .name = "sde_rsc", .of_match_table = dt_match, .pm = &sde_rsc_pm_ops, .suppress_bind_attrs = true, }, }; Loading drivers/gpu/drm/msm/sde_rsc_priv.h +3 −1 Original line number Diff line number Diff line /* Copyright (c) 2016-2018, The Linux Foundation. All rights reserved. /* Copyright (c) 2016-2019, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -128,6 +128,7 @@ struct sde_rsc_timer_config { * @pclient: module power client of phandle * @fs: "MDSS GDSC" handle * @sw_fs_enabled: track "MDSS GDSC" sw vote during probe * @need_hwinit: rsc hw init is required for the next update * * @disp_rsc: display rsc handle * @drv_io: sde drv io data mapping Loading Loading @@ -168,6 +169,7 @@ struct sde_rsc_priv { struct sde_power_client *pclient; struct regulator *fs; bool sw_fs_enabled; bool need_hwinit; struct rpmh_client *disp_rsc; struct dss_io_data drv_io; Loading Loading
drivers/gpu/drm/msm/sde_rsc.c +52 −15 Original line number Diff line number Diff line /* Copyright (c) 2016-2018, The Linux Foundation. All rights reserved. /* Copyright (c) 2016-2019, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -755,6 +755,34 @@ bool sde_rsc_client_is_state_update_complete( return vsync_timestamp0 != 0; } static int sde_rsc_hw_init(struct sde_rsc_priv *rsc) { int ret; ret = regulator_enable(rsc->fs); if (ret) { pr_err("sde rsc: fs on failed ret:%d\n", ret); goto sde_rsc_fail; } rsc->sw_fs_enabled = true; ret = sde_rsc_clk_enable(&rsc->phandle, rsc->pclient, true); if (ret) { pr_err("failed to enable sde rsc power resources\n"); goto sde_rsc_fail; } ret = sde_rsc_timer_calculate(rsc, NULL); if (ret) goto sde_rsc_fail; sde_rsc_clk_enable(&rsc->phandle, rsc->pclient, false); sde_rsc_fail: return ret; } /** * sde_rsc_client_state_update() - rsc client state update * Video mode, cmd mode and clk state are suppoed as modes. A client need to Loading Loading @@ -816,6 +844,12 @@ int sde_rsc_client_state_update(struct sde_rsc_client *caller_client, __builtin_return_address(0), rsc->current_state, caller_client->name, state); /* hw init is required after hibernation */ if (rsc->need_hwinit && state != SDE_RSC_IDLE_STATE) { sde_rsc_hw_init(rsc); rsc->need_hwinit = false; } if (rsc->current_state == SDE_RSC_IDLE_STATE) sde_rsc_clk_enable(&rsc->phandle, rsc->pclient, true); Loading Loading @@ -1423,24 +1457,12 @@ static int sde_rsc_probe(struct platform_device *pdev) goto sde_rsc_fail; } ret = regulator_enable(rsc->fs); ret = sde_rsc_hw_init(rsc); if (ret) { pr_err("sde rsc: fs on failed ret:%d\n", ret); goto sde_rsc_fail; } rsc->sw_fs_enabled = true; if (sde_rsc_clk_enable(&rsc->phandle, rsc->pclient, true)) { pr_err("failed to enable sde rsc power resources\n"); pr_err("sde rsc: hw init failed ret:%d\n", ret); goto sde_rsc_fail; } if (sde_rsc_timer_calculate(rsc, NULL)) goto sde_rsc_fail; sde_rsc_clk_enable(&rsc->phandle, rsc->pclient, false); INIT_LIST_HEAD(&rsc->client_list); INIT_LIST_HEAD(&rsc->event_list); mutex_init(&rsc->client_lock); Loading Loading @@ -1475,6 +1497,20 @@ static int sde_rsc_remove(struct platform_device *pdev) return 0; } static int sde_rsc_pm_freeze_late(struct device *dev) { struct platform_device *pdev = to_platform_device(dev); struct sde_rsc_priv *rsc = platform_get_drvdata(pdev); rsc->need_hwinit = true; return 0; } static const struct dev_pm_ops sde_rsc_pm_ops = { .freeze_late = sde_rsc_pm_freeze_late, }; static const struct of_device_id dt_match[] = { { .compatible = "qcom,sde-rsc"}, {} Loading @@ -1488,6 +1524,7 @@ static struct platform_driver sde_rsc_platform_driver = { .driver = { .name = "sde_rsc", .of_match_table = dt_match, .pm = &sde_rsc_pm_ops, .suppress_bind_attrs = true, }, }; Loading
drivers/gpu/drm/msm/sde_rsc_priv.h +3 −1 Original line number Diff line number Diff line /* Copyright (c) 2016-2018, The Linux Foundation. All rights reserved. /* Copyright (c) 2016-2019, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -128,6 +128,7 @@ struct sde_rsc_timer_config { * @pclient: module power client of phandle * @fs: "MDSS GDSC" handle * @sw_fs_enabled: track "MDSS GDSC" sw vote during probe * @need_hwinit: rsc hw init is required for the next update * * @disp_rsc: display rsc handle * @drv_io: sde drv io data mapping Loading Loading @@ -168,6 +169,7 @@ struct sde_rsc_priv { struct sde_power_client *pclient; struct regulator *fs; bool sw_fs_enabled; bool need_hwinit; struct rpmh_client *disp_rsc; struct dss_io_data drv_io; Loading