mirror of
git://nv-tegra.nvidia.com/linux-nvgpu.git
synced 2025-12-24 10:34:43 +03:00
gpu: nvgpu: Reading Vmin and Volt_rail get status
Changes: 1) volt_rail_boardobj_grp_get_status function implemented. 2) nvgpu_volt_get_vmin_tu10x function implemented. 3) Only Vmin is updated into boardobjs. Bug 200454682 Bug 2481917 Change-Id: Ie070b28a78503eeb3003493b5f130a4dcd9b1275 Signed-off-by: rmylavarapu <rmylavarapu@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/1996137 Reviewed-by: Vijayakumar Subbu <vsubbu@nvidia.com> Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
This commit is contained in:
committed by
mobile promotions
parent
c57cf00aa0
commit
f048bb5a71
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2016-2018, NVIDIA CORPORATION. All rights reserved.
|
||||
* Copyright (c) 2016-2019, NVIDIA CORPORATION. All rights reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
@@ -415,6 +415,68 @@ static int _volt_rail_devgrp_pmustatus_instget(struct gk20a *g,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int volt_rail_obj_update(struct gk20a *g,
|
||||
struct boardobj *board_obj_ptr,
|
||||
struct nv_pmu_boardobj *ppmudata)
|
||||
{
|
||||
struct voltage_rail *volt_rail_obj;
|
||||
struct nv_pmu_volt_volt_rail_boardobj_get_status *pstatus;
|
||||
|
||||
nvgpu_log_info(g, " ");
|
||||
|
||||
volt_rail_obj = (struct voltage_rail *)(void *)board_obj_ptr;
|
||||
pstatus = (struct nv_pmu_volt_volt_rail_boardobj_get_status *)
|
||||
(void *)ppmudata;
|
||||
|
||||
if (pstatus->super.type != volt_rail_obj->super.type) {
|
||||
nvgpu_err(g, "pmu data and boardobj type not matching");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* Updating only vmin as per requirement, later other fields can be added */
|
||||
volt_rail_obj->vmin_limitu_v = pstatus->vmin_limitu_v;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int nvgpu_volt_rail_boardobj_grp_get_status(struct gk20a *g)
|
||||
{
|
||||
struct boardobjgrp *pboardobjgrp;
|
||||
struct boardobjgrpmask *pboardobjgrpmask;
|
||||
struct nv_pmu_boardobjgrp_super *pboardobjgrppmu;
|
||||
struct boardobj *pboardobj = NULL;
|
||||
struct nv_pmu_boardobj_query *pboardobjpmustatus = NULL;
|
||||
int status;
|
||||
u8 index;
|
||||
|
||||
nvgpu_log_info(g, " ");
|
||||
|
||||
pboardobjgrp = &g->perf_pmu->volt.volt_rail_metadata.volt_rails.super;
|
||||
pboardobjgrpmask = &g->perf_pmu->volt.volt_rail_metadata.volt_rails.mask.super;
|
||||
status = pboardobjgrp->pmugetstatus(g, pboardobjgrp, pboardobjgrpmask);
|
||||
if (status != 0) {
|
||||
nvgpu_err(g, "err getting boardobjs from pmu");
|
||||
return status;
|
||||
}
|
||||
pboardobjgrppmu = pboardobjgrp->pmu.getstatus.buf;
|
||||
|
||||
BOARDOBJGRP_FOR_EACH(pboardobjgrp, struct boardobj*, pboardobj, index) {
|
||||
status = pboardobjgrp->pmustatusinstget(g,
|
||||
(struct nv_pmu_boardobjgrp *)(void *)pboardobjgrppmu,
|
||||
&pboardobjpmustatus, index);
|
||||
if (status != 0) {
|
||||
nvgpu_err(g, "could not get status object instance");
|
||||
return status;
|
||||
}
|
||||
status = volt_rail_obj_update(g, pboardobj,
|
||||
(struct nv_pmu_boardobj *)(void *)pboardobjpmustatus);
|
||||
if (status != 0) {
|
||||
nvgpu_err(g, "could not update volt rail status");
|
||||
return status;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int volt_rail_sw_setup(struct gk20a *g)
|
||||
{
|
||||
int status = 0;
|
||||
|
||||
Reference in New Issue
Block a user