diff options
Diffstat (limited to 'drivers/gpu/nvgpu/boardobj')
-rw-r--r-- | drivers/gpu/nvgpu/boardobj/boardobjgrp.c | 52 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/boardobj/boardobjgrp.h | 13 |
2 files changed, 65 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/boardobj/boardobjgrp.c b/drivers/gpu/nvgpu/boardobj/boardobjgrp.c index 577acda3..43928ac1 100644 --- a/drivers/gpu/nvgpu/boardobj/boardobjgrp.c +++ b/drivers/gpu/nvgpu/boardobj/boardobjgrp.c | |||
@@ -254,6 +254,58 @@ static u32 boardobjgrp_pmustatusinstget_stub(struct gk20a *g, | |||
254 | return -EINVAL; | 254 | return -EINVAL; |
255 | } | 255 | } |
256 | 256 | ||
257 | u32 boardobjgrp_pmudatainit_legacy(struct gk20a *g, | ||
258 | struct boardobjgrp *pboardobjgrp, | ||
259 | struct nv_pmu_boardobjgrp_super *pboardobjgrppmu) | ||
260 | { | ||
261 | u32 status = 0; | ||
262 | struct boardobj *pboardobj = NULL; | ||
263 | struct nv_pmu_boardobj *ppmudata = NULL; | ||
264 | u8 index; | ||
265 | |||
266 | gk20a_dbg_info(""); | ||
267 | |||
268 | if (pboardobjgrp == NULL) | ||
269 | return -EINVAL; | ||
270 | if (pboardobjgrppmu == NULL) | ||
271 | return -EINVAL; | ||
272 | |||
273 | boardobjgrpe32hdrset((struct nv_pmu_boardobjgrp *)pboardobjgrppmu, | ||
274 | pboardobjgrp->objmask); | ||
275 | |||
276 | BOARDOBJGRP_FOR_EACH_INDEX_IN_MASK(32, index, pboardobjgrp->objmask) { | ||
277 | /* Obtain pointer to the current instance of the Object from the Group */ | ||
278 | pboardobj = pboardobjgrp->objgetbyidx(pboardobjgrp, index); | ||
279 | if (NULL == pboardobj) { | ||
280 | gk20a_err(dev_from_gk20a(g), | ||
281 | "could not get object instance"); | ||
282 | status = -EINVAL; | ||
283 | goto boardobjgrppmudatainit_legacy_done; | ||
284 | } | ||
285 | |||
286 | status = pboardobjgrp->pmudatainstget(g, | ||
287 | (struct nv_pmu_boardobjgrp *)pboardobjgrppmu, | ||
288 | &ppmudata, index); | ||
289 | if (status) { | ||
290 | gk20a_err(dev_from_gk20a(g), | ||
291 | "could not get object instance"); | ||
292 | goto boardobjgrppmudatainit_legacy_done; | ||
293 | } | ||
294 | |||
295 | /* Initialize the PMU Data */ | ||
296 | status = pboardobj->pmudatainit(g, pboardobj, ppmudata); | ||
297 | if (status) { | ||
298 | gk20a_err(dev_from_gk20a(g), | ||
299 | "could not parse pmu for device %d", index); | ||
300 | goto boardobjgrppmudatainit_legacy_done; | ||
301 | } | ||
302 | } | ||
303 | BOARDOBJGRP_FOR_EACH_INDEX_IN_MASK_END | ||
304 | |||
305 | boardobjgrppmudatainit_legacy_done: | ||
306 | gk20a_dbg_info(" Done"); | ||
307 | return status; | ||
308 | } | ||
257 | 309 | ||
258 | u32 boardobjgrp_pmudatainit_super(struct gk20a *g, struct boardobjgrp | 310 | u32 boardobjgrp_pmudatainit_super(struct gk20a *g, struct boardobjgrp |
259 | *pboardobjgrp, struct nv_pmu_boardobjgrp_super *pboardobjgrppmu) | 311 | *pboardobjgrp, struct nv_pmu_boardobjgrp_super *pboardobjgrppmu) |
diff --git a/drivers/gpu/nvgpu/boardobj/boardobjgrp.h b/drivers/gpu/nvgpu/boardobj/boardobjgrp.h index 6527bbdc..7baa5bea 100644 --- a/drivers/gpu/nvgpu/boardobj/boardobjgrp.h +++ b/drivers/gpu/nvgpu/boardobj/boardobjgrp.h | |||
@@ -254,6 +254,19 @@ struct boardobjgrp { | |||
254 | #define BOARDOBJGRP_FOR_EACH(_pgrp, _ptype, _pobj, _index) \ | 254 | #define BOARDOBJGRP_FOR_EACH(_pgrp, _ptype, _pobj, _index) \ |
255 | BOARDOBJGRP_ITERATOR(_pgrp, _ptype, _pobj, _index, NULL) | 255 | BOARDOBJGRP_ITERATOR(_pgrp, _ptype, _pobj, _index, NULL) |
256 | 256 | ||
257 | #define BOARDOBJGRP_FOR_EACH_INDEX_IN_MASK(mask_width, index, mask) \ | ||
258 | { \ | ||
259 | u##mask_width lcl_msk = (u##mask_width)(mask); \ | ||
260 | for (index = 0; lcl_msk != 0; index++, lcl_msk >>= 1) { \ | ||
261 | if (((u##mask_width)((u64)1) & lcl_msk) == 0) { \ | ||
262 | continue; \ | ||
263 | } | ||
264 | |||
265 | #define BOARDOBJGRP_FOR_EACH_INDEX_IN_MASK_END \ | ||
266 | } \ | ||
267 | } | ||
268 | |||
269 | |||
257 | /*! | 270 | /*! |
258 | * Invalid UNIT_ID. Used to indicate that the implementing class has not set | 271 | * Invalid UNIT_ID. Used to indicate that the implementing class has not set |
259 | * @ref BOARDOBJGRP::unitId and, thus, certain BOARDOBJGRP PMU interfaces are | 272 | * @ref BOARDOBJGRP::unitId and, thus, certain BOARDOBJGRP PMU interfaces are |