From: Stephen Warren <swarren@wwwdotorg.org>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 55/60] i2c: tegra: move pinmux setup to board files
Date: Wed, 27 Apr 2016 11:16:02 -0600 [thread overview]
Message-ID: <5720F3D2.6090707@wwwdotorg.org> (raw)
In-Reply-To: <CAPnjgZ1B3gDujanhKYw5b6BX47eit5dxRmgFMKTbckB9_xJnUQ@mail.gmail.com>
On 04/27/2016 10:58 AM, Simon Glass wrote:
> Hi Stephen,
>
> On 27 April 2016 at 10:24, Stephen Warren <swarren@wwwdotorg.org> wrote:
>> On 04/27/2016 09:12 AM, Simon Glass wrote:
>>>
>>> Hi Stephen,
>>>
>>> On 19 April 2016 at 14:59, Stephen Warren <swarren@wwwdotorg.org> wrote:
>>>>
>>>> From: Stephen Warren <swarren@nvidia.com>
>>>>
>>>> Remove funcmux calls from the Tegra I2C driver. Knowledge of pinmux
>>>> setup must come from either board files or DT; it should not be embedded
>>>> into board-agnostic driver code. The DT pinmux bindings do not allow
>>>> drivers to derive funcmux-style information, since the DT bindings are
>>>> pin-based whereas funcmux is controller-based, so there's no good way to
>>>> call the existing funcmux APIs from drivers. Converting drivers to use a
>>>> new (as yet non-existent in U-Boot) API that pulls pinmux information
>>>> from
>>>> DT isn't useful for Tegra, since Tegra's DT files don't contain any
>>>> per-device pinmux tables, so this would simply be extra code that has no
>>>> effect; doesn't actually set up the pinmux. We are left with moving the
>>>> pinmux setup functionality into board files. In theory the board files
>>>> could be converted later to use DT, but that would be a separate change.
>>>>
>>>> Signed-off-by: Stephen Warren <swarren@nvidia.com>
>>>> ---
>>>> board/avionic-design/common/tamonten.c | 5 +++++
>>>> board/nvidia/seaboard/seaboard.c | 3 +++
>>>> board/nvidia/whistler/whistler.c | 1 +
>>>> board/toradex/colibri_t20/colibri_t20.c | 3 +++
>>>> drivers/i2c/tegra_i2c.c | 19 -------------------
>>>> 5 files changed, 12 insertions(+), 19 deletions(-)
>>>
>>>
>>> This should use driver model, which handles pinmux automatically if
>>> you have a pinctrl driver.
>>
>>
>> Can you define "automatic"? I don't understand exactly which benefit you're
>> describing there.
>
> When you probe a device, its pinmux is set up automatically, so the
> explicit funcmux calls can go away.
So the device here would be the pin controller device itself, not
individual I2C/SPI/SD/... devices.
That's because the Tegra HW does not support[1] dynamic or partial
pinmux configuration. As such, we need to program the entire pinmux at
once early during boot, not piece-by-piece as the individual U-Boot
devices that use individual pins are probed. This is why for example the
kernel DT contains a single pinmux table that the pin controller driver
sets up at boot (with identical configuration to what U-Boot sets up, so
it's a no-op), rather than splitting it into per-device chunks.
As such, there isn't any need for, say, an I2C device probe to call into
pinmux at all; the pinmux would already have been set up entirely during
early boot, and hence no I2C-specific actions would be needed later.
So I'm not sure what benefit conversion to DM pinctrl has here. Sure it
means things get set up the same way as with any other pinctrl device or
SoC, but this is early SoC-specific configuration, without any
interaction with common or driver code besides being implemented via
some standard core->board callbacks/hooks. It seems reasonable to just
program the pinmux directly using SoC-specific APIs rather than having
to add a layer of abstraction on top of it just so we can route it
through DM. In other words, what's already done by this patch series.
Besides, I believe the programming happens before a DM pinctrl device
would be ready, doesn't it, given it happens from
tegra_board_early_init_f()? Or, would we be able to fully probe a DM
device at that point? The UART console setup is even earlier, in SPL
pre-T210, where I don't think we even have DM enabled.
[1] Yes, the HW registers can in practice be programmed bit-by-bit,
simply because there are a number of registers and the SoC doesn't have
a way to physically force SW to write to each of those registers.
"Support" here refers to what the ASIC team will guarantee will work
correctly without causing glitches or similar issues. There are a few
limited exceptions, e.g. console UART muxing on its own has been at
least partially thought out (although there are still conflicts in some
cases on older chips), and IO controllers that may contain boot media
are generally OK to mux on their own. However, for anything else, i.e.
the majority of cases, the supported model is to program everything
up-front in one go, and not change it later. Sticking to that general
model in absolutely all cases removes special cases and simplifies the code.
next prev parent reply other threads:[~2016-04-27 17:16 UTC|newest]
Thread overview: 177+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-04-19 20:58 [U-Boot] [PATCH 00/60] ARM: tegra: cleanup part 1 Stephen Warren
2016-04-19 20:58 ` [U-Boot] [PATCH 01/60] ARM: tegra: remove unused definitions in headers Stephen Warren
2016-04-20 19:25 ` Simon Glass
2016-04-24 10:20 ` Wolfgang Denk
2016-04-25 19:34 ` Stephen Warren
2016-04-25 21:46 ` Wolfgang Denk
2016-04-25 22:00 ` Stephen Warren
2016-04-25 21:54 ` Simon Glass
2016-04-25 22:02 ` Stephen Warren
2016-04-25 22:15 ` Simon Glass
2016-04-25 22:16 ` Tom Rini
2016-04-19 20:58 ` [U-Boot] [PATCH 02/60] mmc: tegra: move pad init into MMC driver Stephen Warren
2016-04-20 19:25 ` Simon Glass
2016-04-24 10:20 ` Wolfgang Denk
2016-04-25 19:42 ` Stephen Warren
2016-04-25 21:52 ` Wolfgang Denk
2016-04-25 22:37 ` Tom Rini
2016-04-25 22:43 ` Stephen Warren
2016-04-25 23:05 ` Tom Rini
2016-04-25 23:11 ` Stephen Warren
2016-04-25 23:26 ` Tom Rini
2016-04-25 23:34 ` Stephen Warren
2016-04-26 0:14 ` Tom Rini
2016-04-26 16:21 ` Stephen Warren
2016-04-26 18:15 ` Tom Rini
2016-04-26 18:09 ` Wolfgang Denk
2016-04-19 20:58 ` [U-Boot] [PATCH 03/60] mmc: tegra: move header file to driver directory Stephen Warren
2016-04-20 19:25 ` Simon Glass
2016-04-19 20:58 ` [U-Boot] [PATCH 04/60] mmc: tegra: move public header to arch/arm/mach-tegra/include Stephen Warren
2016-04-20 19:25 ` Simon Glass
2016-04-19 20:58 ` [U-Boot] [PATCH 05/60] pwm: tegra: move header file to driver directory Stephen Warren
2016-04-20 19:25 ` Simon Glass
2016-04-24 10:20 ` Wolfgang Denk
2016-04-25 19:47 ` Stephen Warren
2016-04-19 20:58 ` [U-Boot] [PATCH 06/60] i2c: " Stephen Warren
2016-04-20 4:48 ` Heiko Schocher
2016-04-20 19:25 ` Simon Glass
2016-04-19 20:58 ` [U-Boot] [PATCH 07/60] usb: " Stephen Warren
2016-04-20 19:25 ` Simon Glass
2016-04-19 20:58 ` [U-Boot] [PATCH 08/60] video: " Stephen Warren
2016-04-20 19:26 ` Simon Glass
2016-04-19 20:58 ` [U-Boot] [PATCH 09/60] ARM: tegra: correct 64-bit DT unit addresses Stephen Warren
2016-04-20 19:26 ` Simon Glass
2016-04-19 20:58 ` [U-Boot] [PATCH 10/60] ARM: tegra: sort DT /aliases entries Stephen Warren
2016-04-20 19:26 ` Simon Glass
2016-04-19 20:58 ` [U-Boot] [PATCH 11/60] ARM: tegra: add DT alias for GPIO controller Stephen Warren
2016-04-20 19:26 ` Simon Glass
2016-04-19 20:58 ` [U-Boot] [PATCH 12/60] gpio: tegra: remove duplicate define Stephen Warren
2016-04-20 19:26 ` Simon Glass
2016-04-19 20:58 ` [U-Boot] [PATCH 13/60] ARM: tegra: sort some board file include directives Stephen Warren
2016-04-20 19:26 ` Simon Glass
2016-04-24 10:20 ` Wolfgang Denk
2016-04-25 19:54 ` Stephen Warren
2016-04-25 21:59 ` Wolfgang Denk
2016-04-25 23:22 ` Tom Rini
2016-04-26 16:18 ` Stephen Warren
2016-04-26 18:13 ` Wolfgang Denk
2016-04-26 18:20 ` Wolfgang Denk
2016-04-26 18:15 ` Tom Rini
2016-04-26 20:44 ` Stephen Warren
2016-04-26 23:29 ` Tom Rini
2016-04-26 16:23 ` Stephen Warren
2016-04-26 18:15 ` Tom Rini
2016-04-19 20:58 ` [U-Boot] [PATCH 14/60] ARM: tegra: use DT bindings for GPIO naming Stephen Warren
2016-04-20 19:26 ` Simon Glass
2016-04-19 20:58 ` [U-Boot] [PATCH 15/60] gpio: tegra: header file split Stephen Warren
2016-04-20 19:26 ` Simon Glass
2016-04-20 22:01 ` Stephen Warren
2016-04-21 14:11 ` Simon Glass
2016-04-21 16:40 ` Stephen Warren
2016-04-21 16:51 ` Simon Glass
2016-04-19 20:58 ` [U-Boot] [PATCH 16/60] ARM: tegra: migrate TEGRA_GPIO to Kconfig Stephen Warren
2016-04-20 19:26 ` Simon Glass
2016-04-19 20:58 ` [U-Boot] [PATCH 17/60] ARM: tegra: move apb_misc.h Stephen Warren
2016-04-20 19:26 ` Simon Glass
2016-04-20 21:56 ` Stephen Warren
2016-04-21 20:59 ` Simon Glass
2016-04-21 21:14 ` Stephen Warren
2016-04-19 20:58 ` [U-Boot] [PATCH 18/60] ARM: tegra: move fuse.h Stephen Warren
2016-04-22 18:30 ` Simon Glass
2016-04-19 20:58 ` [U-Boot] [PATCH 19/60] ARM: tegra: move gpu.h Stephen Warren
2016-04-22 18:30 ` Simon Glass
2016-04-19 20:59 ` [U-Boot] [PATCH 20/60] ARM: tegra: move pmc.h Stephen Warren
2016-04-22 18:31 ` Simon Glass
2016-04-19 20:59 ` [U-Boot] [PATCH 21/60] ARM: tegra: move scu.h Stephen Warren
2016-04-22 18:31 ` Simon Glass
2016-04-19 20:59 ` [U-Boot] [PATCH 22/60] ARM: tegra: move warmboot.h Stephen Warren
2016-04-22 18:31 ` Simon Glass
2016-04-19 20:59 ` [U-Boot] [PATCH 23/60] ARM: tegra: move xusb-padctl.h to <mach/> Stephen Warren
2016-04-22 18:31 ` Simon Glass
2016-04-19 20:59 ` [U-Boot] [PATCH 24/60] ARM: tegra: unify+move {board, sys_proto}.h " Stephen Warren
2016-04-22 18:31 ` Simon Glass
2016-04-19 20:59 ` [U-Boot] [PATCH 25/60] ARM: tegra: use consistently named include guards Stephen Warren
2016-04-22 18:31 ` Simon Glass
2016-04-19 20:59 ` [U-Boot] [PATCH 26/60] ARM: tegra: delete unused headers Stephen Warren
2016-04-22 18:32 ` Simon Glass
2016-04-19 20:59 ` [U-Boot] [PATCH 27/60] ARM: tegra: move emc.h Stephen Warren
2016-04-22 18:32 ` Simon Glass
2016-04-19 20:59 ` [U-Boot] [PATCH 28/60] ARM: tegra: move sdram_param.h Stephen Warren
2016-04-22 18:32 ` Simon Glass
2016-04-19 20:59 ` [U-Boot] [PATCH 29/60] ARM: tegra: move sysctr.h Stephen Warren
2016-04-22 18:32 ` Simon Glass
2016-04-19 20:59 ` [U-Boot] [PATCH 30/60] ARM: tegra: remove pmu.h Stephen Warren
2016-04-22 18:32 ` Simon Glass
2016-04-22 20:42 ` Stephen Warren
2016-04-19 20:59 ` [U-Boot] [PATCH 31/60] ARM: tegra: move powergate.h to <mach/> Stephen Warren
2016-04-22 18:33 ` Simon Glass
2016-04-19 20:59 ` [U-Boot] [PATCH 32/60] ARM: tegra: add SoC-specific include directory Stephen Warren
2016-04-22 18:32 ` Simon Glass
2016-04-19 20:59 ` [U-Boot] [PATCH 33/60] ARM: tegra: fix bug in Tegra20 flow.h Stephen Warren
2016-04-22 18:32 ` Simon Glass
2016-04-19 20:59 ` [U-Boot] [PATCH 34/60] ARM: tegra: move flow.h Stephen Warren
2016-04-22 18:32 ` Simon Glass
2016-04-19 20:59 ` [U-Boot] [PATCH 35/60] nyan-big: remove direct MC register access Stephen Warren
2016-04-22 18:33 ` Simon Glass
2016-04-19 20:59 ` [U-Boot] [PATCH 36/60] ARM: tegra: move mc.h Stephen Warren
2016-04-22 18:33 ` Simon Glass
2016-04-19 20:59 ` [U-Boot] [PATCH 37/60] ARM: tegra: move SDIOCFG_DRV* to pinmux.h Stephen Warren
2016-04-23 17:14 ` Simon Glass
2016-04-19 20:59 ` [U-Boot] [PATCH 38/60] ARM: tegra: remove tegra_get_chip() Stephen Warren
2016-04-23 17:14 ` Simon Glass
2016-04-25 19:25 ` Stephen Warren
2016-04-27 14:50 ` Simon Glass
2016-04-27 16:13 ` Stephen Warren
2016-04-29 14:02 ` Simon Glass
2016-04-29 16:27 ` Stephen Warren
2016-04-29 16:53 ` Simon Glass
2016-04-29 17:42 ` Simon Glass
2016-04-29 19:21 ` Stephen Warren
2016-05-01 19:16 ` Simon Glass
2016-04-19 20:59 ` [U-Boot] [PATCH 39/60] ARM: tegra: remove get_num_cpus() Stephen Warren
2016-04-19 20:59 ` [U-Boot] [PATCH 40/60] ARM: tegra: remove gp_padctrl.h Stephen Warren
2016-05-07 22:31 ` Simon Glass
2016-04-19 20:59 ` [U-Boot] [PATCH 41/60] ARM: tegra: remove tegra_get_sku_info() Stephen Warren
2016-05-07 22:31 ` Simon Glass
2016-04-19 20:59 ` [U-Boot] [PATCH 42/60] ARM: tegra: move EMC code to tegra20/ directory Stephen Warren
2016-05-07 22:31 ` Simon Glass
2016-04-19 20:59 ` [U-Boot] [PATCH 43/60] ARM: tegra: move PLLX configuration into SoC directories Stephen Warren
2016-05-07 22:31 ` Simon Glass
2016-04-19 20:59 ` [U-Boot] [PATCH 44/60] ARM: tegra: remove tegra_get_chip_sku() Stephen Warren
2016-05-07 22:31 ` Simon Glass
2016-04-19 20:59 ` [U-Boot] [PATCH 45/60] ARM: tegra: move custom pinmux.h to <mach/> Stephen Warren
2016-05-07 22:32 ` Simon Glass
2016-04-19 20:59 ` [U-Boot] [PATCH 46/60] ARM: tegra: add pinmux APIs to replace funcmux Stephen Warren
2016-05-07 22:32 ` Simon Glass
2016-04-19 20:59 ` [U-Boot] [PATCH 47/60] ARM: tegra: provide API for SPL code to init UART Stephen Warren
2016-05-07 22:32 ` Simon Glass
2016-04-19 20:59 ` [U-Boot] [PATCH 48/60] ARM: tegra: lay groundwork for board hook cleanup Stephen Warren
2016-04-19 20:59 ` [U-Boot] [PATCH 49/60] ARM: tegra: convert boards to new hooks Stephen Warren
2016-05-07 22:32 ` Simon Glass
2016-04-19 20:59 ` [U-Boot] [PATCH 50/60] ARM: tegra: remove unused includes Stephen Warren
2016-05-07 22:32 ` Simon Glass
2016-04-19 20:59 ` [U-Boot] [PATCH 51/60] ARM: tegra: move SPL-specific GPIO device to spl.c Stephen Warren
2016-05-07 22:32 ` Simon Glass
2016-04-19 20:59 ` [U-Boot] [PATCH 52/60] ARM: tegra: convert pin_mux_*() to new hooks Stephen Warren
2016-05-07 22:32 ` Simon Glass
2016-04-19 20:59 ` [U-Boot] [PATCH 53/60] tegra: keyboard: move pinmux setup to board files Stephen Warren
2016-05-07 22:32 ` Simon Glass
2016-04-19 20:59 ` [U-Boot] [PATCH 54/60] video: tegra: " Stephen Warren
2016-05-07 22:32 ` Simon Glass
2016-04-19 20:59 ` [U-Boot] [PATCH 55/60] i2c: " Stephen Warren
2016-04-27 15:12 ` Simon Glass
2016-04-27 16:24 ` Stephen Warren
2016-04-27 16:58 ` Simon Glass
2016-04-27 17:16 ` Stephen Warren [this message]
2016-04-29 14:02 ` Simon Glass
2016-04-19 20:59 ` [U-Boot] [PATCH 56/60] ARM: tegra: remove funcmux API Stephen Warren
2016-05-07 22:32 ` Simon Glass
2016-04-19 20:59 ` [U-Boot] [PATCH 57/60] ARM: tegra: don't access Boot Info Table from board code Stephen Warren
2016-05-07 22:32 ` Simon Glass
2016-04-19 20:59 ` [U-Boot] [PATCH 58/60] ARM: tegra: clean up board include statements Stephen Warren
2016-05-07 22:32 ` Simon Glass
2016-04-19 20:59 ` [U-Boot] [PATCH 59/60] ARM: tegra: unify+move tegra.h to mach-tegra/ Stephen Warren
2016-05-07 22:32 ` Simon Glass
2016-04-19 20:59 ` [U-Boot] [PATCH 60/60] ARM: tegra: move clock headers Stephen Warren
2016-05-07 22:32 ` Simon Glass
2016-05-07 22:32 ` [U-Boot] [PATCH 00/60] ARM: tegra: cleanup part 1 Simon Glass
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=5720F3D2.6090707@wwwdotorg.org \
--to=swarren@wwwdotorg.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox