diff options
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/platform_gk20a_tegra.c')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/platform_gk20a_tegra.c | 57 |
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 | ||
804 | static 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 | |||
813 | static 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 | |||
822 | int 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 | |||
830 | static 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 | |||
803 | struct gk20a_platform gk20a_tegra_platform = { | 846 | struct 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, |