From b17d9708c9e9930778de43de1edf1385acb13ebd Mon Sep 17 00:00:00 2001 From: Vijayakumar Subbu Date: Wed, 27 Jul 2016 22:29:15 -0700 Subject: gpu: nvgpu: Add dGPU clocks support JIRA DNVGPU-45 Change-Id: I237ce81e31b036c05c82d46eea8694ffe1c2e3df Signed-off-by: Mahantesh Kumbar Signed-off-by: Vijayakumar Subbu Reviewed-on: http://git-master/r/1205849 (cherry picked from commit 9a4006f76b75a8ad525e7aa5ad1f609aaae49126) Reviewed-on: http://git-master/r/1227256 Reviewed-by: mobile promotions Tested-by: mobile promotions --- drivers/gpu/nvgpu/boardobj/boardobj.c | 80 +++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 drivers/gpu/nvgpu/boardobj/boardobj.c (limited to 'drivers/gpu/nvgpu/boardobj/boardobj.c') diff --git a/drivers/gpu/nvgpu/boardobj/boardobj.c b/drivers/gpu/nvgpu/boardobj/boardobj.c new file mode 100644 index 00000000..86b639cc --- /dev/null +++ b/drivers/gpu/nvgpu/boardobj/boardobj.c @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2016, 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. + */ + +#include "gk20a/gk20a.h" +#include +#include +#include +#include "boardobj.h" +#include "ctrl/ctrlboardobj.h" +#include "pmuif/gpmuifboardobj.h" + + +u32 boardobj_construct_super(struct gk20a *g, struct boardobj **ppboardobj, + u16 size, void *args) +{ + struct boardobj *pboardobj = NULL; + struct boardobj *devtmp = (struct boardobj *)args; + + gk20a_dbg_info(" "); + + if (devtmp == NULL) + return -EINVAL; + + if (*ppboardobj == NULL) { + *ppboardobj = kzalloc(size, GFP_KERNEL); + if (ppboardobj == NULL) + return -ENOMEM; + } + + pboardobj = *ppboardobj; + pboardobj->type = devtmp->type; + pboardobj->idx = CTRL_BOARDOBJ_IDX_INVALID; + pboardobj->type_mask = BIT(pboardobj->type) | devtmp->type_mask; + + pboardobj->implements = boardobj_implements_super; + pboardobj->destruct = boardobj_destruct_super; + pboardobj->pmudatainit = boardobj_pmudatainit_super; + + return 0; +} + +u32 boardobj_destruct_super(struct boardobj *pboardobj) +{ + gk20a_dbg_info(""); + if (pboardobj == NULL) + return -EINVAL; + kfree(pboardobj); + return 0; +} + +bool boardobj_implements_super(struct gk20a *g, struct boardobj *pboardobj, + u8 type) +{ + gk20a_dbg_info(""); + + return (0 != (pboardobj->type_mask & BIT(type))); +} + +u32 boardobj_pmudatainit_super(struct gk20a *g, struct boardobj *pboardobj, + struct nv_pmu_boardobj *pmudata) +{ + gk20a_dbg_info(""); + if (pboardobj == NULL) + return -EINVAL; + if (pmudata == NULL) + return -EINVAL; + pmudata->type = pboardobj->type; + gk20a_dbg_info(" Done"); + return 0; +} -- cgit v1.2.2