From e0dd8a5ad830798bc8082b03b8c42c32fb9660e0 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Fri, 20 Apr 2018 12:08:42 +0200 Subject: bsps: Move benchmark timer to bsps This patch is a part of the BSP source reorganization. Update #3285. --- c/src/lib/libbsp/mips/csb350/Makefile.am | 2 +- c/src/lib/libbsp/mips/csb350/timer/timer.c | 57 ------------------------ c/src/lib/libbsp/mips/jmr3904/Makefile.am | 2 +- c/src/lib/libbsp/mips/jmr3904/timer/timer.c | 67 ----------------------------- 4 files changed, 2 insertions(+), 126 deletions(-) delete mode 100644 c/src/lib/libbsp/mips/csb350/timer/timer.c delete mode 100644 c/src/lib/libbsp/mips/jmr3904/timer/timer.c (limited to 'c/src/lib/libbsp/mips') diff --git a/c/src/lib/libbsp/mips/csb350/Makefile.am b/c/src/lib/libbsp/mips/csb350/Makefile.am index a5c9de4e71..f8a6874390 100644 --- a/c/src/lib/libbsp/mips/csb350/Makefile.am +++ b/c/src/lib/libbsp/mips/csb350/Makefile.am @@ -31,7 +31,7 @@ librtemsbsp_a_SOURCES +=../../../../../../bsps/mips/csb350/clock/clockdrv.c librtemsbsp_a_SOURCES += ../../../../../../bsps/mips/csb350/console/console-io.c librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/serial/console-polled.c # timer -librtemsbsp_a_SOURCES += timer/timer.c +librtemsbsp_a_SOURCES += ../../../../../../bsps/mips/csb350/btimer/btimer.c #isr librtemsbsp_a_SOURCES += ../shared/irq/vectorexceptions.c librtemsbsp_a_SOURCES += ../shared/irq/irq.c diff --git a/c/src/lib/libbsp/mips/csb350/timer/timer.c b/c/src/lib/libbsp/mips/csb350/timer/timer.c deleted file mode 100644 index 30dbfe836b..0000000000 --- a/c/src/lib/libbsp/mips/csb350/timer/timer.c +++ /dev/null @@ -1,57 +0,0 @@ -/* - * This file implements a benchmark timer using the count/compare - * CP0 registers. - * - * Copyright (c) 2005 by Cogent Computer Systems - * Written by Jay Monkman - * - * The license and distribution terms for this file may be - * found in the file LICENSE in this distribution or at - * http://www.rtems.org/license/LICENSE. - */ - -#include - -#include -#include - -bool benchmark_timer_find_average_overhead; -uint32_t tstart; - -void benchmark_timer_initialize(void) -{ - __asm__ volatile ("mfc0 %0, $9\n" : "=r" (tstart)); - /* tick time in picooseconds */ -} - -#define AVG_OVERHEAD 0 /* It typically takes N instructions */ - /* to start/stop the timer. */ -#define LEAST_VALID 1 /* Don't trust a value lower than this */ - /* tx39 simulator can count instructions. :) */ - -benchmark_timer_t benchmark_timer_read(void) -{ - uint32_t total; - uint32_t cnt; - - __asm__ volatile ("mfc0 %0, $9\n" : "=r" (cnt)); - - total = cnt - tstart; - total = (total * 1000) / 396; /* convert to nanoseconds */ - - - if ( benchmark_timer_find_average_overhead == true ) - return total; /* in one microsecond units */ - - if ( total < LEAST_VALID ) - return 0; /* below timer resolution */ - - return total - AVG_OVERHEAD; -} - -void benchmark_timer_disable_subtracting_average_overhead( - bool find_flag -) -{ - benchmark_timer_find_average_overhead = find_flag; -} diff --git a/c/src/lib/libbsp/mips/jmr3904/Makefile.am b/c/src/lib/libbsp/mips/jmr3904/Makefile.am index b0bb53711a..ccffd01669 100644 --- a/c/src/lib/libbsp/mips/jmr3904/Makefile.am +++ b/c/src/lib/libbsp/mips/jmr3904/Makefile.am @@ -30,7 +30,7 @@ librtemsbsp_a_SOURCES +=../../../../../../bsps/mips/jmr3904/clock/clockdrv.c librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/serial/console-polled.c librtemsbsp_a_SOURCES += ../../../../../../bsps/mips/jmr3904/console/console-io.c # timer -librtemsbsp_a_SOURCES += timer/timer.c +librtemsbsp_a_SOURCES += ../../../../../../bsps/mips/jmr3904/btimer/btimer.c #isr librtemsbsp_a_SOURCES += ../shared/irq/vectorexceptions.c librtemsbsp_a_SOURCES += ../shared/irq/irq.c diff --git a/c/src/lib/libbsp/mips/jmr3904/timer/timer.c b/c/src/lib/libbsp/mips/jmr3904/timer/timer.c deleted file mode 100644 index ca97cd3a0b..0000000000 --- a/c/src/lib/libbsp/mips/jmr3904/timer/timer.c +++ /dev/null @@ -1,67 +0,0 @@ -/* - * This file implements a benchmark timer using a TX39 timer. - * - * NOTE: On the simulator, the count directly reflects instructions. - * - * COPYRIGHT (c) 1989-2000. - * On-Line Applications Research Corporation (OAR). - * - * The license and distribution terms for this file may be - * found in the file LICENSE in this distribution or at - * http://www.rtems.org/license/LICENSE. - */ - -#include - -#include -#include - -bool benchmark_timer_find_average_overhead; - -void benchmark_timer_initialize(void) -{ - /* - * Programming the compare register as the maximum value should let - * it run long enough and accurate enough not to require an interrupt. - * but if it ever does generate an interrupt, we will simply fault. - * - * NOTE: This is similar to the clock driver initialization - * with the exception that the divider is disabled and - * the compare register is set to the maximum value. - */ - - TX3904_TIMER_WRITE( TX3904_TIMER1_BASE, TX3904_TIMER_TCR, 0x20 ); - TX3904_TIMER_WRITE( TX3904_TIMER1_BASE, TX3904_TIMER_CCDR, 0x3 ); - TX3904_TIMER_WRITE( TX3904_TIMER1_BASE, TX3904_TIMER_TRR, 0x0 ); - TX3904_TIMER_WRITE( TX3904_TIMER1_BASE, TX3904_TIMER_CPRA, 0xFFFFFFFF ); - TX3904_TIMER_WRITE( TX3904_TIMER1_BASE, TX3904_TIMER_TISR, 0x00 ); - TX3904_TIMER_WRITE( TX3904_TIMER1_BASE, TX3904_TIMER_ITMR, 0x0001 ); - TX3904_TIMER_WRITE( TX3904_TIMER1_BASE, TX3904_TIMER_TCR, 0xe0 ); -} - -#define AVG_OVERHEAD 0 /* It typically takes N instructions */ - /* to start/stop the timer. */ -#define LEAST_VALID 1 /* Don't trust a value lower than this */ - /* tx39 simulator can count instructions. :) */ - -benchmark_timer_t benchmark_timer_read(void) -{ - uint32_t total; - - total = TX3904_TIMER_READ( TX3904_TIMER1_BASE, TX3904_TIMER_TRR ); - - if ( benchmark_timer_find_average_overhead == true ) - return total; /* in one microsecond units */ - - if ( total < LEAST_VALID ) - return 0; /* below timer resolution */ - - return total - AVG_OVERHEAD; -} - -void benchmark_timer_disable_subtracting_average_overhead( - bool find_flag -) -{ - benchmark_timer_find_average_overhead = find_flag; -} -- cgit v1.2.3