ipq807x: Move psci related multicore code to board file

PSCI is only supported in HK.

Change-Id: I83205697d4efdc74c9700b70d807d175b8d7f545
Signed-off-by: Santan Kumar <santank@codeaurora.org>
This commit is contained in:
Santan Kumar 2018-04-11 15:06:48 +05:30
parent 6e4d2c720d
commit 9cb02c6c60
3 changed files with 45 additions and 42 deletions

View file

@ -23,13 +23,6 @@ DECLARE_GLOBAL_DATA_PTR;
#define SECONDARY_CORE_STACKSZ (8 * 1024)
#define CPU_POWER_DOWN (1 << 16)
#define ARM_PSCI_TZ_FN_BASE 0x84000000
#define ARM_PSCI_TZ_FN(n) (ARM_PSCI_TZ_FN_BASE + (n))
#define ARM_PSCI_TZ_FN_CPU_OFF ARM_PSCI_TZ_FN(2)
#define ARM_PSCI_TZ_FN_CPU_ON ARM_PSCI_TZ_FN(3)
#define ARM_PSCI_TZ_FN_AFFINITY_INFO ARM_PSCI_TZ_FN(4)
struct cpu_entry_arg {
void *stack_ptr;
volatile void *gd_ptr;
@ -40,17 +33,10 @@ struct cpu_entry_arg {
void *stack_top_ptr;
};
extern unsigned int __invoke_psci_fn_smc(unsigned int, unsigned int,
unsigned int, unsigned int);
extern void secondary_cpu_init(void);
static struct cpu_entry_arg core[NR_CPUS - 1];
void psci_cpu_off(unsigned int state)
{
__invoke_psci_fn_smc(ARM_PSCI_TZ_FN_CPU_OFF, state, 0, 0);
}
asmlinkage void secondary_core_entry(char *argv, int *cmd_complete,
int *cmd_result)
{
@ -66,30 +52,7 @@ asmlinkage void secondary_core_entry(char *argv, int *cmd_complete,
*cmd_complete = 1;
state = CPU_POWER_DOWN;
psci_cpu_off(state);
}
int psci_cpu_on(unsigned int cpuid, unsigned int entry, unsigned int arg)
{
int err;
err = __invoke_psci_fn_smc(ARM_PSCI_TZ_FN_CPU_ON, cpuid, entry, arg);
if (err) {
printf("Enabling CPU%d via psci failed!\n", cpuid);
return -1;
}
printf("Enabled CPU%d via psci successfully!\n", cpuid);
return 0;
}
int is_psci_cpu_off(unsigned int cpuid)
{
int err;
err = __invoke_psci_fn_smc(ARM_PSCI_TZ_FN_AFFINITY_INFO, cpuid, 0, 0);
return err;
bring_secondary_core_down(state);
}
int do_runmulticore(cmd_tbl_t *cmdtp,
@ -137,10 +100,10 @@ int do_runmulticore(cmd_tbl_t *cmdtp,
for (i = 1; i < argc; i++) {
printf("Scheduling Core %d\n", i);
delay = 0;
ret = psci_cpu_on(i, (unsigned int)secondary_cpu_init,
ret = bring_sec_core_up(i, (unsigned int)secondary_cpu_init,
(unsigned int)&(core[i - 1]));
if (ret) {
panic("PSCI failed for core %d\n",i);
panic("Some problem to getting core %d up\n", i);
}
while ((delay < 5) && (!(core[i - 1].cpu_up))) {
@ -187,7 +150,7 @@ int do_runmulticore(cmd_tbl_t *cmdtp,
while (core_on_status) {
for (i = 1; i < argc; i++) {
if (core_on_status & (BIT(i - 1))) {
if (is_psci_cpu_off(i) == 1) {
if (is_secondary_core_off(i) == 1) {
printf("core %d powered off\n", i);
core_on_status &= (~BIT((i - 1)));
}

View file

@ -39,7 +39,6 @@ qca_mmc mmc_host;
struct sdhci_host mmc_host;
#endif
extern asmlinkage void __invoke_psci_fn_smc(unsigned long, unsigned long, unsigned long, unsigned long);
extern loff_t board_env_offset;
extern loff_t board_env_range;
@ -1090,3 +1089,31 @@ int set_uuid_bootargs(char *boot_args, char *part_name, int buflen, bool gpt_fla
return 0;
}
int is_secondary_core_off(unsigned int cpuid)
{
int err;
err = __invoke_psci_fn_smc(ARM_PSCI_TZ_FN_AFFINITY_INFO, cpuid, 0, 0);
return err;
}
void bring_secondary_core_down(unsigned int state)
{
__invoke_psci_fn_smc(ARM_PSCI_TZ_FN_CPU_OFF, state, 0, 0);
}
int bring_sec_core_up(unsigned int cpuid, unsigned int entry, unsigned int arg)
{
int err;
err = __invoke_psci_fn_smc(ARM_PSCI_TZ_FN_CPU_ON, cpuid, entry, arg);
if (err) {
printf("Enabling CPU%d via psci failed!\n", cpuid);
return -1;
}
printf("Enabled CPU%d via psci successfully!\n", cpuid);
return 0;
}

View file

@ -210,6 +210,19 @@
#define USB3_PCS_TXDEEMPH_M6DB_V0 0x824
#define USB3_PCS_TXDEEMPH_M3P5DB_V0 0x828
#define SECONDARY_CORE_STACKSZ (8 * 1024)
#define CPU_POWER_DOWN (1 << 16)
#define ARM_PSCI_TZ_FN_BASE 0x84000000
#define ARM_PSCI_TZ_FN(n) (ARM_PSCI_TZ_FN_BASE + (n))
#define ARM_PSCI_TZ_FN_CPU_OFF ARM_PSCI_TZ_FN(2)
#define ARM_PSCI_TZ_FN_CPU_ON ARM_PSCI_TZ_FN(3)
#define ARM_PSCI_TZ_FN_AFFINITY_INFO ARM_PSCI_TZ_FN(4)
unsigned int __invoke_psci_fn_smc(unsigned int, unsigned int,
unsigned int, unsigned int);
struct smem_ram_ptn {
char name[16];
unsigned long long start;