From 106bc61f8668c1c8013f5425c1b589b9ca43f4d7 Mon Sep 17 00:00:00 2001 From: Besar Wicaksono Date: Tue, 25 Mar 2025 23:32:50 +0000 Subject: [PATCH] tegra: hwpm: add cpu_ext_* enums Add new CPU IP and resource enum in kernel driver and userspace library. This is to extend support for chips with more than 32 CPU instances (up to 128). JIRA MSST-893 Change-Id: I33142c7fc8f268f8c436cc3b7cd97385da31b558 Signed-off-by: Besar Wicaksono Reviewed-on: https://git-master.nvidia.com/r/c/linux-hwpm/+/3328654 GVS: buildbot_gerritrpt Reviewed-by: Yifei Wan Reviewed-by: Vasuki Shankar --- drivers/tegra/hwpm/include/tegra_hwpm.h | 13 +++++++++++-- drivers/tegra/hwpm/os/linux/ip_utils.c | 18 ++++++++++++++++++ include/uapi/linux/tegra-soc-hwpm-uapi.h | 10 ++++++++-- libnvsochwpm/include/nv_soc_hwpm.h | 10 ++++++++-- libnvsochwpm/os/lnx/nv_soc_hwpm_lnx.c | 8 ++++++++ 5 files changed, 53 insertions(+), 6 deletions(-) diff --git a/drivers/tegra/hwpm/include/tegra_hwpm.h b/drivers/tegra/hwpm/include/tegra_hwpm.h index fccedeb..a7a710f 100644 --- a/drivers/tegra/hwpm/include/tegra_hwpm.h +++ b/drivers/tegra/hwpm/include/tegra_hwpm.h @@ -103,7 +103,10 @@ enum tegra_hwpm_ip_enum { TEGRA_HWPM_IP_UCF_CSW, TEGRA_HWPM_IP_UCF_HUB, TEGRA_HWPM_IP_UCF_SCB, - TEGRA_HWPM_IP_CPU, + TEGRA_HWPM_IP_CPU, /* CPU instance 0-31 */ + TEGRA_HWPM_IP_CPU_EXT_0, /* CPU (extended) instance 32-63 */ + TEGRA_HWPM_IP_CPU_EXT_1, /* CPU (extended) instance 64-95 */ + TEGRA_HWPM_IP_CPU_EXT_2, /* CPU (extended) instance 96-127 */ TEGRA_HWPM_IP_NVTHERM, TEGRA_HWPM_IP_CSN, /* CSN instance 0-31 */ TEGRA_HWPM_IP_CSN_EXT_0, /* CSN (extended) instance 32-63 */ @@ -156,6 +159,9 @@ static inline const char *tegra_hwpm_ip_string(enum tegra_hwpm_ip_enum ip_enum) [TEGRA_HWPM_IP_UCF_HUB] = "ucf_hub", [TEGRA_HWPM_IP_UCF_SCB] = "ucf_scb", [TEGRA_HWPM_IP_CPU] = "cpu", + [TEGRA_HWPM_IP_CPU_EXT_0] = "cpu_ext_0", + [TEGRA_HWPM_IP_CPU_EXT_1] = "cpu_ext_1", + [TEGRA_HWPM_IP_CPU_EXT_2] = "cpu_ext_2", [TEGRA_HWPM_IP_NVTHERM] = "nvtherm", [TEGRA_HWPM_IP_CSN] = "csn", [TEGRA_HWPM_IP_CSN_EXT_0] = "csn_ext_0", @@ -214,7 +220,10 @@ enum tegra_hwpm_resource_enum { TEGRA_HWPM_RESOURCE_UCF_CSW, TEGRA_HWPM_RESOURCE_UCF_HUB, TEGRA_HWPM_RESOURCE_UCF_SCB, - TEGRA_HWPM_RESOURCE_CPU, + TEGRA_HWPM_RESOURCE_CPU, /* CPU instance 0 -31 */ + TEGRA_HWPM_RESOURCE_CPU_EXT_0, /* CPU (extended) instance 32-63 */ + TEGRA_HWPM_RESOURCE_CPU_EXT_1, /* CPU (extended) instance 64-95 */ + TEGRA_HWPM_RESOURCE_CPU_EXT_2, /* CPU (extended) instance 96-127 */ TEGRA_HWPM_RESOURCE_NVTHERM, TEGRA_HWPM_RESOURCE_CSN, /* CSN instance 0-31 */ TEGRA_HWPM_RESOURCE_CSN_EXT_0, /* CSN (extended) instance 32-63 */ diff --git a/drivers/tegra/hwpm/os/linux/ip_utils.c b/drivers/tegra/hwpm/os/linux/ip_utils.c index 724c9bc..8e942c5 100644 --- a/drivers/tegra/hwpm/os/linux/ip_utils.c +++ b/drivers/tegra/hwpm/os/linux/ip_utils.c @@ -147,6 +147,15 @@ static u32 tegra_hwpm_translate_soc_hwpm_ip(struct tegra_soc_hwpm *hwpm, case TEGRA_SOC_HWPM_IP_CPU: ip_enum_idx = TEGRA_HWPM_IP_CPU; break; + case TEGRA_SOC_HWPM_IP_CPU_EXT_0: + ip_enum_idx = TEGRA_HWPM_IP_CPU_EXT_0; + break; + case TEGRA_SOC_HWPM_IP_CPU_EXT_1: + ip_enum_idx = TEGRA_HWPM_IP_CPU_EXT_1; + break; + case TEGRA_SOC_HWPM_IP_CPU_EXT_2: + ip_enum_idx = TEGRA_HWPM_IP_CPU_EXT_2; + break; case TEGRA_SOC_HWPM_IP_NVTHERM: ip_enum_idx = TEGRA_HWPM_IP_NVTHERM; break; @@ -324,6 +333,15 @@ u32 tegra_hwpm_translate_soc_hwpm_resource(struct tegra_soc_hwpm *hwpm, case TEGRA_SOC_HWPM_RESOURCE_CPU: res_enum_idx = TEGRA_HWPM_RESOURCE_CPU; break; + case TEGRA_SOC_HWPM_RESOURCE_CPU_EXT_0: + res_enum_idx = TEGRA_HWPM_RESOURCE_CPU_EXT_0; + break; + case TEGRA_SOC_HWPM_RESOURCE_CPU_EXT_1: + res_enum_idx = TEGRA_HWPM_RESOURCE_CPU_EXT_1; + break; + case TEGRA_SOC_HWPM_RESOURCE_CPU_EXT_2: + res_enum_idx = TEGRA_HWPM_RESOURCE_CPU_EXT_2; + break; case TEGRA_SOC_HWPM_RESOURCE_NVTHERM: res_enum_idx = TEGRA_HWPM_RESOURCE_NVTHERM; break; diff --git a/include/uapi/linux/tegra-soc-hwpm-uapi.h b/include/uapi/linux/tegra-soc-hwpm-uapi.h index 9e4a515..6350898 100644 --- a/include/uapi/linux/tegra-soc-hwpm-uapi.h +++ b/include/uapi/linux/tegra-soc-hwpm-uapi.h @@ -61,7 +61,10 @@ enum tegra_soc_hwpm_ip { TEGRA_SOC_HWPM_IP_UCF_CSW, TEGRA_SOC_HWPM_IP_UCF_HUB, TEGRA_SOC_HWPM_IP_UCF_SCB, - TEGRA_SOC_HWPM_IP_CPU, + TEGRA_SOC_HWPM_IP_CPU, /* CPU instance 0-31 */ + TEGRA_SOC_HWPM_IP_CPU_EXT_0, /* CPU (extended) instance 32-63 */ + TEGRA_SOC_HWPM_IP_CPU_EXT_1, /* CPU (extended) instance 64-95 */ + TEGRA_SOC_HWPM_IP_CPU_EXT_2, /* CPU (extended) instance 96-127 */ TEGRA_SOC_HWPM_IP_NVTHERM, TEGRA_SOC_HWPM_IP_CSN, /* CSN instance 0-31 */ TEGRA_SOC_HWPM_IP_CSN_EXT_0, /* CSN (extended) instance 32-63 */ @@ -152,7 +155,10 @@ enum tegra_soc_hwpm_resource { TEGRA_SOC_HWPM_RESOURCE_UCF_CSW, TEGRA_SOC_HWPM_RESOURCE_UCF_HUB, TEGRA_SOC_HWPM_RESOURCE_UCF_SCB, - TEGRA_SOC_HWPM_RESOURCE_CPU, + TEGRA_SOC_HWPM_RESOURCE_CPU, /* CPU instance 0-31 */ + TEGRA_SOC_HWPM_RESOURCE_CPU_EXT_0, /* CPU (extended) instance 32-63 */ + TEGRA_SOC_HWPM_RESOURCE_CPU_EXT_1, /* CPU (extended) instance 64-95 */ + TEGRA_SOC_HWPM_RESOURCE_CPU_EXT_2, /* CPU (extended) instance 96-127 */ TEGRA_SOC_HWPM_RESOURCE_NVTHERM, TEGRA_SOC_HWPM_RESOURCE_CSN, /* CSN instance 0-31 */ TEGRA_SOC_HWPM_RESOURCE_CSN_EXT_0, /* CSN (extended) instance 32-63 */ diff --git a/libnvsochwpm/include/nv_soc_hwpm.h b/libnvsochwpm/include/nv_soc_hwpm.h index b1e7548..e1cabff 100644 --- a/libnvsochwpm/include/nv_soc_hwpm.h +++ b/libnvsochwpm/include/nv_soc_hwpm.h @@ -72,7 +72,10 @@ typedef enum { NV_SOC_HWPM_IP_UCF_CSW, NV_SOC_HWPM_IP_UCF_HUB, NV_SOC_HWPM_IP_UCF_SCB, - NV_SOC_HWPM_IP_CPU, + NV_SOC_HWPM_IP_CPU, /* CPU instance 0-31 */ + NV_SOC_HWPM_IP_CPU_EXT_0, /* CPU (extended) instance 32-63 */ + NV_SOC_HWPM_IP_CPU_EXT_1, /* CPU (extended) instance 64-95 */ + NV_SOC_HWPM_IP_CPU_EXT_2, /* CPU (extended) instance 96-127 */ NV_SOC_HWPM_IP_NVTHERM, NV_SOC_HWPM_IP_CSN, /* CSN instance 0-31 */ NV_SOC_HWPM_IP_CSN_EXT_0, /* CSN (extended) instance 32-63 */ @@ -138,7 +141,10 @@ typedef enum { NV_SOC_HWPM_RESOURCE_UCF_CSW, NV_SOC_HWPM_RESOURCE_UCF_HUB, NV_SOC_HWPM_RESOURCE_UCF_SCB, - NV_SOC_HWPM_RESOURCE_CPU, + NV_SOC_HWPM_RESOURCE_CPU, /* CPU instance 0-31 */ + NV_SOC_HWPM_RESOURCE_CPU_EXT_0, /* CPU (extended) instance 32-63 */ + NV_SOC_HWPM_RESOURCE_CPU_EXT_1, /* CPU (extended) instance 64-95 */ + NV_SOC_HWPM_RESOURCE_CPU_EXT_2, /* CPU (extended) instance 96-127 */ NV_SOC_HWPM_RESOURCE_NVTHERM, NV_SOC_HWPM_RESOURCE_CSN, /* CSN instance 0-31 */ NV_SOC_HWPM_RESOURCE_CSN_EXT_0, /* CSN (extended) instance 32-63 */ diff --git a/libnvsochwpm/os/lnx/nv_soc_hwpm_lnx.c b/libnvsochwpm/os/lnx/nv_soc_hwpm_lnx.c index 3ea9347..18515d2 100644 --- a/libnvsochwpm/os/lnx/nv_soc_hwpm_lnx.c +++ b/libnvsochwpm/os/lnx/nv_soc_hwpm_lnx.c @@ -122,6 +122,14 @@ static uint32_t get_ip_max_instances( break; case TEGRA_SOC_HWPM_CHIP_ID_T410: switch (ip) { + case NV_SOC_HWPM_IP_CPU: + return 32; + case NV_SOC_HWPM_IP_CPU_EXT_0: + return 32; + case NV_SOC_HWPM_IP_CPU_EXT_1: + return 32; + case NV_SOC_HWPM_IP_CPU_EXT_2: + return 2; case NV_SOC_HWPM_IP_NVTHERM: return 1; case NV_SOC_HWPM_IP_CSN: