diff options
author | Evan Lojewski <github@meklort.com> | 2020-10-28 21:04:32 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-10-28 21:04:32 -0600 |
commit | 7031eabcfcdb606998d5398e22676d2714355596 (patch) | |
tree | c51b8a7d37d6ccff3afe955c4adf306892c43baf | |
parent | 98847d8427bf1a96d268a14f8ebb75cc67c45b60 (diff) | |
download | bcm5719-ortega-7031eabcfcdb606998d5398e22676d2714355596.tar.gz bcm5719-ortega-7031eabcfcdb606998d5398e22676d2714355596.zip |
timer: Add an initial timer library. (#155)
-rw-r--r-- | ape/CMakeLists.txt | 2 | ||||
-rw-r--r-- | ape/main.c | 5 | ||||
-rw-r--r-- | libs/CMakeLists.txt | 4 | ||||
-rw-r--r-- | libs/Timer/CMakeLists.txt | 67 | ||||
-rw-r--r-- | libs/Timer/include/Timer.h | 112 | ||||
-rw-r--r-- | libs/Timer/timer.c | 85 |
6 files changed, 271 insertions, 4 deletions
diff --git a/ape/CMakeLists.txt b/ape/CMakeLists.txt index 136d924..13f1296 100644 --- a/ape/CMakeLists.txt +++ b/ape/CMakeLists.txt @@ -56,7 +56,7 @@ function(ape_firmware PORT) arm_linker_script(${TARGET} "${CMAKE_CURRENT_SOURCE_DIR}/ape.ld") target_include_directories(${TARGET} PRIVATE include) - target_link_libraries(${TARGET} NVRam-arm MII-arm APE-arm Network-arm NCSI-arm printf-arm) + target_link_libraries(${TARGET} NVRam-arm MII-arm APE-arm Network-arm NCSI-arm Timer-arm printf-arm) target_link_libraries(${TARGET} bcm5719-arm) target_link_libraries(${TARGET} --defsym=NETWORK_PORT=${PORT} @@ -55,6 +55,7 @@ #include <Ethernet.h> #include <NCSI.h> #include <NVRam.h> +#include <Timer.h> #include <ape_main.h> #ifndef CXX_SIMULATOR @@ -227,7 +228,7 @@ void handleBMCPacket(void) // the RMU state machine can enter a stuck state. // This can be seen as an InProgress for an unreasonable amount of time. // In such a case, reset the RMU to recover. - if (APE.Tick1khz.r32 - inProgressStartTime > RMU_WATCHDOG_TIMEOUT_MS) + if (Timer_didTimeElapsed1KHz(inProgressStartTime, RMU_WATCHDOG_TIMEOUT_MS)) { printf("RMU Hang detected, resetting.\n"); initRMU(); @@ -237,7 +238,7 @@ void handleBMCPacket(void) else { packetInProgress = true; - inProgressStartTime = APE.Tick1khz.r32; + inProgressStartTime = Timer_getCurrentTime1KHz(); } } } diff --git a/libs/CMakeLists.txt b/libs/CMakeLists.txt index 6a3c9e1..fc5caa7 100644 --- a/libs/CMakeLists.txt +++ b/libs/CMakeLists.txt @@ -2,7 +2,7 @@ ### ### @file libs/CMakeLists.txt ### -### @project +### @project bcm5719-fw ### ### @brief Library CMake file ### @@ -48,6 +48,8 @@ add_subdirectory(APE) add_subdirectory(MII) add_subdirectory(VPD) +add_subdirectory(Timer) + add_subdirectory(NCSI) add_subdirectory(Network) diff --git a/libs/Timer/CMakeLists.txt b/libs/Timer/CMakeLists.txt new file mode 100644 index 0000000..47589a4 --- /dev/null +++ b/libs/Timer/CMakeLists.txt @@ -0,0 +1,67 @@ +################################################################################ +### +### @file libs/Timer/CMakeLists.txt +### +### @project bcm5719-fw +### +### @brief Timer CMake file +### +################################################################################ +### +################################################################################ +### +### @copyright Copyright (c) 2020, Evan Lojewski +### @cond +### +### All rights reserved. +### +### Redistribution and use in source and binary forms, with or without +### modification, are permitted provided that the following conditions are met: +### 1. Redistributions of source code must retain the above copyright notice, +### this list of conditions and the following disclaimer. +### 2. Redistributions in binary form must reproduce the above copyright notice, +### this list of conditions and the following disclaimer in the documentation +### and/or other materials provided with the distribution. +### 3. Neither the name of the copyright holder nor the +### names of its contributors may be used to endorse or promote products +### derived from this software without specific prior written permission. +### +################################################################################ +### +### THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +### AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +### IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +### ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +### LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +### CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +### SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +### INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +### CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +### ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +### POSSIBILITY OF SUCH DAMAGE. +### @endcond +################################################################################ + +project(Timer) + +SET(${PROJECT_NAME}_SRC + timer.c include/Timer.h +) + +# Host Simulation library +simulator_add_library(${PROJECT_NAME} STATIC ${${PROJECT_NAME}_SRC}) +target_link_libraries(${PROJECT_NAME} PRIVATE simulator) +target_include_directories(${PROJECT_NAME} PUBLIC ../../include) +target_include_directories(${PROJECT_NAME} PUBLIC include) + +# MIPS Library +mips_add_library(${PROJECT_NAME}-mips STATIC ${${PROJECT_NAME}_SRC}) +target_include_directories(${PROJECT_NAME}-mips PUBLIC ../../include) +target_include_directories(${PROJECT_NAME}-mips PUBLIC include) + +# ARM Library +arm_add_library(${PROJECT_NAME}-arm STATIC ${${PROJECT_NAME}_SRC}) +target_include_directories(${PROJECT_NAME}-arm PUBLIC ../../include) +target_include_directories(${PROJECT_NAME}-arm PUBLIC include) + +format_target_sources(${PROJECT_NAME}) diff --git a/libs/Timer/include/Timer.h b/libs/Timer/include/Timer.h new file mode 100644 index 0000000..a443bb6 --- /dev/null +++ b/libs/Timer/include/Timer.h @@ -0,0 +1,112 @@ +//////////////////////////////////////////////////////////////////////////////// +/// +/// @file Timer.h +/// +/// @project +/// +/// @brief Timer Support Routines +/// +//////////////////////////////////////////////////////////////////////////////// +/// +//////////////////////////////////////////////////////////////////////////////// +/// +/// @copyright Copyright (c) 2020, Evan Lojewski +/// @cond +/// +/// All rights reserved. +/// +/// Redistribution and use in source and binary forms, with or without +/// modification, are permitted provided that the following conditions are met: +/// 1. Redistributions of source code must retain the above copyright notice, +/// this list of conditions and the following disclaimer. +/// 2. Redistributions in binary form must reproduce the above copyright notice, +/// this list of conditions and the following disclaimer in the documentation +/// and/or other materials provided with the distribution. +/// 3. Neither the name of the copyright holder nor the +/// names of its contributors may be used to endorse or promote products +/// derived from this software without specific prior written permission. +/// +//////////////////////////////////////////////////////////////////////////////// +/// +/// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +/// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +/// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +/// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +/// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +/// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +/// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +/// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +/// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +/// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +/// POSSIBILITY OF SUCH DAMAGE. +/// @endcond +//////////////////////////////////////////////////////////////////////////////// +#ifndef TIMER_H +#define TIMER_H + +#include <types.h> + +/** + * @fn uint32_t Timer_getCurrentTime10Hz(void); + * + * @brief Returns the current time for the 10Hz timer. + * + * @returns The current 10Hz time + */ +uint32_t Timer_getCurrentTime10Hz(void); + +/** + * @fn bool Timer_didTimeElapsed10Hz(uint32_t startTime, uint32_t checkTime); + * + * @brief DEtermines if the specified time has elapsed. + * + * @param startTime The start time to compare with + * @param checkTime The delta minimum time required to elapse. + * + * @returns true if the time has elapsed, false otherwise. + */ +bool Timer_didTimeElapsed10Hz(uint32_t startTime, uint32_t checkTime); + +/** + * @fn uint32_t Timer_getCurrentTime1KHz(void); + * + * @brief Returns the current time for the 1KHz timer. + * + * @returns The current 1KHz time + */ +uint32_t Timer_getCurrentTime1KHz(void); + +/** + * @fn bool Timer_didTimeElapsed1KHz(uint32_t startTime, uint32_t checkTime); + * + * @brief DEtermines if the specified time has elapsed. + * + * @param startTime The start time to compare with + * @param checkTime The delta minimum time required to elapse. + * + * @returns true if the time has elapsed, false otherwise. + */ +bool Timer_didTimeElapsed1KHz(uint32_t startTime, uint32_t checkTime); + +/** + * @fn uint32_t Timer_getCurrentTime1MHz(void); + * + * @brief Returns the current time for the 1MHz timer. + * + * @returns The current 1MHz time + */ +uint32_t Timer_getCurrentTime1MHz(void); + +/** + * @fn bool Timer_didTimeElapsed1MHz(uint32_t startTime, uint32_t checkTime); + * + * @brief DEtermines if the specified time has elapsed. + * + * @param startTime The start time to compare with + * @param checkTime The delta minimum time required to elapse. + * + * @returns true if the time has elapsed, false otherwise. + */ +bool Timer_didTimeElapsed1MHz(uint32_t startTime, uint32_t checkTime); + +#endif /* TIMER_H */ diff --git a/libs/Timer/timer.c b/libs/Timer/timer.c new file mode 100644 index 0000000..632148a --- /dev/null +++ b/libs/Timer/timer.c @@ -0,0 +1,85 @@ +//////////////////////////////////////////////////////////////////////////////// +/// +/// @file MII.c +/// +/// @project +/// +/// @brief MII Support Routines +/// +//////////////////////////////////////////////////////////////////////////////// +/// +//////////////////////////////////////////////////////////////////////////////// +/// +/// @copyright Copyright (c) 2020, Evan Lojewski +/// @cond +/// +/// All rights reserved. +/// +/// Redistribution and use in source and binary forms, with or without +/// modification, are permitted provided that the following conditions are met: +/// 1. Redistributions of source code must retain the above copyright notice, +/// this list of conditions and the following disclaimer. +/// 2. Redistributions in binary form must reproduce the above copyright notice, +/// this list of conditions and the following disclaimer in the documentation +/// and/or other materials provided with the distribution. +/// 3. Neither the name of the copyright holder nor the +/// names of its contributors may be used to endorse or promote products +/// derived from this software without specific prior written permission. +/// +//////////////////////////////////////////////////////////////////////////////// +/// +/// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +/// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +/// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +/// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +/// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +/// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +/// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +/// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +/// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +/// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +/// POSSIBILITY OF SUCH DAMAGE. +/// @endcond +//////////////////////////////////////////////////////////////////////////////// + +#include <Timer.h> + +#ifdef __mips__ +#include <bcm5719_APE.h> +#else +#include <APE_APE.h> +#endif + +#ifdef CXX_SIMULATOR +#define volatile +#endif + +uint32_t Timer_getCurrentTime10Hz(void) +{ + return APE.Tick10hz.r32; +} + +bool Timer_didTimeElapsed10Hz(uint32_t startTime, uint32_t checkTime) +{ + return (APE.Tick10hz.r32 - startTime) > checkTime; +} + +uint32_t Timer_getCurrentTime1KHz(void) +{ + return APE.Tick1khz.r32; +} + +bool Timer_didTimeElapsed1KHz(uint32_t startTime, uint32_t checkTime) +{ + return (APE.Tick1khz.r32 - startTime) > checkTime; +} + +uint32_t Timer_getCurrentTime1MHz(void) +{ + return APE.Tick1mhz.r32; +} + +bool Timer_didTimeElapsed1MHz(uint32_t startTime, uint32_t checkTime) +{ + return (APE.Tick1mhz.r32 - startTime) > checkTime; +} |