#include <config.h>
#include <types.h>
#include <machine/io.h>
#include <kernel/vspace.h>
#include <arch/machine.h>
#include <arch/kernel/vspace.h>
#include <plat/machine.h>
#include <arch/linker.h>
#include <plat/machine/devices.h>
#include <plat/machine/hardware.h>
#define TIMER_INTERVAL_US (CONFIG_TIMER_TICK_MS * 1000)
#define TIMER_MHZ 24ULL
#define TIMER_TICKS (TIMER_MHZ * TIMER_INTERVAL_US)
#define TIMER0_OFFSET 0xC00
#define TIMER_CTL_EN_FLAG BIT(0)
#define TIMER_CTL_RELOAD_FLAG BIT(1)
#define TMR0_IRQ_EN_FLAG BIT(0)
#define TMR0_IRQ_PEND_FLAG BIT(0)
static volatile struct TIMER_map {
uint32_t tmr_irq_en_reg;
uint32_t tmr_irq_sta_reg;
uint32_t tmr_reserved01[2];
uint32_t tmr0_ctrl_reg;
uint32_t tmr0_intv_value_reg;
uint32_t tmr0_cur_value_reg;
} *timer = (volatile void*)(TIMER0_PPTR + TIMER0_OFFSET);
void
resetTimer(void)
{
timer->tmr_irq_sta_reg = TMR0_IRQ_PEND_FLAG;
}
BOOT_CODE void
initTimer(void)
{
timer->tmr0_intv_value_reg = TIMER_TICKS;
timer->tmr_irq_en_reg = TMR0_IRQ_EN_FLAG;
timer->tmr0_ctrl_reg = TIMER_CTL_EN_FLAG | TIMER_CTL_RELOAD_FLAG;
}
void plat_cleanL2Range(paddr_t start, paddr_t end) {}
void plat_invalidateL2Range(paddr_t start, paddr_t end) {}
void plat_cleanInvalidateL2Range(paddr_t start, paddr_t end) {}
void plat_cleanInvalidateCache(void) {}