All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/2] xen/arm: Add support for PSCI v1.0
@ 2015-10-12 15:39 Julien Grall
  2015-10-12 15:39 ` [PATCH v2 1/2] xen/arm: Add support of PSCI v1.0 for the host Julien Grall
  2015-10-12 15:39 ` [PATCH v2 2/2] xen/arm: Replace XEN_PSCI_* by PSCI_VERSION(major, minor) Julien Grall
  0 siblings, 2 replies; 8+ messages in thread
From: Julien Grall @ 2015-10-12 15:39 UTC (permalink / raw)
  To: xen-devel; +Cc: Julien Grall, ian.campbell, stefano.stabellini

Hi all,

This small patch series allow Xen to boot on platform where the firmware
is only supporting PSCI v1.0.

Sincerely yours,

Julien Grall (2):
  xen/arm: Add support of PSCI v1.0 for the host
  xen/arm: Replace XEN_PSCI_* by PSCI_VERSION(major, minor)

 xen/arch/arm/psci.c        | 23 ++++++++++++++++-------
 xen/arch/arm/vpsci.c       | 15 ++++++++-------
 xen/include/asm-arm/psci.h | 17 +++++++++++++----
 3 files changed, 37 insertions(+), 18 deletions(-)

-- 
2.1.4

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH v2 1/2] xen/arm: Add support of PSCI v1.0 for the host
  2015-10-12 15:39 [PATCH v2 0/2] xen/arm: Add support for PSCI v1.0 Julien Grall
