feat(plat/mdeiatek/mt8186): add power-off function for PSCI

Add support for system-off.

TEST=build pass
BUG=b:202871018

Change-Id: Ic734696aab1b71ae85bca6ed08e544a522ce5c95
diff --git a/plat/mediatek/mt8186/plat_pm.c b/plat/mediatek/mt8186/plat_pm.c
index 607470f..9750b67 100644
--- a/plat/mediatek/mt8186/plat_pm.c
+++ b/plat/mediatek/mt8186/plat_pm.c
@@ -18,6 +18,8 @@
 #include <plat_mtk_lpm.h>
 #include <plat_params.h>
 #include <plat_pm.h>
+#include <pmic.h>
+#include <rtc.h>
 
 /*
  * Cluster state request:
@@ -335,6 +337,18 @@
 			sizeof(plat_power_state[cpu]));
 }
 
+static void __dead2 plat_mtk_system_off(void)
+{
+	INFO("MTK System Off\n");
+
+	rtc_power_off_sequence();
+	pmic_power_off();
+
+	wfi();
+	ERROR("MTK System Off: operation not handled.\n");
+	panic();
+}
+
 static const plat_psci_ops_t plat_psci_ops = {
 	.cpu_standby			= plat_cpu_standby,
 	.pwr_domain_on			= plat_power_domain_on,
@@ -343,7 +357,8 @@
 	.pwr_domain_suspend		= plat_power_domain_suspend,
 	.pwr_domain_suspend_finish	= plat_power_domain_suspend_finish,
 	.validate_power_state		= plat_validate_power_state,
-	.get_sys_suspend_power_state	= plat_get_sys_suspend_power_state
+	.get_sys_suspend_power_state	= plat_get_sys_suspend_power_state,
+	.system_off			= plat_mtk_system_off,
 };
 
 int plat_setup_psci_ops(uintptr_t sec_entrypoint,