From 43a77c1aacb423d150135ad6049c12e4db193abd Mon Sep 17 00:00:00 2001 From: Rohith Seelaboyina Date: Mon, 9 Jan 2017 15:34:03 +0530 Subject: [PATCH] drivers: usb: xhci: raise sclk to 80 MHz Change-Id: I74b5565da16c103c50ca8aa918008f0a025f96cf Signed-off-by: Rohith Seelaboyina --- drivers/platform/tegra/tegra21_clocks.c | 1 + drivers/usb/host/xhci-tegra.c | 26 ++++++++++++++++++++++++++ drivers/usb/host/xhci-tegra.h | 2 ++ include/dt-bindings/clk/tegra210-clk.h | 1 + 4 files changed, 30 insertions(+) diff --git a/drivers/platform/tegra/tegra21_clocks.c b/drivers/platform/tegra/tegra21_clocks.c index f539d42..6bd6252 100644 --- a/drivers/platform/tegra/tegra21_clocks.c +++ b/drivers/platform/tegra/tegra21_clocks.c @@ -9596,6 +9596,7 @@ static struct clk tegra_list_clks[] = { SHARED_SCLK("usbd.sclk", "tegra-udc.0", "sclk", &tegra_clk_ahb, NULL, 0, 0, TEGRA210_CLK_ID_SBUS_USBD_USER), SHARED_SCLK("usb1.sclk", "tegra-ehci.0", "sclk", &tegra_clk_ahb, NULL, 0, 0, TEGRA210_CLK_ID_SBUS_USBD1_USER), SHARED_SCLK("usb2.sclk", "tegra-ehci.1", "sclk", &tegra_clk_ahb, NULL, 0, 0, TEGRA210_CLK_ID_SBUS_USBD2_USER), + SHARED_SCLK("xhci.sclk", "tegra-xhci", "sclk", &tegra_clk_ahb, NULL, 0, 0, TEGRA210_CLK_ID_SBUS_XHCI_USER), SHARED_SCLK("sdmmc4.sclk", "sdhci-tegra.3", "sclk", &tegra_clk_ahb, NULL, 0, 0, TEGRA210_CLK_ID_SBUS_SDMMC4_USER), SHARED_SCLK("wake.sclk", "wake_sclk", "sclk", &tegra_clk_sbus_cmplx, NULL, 0, 0, TEGRA210_CLK_ID_SBUS_WAKE_USER), SHARED_SCLK("camera.sclk", "vi", "sclk", &tegra_clk_sbus_cmplx, NULL, 0, 0, TEGRA210_CLK_ID_SBUS_CAMERA_USER), diff --git a/drivers/usb/host/xhci-tegra.c b/drivers/usb/host/xhci-tegra.c index d6560c7..df06de4 100644 --- a/drivers/usb/host/xhci-tegra.c +++ b/drivers/usb/host/xhci-tegra.c @@ -50,6 +50,7 @@ #include #include +#include #include "xhci-tegra.h" #include "xhci.h" @@ -1822,8 +1823,19 @@ static int tegra_xusb_partitions_clk_init(struct tegra_xhci_hcd *tegra) goto get_ss_clk_failed; } + tegra->sys_clk = clk_get(&pdev->dev, "sclk"); + if (IS_ERR(tegra->sys_clk)) { + dev_err(&pdev->dev, "Failed to get sys-clk\n"); + err = PTR_ERR(tegra->sys_clk); + tegra->sys_clk = NULL; + goto get_sys_clk_failed; + } + return 0; +get_sys_clk_failed: + tegra->ss_clk = NULL; + get_ss_clk_failed: tegra->host_clk = NULL; @@ -4861,10 +4873,24 @@ static int tegra_enable_xusb_clk(struct tegra_xhci_hcd *tegra, goto enable_emc_clk_failed; } + err = tegra_clk_prepare_enable(tegra->sys_clk); + if (err) { + dev_err(&pdev->dev, "Failed to get sys-clk\n"); + goto enable_sys_clk_failed; + } + err = clk_set_rate(tegra->sys_clk, 80000000); + mdelay(100); + dev_err(&pdev->dev, "clk rate of s-clk : %d\n", (int) err); + err = clk_get_rate(tegra->sys_clk); + dev_err(&pdev->dev, "clk rate of s-clk : %d\n", (int) err); + tegra->clock_enable_done = true; return 0; +enable_sys_clk_failed: + clk_disable(tegra->emc_clk); + enable_emc_clk_failed: clk_disable(tegra->ss_clk); diff --git a/drivers/usb/host/xhci-tegra.h b/drivers/usb/host/xhci-tegra.h index bde4025..22bc487 100644 --- a/drivers/usb/host/xhci-tegra.h +++ b/drivers/usb/host/xhci-tegra.h @@ -410,6 +410,8 @@ struct tegra_xhci_hcd { /* XUSB Falcon SuperSpeed Clock */ struct clk *falc_clk; + /* SYS Clock */ + struct clk *sys_clk; /* EMC Clock */ struct clk *emc_clk; diff --git a/include/dt-bindings/clk/tegra210-clk.h b/include/dt-bindings/clk/tegra210-clk.h index fc8347f..bde7ec8 100644 --- a/include/dt-bindings/clk/tegra210-clk.h +++ b/include/dt-bindings/clk/tegra210-clk.h @@ -399,6 +399,7 @@ #define TEGRA210_CLK_ID_SBUS_BOOT_APB_USER 483 #define TEGRA210_CLK_ID_SBUS_SDMMC4_USER 484 #define TEGRA210_CLK_ID_SBUS_WIFI_USER 485 +#define TEGRA210_CLK_ID_SBUS_XHCI_USER 486 /* IDs 486 ... 511 are reserved */ #endif /* _DT_BINDINGS_CLK_TEGRA210_CLK_ID_H */ -- 2.1.4