@ 2015-10-12 15:39 ` Julien Grall
  2015-10-22 15:42   ` Ian Campbell
  2015-10-12 15:39 ` [PATCH v2 2/2] xen/arm: Replace XEN_PSCI_* by PSCI_VERSION(major, minor) Julien Grall
  1 sibling, 1 reply; 8+ messages in thread
From: Julien Grall @ 2015-10-12 15:39 UTC (permalink / raw)
  To: xen-devel
  Cc: Julien Grall, Andre Przywara, Mark Rutland, ian.campbell,
	stefano.stabellini

>From Xen point of view, PSCI v0.2 and PSCI v1.0 are very similar. All
the PSCI calls used within Xen (PSCI_VERSION, CPU_ON, SYSTEM_OFF and
SYSTEM_RESET) behaves exactly the same.

Furthermore, based on the spec (5.3.1 DEN0022C), any 1.y version must be
compatible with 1.x when y > x for any functions existing in 1.x.

So check the presence of the new compatible string [1] and allow Xen to
boot on any platform using PSCI 1.x.

[1] http://lists.infradead.org/pipermail/linux-arm-kernel/2015-October/374547.html

Signed-off-by: Julien Grall <julien.grall@citrix.com>

---

Cc: Andre Przywara <andre.przywara@arm.com>
Cc: Mark Rutland <mark.rutland@arm.com>

    Changes in v2:
        - Update the commit message
        - Allow Xen to boot on any PSCI 1.x
        - Update the error message
---
 xen/arch/arm/psci.c        | 17 +++++++++++++----
 xen/include/asm-arm/psci.h | 13 +++++++++++++
 2 files changed, 26 insertions(+), 4 deletions(-)

diff --git a/xen/arch/arm/psci.c b/xen/arch/arm/psci.c
index 172c6e7..44ccc2f 100644
--- a/xen/arch/arm/psci.c
+++ b/xen/arch/arm/psci.c
@@ -109,10 +109,16 @@ int __init psci_init_0_1(void)
 
 int __init psci_init_0_2(void)
 {
+    static const struct dt_device_match psci_ids[] __initconst =
+    {
+        DT_MATCH_COMPATIBLE("arm,psci-0.2"),
+        DT_MATCH_COMPATIBLE("arm,psci-1.0"),
+        { /* sentinel */ },
+    };
     int ret;
     const struct dt_device_node *psci;
 
-    psci = dt_find_compatible_node(NULL, NULL, "arm,psci-0.2");
+    psci = dt_find_matching_node(NULL, psci_ids);
     if ( !psci )
         return -EOPNOTSUPP;
 
@@ -122,15 +128,18 @@ int __init psci_init_0_2(void)
 
     psci_ver = call_smc(PSCI_0_2_FN_PSCI_VERSION, 0, 0, 0);
 
-    if ( psci_ver != XEN_PSCI_V_0_2 )
+    /* For the moment, we only support PSCI 0.2 and PSCI 1.x */
+    if ( psci_ver != PSCI_VERSION(0, 2) && PSCI_VERSION_MAJOR(psci_ver != 1) )
     {
-        printk("Error: PSCI version %#x is not supported.\n", psci_ver);
+        printk("Error: Unrecognized PSCI version %u.%u\n",
+               PSCI_VERSION_MAJOR(psci_ver), PSCI_VERSION_MINOR(psci_ver));
         return -EOPNOTSUPP;
     }
 
     psci_cpu_on_nr = PSCI_0_2_FN_NATIVE(CPU_ON);
 
-    printk(XENLOG_INFO "Using PSCI-0.2 for SMP bringup\n");
+    printk(XENLOG_INFO "Using PSCI-%u.%u for SMP bringup\n",
+           PSCI_VERSION_MAJOR(psci_ver), PSCI_VERSION_MINOR(psci_ver));
 
     return 0;
 }
diff --git a/xen/include/asm-arm/psci.h b/xen/include/asm-arm/psci.h
index 5d17ee3..d8a109f 100644
--- a/xen/include/asm-arm/psci.h
+++ b/xen/include/asm-arm/psci.h
@@ -87,6 +87,19 @@ void do_psci_0_2_system_reset(void);
 #define PSCI_0_2_POWER_STATE_TYPE_MASK      \
                     (0x1 << PSCI_0_2_POWER_STATE_TYPE_SHIFT)
 
+/* PSCI version decoding (independent of PSCI version) */
+#define PSCI_VERSION_MAJOR_SHIFT            16
+#define PSCI_VERSION_MINOR_MASK             \
+        ((1U << PSCI_VERSION_MAJOR_SHIFT) - 1)
+#define PSCI_VERSION_MAJOR_MASK             ~PSCI_VERSION_MINOR_MASK
+#define PSCI_VERSION_MAJOR(ver)             \
+        (((ver) & PSCI_VERSION_MAJOR_MASK) >> PSCI_VERSION_MAJOR_SHIFT)
+#define PSCI_VERSION_MINOR(ver)             \
+        ((ver) & PSCI_VERSION_MINOR_MASK)
+
+#define PSCI_VERSION(major, minor)          \
+    (((major) << PSCI_VERSION_MAJOR_SHIFT) | (minor))
+
 #endif /* __ASM_PSCI_H__ */
 
 /*
-- 
2.1.4

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH v2 2/2] xen/arm: Replace XEN_PSCI_* by PSCI_VERSION(major, minor)
  2015-10-12 15:39 [PATCH v2 0/2] xen/arm: Add support for PSCI v1.0 Julien Grall
  2015-10-12 15:39 ` [PATCH v2 1/2] xen/arm: Add support of PSCI v1.0 for the host Julien Grall
