[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