xref: /rk3399_rockchip-uboot/drivers/irq/irq-internal.h (revision 2c4e90c1f82ec1e96293ab9fcb0105fcfad8d2d1)
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-NUMBERS
17  */
18 #define PLATFORM_SUSPEND_MAX_IRQ	12
19 #define PLATFORM_GIC_MAX_IRQ		(GIC_IRQS_NR)
20 #define PLATFORM_GPIO_MAX_IRQ		(GIC_IRQS_NR + GPIO_IRQS_NR)
21 #define PLATFORM_MAX_IRQ		(GIC_IRQS_NR + GPIO_IRQS_NR)
22 
23 /*
24  * IRQ-CHIP
25  */
26 struct irq_chip *arch_gic_get_irqchip(void);
27 struct irq_chip *arch_gpio_get_irqchip(void);
28 struct irq_chip *arch_virq_get_irqchip(void);
29 
30 /*
31  * IRQ-VIRTUAL
32  */
33 int bad_virq(int irq);
34 void virq_free_handler(int irq);
35 int virq_install_handler(int irq, interrupt_handler_t *handler, void *data);
36 
37 /*
38  * Other
39  */
40 int bad_irq(int irq);
41 
42 /*
43  * IRQ-GPIO-SWITCH
44  */
45 #define GPIO_BANK_MASK		0xFFFFFF00
46 #define GPIO_BANK_OFFSET	8
47 #define GPIO_PIN_MASK		0x000000FF
48 #define GPIO_PIN_OFFSET		0
49 #define EINVAL_GPIO		-1
50 #define PIN_BASE		GIC_IRQS_NR
51 
52 struct gpio_bank {
53 	char *name;
54 	void __iomem *regbase;
55 	int id;
56 	int irq_base;
57 	int ngpio;
58 	int use_count;
59 };
60 
61 #define GPIO_BANK_REGISTER(ID, GPIO_BANK_NUM)			\
62 {								\
63 	.name	  = __stringify(gpio##ID),			\
64 	.regbase  = (unsigned char __iomem *)GPIO##ID##_PHYS,	\
65 	.id	  = ID,						\
66 	.irq_base = PIN_BASE + (ID) * (GPIO_BANK_NUM),		\
67 	.ngpio    = GPIO_BANK_NUM,				\
68 	.use_count = 0						\
69 }
70 
71 /* gpio bank[31:8] and pin[7:0] */
72 #define GPIO_BANK(gpio)		((gpio & GPIO_BANK_MASK) >> GPIO_BANK_OFFSET)
73 #define GPIO_PIN(gpio)		((gpio & GPIO_PIN_MASK) >> GPIO_PIN_OFFSET)
74 #define GPIO_BANK_VALID(gpio)	(GPIO_BANK(gpio) < GPIO_BANK_NUM)
75 #define GPIO_PIN_VALID(gpio)	(GPIO_PIN(gpio) < GPIO_BANK_PINS)
76 
77 int hard_gpio_to_irq(u32 gpio);
78 int irq_to_gpio(int irq);
79 struct gpio_bank *gpio_id_to_bank(unsigned int id);
80 struct gpio_bank *gpio_to_bank(unsigned gpio);
81 
82 void __generic_gpio_handle_irq(int irq);
83 
84 #endif /* _IRQ_GIC_H_ */
85