@ 2015-10-12 15:39 ` Julien Grall
  1 sibling, 0 replies; 8+ messages in thread
From: Julien Grall @ 2015-10-12 15:39 UTC (permalink / raw)
  To: xen-devel; +Cc: Julien Grall, ian.campbell, stefano.stabellini

It will avoid to introduce a new XEN_PSCI_* define every time we support
a new version of PSCI in Xen.

Also fix the coding style in modified place.

Signed-off-by: Julien Grall <julien.grall@citrix.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>

---
    Changes in v2:
        - Add Ian's acked-by
---
 xen/arch/arm/psci.c        |  6 +++---
 xen/arch/arm/vpsci.c       | 15 ++++++++-------
 xen/include/asm-arm/psci.h |  4 ----
 3 files changed, 11 insertions(+), 14 deletions(-)

diff --git a/xen/arch/arm/psci.c b/xen/arch/arm/psci.c
index 44ccc2f..d800cb6 100644
--- a/xen/arch/arm/psci.c
+++ b/xen/arch/arm/psci.c
@@ -46,13 +46,13 @@ int call_psci_cpu_on(int cpu)
 
 void call_psci_system_off(void)
 {
-    if ( psci_ver > XEN_PSCI_V_0_1 )
+    if ( psci_ver > PSCI_VERSION(0, 1) )
         call_smc(PSCI_0_2_FN_SYSTEM_OFF, 0, 0, 0);
 }
 
 void call_psci_system_reset(void)
 {
-    if ( psci_ver > XEN_PSCI_V_0_1 )
+    if ( psci_ver > PSCI_VERSION(0, 1) )
         call_smc(PSCI_0_2_FN_SYSTEM_RESET, 0, 0, 0);
 }
 
@@ -100,7 +100,7 @@ int __init psci_init_0_1(void)
         return -ENOENT;
     }
 
-    psci_ver = XEN_PSCI_V_0_1;
+    psci_ver = PSCI_VERSION(0, 1);
 
     printk(XENLOG_INFO "Using PSCI-0.1 for SMP bringup\n");
 
diff --git a/xen/arch/arm/vpsci.c b/xen/arch/arm/vpsci.c
index aebe1e2..0e024f7 100644
--- a/xen/arch/arm/vpsci.c
+++ b/xen/arch/arm/vpsci.c
@@ -41,8 +41,8 @@ static int do_common_cpu_on(register_t target_cpu, register_t entry_point,
     if ( is_64bit_domain(d) && is_thumb )
         return PSCI_INVALID_PARAMETERS;
 
-    if( ( ver == XEN_PSCI_V_0_2 ) &&
-            ( !test_bit(_VPF_down, &v->pause_flags) ) )
+    if ( (ver == PSCI_VERSION(0, 2)) &&
+            !test_bit(_VPF_down, &v->pause_flags) )
         return PSCI_ALREADY_ON;
 
     if ( (ctxt = alloc_vcpu_guest_context()) == NULL )
@@ -59,14 +59,14 @@ static int do_common_cpu_on(register_t target_cpu, register_t entry_point,
     if ( is_32bit_domain(d) )
     {
         ctxt->user_regs.cpsr = PSR_GUEST32_INIT;
-        if( ver == XEN_PSCI_V_0_2 )
+        if ( ver == PSCI_VERSION(0, 2) )
             ctxt->user_regs.r0_usr = context_id;
     }
 #ifdef CONFIG_ARM_64
     else
     {
         ctxt->user_regs.cpsr = PSR_GUEST64_INIT;
-        if( ver == XEN_PSCI_V_0_2 )
+        if ( ver == PSCI_VERSION(0, 2) )
             ctxt->user_regs.x0 = context_id;
     }
 #endif
@@ -94,7 +94,7 @@ static int do_common_cpu_on(register_t target_cpu, register_t entry_point,
 
 int32_t do_psci_cpu_on(uint32_t vcpuid, register_t entry_point)
 {
-    return do_common_cpu_on(vcpuid,entry_point,0,XEN_PSCI_V_0_1);
+    return do_common_cpu_on(vcpuid, entry_point, 0 , PSCI_VERSION(0, 1));
 }
 
 int32_t do_psci_cpu_off(uint32_t power_state)
@@ -107,7 +107,7 @@ int32_t do_psci_cpu_off(uint32_t power_state)
 
 uint32_t do_psci_0_2_version(void)
 {
-    return XEN_PSCI_V_0_2;
+    return PSCI_VERSION(0, 2);
 }
 
 register_t do_psci_0_2_cpu_suspend(uint32_t power_state, register_t entry_point,
@@ -132,7 +132,8 @@ int32_t do_psci_0_2_cpu_off(void)
 int32_t do_psci_0_2_cpu_on(register_t target_cpu, register_t entry_point,
                        register_t context_id)
 {
-    return do_common_cpu_on(target_cpu,entry_point,context_id,XEN_PSCI_V_0_2);
+    return do_common_cpu_on(target_cpu, entry_point, context_id,
+                            PSCI_VERSION(0, 2));
 }
 
 static const unsigned long target_affinity_mask[] = {
diff --git a/xen/include/asm-arm/psci.h b/xen/include/asm-arm/psci.h
index d8a109f..be2458a 100644
--- a/xen/include/asm-arm/psci.h
+++ b/xen/include/asm-arm/psci.h
@@ -41,10 +41,6 @@ register_t do_psci_0_2_migrate_info_up_cpu(void);
 void do_psci_0_2_system_off(void);
 void do_psci_0_2_system_reset(void);
 
-/* PSCI version */
-#define XEN_PSCI_V_0_1 1
-#define XEN_PSCI_V_0_2 2
-
 /* PSCI v0.2 interface */
 #define PSCI_0_2_FN_BASE        0x84000000
 #define PSCI_0_2_FN(n)          (PSCI_0_2_FN_BASE + (n))
-- 
2.1.4

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH v2 1/2] xen/arm: Add support of PSCI v1.0 for the host
  2015-10-12 15:39 ` [PATCH v2 1/2] xen/arm: Add support of PSCI v1.0 for the host Julien Grall
