On Wed, Mar 4, 2020 at 7:22 PM Schaefer, Daniel (DualStudy)
<[email protected]> wrote:
>
> Hi,
>
> I have started to implement the corresponding changes in EDK2: 
> https://github.com/changab/edk2-staging-riscv/compare/5f63e9249751ccb9302514455b9a1a7038f34547...RISC-V-DT-fixup
> What happens is: The DTB is embedded in the FW image and passed to sbi_init 
> in SEC phase. We initialize OpenSBI as early as possible and because it also 
> wants to modify the device tree, I have to pass it the DTB as next_arg1.
> Then it's passed to PEI in the firmware context and further to DXE via a HOB. 
> In DXE the boot-hartid is inserted and it's installed into the EFI system 
> config table from where the EFISTUB reads it.
>
> Unfortunately I don't get any console output after the EFISTUB calls 
> ExitBootServices, so my patch is still WIP.
> Atish, which platform file in OpenSBI did you use to test your changes? 
> platform/qemu/virt/platform.c or platform/sifive/fu540/platform.c ?

Both. I have verified bootefi boot on Qemu and Unleashed.

> Maybe the failure is unrelated to the new patches - we've never booted Linux 
> from EDKII yet.
>

I have never tried EDKII patches as well. I will give it a try. You
can add a quick hack can be added in OpenSBI to add the chosen node
easily.
By doing that, you ensure that EDK2 is unchanged and try my EFI stub
patches. I might have missed something in EFI stub as well :).

>
> I'm a bit skeptical whether DT is the best way to pass the boothartid to the 
> kernel. Ard has argued that it's good because it's independent from UEFI, but 
> the proper kernel doesn't read the hartid from there - it gets it from a0. 
> Only the EFISTUB reads the hartid from the device tree. Therefore the 
> solution we need is EFI specific anyways, right?

yes.

> One of the design goals is that we don't want to force bootloaders, which 
> load the EFISTUB (e.g. UEFI Shell, grub chainloading, systemd-boot), to 
> change.
>

I don't know how systemd-boot works but grub doesn't need to modify
DT. The stage loading the grub must have already made that
modification.

