18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Pistachio clocksource/timer setup 48c2ecf20Sopenharmony_ci * 58c2ecf20Sopenharmony_ci * Copyright (C) 2014 Google, Inc. 68c2ecf20Sopenharmony_ci */ 78c2ecf20Sopenharmony_ci 88c2ecf20Sopenharmony_ci#include <linux/clk.h> 98c2ecf20Sopenharmony_ci#include <linux/clocksource.h> 108c2ecf20Sopenharmony_ci#include <linux/init.h> 118c2ecf20Sopenharmony_ci#include <linux/of.h> 128c2ecf20Sopenharmony_ci#include <linux/of_clk.h> 138c2ecf20Sopenharmony_ci 148c2ecf20Sopenharmony_ci#include <asm/mips-cps.h> 158c2ecf20Sopenharmony_ci#include <asm/time.h> 168c2ecf20Sopenharmony_ci 178c2ecf20Sopenharmony_ciunsigned int get_c0_compare_int(void) 188c2ecf20Sopenharmony_ci{ 198c2ecf20Sopenharmony_ci return gic_get_c0_compare_int(); 208c2ecf20Sopenharmony_ci} 218c2ecf20Sopenharmony_ci 228c2ecf20Sopenharmony_ciint get_c0_perfcount_int(void) 238c2ecf20Sopenharmony_ci{ 248c2ecf20Sopenharmony_ci return gic_get_c0_perfcount_int(); 258c2ecf20Sopenharmony_ci} 268c2ecf20Sopenharmony_ciEXPORT_SYMBOL_GPL(get_c0_perfcount_int); 278c2ecf20Sopenharmony_ci 288c2ecf20Sopenharmony_ciint get_c0_fdc_int(void) 298c2ecf20Sopenharmony_ci{ 308c2ecf20Sopenharmony_ci return gic_get_c0_fdc_int(); 318c2ecf20Sopenharmony_ci} 328c2ecf20Sopenharmony_ci 338c2ecf20Sopenharmony_civoid __init plat_time_init(void) 348c2ecf20Sopenharmony_ci{ 358c2ecf20Sopenharmony_ci struct device_node *np; 368c2ecf20Sopenharmony_ci struct clk *clk; 378c2ecf20Sopenharmony_ci 388c2ecf20Sopenharmony_ci of_clk_init(NULL); 398c2ecf20Sopenharmony_ci timer_probe(); 408c2ecf20Sopenharmony_ci 418c2ecf20Sopenharmony_ci np = of_get_cpu_node(0, NULL); 428c2ecf20Sopenharmony_ci if (!np) { 438c2ecf20Sopenharmony_ci pr_err("Failed to get CPU node\n"); 448c2ecf20Sopenharmony_ci return; 458c2ecf20Sopenharmony_ci } 468c2ecf20Sopenharmony_ci 478c2ecf20Sopenharmony_ci clk = of_clk_get(np, 0); 488c2ecf20Sopenharmony_ci if (IS_ERR(clk)) { 498c2ecf20Sopenharmony_ci pr_err("Failed to get CPU clock: %ld\n", PTR_ERR(clk)); 508c2ecf20Sopenharmony_ci return; 518c2ecf20Sopenharmony_ci } 528c2ecf20Sopenharmony_ci 538c2ecf20Sopenharmony_ci mips_hpt_frequency = clk_get_rate(clk) / 2; 548c2ecf20Sopenharmony_ci clk_put(clk); 558c2ecf20Sopenharmony_ci} 56