diff --git a/drivers/gpu/nvgpu/clk/clk_arb.c b/drivers/gpu/nvgpu/clk/clk_arb.c index 3d97535de..6cf005c8e 100644 --- a/drivers/gpu/nvgpu/clk/clk_arb.c +++ b/drivers/gpu/nvgpu/clk/clk_arb.c @@ -1049,6 +1049,20 @@ int nvgpu_clk_arb_get_arbiter_actual_mhz(struct gk20a *g, return err; } +unsigned long nvgpu_clk_measure_freq(struct gk20a *g, u32 api_domain) +{ + unsigned long freq = 0UL; + + switch (api_domain) { + case CTRL_CLK_DOMAIN_GPC2CLK: + freq = g->ops.clk.get_rate(g, CTRL_CLK_DOMAIN_GPCCLK) * 2UL; + break; + default: + break; + } + return freq; +} + int nvgpu_clk_arb_get_arbiter_effective_mhz(struct gk20a *g, u32 api_domain, u16 *freq_mhz) { diff --git a/drivers/gpu/nvgpu/include/nvgpu/clk_arb.h b/drivers/gpu/nvgpu/include/nvgpu/clk_arb.h index a04e35423..43af6312c 100644 --- a/drivers/gpu/nvgpu/include/nvgpu/clk_arb.h +++ b/drivers/gpu/nvgpu/include/nvgpu/clk_arb.h @@ -369,6 +369,8 @@ void nvgpu_clk_notification_queue_free(struct gk20a *g, void nvgpu_clk_arb_event_post_event(struct nvgpu_clk_dev *dev); +unsigned long nvgpu_clk_measure_freq(struct gk20a *g, u32 api_domain); + #ifdef CONFIG_DEBUG_FS int nvgpu_clk_arb_debugfs_init(struct gk20a *g); #endif diff --git a/drivers/gpu/nvgpu/os/linux/clk.c b/drivers/gpu/nvgpu/os/linux/clk.c index e76720ac4..36c13577a 100644 --- a/drivers/gpu/nvgpu/os/linux/clk.c +++ b/drivers/gpu/nvgpu/os/linux/clk.c @@ -26,6 +26,7 @@ #include "platform_gk20a.h" #include +#include #define HZ_TO_MHZ(x) ((x) / 1000000) @@ -280,4 +281,5 @@ void nvgpu_linux_init_clk_support(struct gk20a *g) g->ops.clk.clk_domain_get_f_points = nvgpu_linux_clk_get_f_points; g->ops.clk.get_clk_range = nvgpu_clk_get_range; g->ops.clk.clk_get_round_rate = nvgpu_clk_get_round_rate; + g->ops.clk.measure_freq = nvgpu_clk_measure_freq; } diff --git a/drivers/gpu/nvgpu/vgpu/clk_vgpu.c b/drivers/gpu/nvgpu/vgpu/clk_vgpu.c index 6aea7c8f6..4167f9053 100644 --- a/drivers/gpu/nvgpu/vgpu/clk_vgpu.c +++ b/drivers/gpu/nvgpu/vgpu/clk_vgpu.c @@ -22,6 +22,7 @@ #include #include +#include #include "gk20a/gk20a.h" #include "clk_vgpu.h" @@ -214,6 +215,7 @@ void vgpu_init_clk_support(struct gk20a *g) g->ops.clk.clk_get_round_rate = vgpu_clk_get_round_rate; g->ops.clk.get_clk_range = vgpu_clk_get_range; g->ops.clk.clk_domain_get_f_points = vgpu_clk_get_f_points; + g->ops.clk.measure_freq = nvgpu_clk_measure_freq; } int vgpu_clk_get_freqs(struct gk20a *g, unsigned long **freqs_out,