summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cesar/hal/leon/Config3
-rw-r--r--cesar/hal/leon/src/fatal_button.c16
-rw-r--r--cesar/hal/phy/src/phy.c2
-rw-r--r--cesar/lib/src/trace.c4
4 files changed, 20 insertions, 5 deletions
diff --git a/cesar/hal/leon/Config b/cesar/hal/leon/Config
index b70600d88a..ff48a3479e 100644
--- a/cesar/hal/leon/Config
+++ b/cesar/hal/leon/Config
@@ -1,3 +1,4 @@
CONFIG_LEON_FATAL_BUTTON = n
-CONFIG_LEON_FATAL_BUTTON_GPIO = 1
+CONFIG_GPIO_LEON_FATAL_BUTTON = y
+CONFIG_GPIO_LEON_FATAL_BUTTON_GPIO = 1
CONFIG_LEON_FATAL_BUTTON_IT = 0
diff --git a/cesar/hal/leon/src/fatal_button.c b/cesar/hal/leon/src/fatal_button.c
index 6b83574d8a..19a16e5151 100644
--- a/cesar/hal/leon/src/fatal_button.c
+++ b/cesar/hal/leon/src/fatal_button.c
@@ -17,6 +17,7 @@
#include <cyg/hal/drv_api.h>
#include "hal/leon/gpio.h"
+#include "hal/gpio/gpio.h"
#include "config/leon/fatal.h"
@@ -46,6 +47,16 @@ leon_fatal_button_dsr (cyg_vector_t vector, cyg_ucount32 count,
dbg_fatal ("fatal button pressed");
}
+/**
+ * Fatal Synchronisation, set LEON_FATAL_BUTTON GPIO to 0.
+ */
+static void
+leon_fatal_sync (void)
+{
+ GPIO_SETUP (LEON_FATAL_BUTTON, GPIO_DIRECTION_OUT);
+ GPIO_SET (LEON_FATAL_BUTTON, 0);
+}
+
void
leon_fatal_button_init (void)
{
@@ -63,6 +74,9 @@ leon_fatal_button_init (void)
LEON_GPIO_IT = LEON_GPIO_IT_CONFIG (CONFIG_LEON_FATAL_BUTTON_IT,
LEON_GPIO_IT_CONFIG_ENABLED
| LEON_GPIO_IT_CONFIG_EDGE
- | CONFIG_LEON_FATAL_BUTTON_GPIO);
+ | CONFIG_GPIO_LEON_FATAL_BUTTON_GPIO);
+ /* Register callback to dbg lib. */
+ dbg_assert (!dbg_fatal_cb[0]);
+ dbg_fatal_cb[0] = leon_fatal_sync;
}
diff --git a/cesar/hal/phy/src/phy.c b/cesar/hal/phy/src/phy.c
index 23baa9cecb..a64324736d 100644
--- a/cesar/hal/phy/src/phy.c
+++ b/cesar/hal/phy/src/phy.c
@@ -373,7 +373,7 @@ phy_init (void *user_data, phy_rx_fc_cb_t rx_fc_cb, phy_access_cb_t access_cb,
ctx->resys_gil_table[PHY_GIL_3534] =
PHY_RESYS_GIL_OFFSET__VALUE_3534;
ctx->pbdma_start_on_resys_it = false;
- dbg_do (dbg_fatal_cb[1] = phy_fatal_dump);
+ dbg_do (dbg_fatal_cb[2] = phy_fatal_dump);
/* Attach interrupt. */
cyg_drv_interrupt_create (LEON_ITC2_HIGH_PRIORITY_ITC1_IT,
LEON_ITC2_HIGH_PRIORITY_ITC1_IT_PRIORITY,
diff --git a/cesar/lib/src/trace.c b/cesar/lib/src/trace.c
index ad0d54377a..74c00410b1 100644
--- a/cesar/lib/src/trace.c
+++ b/cesar/lib/src/trace.c
@@ -52,8 +52,8 @@ trace_init (void)
trace_t * const ctx = &trace_global;
list_init (&ctx->buffers);
#if CONFIG_TRACE_ON_FATAL
- dbg_assert (!dbg_fatal_cb[0]);
- dbg_fatal_cb[0] = trace_dbg_dump_all;
+ dbg_assert (!dbg_fatal_cb[1]);
+ dbg_fatal_cb[1] = trace_dbg_dump_all;
#endif
}