diff --git a/bl31/aarch64/bl31_arch_setup.c b/bl31/aarch64/bl31_arch_setup.c index 0871b41..3deacba 100644 --- a/bl31/aarch64/bl31_arch_setup.c +++ b/bl31/aarch64/bl31_arch_setup.c @@ -44,7 +44,7 @@ void bl31_arch_setup(void) { /* Program the counter frequency */ - write_cntfrq_el0(plat_get_syscnt_freq()); + write_cntfrq_el0(plat_get_syscnt_freq2()); /* Initialize the cpu_ops pointer. */ init_cpu_ops(); diff --git a/docs/porting-guide.md b/docs/porting-guide.md index 5004d30..0cd3613 100644 --- a/docs/porting-guide.md +++ b/docs/porting-guide.md @@ -1529,10 +1529,10 @@ (that was copied during `bl31_early_platform_setup()`) if the image exists. It should return NULL otherwise. -### Function : plat_get_syscnt_freq() [mandatory] +### Function : plat_get_syscnt_freq2() [mandatory] Argument : void - Return : uint64_t + Return : unsigned int This function is used by the architecture setup code to retrieve the counter frequency for the CPU's generic timer. This value will be programmed into the diff --git a/include/plat/common/platform.h b/include/plat/common/platform.h index 42260e9..a08a12e 100644 --- a/include/plat/common/platform.h +++ b/include/plat/common/platform.h @@ -56,7 +56,9 @@ /******************************************************************************* * Mandatory common functions ******************************************************************************/ -unsigned long long plat_get_syscnt_freq(void); +unsigned long long plat_get_syscnt_freq(void) __deprecated; +unsigned int plat_get_syscnt_freq2(void); + int plat_get_image_source(unsigned int image_id, uintptr_t *dev_handle, uintptr_t *image_spec); diff --git a/plat/common/aarch64/plat_common.c b/plat/common/aarch64/plat_common.c index 9070c61..4322341 100644 --- a/plat/common/aarch64/plat_common.c +++ b/plat/common/aarch64/plat_common.c @@ -40,6 +40,9 @@ #pragma weak bl31_plat_enable_mmu #pragma weak bl32_plat_enable_mmu #pragma weak bl31_plat_runtime_setup +#if !ERROR_DEPRECATED +#pragma weak plat_get_syscnt_freq2 +#endif /* ERROR_DEPRECATED */ void bl31_plat_enable_mmu(uint32_t flags) { @@ -74,3 +77,14 @@ } #endif + +#if !ERROR_DEPRECATED +unsigned int plat_get_syscnt_freq2(void) +{ + unsigned long long freq = plat_get_syscnt_freq(); + + assert(freq >> 32 == 0); + + return (unsigned int)freq; +} +#endif /* ERROR_DEPRECATED */ diff --git a/services/std_svc/psci/psci_suspend.c b/services/std_svc/psci/psci_suspend.c index bd0c5db..367bb32 100644 --- a/services/std_svc/psci/psci_suspend.c +++ b/services/std_svc/psci/psci_suspend.c @@ -214,7 +214,7 @@ void psci_cpu_suspend_finish(unsigned int cpu_idx, psci_power_state_t *state_info) { - unsigned long long counter_freq; + unsigned int counter_freq; unsigned int max_off_lvl; /* Ensure we have been woken up from a suspended state */ @@ -238,7 +238,7 @@ psci_do_pwrup_cache_maintenance(); /* Re-init the cntfrq_el0 register */ - counter_freq = plat_get_syscnt_freq(); + counter_freq = plat_get_syscnt_freq2(); write_cntfrq_el0(counter_freq); /*