public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "gaoliming" <gaoliming@byosoft.com.cn>
To: <devel@edk2.groups.io>, <etienne.carriere@linaro.org>
Cc: "'Achin Gupta'" <achin.gupta@arm.com>,
	"'Ard Biesheuvel'" <ardb+tianocore@kernel.org>,
	"'Jiewen Yao'" <jiewen.yao@intel.com>,
	"'Leif Lindholm'" <leif@nuviainc.com>,
	"'Sami Mujawar'" <sami.mujawar@arm.com>,
	"'Sughosh Ganu'" <sughosh.ganu@linaro.org>,
	"'Bob Feng'" <bob.c.feng@intel.com>
Subject: 回复: [edk2-devel] [PATCH v2 3/5] GenFv: Arm: support images entered in Thumb mode
Date: Mon, 17 May 2021 15:47:55 +0800	[thread overview]
Message-ID: <006901d74af0$f2fa5ee0$d8ef1ca0$@byosoft.com.cn> (raw)
In-Reply-To: <CAN5uoS9J4iCQetoA5vjdbD8Kpceq8iJogCATXTLt9yiJnjXmZw@mail.gmail.com>

Etienne:
  Thanks for your reminder. I try VS compiler and meet with the compiler error on this line. 

  Here, does if ((SecCoreEntryAddress & 1) != 0) mean the lowest bit of this address is 1?

