From: Julien Grall <julien.grall.oss@gmail.com>
To: Ian Campbell <ian.campbell@citrix.com>,
Julien Grall <julien.grall@citrix.com>
Cc: xen-devel@lists.xenproject.org, tim@xen.org,
stefano.stabellini@citrix.com
Subject: Re: [RFC 22/22] xen/arm: gic-v3: Add support of vGICv2 when available
Date: Fri, 05 Jun 2015 17:35:08 +0100 [thread overview]
Message-ID: <5571CFBC.2020702@gmail.com> (raw)
In-Reply-To: <1433508510.7108.275.camel@citrix.com>
On 05/06/15 13:48, Ian Campbell wrote:
> On Fri, 2015-05-08 at 14:29 +0100, Julien Grall wrote:
>> * Modify the GICv3 driver to recognize a such device. I wasn't able
>> to find a register which tell if GICv2 is supported on GICv3. The only
>> way to find it seems to check if the DT node provides GICC and GICV.
>
> I think that's the way...
>
>> * Disable access to ICC_SRE_EL1 to guest using vGICv2
>>
>> * The LR is slightly different for vGICv2. The interrupt is always
>> injected with group0.
>>
>> * Add a comment explaining why Group1 is used for vGICv3.
>>
>> Signed-off-by: Julien Grall <julien.grall@citrix.com>
>> ---
>> xen/arch/arm/gic-v3.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++-----
>> 1 file changed, 53 insertions(+), 5 deletions(-)
>>
>> diff --git a/xen/arch/arm/gic-v3.c b/xen/arch/arm/gic-v3.c
>> index 329d6ca..8533ae5 100644
>> --- a/xen/arch/arm/gic-v3.c
>> +++ b/xen/arch/arm/gic-v3.c
>> @@ -237,15 +237,14 @@ static void gicv3_ich_write_lr(int lr, uint64_t val)
>> }
>>
>> /*
>> - * System Register Enable (SRE). Enable to access CPU & Virtual
>> - * interface registers as system registers in EL2
>> + * System Register Enable (SRE).
>
> What was wrong with the comment (apart from the grammar). It was
> incomplete but I think you are removing the code which wasn't described,
> while removing the comment which describes the remaining behaviour.
I read EL1 instead of EL2 :/.
>> */
>> static void gicv3_enable_sre(void)
>> {
>> uint32_t val;
>>
>> val = READ_SYSREG32(ICC_SRE_EL2);
>> - val |= GICC_SRE_EL2_SRE | GICC_SRE_EL2_ENEL1;
>> + val |= GICC_SRE_EL2_SRE;
>>
>> WRITE_SYSREG32(val, ICC_SRE_EL2);
>> isb();
>> @@ -373,6 +372,20 @@ static void gicv3_save_state(struct vcpu *v)
>>
>> static void gicv3_restore_state(const struct vcpu *v)
>> {
>> + uint32_t val;
>> +
>> + val = READ_SYSREG32(ICC_SRE_EL2);
>> + /*
>> + * Don't give access to system registers when the guest is using
>> + * GICv2
>> + */
>> + if ( v->domain->arch.vgic.version == GIC_V2 )
>> + val &= ~GICC_SRE_EL2_ENEL1;
>> + else
>> + val |= GICC_SRE_EL2_ENEL1;
>> + WRITE_SYSREG32(val, ICC_SRE_EL2);
>
> Perhaps save/restore v->arch.gic.v3.sre_el2 rather than reading and
> recalculating each time? Then you just need to set sre_el2 appropriately
> during domain init.
Hmmm that would mean to reintroduce gicv_setup for setting sre_el2.
What is your concern here?
>
>> @@ -1107,6 +1127,32 @@ static int __init cmp_rdist(const void *a, const void *b)
>> return ( l->base < r->base) ? -1 : 0;
>> }
>>
>> +/* If the GICv3 supports GICv2, initialize it */
>> +static void __init gicv3_init_v2(const struct dt_device_node *node)
>> +{
>> + int res;
>> +
>> + /*
>> + * For GICv3 supporting GICv2, GICC and GICV base address will be
>> + * provided.
>> + */
>> +
>> + res = dt_device_get_address(node, 1 + gicv3_info.nr_rdist_regions,
>> + &gicv3_info.cbase, NULL);
>> + if ( res )
>> + return;
>> +
>> + res = dt_device_get_address(node, 1 + gicv3_info.nr_rdist_regions + 2,
>> + &gicv3_info.vbase, NULL);
>> + if ( res )
>> + return;
>> +
>> + printk("GICv3 compatible with GICv2 cbase %#"PRIpaddr" vbase %#"PRIpaddr"\n",
>> + gicv3_info.cbase, gicv3_info.vbase);
>> +
>> + gicv3_info.vgic_versions |= GIC_V2;
>
> So I think this is a second type of compat, right? After this we
> support:
>
> Guests using GICv2, via vgic-v2.c
> Guests using GICv3, via vgic-v3.c
>
> But also:
>
> Guests using GICv2, via vgic-v3.c, i.e. vgicv3 in compat mode.
>
> Is that right? Is it intended?
No, we don't support the last one. This variable is used to know which
callback set we have to use.
It may be clearer with the suggested solution in patch #16.
Regards,
--
Julien Grall
next prev parent reply other threads:[~2015-06-05 16:35 UTC|newest]
Thread overview: 57+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-05-08 13:29 [RFC 00/22] xen/arm: Add support for GICv2 on GICv3 Julien Grall
2015-05-08 13:29 ` [RFC 01/22] xen/arm: vGIC: Export vgic_vN ops rather than add an indirection Julien Grall
2015-06-05 12:08 ` Ian Campbell
2015-05-08 13:29 ` [RFC 02/22] xen/arm: vGIC: Check return of the domain_init callback Julien Grall
2015-06-05 12:08 ` Ian Campbell
2015-05-08 13:29 ` [RFC 03/22] xen/arm: gic-v3: Fix the distributor region to 64kB Julien Grall
2015-06-05 12:14 ` Ian Campbell
2015-06-05 12:56 ` Julien Grall
2015-06-05 13:29 ` Ian Campbell
2015-06-05 14:11 ` Julien Grall
2015-05-08 13:29 ` [RFC 04/22] xen/arm: gic-v3: Use the domain redistributor information to make the DT node Julien Grall
2015-06-05 12:15 ` Ian Campbell
2015-06-05 13:15 ` Julien Grall
2015-05-08 13:29 ` [RFC 05/22] xen/arm: gic-v3: Rework the print message at initialization Julien Grall
2015-06-05 12:18 ` Ian Campbell
2015-06-05 15:13 ` Julien Grall
2015-05-08 13:29 ` [RFC 06/22] xen/arm: gic-v2: Remove redundant check in gicv2_init Julien Grall
2015-06-05 12:18 ` Ian Campbell
2015-05-08 13:29 ` [RFC 07/22] xen/arm: gic-v2: Use SZ_64K rather than our custom value Julien Grall
2015-06-05 12:20 ` Ian Campbell
2015-05-08 13:29 ` [RFC 08/22] xen/arm: gic-v2: Use SZ_4K rather than PAGE_SIZE Julien Grall
2015-06-05 12:23 ` Ian Campbell
2015-06-05 15:23 ` Julien Grall
2015-05-08 13:29 ` [RFC 09/22] xen/arm: gic-v2: Allow the base address to be 0 Julien Grall
2015-06-05 12:24 ` Ian Campbell
2015-05-08 13:29 ` [RFC 10/22] xen/arm: gic-v2: Remove hbase from the global state Julien Grall
2015-06-05 12:24 ` Ian Campbell
2015-05-08 13:29 ` [RFC 11/22] xen/arm: gic-hip04: Remove redundant check in hip04gic_init Julien Grall
2015-06-05 12:24 ` Ian Campbell
2015-06-05 12:26 ` Ian Campbell
2015-06-05 15:29 ` Julien Grall
2015-06-05 15:40 ` Ian Campbell
2015-05-08 13:29 ` [RFC 12/22] xen/arm: gic-hip04: Use SZ_64K rather than a custom operation Julien Grall
2015-05-08 13:29 ` [RFC 13/22] xen/arm: gic-hip04: Use SZ_4K rather than PAGE_SIZE Julien Grall
2015-05-08 13:29 ` [RFC 14/22] xen/arm: gic-hip04: Allow the base address to be 0 Julien Grall
2015-05-08 13:29 ` [RFC 15/22] xen/arm: gic-hip04: Remove hbase from the global state Julien Grall
2015-05-08 13:29 ` [RFC 16/22] xen/arm: gic-v2: Move GICD, GICC and GICV base address in gic_info Julien Grall
2015-06-05 12:33 ` Ian Campbell
2015-05-08 13:29 ` [RFC 17/22] xen/arm: gic-hip04: " Julien Grall
2015-05-08 13:29 ` [RFC 18/22] xen/arm: gic-v3: Move Distributor and Re-Distributors info " Julien Grall
2015-05-08 13:29 ` [RFC 19/22] xen/arm: Merge gicv_setup with vgic_domain_init Julien Grall
2015-06-05 12:34 ` Ian Campbell
2015-05-08 13:29 ` [RFC 20/22] xen/arm: gic: Expose the vGIC versions suported by GIC Julien Grall
2015-05-08 13:48 ` Julien Grall
2015-06-05 12:35 ` Ian Campbell
2015-06-05 17:59 ` Julien Grall
2015-06-08 10:01 ` Ian Campbell
2015-05-08 13:29 ` [RFC 21/22] arm: Allow the user to specify the GIC version Julien Grall
2015-06-05 12:42 ` Ian Campbell
2015-06-05 16:00 ` Julien Grall
2015-06-05 16:40 ` Ian Campbell
2015-05-08 13:29 ` [RFC 22/22] xen/arm: gic-v3: Add support of vGICv2 when available Julien Grall
2015-06-05 12:48 ` Ian Campbell
2015-06-05 16:35 ` Julien Grall [this message]
2015-06-08 10:01 ` Ian Campbell
2015-06-25 15:38 ` Julien Grall
2015-05-13 12:41 ` [RFC 00/22] xen/arm: Add support for GICv2 on GICv3 Chen Baozi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5571CFBC.2020702@gmail.com \
--to=julien.grall.oss@gmail.com \
--cc=ian.campbell@citrix.com \
--cc=julien.grall@citrix.com \
--cc=stefano.stabellini@citrix.com \
--cc=tim@xen.org \
--cc=xen-devel@lists.xenproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.