[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