@ 2015-10-22 15:42   ` Ian Campbell
  2015-10-22 17:17     ` Julien Grall
  0 siblings, 1 reply; 8+ messages in thread
From: Ian Campbell @ 2015-10-22 15:42 UTC (permalink / raw)
  To: Julien Grall, xen-devel; +Cc: Mark Rutland, Andre Przywara, stefano.stabellini

On Mon, 2015-10-12 at 16:39 +0100, Julien Grall wrote:

Subject: support PSCI v1.0 for the host.

> From Xen point of view, PSCI v0.2 and PSCI v1.0 are very similar. All
       Xen's

> the PSCI calls used within Xen (PSCI_VERSION, CPU_ON, SYSTEM_OFF and
> SYSTEM_RESET) behaves exactly the same.

                behave

> Furthermore, based on the spec (5.3.1 DEN0022C), any 1.y version must be
> compatible with 1.x when y > x for any functions existing in 1.x.
> 
> So check the presence of the new compatible string [1] and allow Xen to
> boot on any platform using PSCI 1.x.
> 
> [1] http://lists.infradead.org/pipermail/linux-arm-kernel/2015-October/37
> 4547.html
> 
> Signed-off-by: Julien Grall <julien.grall@citrix.com>

Acked-by: Ian Campbell <ian.campbell@citrix.com>

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v2 1/2] xen/arm: Add support of PSCI v1.0 for the host
  2015-10-22 15:42   ` Ian Campbell
@ 2015-10-22 17:17     ` Julien Grall
  2015-10-23 10:39       ` Ian Campbell
  0 siblings, 1 reply; 8+ messages in thread
From: Julien Grall @ 2015-10-22 17:17 UTC (permalink / raw)
  To: Ian Campbell, xen-devel; +Cc: Mark Rutland, Andre Przywara, stefano.stabellini

Hi,

On 22/10/15 16:42, Ian Campbell wrote:
> On Mon, 2015-10-12 at 16:39 +0100, Julien Grall wrote:
> 
> Subject: support PSCI v1.0 for the host.
> 
>> From Xen point of view, PSCI v0.2 and PSCI v1.0 are very similar. All
>        Xen's
> 
>> the PSCI calls used within Xen (PSCI_VERSION, CPU_ON, SYSTEM_OFF and
>> SYSTEM_RESET) behaves exactly the same.
> 
>                 behave
> 
>> Furthermore, based on the spec (5.3.1 DEN0022C), any 1.y version must be
>> compatible with 1.x when y > x for any functions existing in 1.x.
>>
>> So check the presence of the new compatible string [1] and allow Xen to
>> boot on any platform using PSCI 1.x.
>>
>> [1] http://lists.infradead.org/pipermail/linux-arm-kernel/2015-October/37
>> 4547.html
>>
>> Signed-off-by: Julien Grall <julien.grall@citrix.com>
> 
> Acked-by: Ian Campbell <ian.campbell@citrix.com>

Shall I resend a new version with those typos fixed? Or do you plan to
do it when you'll commit the patch?

Regards,

-- 
Julien Grall

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v2 1/2] xen/arm: Add support of PSCI v1.0 for the host
  2015-10-22 17:17     ` Julien Grall
