---
drivers/platform/x86/amd/pmc/pmc.c | 43 +++++++++++++++++++++++++++---
drivers/platform/x86/amd/pmc/pmc.h | 1 +
2 files changed, 41 insertions(+), 3 deletions(-)
diff --git a/drivers/platform/x86/amd/pmc/pmc.c b/drivers/platform/x86/amd/pmc/pmc.c
index 1f0ddf5440c3..5ca97712ef44 100644
--- a/drivers/platform/x86/amd/pmc/pmc.c
+++ b/drivers/platform/x86/amd/pmc/pmc.c
@@ -94,6 +94,35 @@ struct amd_pmc_bit_map {
u32 bit_mask;
};
+static const struct amd_pmc_bit_map soc15_ip_blk_v2[] = {
+ {"DISPLAY", BIT(0)},
+ {"CPU", BIT(1)},
+ {"GFX", BIT(2)},
+ {"VDD", BIT(3)},
+ {"VDD_CCX", BIT(4)},
+ {"ACP", BIT(5)},
+ {"VCN_0", BIT(6)},
+ {"VCN_1", BIT(7)},
+ {"ISP", BIT(8)},
+ {"NBIO", BIT(9)},
+ {"DF", BIT(10)},
+ {"USB3_0", BIT(11)},
+ {"USB3_1", BIT(12)},
+ {"LAPIC", BIT(13)},
+ {"USB3_2", BIT(14)},
+ {"USB4_RT0", BIT(15)},
+ {"USB4_RT1", BIT(16)},
+ {"USB4_0", BIT(17)},
+ {"USB4_1", BIT(18)},
+ {"MPM", BIT(19)},
+ {"JPEG_0", BIT(20)},
+ {"JPEG_1", BIT(21)},
+ {"IPU", BIT(22)},
+ {"UMSCH", BIT(23)},
+ {"VPE", BIT(24)},
+ {}
+};
+
static const struct amd_pmc_bit_map soc15_ip_blk[] = {
{"DISPLAY", BIT(0)},
{"CPU", BIT(1)},
@@ -162,14 +191,22 @@ static void amd_pmc_get_ip_info(struct amd_pmc_dev *dev)
case AMD_CPU_ID_CB:
dev->num_ips = 12;
dev->smu_msg = 0x538;
+ dev->ptr = (struct amd_pmc_bit_map *)soc15_ip_blk;
break;
case AMD_CPU_ID_PS:
dev->num_ips = 21;
dev->smu_msg = 0x538;
+ dev->ptr = (struct amd_pmc_bit_map *)soc15_ip_blk;
break;
case PCI_DEVICE_ID_AMD_1AH_M20H_ROOT:
case PCI_DEVICE_ID_AMD_1AH_M60H_ROOT:
- dev->num_ips = 22;
+ if (boot_cpu_data.x86_model == 0x70) {
+ dev->num_ips = 25;
+ dev->ptr = (struct amd_pmc_bit_map *)soc15_ip_blk_v2;
+ } else {
+ dev->num_ips = 22;
+ dev->ptr = (struct amd_pmc_bit_map *)soc15_ip_blk;
+ }
dev->smu_msg = 0x938;
break;
}
@@ -337,8 +374,8 @@ static int smu_fw_info_show(struct seq_file *s, void *unused)
seq_puts(s, "\n=== Active time (in us) ===\n");
for (idx = 0 ; idx < dev->num_ips ; idx++) {
- if (soc15_ip_blk[idx].bit_mask & dev->active_ips)
- seq_printf(s, "%-8s : %lld\n", soc15_ip_blk[idx].name,
+ if (dev->ptr[idx].bit_mask & dev->active_ips)
+ seq_printf(s, "%-8s : %lld\n", dev->ptr[idx].name,
table.timecondition_notmet_lastcapture[idx]);
}
diff --git a/drivers/platform/x86/amd/pmc/pmc.h b/drivers/platform/x86/amd/pmc/pmc.h
index be3e6b35433c..32b02ba95eeb 100644
--- a/drivers/platform/x86/amd/pmc/pmc.h
+++ b/drivers/platform/x86/amd/pmc/pmc.h
@@ -57,6 +57,7 @@ struct amd_pmc_dev {
bool disable_8042_wakeup;
struct amd_mp2_dev *mp2;
struct stb_arg stb_arg;
+ struct amd_pmc_bit_map *ptr;
};
void amd_pmc_process_restore_quirks(struct amd_pmc_dev *dev);