[PATCH V2 1/9] uclass: cpu: Add new API to get udevice for current CPU
Peng Fan
peng.fan at nxp.com
Mon May 4 14:56:36 CEST 2020
Hi Simon,
> Subject: Re: [PATCH V2 1/9] uclass: cpu: Add new API to get udevice for
> current CPU
>
> 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;
Since the patch has been applied by Stefano, I'll create a follow up patch
to address the comments you mentioned.
Thanks,
Peng.
>
> >
> > 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