18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci *
48c2ecf20Sopenharmony_ci * Copyright (C) 2014 Broadcom Corporation
58c2ecf20Sopenharmony_ci * Author: Kevin Cernekee <cernekee@gmail.com>
68c2ecf20Sopenharmony_ci */
78c2ecf20Sopenharmony_ci
88c2ecf20Sopenharmony_ci#include <linux/of.h>
98c2ecf20Sopenharmony_ci#include <linux/irqchip.h>
108c2ecf20Sopenharmony_ci
118c2ecf20Sopenharmony_ci#include <asm/bmips.h>
128c2ecf20Sopenharmony_ci#include <asm/irq.h>
138c2ecf20Sopenharmony_ci#include <asm/irq_cpu.h>
148c2ecf20Sopenharmony_ci#include <asm/time.h>
158c2ecf20Sopenharmony_ci
168c2ecf20Sopenharmony_cistatic const struct of_device_id smp_intc_dt_match[] = {
178c2ecf20Sopenharmony_ci	{ .compatible = "brcm,bcm7038-l1-intc" },
188c2ecf20Sopenharmony_ci	{ .compatible = "brcm,bcm6345-l1-intc" },
198c2ecf20Sopenharmony_ci	{}
208c2ecf20Sopenharmony_ci};
218c2ecf20Sopenharmony_ci
228c2ecf20Sopenharmony_ciunsigned int get_c0_compare_int(void)
238c2ecf20Sopenharmony_ci{
248c2ecf20Sopenharmony_ci	return CP0_LEGACY_COMPARE_IRQ;
258c2ecf20Sopenharmony_ci}
268c2ecf20Sopenharmony_ci
278c2ecf20Sopenharmony_civoid __init arch_init_irq(void)
288c2ecf20Sopenharmony_ci{
298c2ecf20Sopenharmony_ci	struct device_node *dn;
308c2ecf20Sopenharmony_ci
318c2ecf20Sopenharmony_ci	/* Only these controllers support SMP IRQ affinity */
328c2ecf20Sopenharmony_ci	dn = of_find_matching_node(NULL, smp_intc_dt_match);
338c2ecf20Sopenharmony_ci	if (dn)
348c2ecf20Sopenharmony_ci		of_node_put(dn);
358c2ecf20Sopenharmony_ci	else
368c2ecf20Sopenharmony_ci		bmips_tp1_irqs = 0;
378c2ecf20Sopenharmony_ci
388c2ecf20Sopenharmony_ci	irqchip_init();
398c2ecf20Sopenharmony_ci}
408c2ecf20Sopenharmony_ci
418c2ecf20Sopenharmony_ciIRQCHIP_DECLARE(mips_cpu_intc, "mti,cpu-interrupt-controller",
428c2ecf20Sopenharmony_ci	     mips_cpu_irq_of_init);
43