[U-Boot] [PATCH] tegra20: tamonten: Fix the early gpio init

Simon Glass sjg at chromium.org
Thu Oct 2 21:05:50 CEST 2014


Hi Alban,

On 2 October 2014 10:12, Alban Bedel <alban.bedel at avionic-design.de> wrote:
>
> On Thu, 02 Oct 2014 09:42:18 -0600
> Stephen Warren <swarren at wwwdotorg.org> wrote:
>
> > On 10/02/2014 09:14 AM, Alban Bedel wrote:
> > > To set gpio during the early init we now need to use
> > > tegra_spl_gpio_direction_output(), copied from seaboard.
> > >
> > > Change-Id: Id0aadb17a71b78e75e8c3f8de374102b3eab767b
> >
> > That shouldn't be present on upstream patches.
>
> Sorry about this.

If you use patman it will take these out for you automatically without
you having to think about it.

>
>
> > > Signed-off-by: Alban Bedel <alban.bedel at avionic-design.de>
> > > ---
> > >   board/avionic-design/common/tamonten.c | 4 +++-
> > >   1 file changed, 3 insertions(+), 1 deletion(-)
> > >
> > > diff --git a/board/avionic-design/common/tamonten.c b/board/avionic-design/common/tamonten.c
> > > index 9c86779..ea2425a 100644
> > > --- a/board/avionic-design/common/tamonten.c
> > > +++ b/board/avionic-design/common/tamonten.c
> > > @@ -23,8 +23,10 @@
> > >   #ifdef CONFIG_BOARD_EARLY_INIT_F
> > >   void gpio_early_init(void)
> > >   {
> > > +#ifndef CONFIG_SPL_BUILD
> > >     gpio_request(GPIO_PI4, NULL);
> > > -   gpio_direction_output(GPIO_PI4, 1);
> > > +#endif
> > > +   tegra_spl_gpio_direction_output(GPIO_PI4, 1);
> > >   }
> >
> > Surely you only want to call tegra_spl_*() from SPL, and not from
> > non-SPL code? In other words, don't you need something more like:
> >
> > #ifdef CONFIG_SPL_BUILD
> >       tegra_spl_gpio_direction_output(GPIO_PI4, 1);
> > #else
> >       gpio_request(GPIO_PI4, NULL);
> >       gpio_direction_output(GPIO_PI4, 1);
> > #endif
>
> Sadly not, at this point the gpio driver isn't available yet, that's
> why one need to use tegra_spl_gpio_direction_output(). As mentioned in
> the commit log I copied this from seaboard, assuming it would be
> correct.
>
> AFAICT the gpio_request() could be removed too, it doesn't work at this
> point anyway.

This is a temporary measure until the SPL series is applied to dm/next
at least (I expect sometime this month). While driver model is
available before relocation, the Tegra GPIO driver is not marked in
the device tree with "u-boot,dm-pre-reloc", so is not available this
early. Device tree additions give Stephen a headache, and I decided it
was better for it not to work for now, and just use the SPL function.

There are three stages to consider:

1. SPL
2. U-Boot, before relocation
3. U-Boot, after relocation

At present, driver model does not support 1 (see dm/spl-working for
patches if you want to see this). It supports 2 but only for drivers
marked pre-relocation (except serial, for which a hack forces the
console to be bound and used in the device tree case without the
u-boot,dm-pre-reloc marker). It supports 3 fully.

There is a bit of an update on current status here:

http://www.denx.de/wiki/U-Boot/DriverModel

My approach with driver model is incremental, since that's the only
way to make any progress.

>
> > ... although perhaps the SPL and non-SPL code should simply be separated
> > into separate files, so that there's no need for ifdefs, and it's
> > obvious if SPL and non-SPL code are duplicating the same work?
>
> Actually none of the code from tamonten.c is needed for the SPL, a
> build with both function under #ifndef CONFIG_SPL_BUILD works just fine.
> Any pointer on how I can get tamonten.c out of the SPL build?

This should work:

ifndef CONFIG_SPL_BUILD
obj-y += tamonten.o
endif

But it seems odd to me. At least on seaboard I didn't get the SPL
message unless this code was executed.

Regards,
Simon


More information about the U-Boot mailing list