Thanks
Liming
> -----邮件原件-----
> 发件人: devel@edk2.groups.io <devel@edk2.groups.io> 代表 Etienne
> Carriere
> 发送时间: 2021年5月17日 15:35
> 收件人: gaoliming <gaoliming@byosoft.com.cn>
> 抄送: devel@edk2.groups.io; Achin Gupta <achin.gupta@arm.com>; Ard
> Biesheuvel <ardb+tianocore@kernel.org>; Jiewen Yao
> <jiewen.yao@intel.com>; Leif Lindholm <leif@nuviainc.com>; Sami Mujawar
> <sami.mujawar@arm.com>; Sughosh Ganu <sughosh.ganu@linaro.org>; Bob
> Feng <bob.c.feng@intel.com>
> 主题: Re: [edk2-devel] [PATCH v2 3/5] GenFv: Arm: support images entered in
> Thumb mode
> 
> On Mon, 17 May 2021 at 09:24, gaoliming <gaoliming@byosoft.com.cn>
> wrote:
> >
> > Acked-by: Liming Gao <gaoliming@byosoft.com.cn>
> >
> > > -----邮件原件-----
> > > 发件人: Etienne Carriere <etienne.carriere@linaro.org>
> > > 发送时间: 2021年5月17日 13:49
> > > 收件人: devel@edk2.groups.io
> > > 抄送: Achin Gupta <achin.gupta@arm.com>; Ard Biesheuvel
> > > <ardb+tianocore@kernel.org>; Jiewen Yao <jiewen.yao@intel.com>; Leif
> > > Lindholm <leif@nuviainc.com>; Sami Mujawar
> <sami.mujawar@arm.com>;
> > > Sughosh Ganu <sughosh.ganu@linaro.org>; Etienne Carriere
> > > <etienne.carriere@linaro.org>; Bob Feng <bob.c.feng@intel.com>; Liming
> > > Gao <gaoliming@byosoft.com.cn>
> > > 主题: [PATCH v2 3/5] GenFv: Arm: support images entered in Thumb
> mode
> > >
> > > Change GenFv for Arm architecture to generate a specific jump
> > > instruction as image entry instruction, when the target entry label
> > > is assembled with Thumb instruction set. This is possible since
> > > SecCoreEntryAddress value fetched from the PE32 has its LSBit set when
> > > the entry instruction executes in Thumb mode.
> > >
> > > Cc: Bob Feng <bob.c.feng@intel.com>
> > > Cc: Liming Gao <gaoliming@byosoft.com.cn>
> > > Cc: Achin Gupta <achin.gupta@arm.com>
> > > Cc: Ard Biesheuvel <ardb+tianocore@kernel.org>
> > > Cc: Leif Lindholm <leif@nuviainc.com>
> > > Cc: Sughosh Ganu <sughosh.ganu@linaro.org>
> > > Signed-off-by: Etienne Carriere <etienne.carriere@linaro.org>
> > > ---
> > > Changes since v1:
> > > - Fix typos in commit log and inline comments
> > > - Change if() test operand to be an explicit boolean
> > > ---
> > >  BaseTools/Source/C/GenFv/GenFvInternalLib.c | 38
> +++++++++++++++-----
> > >  1 file changed, 29 insertions(+), 9 deletions(-)
> > >
> > > diff --git a/BaseTools/Source/C/GenFv/GenFvInternalLib.c
> > > b/BaseTools/Source/C/GenFv/GenFvInternalLib.c
> > > index 6e296b8ad6..5f3fd4f808 100644
> > > --- a/BaseTools/Source/C/GenFv/GenFvInternalLib.c
> > > +++ b/BaseTools/Source/C/GenFv/GenFvInternalLib.c
> > > @@ -34,9 +34,27 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
> > >  #include "FvLib.h"
> > >  #include "PeCoffLib.h"
> > >
> > > -#define ARMT_UNCONDITIONAL_JUMP_INSTRUCTION
> > > 0xEB000000
> > >  #define ARM64_UNCONDITIONAL_JUMP_INSTRUCTION
> > > 0x14000000
> > >
> > > +/*
> > > + * Arm instruction to jump to Fv entry instruction in Arm or Thumb mode.
> > > + * From ARM Arch Ref Manual versions b/c/d, section A8.8.25 BL, BLX
> > > (immediate)
> > > + * BLX (encoding A2) branches to offset in Thumb instruction set mode.
> > > + * BL (encoding A1) branches to offset in Arm instruction set mode.
> > > + */
> > > +#define ARM_JUMP_OFFSET_MAX        0xffffff
> > > +#define ARM_JUMP_TO_ARM(Offset)    (0xeb000000 | ((Offset - 8) >>
> 2))
> > > +
> > > +#define _ARM_JUMP_TO_THUMB(Imm32)  (0xfa000000 | \
> > > +                                    (((Imm32) & (1 << 1)) << (24
> - 1))
> > > | \
> > > +                                    (((Imm32) >> 2) & 0x7fffff))
> > > +#define ARM_JUMP_TO_THUMB(Offset)
> > > _ARM_JUMP_TO_THUMB((Offset) - 8)
> > > +
> > > +/*
> > > + * Arm instruction to retrun from exception (MOVS PC, LR)
> > > + */
> > > +#define ARM_RETURN_FROM_EXCEPTION  0xE1B0F07E
> > > +
> > >  BOOLEAN mArm = FALSE;
> > >  BOOLEAN mRiscV = FALSE;
> > >  STATIC UINT32   MaxFfsAlignment = 0;
> > > @@ -2203,23 +2221,25 @@ Returns:
> > >      // if we found an SEC core entry point then generate a branch
> > > instruction
> > >      // to it and populate a debugger SWI entry as well
> > >      if (UpdateVectorSec) {
> > > +      UINT32                    EntryOffset;
> > >
> > >        VerboseMsg("UpdateArmResetVectorIfNeeded updating ARM
> SEC
> > > vector");
> > >
> > > -      // B SecEntryPoint - signed_immed_24 part +/-32MB offset
> > > -      // on ARM, the PC is always 8 ahead, so we're not really jumping
> > from
> > > the base address, but from base address + 8
> > > -      ResetVector[0] = (INT32)(SecCoreEntryAddress -
> > > FvInfo->BaseAddress - 8) >> 2;
> > > +      EntryOffset = (INT32)(SecCoreEntryAddress -
> FvInfo->BaseAddress);
> > >
> > > -      if (ResetVector[0] > 0x00FFFFFF) {
> > > -        Error(NULL, 0, 3000, "Invalid", "SEC Entry point must be within
> > > 32MB of the start of the FV");
> > > +      if (EntryOffset > ARM_JUMP_OFFSET_MAX) {
> > > +          Error(NULL, 0, 3000, "Invalid", "SEC Entry point offset above
> > > 1MB of the start of the FV");
> > >          return EFI_ABORTED;
> > >        }
> > >
> > > -      // Add opcode for an unconditional branch with no link. i.e.: " B
> > > SecEntryPoint"
> > > -      ResetVector[0] |=
> ARMT_UNCONDITIONAL_JUMP_INSTRUCTION;
> > > +      if (SecCoreEntryAddress & 1 != 0) {
> 
> Sorry, I missed this one.
> This needs extra parantheses.
> 
> I'll sent a v3. My apologies...
> 
> etienne
> 
> > > +        ResetVector[0] = ARM_JUMP_TO_THUMB(EntryOffset);
> > > +      } else {
> > > +        ResetVector[0] = ARM_JUMP_TO_ARM(EntryOffset);
> > > +      }
> > >
> > >        // SWI handler movs   pc,lr. Just in case a debugger uses SWI
> > > -      ResetVector[2] = 0xE1B0F07E;
> > > +      ResetVector[2] = ARM_RETURN_FROM_EXCEPTION;
> > >
> > >        // Place holder to support a common interrupt handler from
> ROM.
> > >        // Currently not supported. For this to be used the reset vector
> > would
> > > not be in this FV
> > > --
> > > 2.17.1
> >
> >
> >
> 
> 
> 
> 




  reply	other threads:[~2021-05-17  7:48 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-05-17  5:49 [PATCH v2 1/5] ArmPkg/IndustryStandard: 32b/64b agnostic FF-A, Mm SVC and Std SMC IDs Etienne Carriere
2021-05-17  5:49 ` [PATCH v2 2/5] ArmPkg: prepare 32bit ARM build of StandaloneMmPkg Etienne Carriere
2021-05-17  5:49 ` [PATCH v2 3/5] GenFv: Arm: support images entered in Thumb mode Etienne Carriere
2021-05-17  7:24   ` 回复: " gaoliming
2021-05-17  7:35     ` Etienne Carriere
2021-05-17  7:47       ` gaoliming [this message]
2021-05-17  8:00         ` [edk2-devel] " Etienne Carriere
2021-05-17  5:49 ` [PATCH v2 4/5] StandaloneMmPkg: fix pointer/int casts against 32bit architectures Etienne Carriere
2021-05-17  5:49 ` [PATCH v2 5/5] StandaloneMmPkg: build for 32bit arm machines Etienne Carriere
2021-05-17  6:23   ` Etienne Carriere

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-list 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='006901d74af0$f2fa5ee0$d8ef1ca0$@byosoft.com.cn' \
    --to=devel@edk2.groups.io \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox