From e1ea98691bc8a7f306171985e75a6cddd1eecbc8 Mon Sep 17 00:00:00 2001 From: Akshata Date: Fri, 30 Jun 2023 08:41:25 +0000 Subject: [PATCH] dla: kmd: Update resource utilization logic + Return 0% resource utilization when DLA is turned off Bug 4170503 Change-Id: Iaeb6131dc482a750cae1d54b6931e3dd8c9192d0 Signed-off-by: Akshata Bhat (cherry picked from commit 4da14f6b3b80f49ca00c92322ad71d75c8bfd4cd) Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/2929821 Tested-by: Ninad Malwade Reviewed-by: Ninad Malwade Reviewed-by: Arvind M GVS: Gerrit_Virtual_Submit --- drivers/video/tegra/host/nvdla/nvdla_debug.c | 43 ++++++++++++-------- 1 file changed, 25 insertions(+), 18 deletions(-) diff --git a/drivers/video/tegra/host/nvdla/nvdla_debug.c b/drivers/video/tegra/host/nvdla/nvdla_debug.c index 668b4448..10e44248 100644 --- a/drivers/video/tegra/host/nvdla/nvdla_debug.c +++ b/drivers/video/tegra/host/nvdla/nvdla_debug.c @@ -302,7 +302,7 @@ static int nvdla_get_stats(struct nvdla_device *nvdla_dev) static int debug_dla_fw_resource_util_show(struct seq_file *s, void *data) { - int err; + int err = 0; struct nvdla_device *nvdla_dev; struct platform_device *pdev; @@ -325,28 +325,35 @@ static int debug_dla_fw_resource_util_show(struct seq_file *s, void *data) goto fail_no_dev; } - /* make sure that device is powered on */ - err = nvhost_module_busy(pdev); - if (err != 0) { - nvdla_dbg_err(pdev, "failed to power on\n"); - err = -ENODEV; - goto fail_no_dev; - } + if (atomic_read(&pdev->dev.power.usage_count) == 0) { + /* Print 0% utilization rate if power refcount for DLA + * is zero i.e., DLA is not turned on + */ + util_rate_characteristic = 0; + util_rate_mantissa = 0; + } else { + /* make sure that device is powered on */ + err = nvhost_module_busy(pdev); + if (err != 0) { + nvdla_dbg_err(pdev, "failed to power on\n"); + err = -ENODEV; + goto fail_no_dev; + } - err = nvdla_get_stats(nvdla_dev); - if (err != 0) { - nvdla_dbg_err(pdev, "Failed to send get stats command"); - goto fail_to_send_cmd; + err = nvdla_get_stats(nvdla_dev); + if (err != 0) { + nvdla_dbg_err(pdev, "Failed to send get stats command"); + nvhost_module_idle(pdev); + goto fail_no_dev; + } + utilization = *(unsigned int *)nvdla_dev->utilization_mem_va; + util_rate_characteristic = (utilization / 10000); + util_rate_mantissa = (utilization % 10000); + nvhost_module_idle(pdev); } - utilization = *(unsigned int *)nvdla_dev->utilization_mem_va; - util_rate_characteristic = (utilization / 10000); - util_rate_mantissa = (utilization % 10000); - seq_printf(s, "%u.%04u\n", util_rate_characteristic, util_rate_mantissa); -fail_to_send_cmd: - nvhost_module_idle(pdev); fail_no_dev: return err; }