mirror of https://github.com/OpenIPC/firmware.git
37 lines
1.1 KiB
Diff
37 lines
1.1 KiB
Diff
--- linux-4.9.37/drivers/irqchip/irq-gic.c 2017-07-12 16:42:41.000000000 +0300
|
|
+++ linux-4.9.y/drivers/irqchip/irq-gic.c 2021-06-07 13:01:33.000000000 +0300
|
|
@@ -1069,7 +1069,9 @@
|
|
{
|
|
irq_hw_number_t hwirq_base;
|
|
int gic_irqs, irq_base, ret;
|
|
-
|
|
+ struct device_node *np;
|
|
+ void * sysctrl_reg_base;
|
|
+ int gic_dist_init_flag;
|
|
if (IS_ENABLED(CONFIG_GIC_NON_BANKED) && gic->percpu_offset) {
|
|
/* Frankein-GIC without banked registers... */
|
|
unsigned int cpu;
|
|
@@ -1149,7 +1151,21 @@
|
|
goto error;
|
|
}
|
|
|
|
- gic_dist_init(gic);
|
|
+#define GIC_DIST_INIT_FLAG 0x47444946
|
|
+#define GIC_DIST_INIT_FLAG_OFFSET 0x0130
|
|
+ /* 0x47444946('G''D''I''F') is abbreviation of GIC_DIST_INIT_FLAG. */
|
|
+
|
|
+ np = of_find_compatible_node(NULL, NULL, "goke,sysctrl");
|
|
+ sysctrl_reg_base = of_iomap(np, 0);
|
|
+ gic_dist_init_flag = readl(sysctrl_reg_base + GIC_DIST_INIT_FLAG_OFFSET);
|
|
+
|
|
+ if(gic_dist_init_flag != GIC_DIST_INIT_FLAG) {
|
|
+ printk("Gic dist init...\n");
|
|
+ gic_dist_init(gic);
|
|
+ writel_relaxed(GIC_DIST_INIT_FLAG, sysctrl_reg_base + GIC_DIST_INIT_FLAG_OFFSET);
|
|
+ } else
|
|
+ printk("Gic dist not init...\n");
|
|
+
|
|
ret = gic_cpu_init(gic);
|
|
if (ret)
|
|
goto error;
|