diff options
author | Simon Glass <sjg@chromium.org> | 2011-06-08 15:54:38 -0700 |
---|---|---|
committer | Simon Glass <sjg@chromium.org> | 2011-08-29 10:39:20 -0700 |
commit | ca099194d8738dc7e1938911eff2d9b62d339bd3 (patch) | |
tree | 40c3a05a170b1354cdfdeb434c86296fe04cb112 /common/fdt_decode.c | |
parent | d14d93d41effdee008e4b0ef623853339b00c61c (diff) |
fdt: tegra2: Support USB config through FDT
This adds FDT configuration of USB ports.
BUG=chromium-os:11623
TEST=Build and boot u-boot; usb start; network boot
Change-Id: Ia3ea9f7ce816575dc0d99900a163d20e9cb65ecc
Reviewed-on: http://gerrit.chromium.org/gerrit/2348
Tested-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Anton Staaf <robotboy@chromium.org>
Diffstat (limited to 'common/fdt_decode.c')
-rw-r--r-- | common/fdt_decode.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/common/fdt_decode.c b/common/fdt_decode.c index 932cceb921f..e5a3ed5e59f 100644 --- a/common/fdt_decode.c +++ b/common/fdt_decode.c @@ -37,6 +37,7 @@ static const char *compat_names[COMPAT_COUNT] = { COMPAT(UNKNOWN, "<none>"), COMPAT(NVIDIA_SPI_UART_SWITCH, "nvidia,spi-uart-switch"), COMPAT(SERIAL_NS16550, "ns16550"), + COMPAT(NVIDIA_TEGRA20_USB, "nvidia,tegra250-usb"), }; /** @@ -387,3 +388,29 @@ int fdt_decode_lcd(const void *blob, struct fdt_lcd *config) config->frame_buffer = get_addr(blob, node, "frame-buffer"); return decode_gpios(blob, node, "gpios", config->gpios, FDT_LCD_GPIOS); } + +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,tegra250-usbparams"); + if (clk_node < 0) + return -FDT_ERR_MISSING; + rate = get_int(blob, clk_node, "osc-frequency", 0); + } while (rate != osc_frequency_mhz); + + config->reg = (struct usb_ctlr *)get_addr(blob, node, "reg"); + config->host_mode = get_int(blob, node, "host-mode", 0); + config->utmi = lookup_phandle(blob, node, "utmi") >= 0; + config->enabled = get_is_enabled(blob, node, 1); + config->periph_id = get_int(blob, node, "periph-id", -1); + if (config->periph_id == -1) + return -FDT_ERR_MISSING; + + return get_int_array(blob, clk_node, "params", config->params, + PARAM_COUNT); +} |