summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/platform_gk20a_tegra.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/platform_gk20a_tegra.c')
-rw-r--r--drivers/gpu/nvgpu/gk20a/platform_gk20a_tegra.c57
1 files changed, 57 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/platform_gk20a_tegra.c b/drivers/gpu/nvgpu/gk20a/platform_gk20a_tegra.c
index 8733f356..dee42476 100644
--- a/drivers/gpu/nvgpu/gk20a/platform_gk20a_tegra.c
+++ b/drivers/gpu/nvgpu/gk20a/platform_gk20a_tegra.c
@@ -800,6 +800,49 @@ static int gk20a_tegra_suspend(struct device *dev)
800 return 0; 800 return 0;
801} 801}
802 802
803#ifdef CONFIG_TEGRA_CLK_FRAMEWORK
804static unsigned long gk20a_get_clk_rate(struct platform_device *dev)
805{
806 struct gk20a_platform *platform = gk20a_get_platform(dev);
807 struct gk20a *g = platform->g;
808
809 return gk20a_clk_get_rate(g);
810
811}
812
813static long gk20a_round_clk_rate(struct platform_device *dev,
814 unsigned long rate)
815{
816 struct gk20a_platform *platform = gk20a_get_platform(dev);
817 struct gk20a *g = platform->g;
818
819 return gk20a_clk_round_rate(g, rate);
820}
821
822int gk20a_set_clk_rate(struct platform_device *dev, unsigned long rate)
823{
824 struct gk20a_platform *platform = gk20a_get_platform(dev);
825 struct gk20a *g = platform->g;
826
827 return gk20a_clk_set_rate(g, rate);
828}
829
830static int gk20a_clk_get_freqs(struct platform_device *dev,
831 unsigned long **freqs, int *num_freqs)
832{
833 struct gk20a_platform *platform = gk20a_get_platform(dev);
834 struct gk20a *g = platform->g;
835
836 /* make sure the clock is available */
837 if (!gk20a_clk_get(g))
838 return -ENOSYS;
839
840 return tegra_dvfs_get_freqs(clk_get_parent(g->clk.tegra_clk),
841 freqs, num_freqs);
842}
843#endif
844
845
803struct gk20a_platform gk20a_tegra_platform = { 846struct gk20a_platform gk20a_tegra_platform = {
804 .has_syncpoints = true, 847 .has_syncpoints = true,
805 848
@@ -838,6 +881,13 @@ struct gk20a_platform gk20a_tegra_platform = {
838 .reset_assert = gk20a_tegra_reset_assert, 881 .reset_assert = gk20a_tegra_reset_assert,
839 .reset_deassert = gk20a_tegra_reset_deassert, 882 .reset_deassert = gk20a_tegra_reset_deassert,
840 883
884#ifdef CONFIG_TEGRA_CLK_FRAMEWORK
885 .clk_get_rate = gk20a_get_clk_rate,
886 .clk_round_rate = gk20a_round_clk_rate,
887 .clk_set_rate = gk20a_set_clk_rate,
888 .get_clk_freqs = gk20a_clk_get_freqs,
889#endif
890
841 /* frequency scaling configuration */ 891 /* frequency scaling configuration */
842 .prescale = gk20a_tegra_prescale, 892 .prescale = gk20a_tegra_prescale,
843 .postscale = gk20a_tegra_postscale, 893 .postscale = gk20a_tegra_postscale,
@@ -887,6 +937,13 @@ struct gk20a_platform gm20b_tegra_platform = {
887 .reset_assert = gm20b_tegra_reset_assert, 937 .reset_assert = gm20b_tegra_reset_assert,
888 .reset_deassert = gk20a_tegra_reset_deassert, 938 .reset_deassert = gk20a_tegra_reset_deassert,
889 939
940#ifdef CONFIG_TEGRA_CLK_FRAMEWORK
941 .clk_get_rate = gk20a_get_clk_rate,
942 .clk_round_rate = gk20a_round_clk_rate,
943 .clk_set_rate = gk20a_set_clk_rate,
944 .get_clk_freqs = gk20a_clk_get_freqs,
945#endif
946
890 /* frequency scaling configuration */ 947 /* frequency scaling configuration */
891 .prescale = gk20a_tegra_prescale, 948 .prescale = gk20a_tegra_prescale,
892 .postscale = gk20a_tegra_postscale, 949 .postscale = gk20a_tegra_postscale,