On 2017-09-13 16:29, Ralf Ramsauer wrote: > NO GICv3 support at the moment!
And the error mode is crashing on null-pointer call, right? Maybe you can improve this when resolving the dependency on the sender ID. Jan > > Signed-off-by: Ralf Ramsauer <[email protected]> > --- > inmates/lib/arm-common/gic-v2.c | 9 +++++++++ > inmates/lib/arm-common/gic.c | 5 +++++ > inmates/lib/arm-common/include/gic.h | 1 + > inmates/lib/arm-common/include/inmate.h | 1 + > 4 files changed, 16 insertions(+) > > diff --git a/inmates/lib/arm-common/gic-v2.c b/inmates/lib/arm-common/gic-v2.c > index 46999b0d..e0b590de 100644 > --- a/inmates/lib/arm-common/gic-v2.c > +++ b/inmates/lib/arm-common/gic-v2.c > @@ -50,6 +50,7 @@ > #define GICC_EOIR 0x0010 > #define GICD_CTLR 0x0000 > #define GICD_CTLR_ENABLE (1 << 0) > +#define GICD_SGIR 0xf00 > > #define GICC_CTLR_GRPEN1 (1 << 0) > > @@ -80,9 +81,17 @@ static u32 gic_v2_read_ack(void) > return mmio_read32(GICC_V2_BASE + GICC_IAR); > } > > +static void gic_v2_issue_sgi(u8 routing_mode, u8 target_list, u8 sgi) > +{ > + mmio_write32(GICD_V2_BASE + GICD_SGIR, > + ((routing_mode & 0x3) << 24) | > + (target_list << 16) | (sgi & 0xf)); > +} > + > const struct gic gic_v2 = { > .init = gic_v2_init, > .enable = gic_v2_enable, > .write_eoi = gic_v2_write_eoi, > .read_ack = gic_v2_read_ack, > + .issue_sgi = gic_v2_issue_sgi, > }; > diff --git a/inmates/lib/arm-common/gic.c b/inmates/lib/arm-common/gic.c > index 475a38b6..0bd080de 100644 > --- a/inmates/lib/arm-common/gic.c > +++ b/inmates/lib/arm-common/gic.c > @@ -81,3 +81,8 @@ void gic_enable_irq(unsigned int irq) > { > gic.enable(irq); > } > + > +void gic_issue_sgi(u8 routing_mode, u8 target_list, u8 sgi) > +{ > + gic.issue_sgi(routing_mode, target_list, sgi); > +} > diff --git a/inmates/lib/arm-common/include/gic.h > b/inmates/lib/arm-common/include/gic.h > index 86c1e389..09ca90e1 100644 > --- a/inmates/lib/arm-common/include/gic.h > +++ b/inmates/lib/arm-common/include/gic.h > @@ -56,6 +56,7 @@ struct gic { > void (*enable)(unsigned int irqn); > void (*write_eoi)(u32 irqn); > u32 (*read_ack)(void); > + void (*issue_sgi)(u8 routing_mode, u8 target_list, u8 sgi); > }; > > extern const struct gic gic_v2, gic_v3; > diff --git a/inmates/lib/arm-common/include/inmate.h > b/inmates/lib/arm-common/include/inmate.h > index 6611b311..c9ea6063 100644 > --- a/inmates/lib/arm-common/include/inmate.h > +++ b/inmates/lib/arm-common/include/inmate.h > @@ -89,6 +89,7 @@ static inline unsigned long cpu_id(void) > typedef void (*irq_handler_t)(unsigned int); > void gic_setup(irq_handler_t handler, void *irq_stack); > void gic_enable_irq(unsigned int irq); > +void gic_issue_sgi(u8 routing_mode, u8 target_list, u8 sgi); > > unsigned long timer_get_frequency(void); > u64 timer_get_ticks(void); > -- Siemens AG, Corporate Technology, CT RDA ITP SES-DE Corporate Competence Center Embedded Linux -- You received this message because you are subscribed to the Google Groups "Jailhouse" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
