summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/gk20a_sysfs.c
diff options
context:
space:
mode:
authorSeshendra Gadagottu <sgadagottu@nvidia.com>2016-05-02 20:19:19 -0400
committerVijayakumar Subbu <vsubbu@nvidia.com>2016-06-06 23:43:27 -0400
commit697c8c1a98f09906c6513a0ed62052a375e83dc9 (patch)
tree3a0b03395b6894664994cec298573edf3fff7bae /drivers/gpu/nvgpu/gk20a/gk20a_sysfs.c
parentf48d28caa31877d76099311db2c6312c1cd1b97d (diff)
gpu:nvgpu: add sysfs nodes for ptimer freq
With current ptimer_scale_factor sysfs node, some precision is lost while converting scaling factor to floating point and similarly more precision will be lost while converting back to fixed point. To avoid this, kernel will export following two sysfs nodes: ptimer_ref_freq : ptimer reference frequency( in hz) ptimer_src_freq : ptimer source frequency (in hz) in current chip architecture. Client will apply proper scaling factor by doing ptimer_ref_freq / ptimer_src_freq. Change-Id: I84516e235cc3fffe4cb9a73903416478f4050a9a Signed-off-by: Seshendra Gadagottu <sgadagottu@nvidia.com> Reviewed-on: http://git-master/r/1139985 Reviewed-by: Automatic_Commit_Validation_User GVS: Gerrit_Virtual_Submit Reviewed-by: Vijayakumar Subbu <vsubbu@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/gk20a_sysfs.c')
-rw-r--r--drivers/gpu/nvgpu/gk20a/gk20a_sysfs.c53
1 files changed, 53 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/gk20a_sysfs.c b/drivers/gpu/nvgpu/gk20a/gk20a_sysfs.c
index b68073af..8eaee190 100644
--- a/drivers/gpu/nvgpu/gk20a/gk20a_sysfs.c
+++ b/drivers/gpu/nvgpu/gk20a/gk20a_sysfs.c
@@ -228,6 +228,55 @@ static DEVICE_ATTR(ptimer_scale_factor,
228 ptimer_scale_factor_show, 228 ptimer_scale_factor_show,
229 NULL); 229 NULL);
230 230
231static ssize_t ptimer_ref_freq_show(struct device *dev,
232 struct device_attribute *attr,
233 char *buf)
234{
235 struct gk20a_platform *platform = dev_get_drvdata(dev);
236 u32 src_freq_hz = platform->ptimer_src_freq;
237 ssize_t res;
238
239 if (!src_freq_hz) {
240 dev_err(dev, "reference clk_m rate is not set correctly\n");
241 return -EINVAL;
242 }
243
244 res = sprintf(buf, "%u\n", PTIMER_REF_FREQ_HZ);
245
246 return res;
247
248}
249
250static DEVICE_ATTR(ptimer_ref_freq,
251 S_IRUGO,
252 ptimer_ref_freq_show,
253 NULL);
254
255static ssize_t ptimer_src_freq_show(struct device *dev,
256 struct device_attribute *attr,
257 char *buf)
258{
259 struct gk20a_platform *platform = dev_get_drvdata(dev);
260 u32 src_freq_hz = platform->ptimer_src_freq;
261 ssize_t res;
262
263 if (!src_freq_hz) {
264 dev_err(dev, "reference clk_m rate is not set correctly\n");
265 return -EINVAL;
266 }
267
268 res = sprintf(buf, "%u\n", src_freq_hz);
269
270 return res;
271
272}
273
274static DEVICE_ATTR(ptimer_src_freq,
275 S_IRUGO,
276 ptimer_src_freq_show,
277 NULL);
278
279
231#if defined(CONFIG_PM) && defined(CONFIG_PM_GENERIC_DOMAINS) 280#if defined(CONFIG_PM) && defined(CONFIG_PM_GENERIC_DOMAINS)
232static ssize_t railgate_enable_store(struct device *dev, 281static ssize_t railgate_enable_store(struct device *dev,
233 struct device_attribute *attr, const char *buf, size_t count) 282 struct device_attribute *attr, const char *buf, size_t count)
@@ -742,6 +791,8 @@ void gk20a_remove_sysfs(struct device *dev)
742 device_remove_file(dev, &dev_attr_blcg_enable); 791 device_remove_file(dev, &dev_attr_blcg_enable);
743 device_remove_file(dev, &dev_attr_slcg_enable); 792 device_remove_file(dev, &dev_attr_slcg_enable);
744 device_remove_file(dev, &dev_attr_ptimer_scale_factor); 793 device_remove_file(dev, &dev_attr_ptimer_scale_factor);
794 device_remove_file(dev, &dev_attr_ptimer_ref_freq);
795 device_remove_file(dev, &dev_attr_ptimer_src_freq);
745 device_remove_file(dev, &dev_attr_elpg_enable); 796 device_remove_file(dev, &dev_attr_elpg_enable);
746 device_remove_file(dev, &dev_attr_emc3d_ratio); 797 device_remove_file(dev, &dev_attr_emc3d_ratio);
747 device_remove_file(dev, &dev_attr_fmax_at_vmin_safe); 798 device_remove_file(dev, &dev_attr_fmax_at_vmin_safe);
@@ -782,6 +833,8 @@ void gk20a_create_sysfs(struct device *dev)
782 error |= device_create_file(dev, &dev_attr_blcg_enable); 833 error |= device_create_file(dev, &dev_attr_blcg_enable);
783 error |= device_create_file(dev, &dev_attr_slcg_enable); 834 error |= device_create_file(dev, &dev_attr_slcg_enable);
784 error |= device_create_file(dev, &dev_attr_ptimer_scale_factor); 835 error |= device_create_file(dev, &dev_attr_ptimer_scale_factor);
836 error |= device_create_file(dev, &dev_attr_ptimer_ref_freq);
837 error |= device_create_file(dev, &dev_attr_ptimer_src_freq);
785 error |= device_create_file(dev, &dev_attr_elpg_enable); 838 error |= device_create_file(dev, &dev_attr_elpg_enable);
786 error |= device_create_file(dev, &dev_attr_emc3d_ratio); 839 error |= device_create_file(dev, &dev_attr_emc3d_ratio);
787 error |= device_create_file(dev, &dev_attr_fmax_at_vmin_safe); 840 error |= device_create_file(dev, &dev_attr_fmax_at_vmin_safe);