diff --git a/abi_gki_aarch64_a9a13eeea9.xml b/abi_gki_aarch64_a9a13eeea9.xml
index e10d240c0007..13fe559a562f 100644
--- a/abi_gki_aarch64_a9a13eeea9.xml
+++ b/abi_gki_aarch64_a9a13eeea9.xml
@@ -1685,6 +1685,11 @@
+
+
+
+
+
@@ -18429,6 +18434,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -26271,7 +26299,7 @@
-
+
@@ -26562,7 +26590,7 @@
-
+
@@ -26767,7 +26795,7 @@
-
+
@@ -26860,7 +26888,7 @@
-
+
@@ -26868,7 +26896,7 @@
-
+
@@ -26931,13 +26959,13 @@
-
+
-
+
@@ -28599,25 +28627,25 @@
-
+
-
+
-
+
-
+
@@ -28646,23 +28674,23 @@
-
+
-
+
-
+
-
+
@@ -28674,7 +28702,7 @@
-
+
@@ -28721,7 +28749,7 @@
-
+
@@ -28745,7 +28773,7 @@
-
+
@@ -28945,7 +28973,7 @@
-
+
@@ -28958,7 +28986,7 @@
-
+
@@ -28982,7 +29010,7 @@
-
+
@@ -29017,7 +29045,7 @@
-
+
@@ -29030,7 +29058,7 @@
-
+
@@ -29450,7 +29478,7 @@
-
+
@@ -29779,7 +29807,7 @@
-
+
@@ -30161,14 +30189,14 @@
-
+
-
+
@@ -30308,7 +30336,7 @@
-
+
@@ -30408,7 +30436,7 @@
-
+
@@ -41064,10 +41092,10 @@
-
-
-
-
+
+
+
+
@@ -46403,17 +46431,6 @@
-
-
-
-
-
-
-
-
-
-
-
@@ -46487,7 +46504,7 @@
-
+
@@ -48249,7 +48266,7 @@
-
+
@@ -48580,7 +48597,7 @@
-
+
@@ -50373,7 +50390,7 @@
-
+
@@ -50382,7 +50399,7 @@
-
+
@@ -50927,8 +50944,8 @@
-
-
+
+
@@ -51126,6 +51143,17 @@
+
+
+
+
+
+
+
+
+
+
+
@@ -58769,6 +58797,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -59141,23 +59186,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -69568,7 +69596,7 @@
-
+
@@ -82693,7 +82721,7 @@
-
+
@@ -84010,14 +84038,6 @@
-
-
-
-
-
-
-
-
@@ -84321,6 +84341,14 @@
+
+
+
+
+
+
+
+
@@ -84367,6 +84395,99 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -84378,7 +84499,7 @@
-
+
@@ -84523,7 +84644,7 @@
-
+
@@ -84582,6 +84703,14 @@
+
+
+
+
+
+
+
+
@@ -84593,8 +84722,8 @@
-
-
+
+
@@ -84688,7 +84817,7 @@
-
+
@@ -84859,25 +84988,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -85057,7 +85167,7 @@
-
+
@@ -85080,68 +85190,7 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
@@ -85312,12 +85361,13 @@
-
+
+
@@ -85619,7 +85669,7 @@
-
+
@@ -85635,7 +85685,7 @@
-
+
@@ -85744,7 +85794,7 @@
-
+
@@ -85753,7 +85803,7 @@
-
+
@@ -85761,10 +85811,10 @@
-
+
-
+
@@ -85772,6 +85822,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -85836,7 +85910,7 @@
-
+
@@ -85845,6 +85919,14 @@
+
+
+
+
+
+
+
+
@@ -86300,6 +86382,60 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -86678,13 +86814,13 @@
-
+
-
+
-
+
@@ -86708,7 +86844,7 @@
-
+
@@ -86741,7 +86877,7 @@
-
+
@@ -86750,11 +86886,11 @@
-
+
-
+
@@ -86763,7 +86899,7 @@
-
+
@@ -86955,7 +87091,7 @@
-
+
@@ -86977,7 +87113,7 @@
-
+
@@ -86996,10 +87132,10 @@
-
+
-
+
@@ -87585,10 +87721,10 @@
-
+
-
+
@@ -89208,23 +89344,23 @@
-
+
-
+
-
+
-
+
-
+
@@ -89254,7 +89390,7 @@
-
+
@@ -89281,7 +89417,7 @@
-
+
@@ -89292,7 +89428,7 @@
-
+
@@ -90789,10 +90925,10 @@
-
+
-
+
@@ -92324,7 +92460,7 @@
-
+
@@ -92336,7 +92472,7 @@
-
+
@@ -93746,23 +93882,7 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
@@ -93770,15 +93890,15 @@
-
+
-
+
-
+
@@ -93786,15 +93906,15 @@
-
+
-
+
-
+
@@ -93802,15 +93922,7 @@
-
-
-
-
-
-
-
-
-
+
@@ -93824,7 +93936,7 @@
-
+
@@ -93835,7 +93947,7 @@
-
+
@@ -93843,7 +93955,7 @@
-
+
@@ -93854,7 +93966,7 @@
-
+
@@ -93865,7 +93977,7 @@
-
+
@@ -93873,7 +93985,7 @@
-
+
@@ -93881,7 +93993,7 @@
-
+
@@ -93889,7 +94001,7 @@
-
+
@@ -93897,7 +94009,7 @@
-
+
@@ -93905,7 +94017,7 @@
-
+
@@ -93913,7 +94025,7 @@
-
+
@@ -93921,7 +94033,7 @@
-
+
@@ -94500,7 +94612,7 @@
-
+
@@ -94508,7 +94620,7 @@
-
+
@@ -94516,7 +94628,7 @@
-
+
@@ -94524,7 +94636,7 @@
-
+
@@ -94549,7 +94661,7 @@
-
+
@@ -94626,15 +94738,15 @@
-
+
-
+
-
+
-
+
@@ -94664,7 +94776,7 @@
-
+
@@ -94678,7 +94790,7 @@
-
+
@@ -94765,10 +94877,10 @@
-
+
-
+
@@ -95272,7 +95384,7 @@
-
+
@@ -95483,7 +95595,7 @@
-
+
@@ -95605,7 +95717,7 @@
-
+
@@ -95638,22 +95750,22 @@
-
+
-
+
-
+
-
+
-
+
@@ -95662,7 +95774,7 @@
-
+
@@ -95673,7 +95785,7 @@
-
+
@@ -95701,7 +95813,7 @@
-
+
@@ -95718,7 +95830,7 @@
-
+
@@ -95727,15 +95839,15 @@
-
+
-
+
-
+
@@ -95752,7 +95864,7 @@
-
+
@@ -95760,7 +95872,7 @@
-
+
@@ -95791,7 +95903,7 @@
-
+
@@ -95869,13 +95981,13 @@
-
+
-
+
@@ -96040,7 +96152,7 @@
-
+
@@ -97687,7 +97799,7 @@
-
+
@@ -97804,10 +97916,10 @@
-
+
-
+
@@ -97892,10 +98004,10 @@
-
+
-
+
@@ -97914,10 +98026,10 @@
-
+
-
+
@@ -99295,7 +99407,7 @@
-
+
@@ -100273,7 +100385,7 @@
-
+
@@ -100504,7 +100616,7 @@
-
+
@@ -100884,7 +100996,7 @@
-
+
@@ -100946,12 +101058,12 @@
-
+
-
+
@@ -100962,7 +101074,7 @@
-
+
diff --git a/abi_gki_aarch64_qcom_whitelist b/abi_gki_aarch64_qcom_whitelist
index 02f1faa3067f..38dfd5749512 100644
--- a/abi_gki_aarch64_qcom_whitelist
+++ b/abi_gki_aarch64_qcom_whitelist
@@ -1668,6 +1668,11 @@
platform_get_resource
platform_get_resource_byname
platform_irq_count
+ pm_clk_add
+ pm_clk_create
+ pm_clk_destroy
+ pm_clk_resume
+ pm_clk_suspend
pm_generic_resume
pm_generic_runtime_resume
pm_generic_runtime_suspend
diff --git a/drivers/clk/qcom/camcc-shima.c b/drivers/clk/qcom/camcc-shima.c
index aa4ce8a76bf6..238063e42111 100644
--- a/drivers/clk/qcom/camcc-shima.c
+++ b/drivers/clk/qcom/camcc-shima.c
@@ -9,6 +9,8 @@
#include
#include
#include
+#include
+#include
#include
#include
@@ -2737,6 +2739,17 @@ static int cam_cc_shima_probe(struct platform_device *pdev)
if (IS_ERR(regmap))
return PTR_ERR(regmap);
+ pm_runtime_enable(&pdev->dev);
+ ret = pm_clk_create(&pdev->dev);
+ if (ret)
+ goto disable_pm_runtime;
+
+ ret = pm_clk_add(&pdev->dev, "cfg_ahb");
+ if (ret < 0) {
+ dev_err(&pdev->dev, "Unable to get ahb clock handle\n");
+ goto destroy_pm_clk;
+ }
+
clk_lucid_5lpe_pll_configure(&cam_cc_pll0, regmap, &cam_cc_pll0_config);
clk_lucid_5lpe_pll_configure(&cam_cc_pll1, regmap, &cam_cc_pll1_config);
clk_zonda_5lpe_pll_configure(&cam_cc_pll2, regmap, &cam_cc_pll2_config);
@@ -2748,14 +2761,26 @@ static int cam_cc_shima_probe(struct platform_device *pdev)
ret = qcom_cc_really_probe(pdev, &cam_cc_shima_desc, regmap);
if (ret) {
dev_err(&pdev->dev, "Failed to register CAM CC clocks\n");
- return ret;
+ goto destroy_pm_clk;
}
dev_info(&pdev->dev, "Registered CAM CC clocks\n");
+ return 0;
+
+destroy_pm_clk:
+ pm_clk_destroy(&pdev->dev);
+
+disable_pm_runtime:
+ pm_runtime_disable(&pdev->dev);
+
return ret;
}
+static const struct dev_pm_ops cam_cc_shima_pm_ops = {
+ SET_RUNTIME_PM_OPS(pm_clk_suspend, pm_clk_resume, NULL)
+};
+
static void cam_cc_shima_sync_state(struct device *dev)
{
qcom_cc_sync_state(dev, &cam_cc_shima_desc);
@@ -2767,6 +2792,7 @@ static struct platform_driver cam_cc_shima_driver = {
.name = "cam_cc-shima",
.of_match_table = cam_cc_shima_match_table,
.sync_state = cam_cc_shima_sync_state,
+ .pm = &cam_cc_shima_pm_ops,
},
};
diff --git a/drivers/clk/qcom/gpucc-shima.c b/drivers/clk/qcom/gpucc-shima.c
index 9b577f008482..23f7cccadfc9 100644
--- a/drivers/clk/qcom/gpucc-shima.c
+++ b/drivers/clk/qcom/gpucc-shima.c
@@ -8,6 +8,8 @@
#include
#include
#include
+#include
+#include
#include
#include
@@ -519,20 +521,43 @@ static int gpu_cc_shima_probe(struct platform_device *pdev)
if (IS_ERR(regmap))
return PTR_ERR(regmap);
+ pm_runtime_enable(&pdev->dev);
+ ret = pm_clk_create(&pdev->dev);
+ if (ret)
+ goto disable_pm_runtime;
+
+ ret = pm_clk_add(&pdev->dev, "cfg_ahb");
+ if (ret < 0) {
+ dev_err(&pdev->dev, "Unable to get ahb clock handle\n");
+ goto destroy_pm_clk;
+ }
+
clk_lucid_5lpe_pll_configure(&gpu_cc_pll0, regmap, &gpu_cc_pll0_config);
clk_lucid_5lpe_pll_configure(&gpu_cc_pll1, regmap, &gpu_cc_pll1_config);
ret = qcom_cc_really_probe(pdev, &gpu_cc_shima_desc, regmap);
if (ret) {
dev_err(&pdev->dev, "Failed to register GPU CC clocks\n");
- return ret;
+ goto destroy_pm_clk;
}
dev_info(&pdev->dev, "Registered GPU CC clocks\n");
+ return 0;
+
+destroy_pm_clk:
+ pm_clk_destroy(&pdev->dev);
+
+disable_pm_runtime:
+ pm_runtime_disable(&pdev->dev);
+
return ret;
}
+static const struct dev_pm_ops gpu_cc_shima_pm_ops = {
+ SET_RUNTIME_PM_OPS(pm_clk_suspend, pm_clk_resume, NULL)
+};
+
static void gpu_cc_shima_sync_state(struct device *dev)
{
qcom_cc_sync_state(dev, &gpu_cc_shima_desc);
@@ -544,6 +569,7 @@ static struct platform_driver gpu_cc_shima_driver = {
.name = "gpu_cc-shima",
.of_match_table = gpu_cc_shima_match_table,
.sync_state = gpu_cc_shima_sync_state,
+ .pm = &gpu_cc_shima_pm_ops,
},
};
diff --git a/drivers/clk/qcom/videocc-shima.c b/drivers/clk/qcom/videocc-shima.c
index 614353d98bf4..cae46f83a983 100644
--- a/drivers/clk/qcom/videocc-shima.c
+++ b/drivers/clk/qcom/videocc-shima.c
@@ -8,6 +8,8 @@
#include
#include
#include
+#include
+#include
#include
#include
@@ -575,20 +577,43 @@ static int video_cc_shima_probe(struct platform_device *pdev)
if (IS_ERR(regmap))
return PTR_ERR(regmap);
+ pm_runtime_enable(&pdev->dev);
+ ret = pm_clk_create(&pdev->dev);
+ if (ret)
+ goto disable_pm_runtime;
+
+ ret = pm_clk_add(&pdev->dev, "cfg_ahb");
+ if (ret < 0) {
+ dev_err(&pdev->dev, "Unable to get ahb clock handle\n");
+ goto destroy_pm_clk;
+ }
+
clk_lucid_5lpe_pll_configure(&video_pll0, regmap, &video_pll0_config);
clk_lucid_5lpe_pll_configure(&video_pll1, regmap, &video_pll1_config);
ret = qcom_cc_really_probe(pdev, &video_cc_shima_desc, regmap);
if (ret) {
dev_err(&pdev->dev, "Failed to register VIDEO CC clocks\n");
- return ret;
+ goto destroy_pm_clk;
}
dev_info(&pdev->dev, "Registered VIDEO CC clocks\n");
+ return 0;
+
+destroy_pm_clk:
+ pm_clk_destroy(&pdev->dev);
+
+disable_pm_runtime:
+ pm_runtime_disable(&pdev->dev);
+
return ret;
}
+static const struct dev_pm_ops video_cc_shima_pm_ops = {
+ SET_RUNTIME_PM_OPS(pm_clk_suspend, pm_clk_resume, NULL)
+};
+
static void video_cc_shima_sync_state(struct device *dev)
{
qcom_cc_sync_state(dev, &video_cc_shima_desc);
@@ -600,6 +625,7 @@ static struct platform_driver video_cc_shima_driver = {
.name = "video_cc-shima",
.of_match_table = video_cc_shima_match_table,
.sync_state = video_cc_shima_sync_state,
+ .pm = &video_cc_shima_pm_ops,
},
};