gpu: nvgpu: acquire platforms clocks on floorsweeping gpc

bpmp will floorsweep GPCs as per parameters to tpc_pg_mask sysfs.
While doing that corresponding GPC clocks are also disabled.
nvgpu should re-initialize the clocks every time the
GPC/TPC pg_masks are passed to bpmp mrq.

Also print error when clk_prepare_enable fails.

Introduce platform->clks_lock to protect access to platform->clks
and platform->num_clks done from unrailgate/railgate and bpmp
mrq set calls from sysfs.

Acquire static_pg_lock in railgate path to synchronize railgate
with sysfs.

Bug 3688506

Change-Id: I3203d78b87289e7a847d78b3117e2d3119be3425
Signed-off-by: Sagar Kamble <skamble@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvgpu/+/2738920
Reviewed-by: Amulya Yarlagadda <ayarlagadda@nvidia.com>
GVS: Gerrit_Virtual_Submit
This commit is contained in:
Sagar Kamble
2022-07-02 22:12:02 +05:30
committed by mobile promotions
parent 96292d688b
commit 28ddb0996f
5 changed files with 61 additions and 12 deletions

View File

@@ -1,7 +1,7 @@
/*
* GK20A Platform (SoC) Interface
*
* Copyright (c) 2014-2021, NVIDIA CORPORATION. All rights reserved.
* Copyright (c) 2014-2022, 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,
@@ -333,6 +333,9 @@ struct gk20a_platform {
/* synchronized access to platform->clk_get_freqs */
struct nvgpu_mutex clk_get_freq_lock;
/* synchronized access to platform->clks */
struct nvgpu_mutex clks_lock;
};
static inline struct gk20a_platform *gk20a_get_platform(