diff options
-rw-r--r-- | src/soc/mediatek/mt8188/Kconfig | 1 | ||||
-rw-r--r-- | src/soc/mediatek/mt8188/Makefile.inc | 2 | ||||
-rw-r--r-- | src/soc/mediatek/mt8188/timer.c | 30 |
3 files changed, 32 insertions, 1 deletions
diff --git a/src/soc/mediatek/mt8188/Kconfig b/src/soc/mediatek/mt8188/Kconfig index 6d3c65998c..0568cd6f72 100644 --- a/src/soc/mediatek/mt8188/Kconfig +++ b/src/soc/mediatek/mt8188/Kconfig @@ -13,6 +13,7 @@ config SOC_MEDIATEK_MT8188 select MEDIATEK_DRAM_BLOB_FAST_INIT select USE_CBMEM_DRAM_INFO select DPM_FOUR_CHANNEL + select ARM64_USE_ARCH_TIMER if SOC_MEDIATEK_MT8188 diff --git a/src/soc/mediatek/mt8188/Makefile.inc b/src/soc/mediatek/mt8188/Makefile.inc index 67c2d7ac23..1426b83356 100644 --- a/src/soc/mediatek/mt8188/Makefile.inc +++ b/src/soc/mediatek/mt8188/Makefile.inc @@ -6,7 +6,7 @@ all-y += ../common/gpio.c ../common/gpio_op.c gpio.c all-y += ../common/i2c.c i2c.c all-y += ../common/pll.c pll.c all-$(CONFIG_SPI_FLASH) += ../common/spi.c spi.c -all-y += ../common/timer.c ../common/timer_prepare.c +all-y += timer.c ../common/timer_prepare.c all-y += ../common/uart.c bootblock-y += bootblock.c diff --git a/src/soc/mediatek/mt8188/timer.c b/src/soc/mediatek/mt8188/timer.c new file mode 100644 index 0000000000..352fc464a8 --- /dev/null +++ b/src/soc/mediatek/mt8188/timer.c @@ -0,0 +1,30 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#include <arch/lib_helpers.h> +#include <commonlib/helpers.h> +#include <delay.h> +#include <soc/addressmap.h> +#include <soc/timer.h> + +static struct mtk_gpt_regs *const mtk_gpt = (void *)GPT_BASE; + +void init_timer(void) +{ + timer_prepare(); + + raw_write_cntfrq_el0(13 * MHz); + + /* TODO: remove GPT timer init after DRAM blob switching to arch timer */ + /* Disable timer and clear the counter */ + clrbits32(&mtk_gpt->gpt6_con, GPT6_CON_EN); + setbits32(&mtk_gpt->gpt6_con, GPT6_CON_CLR); + + /* Set clock source to system clock and set clock divider to 1 */ + SET32_BITFIELDS(&GPT6_CLOCK_REG(mtk_gpt), + GPT6_CLK_CLK6, GPT6_CLK_CLK6_SYS, + GPT6_CLK_CLKDIV6, GPT6_CLK_CLKDIV_DIV1); + /* Set operation mode to FREERUN mode and enable timer */ + SET32_BITFIELDS(&mtk_gpt->gpt6_con, + GPT6_CON_MODE6, GPT6_MODE_FREERUN, + GPT6_CON_EN6, GPT6_CON_EN); +} |