summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/lib/tftf_lib.h4
-rw-r--r--lib/psci/psci.c29
2 files changed, 32 insertions, 1 deletions
diff --git a/include/lib/tftf_lib.h b/include/lib/tftf_lib.h
index 7e5ede5..22f0d4e 100644
--- a/include/lib/tftf_lib.h
+++ b/include/lib/tftf_lib.h
@@ -75,6 +75,10 @@ int32_t tftf_psci_cpu_off(void);
int32_t tftf_psci_affinity_info(uint64_t target_affinity,
uint32_t lowest_affinity_level);
int32_t tftf_get_psci_feature_info(uint32_t psci_func_id);
+u_register_t tftf_psci_stat_count(u_register_t target_cpu,
+ uint32_t power_state);
+u_register_t tftf_psci_stat_residency(u_register_t target_cpu,
+ uint32_t power_state);
/*
* PSCI Helper functions
diff --git a/lib/psci/psci.c b/lib/psci/psci.c
index d761747..682ad5c 100644
--- a/lib/psci/psci.c
+++ b/lib/psci/psci.c
@@ -97,7 +97,35 @@ int32_t tftf_psci_cpu_off(void)
smc64_ret_values ret_vals;
ret_vals = tftf_smc64(&args);
+ return ret_vals.ret0;
+}
+
+u_register_t tftf_psci_stat_residency(u_register_t target_cpu,
+ uint32_t power_state)
+{
+ smc64_args args = {
+ SMC_PSCI_STAT_RESIDENCY64,
+ target_cpu,
+ power_state,
+ };
+ smc64_ret_values ret_vals;
+
+ ret_vals = tftf_smc64(&args);
+ return ret_vals.ret0;
+}
+
+u_register_t tftf_psci_stat_count(u_register_t target_cpu,
+ uint32_t power_state)
+{
+ smc64_args args = {
+ SMC_PSCI_STAT_COUNT64,
+ target_cpu,
+ power_state,
+ };
+ smc64_ret_values ret_vals;
+
+ ret_vals = tftf_smc64(&args);
return ret_vals.ret0;
}
@@ -307,4 +335,3 @@ unsigned int tftf_get_psci_version(void)
return ret.ret0;
}
-