From 7e91f6ccdc84fe5952e5c26769e65d12e5fc4733 Mon Sep 17 00:00:00 2001 From: Vignesh Raghavendra Date: Tue, 1 Oct 2019 17:26:33 +0530 Subject: usb: Add Cadence USB3 host and gadget driver Add support for USB3 host and gadget driver. This is a direct sync of Linux kernel Cadence USB stack that from v5.4-rc1 release. Driver has been modified so that it compiles without errors against U-Boot code base. Features not required for U-Boot such as scatter-gather DMA and OTG interrupt handling has been dropped. Signed-off-by: Jean-Jacques Hiblot [jjhiblot@ti.com: Add PHY support] Signed-off-by: Vignesh Raghavendra --- drivers/usb/cdns3/host.c | 55 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 drivers/usb/cdns3/host.c (limited to 'drivers/usb/cdns3/host.c') diff --git a/drivers/usb/cdns3/host.c b/drivers/usb/cdns3/host.c new file mode 100644 index 0000000000..79be63001d --- /dev/null +++ b/drivers/usb/cdns3/host.c @@ -0,0 +1,55 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Cadence USBSS DRD Driver - host side + * + * Copyright (C) 2018-2019 Cadence Design Systems. + * Copyright (C) 2017-2018 NXP + * + * Authors: Peter Chen + * Pawel Laszczak + */ +#include +#include +#include +#include "../host/xhci.h" + +#include "core.h" +#include "drd.h" + +static int __cdns3_host_init(struct cdns3 *cdns) +{ + struct xhci_hcor *hcor; + struct xhci_hccr *hccr; + + cdns3_drd_switch_host(cdns, 1); + + hccr = (struct xhci_hccr *)cdns->xhci_regs; + hcor = (struct xhci_hcor *)(cdns->xhci_regs + + HC_LENGTH(xhci_readl(&(hccr)->cr_capbase))); + + return xhci_register(cdns->dev, hccr, hcor); +} + +static void cdns3_host_exit(struct cdns3 *cdns) +{ + xhci_deregister(cdns->dev); + cdns3_drd_switch_host(cdns, 0); +} + +int cdns3_host_init(struct cdns3 *cdns) +{ + struct cdns3_role_driver *rdrv; + + rdrv = devm_kzalloc(cdns->dev, sizeof(*rdrv), GFP_KERNEL); + if (!rdrv) + return -ENOMEM; + + rdrv->start = __cdns3_host_init; + rdrv->stop = cdns3_host_exit; + rdrv->state = CDNS3_ROLE_STATE_INACTIVE; + rdrv->name = "host"; + + cdns->roles[USB_ROLE_HOST] = rdrv; + + return 0; +} -- cgit v1.2.3