diff --git a/board/qca/arm/ipq5018/ipq5018.c b/board/qca/arm/ipq5018/ipq5018.c index 91880cdc2e..f3e939c205 100644 --- a/board/qca/arm/ipq5018/ipq5018.c +++ b/board/qca/arm/ipq5018/ipq5018.c @@ -1658,3 +1658,33 @@ void fdt_fixup_set_dload_warm_reset(void *blob) if (ret) printf("fixup_set_dload: 'dload_warm_reset' not set"); } + +#ifdef CONFIG_SMP_CMD_SUPPORT +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; +} +#endif diff --git a/include/configs/ipq5018.h b/include/configs/ipq5018.h index 4e519b4259..51f4624385 100644 --- a/include/configs/ipq5018.h +++ b/include/configs/ipq5018.h @@ -323,6 +323,10 @@ extern loff_t board_env_size; #ifndef CONFIG_IPQ_TINY #define CONFIG_CMD_BOOTZ #define CONFIG_CMD_CACHE +/* + * Multicore CPU support + */ +#define CONFIG_SMP_CMD_SUPPORT #endif #define CONFIG_FDT_FIXUP_PARTITIONS @@ -389,4 +393,8 @@ extern loff_t board_env_size; #undef CONFIG_ZLIB #endif +#ifdef CONFIG_SMP_CMD_SUPPORT +#define NR_CPUS 2 +#endif + #endif /* _IPQ5018_H */