> If we let the firmware embed the hartid in the DT, the user cannot swap out 
> the DT later for their custom one. They need to use the one given by the 
> firmware.
> Of course we could add commands and config to bootloaders to load and fixup 
> (embed hartid) the device tree... but, as mentioned earlier, we want to avoid 
> that.
> Additionally from EDKII side we're also planning to run later stages, 
> including the bootloader, in S-Mode, where they wouldn't even have access to 
> mhartid and thus couldn't fixup the DT.
>
> If instead the firmware writes the hartid into the EFI system config table, 
> the EFISTUB can read it from there, just like it does the device tree 
> already. Then bootloaders can put a user supplied DT in the config table, 
> too, like they always have.
>
> What do you all think - does that make sense?
>
> - Daniel
> On 2/25/20 10:07 AM, Ard Biesheuvel wrote:
>
> On Tue, 25 Feb 2020 at 09:59, Chang, Abner (HPS SW/FW Technologist)
> <[email protected]> wrote:
>
> -----Original Message-----
> From: Ard Biesheuvel [mailto:[email protected]]
> Sent: Tuesday, February 25, 2020 4:48 PM
> To: Chang, Abner (HPS SW/FW Technologist) <[email protected]>
> Cc: Atish Patra <[email protected]>; Heinrich Schuchardt
> <[email protected]>; Atish Patra <[email protected]>; U-Boot Mailing
> List <[email protected]>; Alexander Graf <[email protected]>; Anup Patel
> <[email protected]>; Bin Meng <[email protected]>; Joe
> Hershberger <[email protected]>; Loic Pallardy
> <[email protected]>; Lukas Auer <[email protected]>;
> Marek BehĂșn <[email protected]>; Marek Vasut
> <[email protected]>; Patrick Delaunay <[email protected]>;
> Peng Fan <[email protected]>; Philippe Reynes
> <[email protected]>; Simon Glass <[email protected]>;
> Simon Goldschmidt <[email protected]>; Stefano Babic
> <[email protected]>; Thierry Reding <[email protected]>; Tom Rini
> <[email protected]>; [email protected]; Schaefer, Daniel (DualStudy)
> <[email protected]>
> Subject: Re: [RFC PATCH 0/1] Add boot hartid to a Device tree
>
> On Tue, 25 Feb 2020 at 09:28, Chang, Abner (HPS SW/FW Technologist)
> <[email protected]> wrote:
>
> -----Original Message-----
> From: Atish Patra [mailto:[email protected]]
>
> <snip header soup>
>
> On Mon, Feb 24, 2020 at 3:35 PM Ard Biesheuvel
> <[email protected]> wrote:
>
> On Tue, 25 Feb 2020 at 00:22, Heinrich Schuchardt
> <[email protected]>
>
> wrote:
>
> On 2/24/20 11:19 PM, Atish Patra wrote:
>
> The RISC-V booting protocol requires the hart id to be present in
>
> "a0"
>
> register. This is not a problem for bootm/booti commands as
> they directly jump to Linux kernel. However, bootefi jumps to
> a EFI boot stub code in Linux kernel which acts a loader and
> jumps to real Linux after terminating the boot services. This
> boot stub code has to be aware of the boot hart id so that it
> can set it in "a0" before jumping to Linux kernel. Currently,
> UEFI protocol doesn't have any mechanism to pass the boot hart
> id to an EFI executable. We should keep it this way as this is
> a RISC-V specific requirement rather than a UEFI requirement.
> Out of the all
>
> possible options, device tree seemed to be the best choice to do this job.
>
> The detailed discussion can be found in the following thread.
>
> INVALID URI REMOVED
>
> abs.org_patch_1233664_&d=DwIBaQ&c=C5b8zRQO1miGmBeVZ2LFWg&r=_S
>
> N6FZB
>
> N4Vgi4Ulkskz6qU3NYRO03nHp9P7Z5q59A3E&m=J8GY_HS3fV_cJH9duXP739y
>
> 0hDK
>
> 3qfHGNx2Dpcf-UBY&s=iVpRlpTOME_A-
>
> O5STNbXXawkW24gxy2yi56Q8AtZ2bI&e=
>
> The above mentioned patch is obsoleted by the new suggestion.
>
> Thanks for pointing that out to avoid confusion.
>
> This patch updates the device tree in arch_fixup_fdt() which
> is common for all booting commands. As a result, the DT
> modification doesn't require any efi related arch specific
> functions and all DT related modifications are contained at
> one place. However, the hart id node will be available for
> Linux even if the kernel is booted using
>
> bootm command.
>
> If that is not acceptable, we can always move the code to an
> efi specific function.
>
> Does a related Linux patch already exist?
>
> Yes. But in my local tree ;). It will be included in RISC-V EFI stub
> support series which I am planning to post in a couple of days.
>
> How about EDK2?
>
> RISC-V is not supported at all yet in EDK2.
>
> The EDK2 patches are out there and reviewed. I guess it will be
> available in mainline EDK2 pretty soon.
>
> Yes, currently we are working on edk2 CI testing for RISCV64 arch.  We
>
> hope edk2 RISC-V port could be in mainstream in Mar.
>
> Excellent! Is this core support? Or do you have a platform implemented as
> well that can be upstreamed?
>
> Yes we do have platform implementations to be upstreamed, below is the latest 
> status of RISC-V edk2 port. We will have to update status later because we 
> just merged OpenSBI tag 0.6 to edk2 RISC-V.
> https://github.com/riscv/riscv-uefi-edk2-docs
>
> Good to know! I saw some patches going by on the mailing list, but it
> is hard to derive the current state of affairs from that.
>
> I'm glad to see you did not make the same mistake we made on ARM and
> omit the PEI phase entirely.
>
> What I did notice is the use of APRIORI PEI and APRIORI DXE sections
> in your platform descriptions. I recommend you try to avoid that, as
> it is a maintenance burden going forward: instead, please use dummy
> protocols and NULL library class resolutions if you need to make
> generic components depend on platform specific protocols. Also, please
> document this - the APRIORI section does not explain *why* you have to
> circumvent the ordinary dependency tree based module dispatch.



-- 
Regards,
Atish

Reply via email to