All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stephen Warren <swarren@nvidia.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 10/14] tegra: usb: Add support for USB peripheral
Date: Mon, 28 Nov 2011 12:21:01 -0700	[thread overview]
Message-ID: <4ED3DF1D.6080009@nvidia.com> (raw)
In-Reply-To: <1322106896-23054-11-git-send-email-sjg@chromium.org>

On 11/23/2011 08:54 PM, Simon Glass wrote:
> This adds basic support for the Tegra2 USB controller. Board files should
> call board_usb_init() to set things up.

Just a very brief review:

> +/* Put the port into host mode (this only works for USB1) */
> +static void set_host_mode(struct usb_ctlr *usbctlr)
> +{
> +       /* Check whether remote host from USB1 is driving VBus */
> +       if (readl(&usbctlr->phy_vbus_sensors) & VBUS_VLD_STS)
> +               return;
> +
> +       /*
> +        * If not driving, we set GPIO USB1_VBus_En. Seaboard platform uses
> +        * PAD SLXK (GPIO D.00) as USB1_VBus_En Config as GPIO
> +        */
> +       gpio_direction_output(GPIO_PD0, 1);

The GPIO to use here needs to be parameterized; there's no reason to
believe it'll be the same on all boards (or even that boards will have
any such GPIO).

> +/* Put our ports into host mode */
> +void usb_set_host_mode(void)
> +{
> +       if (host_dev_ctlr)
> +               set_host_mode(host_dev_ctlr);
> +}

Why not just call set_host_mode() directly from board_usb_init()?

