diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 2010-03-10 17:16:02 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 2010-03-10 17:16:02 +0000 |
commit | ee07b9971570d9216e2ab3b02d5216a1bac6ab3d (patch) | |
tree | 758b3f5874c77f1d7d87713125ca990925ca7610 /c/src/lib/libbsp/i386/pc386 | |
parent | 2010-03-10 Joel Sherrill <joel.sherrill@oarcorp.com> (diff) | |
download | rtems-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/src/lib/libbsp/i386/pc386')
-rw-r--r-- | c/src/lib/libbsp/i386/pc386/ChangeLog | 7 | ||||
-rw-r--r-- | c/src/lib/libbsp/i386/pc386/clock/ckinit.c | 16 | ||||
-rw-r--r-- | c/src/lib/libbsp/i386/pc386/make/custom/pc386.cfg | 22 |
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 |