1 /* 2 * (C) Copyright 2017 Rockchip Electronics Co., Ltd 3 * 4 * SPDX-License-Identifier: GPL-2.0+ 5 */ 6 7 #ifndef _IRQ_GIC_H_ 8 #define _IRQ_GIC_H_ 9 10 #include <asm/io.h> 11 #include <irq-generic.h> 12 #include <irq-platform.h> 13 #include "irq-internal.h" 14 15 /* 16 * IRQ FLAG 17 */ 18 #define IRQ_FLG_ENABLE BIT(0) 19 20 /* 21 * IRQ-NUMBERS 22 */ 23 #define PLATFORM_SUSPEND_MAX_IRQ 12 24 #define PLATFORM_GIC_MAX_IRQ (GIC_IRQS_NR) 25 #define PLATFORM_GPIO_MAX_IRQ (GIC_IRQS_NR + GPIO_IRQS_NR) 26 #define PLATFORM_MAX_IRQ (GIC_IRQS_NR + GPIO_IRQS_NR) 27 28 /* 29 * IRQ-CHIP 30 */ 31 struct irq_chip *arch_gic_get_irqchip(void); 32 struct irq_chip *arch_gpio_get_irqchip(void); 33 struct irq_chip *arch_virq_get_irqchip(void); 34 35 /* 36 * IRQ-VIRTUAL 37 */ 38 int bad_virq(int irq); 39 void virqs_show(int pirq); 40 void virq_free_handler(int irq); 41 int virq_install_handler(int irq, interrupt_handler_t *handler, void *data); 42 43 /* 44 * Other 45 */ 46 int bad_irq(int irq); 47 48 /* 49 * IRQ-GPIO-SWITCH 50 */ 51 #define GPIO_BANK_MASK 0xFFFFFF00 52 #define GPIO_BANK_OFFSET 8 53 #define GPIO_PIN_MASK 0x000000FF 54 #define GPIO_PIN_OFFSET 0 55 #define EINVAL_GPIO -1 56 #define PIN_BASE GIC_IRQS_NR 57 58 struct gpio_bank { 59 char *name; 60 void __iomem *regbase; 61 int id; 62 int irq_base; 63 int ngpio; 64 int use_count; 65 }; 66 67 #define GPIO_BANK_REGISTER(ID, GPIO_BANK_NUM) \ 68 { \ 69 .name = __stringify(gpio##ID), \ 70 .regbase = (unsigned char __iomem *)GPIO##ID##_PHYS, \ 71 .id = ID, \ 72 .irq_base = PIN_BASE + (ID) * (GPIO_BANK_NUM), \ 73 .ngpio = GPIO_BANK_NUM, \ 74 .use_count = 0 \ 75 } 76 77 /* gpio bank[31:8] and pin[7:0] */ 78 #define GPIO_BANK(gpio) ((gpio & GPIO_BANK_MASK) >> GPIO_BANK_OFFSET) 79 #define GPIO_PIN(gpio) ((gpio & GPIO_PIN_MASK) >> GPIO_PIN_OFFSET) 80 #define GPIO_BANK_VALID(gpio) (GPIO_BANK(gpio) < GPIO_BANK_NUM) 81 #define GPIO_PIN_VALID(gpio) (GPIO_PIN(gpio) < GPIO_BANK_PINS) 82 83 int hard_gpio_to_irq(u32 gpio); 84 int irq_to_gpio(int irq); 85 struct gpio_bank *gpio_id_to_bank(unsigned int id); 86 struct gpio_bank *gpio_to_bank(unsigned gpio); 87 88 void __generic_gpio_handle_irq(int irq); 89 90 #endif /* _IRQ_GIC_H_ */ 91