All of lore.kernel.org
 help / color / mirror / Atom feed
From: Simon Glass <sjg@chromium.org>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v2 3/6] tegra: dts: Sync tegra20 device tree files with Linux
Date: Thu, 12 May 2016 21:11:17 -0600	[thread overview]
Message-ID: <CAPnjgZ3EjESrE847ZVG8+NKtCgG+dO-6qKHjCtW1Nk4HQf1O3w@mail.gmail.com> (raw)
In-Reply-To: <57321E22.9030703@wwwdotorg.org>

Hi Stephen,

On 10 May 2016 at 11:45, Stephen Warren <swarren@wwwdotorg.org> wrote:
> On 05/09/2016 01:26 PM, Simon Glass wrote:
>>
>> Hi Stephen,
>>
>> On 9 May 2016 at 11:09, Stephen Warren <swarren@wwwdotorg.org> wrote:
>>>
>>> On 05/08/2016 04:55 PM, Simon Glass wrote:
>>>>
>>>>
>>>> Sync everything except the display panel, which will come in a future
>>>> patch.
>>>> One USB port is left disabled since we don't want to support it in
>>>> U-Boot.
>>>
>>>
>>>
>>> I'd rather be a bit more careful here, and only import the DT nodes
>>> directly
>>> related to display output.
>>>
>>> This change brings in a slew of other nodes that aren't used by U-Boot
>>> (something we've historically explicitly avoided) such as pinctrl, audio,
>>> Tegra KBC, I2C mux, & regulators.
>>
>>
>> I believe that audio, KBC and regulators are used.
>
>
> Audio and regulators certainly aren't used by mainline U-Boot; we don't have
> any audio drivers and IIRC we don't have any regulators instantiated in the
> DTs currently in U-Boot for Tegra devices.

Regulators are used by the new LCD support. Yes you are right about audio.

>
>>> It also doesn't sync the /aliases node with the kernel (e.g. Seaboard
>>> I2C,
>>> and I think USB for all boards), and at least Harmony's USB nodes don't
>>> seem
>>> to match what's in the kernel so I'm not sure where the DT content came
>>> from, e.g. consider usb at c5004000's nvidia,phy-reset-gpio used an integer
>>> rather than GPIO_ACTIVE_LOW, which is present in at least the most recent
>>> kernel release (v4.5).
>>
>>
>> This was against v4.4, but I may have messed up the merge in some
>> cases. since I had to change the addresses from 64 bit.
>
>
> It looks like that particular change was made in v3.11 in the kernel.
>
>>> Splitting this up a bit or limiting it to just display-related nodes
>>> would
>>> make it easier to debug any issues that crop up with the sync. Also, have
>>> we
>>> made an explicit decision to change the policy of only including DT nodes
>>> that U-Boot actually uses, rather than simply copying the entire kernel
>>> DT
>>> into U-Boot? I'm pretty sure that some board(s) have deliberate
>>> differences
>>> in areas other than display, e.g. since U-Boot doesn't (or at least
>>> didn't)
>>> support pinctrl-based I2C muxed which are used on some Tegra20 boards in
>>> the
>>> kernel at least, and hence U-Boot likely either disabled those I2C ports
>>> or
>>> picked an explicit pinmux configuration to hard-code to.
>>
>>
>> I think I know what you mean, and I don't believe that actually
>> affects any I2C ports that are used in U-Boot. Do you have any
>> example?
>
>
> In tegra20-seaboard.dts, the kernel DT has a pinctrl-based I2C mux on
> controller /i2c at 7000c400, whereas U-Boot has that I2C controller routed to
> some fixed pinctrl setting, and is currently enabled. Thinking more about
> this, since the i2c-mux-pinctrl node won't currently be processed by U-Boot
> in any way, since there is no driver for it, that mux node shouldn't affect
> the I2C controller's operation any way in U-Boot, so everything should work
> out fine.
>
> tegra20-ventana.dts has an i2c-mux-pinctrl node in the kernel DT, but the
> I2C controller isn't enabled in U-Boot, so there should be no possibility of
> regression.
>
> tegra20-tamonten.dtsi already has the i2c-mux-pinctrl node in the U-Boot DT
> without issue.
>
>> I'd rather have the DT completely in sync, so far as can be done. We
>> have this merge window to find problems. I don't see a big benefit to
>> leaving stuff out...at least with other boards we've defaulted to just
>> bringing everything in.
>>
>> Are we mostly talking about the pinmux stuff?
>
>
> I guess keeping the DT completely in sync, or as close as possible, will
> simply future comparisons. However, I have the following concerns,
> especially just doing it all at once:
>
> 1) This likely enables a lot more devices. In particular, there are
> certainly I2C controllers enabled in some kernel DTs that aren't enabled in
> U-Boot DTs yet, since we simply haven't needed them. Likewise, we don't
> instantiate complete regulator drivers (at least for Tegra) in (m)any cases
> in U-Boot. In theory, this will not cause any issue. However, there might be
> bugs such as:
>
> * The clock driver doesn't correctly support/implement certain clocks/resets
> we haven't yet happened to use. This is quite likely.
>
> * I2C controller driver is broken and doesn't call the clock driver with the
> correct parameters to enable clock and release reset for some controllers we
> haven't used yet. This is less likely.
>
> * pinmux may not be set up correctly for controllers we haven't used yet.
> This is especially likely on older boards where U-Boot only partially
> programs the pinmux for controllers known to be used, rather than
> programming the entire thing at once to the final configuration. Hopefully
> this won't cause any issues, but in the worst case it could cause some
> individual controller to malfunction, which just perhaps could impact some
> other part of the system.
>
> * Hopefully any regulator driver doesn't touch the HW unless explicitly
> requested to by some client, so hopefully we don't end up with rails being
> explicitly disabled at boot, this preventing HW from operating when it
> worked fine without the driver.

