* [Qemu-devel] [PATCH 0/3] arm_gic: Improve handling of GICD_ICFGR
@ 2014-08-16 19:48 Adam Lackorzynski
2014-08-16 19:48 ` [Qemu-devel] [PATCH 1/3] arm_gic: Fix read " Adam Lackorzynski
` (2 more replies)
0 siblings, 3 replies; 8+ messages in thread
From: Adam Lackorzynski @ 2014-08-16 19:48 UTC (permalink / raw)
To: qemu-devel; +Cc: christoffer.dall
The following patches address the behavior of the GICD_ICFGR register
in the ARM GIC.
Changes to previous version:
- Setting of model mode only for old GIC revisions
- Less invasive change for PPI settings
Adam Lackorzynski (3):
arm_gic: Fix read of GICD_ICFGR
arm_gic: GICD_ICFGR: Write model only for pre v1 GICs
arm_gic: Do not force PPIs to edge-triggered mode
hw/intc/arm_gic.c | 14 ++++++++------
1 file changed, 8 insertions(+), 6 deletions(-)
--
2.1.0.rc1
^ permalink raw reply [flat|nested] 8+ messages in thread
* [Qemu-devel] [PATCH 1/3] arm_gic: Fix read of GICD_ICFGR
2014-08-16 19:48 [Qemu-devel] [PATCH 0/3] arm_gic: Improve handling of GICD_ICFGR Adam Lackorzynski
@ 2014-08-16 19:48 ` Adam Lackorzynski
2014-08-16 19:48 ` [Qemu-devel] [PATCH 2/3] arm_gic: GICD_ICFGR: Write model only for pre v1 GICs Adam Lackorzynski
2014-08-16 19:48 ` [Qemu-devel] [PATCH 3/3] arm_gic: Do not force PPIs to edge-triggered mode Adam Lackorzynski
2 siblings, 0 replies; 8+ messages in thread
From: Adam Lackorzynski @ 2014-08-16 19:48 UTC (permalink / raw)
To: qemu-devel; +Cc: christoffer.dall
The GICD_ICFGR register covers 4 interrupts per byte.
Acked-by: Christoffer Dall <christoffer.dall@linaro.org>
Signed-off-by: Adam Lackorzynski <adam@os.inf.tu-dresden.de>
---
hw/intc/arm_gic.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/hw/intc/arm_gic.c b/hw/intc/arm_gic.c
index 1532ef9..d2b1aaf 100644
--- a/hw/intc/arm_gic.c
+++ b/hw/intc/arm_gic.c
@@ -372,7 +372,7 @@ static uint32_t gic_dist_readb(void *opaque, hwaddr offset)
}
} else if (offset < 0xf00) {
/* Interrupt Configuration. */
- irq = (offset - 0xc00) * 2 + GIC_BASE_IRQ;
+ irq = (offset - 0xc00) * 4 + GIC_BASE_IRQ;
if (irq >= s->num_irq)
goto bad_reg;
res = 0;
--
2.1.0.rc1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [Qemu-devel] [PATCH 2/3] arm_gic: GICD_ICFGR: Write model only for pre v1 GICs
2014-08-16 19:48 [Qemu-devel] [PATCH 0/3] arm_gic: Improve handling of GICD_ICFGR Adam Lackorzynski
2014-08-16 19:48 ` [Qemu-devel] [PATCH 1/3] arm_gic: Fix read " Adam Lackorzynski
@ 2014-08-16 19:48 ` Adam Lackorzynski
2014-08-18 12:46 ` Christoffer Dall
2014-08-16 19:48 ` [Qemu-devel] [PATCH 3/3] arm_gic: Do not force PPIs to edge-triggered mode Adam Lackorzynski
2 siblings, 1 reply; 8+ messages in thread
From: Adam Lackorzynski @ 2014-08-16 19:48 UTC (permalink / raw)
To: qemu-devel; +Cc: christoffer.dall
Setting the model is only available in pre-v1 GIC models.
---
hw/intc/arm_gic.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/hw/intc/arm_gic.c b/hw/intc/arm_gic.c
index d2b1aaf..e546647 100644
--- a/hw/intc/arm_gic.c
+++ b/hw/intc/arm_gic.c
@@ -561,10 +561,12 @@ static void gic_dist_writeb(void *opaque, hwaddr offset,
if (irq < GIC_INTERNAL)
value |= 0xaa;
for (i = 0; i < 4; i++) {
- if (value & (1 << (i * 2))) {
- GIC_SET_MODEL(irq + i);
- } else {
- GIC_CLEAR_MODEL(irq + i);
+ if (s->revision == REV_11MPCORE || s->revision == REV_NVIC) {
+ if (value & (1 << (i * 2))) {
+ GIC_SET_MODEL(irq + i);
+ } else {
+ GIC_CLEAR_MODEL(irq + i);
+ }
}
if (value & (2 << (i * 2))) {
GIC_SET_EDGE_TRIGGER(irq + i);
--
2.1.0.rc1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [Qemu-devel] [PATCH 3/3] arm_gic: Do not force PPIs to edge-triggered mode
2014-08-16 19:48 [Qemu-devel] [PATCH 0/3] arm_gic: Improve handling of GICD_ICFGR Adam Lackorzynski
2014-08-16 19:48 ` [Qemu-devel] [PATCH 1/3] arm_gic: Fix read " Adam Lackorzynski
2014-08-16 19:48 ` [Qemu-devel] [PATCH 2/3] arm_gic: GICD_ICFGR: Write model only for pre v1 GICs Adam Lackorzynski
@ 2014-08-16 19:48 ` Adam Lackorzynski
2014-08-18 12:48 ` Christoffer Dall
2 siblings, 1 reply; 8+ messages in thread
From: Adam Lackorzynski @ 2014-08-16 19:48 UTC (permalink / raw)
To: qemu-devel; +Cc: christoffer.dall
Only SGIs must be WI, done by forcing them to their default
(edge-triggered).
Signed-off-by: Adam Lackorzynski <adam@os.inf.tu-dresden.de>
---
hw/intc/arm_gic.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/hw/intc/arm_gic.c b/hw/intc/arm_gic.c
index e546647..55019c9 100644
--- a/hw/intc/arm_gic.c
+++ b/hw/intc/arm_gic.c
@@ -558,7 +558,7 @@ static void gic_dist_writeb(void *opaque, hwaddr offset,
irq = (offset - 0xc00) * 4 + GIC_BASE_IRQ;
if (irq >= s->num_irq)
goto bad_reg;
- if (irq < GIC_INTERNAL)
+ if (irq < GIC_NR_SGIS)
value |= 0xaa;
for (i = 0; i < 4; i++) {
if (s->revision == REV_11MPCORE || s->revision == REV_NVIC) {
--
2.1.0.rc1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [Qemu-devel] [PATCH 2/3] arm_gic: GICD_ICFGR: Write model only for pre v1 GICs
2014-08-16 19:48 ` [Qemu-devel] [PATCH 2/3] arm_gic: GICD_ICFGR: Write model only for pre v1 GICs Adam Lackorzynski
@ 2014-08-18 12:46 ` Christoffer Dall
0 siblings, 0 replies; 8+ messages in thread
From: Christoffer Dall @ 2014-08-18 12:46 UTC (permalink / raw)
To: Adam Lackorzynski; +Cc: qemu-devel
On Sat, Aug 16, 2014 at 09:48:20PM +0200, Adam Lackorzynski wrote:
> Setting the model is only available in pre-v1 GIC models.
> ---
> hw/intc/arm_gic.c | 10 ++++++----
> 1 file changed, 6 insertions(+), 4 deletions(-)
>
> diff --git a/hw/intc/arm_gic.c b/hw/intc/arm_gic.c
> index d2b1aaf..e546647 100644
> --- a/hw/intc/arm_gic.c
> +++ b/hw/intc/arm_gic.c
> @@ -561,10 +561,12 @@ static void gic_dist_writeb(void *opaque, hwaddr offset,
> if (irq < GIC_INTERNAL)
> value |= 0xaa;
> for (i = 0; i < 4; i++) {
> - if (value & (1 << (i * 2))) {
> - GIC_SET_MODEL(irq + i);
> - } else {
> - GIC_CLEAR_MODEL(irq + i);
> + if (s->revision == REV_11MPCORE || s->revision == REV_NVIC) {
> + if (value & (1 << (i * 2))) {
> + GIC_SET_MODEL(irq + i);
> + } else {
> + GIC_CLEAR_MODEL(irq + i);
> + }
> }
> if (value & (2 << (i * 2))) {
> GIC_SET_EDGE_TRIGGER(irq + i);
> --
> 2.1.0.rc1
>
looks good,
Acked-by: Christoffer Dall <christoffer.dall@linaro.org>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Qemu-devel] [PATCH 3/3] arm_gic: Do not force PPIs to edge-triggered mode
2014-08-16 19:48 ` [Qemu-devel] [PATCH 3/3] arm_gic: Do not force PPIs to edge-triggered mode Adam Lackorzynski
@ 2014-08-18 12:48 ` Christoffer Dall
2014-08-18 12:52 ` Adam Lackorzynski
0 siblings, 1 reply; 8+ messages in thread
From: Christoffer Dall @ 2014-08-18 12:48 UTC (permalink / raw)
To: Adam Lackorzynski; +Cc: qemu-devel
On Sat, Aug 16, 2014 at 09:48:21PM +0200, Adam Lackorzynski wrote:
> Only SGIs must be WI, done by forcing them to their default
> (edge-triggered).
>
> Signed-off-by: Adam Lackorzynski <adam@os.inf.tu-dresden.de>
> ---
> hw/intc/arm_gic.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/hw/intc/arm_gic.c b/hw/intc/arm_gic.c
> index e546647..55019c9 100644
> --- a/hw/intc/arm_gic.c
> +++ b/hw/intc/arm_gic.c
> @@ -558,7 +558,7 @@ static void gic_dist_writeb(void *opaque, hwaddr offset,
> irq = (offset - 0xc00) * 4 + GIC_BASE_IRQ;
> if (irq >= s->num_irq)
> goto bad_reg;
> - if (irq < GIC_INTERNAL)
> + if (irq < GIC_NR_SGIS)
> value |= 0xaa;
> for (i = 0; i < 4; i++) {
> if (s->revision == REV_11MPCORE || s->revision == REV_NVIC) {
> --
> 2.1.0.rc1
>
where do we ensure that the SGIs are actually configured as
edge-triggered when creating the gic?
-Christoffer
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Qemu-devel] [PATCH 3/3] arm_gic: Do not force PPIs to edge-triggered mode
2014-08-18 12:48 ` Christoffer Dall
@ 2014-08-18 12:52 ` Adam Lackorzynski
2014-08-18 13:01 ` Christoffer Dall
0 siblings, 1 reply; 8+ messages in thread
From: Adam Lackorzynski @ 2014-08-18 12:52 UTC (permalink / raw)
To: Christoffer Dall; +Cc: qemu-devel
On Mon Aug 18, 2014 at 14:48:15 +0200, Christoffer Dall wrote:
> On Sat, Aug 16, 2014 at 09:48:21PM +0200, Adam Lackorzynski wrote:
> > Only SGIs must be WI, done by forcing them to their default
> > (edge-triggered).
> >
> > Signed-off-by: Adam Lackorzynski <adam@os.inf.tu-dresden.de>
> > ---
> > hw/intc/arm_gic.c | 2 +-
> > 1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/hw/intc/arm_gic.c b/hw/intc/arm_gic.c
> > index e546647..55019c9 100644
> > --- a/hw/intc/arm_gic.c
> > +++ b/hw/intc/arm_gic.c
> > @@ -558,7 +558,7 @@ static void gic_dist_writeb(void *opaque, hwaddr offset,
> > irq = (offset - 0xc00) * 4 + GIC_BASE_IRQ;
> > if (irq >= s->num_irq)
> > goto bad_reg;
> > - if (irq < GIC_INTERNAL)
> > + if (irq < GIC_NR_SGIS)
> > value |= 0xaa;
> > for (i = 0; i < 4; i++) {
> > if (s->revision == REV_11MPCORE || s->revision == REV_NVIC) {
> > --
> > 2.1.0.rc1
> >
>
> where do we ensure that the SGIs are actually configured as
> edge-triggered when creating the gic?
It's setup in arm_gic_common_reset() in arm_gic_common.c.
(Looks like I should add another change to use GIC_NR_SGIS there too.)
Adam
--
Adam adam@os.inf.tu-dresden.de
Lackorzynski http://os.inf.tu-dresden.de/~adam/
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Qemu-devel] [PATCH 3/3] arm_gic: Do not force PPIs to edge-triggered mode
2014-08-18 12:52 ` Adam Lackorzynski
@ 2014-08-18 13:01 ` Christoffer Dall
0 siblings, 0 replies; 8+ messages in thread
From: Christoffer Dall @ 2014-08-18 13:01 UTC (permalink / raw)
To: Adam Lackorzynski; +Cc: qemu-devel
On Mon, Aug 18, 2014 at 02:52:47PM +0200, Adam Lackorzynski wrote:
> On Mon Aug 18, 2014 at 14:48:15 +0200, Christoffer Dall wrote:
> > On Sat, Aug 16, 2014 at 09:48:21PM +0200, Adam Lackorzynski wrote:
> > > Only SGIs must be WI, done by forcing them to their default
> > > (edge-triggered).
> > >
> > > Signed-off-by: Adam Lackorzynski <adam@os.inf.tu-dresden.de>
> > > ---
> > > hw/intc/arm_gic.c | 2 +-
> > > 1 file changed, 1 insertion(+), 1 deletion(-)
> > >
> > > diff --git a/hw/intc/arm_gic.c b/hw/intc/arm_gic.c
> > > index e546647..55019c9 100644
> > > --- a/hw/intc/arm_gic.c
> > > +++ b/hw/intc/arm_gic.c
> > > @@ -558,7 +558,7 @@ static void gic_dist_writeb(void *opaque, hwaddr offset,
> > > irq = (offset - 0xc00) * 4 + GIC_BASE_IRQ;
> > > if (irq >= s->num_irq)
> > > goto bad_reg;
> > > - if (irq < GIC_INTERNAL)
> > > + if (irq < GIC_NR_SGIS)
> > > value |= 0xaa;
> > > for (i = 0; i < 4; i++) {
> > > if (s->revision == REV_11MPCORE || s->revision == REV_NVIC) {
> > > --
> > > 2.1.0.rc1
> > >
> >
> > where do we ensure that the SGIs are actually configured as
> > edge-triggered when creating the gic?
>
> It's setup in arm_gic_common_reset() in arm_gic_common.c.
> (Looks like I should add another change to use GIC_NR_SGIS there too.)
>
That would be good, for this patch:
Acked-by: Christoffer Dall <christoffer.dall@linaro.org>
Thanks!
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2014-08-18 13:01 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-08-16 19:48 [Qemu-devel] [PATCH 0/3] arm_gic: Improve handling of GICD_ICFGR Adam Lackorzynski
2014-08-16 19:48 ` [Qemu-devel] [PATCH 1/3] arm_gic: Fix read " Adam Lackorzynski
2014-08-16 19:48 ` [Qemu-devel] [PATCH 2/3] arm_gic: GICD_ICFGR: Write model only for pre v1 GICs Adam Lackorzynski
2014-08-18 12:46 ` Christoffer Dall
2014-08-16 19:48 ` [Qemu-devel] [PATCH 3/3] arm_gic: Do not force PPIs to edge-triggered mode Adam Lackorzynski
2014-08-18 12:48 ` Christoffer Dall
2014-08-18 12:52 ` Adam Lackorzynski
2014-08-18 13:01 ` Christoffer Dall
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).