Skip to contentSkip to conversation

WIP: usb: xhci-pci: Add DM support

PATCH New Stefan Roese 3 participants 4 messages Jul 18, 2016 – Sep 20, 2016

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 WIP: usb: xhci-pci: Add DM support

This patch adds DM support to the xHCI PCI driver. Enabling its use e.g. in x86 platforms.

Status: On the congatec BayTrail SoM, xHCI still does not work correctly with this patch. Some internal timeouts lead to resets (BUG). Additional work is needed here. I'm posting this version as WIP so that other developers interested in this support might use it as a start. I might get back to it in a few weeks as well.

Cc George McCollister <[email protected]>
Cc Simon Glass <[email protected]>
Cc Bin Meng <[email protected]>
Cc Marek Vasut <[email protected]>
---
 drivers/usb/host/xhci-pci.c | 81 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 81 insertions(+)
drivers/usb/host/xhci-pci.c +81 -0
index 361fcce..63daaa6 100644
@@ -7,12 +7,15 @@
  */
 
 #include <common.h>
+#include <dm.h>
 #include <errno.h>
 #include <pci.h>
 #include <usb.h>
 
 #include "xhci.h"
 
+#ifndef CONFIG_DM_USB
+
 /*
  * Create the appropriate control structures to manage a new XHCI host
  * controller.
@@ -58,3 +61,81 @@ int xhci_hcd_init(int index, struct xhci_hccr **ret_hccr,
 void xhci_hcd_stop(int index)
 {
 }
+
+#else
+
+struct xhci_pci_priv {
+	struct xhci_ctrl ctrl;	/* Needs to come first in this struct! */
+};
+
+static void xhci_pci_init(struct udevice *dev, struct xhci_hccr **ret_hccr,
+			  struct xhci_hcor **ret_hcor)
+{
+	struct xhci_hccr *hccr;
+	struct xhci_hcor *hcor;
+	u32 cmd;
+
+	hccr = (struct xhci_hccr *)dm_pci_map_bar(dev,
+			PCI_BASE_ADDRESS_0, PCI_REGION_MEM);
+	hcor = (struct xhci_hcor *)((uintptr_t) hccr +
+			HC_LENGTH(xhci_readl(&hccr->cr_capbase)));
+
+	debug("XHCI-PCI init hccr 0x%x and hcor 0x%x hc_length %d\n",
+	      (u32)hccr, (u32)hcor,
+	      (u32)HC_LENGTH(xhci_readl(&hccr->cr_capbase)));
+
+	*ret_hccr = hccr;
+	*ret_hcor = hcor;
+
+	/* enable busmaster */
+	dm_pci_read_config32(dev, PCI_COMMAND, &cmd);
+	cmd |= PCI_COMMAND_MASTER;
+	dm_pci_write_config32(dev, PCI_COMMAND, cmd);
+}
+
+static int xhci_pci_probe(struct udevice *dev)
+{
+	struct xhci_hccr *hccr;
+	struct xhci_hcor *hcor;
+
+	xhci_pci_init(dev, &hccr, &hcor);
+
+	return xhci_register(dev, hccr, hcor);
+}
+
+static int xhci_pci_remove(struct udevice *dev)
+{
+	int ret;
+
+	ret = xhci_deregister(dev);
+	if (ret)
+		return ret;
+
+	return 0;
+}
+
+static const struct udevice_id xhci_pci_ids[] = {
+	{ .compatible = "xhci-pci" },
+	{ }
+};
+
+U_BOOT_DRIVER(xhci_pci) = {
+	.name	= "xhci_pci",
+	.id	= UCLASS_USB,
+	.probe = xhci_pci_probe,
+	.remove = xhci_pci_remove,
+	.of_match = xhci_pci_ids,
+	.ops	= &xhci_usb_ops,
+	.platdata_auto_alloc_size = sizeof(struct usb_platdata),
+	.priv_auto_alloc_size = sizeof(struct xhci_pci_priv),
+	.flags	= DM_FLAG_ALLOC_PRIV_DMA,
+};
+
+static struct pci_device_id xhci_pci_supported[] = {
+	{ PCI_DEVICE_CLASS(PCI_CLASS_SERIAL_USB_XHCI, ~0) },
+	{},
+};
+
+U_BOOT_PCI_DEVICE(xhci_pci, xhci_pci_supported);
+
+#endif /* CONFIG_DM_USB */
Signature · 1 line
2.9.2
#1 lore raw

PATCH 1/1 WIP: usb: xhci-pci: Add DM support

Quoted 9 lines · Stefan Roese

This patch adds DM support to the xHCI PCI driver. Enabling its use e.g. in x86 platforms.

Status: On the congatec BayTrail SoM, xHCI still does not work correctly with this patch. Some internal timeouts lead to resets (BUG). Additional work is needed here. I'm posting this version as WIP so that other developers interested in this support might use it as a start. I might get back to it in a few weeks as well.

Quoted 8 lines
Cc George McCollister <[email protected]>
Cc Simon Glass <[email protected]>
Cc Bin Meng <[email protected]>
Cc Marek Vasut <[email protected]>
---
 drivers/usb/host/xhci-pci.c | 81 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 81 insertions(+)
#2 lore raw

PATCH 1/1 WIP: usb: xhci-pci: Add DM support

Quoted 19 lines · Simon Glass
Quoted 9 lines · Stefan Roese

This patch adds DM support to the xHCI PCI driver. Enabling its use e.g. in x86 platforms

Status: On the congatec BayTrail SoM, xHCI still does not work correctly with this patch. Some internal timeouts lead to resets (BUG). Additional work is needed here. I'm posting this version as WIP so that other developers interested in this support might use it as a start. I might get back to it in a few weeks as well.

Quoted 8 lines
Cc George McCollister <[email protected]>
Cc Simon Glass <[email protected]>
Cc Bin Meng <[email protected]>
Cc Marek Vasut <[email protected]>
---
 drivers/usb/host/xhci-pci.c | 81 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 81 insertions(+)
Quoted 1 line

Marek, what do you think about this DM driver support? I'll re-visit xHCI on x86 very shortly - hopefully later this week. Do you have some comments or are you okay with this patch?

Thanks,
Stefan

#3 lore raw

PATCH 1/1 WIP: usb: xhci-pci: Add DM support

Quoted 21 lines · Stefan Roese
Quoted 20 lines · Simon Glass
Quoted 18 lines · Stefan Roese

This patch adds DM support to the xHCI PCI driver. Enabling its use e.g. in x86 platforms

Status: On the congatec BayTrail SoM, xHCI still does not work correctly with this patch. Some internal timeouts lead to resets (BUG). Additional work is needed here. I'm posting this version as WIP so that other developers interested in this support might use it as a start. I might get back to it in a few weeks as well.

Cc George McCollister <[email protected]>
Cc Simon Glass <[email protected]>
Cc Bin Meng <[email protected]>
Cc Marek Vasut <[email protected]>
---
 drivers/usb/host/xhci-pci.c | 81
+++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 81 insertions(+)
Quoted 5 lines
Quoted 1 line

Marek, what do you think about this DM driver support? I'll re-visit xHCI on x86 very shortly - hopefully later this week. Do you have some comments or are you okay with this patch?

I'm fine with it, thanks.

Signature · 2 lines
Best regards,
Marek Vasut