On Tue, 3 Jun 2025 at 23:56, Ilias Apalodimas
<ilias.apalodi...@linaro.org> wrote:
>
> On Tue, 3 Jun 2025 at 09:44, Sughosh Ganu <sughosh.g...@linaro.org> wrote:
> >
> > On Fri, 30 May 2025 at 15:41, Sughosh Ganu <sughosh.g...@linaro.org> wrote:
> > >
> > > On Fri, 30 May 2025 at 13:17, Ilias Apalodimas
> > > <ilias.apalodi...@linaro.org> wrote:
> > > >
> > > > > +static phys_addr_t lmb_alloc(phys_size_t size)
> > > > > +{
> > > > > +       int ret;
> > > > > +       phys_addr_t addr;
> > > > > +
> > > > > +       /* All memory regions allocated with a 2MiB alignment */
> > > > > +       ret = lmb_alloc_mem(LMB_MEM_ALLOC_ANY, SZ_2M, &addr, size, 
> > > > > LMB_NONE);
> > > > > +       if (ret)
> > > > > +               return 0;
> > > > > +
> > > > > +       return addr;
> > > > > +}
> > > > > +
> > > >
> > > > I think we  need a better naming for these. Right now we have
> > > > lmb_alloc() here and in tests, addr_alloc() in snapdragon code.
> > > > I'd say either export them as API if you think they would be useful,
> > > > or get rid of the wrappers.
> > >
> > > I kept these functions as is to reduce the amount of change resulting
> > > from introducing the API. Also, the newly introduced API has
> > > parameters which are common across all the callers, which also was why
> > > I kept a wrapper. This is especially true in the tests, where it would
> > > be required to change the function names in a bunch of places without
> > > much benefit.
> > >
> > > >
> > > > [...]
> > > >
> > > > > +static phys_addr_t lmb_alloc(phys_size_t size, ulong align)
> > > > > +{
> > > > > +       int err;
> > > > > +       phys_addr_t addr;
> > > > > +
> > > > > +       err = lmb_alloc_mem(LMB_MEM_ALLOC_ANY, align, &addr, size, 
> > > > > LMB_NONE);
> > > > > +       if (err)
> > > > > +               return 0;
> > > >
> > > >
> > > > This tends to blow up in random ways. See
> > > > commit 67be24906fe. TL;DR 0 is a valid address in some systems.
> > >
> > > Yes, I see your point. I think the calling function will have to be
> > > re-written such that the env variables get stored only when the API
> > > returns successfully. Then at least the platform will not have an env
> > > variable with some junk value.
> >
> > Thinking about this a bit, I think in these two instances, returning a
> > value of 0 might not be an issue if the DRAM memory does not start at
> > 0x0. Don't get me wrong, what you are suggesting is definitely
> > correct. I am only thinking about increasing code size on these
> > platforms if 0x0 is not a valid address, and moreover since the
> > platforms were already setting 0x0 in case of an error.
>
> what kind of code size increase are we talking about?

Let me check the actual size impact with the changes and get back to you.

> It's returning
> na int instead of a physical address so that should be close to zero?

Sorry, I do not understand what you are suggesting, but even the above
static function is returning a phys_addr_t value, which is 0 in case
of an error. And I have kept this to mimic the existing behaviour.
Thanks.

-sughosh

>
> Thanks
> /Ilias
> > If it is okay
> > to increase code size on these platforms, I will change the calling
> > function, such that the variable does not get set in case of an error.
> > Maybe Casey and Mark can comment? Thanks.
> >
> > -sughosh
> >
> > >
> > > -sughosh
> > >
> > > >
> > > > > +
> > > > > +       return addr;
> > > > > +}
> > > > > +
> > > > > +static phys_addr_t lmb_alloc_base(phys_size_t size, ulong align,
> > > > > +                                 phys_addr_t max_addr, u32 flags)
> > > > > +{
> > > > > +       int err;
> > > > > +       phys_addr_t addr;
> > > > > +
> > > > > +       addr = max_addr;
> > > > > +       err = lmb_alloc_mem(LMB_MEM_ALLOC_MAX, align, &addr, size, 
> > > > > flags);
> > > > > +       if (err)
> > > > > +               return 0;
> > > > > +
> > > > > +       return addr;
> > > > > +}
> > > > > +
> > > > >  #define lmb_alloc_addr(addr, size, flags) lmb_reserve(addr, size, 
> > > > > flags)
> > > > >
> > > > >  static int test_multi_alloc(struct unit_test_state *uts, const 
> > > > > phys_addr_t ram,
> > > > > --
> > > > > 2.34.1
> > > > >
> > > >
> > > > Cheers
> > > > /Ilias

Reply via email to