[U-Boot] dm: pinctrl: Prevent (re-)configuring pins when already done before relocation

Alex Kiernan
2019-01-12T09:30:19Z

On Tue, Jan 8, 2019 at 11:24 PM Lukasz Majewski <lukma@denx.de> wrote:
>
> Hi Alex,
>
> > On Tue, Jan 8, 2019 at 10:52 PM Lukasz Majewski <lukma@denx.de> wrote:
> > >
> > > Hi Alex,
> > >
> > > > On Thu, Dec 27, 2018 at 3:49 PM Tom Rini <trini@konsulko.com>
> > > > wrote:
> > > > >
> > > > > On Tue, Dec 18, 2018 at 12:30:50PM +0100, Lukasz Majewski wrote:
> > > > >
> > > > > > This commit prevents from re-configuring pins if those were
> > > > > > configured before relocation.
> > > > > >
> > > > > > Some pins - like UART or DDR must be setup before relocation
> > > > > > (as they have 'u-boot,dm-pre-reloc' property set in DTS).
> > > > > > Without this change, those pins are re-configured after
> > > > > > relocation (pre_reloc_only = 0, so we do not "continue").
> > > > > > Such behavior may be a problem for DDR PAD configuration, as
> > > > > > they might be already leveled/tuned with original setup).
> > > > > >
> > > > > > Signed-off-by: Lukasz Majewski <lukma@denx.de>
> > > > >
> > > > > Applied to u-boot/master, thanks!
> > > > >
> > > >
> > > > I've bisected out to this commit and it's slightly broken things
> > > > for me on an AM3352. It all works fine so long as I boot MLO from
> > > > MMC (so the MMC is probed, pinctrl setup), but if I boot from
> > > > UART then I get to full U-Boot, MMC hasn't been probed and the
> > > > pinmuxing isn't set up for the MMC.
> > >
> > > I suppose that the pinmux node have set "u-boot,dm-pre-reloc"
> > > property?
> > >
> >
> > Yeah, well "u-boot,dm-spl", though now I re-read the docs I guess
> > that's equivalent to "u-boot,dm-pre-reloc" as I've no TPL.
>
> I do need to check this -> as in my case I do have
> "u-boot,dm-pre-reloc" property. And yes, in my case I do not have TPL
> too (just SPL).
>
> >
> > > The problem is not with lack of eMMC probing - it is with pinctrl
> > > nodes having "u-boot,dm-pre-reloc" set in DTS and the eMMC is
> > > probed after MLO/SPL.
> > > It looks like your use case implicitly depends on pinmux being
> > > reconfigured no matter if we are pre-relocated (MLO) or afterwards.
> > >
> >
> > Yes, that's a much clearer description...
>
> Frankly, your mail opened my eyes to a use case which was handled (I
> assume on purpose) with the old code - the "cross" boot with pinmux
> and devices.
>
> For example boot from UART (MLO/SPL) and then continue with eMMC (which
> require pinmux).
>

So I guess this needs something like a bloblist to communicate the
initialisation state between MLO/SPL and u-boot, which I've not the
faintest idea where to start on.

Horrible as they are, is a CONFIG symbol a possibility whilst we
figure out how to solve this properly?

I guess another option would be an additional two properties that give
the two behaviours, but that feels like something we don't want long
term.

--
Alex Kiernan