linux/arch/mips/loongson2ef/common/bonito-irq.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-or-later
   2/*
   3 * Copyright 2001 MontaVista Software Inc.
   4 * Author: Jun Sun, jsun@mvista.com or jsun@junsun.net
   5 * Copyright (C) 2000, 2001 Ralf Baechle (ralf@gnu.org)
   6 *
   7 * Copyright (C) 2007 Lemote Inc. & Institute of Computing Technology
   8 * Author: Fuxin Zhang, zhangfx@lemote.com
   9 */
  10#include <linux/interrupt.h>
  11#include <linux/compiler.h>
  12
  13#include <loongson.h>
  14
  15static inline void bonito_irq_enable(struct irq_data *d)
  16{
  17        LOONGSON_INTENSET = (1 << (d->irq - LOONGSON_IRQ_BASE));
  18        mmiowb();
  19}
  20
  21static inline void bonito_irq_disable(struct irq_data *d)
  22{
  23        LOONGSON_INTENCLR = (1 << (d->irq - LOONGSON_IRQ_BASE));
  24        mmiowb();
  25}
  26
  27static struct irq_chip bonito_irq_type = {
  28        .name           = "bonito_irq",
  29        .irq_mask       = bonito_irq_disable,
  30        .irq_unmask     = bonito_irq_enable,
  31};
  32
  33void bonito_irq_init(void)
  34{
  35        u32 i;
  36
  37        for (i = LOONGSON_IRQ_BASE; i < LOONGSON_IRQ_BASE + 32; i++)
  38                irq_set_chip_and_handler(i, &bonito_irq_type,
  39                                         handle_level_irq);
  40
  41#ifdef CONFIG_CPU_LOONGSON2E
  42        i = LOONGSON_IRQ_BASE + 10;
  43        if (request_irq(i, no_action, 0, "dma_timeout", NULL))
  44                pr_err("Failed to request irq %d (dma_timeout)\n", i);
  45#endif
  46}
  47