diff mbox series

[v3,07/12] of: overlays: dwc3-flattening: Provide overlay symbols

Message ID 20250113-dwc3-refactor-v3-7-d1722075df7b@oss.qualcomm.com (mailing list archive)
State New
Headers show
Series usb: dwc3: qcom: Flatten dwc3 structure | expand

Commit Message

Bjorn Andersson Jan. 14, 2025, 5:11 a.m. UTC
The overlays introduced to apply the migration to the flattened Qualcomm
DWC3 binding depends on symbols to be applied, but in general the
DeviceTree blobs in circulation on people's devices wasn't built with
symbols - and hence they can not be applied.

Work around this problem by detecting when the live DeviceTree is
lacking symbols and inject the necessary symbols for each target, for
the duration of the dwc3-flattening overlay application.

Signed-off-by: Bjorn Andersson <bjorn.andersson@oss.qualcomm.com>
---
 .../of/overlays/dwc3-flattening/dwc3-flattening.c  | 765 +++++++++++++++++++++
 1 file changed, 765 insertions(+)
diff mbox series

Patch

diff --git a/drivers/of/overlays/dwc3-flattening/dwc3-flattening.c b/drivers/of/overlays/dwc3-flattening/dwc3-flattening.c
index d33cdf6661c0..07f90360c04d 100644
--- a/drivers/of/overlays/dwc3-flattening/dwc3-flattening.c
+++ b/drivers/of/overlays/dwc3-flattening/dwc3-flattening.c
@@ -19,546 +19,1273 @@  struct dwc3_overlay_data {
 	const void *fdt;
 	const void *end;
 	const char *migrate_match;
+	struct dwc3_overlay_symbol *symbols;
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_apq8094_overlay = {
 	.fdt = __dtb_dwc3_qcom_apq8094_begin,
 	.end = __dtb_dwc3_qcom_apq8094_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "intc", "/soc@0/interrupt-controller@f9000000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_apq8096_overlay = {
 	.fdt = __dtb_dwc3_qcom_apq8096_begin,
 	.end = __dtb_dwc3_qcom_apq8096_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "hsusb_phy1", "/soc@0/phy@7411000" },
+		{ "hsusb_phy2", "/soc@0/phy@7412000" },
+		{ "intc", "/soc@0/interrupt-controller@9bc0000" },
+		{ "usb2_id", "/usb2-id" },
+		{ "usb3_id", "/usb3-id" },
+		{ "usb3phy", "/soc@0/phy@7410000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_apq8096_inforce_ifc6640_overlay = {
 	.fdt = __dtb_dwc3_qcom_apq8096_inforce_ifc6640_begin,
 	.end = __dtb_dwc3_qcom_apq8096_inforce_ifc6640_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "hsusb_phy1", "/soc@0/phy@7411000" },
+		{ "hsusb_phy2", "/soc@0/phy@7412000" },
+		{ "intc", "/soc@0/interrupt-controller@9bc0000" },
+		{ "usb3phy", "/soc@0/phy@7410000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_ipq4018_overlay = {
 	.fdt = __dtb_dwc3_qcom_ipq4018_begin,
 	.end = __dtb_dwc3_qcom_ipq4018_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "usb2_hs_phy", "/soc/usb-phy@a8000" },
+		{ "usb3_hs_phy", "/soc/usb-phy@a6000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_ipq4018_8dev_jalapeno_overlay = {
 	.fdt = __dtb_dwc3_qcom_ipq4018_8dev_jalapeno_begin,
 	.end = __dtb_dwc3_qcom_ipq4018_8dev_jalapeno_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "usb2_hs_phy", "/soc/usb-phy@a8000" },
+		{ "usb3_hs_phy", "/soc/usb-phy@a6000" },
+		{ "usb3_ss_phy", "/soc/usb-phy@9a000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_ipq4019_overlay = {
 	.fdt = __dtb_dwc3_qcom_ipq4019_begin,
 	.end = __dtb_dwc3_qcom_ipq4019_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "usb2_hs_phy", "/soc/usb-phy@a8000" },
+		{ "usb3_hs_phy", "/soc/usb-phy@a6000" },
+		{ "usb3_ss_phy", "/soc/usb-phy@9a000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_ipq5018_overlay = {
 	.fdt = __dtb_dwc3_qcom_ipq5018_begin,
 	.end = __dtb_dwc3_qcom_ipq5018_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "intc", "/soc@0/interrupt-controller@b000000" },
+		{ "usbphy0", "/soc@0/phy@5b000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_ipq5332_overlay = {
 	.fdt = __dtb_dwc3_qcom_ipq5332_begin,
 	.end = __dtb_dwc3_qcom_ipq5332_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "intc", "/soc@0/interrupt-controller@b000000" },
+		{ "usbphy0", "/soc@0/phy@7b000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_ipq5424_overlay = {
 	.fdt = __dtb_dwc3_qcom_ipq5424_begin,
 	.end = __dtb_dwc3_qcom_ipq5424_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "intc", "/soc@0/interrupt-controller@f200000" },
+		{ "qusb_phy_0", "/soc@0/phy@7b000" },
+		{ "qusb_phy_1", "/soc@0/phy@71000" },
+		{ "ssphy_0", "/soc@0/phy@7d000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_ipq6018_overlay = {
 	.fdt = __dtb_dwc3_qcom_ipq6018_begin,
 	.end = __dtb_dwc3_qcom_ipq6018_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "intc", "/soc@0/interrupt-controller@b000000" },
+		{ "qusb_phy_0", "/soc@0/qusb@79000" },
+		{ "qusb_phy_1", "/soc@0/qusb@59000" },
+		{ "ssphy_0", "/soc@0/ssphy@78000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_ipq8064_overlay = {
 	.fdt = __dtb_dwc3_qcom_ipq8064_begin,
 	.end = __dtb_dwc3_qcom_ipq8064_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "hs_phy_0", "/soc/phy@100f8800" },
+		{ "hs_phy_1", "/soc/phy@110f8800" },
+		{ "ss_phy_0", "/soc/phy@100f8830" },
+		{ "ss_phy_1", "/soc/phy@110f8830" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_ipq8074_overlay = {
 	.fdt = __dtb_dwc3_qcom_ipq8074_begin,
 	.end = __dtb_dwc3_qcom_ipq8074_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "intc", "/soc@0/interrupt-controller@b000000" },
+		{ "qusb_phy_0", "/soc@0/phy@79000" },
+		{ "qusb_phy_1", "/soc@0/phy@59000" },
+		{ "ssphy_0", "/soc@0/phy@78000" },
+		{ "ssphy_1", "/soc@0/phy@58000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_ipq9574_overlay = {
 	.fdt = __dtb_dwc3_qcom_ipq9574_begin,
 	.end = __dtb_dwc3_qcom_ipq9574_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "intc", "/soc@0/interrupt-controller@b000000" },
+		{ "usb_0_qmpphy", "/soc@0/phy@7d000" },
+		{ "usb_0_qusbphy", "/soc@0/phy@7b000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_msm8953_overlay = {
 	.fdt = __dtb_dwc3_qcom_msm8953_begin,
 	.end = __dtb_dwc3_qcom_msm8953_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "hsusb_phy", "/soc@0/phy@79000" },
+		{ "intc", "/soc@0/interrupt-controller@b000000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_msm8992_overlay = {
 	.fdt = __dtb_dwc3_qcom_msm8992_begin,
 	.end = __dtb_dwc3_qcom_msm8992_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "intc", "/soc@0/interrupt-controller@f9000000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_msm8994_overlay = {
 	.fdt = __dtb_dwc3_qcom_msm8994_begin,
 	.end = __dtb_dwc3_qcom_msm8994_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "intc", "/soc@0/interrupt-controller@f9000000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_msm8996_overlay = {
 	.fdt = __dtb_dwc3_qcom_msm8996_begin,
 	.end = __dtb_dwc3_qcom_msm8996_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "hsusb_phy1", "/soc@0/phy@7411000" },
+		{ "hsusb_phy2", "/soc@0/phy@7412000" },
+		{ "intc", "/soc@0/interrupt-controller@9bc0000" },
+		{ "usb3phy", "/soc@0/phy@7410000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_msm8996_oneplus_oneplus3_overlay = {
 	.fdt = __dtb_dwc3_qcom_msm8996_oneplus_oneplus3_begin,
 	.end = __dtb_dwc3_qcom_msm8996_oneplus_oneplus3_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "hsusb_phy1", "/soc@0/phy@7411000" },
+		{ "hsusb_phy2", "/soc@0/phy@7412000" },
+		{ "intc", "/soc@0/interrupt-controller@9bc0000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_msm8996_oneplus_oneplus3t_overlay = {
 	.fdt = __dtb_dwc3_qcom_msm8996_oneplus_oneplus3t_begin,
 	.end = __dtb_dwc3_qcom_msm8996_oneplus_oneplus3t_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "hsusb_phy1", "/soc@0/phy@7411000" },
+		{ "hsusb_phy2", "/soc@0/phy@7412000" },
+		{ "intc", "/soc@0/interrupt-controller@9bc0000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_msm8996_sony_dora_row_overlay = {
 	.fdt = __dtb_dwc3_qcom_msm8996_sony_dora_row_begin,
 	.end = __dtb_dwc3_qcom_msm8996_sony_dora_row_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "hsusb_phy1", "/soc@0/phy@7411000" },
+		{ "hsusb_phy2", "/soc@0/phy@7412000" },
+		{ "intc", "/soc@0/interrupt-controller@9bc0000" },
+		{ "usb3_id", "/usb3-id" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_msm8996_sony_kagura_row_overlay = {
 	.fdt = __dtb_dwc3_qcom_msm8996_sony_kagura_row_begin,
 	.end = __dtb_dwc3_qcom_msm8996_sony_kagura_row_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "hsusb_phy1", "/soc@0/phy@7411000" },
+		{ "hsusb_phy2", "/soc@0/phy@7412000" },
+		{ "intc", "/soc@0/interrupt-controller@9bc0000" },
+		{ "usb3_id", "/usb3-id" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_msm8996_sony_keyaki_row_overlay = {
 	.fdt = __dtb_dwc3_qcom_msm8996_sony_keyaki_row_begin,
 	.end = __dtb_dwc3_qcom_msm8996_sony_keyaki_row_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "hsusb_phy1", "/soc@0/phy@7411000" },
+		{ "hsusb_phy2", "/soc@0/phy@7412000" },
+		{ "intc", "/soc@0/interrupt-controller@9bc0000" },
+		{ "usb3_id", "/usb3-id" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_msm8996_xiaomi_gemini_overlay = {
 	.fdt = __dtb_dwc3_qcom_msm8996_xiaomi_gemini_begin,
 	.end = __dtb_dwc3_qcom_msm8996_xiaomi_gemini_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "hsusb_phy1", "/soc@0/phy@7411000" },
+		{ "hsusb_phy2", "/soc@0/phy@7412000" },
+		{ "intc", "/soc@0/interrupt-controller@9bc0000" },
+		{ "typec", "/soc@0/i2c@75b7000/typec@47" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_msm8996_xiaomi_natrium_overlay = {
 	.fdt = __dtb_dwc3_qcom_msm8996_xiaomi_natrium_begin,
 	.end = __dtb_dwc3_qcom_msm8996_xiaomi_natrium_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "hsusb_phy1", "/soc@0/phy@7411000" },
+		{ "hsusb_phy2", "/soc@0/phy@7412000" },
+		{ "intc", "/soc@0/interrupt-controller@9bc0000" },
+		{ "typec", "/soc@0/i2c@75b7000/typec@47" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_msm8996_xiaomi_scorpio_overlay = {
 	.fdt = __dtb_dwc3_qcom_msm8996_xiaomi_scorpio_begin,
 	.end = __dtb_dwc3_qcom_msm8996_xiaomi_scorpio_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "hsusb_phy1", "/soc@0/phy@7411000" },
+		{ "hsusb_phy2", "/soc@0/phy@7412000" },
+		{ "intc", "/soc@0/interrupt-controller@9bc0000" },
+		{ "typec", "/soc@0/i2c@75b7000/typec@47" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_msm8998_overlay = {
 	.fdt = __dtb_dwc3_qcom_msm8998_begin,
 	.end = __dtb_dwc3_qcom_msm8998_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "intc", "/soc@0/interrupt-controller@17a00000" },
+		{ "qusb2phy", "/soc@0/phy@c012000" },
+		{ "usb3phy", "/soc@0/phy@c010000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_msm8998_fxtec_pro1_overlay = {
 	.fdt = __dtb_dwc3_qcom_msm8998_fxtec_pro1_begin,
 	.end = __dtb_dwc3_qcom_msm8998_fxtec_pro1_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "extcon_usb", "/extcon-usb" },
+		{ "intc", "/soc@0/interrupt-controller@17a00000" },
+		{ "qusb2phy", "/soc@0/phy@c012000" },
+		{ "usb3phy", "/soc@0/phy@c010000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_msm8998_oneplus_cheeseburger_overlay = {
 	.fdt = __dtb_dwc3_qcom_msm8998_oneplus_cheeseburger_begin,
 	.end = __dtb_dwc3_qcom_msm8998_oneplus_cheeseburger_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "intc", "/soc@0/interrupt-controller@17a00000" },
+		{ "qusb2phy", "/soc@0/phy@c012000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_msm8998_oneplus_dumpling_overlay = {
 	.fdt = __dtb_dwc3_qcom_msm8998_oneplus_dumpling_begin,
 	.end = __dtb_dwc3_qcom_msm8998_oneplus_dumpling_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "intc", "/soc@0/interrupt-controller@17a00000" },
+		{ "qusb2phy", "/soc@0/phy@c012000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_msm8998_sony_xperia_lilac_overlay = {
 	.fdt = __dtb_dwc3_qcom_msm8998_sony_xperia_lilac_begin,
 	.end = __dtb_dwc3_qcom_msm8998_sony_xperia_lilac_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "extcon_usb", "/extcon-usb" },
+		{ "intc", "/soc@0/interrupt-controller@17a00000" },
+		{ "qusb2phy", "/soc@0/phy@c012000" },
+		{ "usb3phy", "/soc@0/phy@c010000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_msm8998_sony_xperia_maple_overlay = {
 	.fdt = __dtb_dwc3_qcom_msm8998_sony_xperia_maple_begin,
 	.end = __dtb_dwc3_qcom_msm8998_sony_xperia_maple_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "extcon_usb", "/extcon-usb" },
+		{ "intc", "/soc@0/interrupt-controller@17a00000" },
+		{ "qusb2phy", "/soc@0/phy@c012000" },
+		{ "usb3phy", "/soc@0/phy@c010000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_msm8998_sony_xperia_poplar_overlay = {
 	.fdt = __dtb_dwc3_qcom_msm8998_sony_xperia_poplar_begin,
 	.end = __dtb_dwc3_qcom_msm8998_sony_xperia_poplar_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "extcon_usb", "/extcon-usb" },
+		{ "intc", "/soc@0/interrupt-controller@17a00000" },
+		{ "qusb2phy", "/soc@0/phy@c012000" },
+		{ "usb3phy", "/soc@0/phy@c010000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_msm8998_xiaomi_sagit_overlay = {
 	.fdt = __dtb_dwc3_qcom_msm8998_xiaomi_sagit_begin,
 	.end = __dtb_dwc3_qcom_msm8998_xiaomi_sagit_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "intc", "/soc@0/interrupt-controller@17a00000" },
+		{ "qusb2phy", "/soc@0/phy@c012000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_qcm2290_overlay = {
 	.fdt = __dtb_dwc3_qcom_qcm2290_begin,
 	.end = __dtb_dwc3_qcom_qcm2290_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "apps_smmu", "/soc@0/iommu@c600000" },
+		{ "intc", "/soc@0/interrupt-controller@f200000" },
+		{ "mpm", "/remoteproc/interrupt-controller" },
+		{ "usb_hsphy", "/soc@0/phy@1613000" },
+		{ "usb_qmpphy", "/soc@0/phy@1615000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_qcm6490_overlay = {
 	.fdt = __dtb_dwc3_qcom_qcm6490_begin,
 	.end = __dtb_dwc3_qcom_qcm6490_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "apps_smmu", "/soc@0/iommu@15000000" },
+		{ "intc", "/soc@0/interrupt-controller@17a00000" },
+		{ "pdc", "/soc@0/interrupt-controller@b220000" },
+		{ "usb_1_hsphy", "/soc@0/phy@88e3000" },
+		{ "usb_1_qmpphy", "/soc@0/phy@88e8000" },
+		{ "usb_2_hsphy", "/soc@0/phy@88e4000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_qcs404_overlay = {
 	.fdt = __dtb_dwc3_qcom_qcs404_begin,
 	.end = __dtb_dwc3_qcom_qcs404_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "intc", "/soc@0/interrupt-controller@b000000" },
+		{ "usb2_phy_prim", "/soc@0/phy@7a000" },
+		{ "usb2_phy_sec", "/soc@0/phy@7c000" },
+		{ "usb3_phy", "/soc@0/phy@78000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_qcs615_overlay = {
 	.fdt = __dtb_dwc3_qcom_qcs615_begin,
 	.end = __dtb_dwc3_qcom_qcs615_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "apps_smmu", "/soc@0/iommu@15000000" },
+		{ "intc", "/soc@0/interrupt-controller@17a00000" },
+		{ "pdc", "/soc@0/interrupt-controller@b220000" },
+		{ "usb_1_hsphy", "/soc@0/phy@88e2000" },
+		{ "usb_hsphy_2", "/soc@0/phy@88e3000" },
+		{ "usb_qmpphy", "/soc@0/phy@88e6000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_qcs8300_overlay = {
 	.fdt = __dtb_dwc3_qcom_qcs8300_begin,
 	.end = __dtb_dwc3_qcom_qcs8300_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "apps_smmu", "/soc@0/iommu@15000000" },
+		{ "intc", "/soc@0/interrupt-controller@17a00000" },
+		{ "pdc", "/soc@0/interrupt-controller@b220000" },
+		{ "usb_1_hsphy", "/soc@0/phy@8904000" },
+		{ "usb_2_hsphy", "/soc@0/phy@8906000" },
+		{ "usb_qmpphy", "/soc@0/phy@8907000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_qdu1000_overlay = {
 	.fdt = __dtb_dwc3_qcom_qdu1000_begin,
 	.end = __dtb_dwc3_qcom_qdu1000_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "apps_smmu", "/soc@0/iommu@15000000" },
+		{ "intc", "/soc@0/interrupt-controller@17200000" },
+		{ "pdc", "/soc@0/interrupt-controller@b220000" },
+		{ "usb_1_hsphy", "/soc@0/phy@88e3000" },
+		{ "usb_1_qmpphy", "/soc@0/phy@88e5000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_qru1000_overlay = {
 	.fdt = __dtb_dwc3_qcom_qru1000_begin,
 	.end = __dtb_dwc3_qcom_qru1000_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "apps_smmu", "/soc@0/iommu@15000000" },
+		{ "intc", "/soc@0/interrupt-controller@17200000" },
+		{ "pdc", "/soc@0/interrupt-controller@b220000" },
+		{ "usb_1_hsphy", "/soc@0/phy@88e3000" },
+		{ "usb_1_qmpphy", "/soc@0/phy@88e5000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_sa8155p_overlay = {
 	.fdt = __dtb_dwc3_qcom_sa8155p_begin,
 	.end = __dtb_dwc3_qcom_sa8155p_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "apps_smmu", "/soc@0/iommu@15000000" },
+		{ "intc", "/soc@0/interrupt-controller@17a00000" },
+		{ "pdc", "/soc@0/interrupt-controller@b220000" },
+		{ "usb2phy_ac_en1_default", "/soc@0/pinctrl@3100000/usb2phy-ac-en1-default-state" },
+		{ "usb2phy_ac_en2_default", "/soc@0/pinctrl@3100000/usb2phy-ac-en2-default-state" },
+		{ "usb_1_hsphy", "/soc@0/phy@88e2000" },
+		{ "usb_1_qmpphy", "/soc@0/phy@88e8000" },
+		{ "usb_2_hsphy", "/soc@0/phy@88e3000" },
+		{ "usb_2_qmpphy", "/soc@0/phy@88eb000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_sa8540p_overlay = {
 	.fdt = __dtb_dwc3_qcom_sa8540p_begin,
 	.end = __dtb_dwc3_qcom_sa8540p_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "apps_smmu", "/soc@0/iommu@15000000" },
+		{ "intc", "/soc@0/interrupt-controller@17a00000" },
+		{ "pdc", "/soc@0/interrupt-controller@b220000" },
+		{ "usb_0_hsphy", "/soc@0/phy@88e5000" },
+		{ "usb_0_qmpphy", "/soc@0/phy@88eb000" },
+		{ "usb_1_hsphy", "/soc@0/phy@8902000" },
+		{ "usb_1_qmpphy", "/soc@0/phy@8903000" },
+		{ "usb_2_hsphy0", "/soc@0/phy@88e7000" },
+		{ "usb_2_hsphy1", "/soc@0/phy@88e8000" },
+		{ "usb_2_hsphy2", "/soc@0/phy@88e9000" },
+		{ "usb_2_hsphy3", "/soc@0/phy@88ea000" },
+		{ "usb_2_qmpphy0", "/soc@0/phy@88ef000" },
+		{ "usb_2_qmpphy1", "/soc@0/phy@88f1000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_sa8775p_overlay = {
 	.fdt = __dtb_dwc3_qcom_sa8775p_begin,
 	.end = __dtb_dwc3_qcom_sa8775p_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "apps_smmu", "/soc@0/iommu@15000000" },
+		{ "intc", "/soc@0/interrupt-controller@17a00000" },
+		{ "pdc", "/soc@0/interrupt-controller@b220000" },
+		{ "usb_0_hsphy", "/soc@0/phy@88e4000" },
+		{ "usb_0_qmpphy", "/soc@0/phy@88e8000" },
+		{ "usb_1_hsphy", "/soc@0/phy@88e6000" },
+		{ "usb_1_qmpphy", "/soc@0/phy@88ea000" },
+		{ "usb_2_hsphy", "/soc@0/phy@88e7000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_sar2130p_overlay = {
 	.fdt = __dtb_dwc3_qcom_sar2130p_begin,
 	.end = __dtb_dwc3_qcom_sar2130p_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "apps_smmu", "/soc@0/iommu@15000000" },
+		{ "intc", "/soc@0/interrupt-controller@17200000" },
+		{ "pdc", "/soc@0/interrupt-controller@b220000" },
+		{ "usb_1_hsphy", "/soc@0/phy@88e3000" },
+		{ "usb_dp_qmpphy", "/soc@0/phy@88e8000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_sc7180_overlay = {
 	.fdt = __dtb_dwc3_qcom_sc7180_begin,
 	.end = __dtb_dwc3_qcom_sc7180_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "apps_smmu", "/soc@0/iommu@15000000" },
+		{ "intc", "/soc@0/interrupt-controller@17a00000" },
+		{ "pdc", "/soc@0/interrupt-controller@b220000" },
+		{ "usb_1_hsphy", "/soc@0/phy@88e3000" },
+		{ "usb_1_qmpphy", "/soc@0/phy@88e8000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_sc7280_overlay = {
 	.fdt = __dtb_dwc3_qcom_sc7280_begin,
 	.end = __dtb_dwc3_qcom_sc7280_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "apps_smmu", "/soc@0/iommu@15000000" },
+		{ "intc", "/soc@0/interrupt-controller@17a00000" },
+		{ "pdc", "/soc@0/interrupt-controller@b220000" },
+		{ "usb_1_hsphy", "/soc@0/phy@88e3000" },
+		{ "usb_1_qmpphy", "/soc@0/phy@88e8000" },
+		{ "usb_2_hsphy", "/soc@0/phy@88e4000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_sc8180x_overlay = {
 	.fdt = __dtb_dwc3_qcom_sc8180x_begin,
 	.end = __dtb_dwc3_qcom_sc8180x_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "apps_smmu", "/soc@0/iommu@15000000" },
+		{ "intc", "/soc@0/interrupt-controller@17a00000" },
+		{ "pdc", "/soc@0/interrupt-controller@b220000" },
+		{ "usb_mp_hsphy0", "/soc@0/phy@88e4000" },
+		{ "usb_mp_hsphy1", "/soc@0/phy@88e5000" },
+		{ "usb_mp_qmpphy0", "/soc@0/phy@88eb000" },
+		{ "usb_mp_qmpphy1", "/soc@0/phy@88ec000" },
+		{ "usb_prim_hsphy", "/soc@0/phy@88e2000" },
+		{ "usb_prim_qmpphy", "/soc@0/phy@88e8000" },
+		{ "usb_sec_hsphy", "/soc@0/phy@88e3000" },
+		{ "usb_sec_qmpphy", "/soc@0/phy@88ee000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_sc8280xp_overlay = {
 	.fdt = __dtb_dwc3_qcom_sc8280xp_begin,
 	.end = __dtb_dwc3_qcom_sc8280xp_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "apps_smmu", "/soc@0/iommu@15000000" },
+		{ "intc", "/soc@0/interrupt-controller@17a00000" },
+		{ "pdc", "/soc@0/interrupt-controller@b220000" },
+		{ "usb_0_hsphy", "/soc@0/phy@88e5000" },
+		{ "usb_0_qmpphy", "/soc@0/phy@88eb000" },
+		{ "usb_1_hsphy", "/soc@0/phy@8902000" },
+		{ "usb_1_qmpphy", "/soc@0/phy@8903000" },
+		{ "usb_2_hsphy0", "/soc@0/phy@88e7000" },
+		{ "usb_2_hsphy1", "/soc@0/phy@88e8000" },
+		{ "usb_2_hsphy2", "/soc@0/phy@88e9000" },
+		{ "usb_2_hsphy3", "/soc@0/phy@88ea000" },
+		{ "usb_2_qmpphy0", "/soc@0/phy@88ef000" },
+		{ "usb_2_qmpphy1", "/soc@0/phy@88f1000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_sc8280xp_microsoft_blackrock_overlay = {
 	.fdt = __dtb_dwc3_qcom_sc8280xp_microsoft_blackrock_begin,
 	.end = __dtb_dwc3_qcom_sc8280xp_microsoft_blackrock_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "apps_smmu", "/soc@0/iommu@15000000" },
+		{ "intc", "/soc@0/interrupt-controller@17a00000" },
+		{ "pdc", "/soc@0/interrupt-controller@b220000" },
+		{ "usb_0_hsphy", "/soc@0/phy@88e5000" },
+		{ "usb_0_qmpphy", "/soc@0/phy@88eb000" },
+		{ "usb_1_hsphy", "/soc@0/phy@8902000" },
+		{ "usb_1_qmpphy", "/soc@0/phy@8903000" },
+		{ "usb_2_hsphy0", "/soc@0/phy@88e7000" },
+		{ "usb_2_qmpphy0", "/soc@0/phy@88ef000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_sda660_overlay = {
 	.fdt = __dtb_dwc3_qcom_sda660_begin,
 	.end = __dtb_dwc3_qcom_sda660_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "extcon_usb", "/extcon-usb" },
+		{ "intc", "/soc@0/interrupt-controller@17a00000" },
+		{ "qusb2phy0", "/soc@0/phy@c012000" },
+		{ "qusb2phy1", "/soc@0/phy@c014000" },
+		{ "usb3_qmpphy", "/soc@0/phy@c010000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_sdm450_overlay = {
 	.fdt = __dtb_dwc3_qcom_sdm450_begin,
 	.end = __dtb_dwc3_qcom_sdm450_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "hsusb_phy", "/soc@0/phy@79000" },
+		{ "intc", "/soc@0/interrupt-controller@b000000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_sdm630_overlay = {
 	.fdt = __dtb_dwc3_qcom_sdm630_begin,
 	.end = __dtb_dwc3_qcom_sdm630_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "extcon_usb", "/extcon-usb" },
+		{ "intc", "/soc@0/interrupt-controller@17a00000" },
+		{ "qusb2phy0", "/soc@0/phy@c012000" },
+		{ "qusb2phy1", "/soc@0/phy@c014000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_sdm632_overlay = {
 	.fdt = __dtb_dwc3_qcom_sdm632_begin,
 	.end = __dtb_dwc3_qcom_sdm632_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "hsusb_phy", "/soc@0/phy@79000" },
+		{ "intc", "/soc@0/interrupt-controller@b000000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_sdm636_overlay = {
 	.fdt = __dtb_dwc3_qcom_sdm636_begin,
 	.end = __dtb_dwc3_qcom_sdm636_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "intc", "/soc@0/interrupt-controller@17a00000" },
+		{ "qusb2phy0", "/soc@0/phy@c012000" },
+		{ "qusb2phy1", "/soc@0/phy@c014000" },
+		{ "usb3_qmpphy", "/soc@0/phy@c010000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_sdm660_overlay = {
 	.fdt = __dtb_dwc3_qcom_sdm660_begin,
 	.end = __dtb_dwc3_qcom_sdm660_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "extcon_usb", "/extcon-usb" },
+		{ "intc", "/soc@0/interrupt-controller@17a00000" },
+		{ "qusb2phy0", "/soc@0/phy@c012000" },
+		{ "qusb2phy1", "/soc@0/phy@c014000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_sdm670_overlay = {
 	.fdt = __dtb_dwc3_qcom_sdm670_begin,
 	.end = __dtb_dwc3_qcom_sdm670_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "apps_smmu", "/soc@0/iommu@15000000" },
+		{ "intc", "/soc@0/interrupt-controller@17a00000" },
+		{ "pdc", "/soc@0/interrupt-controller@b220000" },
+		{ "usb_1_hsphy", "/soc@0/phy@88e2000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_sdm845_overlay = {
 	.fdt = __dtb_dwc3_qcom_sdm845_begin,
 	.end = __dtb_dwc3_qcom_sdm845_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "apps_smmu", "/soc@0/iommu@15000000" },
+		{ "intc", "/soc@0/interrupt-controller@17a00000" },
+		{ "pdc_intc", "/soc@0/interrupt-controller@b220000" },
+		{ "usb_1_hsphy", "/soc@0/phy@88e2000" },
+		{ "usb_2_hsphy", "/soc@0/phy@88e3000" },
+		{ "usb_2_qmpphy", "/soc@0/phy@88eb000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_sdm845_lenovo_yoga_c630_overlay = {
 	.fdt = __dtb_dwc3_qcom_sdm845_lenovo_yoga_c630_begin,
 	.end = __dtb_dwc3_qcom_sdm845_lenovo_yoga_c630_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "apps_smmu", "/soc@0/iommu@15000000" },
+		{ "intc", "/soc@0/interrupt-controller@17a00000" },
+		{ "pdc_intc", "/soc@0/interrupt-controller@b220000" },
+		{ "usb_1_hsphy", "/soc@0/phy@88e2000" },
+		{ "usb_1_qmpphy", "/soc@0/phy@88e8000" },
+		{ "usb_2_hsphy", "/soc@0/phy@88e3000" },
+		{ "usb_2_qmpphy", "/soc@0/phy@88eb000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_sdm845_lg_judyln_overlay = {
 	.fdt = __dtb_dwc3_qcom_sdm845_lg_judyln_begin,
 	.end = __dtb_dwc3_qcom_sdm845_lg_judyln_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "apps_smmu", "/soc@0/iommu@15000000" },
+		{ "intc", "/soc@0/interrupt-controller@17a00000" },
+		{ "pdc_intc", "/soc@0/interrupt-controller@b220000" },
+		{ "usb_1_hsphy", "/soc@0/phy@88e2000" },
+		{ "usb_1_qmpphy", "/soc@0/phy@88e8000" },
+		{ "usb_2_hsphy", "/soc@0/phy@88e3000" },
+		{ "usb_2_qmpphy", "/soc@0/phy@88eb000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_sdm845_lg_judyp_overlay = {
 	.fdt = __dtb_dwc3_qcom_sdm845_lg_judyp_begin,
 	.end = __dtb_dwc3_qcom_sdm845_lg_judyp_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "apps_smmu", "/soc@0/iommu@15000000" },
+		{ "intc", "/soc@0/interrupt-controller@17a00000" },
+		{ "pdc_intc", "/soc@0/interrupt-controller@b220000" },
+		{ "usb_1_hsphy", "/soc@0/phy@88e2000" },
+		{ "usb_1_qmpphy", "/soc@0/phy@88e8000" },
+		{ "usb_2_hsphy", "/soc@0/phy@88e3000" },
+		{ "usb_2_qmpphy", "/soc@0/phy@88eb000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_sdm845_qcom_sdm845_mtp_overlay = {
 	.fdt = __dtb_dwc3_qcom_sdm845_qcom_sdm845_mtp_begin,
 	.end = __dtb_dwc3_qcom_sdm845_qcom_sdm845_mtp_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "apps_smmu", "/soc@0/iommu@15000000" },
+		{ "intc", "/soc@0/interrupt-controller@17a00000" },
+		{ "pdc_intc", "/soc@0/interrupt-controller@b220000" },
+		{ "usb_1_hsphy", "/soc@0/phy@88e2000" },
+		{ "usb_1_qmpphy", "/soc@0/phy@88e8000" },
+		{ "usb_2_hsphy", "/soc@0/phy@88e3000" },
+		{ "usb_2_qmpphy", "/soc@0/phy@88eb000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_sdm845_samsung_starqltechn_overlay = {
 	.fdt = __dtb_dwc3_qcom_sdm845_samsung_starqltechn_begin,
 	.end = __dtb_dwc3_qcom_sdm845_samsung_starqltechn_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "apps_smmu", "/soc@0/iommu@15000000" },
+		{ "intc", "/soc@0/interrupt-controller@17a00000" },
+		{ "pdc_intc", "/soc@0/interrupt-controller@b220000" },
+		{ "usb_1_hsphy", "/soc@0/phy@88e2000" },
+		{ "usb_1_qmpphy", "/soc@0/phy@88e8000" },
+		{ "usb_2_hsphy", "/soc@0/phy@88e3000" },
+		{ "usb_2_qmpphy", "/soc@0/phy@88eb000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_sdm845_samsung_w737_overlay = {
 	.fdt = __dtb_dwc3_qcom_sdm845_samsung_w737_begin,
 	.end = __dtb_dwc3_qcom_sdm845_samsung_w737_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "apps_smmu", "/soc@0/iommu@15000000" },
+		{ "intc", "/soc@0/interrupt-controller@17a00000" },
+		{ "pdc_intc", "/soc@0/interrupt-controller@b220000" },
+		{ "usb_1_hsphy", "/soc@0/phy@88e2000" },
+		{ "usb_1_qmpphy", "/soc@0/phy@88e8000" },
+		{ "usb_2_hsphy", "/soc@0/phy@88e3000" },
+		{ "usb_2_qmpphy", "/soc@0/phy@88eb000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_sdm845_shift_axolotl_overlay = {
 	.fdt = __dtb_dwc3_qcom_sdm845_shift_axolotl_begin,
 	.end = __dtb_dwc3_qcom_sdm845_shift_axolotl_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "apps_smmu", "/soc@0/iommu@15000000" },
+		{ "intc", "/soc@0/interrupt-controller@17a00000" },
+		{ "pdc_intc", "/soc@0/interrupt-controller@b220000" },
+		{ "usb_1_hsphy", "/soc@0/phy@88e2000" },
+		{ "usb_1_qmpphy", "/soc@0/phy@88e8000" },
+		{ "usb_2_hsphy", "/soc@0/phy@88e3000" },
+		{ "usb_2_qmpphy", "/soc@0/phy@88eb000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_sdm845_thundercomm_db845c_overlay = {
 	.fdt = __dtb_dwc3_qcom_sdm845_thundercomm_db845c_begin,
 	.end = __dtb_dwc3_qcom_sdm845_thundercomm_db845c_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "apps_smmu", "/soc@0/iommu@15000000" },
+		{ "intc", "/soc@0/interrupt-controller@17a00000" },
+		{ "pdc_intc", "/soc@0/interrupt-controller@b220000" },
+		{ "usb_1_hsphy", "/soc@0/phy@88e2000" },
+		{ "usb_1_qmpphy", "/soc@0/phy@88e8000" },
+		{ "usb_2_hsphy", "/soc@0/phy@88e3000" },
+		{ "usb_2_qmpphy", "/soc@0/phy@88eb000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_sdm845_xiaomi_beryllium_overlay = {
 	.fdt = __dtb_dwc3_qcom_sdm845_xiaomi_beryllium_begin,
 	.end = __dtb_dwc3_qcom_sdm845_xiaomi_beryllium_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "apps_smmu", "/soc@0/iommu@15000000" },
+		{ "intc", "/soc@0/interrupt-controller@17a00000" },
+		{ "pdc_intc", "/soc@0/interrupt-controller@b220000" },
+		{ "usb_1_hsphy", "/soc@0/phy@88e2000" },
+		{ "usb_1_qmpphy", "/soc@0/phy@88e8000" },
+		{ "usb_2_hsphy", "/soc@0/phy@88e3000" },
+		{ "usb_2_qmpphy", "/soc@0/phy@88eb000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_sdm845_xiaomi_beryllium_ebbg_overlay = {
 	.fdt = __dtb_dwc3_qcom_sdm845_xiaomi_beryllium_ebbg_begin,
 	.end = __dtb_dwc3_qcom_sdm845_xiaomi_beryllium_ebbg_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "apps_smmu", "/soc@0/iommu@15000000" },
+		{ "intc", "/soc@0/interrupt-controller@17a00000" },
+		{ "pdc_intc", "/soc@0/interrupt-controller@b220000" },
+		{ "usb_1_hsphy", "/soc@0/phy@88e2000" },
+		{ "usb_1_qmpphy", "/soc@0/phy@88e8000" },
+		{ "usb_2_hsphy", "/soc@0/phy@88e3000" },
+		{ "usb_2_qmpphy", "/soc@0/phy@88eb000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_sdx55_overlay = {
 	.fdt = __dtb_dwc3_qcom_sdx55_begin,
 	.end = __dtb_dwc3_qcom_sdx55_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "apps_smmu", "/soc/iommu@15000000" },
+		{ "intc", "/soc/interrupt-controller@17800000" },
+		{ "pdc", "/soc/interrupt-controller@b210000" },
+		{ "usb_hsphy", "/soc/phy@ff4000" },
+		{ "usb_qmpphy", "/soc/phy@ff6000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_sdx65_overlay = {
 	.fdt = __dtb_dwc3_qcom_sdx65_begin,
 	.end = __dtb_dwc3_qcom_sdx65_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "apps_smmu", "/soc/iommu@15000000" },
+		{ "intc", "/soc/interrupt-controller@17800000" },
+		{ "pdc", "/soc/interrupt-controller@b210000" },
+		{ "usb_hsphy", "/soc/phy@ff4000" },
+		{ "usb_qmpphy", "/soc/phy@ff6000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_sdx75_overlay = {
 	.fdt = __dtb_dwc3_qcom_sdx75_begin,
 	.end = __dtb_dwc3_qcom_sdx75_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "apps_smmu", "/soc@0/iommu@15000000" },
+		{ "intc", "/soc@0/interrupt-controller@17200000" },
+		{ "pdc", "/soc@0/interrupt-controller@b220000" },
+		{ "usb_hsphy", "/soc@0/phy@ff4000" },
+		{ "usb_qmpphy", "/soc@0/phy@ff6000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_sm4250_overlay = {
 	.fdt = __dtb_dwc3_qcom_sm4250_begin,
 	.end = __dtb_dwc3_qcom_sm4250_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "apps_smmu", "/soc@0/iommu@c600000" },
+		{ "intc", "/soc@0/interrupt-controller@f200000" },
+		{ "usb_hsphy", "/soc@0/phy@1613000" },
+		{ "usb_qmpphy", "/soc@0/phy@1615000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_sm4250_oneplus_billie2_overlay = {
 	.fdt = __dtb_dwc3_qcom_sm4250_oneplus_billie2_begin,
 	.end = __dtb_dwc3_qcom_sm4250_oneplus_billie2_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "apps_smmu", "/soc@0/iommu@c600000" },
+		{ "intc", "/soc@0/interrupt-controller@f200000" },
+		{ "usb_hsphy", "/soc@0/phy@1613000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_sm6115_overlay = {
 	.fdt = __dtb_dwc3_qcom_sm6115_begin,
 	.end = __dtb_dwc3_qcom_sm6115_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "apps_smmu", "/soc@0/iommu@c600000" },
+		{ "intc", "/soc@0/interrupt-controller@f200000" },
+		{ "usb_hsphy", "/soc@0/phy@1613000" },
+		{ "usb_qmpphy", "/soc@0/phy@1615000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_sm6115_lenovo_j606f_overlay = {
 	.fdt = __dtb_dwc3_qcom_sm6115_lenovo_j606f_begin,
 	.end = __dtb_dwc3_qcom_sm6115_lenovo_j606f_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "apps_smmu", "/soc@0/iommu@c600000" },
+		{ "intc", "/soc@0/interrupt-controller@f200000" },
+		{ "usb_hsphy", "/soc@0/phy@1613000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_sm6125_overlay = {
 	.fdt = __dtb_dwc3_qcom_sm6125_begin,
 	.end = __dtb_dwc3_qcom_sm6125_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "apps_smmu", "/soc@0/iommu@c600000" },
+		{ "extcon_usb", "/extcon-usb" },
+		{ "hsusb_phy1", "/soc@0/phy@1613000" },
+		{ "intc", "/soc@0/interrupt-controller@f200000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_sm6350_overlay = {
 	.fdt = __dtb_dwc3_qcom_sm6350_begin,
 	.end = __dtb_dwc3_qcom_sm6350_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "apps_smmu", "/soc@0/iommu@15000000" },
+		{ "intc", "/soc@0/interrupt-controller@17a00000" },
+		{ "pdc", "/soc@0/interrupt-controller@b220000" },
+		{ "usb_1_hsphy", "/soc@0/phy@88e3000" },
+		{ "usb_1_qmpphy", "/soc@0/phy@88e8000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_sm6375_overlay = {
 	.fdt = __dtb_dwc3_qcom_sm6375_begin,
 	.end = __dtb_dwc3_qcom_sm6375_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "apps_smmu", "/soc@0/iommu@c600000" },
+		{ "intc", "/soc@0/interrupt-controller@f200000" },
+		{ "mpm", "/interrupt-controller" },
+		{ "usb_1_hsphy", "/soc@0/phy@162b000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_sm7125_overlay = {
 	.fdt = __dtb_dwc3_qcom_sm7125_begin,
 	.end = __dtb_dwc3_qcom_sm7125_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "apps_smmu", "/soc@0/iommu@15000000" },
+		{ "intc", "/soc@0/interrupt-controller@17a00000" },
+		{ "pdc", "/soc@0/interrupt-controller@b220000" },
+		{ "usb_1_hsphy", "/soc@0/phy@88e3000" },
+		{ "usb_1_qmpphy", "/soc@0/phy@88e8000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_sm7225_overlay = {
 	.fdt = __dtb_dwc3_qcom_sm7225_begin,
 	.end = __dtb_dwc3_qcom_sm7225_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "apps_smmu", "/soc@0/iommu@15000000" },
+		{ "intc", "/soc@0/interrupt-controller@17a00000" },
+		{ "pdc", "/soc@0/interrupt-controller@b220000" },
+		{ "usb_1_hsphy", "/soc@0/phy@88e3000" },
+		{ "usb_1_qmpphy", "/soc@0/phy@88e8000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_sm7325_overlay = {
 	.fdt = __dtb_dwc3_qcom_sm7325_begin,
 	.end = __dtb_dwc3_qcom_sm7325_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "apps_smmu", "/soc@0/iommu@15000000" },
+		{ "intc", "/soc@0/interrupt-controller@17a00000" },
+		{ "pdc", "/soc@0/interrupt-controller@b220000" },
+		{ "usb_1_hsphy", "/soc@0/phy@88e3000" },
+		{ "usb_2_hsphy", "/soc@0/phy@88e4000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_sm8150_overlay = {
 	.fdt = __dtb_dwc3_qcom_sm8150_begin,
 	.end = __dtb_dwc3_qcom_sm8150_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "apps_smmu", "/soc@0/iommu@15000000" },
+		{ "intc", "/soc@0/interrupt-controller@17a00000" },
+		{ "pdc", "/soc@0/interrupt-controller@b220000" },
+		{ "usb_1_hsphy", "/soc@0/phy@88e2000" },
+		{ "usb_1_qmpphy", "/soc@0/phy@88e8000" },
+		{ "usb_2_hsphy", "/soc@0/phy@88e3000" },
+		{ "usb_2_qmpphy", "/soc@0/phy@88eb000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_sm8250_overlay = {
 	.fdt = __dtb_dwc3_qcom_sm8250_begin,
 	.end = __dtb_dwc3_qcom_sm8250_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "apps_smmu", "/soc@0/iommu@15000000" },
+		{ "intc", "/soc@0/interrupt-controller@17a00000" },
+		{ "pdc", "/soc@0/interrupt-controller@b220000" },
+		{ "usb_1_hsphy", "/soc@0/phy@88e3000" },
+		{ "usb_1_qmpphy", "/soc@0/phy@88e8000" },
+		{ "usb_2_hsphy", "/soc@0/phy@88e4000" },
+		{ "usb_2_qmpphy", "/soc@0/phy@88eb000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_sm8250_xiaomi_elish_overlay = {
 	.fdt = __dtb_dwc3_qcom_sm8250_xiaomi_elish_begin,
 	.end = __dtb_dwc3_qcom_sm8250_xiaomi_elish_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "apps_smmu", "/soc@0/iommu@15000000" },
+		{ "intc", "/soc@0/interrupt-controller@17a00000" },
+		{ "pdc", "/soc@0/interrupt-controller@b220000" },
+		{ "usb_1_hsphy", "/soc@0/phy@88e3000" },
+		{ "usb_2_hsphy", "/soc@0/phy@88e4000" },
+		{ "usb_2_qmpphy", "/soc@0/phy@88eb000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_sm8350_overlay = {
 	.fdt = __dtb_dwc3_qcom_sm8350_begin,
 	.end = __dtb_dwc3_qcom_sm8350_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "apps_smmu", "/soc@0/iommu@15000000" },
+		{ "intc", "/soc@0/interrupt-controller@17a00000" },
+		{ "pdc", "/soc@0/interrupt-controller@b220000" },
+		{ "usb_1_hsphy", "/soc@0/phy@88e3000" },
+		{ "usb_1_qmpphy", "/soc@0/phy@88e8000" },
+		{ "usb_2_hsphy", "/soc@0/phy@88e4000" },
+		{ "usb_2_qmpphy", "/soc@0/phy@88eb000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_sm8350_qcom_sm8350_hdk_overlay = {
 	.fdt = __dtb_dwc3_qcom_sm8350_qcom_sm8350_hdk_begin,
 	.end = __dtb_dwc3_qcom_sm8350_qcom_sm8350_hdk_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "apps_smmu", "/soc@0/iommu@15000000" },
+		{ "intc", "/soc@0/interrupt-controller@17a00000" },
+		{ "pdc", "/soc@0/interrupt-controller@b220000" },
+		{ "usb_1_hsphy", "/soc@0/phy@88e3000" },
+		{ "usb_1_qmpphy", "/soc@0/phy@88e8000" },
+		{ "usb_2_hsphy", "/soc@0/phy@88e4000" },
+		{ "usb_2_qmpphy", "/soc@0/phy@88eb000" },
+		{ "usb_hub_enabled_state", "/soc@0/pinctrl@f100000/usb-hub-enabled-state" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_sm8450_overlay = {
 	.fdt = __dtb_dwc3_qcom_sm8450_begin,
 	.end = __dtb_dwc3_qcom_sm8450_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "apps_smmu", "/soc@0/iommu@15000000" },
+		{ "intc", "/soc@0/interrupt-controller@17100000" },
+		{ "pdc", "/soc@0/interrupt-controller@b220000" },
+		{ "usb_1_hsphy", "/soc@0/phy@88e3000" },
+		{ "usb_1_qmpphy", "/soc@0/phy@88e8000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_sm8550_overlay = {
 	.fdt = __dtb_dwc3_qcom_sm8550_begin,
 	.end = __dtb_dwc3_qcom_sm8550_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "apps_smmu", "/soc@0/iommu@15000000" },
+		{ "intc", "/soc@0/interrupt-controller@17100000" },
+		{ "pdc", "/soc@0/interrupt-controller@b220000" },
+		{ "usb_1_hsphy", "/soc@0/phy@88e3000" },
+		{ "usb_dp_qmpphy", "/soc@0/phy@88e8000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_sm8650_overlay = {
 	.fdt = __dtb_dwc3_qcom_sm8650_begin,
 	.end = __dtb_dwc3_qcom_sm8650_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "apps_smmu", "/soc@0/iommu@15000000" },
+		{ "intc", "/soc@0/interrupt-controller@17100000" },
+		{ "pdc", "/soc@0/interrupt-controller@b220000" },
+		{ "usb_1_hsphy", "/soc@0/phy@88e3000" },
+		{ "usb_dp_qmpphy", "/soc@0/phy@88e8000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_x1e80100_overlay = {
 	.fdt = __dtb_dwc3_qcom_x1e80100_begin,
 	.end = __dtb_dwc3_qcom_x1e80100_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "apps_smmu", "/soc@0/iommu@15000000" },
+		{ "intc", "/soc@0/interrupt-controller@17000000" },
+		{ "pdc", "/soc@0/interrupt-controller@b220000" },
+		{ "usb_1_ss0_hsphy", "/soc@0/phy@fd3000" },
+		{ "usb_1_ss0_qmpphy", "/soc@0/phy@fd5000" },
+		{ "usb_1_ss1_hsphy", "/soc@0/phy@fd9000" },
+		{ "usb_1_ss1_qmpphy", "/soc@0/phy@fda000" },
+		{ "usb_1_ss2_hsphy", "/soc@0/phy@fde000" },
+		{ "usb_1_ss2_qmpphy", "/soc@0/phy@fdf000" },
+		{ "usb_2_hsphy", "/soc@0/phy@88e0000" },
+		{ "usb_mp_hsphy0", "/soc@0/phy@88e1000" },
+		{ "usb_mp_hsphy1", "/soc@0/phy@88e2000" },
+		{ "usb_mp_qmpphy0", "/soc@0/phy@88e3000" },
+		{ "usb_mp_qmpphy1", "/soc@0/phy@88e5000" },
+		{}
+	}
 };
 
 static const struct dwc3_overlay_data dwc3_qcom_x1e80100_hp_omnibook_x14_overlay = {
 	.fdt = __dtb_dwc3_qcom_x1e80100_hp_omnibook_x14_begin,
 	.end = __dtb_dwc3_qcom_x1e80100_hp_omnibook_x14_end,
 	.migrate_match = "qcom,dwc3",
+	.symbols = (struct dwc3_overlay_symbol[]) {
+		{ "apps_smmu", "/soc@0/iommu@15000000" },
+		{ "intc", "/soc@0/interrupt-controller@17000000" },
+		{ "pdc", "/soc@0/interrupt-controller@b220000" },
+		{ "usb_1_ss0_hsphy", "/soc@0/phy@fd3000" },
+		{ "usb_1_ss0_qmpphy", "/soc@0/phy@fd5000" },
+		{ "usb_1_ss1_hsphy", "/soc@0/phy@fd9000" },
+		{ "usb_1_ss1_qmpphy", "/soc@0/phy@fda000" },
+		{ "usb_1_ss2_hsphy", "/soc@0/phy@fde000" },
+		{ "usb_1_ss2_qmpphy", "/soc@0/phy@fdf000" },
+		{ "usb_2_hsphy", "/soc@0/phy@88e0000" },
+		{ "usb_mp_hsphy0", "/soc@0/phy@88e1000" },
+		{ "usb_mp_qmpphy0", "/soc@0/phy@88e3000" },
+		{}
+	}
 };
 
 static const struct of_device_id dwc3_flatten_of_match[] = {
@@ -738,10 +1465,36 @@  static int dwc3_flattening_migrate(struct of_changeset *ocs,
 	return ret;
 }
 
+static int dwc3_flattening_ensure_symbols(struct of_changeset *ocs,
+					  const struct dwc3_overlay_symbol *symbols)
+{
+	const struct dwc3_overlay_symbol *s;
+	struct device_node *symbols_np;
+	int ret;
+
+	symbols_np = of_find_node_by_path("/__symbols__");
+	of_node_put(symbols_np);
+	if (symbols_np)
+		return 0;
+
+	symbols_np = of_changeset_create_node(ocs, of_root, "__symbols__");
+	if (!symbols_np)
+		return -ENOMEM;
+
+	for (s = symbols; s->symbol; s++) {
+		ret = of_changeset_add_prop_string(ocs, symbols_np, s->symbol, s->path);
+		if (ret)
+			return ret;
+	}
+
+	return 0;
+}
+
 static int dwc3_flattening_init(void)
 {
 	const struct dwc3_overlay_data *data;
 	const struct of_device_id *match;
+	struct of_changeset symbols_ocs;
 	struct of_changeset migrate_ocs;
 	struct device_node *np;
 	int overlay_ovcs;
@@ -763,6 +1516,15 @@  static int dwc3_flattening_init(void)
 	}
 	of_node_put(np);
 
+	of_changeset_init(&symbols_ocs);
+	ret = dwc3_flattening_ensure_symbols(&symbols_ocs, data->symbols);
+	if (ret < 0)
+		goto out_destroy_symbols;
+
+	ret = of_changeset_apply(&symbols_ocs);
+	if (ret < 0)
+		goto out_destroy_symbols;
+
 	of_changeset_init(&migrate_ocs);
 	for_each_compatible_node(np, NULL, data->migrate_match) {
 		ret = dwc3_flattening_migrate(&migrate_ocs, np);
@@ -784,6 +1546,9 @@  static int dwc3_flattening_init(void)
 
 out_migrate_destroy:
 	of_changeset_destroy(&migrate_ocs);
+	of_changeset_revert(&symbols_ocs);
+out_destroy_symbols:
+	of_changeset_destroy(&symbols_ocs);
 
 	return ret;
 }