The regulators are not used unless enabled, but they will be enabled
if a display is used.

I worry that what you are saying above is that we *need* a different
device tree from Linux. Would it not be better to make it the same and
then fix any problems we discover?

>
> 2) There are some bindings that are different between U-Boot and the kernel.
> One obvious example is the Tegra USB controller, which has a single "usb"
> node in U-Boot but separate "usb" and "usb-phy" nodes in the kernel. This
> change doesn't look backwards-compatible, since e.g. the vbus-supply node
> moved from the "usb" node (which U-Boot currently processes) to the
> "usb-phy" node (which U-Boot does not know about).
>
> There are probably other more minor examples of similar issues.

Hmm well that's the sort of thing I'd like to tidy up.

>
> 3) Having all HW represented in the DTs in U-Boot is certainly a change in
> policy at least for Tegra. I hope it won't give the impression incorrect
> that U-Boot actually processes all those DT nodes and uses them as an
> information source. This is mainly just a mind-set change though, so
> shouldn't be too much of an issue.
>
> To address your last question above: pinctrl is one obvious example where
> this wouldn't be true. Regulators are another. Neither of those currently
> have any DT integration in U-Boot, for Tegra at least. Clocks and resets are
> only partially integrated with DT; the clock/reset IDs are parsed from
> properties in client nodes, but the provider side nodes are entirely
> ignored.

I'm hoping that you will create a pinctrl driver. Regulators are well
supported in U-Boot now - please see drivers/power/regulator.

>
>
> Due to all that, I'd still strongly prefer this patch only sync the
> display-related nodes in order to limit and possible fall-out to display
> functionality; the topic of the series.
>
> I'm fine with syncing the other nodes too, where possible. However, I'd like
> to see the sync split up into a variety of separate patches, likely based on
> node/HW type, to make "git bisect" easier in the face of any problems that
> crop up. Nothing would be more annoying than trying to debug an issue with
> display not working but being unable to do so because a new I2C controller's
> driver was causing the system to hard-hang by touching an unclocked
> register. Equally, just blindly syncing the entire DT content isn't going to
> work e.g. due to the USB binding differences I mentioned.
>
> In summary, perhaps we can have a patch series like:
>
> * Add/update all I2C nodes
> * Add/update all MMC nodes
> * Add/update all USB nodes
> * Add/update all PCIe nodes
> * Add/update all host1x/display/LCD/... nodes
> * Add/update any misc nodes
> * Add all nodes for which we know there's no kernel driver
>
> That will make it much easier to debug any problems that do arise.

OK I'll take a look at this. Really I wish the Tegra maintainer would
do this :-)

Regards,
Simon

  reply	other threads:[~2016-05-13  3:11 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-05-08 22:55 [U-Boot] [PATCH v2 0/6] tegra: Move tegra20 towards the 'new' display bindings Simon Glass
2016-05-08 22:55 ` [U-Boot] [PATCH v2 1/6] errno: Add copyright header and header guard Simon Glass
2016-05-08 22:55 ` [U-Boot] [PATCH v2 2/6] errno: Allow errno_str() to be used without CONFIG_ERRNO_STR Simon Glass
2016-05-08 22:55 ` [U-Boot] [PATCH v2 3/6] tegra: dts: Sync tegra20 device tree files with Linux Simon Glass
2016-05-09 17:09   ` Stephen Warren
2016-05-09 19:26     ` Simon Glass
2016-05-10 17:45       ` Stephen Warren
2016-05-13  3:11         ` Simon Glass [this message]
2016-05-08 22:55 ` [U-Boot] [PATCH v2 4/6] video: tegra: Move to using simple-panel and pwm-backlight Simon Glass
2016-05-08 22:55 ` [U-Boot] [PATCH v2 5/6] tegra: video: Always use write-through cache on LCD Simon Glass
2016-05-08 22:55 ` [U-Boot] [PATCH v2 6/6] fdt: Drop some unused compatible strings Simon Glass
2016-05-09 16:53 ` [U-Boot] [PATCH v2 0/6] tegra: Move tegra20 towards the 'new' display bindings Stephen Warren

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAPnjgZ3EjESrE847ZVG8+NKtCgG+dO-6qKHjCtW1Nk4HQf1O3w@mail.gmail.com \
    --to=sjg@chromium.org \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.