68 lines
1.5 KiB
C
Executable file
68 lines
1.5 KiB
C
Executable file
#include <soc/samsung/cal-if.h>
|
|
#include "../pwrcal-env.h"
|
|
#include "include/pmucal_system.h"
|
|
#include "include/pmucal_powermode.h"
|
|
#include "include/pmucal_rae.h"
|
|
#include "include/pmucal_cpu.h"
|
|
|
|
void pmucal_powermode_hint(unsigned int mode)
|
|
{
|
|
unsigned int cpu = smp_processor_id();
|
|
|
|
__raw_writel(mode, pmucal_cpuinform_list[cpu].base_va
|
|
+ pmucal_cpuinform_list[cpu].offset);
|
|
}
|
|
|
|
u32 pmucal_get_powermode_hint(unsigned int cpu)
|
|
{
|
|
return __raw_readl(pmucal_cpuinform_list[cpu].base_va
|
|
+ pmucal_cpuinform_list[cpu].offset);
|
|
}
|
|
|
|
u32 pmucal_is_lastcore_detecting(unsigned int cpu)
|
|
{
|
|
u32 power_mode;
|
|
|
|
if (cpu >= cpu_inform_list_size)
|
|
return 0;
|
|
|
|
power_mode = pmucal_get_powermode_hint(cpu);
|
|
|
|
if (!cal_cpu_status(cpu))
|
|
return 0;
|
|
|
|
if (power_mode == cpu_inform_cpd || power_mode == pmucal_sys_powermode[SYS_SICD])
|
|
return 1;
|
|
|
|
return 0;
|
|
}
|
|
|
|
void pmucal_powermode_hint_clear(void)
|
|
{
|
|
unsigned int cpu = smp_processor_id();
|
|
|
|
__raw_writel(0, pmucal_cpuinform_list[cpu].base_va
|
|
+ pmucal_cpuinform_list[cpu].offset);
|
|
}
|
|
|
|
int pmucal_cpuinform_init(void)
|
|
{
|
|
int i, j;
|
|
|
|
for (i = 0; i < cpu_inform_list_size; i++) {
|
|
for (j = 0; j < pmucal_p2v_list_size; j++)
|
|
if (pmucal_p2v_list[j].pa == (phys_addr_t)pmucal_cpuinform_list[i].base_pa)
|
|
break;
|
|
|
|
if (j != pmucal_p2v_list_size) {
|
|
pmucal_cpuinform_list[i].base_va = pmucal_p2v_list[j].va;
|
|
} else {
|
|
pr_err("%s %s: there is no such PA in p2v_list (idx:%d)\n",
|
|
PMUCAL_PREFIX, __func__, i);
|
|
return -ENOENT;
|
|
}
|
|
|
|
}
|
|
|
|
return 0;
|
|
}
|