On Fri, Nov 06, 2015 at 04:21:47PM +0100, Ard Biesheuvel wrote:
> On 6 November 2015 at 16:11, Jeremy Linton <jeremy.lin...@arm.com> wrote:
> > On 11/06/2015 01:31 AM, Ard Biesheuvel wrote:
> >>
> >> On 5 November 2015 at 22:51, Jeremy Linton <jeremy.lin...@arm.com> wrote:
> >>>
> >>>
> >>>   [Guids.common]
> >>>     gArmJunoTokenSpaceGuid    =  { 0xa1147a20, 0x3144, 0x4f8d, { 0x82,
> >>> 0x95, 0xb4, 0x83, 0x11, 0xc8, 0xe4, 0xa4 } }
> >>> +  gArmJunoDxe               =  { 0x1484ebe8, 0x2681, 0x45f1, { 0xa2,
> >>> 0xe5, 0x12, 0xec, 0xad, 0x89, 0x3b, 0x62 } } # match the ArmJunoDxe FILE
> >>> GUID
> >>>
> >>
> >> I am not too crazy about using the BEFORE/AFTER depexes. Is this the
> >> only way to achieve the ordering?
> >>
> >
> > Ard,
> >
> > I'm sort of a EDK2 newbie, so there may be a lot of alternatives I didn't
> > consider.
> >
> > That said, that dependency is there to assure that the PcdJunoRevision is
> > set before the SMBIOS module loads. Initially I tried to make this module
> > sort of "generic" but as I progressed it became more Juno specific, so I
> > moved it into the Juno directory and set this dependency.
> >
> > I am keenly aware of the fact that there isn't a single BEFORE/AFTER
> > dependency in the whole project. Further I don't really like the fact that i
> > couldn't directly reference the FILE GUID (rather having to duplicate it). I
> > considered SOR (which results in a reverse  dependency if you will) and
> > adding a bogus protocol/etc, duplicating the juno revision detection logic,
> > none of which seemed like a particularly clean implementation.  To my
> > limited knowledge this seemed like the least evil solution. It also bothered
> > me that I couldn't set an AFTER with a protocol dependency....
> >
> > Suggestions welcome,
> >
> 
> AFAICT, this is all you need to do to get the revision, right?
> 
> ----------8<----------------
>   //
>   // We detect whether we are running on a Juno r0 or Juno r1 board at
>   // runtime by checking the value of the MIDR register.
>   //
> 
>   Midr     = ArmReadMidr ();
>   CpuType  = (Midr >> ARM_CPU_TYPE_SHIFT) & ARM_CPU_TYPE_MASK;
>   CpuRev   = Midr & ARM_CPU_REV_MASK;
> 
>   switch (CpuType) {
>   case ARM_CPU_TYPE_A53:
>     if (CpuRev == ARM_CPU_REV (0, 0)) {
>       JunoRevision = JUNO_R0;
>     } else if (CpuRev == ARM_CPU_REV (0, 3)) {
>       JunoRevision = JUNO_R1;
>     }
>     break;
> 
>   case ARM_CPU_TYPE_A57:
>     if (CpuRev == ARM_CPU_REV (0, 0)) {
>       JunoRevision = JUNO_R0;
>     } else if (CpuRev == ARM_CPU_REV (1, 1)) {
>       JunoRevision = JUNO_R1;
>     }
>   }
> ----------8<----------------
> 
> I would much prefer duplicating this over adding dynamic PCDs and
> BEFORE/AFTER depexes. If you really insist, you can break it out into
> a separate static library, but I wouldn't even bother tbh.

Static inline macro in ArmJunoPkg/Include/ArmPlatform.h?

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

Reply via email to