Exynos: de-duplicate mct timer initialization
timer initialization is the first thing happening in the Exynos CPU's bootblock code. Hence we don't need to keep track of it in several places, and we don't need to do it over and over again (e.g. in each stage) BUG=none BRANCH=none TEST=boot tested on pit Change-Id: I7bd9a0b7930fc9c37faabd62e3eecc3e5614a879 Signed-off-by: Stefan Reinauer <reinauer@google.com> Reviewed-on: https://chromium-review.googlesource.com/168994 Reviewed-by: Stefan Reinauer <reinauer@chromium.org> Commit-Queue: Stefan Reinauer <reinauer@chromium.org> Tested-by: Stefan Reinauer <reinauer@chromium.org>
This commit is contained in:
parent
d89412eb20
commit
5a95bc2bca
6 changed files with 12 additions and 32 deletions
|
|
@ -21,16 +21,8 @@
|
|||
#include <arch/io.h>
|
||||
#include "clk.h"
|
||||
|
||||
static int enabled = 0;
|
||||
|
||||
uint64_t mct_raw_value(void)
|
||||
{
|
||||
if (!enabled) {
|
||||
writel(readl(&exynos_mct->g_tcon) | (0x1 << 8),
|
||||
&exynos_mct->g_tcon);
|
||||
enabled = 1;
|
||||
}
|
||||
|
||||
uint64_t upper = readl(&exynos_mct->g_cnt_u);
|
||||
uint64_t lower = readl(&exynos_mct->g_cnt_l);
|
||||
|
||||
|
|
@ -41,5 +33,4 @@ void mct_start(void)
|
|||
{
|
||||
writel(readl(&exynos_mct->g_tcon) | (0x1 << 8),
|
||||
&exynos_mct->g_tcon);
|
||||
enabled = 1;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,16 +22,13 @@
|
|||
|
||||
#include "clk.h"
|
||||
|
||||
static int initialized;
|
||||
|
||||
static const uint32_t clocks_per_usec = MCT_HZ/1000000;
|
||||
|
||||
void timer_monotonic_get(struct mono_time *mt)
|
||||
{
|
||||
if (!initialized) {
|
||||
mct_start();
|
||||
initialized = 1;
|
||||
}
|
||||
/* We don't have to call mct_start() here
|
||||
* because it was already called int he bootblock
|
||||
*/
|
||||
|
||||
mono_time_set_usecs(mt, mct_raw_value() / clocks_per_usec);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,7 +25,9 @@
|
|||
|
||||
void init_timer(void)
|
||||
{
|
||||
mct_start();
|
||||
/* Nothing to do because we manually
|
||||
* call mct_start() in the bootblock
|
||||
*/
|
||||
}
|
||||
|
||||
/* delay x useconds */
|
||||
|
|
|
|||
|
|
@ -21,16 +21,8 @@
|
|||
#include <arch/io.h>
|
||||
#include "clk.h"
|
||||
|
||||
static int enabled = 0;
|
||||
|
||||
uint64_t mct_raw_value(void)
|
||||
{
|
||||
if (!enabled) {
|
||||
writel(readl(&exynos_mct->g_tcon) | (0x1 << 8),
|
||||
&exynos_mct->g_tcon);
|
||||
enabled = 1;
|
||||
}
|
||||
|
||||
uint64_t upper = readl(&exynos_mct->g_cnt_u);
|
||||
uint64_t lower = readl(&exynos_mct->g_cnt_l);
|
||||
|
||||
|
|
@ -41,5 +33,4 @@ void mct_start(void)
|
|||
{
|
||||
writel(readl(&exynos_mct->g_tcon) | (0x1 << 8),
|
||||
&exynos_mct->g_tcon);
|
||||
enabled = 1;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,16 +22,13 @@
|
|||
|
||||
#include "clk.h"
|
||||
|
||||
static int initialized;
|
||||
|
||||
static const uint32_t clocks_per_usec = MCT_HZ/1000000;
|
||||
|
||||
void timer_monotonic_get(struct mono_time *mt)
|
||||
{
|
||||
if (!initialized) {
|
||||
mct_start();
|
||||
initialized = 1;
|
||||
}
|
||||
/* We don't have to call mct_start() here
|
||||
* because it was already called int he bootblock
|
||||
*/
|
||||
|
||||
mono_time_set_usecs(mt, mct_raw_value() / clocks_per_usec);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,7 +25,9 @@
|
|||
|
||||
void init_timer(void)
|
||||
{
|
||||
mct_start();
|
||||
/* Nothing to do because we manually
|
||||
* call mct_start() in the bootblock
|
||||
*/
|
||||
}
|
||||
|
||||
/* delay x useconds */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue