All of lore.kernel.org
 help / color / mirror / Atom feed
From: patrice.chotard at st.com <patrice.chotard@st.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v2 06/14] usb: ehci: Add STi ehci support
Date: Wed, 22 Mar 2017 10:54:08 +0100	[thread overview]
Message-ID: <1490176456-24813-7-git-send-email-patrice.chotard@st.com> (raw)
In-Reply-To: <1490176456-24813-1-git-send-email-patrice.chotard@st.com>

From: Patrice Chotard <patrice.chotard@st.com>

Add support for on-chip ehci controller available
on STMicrolectronics SoCs.
ehci support will be then available on both type A
USB 2.0 connectors.

Signed-off-by: Patrice Chotard <patrice.chotard@st.com>
---

v2:	_ update error messages
	_ add remove callback to put core into reset


 drivers/usb/host/Kconfig    |   9 ++++
 drivers/usb/host/Makefile   |   1 +
 drivers/usb/host/ehci-sti.c | 115 ++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 125 insertions(+)
 create mode 100644 drivers/usb/host/ehci-sti.c

diff --git a/drivers/usb/host/Kconfig b/drivers/usb/host/Kconfig
index 5129a57..d66f49e 100644
--- a/drivers/usb/host/Kconfig
+++ b/drivers/usb/host/Kconfig
@@ -120,6 +120,15 @@ config USB_EHCI_MSM
 	  This driver supports combination of Chipidea USB controller
 	  and Synapsys USB PHY in host mode only.
 
+config USB_EHCI_STI
+	bool "Support for STMicroelectronics on-chip EHCI USB controller"
+	depends on ARCH_STI
+	select STI_PHY_USB
+	default y
+	---help---
+	  Enables support for the on-chip EHCI controller on
+	  STMicroelectronics SoCs.
+
 config USB_EHCI_ZYNQ
 	bool "Support for Xilinx Zynq on-chip EHCI USB controller"
 	depends on ARCH_ZYNQ
diff --git a/drivers/usb/host/Makefile b/drivers/usb/host/Makefile
index 58c0cf5..303aa32 100644
--- a/drivers/usb/host/Makefile
+++ b/drivers/usb/host/Makefile
@@ -46,6 +46,7 @@ obj-$(CONFIG_USB_EHCI_MARVELL) += ehci-marvell.o
 obj-$(CONFIG_USB_EHCI_MSM) += ehci-msm.o
 obj-$(CONFIG_USB_EHCI_PCI) += ehci-pci.o
 obj-$(CONFIG_USB_EHCI_SPEAR) += ehci-spear.o
+obj-$(CONFIG_USB_EHCI_STI) += ehci-sti.o
 obj-$(CONFIG_USB_EHCI_SUNXI) += ehci-sunxi.o
 obj-$(CONFIG_USB_EHCI_TEGRA) += ehci-tegra.o
 obj-$(CONFIG_USB_EHCI_VCT) += ehci-vct.o
