Message ID | 20181218113050.6115-1-lukma@denx.de |
---|---|
State | Accepted |
Commit | a7f4b4b344396590845e6552c82829ef68ef9f89 |
Delegated to: | Tom Rini |
Headers | show |
Series | [U-Boot] dm: pinctrl: Prevent (re-)configuring pins when already done before relocation | expand |
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!
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.
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? 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. As stated in the commit message above - for DDR pads it is dangerous to re-configure them. I'm wondering as in the device_probe() @ drivers/core/device.c the DM_FLAG_ACTIVATED is checked. This should be enough to prevent re-checking (of the DDR pins). Anyway, this will not fix the issue you mentioned. I've put Simon to CC, maybe he would have some input? Best regards, Lukasz Majewski -- DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de
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. > 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...
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). > Best regards, Lukasz Majewski -- DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de
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
Hi Alex, > 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, Yes. IMHO this is one way to do it. There is already a DM_FLAG_ACTIVATED, which indicates if the device was probed. However, it is not "dragged" from MLO / SPL to u-boot.img However, I think that we shall introduce a new flag - DM_FLAG_CONFIGURE_ONCE [*], which would indicate that the device need single configuration. This flag could be used with DM_PINMUX driver, to avoid re-configuration. The idea would be to use bloblist (only when [*] is set) to pass tuples: (driver_name, config_status) and in the core of DM just check if we shall re-configure the driver or not. > 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? The bloblist can be activated with CONFIG_BLOBLIST > > 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. As we strive to use as little "u-boot,XXXXXX" extra properties to avoid problems with Linux re-sync, I think that we shall use bloblist. > > > -- > Alex Kiernan Best regards, Lukasz Majewski -- DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de
Hi Lukasz, On Sat, 12 Jan 2019 at 14:46, Lukasz Majewski <lukma@denx.de> wrote: > > Hi Alex, > > > 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, > > Yes. IMHO this is one way to do it. There is already a > DM_FLAG_ACTIVATED, which indicates if the device was probed. However, > it is not "dragged" from MLO / SPL to u-boot.img > > However, I think that we shall introduce a new flag - > DM_FLAG_CONFIGURE_ONCE [*], which would indicate that the device need > single configuration. > > This flag could be used with DM_PINMUX driver, to avoid > re-configuration. > > The idea would be to use bloblist (only when [*] is set) to pass tuples: > (driver_name, config_status) That seems reasonable, but I don't like the idea of using a name. Could we have some sort of numeric value instead? > > and in the core of DM just check if we shall re-configure the driver or > not. > > > 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? > > The bloblist can be activated with CONFIG_BLOBLIST > > > > > 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. > > As we strive to use as little "u-boot,XXXXXX" extra properties to avoid > problems with Linux re-sync, I think that we shall use bloblist. Regards, Simon
diff --git a/drivers/pinctrl/pinctrl-uclass.c b/drivers/pinctrl/pinctrl-uclass.c index 6db0445067..29c910c55f 100644 --- a/drivers/pinctrl/pinctrl-uclass.c +++ b/drivers/pinctrl/pinctrl-uclass.c @@ -117,9 +117,9 @@ static int pinconfig_post_bind(struct udevice *dev) int ret; dev_for_each_subnode(node, dev) { - if (pre_reloc_only && - !ofnode_pre_reloc(node)) + if (pre_reloc_only ^ ofnode_pre_reloc(node)) continue; + /* * If this node has "compatible" property, this is not * a pin configuration node, but a normal device. skip.
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> --- drivers/pinctrl/pinctrl-uclass.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)