> +#ifndef CONFIG_OF_CONTROL
> +static int probe_port(struct usb_ctlr *usbctlr, const int params[])
> +{
> +       enum periph_id id;
> +       int utmi = 0;
> +
> +       /*
> +        * Get the periph id. Port 1 has an internal transceiver, port 3 is
> +        * external
> +        */
> +       switch ((u32)usbctlr) {
> +       case TEGRA_USB1_BASE:
> +               id = PERIPH_ID_USBD;
> +               break;
> +
> +       case TEGRA_USB3_BASE:
> +               id = PERIPH_ID_USB3;
> +               utmi = 1;
> +               break;
> +
> +       default:
> +               printf("tegrausb: probe_port: no such port %p\n", usbctlr);
> +               return -1;
> +       }

What about the other port (USB2)?

> +#ifdef CONFIG_OF_CONTROL
> +int fdt_decode_usb(const void *blob, int node, unsigned osc_frequency_mhz,
> +                  struct fdt_usb *config)
> +{
> +       int clk_node = 0, rate;
> +
> +       /* Find the parameters for our oscillator frequency */
> +       do {
> +               clk_node = fdt_node_offset_by_compatible(blob, clk_node,
> +                                       "nvidia,tegra20-usbparams");
> +               if (clk_node < 0) {
> +                       debug("Cannot find USB params for clock %u",
> +                             osc_frequency_mhz);
> +                       return -FDT_ERR_NOTFOUND;
> +               }
> +               rate = fdtdec_get_int(blob, clk_node, "osc-frequency", 0);
> +       } while (rate != osc_frequency_mhz);
> +
> +       config->reg = (struct usb_ctlr *)fdtdec_get_addr(blob, node, "reg");
> +       config->host_mode = fdtdec_get_bool(blob, node, "support-host-mode");

Property "support-host-mode" isn't something that's supported by the
kernel binding, and needs discussion/ack there.

> +       config->utmi = fdtdec_lookup_phandle(blob, node, "utmi") >= 0;

In the kernel DT binding, this is property "phy_type" with legal values
"utmi" or "ulpi."

> +       config->enabled = fdtdec_get_is_enabled(blob, node);
> +       config->periph_id = fdtdec_get_int(blob, node, "periph-id", -1);

periph-id is a U-Boot specific concept, not HW description. The DT
shouldn't contain that value.

> +       if (config->periph_id == -1)
> +               return -FDT_ERR_NOTFOUND;
> +
> +       return fdtdec_get_int_array(blob, clk_node, "params", config->params,
> +                       PARAM_COUNT);

Property "params" (which should probably be named something better
anyway) isn't something that's supported by the kernel binding, and
needs discussion/ack there. Instead, I suggest following the kernel's
approach for now - don't specify these PHY parameters in the binding,
but rather just apply the defaults, which are apparently suitable for
all the boards supported by the mainline kernel at least.


> +int board_usb_init(const void *blob)
> +{
> +#ifdef CONFIG_OF_CONTROL
> +       struct fdt_usb config;
> +       int clk_done = 0;
> +       int node, upto = 0;
> +       unsigned osc_freq = clock_get_rate(CLOCK_ID_OSC);
> +
> +       do {
> +               node = fdtdec_next_alias(blob, "usb",
> +                                        COMPAT_NVIDIA_TEGRA20_USB, &upto);

Why only initialize USB controllers with aliases? Surely this should
enumerate all nodes with a specific compatible flag?

> +               /* The first port we find gets to set the clocks */

Ick.

> +       /* Set up our two ports */
> +#ifdef CONFIG_TEGRA_USB1_HOST
> +       host_dev_ctlr = (struct usb_ctlr *)TEGRA_USB1_BASE;
> +#endif

That port is always the host/device switchable controller. Why not
always make that assignment? The issue here is probably that
set_host_mode() isn't suitable for all boards. The solution seems to be
to fix that.

-- 
nvpublic

  reply	other threads:[~2011-11-28 19:21 UTC|newest]

Thread overview: 79+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-11-24  3:54 [PATCH 01/14] fdt: Tidy up a few fdtdec problems Simon Glass
2011-11-24  3:54 ` [U-Boot] " Simon Glass
2011-11-24  3:54 ` [PATCH 03/14] arm: fdt: Ensure that an embedded fdt is word-aligned Simon Glass
2011-11-24  3:54   ` [U-Boot] " Simon Glass
     [not found] ` <1322106896-23054-2-git-send-email-sjg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
2011-11-24  3:54   ` [PATCH 02/14] fdt: Add functions to access phandles, arrays and bools Simon Glass
2011-11-24  3:54     ` [U-Boot] " Simon Glass
     [not found]     ` <1322106896-23054-3-git-send-email-sjg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
2011-11-28 18:41       ` Stephen Warren
2011-11-28 18:41         ` [U-Boot] " Stephen Warren
     [not found]         ` <4ED3D5DC.10502-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2011-11-29  5:12           ` David Gibson
2011-11-29  5:12             ` [U-Boot] " David Gibson
2011-12-02  1:01         ` Simon Glass
2011-12-02  1:01           ` [U-Boot] " Simon Glass
     [not found]           ` <CAPnjgZ29tsNXd1+1eXdTHRjgh_MQJrXoc23_oqO9UPJ73mu7ZA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2011-12-02 15:55             ` Stephen Warren
2011-12-02 15:55               ` [U-Boot] " Stephen Warren
2011-12-02 16:38               ` Simon Glass
2011-12-02 16:38                 ` [U-Boot] " Simon Glass
2011-12-02  3:33         ` Jerry Van Baren
2011-12-02  3:33           ` [U-Boot] " Jerry Van Baren
2011-12-02  4:58           ` Simon Glass
2011-12-02  4:58             ` [U-Boot] " Simon Glass
2011-12-02 17:22             ` Jerry Van Baren
2011-12-02 17:22               ` [U-Boot] " Jerry Van Baren
2011-12-02 18:12               ` Simon Glass
2011-12-02 18:12                 ` [U-Boot] " Simon Glass
2011-11-24  3:54   ` [PATCH 04/14] arm: fdt: Add skeleton device tree file Simon Glass
2011-11-24  3:54     ` [U-Boot] " Simon Glass
2011-11-24  3:54   ` [PATCH 05/14] tegra: fdt: Add Tegra2x " Simon Glass
2011-11-24  3:54     ` [U-Boot] " Simon Glass
     [not found]     ` <1322106896-23054-6-git-send-email-sjg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
2011-11-28 18:56       ` Stephen Warren
2011-11-28 18:56         ` [U-Boot] " Stephen Warren
2011-12-02  1:24         ` Simon Glass
2011-12-02  1:24           ` [U-Boot] " Simon Glass
     [not found]           ` <CAPnjgZ11cFm15E9MHXno_YGp0NxdOHhGBavYbQBP5Nu_TOtx7A-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2011-12-02 15:58             ` Stephen Warren
2011-12-02 15:58               ` [U-Boot] " Stephen Warren
2011-12-02 16:47               ` Simon Glass
2011-12-02 16:47                 ` [U-Boot] " Simon Glass
2011-11-24  3:54   ` [PATCH 07/14] tegra: fdt: Add initial device tree definitions for USB ports Simon Glass
2011-11-24  3:54     ` [U-Boot] " Simon Glass
2011-11-24  3:54   ` [PATCH 14/14] tegra: fdt: Enable FDT support for Seaboard Simon Glass
2011-11-24  3:54     ` [U-Boot] " Simon Glass
2011-11-28 18:33   ` [PATCH 01/14] fdt: Tidy up a few fdtdec problems Stephen Warren
2011-11-28 18:33     ` [U-Boot] " Stephen Warren
     [not found]     ` <4ED3D3F2.8070302-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2011-11-29  1:10       ` David Gibson
2011-11-29  1:10         ` [U-Boot] " David Gibson
2011-12-01 20:59     ` Simon Glass
2011-12-01 20:59       ` [U-Boot] " Simon Glass
2011-11-24  3:54 ` [PATCH 06/14] tegra: fdt: Add device tree file for Tegra2 Seaboard Simon Glass
2011-11-24  3:54   ` [U-Boot] " Simon Glass
2011-11-24  3:54 ` [U-Boot] [PATCH 08/14] tegra: usb: Add USB definitions " Simon Glass
2011-11-24  3:54 ` [U-Boot] [PATCH 09/14] tegra: usb: Add support for data alignment and txfifo threshold Simon Glass
2011-11-28 19:05   ` Stephen Warren
2011-12-02  1:42     ` Simon Glass
2011-11-24  3:54 ` [U-Boot] [PATCH 10/14] tegra: usb: Add support for USB peripheral Simon Glass
2011-11-28 19:21   ` Stephen Warren [this message]
2011-12-02  1:51     ` Simon Glass
2011-12-02 16:10       ` Stephen Warren
2011-12-02 17:00         ` Simon Glass
2011-12-02 20:40           ` Stephen Warren
2011-12-02 23:07             ` Simon Glass
2011-12-03  0:59     ` Simon Glass
2011-12-05 21:33       ` Stephen Warren
2011-12-05 21:46         ` Simon Glass
2011-12-05 22:15           ` Stephen Warren
2011-12-05 23:35             ` Simon Glass
2011-12-06  0:17               ` Stephen Warren
2011-12-06  1:14                 ` Simon Glass
2011-12-06 20:42                   ` Stephen Warren
2011-12-06 21:23                     ` Simon Glass
     [not found]                       ` <CAPnjgZ1G+mv6uv8SrdMm7DoqFjeeyVHYv6nbQxn9qixfbQMGvA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2011-12-07 23:46                         ` Stephen Warren
2011-12-07 23:46                           ` [U-Boot] " Stephen Warren
2011-12-08 21:24                           ` Simon Glass
2011-12-08 21:24                             ` [U-Boot] " Simon Glass
     [not found]                             ` <CAPnjgZ0AuBNkYKN0JHQyc7DdzwUSZivR+Dv2BkiFsKQBNMeP8A-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2011-12-12 18:18                               ` Stephen Warren
2011-12-12 18:18                                 ` [U-Boot] " Stephen Warren
2011-12-12 18:42                                 ` Simon Glass
2011-12-12 18:42                                   ` [U-Boot] " Simon Glass
2011-11-24  3:54 ` [U-Boot] [PATCH 11/14] tegra: usb: Add USB support to nvidia boards Simon Glass
2011-11-24  3:54 ` [U-Boot] [PATCH 12/14] tegra: usb: Add common USB defines for tegra2 boards Simon Glass
2011-11-24  3:54 ` [U-Boot] [PATCH 13/14] tegra: usb: Enable USB on 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=4ED3DF1D.6080009@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 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.