From: Stephen Warren <swarren@nvidia.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v2 09/17] tegra: usb: fdt: Add additional device tree definitions for USB ports
Date: Tue, 06 Dec 2011 13:28:54 -0700 [thread overview]
Message-ID: <4EDE7B06.7060401@nvidia.com> (raw)
In-Reply-To: <CAPnjgZ1J_cOS_E+ZiDoZUh79V7LUFzVkx-0nhbPTDwuGCGvDnQ@mail.gmail.com>
On 12/05/2011 05:55 PM, Simon Glass wrote:
> On Mon, Dec 5, 2011 at 3:25 PM, Stephen Warren <swarren@nvidia.com> wrote:
>> On 12/02/2011 07:11 PM, Simon Glass wrote:
>>> This adds peripheral IDs and timing information to the USB part of the
>>> device tree for U-Boot.
>>>
>>> The peripheral IDs provide easy access to clock registers. We will likely
>>> remove this in favor of a full clock tree when it is available in the
>>> kernel (but probably still retain the peripheral ID, just move it into
>>> a clock node).
>>>
>>> The USB timing information does apparently vary between boards sometimes,
>>> so is include in the fdt for convenience.
>>
>> Which parts vary? Most of it is PLL configuration, and it seems
>> basically impossible for that to vary yet still create the correct
>> output frequency.
>
> See here for T30 differences, for example.
>
> https://gerrit.chromium.org/gerrit/#patch,sidebyside,12440,1,board/nvidia/cardhu/tegra30.dtsi
OK, so that varies by SoC not board.
>>> +/* This table has USB timing parameters for each Oscillator frequency we
>>> + * support. There are four sets of values:
>>> + *
>>> + * 1. PLLU configuration information (reference clock is osc/clk_m and
>>> + * PLLU-FOs are fixed at 12MHz/60MHz/480MHz).
>>> + *
>>> + * Reference frequency 13.0MHz 19.2MHz 12.0MHz 26.0MHz
>>> + * ----------------------------------------------------------------------
>>> + * DIVN 960 (0x3c0) 200 (0c8) 960 (3c0h) 960 (3c0)
>>> + * DIVM 13 (0d) 4 (04) 12 (0c) 26 (1a)
>>> + * Filter frequency (MHz) 1 4.8 6 2
>>> + * CPCON 1100b 0011b 1100b 1100b
>>> + * LFCON0 0 0 0 0
>>> + *
>>> + * 2. PLL CONFIGURATION & PARAMETERS for different clock generators:
>>> + *
>>> + * Reference frequency 13.0MHz 19.2MHz 12.0MHz 26.0MHz
>>> + * ---------------------------------------------------------------------------
>>> + * PLLU_ENABLE_DLY_COUNT 02 (0x02) 03 (03) 02 (02) 04 (04)
>>> + * PLLU_STABLE_COUNT 51 (33) 75 (4B) 47 (2F) 102 (66)
>>> + * PLL_ACTIVE_DLY_COUNT 05 (05) 06 (06) 04 (04) 09 (09)
>>> + * XTAL_FREQ_COUNT 127 (7F) 187 (BB) 118 (76) 254 (FE)
>>
>> Those two sets of data seem like they should simply be part of the clock
>> driver. Some part of the system boot or USB init process needs to say
>> "enable the USB clocks", and that code needs to write those hard-coded
>> values into the relevant clock registers (or calculate them at run-time;
>> whatever). This stuff can't vary by board.
>
> We don't have a USB clock driver. This driver is in CPU code, so I am
> not suggesting that it varies by board, only by SOC. This stuff is in
> the SOC dts.
>>
>>> + * 3. Debounce values IdDig, Avalid, Bvalid, VbusValid, VbusWakeUp, and
>>> + * SessEnd. Each of these signals have their own debouncer and for each of
>>> + * those one out of two debouncing times can be chosen (BIAS_DEBOUNCE_A or
>>> + * BIAS_DEBOUNCE_B).
>>> + *
>>> + * The values of DEBOUNCE_A and DEBOUNCE_B are calculated as follows:
>>> + * 0xffff -> No debouncing at all
>>> + * <n> ms = <n> *1000 / (1/19.2MHz) / 4
>>> + *
>>> + * So to program a 1 ms debounce for BIAS_DEBOUNCE_A, we have:
>>> + * BIAS_DEBOUNCE_A[15:0] = 1000 * 19.2 / 4 = 4800 = 0x12c0
>>> + *
>>> + * We need to use only DebounceA for BOOTROM. We don't need the DebounceB
>>> + * values, so we can keep those to default.
>>> + *
>>> + * a4. The 20 microsecond delay after bias cell operation.
>>
>> ^ typo
>>
>>> + * Reference frequency 13.0MHz 19.2MHz 12.0MHz 26.0MHz
>>
>> If this data varies at all, then those two sets of data seem
>> port-specific to me, and hence should be moved into a per-port property.
>> Having a single global set of parameters that gets applied to all ports
>> at once doesn't make sense to me, if the data varies.
>
> The hardware doesn't support this does it?
It looks like it doesn't; there are two debounce count registers and
each port (or something) can select which of those two debounce values
is used.
>> I imagine the values are board specific too, and hence shouldn't be in
>> tegra20.dtsi but rather in tegra-seaboard.dts.
>
> I believe they vary by SOC, not board.
>> The values in these fields should be specific in a way that's agnostic
>> to the reference clock, e.g. as a number of mS/nS. That way, you'd just
>> specify the single set of values to use, and the driver would do the
>> calculations to map the time domain into the reference-clock-specific
>> values to put into the registers.
>
> Yes I agree. I don't have time to write this. Shall we go forward with
> what we have, and Nvidia can tidy up later?
I definitely oppose that; the current bindings are simply not
conceptually correct. I'm opposed to merging something that's known to
be broken even if there's a clear intent/timeframe to fix it; it'd be
better to just defer merging it. (Well, even better to fix it to be
right an merge it!)
As a blanket statement, the USB driver shouldn't programming PLLs. This
applies whether the PLL configuration is hard-coded in the driver, is
parsed from DT, or whatever. We should definitely remove all the PLL
related stuff from the DT bindings, and have some core or board specific
code set up the PLLs. That code can be replaced by DT clock parsing when
its ready. The USB driver shouldn't be impacted by that change at all.
Re: the debounce values: The kernel doesn't touch those registers as far
as I can tell and everything works. I'd suggest completely removing that
from the DT bindings for now. It's quite possible it only works because
the HW register defaults are correct (or at least work OK) for a 12MHz
reference crystal, and all boards supported by the kernel just happen to
use that reference frequency, but I think the same is probably true for
(Tegra boards in) U-Boot right now too.
Taking that approach, you can completely remove the contentious parts of
the DT binding and defer the problem until more infra-structure is in
place to support those features.
>>> +
>>> usb at c5000000 {
>>> compatible = "nvidia,tegra20-ehci", "usb-ehci";
>>> reg = <0xc5000000 0x4000>;
>>> interrupts = < 52 >;
>>> phy_type = "utmi";
>>> + periph-id = <22>; // PERIPH_ID_USBD
>>
>> Given this is a temporary U-Boot-specific solution, can the property be
>> named u-boot,periph-id so it's obvious that when writing a .dts for the
>> kernel only, you don't care about this value.
>
> ok. I suggest the kernel does something similar.
The kernel will use the standardized clock bindings once they're ready
and we convert Tegra over to use them. The kernel is extremely unlikely
to ever use "periph-id" or "u-boot,periph-id".
Right now, the kernel's clock driver contains a mapping table from
device name (e.g. tegra-ehci.2) to clock name (e.g. usb3). This allows
the kernel USB driver to work without any explicit periph-id or similar
DT property.
I'd strongly suggest that's the cleanest transition plan for U-Boot
until the clock bindings are complete, and they are added to
tegra20.dtsi, and U-Boot can parse them, since it avoids temporarily
defining DT properties to WAR the issue, and then yanking them out
later. This mapping would be a part of the core Tegra SoC code,
completely isolated from the USB driver.
--
nvpublic
next prev parent reply other threads:[~2011-12-06 20:28 UTC|newest]
Thread overview: 55+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-12-03 2:11 [U-Boot] [PATCH v2 0/17] tegra: Add fdt definitions and USB driver Simon Glass
2011-12-03 2:11 ` [U-Boot] [PATCH v2 01/17] fdt: Tidy up a few fdtdec problems Simon Glass
2011-12-05 21:27 ` Stephen Warren
2011-12-05 21:40 ` Simon Glass
2011-12-05 22:07 ` Stephen Warren
2011-12-05 22:11 ` Simon Glass
2011-12-05 22:18 ` Scott Wood
2011-12-05 22:25 ` Stephen Warren
2011-12-05 22:53 ` Simon Glass
2011-12-03 2:11 ` [U-Boot] [PATCH v2 02/17] fdt: Add functions to access phandles, arrays and bools Simon Glass
2011-12-05 21:59 ` Stephen Warren
2011-12-05 22:07 ` Simon Glass
2011-12-05 22:36 ` Stephen Warren
2011-12-05 23:56 ` Simon Glass
2011-12-03 2:11 ` [U-Boot] [PATCH v2 03/17] Add gpio_request() to asm-generic header Simon Glass
2011-12-03 2:11 ` [U-Boot] [PATCH v2 04/17] fdt: Add basic support for decoding GPIO definitions Simon Glass
2011-12-05 21:46 ` Stephen Warren
2011-12-05 21:56 ` Simon Glass
2011-12-05 22:22 ` Stephen Warren
2011-12-05 22:52 ` Simon Glass
2011-12-05 23:03 ` Stephen Warren
2011-12-05 23:29 ` Simon Glass
2011-12-06 3:55 ` Mike Frysinger
2011-12-07 1:21 ` Simon Glass
2011-12-03 2:11 ` [U-Boot] [PATCH v2 05/17] arm: fdt: Ensure that an embedded fdt is word-aligned Simon Glass
2011-12-03 2:11 ` [U-Boot] [PATCH v2 06/17] arm: fdt: Add skeleton device tree file from kernel Simon Glass
2011-12-03 2:11 ` [U-Boot] [PATCH v2 07/17] tegra: fdt: Add Tegra2x " Simon Glass
2011-12-03 2:11 ` [U-Boot] [PATCH v2 08/17] tegra: fdt: Add device tree file for Tegra2 Seaboard " Simon Glass
2011-12-03 2:11 ` [U-Boot] [PATCH v2 09/17] tegra: usb: fdt: Add additional device tree definitions for USB ports Simon Glass
2011-12-05 23:25 ` Stephen Warren
2011-12-06 0:55 ` Simon Glass
2011-12-06 20:28 ` Stephen Warren [this message]
2011-12-06 21:09 ` Simon Glass
2011-12-07 23:36 ` Stephen Warren
2011-12-08 21:10 ` Simon Glass
2011-12-12 18:13 ` Stephen Warren
2011-12-12 18:53 ` Simon Glass
2011-12-03 2:11 ` [U-Boot] [PATCH v2 10/17] tegra: usb: fdt: Add USB definitions for Tegra2 Seaboard Simon Glass
2011-12-05 23:26 ` Stephen Warren
2011-12-03 2:11 ` [U-Boot] [PATCH v2 11/17] usb: Add support for data alignment Simon Glass
2011-12-04 11:13 ` Remy Bohmer
2011-12-06 2:38 ` Simon Glass
2011-12-10 16:04 ` Remy Bohmer
2011-12-10 18:58 ` Simon Glass
2011-12-03 2:11 ` [U-Boot] [PATCH v2 12/17] usb: Add support for txfifo threshold Simon Glass
2011-12-05 23:32 ` Stephen Warren
2011-12-06 2:03 ` Simon Glass
2011-12-06 18:58 ` Stephen Warren
2011-12-06 19:24 ` Simon Glass
2011-12-03 2:11 ` [U-Boot] [PATCH v2 13/17] tegra: usb: Add support for Tegra USB peripheral Simon Glass
2011-12-04 11:12 ` Remy Bohmer
2011-12-03 2:11 ` [U-Boot] [PATCH v2 14/17] tegra: usb: Add USB support to nvidia boards Simon Glass
2011-12-03 2:11 ` [U-Boot] [PATCH v2 15/17] tegra: usb: Add common USB defines for tegra2 boards Simon Glass
2011-12-03 2:11 ` [U-Boot] [PATCH v2 16/17] tegra: usb: Enable USB on Seaboard Simon Glass
2011-12-03 2:11 ` [U-Boot] [PATCH v2 17/17] tegra: fdt: Enable FDT support for Seaboard 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=4EDE7B06.7060401@nvidia.com \
--to=swarren@nvidia.com \
--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