Changeset 47839


Ignore:
Timestamp:
2015-12-11T16:02:55+01:00 (2 years ago)
Author:
blogic
Message:

ramips: fold gic patch into mt7621 support patch

All gic patch was doing is removing code added by mt7621 support patch.

Signed-off-by: Nikolay Martynov <mar.kolya@…>

Location:
trunk/target/linux/ramips/patches-4.3
Files:
1 deleted
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/ramips/patches-4.3/0001-arch-mips-ralink-add-mt7621-support.patch

    r47831 r47839  
    2323 create mode 100644 arch/mips/ralink/mt7621.c 
    2424 
    25 diff --git a/arch/mips/include/asm/mach-ralink/irq.h b/arch/mips/include/asm/mach-ralink/irq.h 
    26 new file mode 100644 
    27 index 0000000..4321865 
    2825--- /dev/null 
    2926+++ b/arch/mips/include/asm/mach-ralink/irq.h 
     
    3835+ 
    3936+#endif 
    40 diff --git a/arch/mips/include/asm/mach-ralink/mt7621.h b/arch/mips/include/asm/mach-ralink/mt7621.h 
    41 new file mode 100644 
    42 index 0000000..21c8dc2 
    4337--- /dev/null 
    4438+++ b/arch/mips/include/asm/mach-ralink/mt7621.h 
     
    8377+ 
    8478+#endif 
    85 diff --git a/arch/mips/kernel/mips-cm.c b/arch/mips/kernel/mips-cm.c 
    86 index b8ceee5..b97de1d 100644 
    8779--- a/arch/mips/kernel/mips-cm.c 
    8880+++ b/arch/mips/kernel/mips-cm.c 
     
    10597        mips_cm_probe_l2sync(); 
    10698  
    107 diff --git a/arch/mips/kernel/vmlinux.lds.S b/arch/mips/kernel/vmlinux.lds.S 
    108 index 07d32a4..86c6284 100644 
    10999--- a/arch/mips/kernel/vmlinux.lds.S 
    110100+++ b/arch/mips/kernel/vmlinux.lds.S 
     
    117107                SCHED_TEXT 
    118108                LOCK_TEXT 
    119 diff --git a/arch/mips/ralink/Kconfig b/arch/mips/ralink/Kconfig 
    120 index e9bc8c9..d078e61 100644 
    121109--- a/arch/mips/ralink/Kconfig 
    122110+++ b/arch/mips/ralink/Kconfig 
     
    143131+               select SYS_SUPPORTS_SMP 
    144132+               select SYS_SUPPORTS_MIPS_CMP 
     133+               select MIPS_GIC 
    145134+               select IRQ_GIC 
    146135+               select HW_HAS_PCI 
    147 + 
    148136 endchoice 
    149137  
     
    160148  
    161149 endif 
    162 diff --git a/arch/mips/ralink/Makefile b/arch/mips/ralink/Makefile 
    163 index a6c9d00..ca501db 100644 
    164150--- a/arch/mips/ralink/Makefile 
    165151+++ b/arch/mips/ralink/Makefile 
     
    176162  
    177163+obj-$(CONFIG_IRQ_INTC) += irq.o 
    178 +obj-$(CONFIG_IRQ_GIC) += irq-gic.o 
     164+obj-$(CONFIG_MIPS_GIC_IPI) += irq-gic.o 
    179165+obj-$(CONFIG_MIPS_MT_SMP) += malta-amon.o 
    180166+ 
     
    187173 obj-$(CONFIG_EARLY_PRINTK) += early_printk.o 
    188174  
    189 diff --git a/arch/mips/ralink/Platform b/arch/mips/ralink/Platform 
    190 index 6d9c8c4..6095fcc 100644 
    191175--- a/arch/mips/ralink/Platform 
    192176+++ b/arch/mips/ralink/Platform 
    193 @@ -27,3 +27,8 @@ cflags-$(CONFIG_SOC_RT3883)   += -I$(srctree)/arch/mips/include/asm/mach-ralink/rt 
     177@@ -27,3 +27,8 @@ cflags-$(CONFIG_SOC_RT3883)   += -I$(srctr 
    194178 # 
    195179 load-$(CONFIG_SOC_MT7620)      += 0xffffffff80000000 
     
    200184+load-$(CONFIG_SOC_MT7621)      += 0xffffffff80001000 
    201185+cflags-$(CONFIG_SOC_MT7621)    += -I$(srctree)/arch/mips/include/asm/mach-ralink/mt7621 
    202 diff --git a/arch/mips/ralink/irq-gic.c b/arch/mips/ralink/irq-gic.c 
    203 new file mode 100644 
    204 index 0000000..f1c541b 
    205186--- /dev/null 
    206187+++ b/arch/mips/ralink/irq-gic.c 
    207 @@ -0,0 +1,268 @@ 
     188@@ -0,0 +1,42 @@ 
    208189+#include <linux/init.h> 
    209190+#include <linux/sched.h> 
     
    224205+#include <asm/setup.h> 
    225206+ 
    226 +#include <asm/gic.h> 
     207+#include <asm/mips-cm.h> 
     208+#include <linux/irqchip/mips-gic.h> 
    227209+ 
    228210+#include <asm/mach-ralink/mt7621.h> 
    229 +#define GIC_BASE_ADDR                  0x1fbc0000 
    230 + 
    231 +unsigned long _gcmp_base; 
    232 +static int gic_resched_int_base = 56; 
    233 +static int gic_call_int_base = 60; 
    234 +static struct irq_chip *irq_gic; 
    235 +static struct gic_intr_map gic_intr_map[GIC_NUM_INTRS]; 
    236 + 
    237 +#if defined(CONFIG_MIPS_MT_SMP) 
    238 +static int gic_resched_int_base; 
    239 +static int gic_call_int_base; 
    240 + 
    241 +#define GIC_RESCHED_INT(cpu) (gic_resched_int_base+(cpu)) 
    242 +#define GIC_CALL_INT(cpu) (gic_call_int_base+(cpu)) 
    243 + 
    244 +static irqreturn_t ipi_resched_interrupt(int irq, void *dev_id) 
    245 +{ 
    246 +       scheduler_ipi(); 
    247 + 
    248 +       return IRQ_HANDLED; 
    249 +} 
    250 + 
    251 +static irqreturn_t 
    252 +ipi_call_interrupt(int irq, void *dev_id) 
    253 +{ 
    254 +       smp_call_function_interrupt(); 
    255 + 
    256 +       return IRQ_HANDLED; 
    257 +} 
    258 + 
    259 +static struct irqaction irq_resched = { 
    260 +        .handler        = ipi_resched_interrupt, 
    261 +        .flags          = IRQF_DISABLED|IRQF_PERCPU, 
    262 +        .name           = "ipi resched" 
    263 +}; 
    264 + 
    265 +static struct irqaction irq_call = { 
    266 +        .handler        = ipi_call_interrupt, 
    267 +        .flags          = IRQF_DISABLED|IRQF_PERCPU, 
    268 +        .name           = "ipi call" 
    269 +}; 
    270 + 
    271 +#endif 
    272 + 
    273 +static void __init 
    274 +gic_fill_map(void) 
    275 +{ 
    276 +       int i; 
    277 + 
    278 +       for (i = 0; i < ARRAY_SIZE(gic_intr_map); i++) { 
    279 +               gic_intr_map[i].cpunum = 0; 
    280 +               gic_intr_map[i].pin = GIC_CPU_INT0; 
    281 +               gic_intr_map[i].polarity = GIC_POL_POS; 
    282 +               gic_intr_map[i].trigtype = GIC_TRIG_LEVEL; 
    283 +               gic_intr_map[i].flags = 0; 
    284 +       } 
    285 + 
    286 +#if defined(CONFIG_MIPS_MT_SMP) 
    287 +       { 
    288 +               int cpu; 
    289 + 
    290 +               gic_call_int_base = ARRAY_SIZE(gic_intr_map) - nr_cpu_ids; 
    291 +               gic_resched_int_base = gic_call_int_base - nr_cpu_ids; 
    292 + 
    293 +               i = gic_resched_int_base; 
    294 + 
    295 +               for (cpu = 0; cpu < nr_cpu_ids; cpu++) { 
    296 +                       gic_intr_map[i + cpu].cpunum = cpu; 
    297 +                       gic_intr_map[i + cpu].pin = GIC_CPU_INT1; 
    298 +                       gic_intr_map[i + cpu].trigtype = GIC_TRIG_EDGE; 
    299 + 
    300 +                       gic_intr_map[i + cpu + nr_cpu_ids].cpunum = cpu; 
    301 +                       gic_intr_map[i + cpu + nr_cpu_ids].pin = GIC_CPU_INT2; 
    302 +                       gic_intr_map[i + cpu + nr_cpu_ids].trigtype = GIC_TRIG_EDGE; 
    303 +               } 
    304 +       } 
    305 +#endif 
    306 +} 
    307 + 
    308 +void 
    309 +gic_irq_ack(struct irq_data *d) 
    310 +{ 
    311 +       int irq = (d->irq - gic_irq_base); 
    312 + 
    313 +       GIC_CLR_INTR_MASK(irq); 
    314 + 
    315 +       if (gic_irq_flags[irq] & GIC_TRIG_EDGE) 
    316 +               GICWRITE(GIC_REG(SHARED, GIC_SH_WEDGE), irq); 
    317 +} 
    318 + 
    319 +void 
    320 +gic_finish_irq(struct irq_data *d) 
    321 +{ 
    322 +       GIC_SET_INTR_MASK(d->irq - gic_irq_base); 
    323 +} 
    324 + 
    325 +void __init 
    326 +gic_platform_init(int irqs, struct irq_chip *irq_controller) 
    327 +{ 
    328 +       irq_gic = irq_controller; 
    329 +} 
    330 + 
    331 +static void 
    332 +gic_irqdispatch(void) 
    333 +{ 
    334 +       unsigned int irq = gic_get_int(); 
    335 + 
    336 +       if (likely(irq < GIC_NUM_INTRS)) 
    337 +               do_IRQ(MIPS_GIC_IRQ_BASE + irq); 
    338 +       else { 
    339 +               pr_debug("Spurious GIC Interrupt!\n"); 
    340 +               spurious_interrupt(); 
    341 +       } 
    342 + 
    343 +} 
    344 + 
    345 +static void 
    346 +vi_timer_irqdispatch(void) 
    347 +{ 
    348 +       do_IRQ(cp0_compare_irq); 
    349 +} 
    350 + 
    351 +#if defined(CONFIG_MIPS_MT_SMP) 
    352 +unsigned int 
    353 +plat_ipi_call_int_xlate(unsigned int cpu) 
    354 +{ 
    355 +       return GIC_CALL_INT(cpu); 
    356 +} 
    357 + 
    358 +unsigned int 
    359 +plat_ipi_resched_int_xlate(unsigned int cpu) 
    360 +{ 
    361 +       return GIC_RESCHED_INT(cpu); 
    362 +} 
    363 +#endif 
    364 + 
    365 +asmlinkage void 
    366 +plat_irq_dispatch(void) 
    367 +{ 
    368 +       unsigned int pending = read_c0_status() & read_c0_cause() & ST0_IM; 
    369 + 
    370 +       if (unlikely(!pending)) { 
    371 +               pr_err("Spurious CP0 Interrupt!\n"); 
    372 +               spurious_interrupt(); 
    373 +       } else { 
    374 +               if (pending & CAUSEF_IP7) 
    375 +                       do_IRQ(cp0_compare_irq); 
    376 + 
    377 +               if (pending & (CAUSEF_IP4 | CAUSEF_IP3 | CAUSEF_IP2)) 
    378 +                       gic_irqdispatch(); 
    379 +       } 
    380 +} 
    381 + 
    382 +unsigned int __cpuinit 
    383 +get_c0_compare_int(void) 
    384 +{ 
    385 +       return CP0_LEGACY_COMPARE_IRQ; 
    386 +} 
    387 + 
    388 +static int 
    389 +gic_map(struct irq_domain *d, unsigned int irq, irq_hw_number_t hw) 
    390 +{ 
    391 +       irq_set_chip_and_handler(irq, irq_gic, 
    392 +#if defined(CONFIG_MIPS_MT_SMP) 
    393 +               (hw >= gic_resched_int_base) ? 
    394 +                       handle_percpu_irq : 
    395 +#endif 
    396 +                       handle_level_irq); 
    397 + 
    398 +       return 0; 
    399 +} 
    400 + 
    401 +static const struct irq_domain_ops irq_domain_ops = { 
    402 +       .xlate = irq_domain_xlate_onecell, 
    403 +       .map = gic_map, 
    404 +}; 
    405 + 
    406 +static int __init 
    407 +of_gic_init(struct device_node *node, 
    408 +                               struct device_node *parent) 
    409 +{ 
    410 +       struct irq_domain *domain; 
    411 +       struct resource gcmp = { 0 }, gic = { 0 }; 
    412 +       unsigned int gic_rev; 
    413 +       int i; 
    414 + 
    415 +       if (of_address_to_resource(node, 0, &gic)) 
    416 +               panic("Failed to get gic memory range"); 
    417 +       if (request_mem_region(gic.start, resource_size(&gic), 
    418 +                               gic.name) < 0) 
    419 +               panic("Failed to request gic memory"); 
    420 +       if (of_address_to_resource(node, 2, &gcmp)) 
    421 +               panic("Failed to get gic memory range"); 
    422 +       if (request_mem_region(gcmp.start, resource_size(&gcmp), 
    423 +                               gcmp.name) < 0) 
    424 +               panic("Failed to request gcmp memory"); 
    425 + 
    426 +       _gcmp_base = (unsigned long) ioremap_nocache(gcmp.start, resource_size(&gcmp)); 
    427 +       if (!_gcmp_base) 
    428 +               panic("Failed to remap gcmp memory\n"); 
    429 + 
    430 +       /* tell the gcmp where to find the gic */ 
    431 +       write_gcr_gic_base(GIC_BASE_ADDR | CM_GCR_GIC_BASE_GICEN_MSK); 
    432 +       gic_present = 1; 
    433 +       if (cpu_has_vint) { 
    434 +               set_vi_handler(2, gic_irqdispatch); 
    435 +               set_vi_handler(3, gic_irqdispatch); 
    436 +               set_vi_handler(4, gic_irqdispatch); 
    437 +               set_vi_handler(7, vi_timer_irqdispatch); 
    438 +       } 
    439 + 
    440 +       gic_fill_map(); 
    441 + 
    442 +       gic_init(gic.start, resource_size(&gic), gic_intr_map, 
    443 +               ARRAY_SIZE(gic_intr_map), MIPS_GIC_IRQ_BASE); 
    444 + 
    445 +       GICREAD(GIC_REG(SHARED, GIC_SH_REVISIONID), gic_rev); 
    446 +       pr_info("gic: revision %d.%d\n", (gic_rev >> 8) & 0xff, gic_rev & 0xff); 
    447 + 
    448 +       domain = irq_domain_add_legacy(node, GIC_NUM_INTRS, MIPS_GIC_IRQ_BASE, 
    449 +                       0, &irq_domain_ops, NULL); 
    450 +       if (!domain) 
    451 +               panic("Failed to add irqdomain"); 
    452 + 
    453 +#if defined(CONFIG_MIPS_MT_SMP) 
    454 +       for (i = 0; i < nr_cpu_ids; i++) { 
    455 +               setup_irq(MIPS_GIC_IRQ_BASE + GIC_RESCHED_INT(i), &irq_resched); 
    456 +               setup_irq(MIPS_GIC_IRQ_BASE + GIC_CALL_INT(i), &irq_call); 
    457 +       } 
    458 +#endif 
    459 + 
    460 +       change_c0_status(ST0_IM, STATUSF_IP7 | STATUSF_IP4 | STATUSF_IP3 | 
    461 +                               STATUSF_IP2); 
    462 +       return 0; 
     211+ 
     212+extern int __init gic_of_init(struct device_node *node, 
     213+                             struct device_node *parent); 
     214+ 
     215+unsigned int get_c0_compare_int(void) 
     216+{ 
     217+       return gic_get_c0_compare_int(); 
    463218+} 
    464219+ 
    465220+static struct of_device_id __initdata of_irq_ids[] = { 
    466 +       { .compatible = "mti,cpu-interrupt-controller", .data = mips_cpu_intc_init }, 
    467 +       { .compatible = "ralink,mt7621-gic", .data = of_gic_init }, 
     221+       { .compatible = "mti,cpu-interrupt-controller", .data = mips_cpu_irq_of_init }, 
     222+       { .compatible = "mti,gic", .data = gic_of_init }, 
    468223+       {}, 
    469224+}; 
     
    474229+       of_irq_init(of_irq_ids); 
    475230+} 
    476 diff --git a/arch/mips/ralink/malta-amon.c b/arch/mips/ralink/malta-amon.c 
    477 new file mode 100644 
    478 index 0000000..1e47844 
    479231--- /dev/null 
    480232+++ b/arch/mips/ralink/malta-amon.c 
     
    561313+       pr_debug("launch: cpu%d gone!\n", cpu); 
    562314+} 
    563 diff --git a/arch/mips/ralink/mt7621.c b/arch/mips/ralink/mt7621.c 
    564 new file mode 100644 
    565 index 0000000..c28743b 
    566315--- /dev/null 
    567316+++ b/arch/mips/ralink/mt7621.c 
     
    776525+               return; 
    777526+} 
    778 --  
    779 1.7.10.4 
    780  
     527--- a/drivers/irqchip/irq-mips-gic.c 
     528+++ b/drivers/irqchip/irq-mips-gic.c 
     529@@ -862,7 +862,7 @@ void __init gic_init(unsigned long gic_b 
     530        __gic_init(gic_base_addr, gic_addrspace_size, cpu_vec, irqbase, NULL); 
     531 } 
     532  
     533-static int __init gic_of_init(struct device_node *node, 
     534+int __init gic_of_init(struct device_node *node, 
     535                              struct device_node *parent) 
     536 { 
     537        struct resource res; 
Note: See TracChangeset for help on using the changeset viewer.