diff --git a/board/qca/arm/ipq9574/ipq9574.c b/board/qca/arm/ipq9574/ipq9574.c index 7514dc1fc9..5073e86957 100644 --- a/board/qca/arm/ipq9574/ipq9574.c +++ b/board/qca/arm/ipq9574/ipq9574.c @@ -726,3 +726,30 @@ void fdt_fixup_auto_restart(void *blob) return; } +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; +} diff --git a/include/configs/ipq9574.h b/include/configs/ipq9574.h index 3486523e02..df1d1ce805 100644 --- a/include/configs/ipq9574.h +++ b/include/configs/ipq9574.h @@ -101,6 +101,13 @@ #define CONFIG_IPQ_NO_MACS 6 #define CONFIG_ENV_IS_IN_SPI_FLASH 1 #define CONFIG_ENV_SECT_SIZE (64 * 1024) + +#define CONFIG_SMP_CMD_SUPPORT + +#ifdef CONFIG_SMP_CMD_SUPPORT +#define NR_CPUS 4 +#endif + /* * IPQ_TFTP_MIN_ADDR: Starting address of Linux HLOS region. * CONFIG_TZ_END_ADDR: Ending address of Trust Zone and starting