mirror of
git://nv-tegra.nvidia.com/linux-nv-oot.git
synced 2025-12-23 01:31:30 +03:00
Actmon is a hardware block that can be used to track the activity of certain hardware units. It can boost EMC clock depending on the memory traffic among various client. It is called central actmon as it monitors central activity for example MC activity. Add central activity monitor driver. Bug 3625675 Change-Id: I1a5918e7d84bc247f694f53f965c28888b773c91 Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/2705395 GVS: Gerrit_Virtual_Submit
94 lines
2.4 KiB
C
94 lines
2.4 KiB
C
// SPDX-License-Identifier: GPL-2.0
|
|
// Copyright (c) 2022, NVIDIA CORPORATION, All rights reserved.
|
|
|
|
#ifndef __TEGRA_MC_UTILS_H
|
|
#define __TEGRA_MC_UTILS_H
|
|
|
|
enum dram_types {
|
|
DRAM_TYPE_INVAL,
|
|
DRAM_TYPE_LPDDR5_16CH_ECC_1RANK,
|
|
DRAM_TYPE_LPDDR5_16CH_ECC_2RANK,
|
|
DRAM_TYPE_LPDDR5_8CH_ECC_1RANK,
|
|
DRAM_TYPE_LPDDR5_8CH_ECC_2RANK,
|
|
DRAM_TYPE_LPDDR5_4CH_ECC_1RANK,
|
|
DRAM_TYPE_LPDDR5_4CH_ECC_2RANK,
|
|
DRAM_TYPE_LPDDR5_16CH_1RANK,
|
|
DRAM_TYPE_LPDDR5_16CH_2RANK,
|
|
DRAM_TYPE_LPDDR5_8CH_1RANK,
|
|
DRAM_TYPE_LPDDR5_8CH_2RANK,
|
|
DRAM_TYPE_LPDDR5_4CH_1RANK,
|
|
DRAM_TYPE_LPDDR5_4CH_2RANK,
|
|
DRAM_TYPE_LPDDR4_16CH_ECC_1RANK,
|
|
DRAM_TYPE_LPDDR4_16CH_ECC_2RANK,
|
|
DRAM_TYPE_LPDDR4_8CH_ECC_1RANK,
|
|
DRAM_TYPE_LPDDR4_8CH_ECC_2RANK,
|
|
DRAM_TYPE_LPDDR4_4CH_ECC_1RANK,
|
|
DRAM_TYPE_LPDDR4_4CH_ECC_2RANK,
|
|
DRAM_TYPE_LPDDR4_16CH_1RANK,
|
|
DRAM_TYPE_LPDDR4_16CH_2RANK,
|
|
DRAM_TYPE_LPDDR4_8CH_1RANK,
|
|
DRAM_TYPE_LPDDR4_8CH_2RANK,
|
|
DRAM_TYPE_LPDDR4_4CH_1RANK,
|
|
DRAM_TYPE_LPDDR4_4CH_2RANK,
|
|
};
|
|
|
|
void tegra_mc_utils_init(void);
|
|
|
|
/*
|
|
* Utility API to convert the given frequency to Bandwidth.
|
|
*
|
|
* @freq Frequency to convert. It can be in any unit - the resulting Bandwidth
|
|
* will be in the same unit as passed. E.g KHz leads to KBps and Hz
|
|
* leads to Bps.
|
|
*
|
|
* Converts EMC clock frequency into theoretical BW. This
|
|
* does not account for a realistic utilization of the EMC bus. That is the
|
|
* various overheads (refresh, bank commands, etc) that a real system sees
|
|
* are not computed.
|
|
*
|
|
* Return: Converted Bandwidth.
|
|
*/
|
|
unsigned long emc_freq_to_bw(unsigned long freq);
|
|
|
|
/*
|
|
* Utility API to convert the given Bandwidth to frequency.
|
|
*
|
|
* @bw Bandwidth to convert. It can be in any unit - the resulting frequency
|
|
* will be in the same unit as passed. E.g KBps leads to KHz and Bps leads
|
|
* to Hz.
|
|
*
|
|
* Converts BW into theoretical EMC clock frequency.
|
|
*
|
|
* Return: Converted Frequency.
|
|
*/
|
|
unsigned long emc_bw_to_freq(unsigned long bw);
|
|
|
|
/*
|
|
* Return dram types or dram configuration.
|
|
*
|
|
* Return dram configuration based upon ecc/channel/Rank
|
|
*
|
|
* Return: dram type.
|
|
*/
|
|
enum dram_types tegra_dram_types(void);
|
|
|
|
/*
|
|
* Return Number of channels of dram.
|
|
*
|
|
* Return number of dram channels
|
|
*
|
|
* Return: dram channels.
|
|
*/
|
|
u8 get_dram_num_channels(void);
|
|
|
|
/*
|
|
* Return mc_clk from dram_clk.
|
|
*
|
|
* Return DRAM clock in MHZ to MC clk in MHz.
|
|
*
|
|
* dram_clk: dram clk in MHz
|
|
* Return: mc clk in MHz.
|
|
*/
|
|
unsigned long dram_clk_to_mc_clk(unsigned long dram_clk);
|
|
#endif /* __TEGRA_MC_UTILS_H */
|