[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v2 1/3] xen/riscv: read/save hart_id and dtb_base passed by bootloader



On Thu, 2023-03-02 at 18:58 +0000, Andrew Cooper wrote:
> On 02/03/2023 2:53 pm, Oleksii wrote:
> > On Thu, 2023-03-02 at 14:02 +0000, Andrew Cooper wrote:
> > > On 02/03/2023 1:23 pm, Oleksii Kurochko wrote:
> > > > +
> > > > +        /*
> > > > +         * DTB base is passed by a bootloader
> > > > +         */
> > > > +_dtb_base:
> > > > +        RISCV_PTR 0x0
> > > > diff --git a/xen/arch/riscv/setup.c b/xen/arch/riscv/setup.c
> > > > index 1c87899e8e..d9723fe1c0 100644
> > > > --- a/xen/arch/riscv/setup.c
> > > > +++ b/xen/arch/riscv/setup.c
> > > > @@ -7,7 +7,8 @@
> > > >  unsigned char __initdata cpu0_boot_stack[STACK_SIZE]
> > > >      __aligned(STACK_SIZE);
> > > >  
> > > > -void __init noreturn start_xen(void)
> > > > +void __init noreturn start_xen(unsigned long bootcpu_id,
> > > > +                               unsigned long dtb_base)
> > > To be clear, this change should be this hunk exactly as it is,
> > > and a
> > > comment immediately ahead of ENTRY(start) describing the entry
> > > ABI.
> > > 
> > > There is no need currently to change any of the asm code.
> > I think that I'll use s2 and s3 to save bootcpu_id.
> > 
> > But I am unsure I understand why the asm code shouldn't be changed.
> 
> Because nothing in the asm code (right now) touches any of the a
> registers.
> 
> Therefore the parameters that OpenSBI prepared for start() (i.e. a0
> and
> a1 here) are still correct for start_xen().
> 
> If, and only if, we need to modify a* for other reasons in start() do
> we
> need to preserve their values somehow.
> 
> > If I understand you correctly I can write in a comment ahead of
> > ENTRY(start) that a0, and a1 are reserved for hart_id and dtb_base
> > which are passed from a bootloader but it will work only if
> > start_xen
> > will be only C function called from head.S.
> 
> Not quite.  You want a comment explaining what the OpenSBI -> start()
> ABI is.  So people know what a0/etc is at ENTRY(start).
> 
> Here is an example from a different project:
> https://github.com/TrenchBoot/secure-kernel-loader/blob/master/head.S#L52-L68
> 
> 
> There is no need to do unnecessary work (i.e. preserving them right
> now), until you find a reason to need to spill them.  Right now,
> there's
> not need, and this isn't obviously going to change in the short term.
> 
Thanks for clarification.

I will document ABI for start and that's it for now
~ Oleksii




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.