diff options
author | Gregory Nutt <gnutt@nuttx.org> | 2014-08-09 18:34:52 -0600 |
---|---|---|
committer | Gregory Nutt <gnutt@nuttx.org> | 2014-08-09 18:34:52 -0600 |
commit | ab1019b7df4fc7929bfa1cd58a35a5d9c56708a6 (patch) | |
tree | 868e86fc66d653238a2a8f88d65f8e4038976239 | |
parent | 6d39b27f610f7e63ba0017ad8c56d5f685e3e327 (diff) | |
download | nuttx-ab1019b7df4fc7929bfa1cd58a35a5d9c56708a6.tar.gz nuttx-ab1019b7df4fc7929bfa1cd58a35a5d9c56708a6.tar.bz2 nuttx-ab1019b7df4fc7929bfa1cd58a35a5d9c56708a6.zip |
SAMA5 Timer/counter repair: Missing sem_post() caused a hang
-rw-r--r-- | nuttx/arch/arm/src/sama5/sam_freerun.c | 11 | ||||
-rw-r--r-- | nuttx/arch/arm/src/sama5/sam_oneshot.c | 8 | ||||
-rw-r--r-- | nuttx/arch/arm/src/sama5/sam_tc.c | 5 | ||||
-rw-r--r-- | nuttx/arch/arm/src/sama5/sam_tickless.c | 12 |
4 files changed, 25 insertions, 11 deletions
diff --git a/nuttx/arch/arm/src/sama5/sam_freerun.c b/nuttx/arch/arm/src/sama5/sam_freerun.c index 514e22778..f7fd95650 100644 --- a/nuttx/arch/arm/src/sama5/sam_freerun.c +++ b/nuttx/arch/arm/src/sama5/sam_freerun.c @@ -67,11 +67,15 @@ ****************************************************************************/ #ifdef CONFIG_SAMA5_TC_DEBUG -# define tcdbg dbg -# define tcvdbg vdbg +# define tcdbg dbg +# define tcvdbg vdbg +# define tclldbg lldbg +# define tcllvdbg llvdbg #else # define tcdbg(x...) # define tcvdbg(x...) +# define tclldbg(x...) +# define tcllvdbg(x...) #endif /**************************************************************************** @@ -316,8 +320,6 @@ int sam_freerun_counter(struct sam_freerun_s *freerun, struct timespec *ts) int sam_freerun_uninitialize(struct sam_freerun_s *freerun) { - irqstate_t flags; - /* Now we can disable the timer interrupt and disable the timer. */ sam_tc_attach(freerun->handle, NULL, NULL, 0); @@ -326,7 +328,6 @@ int sam_freerun_uninitialize(struct sam_freerun_s *freerun) /* Free the timer */ sam_tc_free(freerun->handle); - irqrestore(flags); return OK; } diff --git a/nuttx/arch/arm/src/sama5/sam_oneshot.c b/nuttx/arch/arm/src/sama5/sam_oneshot.c index 997e04f04..552cee10d 100644 --- a/nuttx/arch/arm/src/sama5/sam_oneshot.c +++ b/nuttx/arch/arm/src/sama5/sam_oneshot.c @@ -67,11 +67,15 @@ ****************************************************************************/ #ifdef CONFIG_SAMA5_TC_DEBUG -# define tcdbg dbg -# define tcvdbg vdbg +# define tcdbg dbg +# define tcvdbg vdbg +# define tclldbg lldbg +# define tcllvdbg llvdbg #else # define tcdbg(x...) # define tcvdbg(x...) +# define tclldbg(x...) +# define tcllvdbg(x...) #endif /**************************************************************************** diff --git a/nuttx/arch/arm/src/sama5/sam_tc.c b/nuttx/arch/arm/src/sama5/sam_tc.c index d0495382c..942f1912b 100644 --- a/nuttx/arch/arm/src/sama5/sam_tc.c +++ b/nuttx/arch/arm/src/sama5/sam_tc.c @@ -90,9 +90,13 @@ #ifdef CONFIG_SAMA5_TC_DEBUG # define tcdbg dbg # define tcvdbg vdbg +# define tclldbg llbg +# define tcllvdbg llvdbg #else # define tcdbg(x...) # define tcvdbg(x...) +# define tclldbg(x...) +# define tcllvdbg(x...) #endif /**************************************************************************** @@ -1138,6 +1142,7 @@ TC_HANDLE sam_tc_allocate(int channel, int mode) sam_chan_putreg(chan, SAM_TC_CMR_OFFSET, mode); sam_regdump(chan, "Allocated"); + sam_givesem(chan->tc); } /* Return an opaque reference to the channel */ diff --git a/nuttx/arch/arm/src/sama5/sam_tickless.c b/nuttx/arch/arm/src/sama5/sam_tickless.c index ce728a454..36b1759f8 100644 --- a/nuttx/arch/arm/src/sama5/sam_tickless.c +++ b/nuttx/arch/arm/src/sama5/sam_tickless.c @@ -149,11 +149,15 @@ #endif #ifdef CONFIG_SAMA5_TC_DEBUG -# define tcdbg dbg -# define tcvdbg vdbg +# define tcdbg dbg +# define tcvdbg vdbg +# define tclldbg lldbg +# define tcllvdbg llvdbg #else # define tcdbg(x...) # define tcvdbg(x...) +# define tclldbg(x...) +# define tcllvdbg(x...) #endif /**************************************************************************** @@ -243,7 +247,7 @@ void up_timer_initialize(void) CONFIG_USEC_PER_TICK); if (ret < 0) { - tcdbg("ERROR: sam_oneshot_initialize failed\n"); + tclldbg("ERROR: sam_oneshot_initialize failed\n"); PANIC(); } @@ -254,7 +258,7 @@ void up_timer_initialize(void) CONFIG_USEC_PER_TICK); if (ret < 0) { - tcdbg("ERROR: sam_freerun_initialize failed\n"); + tclldbg("ERROR: sam_freerun_initialize failed\n"); PANIC(); } } |