18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Cobalt time initialization. 48c2ecf20Sopenharmony_ci * 58c2ecf20Sopenharmony_ci * Copyright (C) 2007 Yoichi Yuasa <yuasa@linux-mips.org> 68c2ecf20Sopenharmony_ci */ 78c2ecf20Sopenharmony_ci#include <linux/i8253.h> 88c2ecf20Sopenharmony_ci#include <linux/init.h> 98c2ecf20Sopenharmony_ci 108c2ecf20Sopenharmony_ci#include <asm/gt64120.h> 118c2ecf20Sopenharmony_ci#include <asm/time.h> 128c2ecf20Sopenharmony_ci 138c2ecf20Sopenharmony_ci#define GT641XX_BASE_CLOCK 50000000 /* 50MHz */ 148c2ecf20Sopenharmony_ci 158c2ecf20Sopenharmony_civoid __init plat_time_init(void) 168c2ecf20Sopenharmony_ci{ 178c2ecf20Sopenharmony_ci u32 start, end; 188c2ecf20Sopenharmony_ci int i = HZ / 10; 198c2ecf20Sopenharmony_ci 208c2ecf20Sopenharmony_ci setup_pit_timer(); 218c2ecf20Sopenharmony_ci 228c2ecf20Sopenharmony_ci gt641xx_set_base_clock(GT641XX_BASE_CLOCK); 238c2ecf20Sopenharmony_ci 248c2ecf20Sopenharmony_ci /* 258c2ecf20Sopenharmony_ci * MIPS counter frequency is measured during a 100msec interval 268c2ecf20Sopenharmony_ci * using GT64111 timer0. 278c2ecf20Sopenharmony_ci */ 288c2ecf20Sopenharmony_ci while (!gt641xx_timer0_state()) 298c2ecf20Sopenharmony_ci ; 308c2ecf20Sopenharmony_ci 318c2ecf20Sopenharmony_ci start = read_c0_count(); 328c2ecf20Sopenharmony_ci 338c2ecf20Sopenharmony_ci while (i--) 348c2ecf20Sopenharmony_ci while (!gt641xx_timer0_state()) 358c2ecf20Sopenharmony_ci ; 368c2ecf20Sopenharmony_ci 378c2ecf20Sopenharmony_ci end = read_c0_count(); 388c2ecf20Sopenharmony_ci 398c2ecf20Sopenharmony_ci mips_hpt_frequency = (end - start) * 10; 408c2ecf20Sopenharmony_ci printk(KERN_INFO "MIPS counter frequency %dHz\n", mips_hpt_frequency); 418c2ecf20Sopenharmony_ci} 42