Tegra: fiq_glue: support to handle LEGACY_FIQ PPIs for Tegra SoCs
authorVarun Wadekar <vwadekar@nvidia.com>
Fri, 26 Jan 2018 18:33:42 +0000 (10:33 -0800)
committerVarun Wadekar <vwadekar@nvidia.com>
Thu, 31 Jan 2019 16:46:41 +0000 (08:46 -0800)
This patch adds support to handle secure PPIs for Tegra watchdog timers. This
functionality is currently protected by the ENABLE_WDT_LEGACY_FIQ_HANDLING
configuration variable and is only enabled for Tegra210 platforms, for now.

Change-Id: I0752ef54a986c58305e1bc8ad9be71d4a8bbd394
Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
plat/nvidia/tegra/common/tegra_fiq_glue.c
plat/nvidia/tegra/soc/t210/platform_t210.mk

index b036690458a557bfad0060602f5f627e02f9bb3b..60b5595566c9985e8af58f98fe4e05810a4f7e9c 100644 (file)
 #include <lib/el3_runtime/context_mgmt.h>
 #include <plat/common/platform.h>
 
+#if ENABLE_WDT_LEGACY_FIQ_HANDLING
+#include <flowctrl.h>
+#endif
 #include <tegra_def.h>
 #include <tegra_private.h>
 
+/* Legacy FIQ used by earlier Tegra platforms */
+#define LEGACY_FIQ_PPI_WDT             28U
+
 static DEFINE_BAKERY_LOCK(tegra_fiq_lock);
 
 /*******************************************************************************
@@ -79,6 +85,20 @@ static uint64_t tegra_fiq_interrupt_handler(uint32_t id,
                cm_set_elr_el3(NON_SECURE, ns_fiq_handler_addr);
        }
 
+#if ENABLE_WDT_LEGACY_FIQ_HANDLING
+       /*
+        * Tegra platforms that use LEGACY_FIQ as the watchdog timer FIQ
+        * need to issue an IPI to other CPUs, to allow them to handle
+        * the "system hung" scenario. This interrupt is passed to the GICD
+        * via the Flow Controller. So, once we receive this interrupt,
+        * disable the routing so that we can mark it as "complete" in the
+        * GIC later.
+        */
+       if (irq == LEGACY_FIQ_PPI_WDT) {
+               tegra_fc_disable_fiq_to_ccplex_routing();
+       }
+#endif
+
        /*
         * Mark this interrupt as complete to avoid a FIQ storm.
         */
index e23d7e360b6f1fef6d1f54e7e1046e0d16516142..59077eb81cd93d9617dcc367bffe13eb293d3cd1 100644 (file)
@@ -22,6 +22,9 @@ $(eval $(call add_define,MAX_XLAT_TABLES))
 MAX_MMAP_REGIONS                       := 15
 $(eval $(call add_define,MAX_MMAP_REGIONS))
 
+ENABLE_WDT_LEGACY_FIQ_HANDLING         := 1
+$(eval $(call add_define,ENABLE_WDT_LEGACY_FIQ_HANDLING))
+
 PLAT_INCLUDES          +=      -I${SOC_DIR}/drivers/se
 
 BL31_SOURCES           +=      drivers/ti/uart/aarch64/16550_console.S         \