gpu: nvgpu: Debugfs for S_param

Changes:
1) Added nvgpu_s_param_init_debugfs for creating debugfs interface.
2) Command for S_param value:
   cat /sys/kernel/debug/gpu_pci/s_param
3) vfe_var_boardobj_grp_get_status is implemented.

Jira NVGPU-1736

Change-Id: Icbcf39e47777fe969ae2592b58a3103a21011a87
Signed-off-by: rmylavarapu <rmylavarapu@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/1989334
Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
This commit is contained in:
rmylavarapu
2019-02-04 18:33:35 +05:30
committed by mobile promotions
parent 824b8b5a41
commit 75f9486b82
9 changed files with 198 additions and 1 deletions

View File

@@ -0,0 +1,66 @@
/*
* Copyright (c) 2019, NVIDIA Corporation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms and conditions of the GNU General Public License,
* version 2, as published by the Free Software Foundation.
*
* This program is distributed in the hope it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <linux/debugfs.h>
#include "os_linux.h"
#include "include/nvgpu/bios.h"
#include <common/pmu/perf/vfe_var.h>
#include <nvgpu/pmu/perf.h>
static int get_s_param_info(void *data, u64 *val)
{
struct gk20a *g = (struct gk20a *)data;
struct boardobjgrp *pboardobjgrp;
struct boardobj *pboardobj = NULL;
struct vfe_var_single_sensed_fuse *single_sensed_fuse = NULL;
int status;
u8 index;
status = nvgpu_vfe_var_boardobj_grp_get_status(g);
if(status != 0) {
nvgpu_err(g, "Vfe_var get status failed");
return status;
}
pboardobjgrp = &g->perf_pmu->vfe_varobjs.super.super;
BOARDOBJGRP_FOR_EACH(pboardobjgrp, struct boardobj*, pboardobj, index) {
single_sensed_fuse = (struct vfe_var_single_sensed_fuse *)
(void *)pboardobj;
if(single_sensed_fuse->vfield_info.v_field_id ==
VFIELD_ID_S_PARAM) {
*val = single_sensed_fuse->fuse_value_hw_integer;
}
}
return status;
}
DEFINE_SIMPLE_ATTRIBUTE(s_param_fops, get_s_param_info , NULL, "%llu\n");
int nvgpu_s_param_init_debugfs(struct gk20a *g)
{
struct nvgpu_os_linux *l = nvgpu_os_linux_from_gk20a(g);
struct dentry *dbgentry;
dbgentry = debugfs_create_file(
"s_param", S_IRUGO, l->debugfs, g, &s_param_fops);
if (!dbgentry) {
pr_err("%s: Failed to make debugfs node\n", __func__);
return -ENOMEM;
}
return 0;
}

View File

@@ -0,0 +1,31 @@
/*
* Copyright (c) 2019, NVIDIA Corporation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms and conditions of the GNU General Public License,
* version 2, as published by the Free Software Foundation.
*
* This program is distributed in the hope it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __DEBUG_S_PARAM_TU104_H
#define __DEBUG_S_PARAM_TU104_H
#include <nvgpu/gk20a.h>
#ifdef CONFIG_DEBUG_FS
int nvgpu_s_param_init_debugfs(struct gk20a *g);
#else
static inline int nvgpu_s_param_init_debugfs(struct gk20a *g)
{
return 0;
}
#endif
#endif

View File

@@ -241,6 +241,14 @@ int nvgpu_finalize_poweron_linux(struct nvgpu_os_linux *l)
}
}
if (l->ops.s_param.init_debugfs) {
err = l->ops.s_param.init_debugfs(g);
if (err) {
nvgpu_err(g, "failed to init linux s_param trace debugfs");
return err;
}
}
err = nvgpu_pmgr_init_debugfs_linux(l);
if (err) {
nvgpu_err(g, "failed to init linux pmgr debugfs");

View File

@@ -56,6 +56,10 @@ struct nvgpu_os_linux_ops {
struct {
int (*init_debugfs)(struct gk20a *g);
} volt;
struct {
int (*init_debugfs)(struct gk20a *g);
} s_param;
};
struct nvgpu_os_linux {

View File

@@ -19,6 +19,7 @@
#include "os/linux/debug_therm_gp106.h"
#include "os/linux/debug_clk_gv100.h"
#include "os/linux/debug_volt.h"
#include "os/linux/debug_s_param.h"
static struct nvgpu_os_linux_ops tu104_os_linux_ops = {
.therm = {
@@ -30,6 +31,9 @@ static struct nvgpu_os_linux_ops tu104_os_linux_ops = {
.volt = {
.init_debugfs = nvgpu_volt_init_debugfs,
},
.s_param = {
.init_debugfs = nvgpu_s_param_init_debugfs,
},
};
void nvgpu_tu104_init_os_ops(struct nvgpu_os_linux *l)
@@ -37,4 +41,5 @@ void nvgpu_tu104_init_os_ops(struct nvgpu_os_linux *l)
l->ops.therm = tu104_os_linux_ops.therm;
l->ops.clk = tu104_os_linux_ops.clk;
l->ops.volt = tu104_os_linux_ops.volt;
l->ops.s_param = tu104_os_linux_ops.s_param;
}