104dc82e1SThomas Gleixner // SPDX-License-Identifier: GPL-2.0-only 22572f00dSJoshua Henderson /* 32572f00dSJoshua Henderson * Joshua Henderson <joshua.henderson@microchip.com> 42572f00dSJoshua Henderson * Copyright (C) 2015 Microchip Technology Inc. All rights reserved. 52572f00dSJoshua Henderson */ 62572f00dSJoshua Henderson #include <linux/clocksource.h> 72572f00dSJoshua Henderson #include <linux/init.h> 86e4ad1b4SPurna Chandra Mandal #include <linux/irqdomain.h> 92572f00dSJoshua Henderson #include <linux/of.h> 10071cec1bSGeert Uytterhoeven #include <linux/of_clk.h> 112572f00dSJoshua Henderson #include <linux/of_irq.h> 122572f00dSJoshua Henderson 132572f00dSJoshua Henderson #include <asm/time.h> 142572f00dSJoshua Henderson 152572f00dSJoshua Henderson #include "pic32mzda.h" 162572f00dSJoshua Henderson 172572f00dSJoshua Henderson static const struct of_device_id pic32_infra_match[] = { 182572f00dSJoshua Henderson { .compatible = "microchip,pic32mzda-infra", }, 192572f00dSJoshua Henderson { }, 202572f00dSJoshua Henderson }; 212572f00dSJoshua Henderson 222572f00dSJoshua Henderson #define DEFAULT_CORE_TIMER_INTERRUPT 0 232572f00dSJoshua Henderson pic32_xlate_core_timer_irq(void)242572f00dSJoshua Hendersonstatic unsigned int pic32_xlate_core_timer_irq(void) 252572f00dSJoshua Henderson { 26e5096625SYueHaibing struct device_node *node; 272572f00dSJoshua Henderson unsigned int irq; 282572f00dSJoshua Henderson 292572f00dSJoshua Henderson node = of_find_matching_node(NULL, pic32_infra_match); 302572f00dSJoshua Henderson 312572f00dSJoshua Henderson if (WARN_ON(!node)) 322572f00dSJoshua Henderson goto default_map; 332572f00dSJoshua Henderson 342572f00dSJoshua Henderson irq = irq_of_parse_and_map(node, 0); 35*eb9e9bc4SLiang He 36*eb9e9bc4SLiang He of_node_put(node); 37*eb9e9bc4SLiang He 382572f00dSJoshua Henderson if (!irq) 392572f00dSJoshua Henderson goto default_map; 402572f00dSJoshua Henderson 412572f00dSJoshua Henderson return irq; 422572f00dSJoshua Henderson 432572f00dSJoshua Henderson default_map: 442572f00dSJoshua Henderson 452572f00dSJoshua Henderson return irq_create_mapping(NULL, DEFAULT_CORE_TIMER_INTERRUPT); 462572f00dSJoshua Henderson } 472572f00dSJoshua Henderson get_c0_compare_int(void)482572f00dSJoshua Hendersonunsigned int get_c0_compare_int(void) 492572f00dSJoshua Henderson { 502572f00dSJoshua Henderson return pic32_xlate_core_timer_irq(); 512572f00dSJoshua Henderson } 522572f00dSJoshua Henderson plat_time_init(void)532572f00dSJoshua Hendersonvoid __init plat_time_init(void) 542572f00dSJoshua Henderson { 556e4ad1b4SPurna Chandra Mandal unsigned long rate = pic32_get_pbclk(7); 562572f00dSJoshua Henderson 572572f00dSJoshua Henderson of_clk_init(NULL); 582572f00dSJoshua Henderson 596e4ad1b4SPurna Chandra Mandal pr_info("CPU Clock: %ldMHz\n", rate / 1000000); 606e4ad1b4SPurna Chandra Mandal mips_hpt_frequency = rate / 2; 612572f00dSJoshua Henderson 62ba5d08c0SDaniel Lezcano timer_probe(); 632572f00dSJoshua Henderson } 64