diff --git a/drivers/usb/host/ehci-sti.c b/drivers/usb/host/ehci-sti.c
new file mode 100644
index 0000000..390709d
--- /dev/null
+++ b/drivers/usb/host/ehci-sti.c
@@ -0,0 +1,115 @@
+/*
+ * Copyright (c) 2017
+ * Patrice Chotard <patrice.chotard@st.com>
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
+
+#include <common.h>
+#include <asm/io.h>
+#include <dm.h>
+#include <errno.h>
+#include "ehci.h"
+#include <reset-uclass.h>
+#include <usb.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+struct sti_ehci_priv {
+	struct ehci_ctrl ctrl;
+	struct reset_ctl power_ctl;
+	struct reset_ctl softreset_ctl;
+};
+
+static int sti_ehci_probe(struct udevice *dev)
+{
+	struct sti_ehci_priv *priv = dev_get_priv(dev);
+	struct ehci_hccr *hccr = priv->ctrl.hccr;
+	struct ehci_hcor *hcor;
+	struct udevice *dev_phy;
+	int ret, phy_node;
+
+	hccr = (struct ehci_hccr *)dev_get_addr(dev);
+
+	if (hccr == (void *)FDT_ADDR_T_NONE)
+		return -EINVAL;
+
+	ret = reset_get_by_name(dev, "power", &priv->power_ctl);
+	if (ret) {
+		error("can't get power for %s (%d)", dev->name, ret);
+		return ret;
+	}
+
+	ret = reset_get_by_name(dev, "softreset", &priv->softreset_ctl);
+	if (ret) {
+		error("can't get soft reset for %s (%d)", dev->name, ret);
+		return ret;
+	}
+
+	ret = reset_deassert(&priv->softreset_ctl);
+	if (ret < 0) {
+		error("EHCI soft reset deassert failed: %d", ret);
+		return ret;
+	}
+
+	ret = reset_deassert(&priv->power_ctl);
+	if (ret < 0) {
+		error("EHCI power deassert failed: %d", ret);
+		return ret;
+	}
+
+	/* get phy node */
+	phy_node = fdtdec_lookup_phandle(gd->fdt_blob, dev->of_offset, "phys");
+	if (phy_node <= 0) {
+		error("USB PHY DT node not found.\n");
+		return -ENODEV;
+	}
+
+	/* probe associated phy */
+	ret = uclass_get_device_by_of_offset(UCLASS_MISC, phy_node, &dev_phy);
+
+	hcor = (struct ehci_hcor *)((phys_addr_t)hccr +
+			HC_LENGTH(ehci_readl(&(hccr)->cr_capbase)));
+
+	return ehci_register(dev, hccr, hcor, NULL, 0, USB_INIT_HOST);
+}
+
+static int sti_ehci_remove(struct udevice *dev)
+{
+	struct sti_ehci_priv *priv = dev_get_priv(dev);
+	int ret;
+
+	ret = ehci_deregister(dev);
+	if (ret)
+		return ret;
+
+	ret = reset_assert(&priv->power_ctl);
+	if (ret < 0) {
+		error("EHCI power assert failed: %d", ret);
+		return ret;
+	}
+
+	ret = reset_assert(&priv->softreset_ctl);
+	if (ret < 0) {
+		error("EHCI soft reset assert failed: %d", ret);
+		return ret;
+	}
+
+	return 0;
+}
+
+static const struct udevice_id sti_usb_ids[] = {
+	{ .compatible = "st,st-ehci-300x" },
+	{ }
+};
+
+U_BOOT_DRIVER(ehci_sti) = {
+	.name = "ehci_sti",
+	.id = UCLASS_USB,
+	.of_match = sti_usb_ids,
+	.probe = sti_ehci_probe,
+	.remove = sti_ehci_remove,
+	.ops = &ehci_usb_ops,
+	.priv_auto_alloc_size = sizeof(struct sti_ehci_priv),
+	.flags	= DM_FLAG_ALLOC_PRIV_DMA,
+};
-- 
1.9.1

  parent reply	other threads:[~2017-03-22  9:54 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-03-22  9:54 [U-Boot] [PATCH v2 00/14] STiH410-B2260: add reset, usb and fastboot support patrice.chotard at st.com
2017-03-22  9:54 ` [U-Boot] [PATCH v2 01/14] reset: Add STi reset support patrice.chotard at st.com
2017-03-27  2:27   ` Simon Glass
2017-03-22  9:54 ` [U-Boot] [PATCH v2 02/14] mmc: sti_sdhci: Rework sti_mmc_core_config() patrice.chotard at st.com
2017-03-22  9:54 ` [U-Boot] [PATCH v2 03/14] ARM: dts: stih410-family: Add missing reset_names for mmc1 node patrice.chotard at st.com
2017-03-22  9:54 ` [U-Boot] [PATCH v2 04/14] mmc: sti_sdhci: Use reset framework patrice.chotard at st.com
2017-03-22  9:54 ` [U-Boot] [PATCH v2 05/14] phy: Add STi phy usb support patrice.chotard at st.com
2017-03-22  9:54 ` patrice.chotard at st.com [this message]
2017-04-01  4:20   ` [U-Boot] [PATCH v2 06/14] usb: ehci: Add STi ehci support Simon Glass
2017-04-03 11:43     ` Patrice CHOTARD
2017-03-22  9:54 ` [U-Boot] [PATCH v2 07/14] usb: ohci: Add STi ohci support patrice.chotard at st.com
2017-04-01  4:21   ` Simon Glass
2017-03-22  9:54 ` [U-Boot] [PATCH v2 08/14] board: STiH410-B2260: add OHCI related defines patrice.chotard at st.com
2017-03-22  9:54 ` [U-Boot] [PATCH v2 09/14] usb: xhci: Add STi xhci support patrice.chotard at st.com
2017-03-22  9:54 ` [U-Boot] [PATCH v2 10/14] board: STiH410-B2260: add XHCI related define patrice.chotard at st.com
2017-03-22  9:54 ` [U-Boot] [PATCH v2 11/14] usb: dwc3: Add dwc3 support for STi patrice.chotard at st.com
2017-04-01  4:21   ` Simon Glass
2017-04-03 12:00     ` Patrice CHOTARD
2017-03-22  9:54 ` [U-Boot] [PATCH v2 12/14] board: STiH410-B2260: add fastboot support patrice.chotard at st.com
2017-03-22  9:54 ` [U-Boot] [PATCH v2 13/14] STiH410-B2260: enable USB Host Networking patrice.chotard at st.com
2017-03-22  9:54 ` [U-Boot] [PATCH v2 14/14] STiH410-B2260: enable USB, fastboot, reset related flags patrice.chotard at st.com
2017-04-21  6:56 ` [U-Boot] [PATCH v2 00/14] STiH410-B2260: add reset, usb and fastboot support Patrice CHOTARD

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=1490176456-24813-7-git-send-email-patrice.chotard@st.com \
    --to=patrice.chotard@st.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.