summaryrefslogtreecommitdiffstats
path: root/c
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2010-03-10 17:16:02 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2010-03-10 17:16:02 +0000
commitee07b9971570d9216e2ab3b02d5216a1bac6ab3d (patch)
tree758b3f5874c77f1d7d87713125ca990925ca7610 /c
parent2010-03-10 Joel Sherrill <joel.sherrill@oarcorp.com> (diff)
downloadrtems-ee07b9971570d9216e2ab3b02d5216a1bac6ab3d.tar.bz2
2010-03-10 Gedare Bloom <gedare@gwu.edu>
PR 1495/bsp * clock/ckinit.c, make/custom/pc386.cfg: Calling rtems_clock_get_uptime() in a tight loop sometimes showed time moving backwards.
Diffstat (limited to 'c')
-rw-r--r--c/src/lib/libbsp/i386/pc386/ChangeLog7
-rw-r--r--c/src/lib/libbsp/i386/pc386/clock/ckinit.c16
-rw-r--r--c/src/lib/libbsp/i386/pc386/make/custom/pc386.cfg22
3 files changed, 34 insertions, 11 deletions
diff --git a/c/src/lib/libbsp/i386/pc386/ChangeLog b/c/src/lib/libbsp/i386/pc386/ChangeLog
index 5bfedb4542..e2841b4d34 100644
--- a/c/src/lib/libbsp/i386/pc386/ChangeLog
+++ b/c/src/lib/libbsp/i386/pc386/ChangeLog
@@ -1,3 +1,10 @@
+2010-03-10 Gedare Bloom <gedare@gwu.edu>
+
+ PR 1495/bsp
+ * clock/ckinit.c, make/custom/pc386.cfg: Calling
+ rtems_clock_get_uptime() in a tight loop sometimes showed time moving
+ backwards.
+
2009-12-23 Joel Sherrill <joel.sherrill@oarcorp.com>
* include/bsp.h: Add BSP_HAS_FRAME_BUFFER.
diff --git a/c/src/lib/libbsp/i386/pc386/clock/ckinit.c b/c/src/lib/libbsp/i386/pc386/clock/ckinit.c
index ddf81555d4..76e3e82e54 100644
--- a/c/src/lib/libbsp/i386/pc386/clock/ckinit.c
+++ b/c/src/lib/libbsp/i386/pc386/clock/ckinit.c
@@ -47,6 +47,11 @@ uint64_t pc586_tsc_at_tick;
/* this driver may need to count ISRs per tick */
#define CLOCK_DRIVER_ISRS_PER_TICK pc386_isrs_per_tick
+/* if so, the driver may use the count in Clock_driver_support_at_tick */
+#ifdef CLOCK_DRIVER_ISRS_PER_TICK
+extern volatile uint32_t Clock_driver_isrs;
+#endif
+
#define READ_8254( _lsb, _msb ) \
do { outport_byte(TIMER_MODE, TIMER_SEL0|TIMER_LATCH); \
inport_byte(TIMER_CNTR0, _lsb); \
@@ -66,7 +71,18 @@ uint32_t (*Clock_driver_nanoseconds_since_last_tick)(void) = NULL;
*/
void Clock_driver_support_at_tick_tsc(void)
{
+#ifdef CLOCK_DRIVER_ISRS_PER_TICK
+ /*
+ * The driver is multiple ISRs per clock tick.
+ */
+ if (!Clock_driver_isrs)
+ pc586_tsc_at_tick = rdtsc();
+#else
+ /*
+ * The driver is one ISR per clock tick.
+ */
pc586_tsc_at_tick = rdtsc();
+#endif
}
void Clock_driver_support_at_tick_empty(void)
diff --git a/c/src/lib/libbsp/i386/pc386/make/custom/pc386.cfg b/c/src/lib/libbsp/i386/pc386/make/custom/pc386.cfg
index 34495ccd50..d0492da4d9 100644
--- a/c/src/lib/libbsp/i386/pc386/make/custom/pc386.cfg
+++ b/c/src/lib/libbsp/i386/pc386/make/custom/pc386.cfg
@@ -43,17 +43,17 @@ HEADERADDR=0x00097E00
LDFLAGS += -Wl,-Ttext,$(RELOCADDR)
-define bsp-post-link
- $(default-bsp-post-link)
- $(OBJCOPY) -O elf32-i386 \
- --remove-section=.comment \
- --remove-section=.note \
- --strip-unneeded $(basename $@).exe $(basename $@).nxe
- $(OBJCOPY) -O binary $(basename $@).nxe $(basename $@).bin
- $(PROJECT_TOOLS)/bin2boot -v $(basename $@)$(DOWNEXT) $(HEADERADDR)\
- $(START16FILE) $(START16ADDR) 0 $(basename $@).bin $(RELOCADDR) 0
- rm -f $(basename $@).nxe
-endef
+#define bsp-post-link
+# $(default-bsp-post-link)
+# $(OBJCOPY) -O elf32-i386 \
+# --remove-section=.comment \
+# --remove-section=.note \
+# --strip-unneeded $(basename $@).exe $(basename $@).nxe
+# $(OBJCOPY) -O binary $(basename $@).nxe $(basename $@).bin
+# $(PROJECT_TOOLS)/bin2boot -v $(basename $@)$(DOWNEXT) $(HEADERADDR)\
+# $(START16FILE) $(START16ADDR) 0 $(basename $@).bin $(RELOCADDR) 0
+# rm -f $(basename $@).nxe
+#endef
# BSP-specific tools
BIN2BOOT=$(PROJECT_TOOLS)/bin2boot