1 INTERFACE [arm && realview]:
8 //-------------------------------------------------------------------
9 INTERFACE [arm && realview && (mpcore || armca9)]:
16 INTMODE_NEW_NO_DDC = 1 << 23,
20 //-------------------------------------------------------------------
21 IMPLEMENTATION [arm && !(mpcore || armca9)]:
24 void Pic::configure_core()
27 //-------------------------------------------------------------------
28 IMPLEMENTATION [arm && pic_gic && realview && (realview_pb11mp || (realview_eb && (mpcore || (armca9 && mp))))]:
30 #include "irq_mgr_multi_chip.h"
31 #include "cascade_irq.h"
34 void Pic::init_ap(unsigned)
37 static_cast<Gic*>(Irq_mgr::mgr->chip(256).chip)->init_ap();
45 typedef Irq_mgr_multi_chip<8> Mgr;
47 Gic *g = gic.construct(Kmem::Gic_cpu_map_base, Kmem::Gic_dist_map_base);
48 Mgr *m = new Boot_object<Mgr>(2);
51 m->add_chip(0, g, g->nr_irqs());
53 g = new Boot_object<Gic>(Kmem::Gic1_cpu_map_base, Kmem::Gic1_dist_map_base);
54 m->add_chip(256, g, g->nr_irqs());
56 // FIXME: Replace static local variable, use placement new
57 Cascade_irq *casc_irq = new Boot_object<Cascade_irq>(g, &Gic::cascade_hit);
59 gic->alloc(casc_irq, 42);
63 //-------------------------------------------------------------------
64 IMPLEMENTATION [arm && pic_gic && !(realview && (realview_pb11mp || (realview_eb && (mpcore || (armca9 && mp)))))]:
66 #include "irq_mgr_multi_chip.h"
73 typedef Irq_mgr_multi_chip<8> Mgr;
74 Gic *g = gic.construct(Kmem::Gic_cpu_map_base, Kmem::Gic_dist_map_base);
76 Mgr *m = new Boot_object<Mgr>(1);
77 m->add_chip(0, g, g->nr_irqs());
82 void Pic::init_ap(unsigned)
89 Pic::init_ap_other_gics()
92 //-------------------------------------------------------------------
93 IMPLEMENTATION [arm && pic_gic]:
96 #include "initcalls.h"
99 Pic::Status Pic::disable_all_save()
103 void Pic::restore_all(Status)
106 //-------------------------------------------------------------------
107 IMPLEMENTATION [arm && pic_gic && (mpcore || armca9)]:
111 #include "platform.h"
114 void Pic::unlock_config()
115 { Io::write<Mword>(0xa05f, Platform::Sys::Lock); }
118 void Pic::lock_config()
119 { Io::write<Mword>(0x0, Platform::Sys::Lock); }
122 void Pic::configure_core()
124 // Enable 'new' interrupt-mode, no DCC
126 Io::write<Mword>(Io::read<Mword>(Platform::Sys::Pld_ctrl1) | INTMODE_NEW_NO_DDC,
127 Platform::Sys::Pld_ctrl1);