[PATCH V2 1/9] uclass: cpu: Add new API to get udevice for current CPU

Simon Glass sjg at chromium.org
Mon May 4 14:53:35 CEST 2020


Hi Peng,

On Sun, 3 May 2020 at 07:14, Peng Fan <peng.fan at nxp.com> wrote:
>
> Hi Simon,
>
> > Subject: Re: [PATCH V2 1/9] uclass: cpu: Add new API to get udevice for
> > current CPU
> >
> > Hi Peng,
> >
> > On Fri, 1 May 2020 at 07:22, Peng Fan <peng.fan at nxp.com> wrote:
> > >
> > > When running on SoC with multiple clusters, the boot CPU may not be
> > > fixed, saying booting from cluster A or cluster B.
> > > Add a API that can return the udevice for current boot CPU.
> > > Cpu driver needs to implement is_current_cpu interface for this
> > > feature, otherwise the API only returns the first udevice in cpu
> > > uclass.
> > >
> > > Signed-off-by: Peng Fan <peng.fan at nxp.com>
> > > Signed-off-by: Ye Li <ye.li at nxp.com>
> > > ---
> > >
> > > V2:
> > >  Per Simon's comment,
> > >   - Add cpu_is_current
> > >   - use uclass_foreach_dev_probe
> > >   - Update code comment
> > >
> > >  drivers/cpu/cpu-uclass.c | 34 ++++++++++++++++++++++++++++++++++
> > >  include/cpu.h            | 23 +++++++++++++++++++++++
> > >  2 files changed, 57 insertions(+)
> > >
> >
> > Reviewed-by: Simon Glass <sjg at chromium.org>
> >
> >
> > > diff --git a/drivers/cpu/cpu-uclass.c b/drivers/cpu/cpu-uclass.c index
> > > 457f77b7c8..33d38a0fde 100644
> > > --- a/drivers/cpu/cpu-uclass.c
> > > +++ b/drivers/cpu/cpu-uclass.c
> > > @@ -10,6 +10,7 @@
> > >  #include <errno.h>
> > >  #include <dm/lists.h>
> > >  #include <dm/root.h>
> > > +#include <linux/err.h>
> > >
> > >  int cpu_probe_all(void)
> > >  {
> > > @@ -34,6 +35,39 @@ int cpu_probe_all(void)
> > >         return 0;
> > >  }
> > >
> > > +int cpu_is_current(struct udevice *cpu) {
> > > +       struct cpu_ops *ops = cpu_get_ops(cpu);
> > > +
> > > +       if (ops && ops->is_current) {
> > > +               if (ops->is_current(cpu))
> > > +                       return 1;
> >
> > return 0 here I think

Sorry that as very unclear. I mean that you should have something like:

       if (ops->is_current) {
               if (ops->is_current(cpu))
                       return 1;
               return 0;
       }
       return -ENOSYS;

since if the driver is not current you should return so, and not -ENOSYS.

Also, why not just return what the driver returns? E.g. if the driver
returns an error you should return it. The normal pattern used is:

struct cpu_ops *ops = cpu_get_ops(cpu);

if (!ops->is_current)
    return -ENOSYS;

ret = ops->is_current(cpu);
if (ret)
    return log_ret(ret);

return 0;

>
> I prefer to use 1 here, since is_current return 0 seems
> werid to show it is the cpu that uboot is running from.
>
> >
> > Also you should not check 'ops'.
>
> I'll drop it.
>
> Thanks,
> Peng.
>

Regards,
Simon


More information about the U-Boot mailing list