ADD interconnect support for Qualcomm DWC3 driver
Subsystems (5)
v4 cover ADD interconnect support for Qualcomm DWC3 driver
This path series aims to add interconnect support in dwc3-qcom driver on SDM845 SoCs.
Changes from v3 -> v4
Quoted 2 lines
Fixed review comments from Matthias
[PATCH 1/3] and [PATCH 3/3] remains unchanged
Changes from v2 -> v3
Quoted 2 lines
Fixed review comments from Matthias and Manu changed the functions prefix from usb_* to dwc3_qcom_*
Changes since V1:
Quoted 2 lines
Comments by Georgi Djakov on "[PATCH 2/3]" addressed [PATCH 1/3] and [PATCH 3/3] remains unchanged
Chandana Kishori Chiluveru (3):
dt-bindings: Introduce interconnect properties for Qualcomm DWC3
driver
usb: dwc3: qcom: Add interconnect support in dwc3 driver
arm64: dts: sdm845: Add interconnect properties for USB
.../devicetree/bindings/usb/qcom,dwc3.txt | 13 ++ arch/arm64/boot/dts/qcom/sdm845.dtsi | 12 ++ drivers/usb/dwc3/dwc3-qcom.c | 145 ++++++++++++++++++++- 3 files changed, 168 insertions(+), 2 deletions(-)
Signature · 2 lines
Qualcomm India Private Limited, on behalf of Qualcomm Innovation Center, Inc., is a member of Code Aurora Forum, a Linux Foundation Collaborative Project.
PATCH v4 1/3 dt-bindings: Introduce interconnect properties for Qualcomm DWC3 driver
From: Chandana Kishori Chiluveru <[email protected]>
Add documentation for the interconnects and interconnect-names properties for USB as detailed by bindings/interconnect/interconnect.txt.
--- Documentation/devicetree/bindings/usb/qcom,dwc3.txt | 13 +++++++++++++ 1 file changed, 13 insertions(+)
Documentation/devicetree/bindings/usb/qcom,dwc3.txt +13 -0
@@ -33,6 +33,16 @@ Optional clocks: Optional properties: - resets: Phandle to reset control that resets core and wrapper. +- interconnects: Pairs of phandles and interconnect provider specifiers + to denote the edge source and destination ports of + the interconnect path. Please refer to + Documentation/devicetree/bindings/interconnect/ + for more details. +- interconnect-names: List of interconnect path name strings sorted in the same + order as the interconnects property. Consumer drivers will use + interconnect-names to match interconnect paths with interconnect + specifiers. Please refer to Documentation/devicetree/bindings/ + interconnect/ for more details. - interrupts: specifies interrupts from controller wrapper used to wakeup from low power/susepnd state. Must contain one or more entry for interrupt-names property
@@ -74,6 +84,9 @@ Example device nodes: #size-cells = <1>; ranges; + interconnects = <&qnoc MASTER_USB3_0 &qnoc SLAVE_EBI1>, + <&qnoc MASTER_APPSS_PROC &qnoc SLAVE_USB3_0>; + interconnect-names = "usb-ddr", "apps-usb"; interrupts = <0 131 0>, <0 486 0>, <0 488 0>, <0 489 0>; interrupt-names = "hs_phy_irq", "ss_phy_irq", "dm_hs_phy_irq", "dp_hs_phy_irq";
Signature · 2 lines
Qualcomm India Private Limited, on behalf of Qualcomm Innovation Center, Inc., is a member of Code Aurora Forum, a Linux Foundation Collaborative Project.
Re: [PATCH V4 1/3] dt-bindings: Introduce interconnect properties for Qualcomm DWC3 driver
Hi Chandana,
sorry for the late reply to v4, I missed it since I wasn't in cc. I probably would have caught it regardless if [email protected] was in cc, most patches for QCOM drivers/code include it, which helps with monitoring.
Quoted 33 lines · cchiluve
From: Chandana Kishori Chiluveru <[email protected]>
Add documentation for the interconnects and interconnect-names properties for USB as detailed by
bindings/interconnect/interconnect.txt.Signed-off-by Chandana Kishori Chiluveru <[email protected]>Reviewed-by Matthias Kaehlcke <[email protected]>--- Documentation/devicetree/bindings/usb/qcom,dwc3.txt | 13 +++++++++++++ 1 file changed, 13 insertions(+)Documentation/devicetree/bindings/usb/qcom,dwc3.txt +10
-0@@ -33,6 +33,16 @@ Optional clocks: Optional properties: - resets: Phandle to reset control that resets core and wrapper. +- interconnects: Pairs of phandles and interconnect provider specifiers + to denote the edge source and destination ports of + the interconnect path. Please refer to + Documentation/devicetree/bindings/interconnect/ + for more details. +- interconnect-names: List of interconnect path name strings sorted in the same + order as the interconnects property. Consumer drivers will use + interconnect-names to match interconnect paths with interconnect + specifiers. Please refer to Documentation/devicetree/bindings/ + interconnect/ for more details. - interrupts: specifies interrupts from controller wrapper used to wakeup from low power/susepnd state. Must contain one or more entry for interrupt-names property
Documentation/devicetree/bindings/usb/qcom,dwc3.txt Example device nodes: · line 92
Quoted 9 lines
Documentation/devicetree/bindings/usb/qcom,dwc3.txt +3
-0@@ -74,6 +84,9 @@ Example device nodes: #size-cells = <1>; ranges; + interconnects = <&qnoc MASTER_USB3_0 &qnoc SLAVE_EBI1>, + <&qnoc MASTER_APPSS_PROC &qnoc SLAVE_USB3_0>; + interconnect-names = "usb-ddr", "apps-usb"; interrupts = <0 131 0>, <0 486 0>, <0 488 0>, <0 489 0>; interrupt-names = "hs_phy_irq", "ss_phy_irq", "dm_hs_phy_irq", "dp_hs_phy_irq";
The binding is being converted to DT schema (https://patchwork.kernel.org/patch/11293385/),
this patch will require a re-spin once the conversion lands/stabilizes.
PATCH v4 2/3 usb: dwc3: qcom: Add interconnect support in dwc3 driver
In reply to cchiluveFrom: Chandana Kishori Chiluveru <[email protected]>
Add interconnect support in dwc3-qcom driver to vote for bus bandwidth.
This requires for two different paths - from USB master to DDR slave. The other is from APPS master to USB slave.
--- drivers/usb/dwc3/dwc3-qcom.c | 145 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 143 insertions(+), 2 deletions(-)
drivers/usb/dwc3/dwc3-qcom.c +143 -2
@@ -12,6 +12,7 @@#include <linux/module.h> #include <linux/kernel.h> #include <linux/extcon.h> +#include <linux/interconnect.h> #include <linux/of_platform.h> #include <linux/platform_device.h> #include <linux/phy/phy.h>
@@ -59,8 +60,13 @@ struct dwc3_qcom {enum usb_dr_mode mode;bool is_suspended;bool pm_suspended; +struct icc_path *usb_ddr_icc_path; +struct icc_path *apps_usb_icc_path; }; +static int dwc3_qcom_interconnect_enable (struct dwc3_qcom *qcom); +static int dwc3_qcom_interconnect_disable (struct dwc3_qcom *qcom); +static inline void dwc3_qcom_setbits (void __iomem *base,u32 offset,u32 val) {u32 reg;
@@ -222,7 +228,7 @@ static void dwc3_qcom_enable_interrupts(struct dwc3_qcom *qcom)static int dwc3_qcom_suspend (struct dwc3_qcom *qcom) {u32 val; -int i; +int i, ret;if (qcom->is_suspended)return 0 ;
@@ -234,6 +240,10 @@ static int dwc3_qcom_suspend(struct dwc3_qcom *qcom)for (i = qcom->num_clocks -1 ; i >=0 ; i--)clk_disable_unprepare (qcom->clks[i]); + ret =dwc3_qcom_interconnect_disable (qcom); +if (ret) +dev_warn (qcom->dev,"failed to disable interconnect %d\n" , ret); + qcom->is_suspended = true;dwc3_qcom_enable_interrupts (qcom);
@@ -259,6 +269,10 @@ static int dwc3_qcom_resume(struct dwc3_qcom *qcom) } } + ret =dwc3_qcom_interconnect_enable (qcom); +if (ret) +dev_warn (qcom->dev,"failed to enable interconnect %d\n" , ret); +/* Clear existing events from PHY related to L2 in/out */ dwc3_qcom_setbits (qcom->qscratch_base,PWR_EVNT_IRQ_STAT_REG ,PWR_EVNT_LPM_IN_L2_MASK |PWR_EVNT_LPM_OUT_L2_MASK );
@@ -268,6 +282,124 @@ static int dwc3_qcom_resume(struct dwc3_qcom *qcom)return 0 ; } +/* Interconnect path bandwidths in MBps */ +#define USB_MEMORY_AVG_HS_BW MBps_to_icc(240) +#define USB_MEMORY_PEAK_HS_BW MBps_to_icc(700) +#define USB_MEMORY_AVG_SS_BW MBps_to_icc(1000) +#define USB_MEMORY_PEAK_SS_BW MBps_to_icc(2500) +#define APPS_USB_AVG_BW 0 +#define APPS_USB_PEAK_BW MBps_to_icc(40) + +/** +* dwc3_qcom_interconnect_init() - Initialize the interconnect +* @qcom: Pointer to the concerned usb core. +* +*/ +static int dwc3_qcom_interconnect_init (struct dwc3_qcom *qcom) +{ +struct device *dev = qcom->dev; +struct dwc3 *dwc; +int ret; + +if (!device_is_bound (&qcom->dwc3->dev)) { +dev_err (qcom->dev,"device is not bound\n" ); +return -EPROBE_DEFER ; + } + + qcom->usb_ddr_icc_path =of_icc_get (dev,"usb-ddr" ); +if (IS_ERR (qcom->usb_ddr_icc_path)) { +dev_err (dev,"Error: (%ld) failed getting usb-ddr path\n" , +PTR_ERR (qcom->usb_ddr_icc_path)); +return PTR_ERR (qcom->usb_ddr_icc_path); + } + + qcom->apps_usb_icc_path =of_icc_get (dev,"apps-usb" ); +if (IS_ERR (qcom->apps_usb_icc_path)) { +dev_err (dev,"Error: (%ld) failed getting apps-usb path\n" , +PTR_ERR (qcom->apps_usb_icc_path)); +return PTR_ERR (qcom->apps_usb_icc_path); + } + + ret =dwc3_qcom_interconnect_enable (qcom); +if (ret) { +dev_err (dev,"failed to enable interconnect: %d\n" , ret); +return ret; + } + +return 0 ; +} + +/** +* dwc3_qcom_interconnect_exit() - Release interconnect path handles +* @qcom: Pointer to the concerned usb core. +* +* This function is used to release interconnect path handle. +*/ +static void dwc3_qcom_interconnect_exit (struct dwc3_qcom *qcom) +{ +icc_put (qcom->usb_ddr_icc_path); +icc_put (qcom->apps_usb_icc_path); +} + +/* Currently we only use bandwidth level, so just "enable" interconnects */ +static int dwc3_qcom_interconnect_enable (struct dwc3_qcom *qcom) +{ +struct dwc3 *dwc =platform_get_drvdata (qcom->dwc3); +int ret; + +if (dwc->maximum_speed ==USB_SPEED_SUPER ) { + ret =icc_set_bw (qcom->usb_ddr_icc_path, +USB_MEMORY_AVG_SS_BW ,USB_MEMORY_PEAK_SS_BW ); +if (ret) +return ret; + }else { + ret =icc_set_bw (qcom->usb_ddr_icc_path, +USB_MEMORY_AVG_HS_BW ,USB_MEMORY_PEAK_HS_BW ); +if (ret) +return ret; + } + + ret =icc_set_bw (qcom->apps_usb_icc_path, +APPS_USB_AVG_BW ,APPS_USB_PEAK_BW ); +if (ret) + goto err_disable_mem_path; + +return 0 ; + +err_disable_mem_path: +icc_set_bw (qcom->usb_ddr_icc_path,0 ,0 ); + +return ret; +} + +/* To disable an interconnect, we just set its bandwidth to 0 */ +static int dwc3_qcom_interconnect_disable (struct dwc3_qcom *qcom) +{ +struct dwc3 *dwc =platform_get_drvdata (qcom->dwc3); +int ret; + + ret =icc_set_bw (qcom->usb_ddr_icc_path,0 ,0 ); +if (ret) +return ret; + + ret =icc_set_bw (qcom->apps_usb_icc_path,0 ,0 ); +if (ret) + goto err_reenable_memory_path; + +return 0 ; + +/* Re-enable things in the event of an error */ +err_reenable_memory_path: +if (dwc->maximum_speed ==USB_SPEED_SUPER ) +icc_set_bw (qcom->usb_ddr_icc_path, +USB_MEMORY_AVG_SS_BW ,USB_MEMORY_PEAK_SS_BW ); +else +icc_set_bw (qcom->usb_ddr_icc_path, +USB_MEMORY_AVG_HS_BW ,USB_MEMORY_PEAK_HS_BW ); + +return ret; +} +static irqreturn_t qcom_dwc3_resume_irq (int irq,void *data) {struct dwc3_qcom *qcom = data;
@@ -494,6 +626,12 @@ static int dwc3_qcom_probe(struct platform_device *pdev) goto depopulate; } + ret =dwc3_qcom_interconnect_init (qcom); +if (ret) { +dev_err (dev,"failed to init interconnect: %d\n" , ret); + goto depopulate; + } + qcom->mode =usb_get_dr_mode (&qcom->dwc3->dev);/* enable vbus override for device mode */
@@ -503,7 +641,7 @@ static int dwc3_qcom_probe(struct platform_device *pdev)/* register extcon to override sw_vbus on Vbus change later */ ret =dwc3_qcom_register_extcon (qcom);if (ret) - goto depopulate; + goto interconnect_exit;device_init_wakeup (&pdev->dev,1 ); qcom->is_suspended = false;
@@ -513,6 +651,8 @@ static int dwc3_qcom_probe(struct platform_device *pdev)return 0 ; +interconnect_exit: +dwc3_qcom_interconnect_exit (qcom); depopulate:of_platform_depopulate (&pdev->dev); clk_disable:
@@ -540,6 +680,7 @@ static int dwc3_qcom_remove(struct platform_device *pdev) } qcom->num_clocks =0 ; +dwc3_qcom_interconnect_exit (qcom);reset_control_assert (qcom->resets);pm_runtime_allow (dev);
Signature · 2 lines
Qualcomm India Private Limited, on behalf of Qualcomm Innovation Center, Inc., is a member of Code Aurora Forum, a Linux Foundation Collaborative Project.
Re: [PATCH V4 2/3] usb: dwc3: qcom: Add interconnect support in dwc3 driver
Hi Chandana,
Quoted 71 lines · cchiluve
From: Chandana Kishori Chiluveru <[email protected]>
Add interconnect support in dwc3-qcom driver to vote for bus bandwidth.
This requires for two different paths - from USB master to DDR slave. The other is from APPS master to USB slave.
Signed-off-by Chandana Kishori Chiluveru <[email protected]>--- drivers/usb/dwc3/dwc3-qcom.c | 145 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 143 insertions(+), 2 deletions(-)drivers/usb/dwc3/dwc3-qcom.c +15
-1@@ -12,6 +12,7 @@#include <linux/module.h> #include <linux/kernel.h> #include <linux/extcon.h> +#include <linux/interconnect.h> #include <linux/of_platform.h> #include <linux/platform_device.h> #include <linux/phy/phy.h> @@ -59,8 +60,13 @@ struct dwc3_qcom {enum usb_dr_mode mode;bool is_suspended;bool pm_suspended; +struct icc_path *usb_ddr_icc_path; +struct icc_path *apps_usb_icc_path; }; +static int dwc3_qcom_interconnect_enable (struct dwc3_qcom *qcom); +static int dwc3_qcom_interconnect_disable (struct dwc3_qcom *qcom); +static inline void dwc3_qcom_setbits (void __iomem *base,u32 offset,u32 val) {u32 reg;@@ -222,7 +228,7 @@ static void dwc3_qcom_enable_interrupts(struct dwc3_qcom *qcom)static int dwc3_qcom_suspend (struct dwc3_qcom *qcom) {u32 val; -int i; +int i, ret;if (qcom->is_suspended)return 0 ;@@ -234,6 +240,10 @@ static int dwc3_qcom_suspend(struct dwc3_qcom *qcom)for (i = qcom->num_clocks -1 ; i >=0 ; i--)clk_disable_unprepare (qcom->clks[i]); + ret =dwc3_qcom_interconnect_disable (qcom); +if (ret) +dev_warn (qcom->dev,"failed to disable interconnect %d\n" , ret); + qcom->is_suspended = true;dwc3_qcom_enable_interrupts (qcom);@@ -259,6 +269,10 @@ static int dwc3_qcom_resume(struct dwc3_qcom *qcom) } } + ret =dwc3_qcom_interconnect_enable (qcom); +if (ret) +dev_warn (qcom->dev,"failed to enable interconnect %d\n" , ret); +/* Clear existing events from PHY related to L2 in/out */ dwc3_qcom_setbits (qcom->qscratch_base,PWR_EVNT_IRQ_STAT_REG ,PWR_EVNT_LPM_IN_L2_MASK |PWR_EVNT_LPM_OUT_L2_MASK );
drivers/usb/dwc3/dwc3-qcom.c static int dwc3_qcom_resume(struct dwc3_qcom *qcom) · line 291
Quoted 10 lines
drivers/usb/dwc3/dwc3-qcom.c +7
-0@@ -268,6 +282,124 @@ static int dwc3_qcom_resume(struct dwc3_qcom *qcom)return 0 ; } +/* Interconnect path bandwidths in MBps */ +#define USB_MEMORY_AVG_HS_BW MBps_to_icc(240) +#define USB_MEMORY_PEAK_HS_BW MBps_to_icc(700) +#define USB_MEMORY_AVG_SS_BW MBps_to_icc(1000) +#define USB_MEMORY_PEAK_SS_BW MBps_to_icc(2500) +#define APPS_USB_AVG_BW 0 +#define APPS_USB_PEAK_BW MBps_to_icc(40)
typically constants are defined before the function and struct definitions, I'd suggest to move this up, after the other constant definitions.
drivers/usb/dwc3/dwc3-qcom.c static int dwc3_qcom_resume(struct dwc3_qcom *qcom) · line 301
Quoted 9 lines
drivers/usb/dwc3/dwc3-qcom.c +9
-0+/** +* dwc3_qcom_interconnect_init() - Initialize the interconnect +* @qcom: Pointer to the concerned usb core. +* +*/ +static int dwc3_qcom_interconnect_init (struct dwc3_qcom *qcom) +{ +struct device *dev = qcom->dev; +struct dwc3 *dwc;
The variable is not used, remove it.
drivers/usb/dwc3/dwc3-qcom.c static int dwc3_qcom_resume(struct dwc3_qcom *qcom) · line 305
Quoted 4 lines
drivers/usb/dwc3/dwc3-qcom.c +4
-0+int ret; + +if (!device_is_bound (&qcom->dwc3->dev)) { +dev_err (qcom->dev,"device is not bound\n" );
An error message seems very harsh for a deferred probe. I'd say remove the logging altogether ("git grep -B3 'return -EPROBE_DEFER'" shows that there's rarely a specific message logged when the probe is deferred), if you really really want it downgrade it to dev_dbg() or dev_info().
Quoted 44 lines
drivers/usb/dwc3/dwc3-qcom.c +44
-0+return -EPROBE_DEFER ; + } + + qcom->usb_ddr_icc_path =of_icc_get (dev,"usb-ddr" ); +if (IS_ERR (qcom->usb_ddr_icc_path)) { +dev_err (dev,"Error: (%ld) failed getting usb-ddr path\n" , +PTR_ERR (qcom->usb_ddr_icc_path)); +return PTR_ERR (qcom->usb_ddr_icc_path); + } + + qcom->apps_usb_icc_path =of_icc_get (dev,"apps-usb" ); +if (IS_ERR (qcom->apps_usb_icc_path)) { +dev_err (dev,"Error: (%ld) failed getting apps-usb path\n" , +PTR_ERR (qcom->apps_usb_icc_path)); +return PTR_ERR (qcom->apps_usb_icc_path); + } + + ret =dwc3_qcom_interconnect_enable (qcom); +if (ret) { +dev_err (dev,"failed to enable interconnect: %d\n" , ret); +return ret; + } + +return 0 ; +} + +/** +* dwc3_qcom_interconnect_exit() - Release interconnect path handles +* @qcom: Pointer to the concerned usb core. +* +* This function is used to release interconnect path handle. +*/ +static void dwc3_qcom_interconnect_exit (struct dwc3_qcom *qcom) +{ +icc_put (qcom->usb_ddr_icc_path); +icc_put (qcom->apps_usb_icc_path); +} + +/* Currently we only use bandwidth level, so just "enable" interconnects */ +static int dwc3_qcom_interconnect_enable (struct dwc3_qcom *qcom) +{ +struct dwc3 *dwc =platform_get_drvdata (qcom->dwc3); +int ret; +
drivers/usb/dwc3/dwc3-qcom.c static int dwc3_qcom_resume(struct dwc3_qcom *qcom) · line 359
Quoted 10 lines
drivers/usb/dwc3/dwc3-qcom.c +10
-0+if (dwc->maximum_speed ==USB_SPEED_SUPER ) { + ret =icc_set_bw (qcom->usb_ddr_icc_path, +USB_MEMORY_AVG_SS_BW ,USB_MEMORY_PEAK_SS_BW ); +if (ret) +return ret; + }else { + ret =icc_set_bw (qcom->usb_ddr_icc_path, +USB_MEMORY_AVG_HS_BW ,USB_MEMORY_PEAK_HS_BW ); +if (ret) +return ret;
Since the error check is the same for high speed and super speed it can be moved outside of the branch.
drivers/usb/dwc3/dwc3-qcom.c static int dwc3_qcom_resume(struct dwc3_qcom *qcom) · line 372
Quoted 13 lines
drivers/usb/dwc3/dwc3-qcom.c +13
-0+ } + + ret =icc_set_bw (qcom->apps_usb_icc_path, +APPS_USB_AVG_BW ,APPS_USB_PEAK_BW ); +if (ret) + goto err_disable_mem_path; + +return 0 ; + +err_disable_mem_path: +icc_set_bw (qcom->usb_ddr_icc_path,0 ,0 ); + +return ret;
I'm not convinced the use of goto simplifies the code in this case. It could just be:
if (ret) icc_set_bw(qcom->usb_ddr_icc_path, 0, 0); return ret;
Quoted 34 lines
drivers/usb/dwc3/dwc3-qcom.c +30
-0+} + +/* To disable an interconnect, we just set its bandwidth to 0 */ +static int dwc3_qcom_interconnect_disable (struct dwc3_qcom *qcom) +{ +struct dwc3 *dwc =platform_get_drvdata (qcom->dwc3); +int ret; + + ret =icc_set_bw (qcom->usb_ddr_icc_path,0 ,0 ); +if (ret) +return ret; + + ret =icc_set_bw (qcom->apps_usb_icc_path,0 ,0 ); +if (ret) + goto err_reenable_memory_path; + +return 0 ; + +/* Re-enable things in the event of an error */ +err_reenable_memory_path: +if (dwc->maximum_speed ==USB_SPEED_SUPER ) +icc_set_bw (qcom->usb_ddr_icc_path, +USB_MEMORY_AVG_SS_BW ,USB_MEMORY_PEAK_SS_BW ); +else +icc_set_bw (qcom->usb_ddr_icc_path, +USB_MEMORY_AVG_HS_BW ,USB_MEMORY_PEAK_HS_BW ); + +return ret; +} +static irqreturn_t qcom_dwc3_resume_irq (int irq,void *data) {struct dwc3_qcom *qcom = data;
drivers/usb/dwc3/dwc3-qcom.c static int dwc3_qcom_probe(struct platform_device *pdev) · line 631
Quoted 6 lines
drivers/usb/dwc3/dwc3-qcom.c +3
-0@@ -494,6 +626,12 @@ static int dwc3_qcom_probe(struct platform_device *pdev) goto depopulate; } + ret =dwc3_qcom_interconnect_init (qcom); +if (ret) { +dev_err (dev,"failed to init interconnect: %d\n" , ret);
Not sure if this message is really needed, dwc3_qcom_interconnect_init() logs a message in all error paths (except maybe for -EPROBE_DEFER in the future). At the very least this message should be omitted for -EPROBE_DEFER.
PATCH v4 3/3 arm64: dts: sdm845: Add interconnect properties for USB
In reply to cchiluveFrom: Chandana Kishori Chiluveru <[email protected]>
Populate USB DT nodes with interconnect properties.
--- arch/arm64/boot/dts/qcom/sdm845.dtsi | 12 ++++++++++++ 1 file changed, 12 insertions(+)
arch/arm64/boot/dts/qcom/sdm845.dtsi +12 -0
@@ -1837,6 +1837,12 @@ resets = <&gcc GCC_USB30_PRIM_BCR>; + interconnects = <&rsc_hlos MASTER_USB3_0 + &rsc_hlos SLAVE_EBI1>, + <&rsc_hlos MASTER_APPSS_PROC + &rsc_hlos SLAVE_USB3_0>; + interconnect-names = "usb-ddr", "apps-usb"; + usb_1_dwc3: dwc3@a600000 { compatible = "snps,dwc3"; reg = <0 0x0a600000 0 0xcd00>;
@@ -1881,6 +1887,12 @@ resets = <&gcc GCC_USB30_SEC_BCR>; + interconnects = <&rsc_hlos MASTER_USB3_1 + &rsc_hlos SLAVE_EBI1>, + <&rsc_hlos MASTER_APPSS_PROC + &rsc_hlos SLAVE_USB3_1>; + interconnect-names = "usb-ddr", "apps-usb"; + usb_2_dwc3: dwc3@a800000 { compatible = "snps,dwc3"; reg = <0 0x0a800000 0 0xcd00>;
Signature · 2 lines
Qualcomm India Private Limited, on behalf of Qualcomm Innovation Center, Inc., is a member of Code Aurora Forum, a Linux Foundation Collaborative Project.
Re: [PATCH V4 3/3] arm64: dts: sdm845: Add interconnect properties for USB
Hi Chandana,
Quoted 30 lines · cchiluve
From: Chandana Kishori Chiluveru <[email protected]>
Populate USB DT nodes with interconnect properties.
Signed-off-by Chandana Kishori Chiluveru <[email protected]>Reviewed-by Matthias Kaehlcke <[email protected]>--- arch/arm64/boot/dts/qcom/sdm845.dtsi | 12 ++++++++++++ 1 file changed, 12 insertions(+)arch/arm64/boot/dts/qcom/sdm845.dtsi +6
-0@@ -1837,6 +1837,12 @@ resets = <&gcc GCC_USB30_PRIM_BCR>; + interconnects = <&rsc_hlos MASTER_USB3_0 + &rsc_hlos SLAVE_EBI1>, + <&rsc_hlos MASTER_APPSS_PROC + &rsc_hlos SLAVE_USB3_0>; + interconnect-names = "usb-ddr", "apps-usb"; + usb_1_dwc3: dwc3@a600000 { compatible = "snps,dwc3"; reg = <0 0x0a600000 0 0xcd00>;@@ -1881,6 +1887,12 @@ resets = <&gcc GCC_USB30_SEC_BCR>;
arch/arm64/boot/dts/qcom/sdm845.dtsi line 1898
Quoted 10 lines
arch/arm64/boot/dts/qcom/sdm845.dtsi +6
-0+ interconnects = <&rsc_hlos MASTER_USB3_1 + &rsc_hlos SLAVE_EBI1>, + <&rsc_hlos MASTER_APPSS_PROC + &rsc_hlos SLAVE_USB3_1>; + interconnect-names = "usb-ddr", "apps-usb"; + usb_2_dwc3: dwc3@a800000 { compatible = "snps,dwc3"; reg = <0 0x0a800000 0 0xcd00>;
The patch "arm64: dts: sdm845: Redefine interconnect provider DT nodes"
(https://patchwork.kernel.org/patch/11326603/) reorganizes the SDM845 interconnect nodes and the node 'rsc_hlos' ceases to exist.