public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Daniel Schaefer" <daniel.schaefer@hpe.com>
To: Sean Brogan <sean.brogan@microsoft.com>,
	"Kinney, Michael D" <michael.d.kinney@intel.com>,
	"Chang, Abner (HPS SW/FW Technologist)" <abner.chang@hpe.com>,
	Bret Barkelew <Bret.Barkelew@microsoft.com>,
	"Ard Biesheuvel (ard.biesheuvel@linaro.org)"
	<ard.biesheuvel@linaro.org>,
	"Zimmer, Vincent" <vincent.zimmer@intel.com>,
	Leif Lindholm <leif@nuviainc.com>
Cc: "devel@edk2.groups.io" <devel@edk2.groups.io>
Subject: [edk2-devel] Where to put RISC-V packages
Date: Wed, 3 Jun 2020 13:57:29 +0200	[thread overview]
Message-ID: <f388d36b-1628-409f-a9ce-b51931adda7d@hpe.com> (raw)
In-Reply-To: <MW2PR2101MB092494AB8318628E06B62089E18F0@MW2PR2101MB0924.namprd21.prod.outlook.com>

Hi all,

(CC edk2 devel ML - shouldn't be a private discussion again)

let me try to summarize the points of each:

- edk2-platforms isn't a less stable edk2 per se
- edk2-platforms can be used for architectural decisions that are not
   stable yet and therefore different platforms might implement them
   differently
- Still we'd rather put unstable things in edk2-platforms for now
- In the future CPU Init shouldn't be totally separate packages but the
   overlapping code should be combined in
   UefiCpuPkg/MdePkg/MdeModulePkg/...
   - This applies to RISC-V, as well as ARM
   - UefiCpuPkg is too x86 focused
     -> needs lots of work and RISC-V shouldn't wait for that
- RISC-V changes should preferably be integrated into existing packages
   instead of building an entirely separate hierarchy
   -> We have done this. For example DxeIpl is now in edk2 in
      MdeModulePkg.

I hope everyone can agree with this summary.
I suggest that we do the following:

- Merge all of the RISC-V code to edk2-platforms
- Evaluate the packages individually and move them to edk2 one by one,
   or to merge them into existing edk2 packages
- In the end in edk2-platforms should only remain code for specific
   platforms, like the SiFive Unleashed board. No generic RISC-V code,
   right?

I'm not experienced enough with EDK2 to evaluate whether packages might
fit into EDK2 directly. Maybe we should have a call and have a look at
each on individually? Below I looked into the libraries and drivers of
every package that we want to upstream with our branch. I describe, what
they do and if they are platform specific. Then I issue my guess for
where it would belong.
I hope that gives everyone a bit more insight into all of the code we'd
like to merge.

Again: Would it be okay to merge everything as is into edk2-platforms. 
(DxeIpl
was previously merged into edk2). And then slowly migrate them over into 
edk2?
Or should be evaluate each package individually now instead of merging
everything at once.

- Platform/RISC-V/PlatformPkg
   - FirmwareContextProcessorSpecificLib
     Take processors specific data from SMBIOS and put in HOB
     => edk2
   - OpensbiPlatformLibNull
     Null library for platform provided OpenSBI functions.
     Those functions are defined in the SiFive directories
     => edk2
   - PlatformBootManagerLib
     I'm not sure why this is there. It doesn't look RISC-V specific.
     cc: Abner
     => ???
   - PlatformMemoryTestLibNull
     Same as above
     => ???
   - PlatformUpdateProgressLibNull
     Same as above
     => ???
   - RiscVPlatformTempMemoryInitLibNull
     Initialize temporary RAM on stack. Same on every RISC-V CPU
     Depends on platform's PCD values
     => edk2
   - Sec
     SEC Phase, same for every RISC-V CPU
     => edk2
- Silicon/RISC-V/ProcessorPkg
   - PeiServicesTablePointerLibOpenSbi
     Saving/loading PeiServicesTable in RISC-V scratch space with OpenSBI
     On every RISC-V CPU
     => edk2
   - RiscVCpuLib
     ASM functions to read RISC-V CSRs on every RISC-V CPU
     For UefiCpuPkg?
     => edk2
   - RiscVEdk2SbiLib
     Wrapper library to call the SBI ecalls on every RISC-V CPU
     => edk2
   - RiscVExceptionLib
     CpuExceptionHandlerLib implementation for RISC-V
     Currently only uses CSR accesses
     cc Abner: Will this be platform specific with the CLIC proposals?
     => edk2/edk2-platforms??
   - RiscVOpensbiLib
     OpenSBI library
     Needs to be called in early init on every RISC-V CPU
     => edk2?
   - RiscVPlatformTimerLibNull,RiscVTimerLib
     TimerLib implementation for RISC-V
     Depends on platform specific PCDs only
     => edk2?
   - CpuDxe
     Produces: gEfiCpuArchProtocolGuid
     Would go into UefiCpuPkg
     => edk2
   - SmbiosDxe
     Create SMBIOS entries type 4, type 7 and type 44
     Values need to be set by platform
     => edk2-platforms

All packages under edk2-platforms/{Silicon,Platform}/SiFive/ are not
included here, as they are obviously platform specific and need to go
into edk2-platforms.

Thanks,
Daniel



On 5/29/20 7:25 AM, Sean Brogan wrote:
> Sorry was just getting to this.  You guys are fast.  This is mostly to 
> Daniel’s original email but I think it lines up with Abner’s questions 
> and Mike’s response.
> 
> Daniel,
> 
> I think both Mike and Bret said most everything needed but I'll clarify 
> just in case.
> 
> I don't think the conversations below (Daniels) is accurate for my 
> concerns about RiscV support or my view of edk2-platforms.
> 
> In my view Edk2 packages are best when they are functionality based.  
> This allows for proper code base layering and makes sure that 
> abstractions are created in a way that will facilitate cross platform 
> core development.  For packages that are based on other characteristics, 
> like architecture, dependencies at the package level usually become 
> tangled and brittle which slowly leaks out into the rest of the code 
> base and then makes the entire repository harder to work with.
> 
> For that reason I advocated that the RiscV support be integrated into 
> the appropriate packages and modules.  Where there is unique 
> functionality that then needs to be evaluated to determine if its core 
> functionality or platform functionality. Depending on that it would then 
> land in the appropriate edk2 package or something in edk2-platforms.
> 
> Thanks
> 
> Sean
> 
> *From:* Kinney, Michael D <michael.d.kinney@intel.com>
> *Sent:* Thursday, May 28, 2020 10:18 PM
> *To:* Chang, Abner (HPS SW/FW Technologist) <abner.chang@hpe.com>; Bret 
> Barkelew <Bret.Barkelew@microsoft.com>; Schaefer, Daniel (DualStudy) 
> <daniel.schaefer@hpe.com>; Sean Brogan <sean.brogan@microsoft.com>; Ard 
> Biesheuvel (ard.biesheuvel@linaro.org) <ard.biesheuvel@linaro.org>; 
> Zimmer, Vincent <vincent.zimmer@intel.com>; Kinney, Michael D 
> <michael.d.kinney@intel.com>
> *Cc:* Leif Lindholm <leif@nuviainc.com>
> *Subject:* [EXTERNAL] RE: Re: [edk2-devel] [PATCH v2 0/3] New RISC-V 
> Patches - Why in edk2-platforms
> 
> Abner,
> 
> The architectural RISCV CPU content that does not change between RISCV 
> CPU implementations would be a candidate for MdePkg, MdeModulePkg, or 
> UefiCpuPkg.  We would need to do another review of the content along 
> with the ARM/AARCH64 content to see how best to organize the CPU related 
> content for now and future.
> 
> RISCV platform content would still need to go into edk2-platforms.  
> Non-architectural RISCV CPU content would also need to go into 
> edk2-platforms.
> 
> Mike
> 
> *From:* Chang, Abner (HPS SW/FW Technologist) <abner.chang@hpe.com 
> <mailto:abner.chang@hpe.com>>
> *Sent:* Thursday, May 28, 2020 10:01 PM
> *To:* Kinney, Michael D <michael.d.kinney@intel.com 
> <mailto:michael.d.kinney@intel.com>>; Bret Barkelew 
> <Bret.Barkelew@microsoft.com <mailto:Bret.Barkelew@microsoft.com>>; 
> Schaefer, Daniel (DualStudy) <daniel.schaefer@hpe.com 
> <mailto:daniel.schaefer@hpe.com>>; Sean Brogan 
> <sean.brogan@microsoft.com <mailto:sean.brogan@microsoft.com>>; Ard 
> Biesheuvel (ard.biesheuvel@linaro.org 
> <mailto:ard.biesheuvel@linaro.org>) <ard.biesheuvel@linaro.org 
> <mailto:ard.biesheuvel@linaro.org>>; Zimmer, Vincent 
> <vincent.zimmer@intel.com <mailto:vincent.zimmer@intel.com>>
> *Cc:* Leif Lindholm <leif@nuviainc.com <mailto:leif@nuviainc.com>>
> *Subject:* RE: Re: [edk2-devel] [PATCH v2 0/3] New RISC-V Patches - Why 
> in edk2-platforms
> 
> *From:* Kinney, Michael D [mailto:michael.d.kinney@intel.com]
> *Sent:* Friday, May 29, 2020 12:36 PM
> *To:* Bret Barkelew <Bret.Barkelew@microsoft.com 
> <mailto:Bret.Barkelew@microsoft.com>>; Schaefer, Daniel (DualStudy) 
> <daniel.schaefer@hpe.com <mailto:daniel.schaefer@hpe.com>>; Sean Brogan 
> <sean.brogan@microsoft.com <mailto:sean.brogan@microsoft.com>>; Ard 
> Biesheuvel (ard.biesheuvel@linaro.org 
> <mailto:ard.biesheuvel@linaro.org>) <ard.biesheuvel@linaro.org 
> <mailto:ard.biesheuvel@linaro.org>>; Kinney, Michael D 
> <michael.d.kinney@intel.com <mailto:michael.d.kinney@intel.com>>; 
> Zimmer, Vincent <vincent.zimmer@intel.com <mailto:vincent.zimmer@intel.com>>
> *Cc:* Leif Lindholm <leif@nuviainc.com <mailto:leif@nuviainc.com>>; 
> Chang, Abner (HPS SW/FW Technologist) <abner.chang@hpe.com 
> <mailto:abner.chang@hpe.com>>
> *Subject:* RE: [EXTERNAL] Re: [edk2-devel] [PATCH v2 0/3] New RISC-V 
> Patches - Why in edk2-platforms
> 
> We did a community review meeting.  I recall Ard and Vincent being present.
> 
> We discuss the CPU execution mode for PEI and DXE and there was a 
> discussion that RISCV has 2 modes and they want flexibility to use 
> both.  This choice is not defined in the PI spec yet.  We suggested that 
> it could follow the ARM/Thumb model and RISCV could choose a single mode 
> for all PEIMs and DXE drivers and choose to go into the other mode in 
> the module implementation as needed.
> 
> */[Abner] Yes. we done this as we discussed in the community meeting. 
> Those code are belong to RiscV*pkg and currently lay on 
> devel-riscvplatfoms which Leif is reviewing now./*
> 
> Given that these fundamental CPU execution mode design choices were 
> still in flux, it did not seem like it was ready for edk2 yet.
> 
> */[Abner] The current implementation is PEI/DXE are in the same mode./*
> 
> edk2-staging or an edk2-platforms branch seemed more appropriate until 
> all that was worked out.
> 
> */[Abner] Seems like that work is done. Maybe I have to review PI/UEFI 
> spec for the necessary changes./*
> 
> edk2-platforms/master seemed ok as well if different RISCV CPU modes 
> would be used for different platform solutions until a unified approach 
> by the RISCV vendors could be determined  Once that was solidified, 
> promoting to edk2 would be possible.
> 
> */[Abner] this means RicsVPkg and RicsVPlatformPkg eventually will be 
> located in edk2 but not edk2-platforms if above issues are addressed? We 
> don’t have to consider UefiCpuPkg for each arch now? We are good with 
> this though./*
> 
> Hopefully this clarifies for Leif why there was some resistance to edk2 
> repo right now.  Still on deck for the future.
> 
> Mike
> 
> *From:* Bret Barkelew <Bret.Barkelew@microsoft.com 
> <mailto:Bret.Barkelew@microsoft.com>>
> *Sent:* Thursday, May 28, 2020 8:11 PM
> *To:* Daniel Schaefer <daniel.schaefer@hpe.com 
> <mailto:daniel.schaefer@hpe.com>>; Kinney, Michael D 
> <michael.d.kinney@intel.com <mailto:michael.d.kinney@intel.com>>; Sean 
> Brogan <sean.brogan@microsoft.com <mailto:sean.brogan@microsoft.com>>
> *Cc:* Leif Lindholm <leif@nuviainc.com <mailto:leif@nuviainc.com>>; 
> Chang, Abner (HPS SW/FW Technologist) <abner.chang@hpe.com 
> <mailto:abner.chang@hpe.com>>
> *Subject:* RE: [EXTERNAL] Re: [edk2-devel] [PATCH v2 0/3] New RISC-V 
> Patches - Why in edk2-platforms
> 
> I think Sean has his own feedback, but my response to Abner was that 
> that I didn’t like the idea of continuing a pattern of separate packages 
> for significant portions of the CPU init. There have been a few times 
> where it has created unnecessary divergence that made it very difficult 
> to write cross-architecture code. I, personally, wasn’t fighting the 
> code landing in edk2 (except for RiscVPlatform, because it had platform 
> in the name), but I was inquiring to see whether it made more sense to 
> break things up among Mde, UefiCpu, and a couple other packages to 
> encourage adhering to similar patterns and interfaces between all the 
> different architectures. I’ve previously wondered openly whether it made 
> sense to do the same with the Arm packages.
> 
> I’ll be honest about not being super familiar with the RISCV code and it 
> would be easy for me to just shrug and say put it wherever, but I know 
> that architecture mobility/agility is important for us and wouldn’t be 
> surprised if I had to use RISCV in the future, and so wanted to make 
> sure that it was as close to what I was familiar with as possible.
> 
> - Bret
> 
> *From: *Daniel Schaefer <mailto:daniel.schaefer@hpe.com>
> *Sent: *Thursday, May 28, 2020 8:44 AM
> *To: *Kinney, Michael D <mailto:michael.d.kinney@intel.com>; Bret 
> Barkelew <mailto:Bret.Barkelew@microsoft.com>; Sean Brogan 
> <mailto:sean.brogan@microsoft.com>
> *Cc: *Leif Lindholm <mailto:leif@nuviainc.com>; Chang, Abner (HPS SW/FW 
> Technologist) <mailto:abner.chang@hpe.com>
> *Subject: *[EXTERNAL] Re: [edk2-devel] [PATCH v2 0/3] New RISC-V Patches 
> - Why in edk2-platforms
> 
> Hi Mike, Bret and Sean,
> 
> you have previously expressed concern about merging HPE's RISC-V code
> into edk2 and suggested merging it into edk2-platforms. Apparently you
> discussed this with Abner in a private email thread. According to that
> information I tried to summarize your points in an email on the edk2 ML.
> I hope I got it right.
> 
> As you can see, we have followed that suggestion and sent the new
> patches required for that to the ML.
> 
> Leif, and I, are still not convinced it's the right choice to not
> include it in edk2 proper.
> We would appreciate if you could address the concerns Leif has mentioned
> in the below email on the public ML.
> 
> Thanks!
> Daniel
> 
> On 5/28/20 1:54 PM, Leif Lindholm wrote:
>  > Hi Abner,
>  >
>  > Sorry, I should have followed up on this sooner.
>  >
>  > On Thu, May 21, 2020 at 06:59:20 +0000, Chang, Abner (HPS SW/FW 
> Technologist) wrote:
>  >>> On 5/20/20 6:07 PM, Daniel Schaefer wrote:
>  >>>> please reply here, fixed Mike's email address, sorry...
>  >>>>
>  >>>> On 5/20/20 6:03 PM, Daniel Schaefer wrote:
>  >>>>> On 5/20/20 1:43 PM, Leif Lindholm wrote:
>  >>>>>> On Fri, May 15, 2020 at 15:39:34 +0200, Daniel Schaefer wrote:
>  >>>>>>> Previously we had two packages just for RISC-V on our edk2 branch:
>  >>>>>>>     RiscVPkg and RiscVPlatformPkg
>  >>>>>>> They are now under
>  >>>>>>>     Platform/RISC-V/PlatformPkg and Silicon/RISC-V/ProcessorPkg in
>  >>>>>>> edk2-platforms.
>  >>>>>>
>  >>>>>> Understood. I took my eye off the ball there for a while, but I'm a
>  >>>>>> bit confused as to why RiscVPkg isn't going into EDK2. That is very
>  >>>>>> counterintuitive. And clearly it will need revisiting if we are to
>  >>>>>> add first-class CI checks like those we do with OvmfPkg/ArmVirtPkg.
>  >>>>>
>  >>>>> Yes, I understand your concern. Personally I'd like it also to be in
>  >>>>> EDK2 straight away, however Mike, Bret and Sean have raised valid
>  >>>>> concerns:
>  >
>  > Can you point me to the conversation I have missed?
>  >
>  >>>>> 1. RISC-V is very new and potentially unstable - it's quicker to make
>  >>>>> changes in edk2-platforms.
>  >
>  > I don't see this as a valid argument.
>  > It's not edk2-unstable, it is edk2-platforms.
>  >
>  > edk2-platforms exists because there used to be strong feelings against
>  > holding *real* platforms in edk2, with edk2 being originally intended
>  > only as a code library for IBV/ISV to cherry-pick from.
>  >
>  > But fundamentally, if code is too immature to go into the master
>  > branch of edk2, it is too immature to go into the master branch of
>  > edk2-platforms. If we want edk2-might-be-a-bit-shaky-but-who-cares,
>  > then someone will have to create it.
>  >
>  >>>>> 2. If we define new interfaces and libraries in edk2, we can't remove
>  >>>>> them easily because it would be a backwards-incompatible change.
>  >>>>> edk2-platforms isn't quite as strict.
>  >
>  > Yes it is.
>  > The only thing making it less strict is its contents - platform ports
>  > and device drivers. The changes tend to be self-contained. Where they
>  > are not, they need to be carefully managed.
>  >
>  >>>>> 3. Long-term, I think many agree, we should aim to move much of the
>  >>>>> RISC-V code into UefiCpuPkg and OvmfPkg. Mike mentioned that would
>  >>>>> need coordination with ARM maintainers because it might make sense to
>  >>>>> move their code there as well.
>  >
>  > I don't think there is any need to tie the two together.
>  > Yes, UefiCpuPkg should be a generic place where not only x86 support
>  > can be contained, but the paths for ARM* and RISC-V into there do not
>  > have any interdependencies.
> 

  parent reply	other threads:[~2020-06-03 12:02 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-05-15 13:39 [PATCH v2 0/3] New RISC-V Patches Daniel Schaefer
2020-05-15 13:39 ` [PATCH v2 1/3] ProcessorPkg/RiscVOpensbLib: Add opensbi submodule Daniel Schaefer
2020-05-20 11:51   ` Leif Lindholm
2020-05-15 13:39 ` [PATCH v2 2/3] ProcessorPkg/Library: Add RiscVOpensbiLib Daniel Schaefer
2020-05-20 12:00   ` Leif Lindholm
2020-05-20 14:44     ` Daniel Schaefer
2020-05-15 13:39 ` [PATCH v2 3/3] ProcessorPkg/Library: Add RiscVEdk2SbiLib Daniel Schaefer
2020-05-20 18:27   ` Leif Lindholm
2020-05-29 12:43     ` [edk2-devel] " Daniel Schaefer
2020-05-29 13:15       ` Leif Lindholm
2020-05-20 11:43 ` [edk2-devel] [PATCH v2 0/3] New RISC-V Patches Leif Lindholm
2020-05-20 16:03   ` [edk2-devel] [PATCH v2 0/3] New RISC-V Patches - Why in edk2-platforms Daniel Schaefer
2020-05-20 16:07     ` Daniel Schaefer
2020-05-20 16:17       ` Daniel Schaefer
2020-05-21  6:59         ` Abner Chang
2020-05-28 11:54           ` Leif Lindholm
2020-05-29 14:41             ` Abner Chang
     [not found]             ` <b55ee3ec-74de-532e-01f7-bd24a327d00b@hpe.com>
     [not found]               ` <CY4PR21MB0743421F39A05298FBCFBAA0EF8F0@CY4PR21MB0743.namprd21.prod.outlook.com>
     [not found]                 ` <MN2PR11MB4461D8666DE6DA1E7D4B5B9BD28F0@MN2PR11MB4461.namprd11.prod.outlook.com>
     [not found]                   ` <TU4PR8401MB1182F755F76709FF1D46D3F2FF8F0@TU4PR8401MB1182.NAMPRD84.PROD.OUTLOOK.COM>
     [not found]                     ` <MN2PR11MB4461442E7462457D6C20F6F2D28F0@MN2PR11MB4461.namprd11.prod.outlook.com>
     [not found]                       ` <MW2PR2101MB092494AB8318628E06B62089E18F0@MW2PR2101MB0924.namprd21.prod.outlook.com>
2020-06-03 11:57                         ` Daniel Schaefer [this message]
2020-06-03 15:02                           ` [edk2-devel] Where to put RISC-V packages Abner Chang

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=f388d36b-1628-409f-a9ce-b51931adda7d@hpe.com \
    --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