@ 2015-10-23 10:39       ` Ian Campbell
  2015-10-23 10:39         ` Julien Grall
  0 siblings, 1 reply; 8+ messages in thread
From: Ian Campbell @ 2015-10-23 10:39 UTC (permalink / raw)
  To: Julien Grall, xen-devel; +Cc: Mark Rutland, Andre Przywara, stefano.stabellini

On Thu, 2015-10-22 at 18:17 +0100, Julien Grall wrote:
> Hi,
> 
> On 22/10/15 16:42, Ian Campbell wrote:
> > On Mon, 2015-10-12 at 16:39 +0100, Julien Grall wrote:
> > 
> > Subject: support PSCI v1.0 for the host.
> > 
> > > From Xen point of view, PSCI v0.2 and PSCI v1.0 are very similar. All
> >        Xen's
> > 
> > > the PSCI calls used within Xen (PSCI_VERSION, CPU_ON, SYSTEM_OFF and
> > > SYSTEM_RESET) behaves exactly the same.
> > 
> >                 behave
> > 
> > > Furthermore, based on the spec (5.3.1 DEN0022C), any 1.y version must
> > > be
> > > compatible with 1.x when y > x for any functions existing in 1.x.
> > > 
> > > So check the presence of the new compatible string [1] and allow Xen
> > > to
> > > boot on any platform using PSCI 1.x.
> > > 
> > > [1] 
> > > http://lists.infradead.org/pipermail/linux-arm-kernel/2015-October/37
> > > 4547.html
> > > 
> > > Signed-off-by: Julien Grall <julien.grall@citrix.com>
> > 
> > Acked-by: Ian Campbell <ian.campbell@citrix.com>
> 
> Shall I resend a new version with those typos fixed? Or do you plan to
> do it when you'll commit the patch?

Looks like those are the only changes required, so assuming you are are
happy with them I'll just do them on commit.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v2 1/2] xen/arm: Add support of PSCI v1.0 for the host
  2015-10-23 10:39       ` Ian Campbell
@ 2015-10-23 10:39         ` Julien Grall
  2015-10-23 13:52           ` Ian Campbell
  0 siblings, 1 reply; 8+ messages in thread
From: Julien Grall @ 2015-10-23 10:39 UTC (permalink / raw)
  To: Ian Campbell, xen-devel; +Cc: Mark Rutland, Andre Przywara, stefano.stabellini

On 23/10/15 11:39, Ian Campbell wrote:
> On Thu, 2015-10-22 at 18:17 +0100, Julien Grall wrote:
>> Hi,
>>
>> On 22/10/15 16:42, Ian Campbell wrote:
>>> On Mon, 2015-10-12 at 16:39 +0100, Julien Grall wrote:
>>>
>>> Subject: support PSCI v1.0 for the host.
>>>
>>>> From Xen point of view, PSCI v0.2 and PSCI v1.0 are very similar. All
>>>        Xen's
>>>
>>>> the PSCI calls used within Xen (PSCI_VERSION, CPU_ON, SYSTEM_OFF and
>>>> SYSTEM_RESET) behaves exactly the same.
>>>
>>>                 behave
>>>
>>>> Furthermore, based on the spec (5.3.1 DEN0022C), any 1.y version must
>>>> be
>>>> compatible with 1.x when y > x for any functions existing in 1.x.
>>>>
>>>> So check the presence of the new compatible string [1] and allow Xen
>>>> to
>>>> boot on any platform using PSCI 1.x.
>>>>
>>>> [1] 
>>>> http://lists.infradead.org/pipermail/linux-arm-kernel/2015-October/37
>>>> 4547.html
>>>>
>>>> Signed-off-by: Julien Grall <julien.grall@citrix.com>
>>>
>>> Acked-by: Ian Campbell <ian.campbell@citrix.com>
>>
>> Shall I resend a new version with those typos fixed? Or do you plan to
>> do it when you'll commit the patch?
> 
> Looks like those are the only changes required, so assuming you are are
> happy with them I'll just do them on commit.

I'm fine with that.

Thank you!

-- 
Julien Grall

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v2 1/2] xen/arm: Add support of PSCI v1.0 for the host
  2015-10-23 10:39         ` Julien Grall
@ 2015-10-23 13:52           ` Ian Campbell
  0 siblings, 0 replies; 8+ messages in thread
From: Ian Campbell @ 2015-10-23 13:52 UTC (permalink / raw)
  To: Julien Grall, xen-devel; +Cc: Mark Rutland, Andre Przywara, stefano.stabellini

On Fri, 2015-10-23 at 11:39 +0100, Julien Grall wrote:
> On 23/10/15 11:39, Ian Campbell wrote:
> > On Thu, 2015-10-22 at 18:17 +0100, Julien Grall wrote:
> > > Hi,
> > > 
> > > On 22/10/15 16:42, Ian Campbell wrote:
> > > > On Mon, 2015-10-12 at 16:39 +0100, Julien Grall wrote:
> > > > 
> > > > Subject: support PSCI v1.0 for the host.
> > > > 
> > > > > From Xen point of view, PSCI v0.2 and PSCI v1.0 are very similar.
> > > > > All
> > > >        Xen's
> > > > 
> > > > > the PSCI calls used within Xen (PSCI_VERSION, CPU_ON, SYSTEM_OFF
> > > > > and
> > > > > SYSTEM_RESET) behaves exactly the same.
> > > > 
> > > >                 behave
> > > > 
> > > > > Furthermore, based on the spec (5.3.1 DEN0022C), any 1.y version
> > > > > must
> > > > > be
> > > > > compatible with 1.x when y > x for any functions existing in 1.x.
> > > > > 
> > > > > So check the presence of the new compatible string [1] and allow
> > > > > Xen
> > > > > to
> > > > > boot on any platform using PSCI 1.x.
> > > > > 
> > > > > [1] 
> > > > > http://lists.infradead.org/pipermail/linux-arm-kernel/2015-Octobe
> > > > > r/37
> > > > > 4547.html
> > > > > 
> > > > > Signed-off-by: Julien Grall <julien.grall@citrix.com>
> > > > 
> > > > Acked-by: Ian Campbell <ian.campbell@citrix.com>
> > > 
> > > Shall I resend a new version with those typos fixed? Or do you plan
> > > to
> > > do it when you'll commit the patch?
> > 
> > Looks like those are the only changes required, so assuming you are are
> > happy with them I'll just do them on commit.
> 
> I'm fine with that.

Applied, thanks.

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2015-10-23 13:53 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-10-12 15:39 [PATCH v2 0/2] xen/arm: Add support for PSCI v1.0 Julien Grall
2015-10-12 15:39 ` [PATCH v2 1/2] xen/arm: Add support of PSCI v1.0 for the host Julien Grall
2015-10-22 15:42   ` Ian Campbell
2015-10-22 17:17     ` Julien Grall
2015-10-23 10:39       ` Ian Campbell
2015-10-23 10:39         ` Julien Grall
2015-10-23 13:52           ` Ian Campbell
2015-10-12 15:39 ` [PATCH v2 2/2] xen/arm: Replace XEN_PSCI_* by PSCI_VERSION(major, minor) Julien Grall

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.