[PATCH v2 4/7] arch: arm: mach-snapdragon: Make USB speed fixup configurable
Balaji Selvanathan
balaji.selvanathan at oss.qualcomm.com
Mon Nov 24 16:55:00 CET 2025
Add CONFIG_QCOM_USB_FIXUP option to allow platforms to disable
the USB speed limitation fixup when they have proper super-speed
USB support in U-Boot.
Currently, U-Boot limits USB to high-speed mode on all Qualcomm
platforms by fixing up the device tree at runtime. This was
necessary because most platforms lacked super-speed PHY drivers.
However, newer platforms now have proper QMP PHY drivers that support
super-speed USB. For these platforms, the fixup is counterproductive
as it prevents the hardware from operating at its full capability.
This change:
- Adds CONFIG_QCOM_USB_FIXUP (default y) to maintain backward
compatibility with existing platforms
- Wraps the fixup code with #ifdef to allow selective disabling
- Allows platforms with super-speed support to disable the fixup
via their defconfig
Platforms without super-speed PHY drivers will continue to work
as before with the fixup enabled by default.
Signed-off-by: Balaji Selvanathan <balaji.selvanathan at oss.qualcomm.com>
---
arch/arm/mach-snapdragon/Kconfig | 10 ++++++++++
arch/arm/mach-snapdragon/of_fixup.c | 4 ++++
2 files changed, 14 insertions(+)
diff --git a/arch/arm/mach-snapdragon/Kconfig b/arch/arm/mach-snapdragon/Kconfig
index 976c0e35fce..6c53aeef597 100644
--- a/arch/arm/mach-snapdragon/Kconfig
+++ b/arch/arm/mach-snapdragon/Kconfig
@@ -29,6 +29,16 @@ config SYS_MALLOC_LEN
config LNX_KRNL_IMG_TEXT_OFFSET_BASE
default 0x80000000
+config QCOM_USB_FIXUP
+ bool "Enable USB speed fixup for Qualcomm platforms"
+ default y
+ help
+ Enable runtime fixup of USB device tree nodes to limit USB to
+ high-speed mode. This is needed on some Qualcomm platforms where
+ U-Boot doesn't support super-speed USB.
+ Disable this for platforms that have proper super-speed USB support
+ in U-Boot.
+
config SYS_BOARD
string "Snapdragon SoCs based board"
help
diff --git a/arch/arm/mach-snapdragon/of_fixup.c b/arch/arm/mach-snapdragon/of_fixup.c
index eec2c0c757e..6a64168f67e 100644
--- a/arch/arm/mach-snapdragon/of_fixup.c
+++ b/arch/arm/mach-snapdragon/of_fixup.c
@@ -27,6 +27,7 @@
#include <stdlib.h>
#include <time.h>
+#ifdef CONFIG_QCOM_USB_FIXUP
/* U-Boot only supports USB high-speed mode on Qualcomm platforms with DWC3
* USB controllers. Rather than requiring source level DT changes, we fix up
* DT here. This improves compatibility with upstream DT and simplifies the
@@ -115,6 +116,7 @@ static void fixup_usb_nodes(struct device_node *root)
log_warning("Failed to fixup node %s: %d\n", glue_np->name, ret);
}
}
+#endif
/* Remove all references to the rpmhpd device */
static void fixup_power_domains(struct device_node *root)
@@ -157,7 +159,9 @@ static int qcom_of_fixup_nodes(void * __maybe_unused ctx, struct event *event)
{
struct device_node *root = event->data.of_live_built.root;
+#ifdef CONFIG_QCOM_USB_FIXUP
time_call(fixup_usb_nodes, root);
+#endif
time_call(fixup_power_domains, root);
return 0;
--
2.34.1
More information about the U-Boot
mailing list