From: Patrick Rudolph <patrick.rudolph@9elements.com>
To: u-boot@lists.denx.de, Bin Meng <bmeng.cn@gmail.com>
Cc: Patrick Rudolph <patrick.rudolph@9elements.com>,
Marek Vasut <marex@denx.de>, Tom Rini <trini@konsulko.com>
Subject: [PATCH v6 16/37] drivers: usb: Add generic XHCI
Date: Wed, 2 Oct 2024 11:47:07 +0200 [thread overview]
Message-ID: <20241002094832.24933-17-patrick.rudolph@9elements.com> (raw)
In-Reply-To: <20241002094832.24933-1-patrick.rudolph@9elements.com>
Add support for the generic XHCI driver that contains no SoC
specific code. It can be used on platforms that simply work out
of the box, like on emulated platforms.
TEST: Booted on QEMU sbsa machine using the generic xhci driver.
Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com>
Reviewed-by: Marek Vasut <marex@denx.de>
Cc: Tom Rini <trini@konsulko.com>
Cc: Marek Vasut <marex@denx.de>
---
Changelog v3:
- Drop weak board_xhci_enable()
Changelog v4:
- Use dev_dbg() instead of debug()
Changelog v6:
- Update header order
---
drivers/usb/host/Kconfig | 8 ++++
drivers/usb/host/Makefile | 1 +
drivers/usb/host/xhci-generic.c | 75 +++++++++++++++++++++++++++++++++
3 files changed, 84 insertions(+)
create mode 100644 drivers/usb/host/xhci-generic.c
diff --git a/drivers/usb/host/Kconfig b/drivers/usb/host/Kconfig
index 6e10b629a3..bb5893d56d 100644
--- a/drivers/usb/host/Kconfig
+++ b/drivers/usb/host/Kconfig
@@ -68,6 +68,14 @@ config USB_XHCI_MVEBU
SoCs, which includes Armada8K, Armada3700 and other Armada
family SoCs.
+config USB_XHCI_GENERIC
+ bool "Generic SoC USB 3.0 support"
+ depends on OF_CONTROL
+ default n
+ help
+ Choose this option to add support for USB 3.0 driver for SoCs
+ that do not need platform specific code, like on emulated targets.
+
config USB_XHCI_OCTEON
bool "Support for Marvell Octeon family on-chip xHCI USB controller"
depends on ARCH_OCTEON
diff --git a/drivers/usb/host/Makefile b/drivers/usb/host/Makefile
index 8dad36f936..9e880195ec 100644
--- a/drivers/usb/host/Makefile
+++ b/drivers/usb/host/Makefile
@@ -50,6 +50,7 @@ obj-$(CONFIG_USB_XHCI_EXYNOS) += xhci-exynos5.o
obj-$(CONFIG_USB_XHCI_FSL) += xhci-fsl.o
obj-$(CONFIG_USB_XHCI_MTK) += xhci-mtk.o
obj-$(CONFIG_USB_XHCI_MVEBU) += xhci-mvebu.o
+obj-$(CONFIG_USB_XHCI_GENERIC) += xhci-generic.o
obj-$(CONFIG_USB_XHCI_OMAP) += xhci-omap.o
obj-$(CONFIG_USB_XHCI_PCI) += xhci-pci.o
obj-$(CONFIG_USB_XHCI_RCAR) += xhci-rcar.o
diff --git a/drivers/usb/host/xhci-generic.c b/drivers/usb/host/xhci-generic.c
new file mode 100644
index 0000000000..355d488317
--- /dev/null
+++ b/drivers/usb/host/xhci-generic.c
@@ -0,0 +1,75 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (C) 2024 9elements GmbH
+ *
+ * GENERIC USB HOST xHCI Controller
+ */
+#include <dm.h>
+#include <fdtdec.h>
+#include <log.h>
+#include <usb.h>
+#include <asm/io.h>
+#include <dm/device_compat.h>
+#include <usb/xhci.h>
+
+struct generic_xhci_plat {
+ fdt_addr_t hcd_base;
+};
+
+/**
+ * Contains pointers to register base addresses
+ * for the usb controller.
+ */
+struct generic_xhci {
+ struct xhci_ctrl ctrl; /* Needs to come first in this struct! */
+ struct usb_plat usb_plat;
+ struct xhci_hccr *hcd;
+};
+
+static int xhci_usb_probe(struct udevice *dev)
+{
+ struct generic_xhci_plat *plat = dev_get_plat(dev);
+ struct generic_xhci *ctx = dev_get_priv(dev);
+ struct xhci_hcor *hcor;
+ int len;
+
+ ctx->hcd = (struct xhci_hccr *)phys_to_virt(plat->hcd_base);
+ len = HC_LENGTH(xhci_readl(&ctx->hcd->cr_capbase));
+ hcor = (struct xhci_hcor *)((uintptr_t)ctx->hcd + len);
+
+ return xhci_register(dev, ctx->hcd, hcor);
+}
+
+static int xhci_usb_of_to_plat(struct udevice *dev)
+{
+ struct generic_xhci_plat *plat = dev_get_plat(dev);
+
+ /*
+ * Get the base address for XHCI controller from the device node
+ */
+ plat->hcd_base = dev_read_addr(dev);
+ if (plat->hcd_base == FDT_ADDR_T_NONE) {
+ dev_dbg(dev, "Can't get the XHCI register base address\n");
+ return -ENXIO;
+ }
+
+ return 0;
+}
+
+static const struct udevice_id xhci_usb_ids[] = {
+ { .compatible = "generic-xhci" },
+ { }
+};
+
+U_BOOT_DRIVER(usb_xhci) = {
+ .name = "xhci_generic",
+ .id = UCLASS_USB,
+ .of_match = xhci_usb_ids,
+ .of_to_plat = xhci_usb_of_to_plat,
+ .probe = xhci_usb_probe,
+ .remove = xhci_deregister,
+ .ops = &xhci_usb_ops,
+ .plat_auto = sizeof(struct generic_xhci_plat),
+ .priv_auto = sizeof(struct generic_xhci),
+ .flags = DM_FLAG_ALLOC_PRIV_DMA,
+};
--
2.46.2
next prev parent reply other threads:[~2024-10-02 9:54 UTC|newest]
Thread overview: 58+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-02 9:46 [PATCH v6 00/37] Implement ACPI on aarch64 Patrick Rudolph
2024-10-02 9:46 ` [PATCH v6 01/37] acpi: x86: Move SPCR and DBG2 into common code Patrick Rudolph
2024-10-02 9:46 ` [PATCH v6 02/37] acpi: x86: Write FADT in " Patrick Rudolph
2024-10-02 9:46 ` [PATCH v6 03/37] acpi: x86: Move MADT to " Patrick Rudolph
2024-10-02 9:46 ` [PATCH v6 04/37] acpi: Fix typo Patrick Rudolph
2024-10-02 9:46 ` [PATCH v6 05/37] serial: serial_pl01x: Implement .getinfo() for PL01 Patrick Rudolph
2024-10-02 9:46 ` [PATCH v6 06/37] acpi: Add define for GTDT Patrick Rudolph
2024-10-02 9:46 ` [PATCH v6 07/37] arm: acpi: Add generic ACPI methods Patrick Rudolph
2024-10-02 9:46 ` [PATCH v6 08/37] acpi: Add fill_madt to acpi_ops Patrick Rudolph
2024-10-02 9:47 ` [PATCH v6 09/37] acpi: acpi_table: Bump revisions Patrick Rudolph
2024-10-02 9:47 ` [PATCH v6 10/37] acpi: Add ACPITAB for PPTT and GTDT Patrick Rudolph
2024-10-02 9:47 ` [PATCH v6 11/37] acpi: acpi_table: Add IORT support Patrick Rudolph
2024-10-02 9:47 ` [PATCH v6 12/37] acpi: Move function prototype Patrick Rudolph
2024-10-02 9:47 ` [PATCH v6 13/37] acpi_table: Support platforms with unusable RSDT Patrick Rudolph
2024-10-02 9:47 ` [PATCH v6 14/37] efi_loader: Allocate and write ACPI tables Patrick Rudolph
2024-10-02 22:55 ` Simon Glass
2024-10-03 5:45 ` Ilias Apalodimas
2024-10-03 13:49 ` Simon Glass
2024-10-03 15:58 ` Ilias Apalodimas
2024-10-03 20:46 ` Simon Glass
2024-10-02 9:47 ` [PATCH v6 15/37] acpi: Add processor device Patrick Rudolph
2024-10-02 9:47 ` Patrick Rudolph [this message]
2024-10-02 9:47 ` [PATCH v6 17/37] drivers: ata: Rename ahci_mvebu Patrick Rudolph
2024-10-02 9:47 ` [PATCH v6 18/37] drivers/cpu: Add generic armv8 cpu driver Patrick Rudolph
2024-10-02 9:47 ` [PATCH v6 19/37] arm: gic-v3-its: Rename objects Patrick Rudolph
2024-10-02 9:47 ` [PATCH v6 20/37] arm: gic-v3-its: Implement of_xlate Patrick Rudolph
2024-10-02 9:47 ` [PATCH v6 21/37] arm: lib: Add GICV2 driver Patrick Rudolph
2024-10-02 9:47 ` [PATCH v6 22/37] drivers: misc: irq-uclass: Update irq_get_by_index Patrick Rudolph
2024-10-02 9:47 ` [PATCH v6 23/37] drivers/arm: Implement acpi_fill_madt Patrick Rudolph
2024-10-02 9:47 ` [PATCH v6 24/37] common: Enable BLOBLIST_TABLES on arm Patrick Rudolph
2024-10-02 9:47 ` [PATCH v6 25/37] board: emulation: Add QEMU sbsa support Patrick Rudolph
2024-10-02 22:55 ` Simon Glass
2024-10-03 1:35 ` Tom Rini
2024-10-03 13:50 ` Simon Glass
2024-10-03 14:43 ` Tom Rini
2024-10-03 16:59 ` Simon Glass
2024-10-03 19:17 ` Tom Rini
2024-10-03 20:46 ` Simon Glass
2024-10-03 22:25 ` Tom Rini
2024-10-04 1:28 ` Simon Glass
2024-10-04 7:19 ` Patrick Rudolph
2024-10-02 9:47 ` [PATCH v6 26/37] arm: mach-bcm283x: Map the ARM local MMIO as well Patrick Rudolph
2024-10-02 9:47 ` [PATCH v6 27/37] arm: mach-bcm283x: Bring in some header files from tianocore Patrick Rudolph
2024-10-02 9:47 ` [PATCH v6 28/37] arm: bcm283x: Generate ACPI tables Patrick Rudolph
2024-10-02 9:47 ` [PATCH v6 29/37] board: raspberrypi: Add ASL files from tianocore Patrick Rudolph
2024-10-02 9:47 ` [PATCH v6 30/37] arm: cpu: Add ACPI parking protocol support Patrick Rudolph
2024-10-02 22:55 ` Simon Glass
2024-10-02 9:47 ` [PATCH v6 31/37] armv8: cpu: Enable ACPI parking protocol Patrick Rudolph
2024-10-02 9:47 ` [PATCH v6 32/37] arm: Implement read_mpidr on armv7 Patrick Rudolph
2024-10-02 22:55 ` Simon Glass
2024-10-02 9:47 ` [PATCH v6 33/37] arm: mach-bcm283x: Add ARMV8_MULTIENTRY support Patrick Rudolph
2024-10-02 22:55 ` Simon Glass
2024-10-02 9:47 ` [PATCH v6 34/37] arm: mach-bcm283x: Enable ARMV8_MULTIENTRY Patrick Rudolph
2024-10-02 9:47 ` [PATCH v6 35/37] bloblist: Fix use of uninitialized variable Patrick Rudolph
2024-10-02 9:47 ` [PATCH v6 36/37] configs: Add RPI4 ACPI defconfig Patrick Rudolph
2024-10-02 9:47 ` [PATCH v6 37/37] CI: Enable qemu_sbsa Patrick Rudolph
2024-10-02 22:55 ` Simon Glass
2024-10-03 22:25 ` Tom Rini
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=20241002094832.24933-17-patrick.rudolph@9elements.com \
--to=patrick.rudolph@9elements.com \
--cc=bmeng.cn@gmail.com \
--cc=marex@denx.de \
--cc=trini@konsulko.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox