* [PATCH] usb: host: ehci-xilinx-of: remove the driver
@ 2026-11-03 18:17 Radhey Shyam Pandey
2026-11-03 22:18 ` Alan Stern
2026-11-04 8:31 ` Michal Simek
0 siblings, 2 replies; 3+ messages in thread
From: Radhey Shyam Pandey @ 2026-11-03 18:17 UTC (permalink / raw)
To: gregkh, stern, michal.simek, robh, saravanak
Cc: linux-kernel, linux-usb, linux-arm-kernel, devicetree,
Radhey Shyam Pandey
The Xilinx XPS USB host controller is legacy soft IP for PPC405 and
MicroBlaze FPGA designs.
This IP core relies on Xilinx Platform Studio (XPS) and the ISE Design
Suite, both of which were discontinued by Xilinx years ago. Furthermore,
modern AMD toolchains (Vivado Design Suite and Vitis) provide no support
for the legacy PLB (Processor Local Bus) architecture used by this core.
As a result, no new hardware designs can be built using this IP.
Nothing in the upstream tree carries its "xlnx,xps-usb-host-1.00.a"
compatible string, no defconfig enables CONFIG_XPS_USB_HCD_XILINX, and
the compatible was never documented as a binding.
It is also one of the few remaining users of the deprecated glue model
where the .c file is #included into ehci-hcd.c rather than built as its
own object.
Given the complete obsolescence of the supporting hardware development
tools and the lack of upstream users, remove the dead driver.
Signed-off-by: Radhey Shyam Pandey <radhey.shyam.pandey@amd.com>
---
drivers/usb/host/Kconfig | 11 --
drivers/usb/host/ehci-hcd.c | 7 -
drivers/usb/host/ehci-xilinx-of.c | 229 ------------------------------
scripts/dtc/dt_to_config | 8 +-
4 files changed, 2 insertions(+), 253 deletions(-)
delete mode 100644 drivers/usb/host/ehci-xilinx-of.c
diff --git a/drivers/usb/host/Kconfig b/drivers/usb/host/Kconfig
index 05a88969a6a0..471d203b60a5 100644
--- a/drivers/usb/host/Kconfig
+++ b/drivers/usb/host/Kconfig
@@ -224,17 +224,6 @@ config USB_EHCI_PORT_SPEED_HOOK
depends on USB_EHCI_ROOT_HUB_TT
# Used for hosts with controller-specific port speed reporting
-config XPS_USB_HCD_XILINX
- bool "Use Xilinx usb host EHCI controller core"
- depends on (PPC32 || MICROBLAZE)
- select USB_EHCI_BIG_ENDIAN_DESC
- select USB_EHCI_BIG_ENDIAN_MMIO
- help
- Xilinx xps USB host controller core is EHCI compliant and has
- transaction translator built-in. It can be configured to either
- support both high speed and full speed devices, or high speed
- devices only.
-
config USB_EHCI_FSL
tristate "Support for Freescale on-chip EHCI USB controller"
select USB_EHCI_ROOT_HUB_TT
diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c
index 75f780ec3ba0..7842f8a752d7 100644
--- a/drivers/usb/host/ehci-hcd.c
+++ b/drivers/usb/host/ehci-hcd.c
@@ -1331,10 +1331,6 @@ MODULE_LICENSE ("GPL");
#include "ehci-ppc-of.c"
#endif
-#ifdef CONFIG_XPS_USB_HCD_XILINX
-#include "ehci-xilinx-of.c"
-#endif
-
#ifdef CONFIG_SPARC_LEON
#include "ehci-grlib.c"
#endif
@@ -1346,9 +1342,6 @@ static struct platform_driver * const platform_drivers[] = {
#ifdef CONFIG_USB_EHCI_HCD_PPC_OF
&ehci_hcd_ppc_of_driver,
#endif
-#ifdef CONFIG_XPS_USB_HCD_XILINX
- &ehci_hcd_xilinx_of_driver,
-#endif
#ifdef CONFIG_SPARC_LEON
&ehci_grlib_driver,
#endif
diff --git a/drivers/usb/host/ehci-xilinx-of.c b/drivers/usb/host/ehci-xilinx-of.c
deleted file mode 100644
index 1d16cfefabd7..000000000000
--- a/drivers/usb/host/ehci-xilinx-of.c
+++ /dev/null
@@ -1,229 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0+
-/*
- * EHCI HCD (Host Controller Driver) for USB.
- *
- * Bus Glue for Xilinx EHCI core on the of_platform bus
- *
- * Copyright (c) 2009 Xilinx, Inc.
- *
- * Based on "ehci-ppc-of.c" by Valentine Barshak <vbarshak@ru.mvista.com>
- * and "ehci-ppc-soc.c" by Stefan Roese <sr@denx.de>
- * and "ohci-ppc-of.c" by Sylvain Munaut <tnt@246tNt.com>
- */
-
-#include <linux/err.h>
-#include <linux/signal.h>
-
-#include <linux/of.h>
-#include <linux/of_platform.h>
-#include <linux/of_address.h>
-#include <linux/of_irq.h>
-
-/**
- * ehci_xilinx_port_handed_over - hand the port out if failed to enable it
- * @hcd: Pointer to the usb_hcd device to which the host controller bound
- * @portnum:Port number to which the device is attached.
- *
- * This function is used as a place to tell the user that the Xilinx USB host
- * controller does support LS devices. And in an HS only configuration, it
- * does not support FS devices either. It is hoped that this can help a
- * confused user.
- *
- * There are cases when the host controller fails to enable the port due to,
- * for example, insufficient power that can be supplied to the device from
- * the USB bus. In those cases, the messages printed here are not helpful.
- *
- * Return: Always return 0
- */
-static int ehci_xilinx_port_handed_over(struct usb_hcd *hcd, int portnum)
-{
- dev_warn(hcd->self.controller, "port %d cannot be enabled\n", portnum);
- if (hcd->has_tt) {
- dev_warn(hcd->self.controller,
- "Maybe you have connected a low speed device?\n");
-
- dev_warn(hcd->self.controller,
- "We do not support low speed devices\n");
- } else {
- dev_warn(hcd->self.controller,
- "Maybe your device is not a high speed device?\n");
- dev_warn(hcd->self.controller,
- "The USB host controller does not support full speed nor low speed devices\n");
- dev_warn(hcd->self.controller,
- "You can reconfigure the host controller to have full speed support\n");
- }
-
- return 0;
-}
-
-
-static const struct hc_driver ehci_xilinx_of_hc_driver = {
- .description = hcd_name,
- .product_desc = "OF EHCI",
- .hcd_priv_size = sizeof(struct ehci_hcd),
-
- /*
- * generic hardware linkage
- */
- .irq = ehci_irq,
- .flags = HCD_MEMORY | HCD_DMA | HCD_USB2 | HCD_BH,
-
- /*
- * basic lifecycle operations
- */
- .reset = ehci_setup,
- .start = ehci_run,
- .stop = ehci_stop,
- .shutdown = ehci_shutdown,
-
- /*
- * managing i/o requests and associated device resources
- */
- .urb_enqueue = ehci_urb_enqueue,
- .urb_dequeue = ehci_urb_dequeue,
- .endpoint_disable = ehci_endpoint_disable,
- .endpoint_reset = ehci_endpoint_reset,
-
- /*
- * scheduling support
- */
- .get_frame_number = ehci_get_frame,
-
- /*
- * root hub support
- */
- .hub_status_data = ehci_hub_status_data,
- .hub_control = ehci_hub_control,
-#ifdef CONFIG_PM
- .bus_suspend = ehci_bus_suspend,
- .bus_resume = ehci_bus_resume,
-#endif
- .relinquish_port = NULL,
- .port_handed_over = ehci_xilinx_port_handed_over,
-
- .clear_tt_buffer_complete = ehci_clear_tt_buffer_complete,
-};
-
-/**
- * ehci_hcd_xilinx_of_probe - Probe method for the USB host controller
- * @op: pointer to the platform_device bound to the host controller
- *
- * This function requests resources and sets up appropriate properties for the
- * host controller. Because the Xilinx USB host controller can be configured
- * as HS only or HS/FS only, it checks the configuration in the device tree
- * entry, and sets an appropriate value for hcd->has_tt.
- *
- * Return: zero on success, negative error code otherwise
- */
-static int ehci_hcd_xilinx_of_probe(struct platform_device *op)
-{
- struct device_node *dn = op->dev.of_node;
- struct usb_hcd *hcd;
- struct ehci_hcd *ehci;
- struct resource res;
- int irq;
- int rv;
- int *value;
-
- if (usb_disabled())
- return -ENODEV;
-
- dev_dbg(&op->dev, "initializing XILINX-OF USB Controller\n");
-
- rv = of_address_to_resource(dn, 0, &res);
- if (rv)
- return rv;
-
- hcd = usb_create_hcd(&ehci_xilinx_of_hc_driver, &op->dev,
- "XILINX-OF USB");
- if (!hcd)
- return -ENOMEM;
-
- hcd->rsrc_start = res.start;
- hcd->rsrc_len = resource_size(&res);
-
- irq = irq_of_parse_and_map(dn, 0);
- if (!irq) {
- dev_err(&op->dev, "%s: irq_of_parse_and_map failed\n",
- __FILE__);
- rv = -EBUSY;
- goto err_irq;
- }
-
- hcd->regs = devm_ioremap_resource(&op->dev, &res);
- if (IS_ERR(hcd->regs)) {
- rv = PTR_ERR(hcd->regs);
- goto err_irq;
- }
-
- ehci = hcd_to_ehci(hcd);
-
- /* This core always has big-endian register interface and uses
- * big-endian memory descriptors.
- */
- ehci->big_endian_mmio = 1;
- ehci->big_endian_desc = 1;
-
- /* Check whether the FS support option is selected in the hardware.
- */
- value = (int *)of_get_property(dn, "xlnx,support-usb-fs", NULL);
- if (value && (*value == 1)) {
- ehci_dbg(ehci, "USB host controller supports FS devices\n");
- hcd->has_tt = 1;
- } else {
- ehci_dbg(ehci,
- "USB host controller is HS only\n");
- hcd->has_tt = 0;
- }
-
- /* Debug registers are at the first 0x100 region
- */
- ehci->caps = hcd->regs + 0x100;
-
- rv = usb_add_hcd(hcd, irq, 0);
- if (rv == 0) {
- device_wakeup_enable(hcd->self.controller);
- return 0;
- }
-
-err_irq:
- usb_put_hcd(hcd);
-
- return rv;
-}
-
-/**
- * ehci_hcd_xilinx_of_remove - shutdown hcd and release resources
- * @op: pointer to platform_device structure that is to be removed
- *
- * Remove the hcd structure, and release resources that has been requested
- * during probe.
- *
- * Return: Always return 0
- */
-static void ehci_hcd_xilinx_of_remove(struct platform_device *op)
-{
- struct usb_hcd *hcd = platform_get_drvdata(op);
-
- dev_dbg(&op->dev, "stopping XILINX-OF USB Controller\n");
-
- usb_remove_hcd(hcd);
-
- usb_put_hcd(hcd);
-}
-
-static const struct of_device_id ehci_hcd_xilinx_of_match[] = {
- {.compatible = "xlnx,xps-usb-host-1.00.a",},
- {},
-};
-MODULE_DEVICE_TABLE(of, ehci_hcd_xilinx_of_match);
-
-static struct platform_driver ehci_hcd_xilinx_of_driver = {
- .probe = ehci_hcd_xilinx_of_probe,
- .remove = ehci_hcd_xilinx_of_remove,
- .shutdown = usb_hcd_platform_shutdown,
- .driver = {
- .name = "xilinx-of-ehci",
- .of_match_table = ehci_hcd_xilinx_of_match,
- },
-};
diff --git a/scripts/dtc/dt_to_config b/scripts/dtc/dt_to_config
index 70d6d5f06bdc..3f9e751a3285 100755
--- a/scripts/dtc/dt_to_config
+++ b/scripts/dtc/dt_to_config
@@ -116,13 +116,12 @@ $num_pr_flags = $pr_flag_pos_config_test_fail + 1;
'hardcoded_no_driver' => ['no_config'],
# drivers/usb/host/ehci-ppc-of.c
- # drivers/usb/host/ehci-xilinx-of.c
- # are included from:
+ # is included from:
# drivers/usb/host/ehci-hcd.c
# thus the search of Makefile for the included .c files is incorrect
# ehci-hcd.c wraps the includes with ifdef CONFIG_USB_EHCI_HCD_..._OF
#
- # similar model for ohci-hcd.c (but no ohci-xilinx-of.c)
+ # similar model for ohci-hcd.c
#
# similarly, uhci-hcd.c includes uhci-platform.c
@@ -131,9 +130,6 @@ $num_pr_flags = $pr_flag_pos_config_test_fail + 1;
'drivers/usb/host/ohci-ppc-of.c' => ['CONFIG_USB_OHCI_HCD',
'CONFIG_USB_OHCI_HCD_PPC_OF'],
- 'drivers/usb/host/ehci-xilinx-of.c' => ['CONFIG_USB_EHCI_HCD',
- 'CONFIG_USB_EHCI_HCD_XILINX'],
-
'drivers/usb/host/uhci-platform.c' => ['CONFIG_USB_UHCI_HCD',
'CONFIG_USB_UHCI_PLATFORM'],
--
2.44.4
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] usb: host: ehci-xilinx-of: remove the driver
2026-11-03 18:17 [PATCH] usb: host: ehci-xilinx-of: remove the driver Radhey Shyam Pandey
@ 2026-11-03 22:18 ` Alan Stern
2026-11-04 8:31 ` Michal Simek
1 sibling, 0 replies; 3+ messages in thread
From: Alan Stern @ 2026-11-03 22:18 UTC (permalink / raw)
To: Radhey Shyam Pandey
Cc: gregkh, michal.simek, robh, saravanak, linux-kernel, linux-usb,
linux-arm-kernel, devicetree
On Tue, Nov 03, 2026 at 11:47:21PM +0530, Radhey Shyam Pandey wrote:
> The Xilinx XPS USB host controller is legacy soft IP for PPC405 and
> MicroBlaze FPGA designs.
>
> This IP core relies on Xilinx Platform Studio (XPS) and the ISE Design
> Suite, both of which were discontinued by Xilinx years ago. Furthermore,
> modern AMD toolchains (Vivado Design Suite and Vitis) provide no support
> for the legacy PLB (Processor Local Bus) architecture used by this core.
> As a result, no new hardware designs can be built using this IP.
>
> Nothing in the upstream tree carries its "xlnx,xps-usb-host-1.00.a"
> compatible string, no defconfig enables CONFIG_XPS_USB_HCD_XILINX, and
> the compatible was never documented as a binding.
>
> It is also one of the few remaining users of the deprecated glue model
> where the .c file is #included into ehci-hcd.c rather than built as its
> own object.
>
> Given the complete obsolescence of the supporting hardware development
> tools and the lack of upstream users, remove the dead driver.
>
> Signed-off-by: Radhey Shyam Pandey <radhey.shyam.pandey@amd.com>
> ---
Acked-by: Alan Stern <stern@rowland.harvard.edu>
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] usb: host: ehci-xilinx-of: remove the driver
2026-11-03 18:17 [PATCH] usb: host: ehci-xilinx-of: remove the driver Radhey Shyam Pandey
2026-11-03 22:18 ` Alan Stern
@ 2026-11-04 8:31 ` Michal Simek
1 sibling, 0 replies; 3+ messages in thread
From: Michal Simek @ 2026-11-04 8:31 UTC (permalink / raw)
To: Radhey Shyam Pandey, gregkh, stern, robh, saravanak
Cc: linux-kernel, linux-usb, linux-arm-kernel, devicetree
On 11/3/26 19:17, Radhey Shyam Pandey wrote:
> The Xilinx XPS USB host controller is legacy soft IP for PPC405 and
> MicroBlaze FPGA designs.
>
> This IP core relies on Xilinx Platform Studio (XPS) and the ISE Design
> Suite, both of which were discontinued by Xilinx years ago. Furthermore,
> modern AMD toolchains (Vivado Design Suite and Vitis) provide no support
> for the legacy PLB (Processor Local Bus) architecture used by this core.
> As a result, no new hardware designs can be built using this IP.
>
> Nothing in the upstream tree carries its "xlnx,xps-usb-host-1.00.a"
> compatible string, no defconfig enables CONFIG_XPS_USB_HCD_XILINX, and
> the compatible was never documented as a binding.
>
> It is also one of the few remaining users of the deprecated glue model
> where the .c file is #included into ehci-hcd.c rather than built as its
> own object.
>
> Given the complete obsolescence of the supporting hardware development
> tools and the lack of upstream users, remove the dead driver.
>
> Signed-off-by: Radhey Shyam Pandey <radhey.shyam.pandey@amd.com>
> ---
> drivers/usb/host/Kconfig | 11 --
> drivers/usb/host/ehci-hcd.c | 7 -
> drivers/usb/host/ehci-xilinx-of.c | 229 ------------------------------
> scripts/dtc/dt_to_config | 8 +-
> 4 files changed, 2 insertions(+), 253 deletions(-)
> delete mode 100644 drivers/usb/host/ehci-xilinx-of.c
We discussed this in context of Documentation/devicetree/bindings/xilinx.txt but
there should be one more patch which removes that one documented property from
xilinx.txt here.
It means please also send another patch which removes this part. I would suggest
that this should be series of 2 patches. Where one removes driver itself and
second this paragraph from xilinx.txt.
This patch is file that's why feel free to add
Reviewed-by: Michal Simek <michal.simek@amd.com>
diff --git a/Documentation/devicetree/bindings/xilinx.txt
b/Documentation/devicetree/bindings/xilinx.txt
index a1a2cde7b7d8..5049af6ff4cf 100644
--- a/Documentation/devicetree/bindings/xilinx.txt
+++ b/Documentation/devicetree/bindings/xilinx.txt
@@ -29,15 +29,3 @@
- compatible : should contain "xlnx,xps-hwicap-1.00.a" or
"xlnx,opb-hwicap-1.00.b".
- vii) Xilinx USB Host controller
-
- The Xilinx USB host controller is EHCI compatible but with a different
- base address for the EHCI registers, and it is always a big-endian
- USB Host controller. The hardware can be configured as high speed only,
- or high speed/full speed hybrid.
-
- Required properties:
- - xlnx,support-usb-fs: A value 0 means the core is built as high speed
- only. A value 1 means the core also supports
- full speed devices.
-
Thanks,
Michal
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-11-04 8:31 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-11-03 18:17 [PATCH] usb: host: ehci-xilinx-of: remove the driver Radhey Shyam Pandey
2026-11-03 22:18 ` Alan Stern
2026-11-04 8:31 ` Michal Simek
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®