> -----Original Message-----
> From: Heinrich Schuchardt [mailto:xypron.g...@gmx.de]
> Sent: Friday, September 25, 2020 10:49 PM
> To: Chang, Abner (HPS SW/FW Technologist) <abner.ch...@hpe.com>; Ard
> Biesheuvel <a...@kernel.org>
> Cc: Atish Patra <atish.pa...@wdc.com>; boot-architecture@lists.linaro.org;
> Grant Likely <grant.lik...@arm.com>; Rick Chen <r...@andestech.com>;
> Atish Patra <ati...@atishpatra.org>
> Subject: Re: EBBR: RISC-V handoff to OS
> 
> On 25.09.20 16:42, Chang, Abner (HPS SW/FW Technologist) wrote:
> >
> >
> >> -----Original Message-----
> >> From: Heinrich Schuchardt [mailto:xypron.g...@gmx.de]
> >> Sent: Friday, September 25, 2020 6:26 PM
> >> To: Chang, Abner (HPS SW/FW Technologist) <abner.ch...@hpe.com>;
> Ard
> >> Biesheuvel <a...@kernel.org>
> >> Cc: Atish Patra <atish.pa...@wdc.com>;
> >> boot-architecture@lists.linaro.org;
> >> Grant Likely <grant.lik...@arm.com>; Rick Chen <r...@andestech.com>;
> >> Atish Patra <ati...@atishpatra.org>
> >> Subject: Re: EBBR: RISC-V handoff to OS
> >>
> >> On 9/25/20 8:06 AM, Chang, Abner (HPS SW/FW Technologist) wrote:
> >>>
> >>>
> >>>> -----Original Message-----
> >>>> From: Heinrich Schuchardt [mailto:xypron.g...@gmx.de]
> >>>> Sent: Thursday, September 24, 2020 8:43 PM
> >>>> To: Ard Biesheuvel <a...@kernel.org>
> >>>> Cc: Chang, Abner (HPS SW/FW Technologist) <abner.ch...@hpe.com>;
> >>>> boot-architecture@lists.linaro.org; Atish Patra
> >>>> <ati...@atishpatra.org>; Rick Chen <r...@andestech.com>; Atish
> >>>> Patra <atish.pa...@wdc.com>; Grant Likely <grant.lik...@arm.com>
> >>>> Subject: Re: EBBR: RISC-V handoff to OS
> >>>>
> >>>> On 24.09.20 14:05, Ard Biesheuvel wrote:
> >>>>> On Thu, 24 Sep 2020 at 08:07, Heinrich Schuchardt
> >>>>> <xypron.g...@gmx.de>
> >>>> wrote:
> >>>>>>
> >>>>>> On 9/24/20 5:35 AM, Chang, Abner (HPS SW/FW Technologist) wrote:
> >>>>>>> Ok Heinrich, thanks for the clarification. I also read through
> >>>>>>> this thread
> >>>> again and understand the intention you would like to have some
> >>>> sentences in the UEFI spec.
> >>>>>>>
> >>>>>>> I realize that we are trying to put sentences in the RISC-V
> >>>>>>> calling
> >>>> convention in UEFI spec to support the specific UEFI firmware
> >>>> implementation of using gp/tp.
> >>>>>>> Uboot UEFI firmware uses tp in HART to record the HART ID and
> >>>>>>> uses gp
> >>>> in the boot-HART to maintain the global data structure of uboot.
> >>>>>>
> >>>>>> tp is only used to store information on the secondary harts which
> >>>>>> does not enter the UEFI payload. So for U-Boot the only
> >>>>>> problematic register is gp.
> >>> If you are using opensbi solution,  you should consider to use
> >>> firmware
> >> context mechanism because that is designed for any firmware solutions
> >> to maintain its own data structure for any purposes.
> >>
> >> I will have a look at it.
> > If you would like to know how do we define and initial the firmware
> context, then you can check https://github.com/tianocore/edk2-
> platforms/blob/master/Platform/RISC-
> V/PlatformPkg/Universal/Sec/SecMain.c and
> https://github.com/tianocore/edk2-platforms/blob/master/Silicon/RISC-
> V/ProcessorPkg/Include/IndustryStandard/RiscVOpensbi.h.
> > Thus the data structure you put in gp could be in firmware context, also
> means that we don’t need that much constraints mentioned in UEFI spec.
> > We can still submit that paragraph to USWG, but it would be hard to
> remove it from UEFI spec if once day we don’t need it for the backward
> compatibility.
> >
> >> Thanks for the link below.
> > Below link is for the edk2 opensbi firmware extensions.
> >
> >>
> >>>
> >>>>>>
> >>>>>
> >>>>> Secondary CPUs could be used to invoke runtime services, though.
> >>>>>
> >>>>>>> The reason I can think of the reason to use tp/gp is because
> >>>>>>> S-Mode
> >>>> UEFI firmware (or S-mode payload?) is not able to get mhartid, so
> >>>> uboot stores HART ID in tp. Because there is nowhere to maintain
> >>>> the global data structure for uboot and the mscratch is occupied by
> >>>> opensbi, thus uboot uses gp to maintain the pointer to global context.
> >>>>>>> Because both tp and gp are non-privileged registers so uboot (or
> >>>>>>> payload?) can get the information from those registers easily,
> >>>>>>> right? (But is this a security hole that any software can hack
> >>>>>>> tp/gp? However, this is the different topic, just ignore this)
> >>>>>>
> >>>>>> As said U-Boot restores value of gp when entered from UEFI via
> >>>>>> the
> >> API.
> >>>>>>
> >>>>>> We should do the same when serving interrupts and exceptions.
> >>>>>>
> >>>>>
> >>>>> When?
> >>>>>
> >>>>> We should carefully consider the difference between before-EBS and
> >>>>> after-EBS here:
> >>>>>
> >>>>> Before EBS:
> >>>>> Interrupt/exception handlers are owned by the UEFI firmware (Uboot
> >>>>> or EDK2). The OS or any other EFI payload must not interfere with
> >>>>> this, and only use function call interfaces to interact with the system.
> >>>>
> >>>> There is a gap in U-Boot for interrupts/exceptions before
> >>>> ExitBootServices() that I will have to close.
> >>>>
> >>>> Best regards
> >>>>
> >>>> Heinrich
> >>>>
> >>>>>
> >>>>> After EBS:
> >>>>> Interrupt/exception handlers are owned by the OS. The UEFI
> >>>>> firmware can be entered on any CPU with interrupts enabled or
> >>>>> disabled, and the UEFI firmware should not interfere with
> >>>>> interrupt handling or exception vectors etc.
> >>>>>
> >>>>>
> >>>>>
> >>>>>> Concerning security we have to remember that an UEFI payload has
> >>>>>> the same powers as the firmware itself. When it comes to hacking
> >>>>>> you have lost once you execute a hostile payload. What we can try
> >>>>>> to guard against to some degree are non-compliant payloads.
> >>>>>>
> >>>>>
> >>>>> Agreed. Everything runs at the same permission level, so any
> >>>>> software running under UEFI has the same powers as the UEFI
> >>>>> firmware
> >> itself.
> >>>>>
> >>>>>>> Did we spec out above behavior in uboot RISC-V spec or the
> >>>> implementation design guide at somewhere? I am not quite familiar
> >>>> with uboot area though.
> >>>>>>
> >>>>>> The patch series
> >>>>>>
> >>>>>> doc: global data pointer
> >>>>>> INVALID URI REMOVED
> >>>> 3A__patchwork.ozlabs
> >>>>>> .org_project_uboot_list_-3Fseries-
> >>>> 3D202971&d=DwIFaQ&c=C5b8zRQO1miGmBe
> >>>>>>
> >>>>
> >>
> VZ2LFWg&r=_SN6FZBN4Vgi4Ulkskz6qU3NYRO03nHp9P7Z5q59A3E&m=QMu
> >>>> q0JhboDWbE
> >>>>>> qbx6d4dZeXY2Pk0-PICJzRJKNT4wRY&s=UjTczoF1vjt5-
> >>>> uUzkvB6QFgGIsCUpuTMrSjX
> >>>>>> Zh8LbGA&e=
> >>>>>>
> >>>>>> starts closing the documentation gap in U-Boot.
> >>>>>>
> >>>>>>>
> >>>>>>> Another problem comes to my mind is even though we save gp/tp
> >> upon
> >>>> the entry of ExitBootService (or other UEFI APIs) and replaced with
> >>>> the uboot ones, what if the interrupt/exception happens and
> >>>> delegated to the payload event handler during ExitBootService (or
> >>>> other UEFI APIs)? The ownership is messed up at this point, right?
> >>>>>>
> >>>>>> UEFI spec 2.8B chapter 2.3.7 "RISC-V Platforms" has:
> >>>>>>
> >>>>>> The processor is in the following execution mode during boot service:
> >>>>>> The machine mode interrupt is enabled during boot service in UEFI.
> >>>>>> Two kinds of interrupts are enabled, one is for timer interrupt
> >>>>>> and another is software interrupt
> >>>>>>
> >>>>>> All other architectures except RISC-V describe the usage of
> >>>>>> runtime services by the OS with the following sentences:
> >>>>>>
> >>>>>> For an operating system to use any runtime services, it must:
> >>>>>> Call the runtime service functions, with the following conditions:
> >>>>>> Interrupts may be disabled or enabled at the discretion of the caller.
> >>>>>>
> >>>>>> So the rule of thumb is: Until ExitBootServices() returns the
> >>>>>> firmware serves interrupts and exceptions. After
> >>>>>> ExitBootServices() returns it is the operating system.
> >>>>>>
> >>>>>> In the AAarch64 chapter I found:
> >>>>>>
> >>>>>> "An alternate execution environment can restore the firmware
> >>>>>> environment before each UEFI call. However the possibility of
> >>>>>> preemption may require the alternate execution-enabled
> >>>>>> application to disable interrupts while the alternate execution
> >>>>>> environment is active. It's legal for the alternate execution
> >>>>>> environment enabled application to enable interrupts if the
> >>>>>> application catches the interrupt and restores the EFI firmware
> >>>>>> environment prior to calling the
> >>>> UEFI interrupt ISR."
> >>>>>>
> >>>>>> I am not aware of an implementation of such an "alternate
> >>>>>> execution environment". But an alternative execution environment
> >>>>>> serving interrupts while calling the UEFI API and relying on
> >>>>>> values that it has put into gp would not work on current U-Boot.
> >>>>>>
> >>>>>>>
> >>>>>>> In edk2 RISC-V port, we use "firmware_context" in sbi_platforms
> >>>>>>> which
> >>>> provided opensbi through mscratch to maintain the firmware specific
> >> context.
> >>>> With this, firmware can maintain its own data structure without
> >>>> bothering any other industrial specs. Because S-Mode firmware can't
> >>>> access to mhartid and  the sbi-scratch which is stored in mscratch,
> >>>> so we have Edk2OpensbiLib that registers the firmware specific sbi
> >>>> extension functions using "Firmware Code Base Specific SBI
> >>>> Extension Space, Extension Ids 0x0A000000 through 0x0AFFFFFF"
> >>>> defined in sbi spec. That is a separate spec for RISC-V edk2
> >>>> firmware sbi extension
> >> function (This reminds me I forget to document it).
> >>>> Then edk2 can get the necessary information using edk2 extension sbi
> call.
> >>>>>>>
> >>>>>>
> >>>>>> Thank you for pointing me at Edk2OpensbiLib. Where can I find the
> >> code?
> >>> Here it is,
> >>> https://github.com/tianocore/edk2-platforms/tree/master/Silicon/RISC
> >>> -V /ProcessorPkg/Library/RiscVEdk2SbiLib
> >>>
> >>>>>>
> >>>>>> I will have to keep in mind that U-Boot can be used both with and
> >>>>>> without an SEE.
> >>>>>>
> >>>>>>> You would agree with that we don’t have to mention the gp/tp
> >>>>>>> usage in
> >>>> the calling convention just because of the uboot implementation.
> >>>> And we don’t have  mention any connection/relationship between
> >>>> gp/tp usage and the specific UEFI firmware implementation. The
> >>>> sentence must be also generic to other UEFI firmware solutions such
> >>>> as edk2 which doesn't care about destroying gp/tp (so far).
> >>>>>>
> >>>>>> I fully agree that specifications precede implementations.
> >>>>>>
> >>>>>>>
> >>>>>>> In the RISC-V assembly programmer's handbook in RISC-V spec,
> >>>>>>> gp/tp
> >>>> are not given either the caller or callee to save the value, so we
> >>>> can spec out something in UEFI spec based on this calling convention.
> >>>>>>
> >>>>>> Jessica Clarke pointed me to the "RISC-V ELF psABI specification"
> >>>>>> (https://github.com/riscv/riscv-elf-psabi-doc/blob/master/riscv-e
> >>>>>> lf
> >>>>>> .m
> >>>>>> d) which defines the usage of tp and gp in the RISC-V world:
> >>>>>>
> >>>>>> "In the standard ABI, procedures should not modify the integer
> >>>>>> registers tp and gp, because signal handlers may rely upon their
> >> values."
> >>>>>>
> >>>>>> So here the idea is that whoever serves interrupts and exceptions
> >>>>>> is the owner of gp and tp.
> >>>>>>
> >>>>>> After ExitBootServices() signals are served by the operating system.
> >>>>>> It takes hold of the values of tp and gp. See these lines of the
> >>>>>> Linux
> >> kernel:
> >>>>>>
> >>>>>> arch/riscv/kernel/entry.S:97:
> >>>>>> la gp, __global_pointer$
> >>>>>>
> >>>>>> arch/riscv/kernel/head.S:253:
> >>>>>> la tp, init_task
> >>>>>>
> >>>>>> Every time Linux enters kernel mode it again sets its own values
> >>>>>> of gp and tp. This addresses the security problem that you
> >>>>>> mentioned
> >> above.
> >>>>>>
> >>>>>>>
> >>>>>>> The sentence which I consider reasonable is , "In view of gp and
> >>>>>>> tp registers are not assigned the specific owner to save and
> >>>>>>> restore their
> >>>> values in the calling convention (refer to "RISC-V assembly
> >>>> programmer's handbook" section in RISC-V Unprivileged ISA
> >>>> specification), UEFI firmware must not having assumption of owning
> >>>> the write access to these register at any circumstances such as in
> >>>> EFI Boot service, EFI Runtime service, EFI Management Mode service
> >>>> and in any UEFI firmware interfaces which may invoked by the
> >>>> external firmware payload,  or altering the values of gp/tp
> >>>> registers results in the interference in the asynchronous callback
> >>>> to the external firmware payload . Whether and how to preserve gp
> >>>> and tp during UEFI firmware environment is UEFI firmware
> >>>> implementation-specific. RISC- V platform firmware integrator
> >>>> should refer to the corresponding design
> >> specification of the particular UEFI firmware solution."
> >>
> >> Thanks for this description which looks fine to me.
> > I think you are fine with the below description but not the above one, 
> > right?
> >> Maybe a native English speaker can clean it up a bit.
> >
> >>
> >> Best regards
> >>
> >> Heinrich
> >>
> >>>>>>>
> >>>>>>
> >>>>>> We should start with a reference of the "RISC-V ELF psABI
> >> specification"
> >>>>>> to explain the usage of gp and tp.
> >>>>>>
> >>>>>> It seems to be necessary and sufficient for the firmware to follow:
> >>>>>>
> >>>>>> * Don't trust the values of tp and gp when entered
> >>>>>>   from the payloads world.
> >>>>>> * If you need to change them, restore the values before returning.
> >>>>>> * Never touch tp and gp after ExitBootServices().
> >>>>>>
> >>>>>> The same should be observed by an interrupt or exception handler
> >>>>>> provided by an "alternative execution environment".
> >>>>>>
> >>>>>> Best regards
> >>> How about this,
> >>>
> >>> In view of the statement "In the standard ABI, procedures should not
> >> modify the integer registers tp and gp, because signal handlers may
> >> rely upon their values." mentioned in RISC-V EFL psABI Specification
> >> (See “Link to UEFI Specification-Related Document” on
> >> https://uefi.org/uefi under the heading “RISC-V EFL psABI
> >> Specification”) and the RISC-V calling convention that gp and tp
> >> registers are not assigned the specific owner to save and restore their
> values (refer to "RISC-V assembly programmer's handbook"
> >> section in  RISC-V Unprivileged ISA specification).  UEFI firmware
> >> must neither trusting the values of tp and gp nor having assumption
> >> of owning the write access to these register at any circumstances
> >> (Such as in EFI Boot service, EFI Runtime service, EFI Management
> >> Mode service and any UEFI firmware interfaces which may invoked by
> >> the EFI drivers, OS or external firmware payload). Preserve the
> >> values in gp or tp register if UEFI firmware needs to change them and
> never touches them after ExitBootServices().
> >> Whether and how to preserve gp and tp during UEFI firmware
> >> environment is UEFI firmware implementation-specific.
> 
> 
> Sorry my review commet got misplaced. Yes the text above this line is fine.
> 
> Best regards
> 
> Heinrich
The revised ECR was uploaded to USWG last week, however the meeting was 
canceled. I will update the status to this loop if we have progresses on this.
Thanks
> 
> 
> >>>
> >>>
> >>>>>>
> >>>>>> Heinrich
> >>>>>>
> >>>>>>> I believe this initial sentence still needs some revises, please
> >>>>>>> just modify
> >>>> above paragraph if you don't like it. We can keep discussing this
> >>>> based on above paragraph.
> >>>>>>>
> >>>>>>> Thanks
> >>>>>>>
> >>>>>>>> -----Original Message-----
> >>>>>>>> From: Heinrich Schuchardt [mailto:xypron.g...@gmx.de]
> >>>>>>>> Sent: Thursday, September 24, 2020 2:20 AM
> >>>>>>>> To: Chang, Abner (HPS SW/FW Technologist)
> >> <abner.ch...@hpe.com>;
> >>>>>>>> boot-architecture@lists.linaro.org; Atish Patra
> >>>>>>>> <ati...@atishpatra.org>
> >>>>>>>> Cc: Rick Chen <r...@andestech.com>; Atish Patra
> >>>>>>>> <atish.pa...@wdc.com>; Grant Likely <grant.lik...@arm.com>;
> Ard
> >>>>>>>> Biesheuvel <a...@kernel.org>
> >>>>>>>> Subject: Re: EBBR: RISC-V handoff to OS
> >>>>>>>>
> >>>>>>>> On 9/23/20 5:01 PM, Chang, Abner (HPS SW/FW Technologist)
> wrote:
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>> -----Original Message-----
> >>>>>>>>>> From: Chang, Abner (HPS SW/FW Technologist)
> >>>>>>>>>> Sent: Wednesday, September 23, 2020 10:55 PM
> >>>>>>>>>> To: 'Heinrich Schuchardt' <xypron.g...@gmx.de>; boot-
> >>>>>>>>>> architect...@lists.linaro.org; Atish Patra
> >>>>>>>>>> <ati...@atishpatra.org>
> >>>>>>>>>> Cc: Rick Chen <r...@andestech.com>; Atish Patra
> >>>>>>>>>> <atish.pa...@wdc.com>; Grant Likely <grant.lik...@arm.com>;
> >> Ard
> >>>>>>>>>> Biesheuvel <a...@kernel.org>
> >>>>>>>>>> Subject: RE: EBBR: RISC-V handoff to OS
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>>> -----Original Message-----
> >>>>>>>>>>> From: Heinrich Schuchardt [mailto:xypron.g...@gmx.de]
> >>>>>>>>>>> Sent: Wednesday, September 23, 2020 3:42 PM
> >>>>>>>>>>> To: Chang, Abner (HPS SW/FW Technologist)
> >>>> <abner.ch...@hpe.com>;
> >>>>>>>>>>> boot-architecture@lists.linaro.org; Atish Patra
> >>>>>>>>>>> <ati...@atishpatra.org>
> >>>>>>>>>>> Cc: Rick Chen <r...@andestech.com>; Atish Patra
> >>>>>>>>>>> <atish.pa...@wdc.com>; Grant Likely
> <grant.lik...@arm.com>;
> >>>>>>>>>>> Ard Biesheuvel <a...@kernel.org>
> >>>>>>>>>>> Subject: Re: EBBR: RISC-V handoff to OS
> >>>>>>>>>>>
> >>>>>>>>>>> On 23.09.20 08:51, Chang, Abner (HPS SW/FW Technologist)
> >> wrote:
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>>> -----Original Message-----
> >>>>>>>>>>>>> From: Heinrich Schuchardt [mailto:xypron.g...@gmx.de]
> >>>>>>>>>>>>> Sent: Wednesday, September 23, 2020 2:18 PM
> >>>>>>>>>>>>> To: Chang, Abner (HPS SW/FW Technologist)
> >>>>>>>> <abner.ch...@hpe.com>;
> >>>>>>>>>>>>> boot-architecture@lists.linaro.org; Atish Patra
> >>>>>>>>>>>>> <ati...@atishpatra.org>
> >>>>>>>>>>>>> Cc: Rick Chen <r...@andestech.com>; Atish Patra
> >>>>>>>>>>>>> <atish.pa...@wdc.com>; Grant Likely
> >> <grant.lik...@arm.com>;
> >>>>>>>>>>>>> Ard Biesheuvel <a...@kernel.org>
> >>>>>>>>>>>>> Subject: Re: EBBR: RISC-V handoff to OS
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> On 9/23/20 7:24 AM, Chang, Abner (HPS SW/FW
> Technologist)
> >>>> wrote:
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> -----Original Message-----
> >>>>>>>>>>>>>>> From: Heinrich Schuchardt [mailto:xypron.g...@gmx.de]
> >>>>>>>>>>>>>>> Sent: Tuesday, September 22, 2020 5:30 PM
> >>>>>>>>>>>>>>> To: boot-architecture@lists.linaro.org; Chang, Abner
> >>>>>>>>>>>>>>> (HPS SW/FW
> >>>>>>>>>>>>>>> Technologist) <abner.ch...@hpe.com>; Atish Patra
> >>>>>>>>>>>>>>> <ati...@atishpatra.org>
> >>>>>>>>>>>>>>> Cc: boot-architecture@lists.linaro.org; Rick Chen
> >>>>>>>>>>>>>>> <r...@andestech.com>; Atish Patra
> >> <atish.pa...@wdc.com>;
> >>>>>>>>>>>>>>> Grant Likely <grant.lik...@arm.com>; Ard Biesheuvel
> >>>>>>>>>>>>>>> <a...@kernel.org>
> >>>>>>>>>>>>>>> Subject: RE: EBBR: RISC-V handoff to OS
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> Am 22. September 2020 08:30:57 MESZ schrieb "Chang,
> >> Abner
> >>>>>>>>>>>>>>> (HPS
> >>>>>>>>>>>>> SW/FW
> >>>>>>>>>>>>>>> Technologist)" <abner.ch...@hpe.com>:
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> -----Original Message-----
> >>>>>>>>>>>>>>>>> From: Atish Patra [mailto:ati...@atishpatra.org]
> >>>>>>>>>>>>>>>>> Sent: Tuesday, September 22, 2020 2:08 PM
> >>>>>>>>>>>>>>>>> To: Chang, Abner (HPS SW/FW Technologist)
> >>>>>>>>>>> <abner.ch...@hpe.com>
> >>>>>>>>>>>>>>>>> Cc: Heinrich Schuchardt <xypron.g...@gmx.de>; Atish
> >>>> Patra
> >>>>>>>>>>>>>>>>> <atish.pa...@wdc.com>;
> >>>>>>>>>>>>>>>>> boot-architecture@lists.linaro.org;
> >>>>>>>>>>>>>>>>> Grant
> >>>>>>>>>>>>>>>> Likely
> >>>>>>>>>>>>>>>>> <grant.lik...@arm.com>; Ard Biesheuvel
> >>>> <a...@kernel.org>;
> >>>>>>>> Rick
> >>>>>>>>>>>>> Chen
> >>>>>>>>>>>>>>>>> <r...@andestech.com>
> >>>>>>>>>>>>>>>>> Subject: Re: EBBR: RISC-V handoff to OS
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> On Mon, Sep 21, 2020 at 6:11 PM Chang, Abner (HPS
> >>>> SW/FW
> >>>>>>>>>>>>>>>>> Technologist) <abner.ch...@hpe.com> wrote:
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> -----Original Message-----
> >>>>>>>>>>>>>>>>>>> From: Atish Patra [mailto:ati...@atishpatra.org]
> >>>>>>>>>>>>>>>>>>> Sent: Tuesday, September 22, 2020 2:28 AM
> >>>>>>>>>>>>>>>>>>> To: Heinrich Schuchardt <xypron.g...@gmx.de>
> >>>>>>>>>>>>>>>>>>> Cc: Atish Patra <atish.pa...@wdc.com>;
> >>>>>>>>>>>>>>>>>>> boot-architecture@lists.linaro.org;
> >>>>>>>>>>>>>>>>>>> Grant Likely <grant.lik...@arm.com>; Ard
> Biesheuvel
> >>>>>>>>>>>>>>>>>>> <a...@kernel.org>; Rick Chen
> >> <r...@andestech.com>;
> >>>>>>>>>>>>>>>>>>> Chang,
> >>>>>>>>>>>>> Abner
> >>>>>>>>>>>>>>>>> (HPS
> >>>>>>>>>>>>>>>>>>> SW/FW Technologist) <abner.ch...@hpe.com>
> >>>>>>>>>>>>>>>>>>> Subject: Re: EBBR: RISC-V handoff to OS
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> On Mon, Sep 21, 2020 at 9:23 AM Heinrich
> Schuchardt
> >>>>>>>>>>>>>>>>>>> <xypron.g...@gmx.de> wrote:
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> Hello Atish,
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> the UEFI spec has this sentence:
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> "When UEFI firmware handoff control to OS, the
> >> RISC-V
> >>>>>>>>>>>>>>>>>>>> is
> >>>>>>>>>>>>>>>> operated
> >>>>>>>>>>>>>>>>>>>> in machine-mode privilege." (M-mode is the
> >> equivalent
> >>>>>>>>>>>>>>>>>>>> to
> >>>>>>>>>>>>>>>>>>>> EL3 in
> >>>>>>>>>>>>>>>> ARM).
> >>>>>>>>>>>>>>>>>> Yes, this is a pretty old section in UEFI spec even
> >>>>>>>>>>>>>>>>>> before OpenSBI
> >>>>>>>>>>>>>>>> as I can
> >>>>>>>>>>>>>>>>> remember and haven't been updated to sync with
> latest
> >>>>>>>>>>>>>>>>> status RISC-V
> >>>>>>>>>>>>>>>> works.
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> This does not make any sense to me when using a
> >>>> secure
> >>>>>>>>>>>>>>>> execution
> >>>>>>>>>>>>>>>>>>>> environement (SEE) like OpenSBI.
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> The hand-off should occur in S-Mode if the CPU
> >>>> supports
> >>>>>>>>>>>>>>>>>>>> it and only in M-Mode when the CPU only
> supports
> >> M-
> >>>> mode.
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> +Abner
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> Yes. Abner has already submitted an ECR for this &
> >> few
> >>>>>>>>>>>>>>>>>>> other
> >>>>>>>>>>>>>>>> RISC-V
> >>>>>>>>>>>>>>>>>>> related changes to UEFI spec. I am not sure about
> >>>>>>>>>>>>>>>>>>> the current
> >>>>>>>>>>>>>>>> status
> >>>>>>>>>>>>>>>>> though.
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> @Abner: Do you know the latest status ?
> >>>>>>>>>>>>>>>>>> Yes, the ECR was submitted to USWG for review,
> >> however
> >>>>>>>>>>>>>>>>>> the
> >>>>>>>>>>>>> meeting
> >>>>>>>>>>>>>>>>>> canceled often recently and the process goes slow. I
> >>>>>>>>>>>>>>>>>> will keep following up
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> Maybe you also attach the latest ECR here for a
> >>>>>>>>>>>>>>>>>>> broader
> >>>>>>>> review.
> >>>>>>>>>>>>>>>>>> I may not allowed to public ECR here unless all
> >>>>>>>>>>>>>>>>>> people in the
> >>>>>>>>>>>>>>>> mailing
> >>>>>>>>>>>>>>>>>> list are the members of UEFI org… but the sentence
> we
> >>>>>>>>>>>>>>>>>> revised in
> >>>>>>>>>>>>>>>> ECR
> >>>>>>>>>>>>>>>>>> is as below,
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> "When UEFI firmware handoff control to Supervisor
> >> mode
> >>>>>>>>>>>>>>>>>> OS, RISC-V
> >>>>>>>>>>>>>>>> boot
> >>>>>>>>>>>>>>>>> hart must be operated in Supervisor mode, and the
> >>>> memory
> >>>>>>>>>>>>> addressing
> >>>>>>>>>>>>>>>>> must be operated in Bare mode which is no memory
> >>>> address
> >>>>>>>>>>>>>>>>> translation
> >>>>>>>>>>>>>>>> or
> >>>>>>>>>>>>>>>>> protection through the virtual page table entry."
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> Thanks.
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> We didn’t mention hand-off to M-Mode if CPU only
> >>>> support
> >>>>>>>>>>>>>>>>>> M-
> >>>>>>>>>>> Mode
> >>>>>>>>>>>>>>>>> because we only verified edk2 RISC-V port in S-Mode
> >> with
> >>>>>>>>>>>>>>>>> OpenSBI, but didn’t try it on M-Mode even though
> the
> >>>> code
> >>>>>>>>>>>>>>>>> is
> >>>>>>>>>> ready there.
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> That's correct. We can't run UEFI applications run
> >>>>>>>>>>>>>>>>> time services in
> >>>>>>>>>>>>>>>> M-mode as
> >>>>>>>>>>>>>>>>> it requires virtual memory in current setup.
> >>>>>>>>>>>>>>>>> I think it is better to keep that way there is a
> >>>>>>>>>>>>>>>>> specific demand and
> >>>>>>>>>>>>>>>> value in
> >>>>>>>>>>>>>>>>> running UEFI applications in M-mode.
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> We should prescribe this in the EBBR and
> somehow
> >> get
> >>>>>>>>>>>>>>>>>>>> the UEFI
> >>>>>>>>>>>>>>>> spec
> >>>>>>>>>>>>>>>>>>>> fixed afterwards.
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> I will add it to the RISC-V EBBR PR (haven't sent it
> yet).
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> An other issue is the calling convention. Chapter
> >>>>>>>>>>>>>>>>>>>> "2.3.7.3 Detailed Calling Convention" does not
> >>>>>>>>>>>>>>>>>>>> describe which registers
> >>>>>>>>>>>>>>>> are
> >>>>>>>>>>>>>>>>>>>> saved by the UEFI payload's entry point and
> >>>>>>>>>>>>>>>>>>>> restored
> >>>> by
> >>>>>>>>>>>>>>>>>>>> the payload before calling the UEFI API or
> >>>>>>>>>>>>>>>>>>>> returning to the UEFI payload. This concerns
> >>>>>>>>>>>>>>>>>>>> especially registers gp
> >>>>>>>>>>>>>>>>>>>> (x3) and tp
> >>>>>>>>>>>>>>>> (x4).
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> Into the EBBR or UEFI spec we should put a link to
> >>>>>>>>>>>>>>>>>>>> the "RISC-V
> >>>>>>>>>>>>>>>> ELF
> >>>>>>>>>>>>>>>>>>>> psABI specification"
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> https://github.com/riscv/riscv-elf-psabi-
> >> doc/blob/master/
> >>>>>>>>>>>>>>>> ri
> >>>>>>>>>>>>>>>> scv-
> >>>>>>>>>>>>>>>> e
> >>>>>>>>>>>>>>>> lf
> >>>>>>>>>>>>>>>>>>>> .md which is referenced by "The RISC-V
> Instruction
> >>>>>>>>>>>>>>>>>>>> Set
> >>>>>>>>>> Manual".
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> From the "RISC-V ELF psABI specification" one
> might
> >>>>>>>>>>>>>>>>>>>> conclude
> >>>>>>>>>>>>>>>> that
> >>>>>>>>>>>>>>>>>>>> the UEFI payload should not be allowed to change
> gp
> >>>> and
> >>>>>>>>>>>>>>>>>>>> tp
> >>>>>>>>>>>>>>>> before
> >>>>>>>>>>>>>>>>>>>> calling
> >>>>>>>>>>>>>>>>>>>> ExitBootServices() or SetVirtualAddressMap()
> >>>> whichever
> >>>>>>>>>>>>>>>>>>>> occurs
> >>>>>>>>>>>>>>>> last.
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> Agreed. Thanks for pointing this out. I think this
> >>>>>>>>>>>>>>>>>>> should go into the UEFI spec instead of EBBR spec.
> >> Any
> >>>> suggestions ?
> >>>>>>>>>>>>>>>>>> To have this external link is good, I will add this
> >>>>>>>>>>>>>>>>>> link in
> >> ECR.
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> Thanks again :). As per Heinrich's suggestion, it
> >>>>>>>>>>>>>>>>> would also be good
> >>>>>>>>>>>>>>>> to add
> >>>>>>>>>>>>>>>>> some text about the state of gp & tp.
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> Ok. I add some text, copied from psABI spec. :)
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> "........ Registers tp and gp should not be modified in
> >>>>>>>>>>>>>>>> the function,
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> I would not know what "in the function" refers to here.
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> We have a value of tp and gp passed from the firmware
> to
> >>>>>>>>>>>>>>> the entry-point of the firmware. We need a definition
> >>>>>>>>>>>>>>> describing what assumptions the firmware may or may
> not
> >>>>>>>>>>>>>>> make about
> >>>> the
> >>>>>>>>>>>>>>> value of tp and gp up to ExitBootServices and in
> >>>>>>>>>>>>>>> SetVirtualAddressMap. I would not assume gp and tp to
> >> have
> >>>>>>>>>>>>>>> any firmware related value
> >>>>>>>>>> afterwards.
> >>>>>>>>>>>>>> Ok, I got your point. But do we mention  "value of tp and
> >>>>>>>>>>>>>> gp passed from
> >>>>>>>>>>>>> the firmware to the entry-point of the firmware"
> somewhere
> >>>>>>>>>>>>> in the particular spec? What is the spec of values you
> >>>>>>>>>>>>> pass in tp/gp to the entry point of firmware?
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> It would be perfectly ok if the spec said that the
> >>>>>>>>>>>>>>> firmware should make no assumptions about the value
> of
> >>>>>>>>>>>>>>> these registers
> >>>>>>>>>>>>>> I don’t think firmware has assumption of value in these
> >>>>>>>>>>>>>> registers because the calling convention doesn't use
> >>>>>>>>>>>>>> these two regs. Maybe the assembly code use these two
> >>>>>>>>>>>>>> regs for
> >>>> some
> >>>>>>>>>>>>>> purpose but firmware has to preserve it. The revised
> >>>>>>>>>>>>>> version in below,
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> but has to keep the values intact during an API call.
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> The important thing is that we have a clear definition
> >>>>>>>>>>>>>>> of the interface between the firmware and the payload.
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> How about this,
> >>>>>>>>>>>>>> "Registers tp and gp are unallocatable and not preserved
> >>>>>>>>>>>>>> across the
> >>>>>>>>>>>>> function calls, UEFI firmware implementation of RISC-V
> >>>>>>>>>>>>> platform should keep the values in these two registers
> >>>>>>>>>>>>> intact during entire UEFI firmware boot process, UEFI boot
> >>>>>>>>>>>>> service and
> >>>> runtime service.
> >>>>>>>>>>>>> See “Link to UEFI Specification-Related Document” on
> >>>>>>>>>>>>> https://uefi.org/uefi under the heading “RISC-V EFL psABI
> >>>>>>>>>>>>> Specification” for the more descriptions of RISC-V calling
> >>>> convention."
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> Current situation in U-Boot
> ===========================
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> With U-Boot we currently have the following boot flows:
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> U-Boot -> payload
> >>>>>>>>>>>>> OpenSBI -> payload
> >>>>>>>>>>>>> U-Boot SPL -> OpenSBI -> U-Boot -> payload
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> Upon entry U-Boot overwrites tp with the HART id on all
> >>>>>>>>>>>>> HARTs and the boot HART's gp with a pointer to U-Boot's
> >>>>>>>>>>>>> global data
> >>>> structure.
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> At boot time when the payload makes an API call U-Boot
> >>>>>>>>>>>>> replaces the payload's gp by its own value upon entry and
> >>>>>>>>>>>>> restores the payload's gp before returning to the payload.
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> At runtime UBoot neither touches gp nor tp.
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> Interrupt handling
> >>>>>>>>>>>>> ==================
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> Before ExitBootServices() handling of interrupts and
> >>>>>>>>>>>>> exceptions is the task of the firmware. As both may rely
> >>>>>>>>>>>>> on the values of tp and gp the payload should not
> >>>>>>>>>>>>> overwrite
> >> them.
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> When the operating system takes over it also has gets the
> >>>>>>>>>>>>> responsibility for handling interrupts and exceptions and
> >>>>>>>>>>>>> will set its own
> >>>>>>>>>>> values of tp and gp.
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> Some operating systems call SetVirtualAddressMap() after
> >>>>>>>>>>>>> ExitBootServices(), others don't. On Linux this is
> >>>>>>>>>>>>> controlled by kernel command line parameter efi=novamap.
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> Conclusion
> >>>>>>>>>>>>> ==========
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> I would suggest the following rules:
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> Until ExitBootServices() returns to the payload the
> >>>>>>>>>>>>> firmware is the owner of registers gp and tp. The payload
> >>>>>>>>>>>>> MUST NOT alter these
> >>>>>>>> values.
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> This implies that when handling
> >>>> EVT_SIGNAL_EXIT_BOOT_SERVICES
> >>>>>>>>>>> events
> >>>>>>>>>>>>> the payload MUST NOT alter gp and tp.
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> After ExitBootServices() the payload is the owner of
> >>>>>>>>>>>>> registers gp and tp. The firmware MUST NOT alter these
> >> values.
> >>>>>>>>>>>>
> >>>>>>>>>>>> The firmware solution you mentioned above is the payload
> >>>>>>>>>>>> solution with
> >>>>>>>>>>> either uboot or opensbi. However, edk2 firmware solution is
> >>>>>>>>>>> not the
> >>>>>>>> same.
> >>>>>>>>>>> RISC-V edk2 firmware solution uses OpenSBI as the library.
> >>>>>>>>>>> Thus we don't have to mention specific firmware solution in
> >>>>>>>>>>> UEFI
> >> spec.
> >>>>>>>>>>>> I think the final sentence already covered all use cases
> >>>>>>>>>>>> you mentioned
> >>>>>>>>>>> above, that includes the EFI POST time and the UEFI service
> >>>>>>>>>>> exposed to user such as EFI boot service and EFI runtime
> >>>>>>>>>>> service. We don’t have to mention specific rule in the spec.
> >>>>>>>>>>> I revised it again and add EFI Management Mode service.
> >>>>>>>>>>>
> >>>>>>>>>>> My references to U-Boot where not meant for inclusion in any
> >>>>>>>>>>> spec but as background information only.
> >>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>> "Registers tp and gp are unallocatable and not preserved
> >>>>>>>>>>>> across the
> >>>>>>>>>>> function calls, UEFI firmware implementation of RISC-V
> >>>>>>>>>>> platform should keep the values in these two registers
> >>>>>>>>>>> intact during entire UEFI firmware boot process, EFI boot
> >>>>>>>>>>> services, EFI runtime services and EFI management mode
> >>>>>>>>>>> services. See “Link to UEFI Specification-Related Document”
> >>>>>>>>>>> on https://uefi.org/uefi under the heading “RISC-V EFL psABI
> >>>>>>>>>>> Specification” for the more descriptions of
> >>>>>>>> RISC-V calling convention."
> >>>>>>>>>>>
> >>>>>>>>>>> Please, have a look at RFC 2119 "Key words for use in RFCs
> >>>>>>>>>>> to Indicate Requirement Levels" [INVALID URI REMOVED
> >>>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>
> >>>>
> >>
> 3A__tools.ietf.org_html_rfc2119&d=DwIFaQ&c=C5b8zRQO1miGmBeVZ2LFW
> >>>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>
> >>>>
> >>
> g&r=_SN6FZBN4Vgi4Ulkskz6qU3NYRO03nHp9P7Z5q59A3E&m=M_APpMPr8z
> >>>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>
> >>>>
> >>
> v5FK0ys5Noq10akQQqL0eNc9vlZqmOkpw&s=DBCkr05bpuKrQWdyNn5bJSow
> >>>>>>>>>>> sLV7UDvDJIJc3nT4jd0&e= ]. Here "should"
> >>>>>>>>>>> has the meaning of "recommended" and may be ignored "in
> >>>>>>>>>>> particular circumstances".
> >>>>>>>>>>>
> >>>>>>>>>>> Did you mean SHOULD or MUST?
> >>>>>>>>>> MUST is better, to make UEFI firmware solution simple. UEFI
> >>>>>>>>>> edk2 implementation could be a stand along firmware or to be
> >>>>>>>>>> built as the payload (we don’t have this implementation yet).
> >>>>>>>>>>>
> >>>>>>>>>>> "are unallocatable" is vague. It does not describe who is
> >>>>>>>>>>> not allowed to change the values. Is it the firmware or is
> >>>>>>>>>>> it the
> >> payload?
> >>>>>>>>>> From UEFI perspective, UEFI firmware payload is not allowed
> >>>>>>>>>> to change the value. I will rephrase this sentence.
> >>>>>>>>>>>
> >>>>>>>>>>> "keep the values intact" is vague. It could mean that the
> >>>>>>>>>>> firmware SHOULD reset gp and tp to the values they had had
> >>>>>>>>>>> before
> >>>>>>>>>>> StartImage() whenever an API call is made.
> >>>>>>>>>>>
> >>>>>>>>>>> We need a definition that cannot be misunderstood. In my
> >>>>>>>>>>> definition it is at least clear who is the owner of tp and gp.
> >>>>>>>>>>>
> >>>>>>>>>>> Please, consider that before ExitBootServices() many
> >>>>>>>>>>> different payloads may be loaded by the firmware:
> >>>>>>>>>>> applications, boot service drivers, runtime service drivers.
> >>>>>>>>>>> This is why to me it does not make sense to allow any other
> >>>>>>>>>>> software but the firmware to define the values of
> >>>>>>>>>> tp and gp before ExitBootServices().
> >>>>>>>>>>
> >>>>>>>>>> I am not against that  firmware to define the values of tp
> >>>>>>>>>> and gp. I think the "firmware" you mentioned here refer to
> >>>>>>>>>> uboot but not edk2
> >>>>>>>> firmware.
> >>>>>>>>
> >>>>>>>> I refer to the firmware providing the UEFI API. U-Boot and EDK
> >>>>>>>> II are alternative implementations.
> >>>>>>>>
> >>>>>>>>>> I am also fine to mention UEFI firmware should not (Must not)
> >>>>>>>>>> use gp and tp in spec. I would like to restrict using these
> >>>>>>>>>> two registers in UEFI firmware no matter the RISC-V UEFI
> >>>>>>>>>> firmware implementation is a stand along system firmware or a
> >>>>>>>>>> payload for other firmware such as uboot/opensbi, this would
> >>>>>>>>>> be easier for us to maintain RISC-V edk2 port. Hope I don’t
> >>>>>>>>>> misunderstand
> >>>>>>>>
> >>>>>>>> Both U-Boot and EDK II may be started by an SEE, e.g. OpenSBI.
> >>>>>>>>
> >>>>>>>>>> the intention which you brought up here, which is the UEFI
> >>>>>>>>>> firmware payload must not altering the value of gp and tp, right?
> >>>>>>>>>>
> >>>>>>>>>> However, I don’t want to see that we list the specific
> >>>>>>>>>> functions such as ExitBootServices, startImage,
> >>>>>>>>>> SetVirtualAddress in the UEFI spec, we can just give the
> >>>>>>>>>> strict criteria to UEFI firmware to not
> >>>> using gp/tp.
> >>>>>>>>>> Says UEFI firmware can't alter tp/gp values,
> >>>>>>>>>> -  After firmware enters UEFI firmware payload and before
> >>>>>>>>>> returning to
> >>>>>>>>>> firmware>> - In BS
> >>>>>>>>>> - In RTS
> >>>>>>>>>> - In SMM service
> >>>>>>>>
> >>>>>>>> Everytime U-Boot code is entered during boot services the
> >>>>>>>> payloads gp is saved. When returning to the payload the
> >>>>>>>> payloads value of the gp is restored. So the payload cannot
> >>>>>>>> observe any
> >> change in gp.
> >>>>>>>> At runtime U- Boot does not touch gp.
> >>>>>>>>
> >>>>>>>> I hope that is in line with your suggestion.
> >>>>>>>>
> >>>>>>>> Best regards
> >>>>>>>>
> >>>>>>>> Heinrich
> >>>>>>>>
> >>>>>>>>>> These should cover all possibilities of gp/tp value changed
> >>>>>>>>>> in UEFI
> >>>>>>>> firmware.
> >>>>>>>>>> We don’t even have to define the ownership of these registers
> >>>>>>>>>> in UEFI
> >>>>>>>> spec.
> >>>>>>>>> BTW, above is based on the edk2 UEFI implementation. I am not
> >>>>>>>>> sure if
> >>>>>>>> other UEFI firmware implementation can avoid to use these
> >> registers.
> >>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>> Best regards
> >>>>>>>>>>>
> >>>>>>>>>>> Heinrich
> >>>>>>>>>>>
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> because signal handlers may rely upon their values. See
> >>>>>>>>>>>>>>>> “Link to UEFI Specification-Related Document” on
> >>>>>>>>>>>>>>>> https://uefi.org/uefi under the heading “RISC-V EFL
> >>>>>>>>>>>>>>>> psABI Specification” for the more descriptions of
> >>>>>>>>>>>>>>>> RISC-V calling
> >>>>>>>> convention."
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> I will upload this update to USWG once Heinrich agrees
> >>>>>>>>>>>>>>>> with
> >>>>>>>> above.
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> Due to this missing clarification U-Boot is
> >>>>>>>>>>>>>>>>>>>> currently saving gp before calling the entry point
> >>>>>>>>>>>>>>>>>>>> of the payload and restores it
> >>>>>>>>>>>>>>>> on
> >>>>>>>>>>>>>>>>>>>> reentry or on entry of an API call. Nothing is done
> >>>>>>>>>>>>>>>>>>>> for
> >> tp.
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>
> >>>>>>>
> >>>>>>
> >>>
> >>> _______________________________________________
> >>> boot-architecture mailing list
> >>> boot-architecture@lists.linaro.org
> >>> https://lists.linaro.org/mailman/listinfo/boot-architecture
> >>>
> >

_______________________________________________
boot-architecture mailing list
boot-architecture@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/boot-architecture

Reply via email to