diff mbox

[edk2] ArmPlatformPkg/PrePi: allow unicore version to be used on MP hardware

Message ID 1461050792-16020-1-git-send-email-ard.biesheuvel@linaro.org
State Accepted
Commit c4cc609dc8cf1fe96ae331c61b7803be0fa23e03
Headers show

Commit Message

Ard Biesheuvel April 19, 2016, 7:26 a.m. UTC
When combining UEFI firmware built from Tianocore with ARM Trusted
Firmware running in EL3, it is the responsibility of ATF that only
a single core enters the UEFI firmware in EL2, and the remaining cores
are released directly to the OS via PSCI SMC calls.

In this case, we don't need the MpCore flavor of PrePi or PrePeiCore,
but the UniCore flavor currently checks the CPU identification registers
directly, and refuses to proceed if the boot CPU is part of a MpCore
system.

So drop the ASSERT()'s that implement this check.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>

---
 ArmPlatformPkg/PrePi/MainUniCore.c | 5 -----
 ArmPlatformPkg/PrePi/PrePi.c       | 2 --
 2 files changed, 7 deletions(-)

-- 
2.5.0

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Comments

Ard Biesheuvel April 28, 2016, 3:02 p.m. UTC | #1
On 19 April 2016 at 09:26, Ard Biesheuvel <ard.biesheuvel@linaro.org> wrote:
> When combining UEFI firmware built from Tianocore with ARM Trusted

> Firmware running in EL3, it is the responsibility of ATF that only

> a single core enters the UEFI firmware in EL2, and the remaining cores

> are released directly to the OS via PSCI SMC calls.

>

> In this case, we don't need the MpCore flavor of PrePi or PrePeiCore,

> but the UniCore flavor currently checks the CPU identification registers

> directly, and refuses to proceed if the boot CPU is part of a MpCore

> system.

>

> So drop the ASSERT()'s that implement this check.

>


We will need something like this for PrePeiCore so that we can move Husky to it

> Contributed-under: TianoCore Contribution Agreement 1.0

> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>

> ---

>  ArmPlatformPkg/PrePi/MainUniCore.c | 5 -----

>  ArmPlatformPkg/PrePi/PrePi.c       | 2 --

>  2 files changed, 7 deletions(-)

>

> diff --git a/ArmPlatformPkg/PrePi/MainUniCore.c b/ArmPlatformPkg/PrePi/MainUniCore.c

> index 49b02338ebc2..11b9f462bb48 100644

> --- a/ArmPlatformPkg/PrePi/MainUniCore.c

> +++ b/ArmPlatformPkg/PrePi/MainUniCore.c

> @@ -21,11 +21,6 @@ PrimaryMain (

>    IN  UINT64                    StartTimeStamp

>    )

>  {

> -  DEBUG_CODE_BEGIN();

> -    // On MPCore system, PeiMpCore.inf should be used instead of PeiUniCore.inf

> -    ASSERT(ArmIsMpCore() == 0);

> -  DEBUG_CODE_END();

> -

>    PrePiMain (UefiMemoryBase, StacksBase, StartTimeStamp);

>

>    // We must never return

> diff --git a/ArmPlatformPkg/PrePi/PrePi.c b/ArmPlatformPkg/PrePi/PrePi.c

> index 8740b2a9e84d..36928c65a73b 100644

> --- a/ArmPlatformPkg/PrePi/PrePi.c

> +++ b/ArmPlatformPkg/PrePi/PrePi.c

> @@ -183,8 +183,6 @@ CEntryPoint (

>  {

>    UINT64   StartTimeStamp;

>

> -  ASSERT(!ArmIsMpCore() || (PcdGet32 (PcdCoreCount) > 1));

> -

>    // Initialize the platform specific controllers

>    ArmPlatformInitialize (MpId);

>

> --

> 2.5.0

>

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel
Leif Lindholm April 28, 2016, 3:29 p.m. UTC | #2
On Thu, Apr 28, 2016 at 05:02:19PM +0200, Ard Biesheuvel wrote:
> On 19 April 2016 at 09:26, Ard Biesheuvel <ard.biesheuvel@linaro.org> wrote:

> > When combining UEFI firmware built from Tianocore with ARM Trusted

> > Firmware running in EL3, it is the responsibility of ATF that only

> > a single core enters the UEFI firmware in EL2, and the remaining cores

> > are released directly to the OS via PSCI SMC calls.

> >

> > In this case, we don't need the MpCore flavor of PrePi or PrePeiCore,

> > but the UniCore flavor currently checks the CPU identification registers

> > directly, and refuses to proceed if the boot CPU is part of a MpCore

> > system.

> >

> > So drop the ASSERT()'s that implement this check.

> >

> 

> We will need something like this for PrePeiCore so that we can move Husky to it


Yeah, sorry - was getting stuck considering what to do at the MP side,
but that really is a completely separate thing.

Apart from the name no longer making sense:
Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>


> > Contributed-under: TianoCore Contribution Agreement 1.0

> > Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>

> > ---

> >  ArmPlatformPkg/PrePi/MainUniCore.c | 5 -----

> >  ArmPlatformPkg/PrePi/PrePi.c       | 2 --

> >  2 files changed, 7 deletions(-)

> >

> > diff --git a/ArmPlatformPkg/PrePi/MainUniCore.c b/ArmPlatformPkg/PrePi/MainUniCore.c

> > index 49b02338ebc2..11b9f462bb48 100644

> > --- a/ArmPlatformPkg/PrePi/MainUniCore.c

> > +++ b/ArmPlatformPkg/PrePi/MainUniCore.c

> > @@ -21,11 +21,6 @@ PrimaryMain (

> >    IN  UINT64                    StartTimeStamp

> >    )

> >  {

> > -  DEBUG_CODE_BEGIN();

> > -    // On MPCore system, PeiMpCore.inf should be used instead of PeiUniCore.inf

> > -    ASSERT(ArmIsMpCore() == 0);

> > -  DEBUG_CODE_END();

> > -

> >    PrePiMain (UefiMemoryBase, StacksBase, StartTimeStamp);

> >

> >    // We must never return

> > diff --git a/ArmPlatformPkg/PrePi/PrePi.c b/ArmPlatformPkg/PrePi/PrePi.c

> > index 8740b2a9e84d..36928c65a73b 100644

> > --- a/ArmPlatformPkg/PrePi/PrePi.c

> > +++ b/ArmPlatformPkg/PrePi/PrePi.c

> > @@ -183,8 +183,6 @@ CEntryPoint (

> >  {

> >    UINT64   StartTimeStamp;

> >

> > -  ASSERT(!ArmIsMpCore() || (PcdGet32 (PcdCoreCount) > 1));

> > -

> >    // Initialize the platform specific controllers

> >    ArmPlatformInitialize (MpId);

> >

> > --

> > 2.5.0

> >

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel
Ard Biesheuvel April 29, 2016, 4:15 p.m. UTC | #3
On 28 April 2016 at 17:29, Leif Lindholm <leif.lindholm@linaro.org> wrote:
> On Thu, Apr 28, 2016 at 05:02:19PM +0200, Ard Biesheuvel wrote:

>> On 19 April 2016 at 09:26, Ard Biesheuvel <ard.biesheuvel@linaro.org> wrote:

>> > When combining UEFI firmware built from Tianocore with ARM Trusted

>> > Firmware running in EL3, it is the responsibility of ATF that only

>> > a single core enters the UEFI firmware in EL2, and the remaining cores

>> > are released directly to the OS via PSCI SMC calls.

>> >

>> > In this case, we don't need the MpCore flavor of PrePi or PrePeiCore,

>> > but the UniCore flavor currently checks the CPU identification registers

>> > directly, and refuses to proceed if the boot CPU is part of a MpCore

>> > system.

>> >

>> > So drop the ASSERT()'s that implement this check.

>> >

>>

>> We will need something like this for PrePeiCore so that we can move Husky to it

>

> Yeah, sorry - was getting stuck considering what to do at the MP side,

> but that really is a completely separate thing.

>

> Apart from the name no longer making sense:

> Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>

>


Pushed as well

>> > Contributed-under: TianoCore Contribution Agreement 1.0

>> > Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>

>> > ---

>> >  ArmPlatformPkg/PrePi/MainUniCore.c | 5 -----

>> >  ArmPlatformPkg/PrePi/PrePi.c       | 2 --

>> >  2 files changed, 7 deletions(-)

>> >

>> > diff --git a/ArmPlatformPkg/PrePi/MainUniCore.c b/ArmPlatformPkg/PrePi/MainUniCore.c

>> > index 49b02338ebc2..11b9f462bb48 100644

>> > --- a/ArmPlatformPkg/PrePi/MainUniCore.c

>> > +++ b/ArmPlatformPkg/PrePi/MainUniCore.c

>> > @@ -21,11 +21,6 @@ PrimaryMain (

>> >    IN  UINT64                    StartTimeStamp

>> >    )

>> >  {

>> > -  DEBUG_CODE_BEGIN();

>> > -    // On MPCore system, PeiMpCore.inf should be used instead of PeiUniCore.inf

>> > -    ASSERT(ArmIsMpCore() == 0);

>> > -  DEBUG_CODE_END();

>> > -

>> >    PrePiMain (UefiMemoryBase, StacksBase, StartTimeStamp);

>> >

>> >    // We must never return

>> > diff --git a/ArmPlatformPkg/PrePi/PrePi.c b/ArmPlatformPkg/PrePi/PrePi.c

>> > index 8740b2a9e84d..36928c65a73b 100644

>> > --- a/ArmPlatformPkg/PrePi/PrePi.c

>> > +++ b/ArmPlatformPkg/PrePi/PrePi.c

>> > @@ -183,8 +183,6 @@ CEntryPoint (

>> >  {

>> >    UINT64   StartTimeStamp;

>> >

>> > -  ASSERT(!ArmIsMpCore() || (PcdGet32 (PcdCoreCount) > 1));

>> > -

>> >    // Initialize the platform specific controllers

>> >    ArmPlatformInitialize (MpId);

>> >

>> > --

>> > 2.5.0

>> >

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel
diff mbox

Patch

diff --git a/ArmPlatformPkg/PrePi/MainUniCore.c b/ArmPlatformPkg/PrePi/MainUniCore.c
index 49b02338ebc2..11b9f462bb48 100644
--- a/ArmPlatformPkg/PrePi/MainUniCore.c
+++ b/ArmPlatformPkg/PrePi/MainUniCore.c
@@ -21,11 +21,6 @@  PrimaryMain (
   IN  UINT64                    StartTimeStamp
   )
 {
-  DEBUG_CODE_BEGIN();
-    // On MPCore system, PeiMpCore.inf should be used instead of PeiUniCore.inf
-    ASSERT(ArmIsMpCore() == 0);
-  DEBUG_CODE_END();
-
   PrePiMain (UefiMemoryBase, StacksBase, StartTimeStamp);
 
   // We must never return
diff --git a/ArmPlatformPkg/PrePi/PrePi.c b/ArmPlatformPkg/PrePi/PrePi.c
index 8740b2a9e84d..36928c65a73b 100644
--- a/ArmPlatformPkg/PrePi/PrePi.c
+++ b/ArmPlatformPkg/PrePi/PrePi.c
@@ -183,8 +183,6 @@  CEntryPoint (
 {
   UINT64   StartTimeStamp;
 
-  ASSERT(!ArmIsMpCore() || (PcdGet32 (PcdCoreCount) > 1));
-
   // Initialize the platform specific controllers
   ArmPlatformInitialize (MpId);