From 644c60d35c0b901985292008834bf817d1a620f1 Mon Sep 17 00:00:00 2001 From: anupamg Date: Thu, 8 Aug 2024 19:49:58 +0000 Subject: [PATCH] DCE-KMD: Refactor dce_work_cond_sw_resource_init() - Move resource init specific to PM and bootstrap modules to respective PM and bootstrap init functions. - Motivation here is 2 fold: 1) To keep common code common across OSs. 2) Move resource init to respective sub-modules. - We will have separate PM module for HVRTOS. - We will have separate dce-worker module for HVRTOS. JIRA TDS-16052 Change-Id: I40f6943eb4173a0da7201dc58afb19aee2a0d04e Signed-off-by: anupamg Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/3190873 Reviewed-by: Arun Swain GVS: buildbot_gerritrpt Reviewed-by: svcacv Reviewed-by: Mahesh Kumar --- drivers/platform/tegra/dce/dce-bootstrap.c | 6 ++++++ drivers/platform/tegra/dce/dce-init-deinit.c | 10 ++++++++++ drivers/platform/tegra/dce/dce-pm.c | 20 ++++++++++++++++++++ drivers/platform/tegra/dce/dce-worker.c | 12 ------------ drivers/platform/tegra/dce/include/dce-pm.h | 4 +++- 5 files changed, 39 insertions(+), 13 deletions(-) diff --git a/drivers/platform/tegra/dce/dce-bootstrap.c b/drivers/platform/tegra/dce/dce-bootstrap.c index f434e2a6..16522053 100644 --- a/drivers/platform/tegra/dce/dce-bootstrap.c +++ b/drivers/platform/tegra/dce/dce-bootstrap.c @@ -408,6 +408,12 @@ int dce_boot_interface_init(struct tegra_dce *d) goto err_init; } + ret = dce_init_work(d, &d->dce_bootstrap_work, dce_bootstrap_work_fn); + if (ret) { + dce_err(d, "Bootstrap work init failed"); + goto err_init; + } + err_init: return ret; } diff --git a/drivers/platform/tegra/dce/dce-init-deinit.c b/drivers/platform/tegra/dce/dce-init-deinit.c index b7efa9ce..553bcbc1 100644 --- a/drivers/platform/tegra/dce/dce-init-deinit.c +++ b/drivers/platform/tegra/dce/dce-init-deinit.c @@ -65,6 +65,12 @@ int dce_driver_init(struct tegra_dce *d) goto err_client_init; } + ret = dce_pm_init(d); + if (ret) { + dce_err(d, "Failed to init DCE Power management"); + goto err_pm_init; + } + ret = dce_work_cond_sw_resource_init(d); if (ret) { dce_err(d, "dce sw resource init failed"); @@ -82,6 +88,8 @@ int dce_driver_init(struct tegra_dce *d) err_fsm_init: dce_work_cond_sw_resource_deinit(d); err_sw_init: + dce_pm_deinit(d); +err_pm_init: dce_client_deinit(d); err_client_init: dce_admin_deinit(d); @@ -109,6 +117,8 @@ void dce_driver_deinit(struct tegra_dce *d) dce_work_cond_sw_resource_deinit(d); + dce_pm_deinit(d); + dce_client_deinit(d); dce_admin_deinit(d); diff --git a/drivers/platform/tegra/dce/dce-pm.c b/drivers/platform/tegra/dce/dce-pm.c index 5d004d6e..aa1f63d1 100644 --- a/drivers/platform/tegra/dce/dce-pm.c +++ b/drivers/platform/tegra/dce/dce-pm.c @@ -170,3 +170,23 @@ int dce_pm_exit_sc7(struct tegra_dce *d) out: return ret; } + +int dce_pm_init(struct tegra_dce *d) +{ + int ret = 0; + + ret = dce_init_work(d, &d->dce_resume_work, dce_resume_work_fn); + if (ret) { + dce_err(d, "resume work init failed"); + goto done; + } + +done: + return ret; +} + +void dce_pm_deinit(struct tegra_dce *d) +{ + USE(d); + // Nothing to do. +} diff --git a/drivers/platform/tegra/dce/dce-worker.c b/drivers/platform/tegra/dce/dce-worker.c index aad6e51c..ea054d20 100644 --- a/drivers/platform/tegra/dce/dce-worker.c +++ b/drivers/platform/tegra/dce/dce-worker.c @@ -110,18 +110,6 @@ int dce_work_cond_sw_resource_init(struct tegra_dce *d) int ret = 0; int i; - ret = dce_init_work(d, &d->dce_bootstrap_work, dce_bootstrap_work_fn); - if (ret) { - dce_err(d, "Bootstrap work init failed"); - goto exit; - } - - ret = dce_init_work(d, &d->dce_resume_work, dce_resume_work_fn); - if (ret) { - dce_err(d, "resume work init failed"); - goto exit; - } - if (dce_cond_init(&d->dce_bootstrap_done)) { dce_err(d, "dce boot wait condition init failed"); ret = -1; diff --git a/drivers/platform/tegra/dce/include/dce-pm.h b/drivers/platform/tegra/dce/include/dce-pm.h index a7f4f3f5..0ca8afb8 100644 --- a/drivers/platform/tegra/dce/include/dce-pm.h +++ b/drivers/platform/tegra/dce/include/dce-pm.h @@ -1,6 +1,6 @@ /* SPDX-License-Identifier: GPL-2.0-only */ /* - * Copyright (c) 2022-2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-FileCopyrightText: Copyright (c) 2022-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. */ #ifndef DCE_PM_H @@ -12,6 +12,8 @@ struct dce_sc7_state { uint32_t hsp_ie; }; +int dce_pm_init(struct tegra_dce *d); +void dce_pm_deinit(struct tegra_dce *d); int dce_pm_enter_sc7(struct tegra_dce *d); int dce_pm_exit_sc7(struct tegra_dce *d); void dce_resume_work_fn(struct tegra_dce *d);