diff --git a/include/plat/marvell/a8k/common/armada_common.h b/include/plat/marvell/a8k/common/armada_common.h index dd2a24a..709d009 100644 --- a/include/plat/marvell/a8k/common/armada_common.h +++ b/include/plat/marvell/a8k/common/armada_common.h @@ -124,5 +124,6 @@ uint32_t *size, uintptr_t base); int marvell_get_ccu_memory_map(int ap_idx, struct addr_map_win **win, uint32_t *size); +int system_power_off(void); #endif /* ARMADA_COMMON_H */ diff --git a/plat/marvell/a8k/common/a8k_common.mk b/plat/marvell/a8k/common/a8k_common.mk index ccb662b..bf79ebe 100644 --- a/plat/marvell/a8k/common/a8k_common.mk +++ b/plat/marvell/a8k/common/a8k_common.mk @@ -37,6 +37,13 @@ ROM_BIN_EXT ?= $(BUILD_PLAT)/ble.bin DOIMAGE_FLAGS += -b $(ROM_BIN_EXT) $(NAND_DOIMAGE_FLAGS) $(DOIMAGE_SEC_FLAGS) +# Check whether to build system_power.c for the platform +ifneq ("$(wildcard $(PLAT_FAMILY_BASE)/$(PLAT)/board/system_power.c)","") +SYSTEM_POWER_SUPPORT = 1 +else +SYSTEM_POWER_SUPPORT = 0 +endif + # This define specifies DDR type for BLE $(eval $(call add_define,CONFIG_DDR4)) @@ -82,6 +89,10 @@ BL31_PORTING_SOURCES := $(PLAT_FAMILY_BASE)/$(PLAT)/board/marvell_plat_config.c +ifeq ($(SYSTEM_POWER_SUPPORT),1) +BL31_PORTING_SOURCES += $(PLAT_FAMILY_BASE)/$(PLAT)/board/system_power.c +endif + BL31_SOURCES += lib/cpus/aarch64/cortex_a72.S \ $(PLAT_COMMON_BASE)/aarch64/plat_helpers.S \ $(PLAT_COMMON_BASE)/aarch64/plat_arch_config.c \ diff --git a/plat/marvell/a8k/common/plat_pm.c b/plat/marvell/a8k/common/plat_pm.c index d07601a..96e95c2 100644 --- a/plat/marvell/a8k/common/plat_pm.c +++ b/plat/marvell/a8k/common/plat_pm.c @@ -792,8 +792,20 @@ * A8K handlers to shutdown/reboot the system ***************************************************************************** */ + +/* Set a weak stub for platforms that don't configure system power off */ +#pragma weak system_power_off +int system_power_off(void) +{ + return 0; +} + static void __dead2 a8k_system_off(void) { + /* Call the platform specific system power off function */ + system_power_off(); + + /* board doesn't have a system off implementation */ ERROR("%s: needs to be implemented\n", __func__); panic(); }