diff mbox

[v2] arm64: dts: msm8996: Use dwc3-qcom glue driver for USB

Message ID 20180531104710.23965-1-mgautam@codeaurora.org (mailing list archive)
State New, archived
Headers show

Commit Message

Manu Gautam May 31, 2018, 10:47 a.m. UTC
Move from dwc3-of-simple to dwc3-qcom glue driver to
support peripheral mode which requires qscratch wrapper
programming on VBUS event.

Fixes: a4333c3a6ba9 ("usb: dwc3: Add Qualcomm DWC3 glue driver")
Signed-off-by: Manu Gautam <mgautam@codeaurora.org>
---

Changes since v1:
 - Update unit address of DT node as per Doug's comment

 arch/arm64/boot/dts/qcom/apq8096-db820c.dtsi |  6 ++++--
 arch/arm64/boot/dts/qcom/msm8996.dtsi        | 10 ++++++----
 2 files changed, 10 insertions(+), 6 deletions(-)

Comments

Vivek Gautam June 7, 2018, 8:30 a.m. UTC | #1
On 5/31/2018 4:17 PM, Manu Gautam wrote:
> Move from dwc3-of-simple to dwc3-qcom glue driver to
> support peripheral mode which requires qscratch wrapper
> programming on VBUS event.
>
> Fixes: a4333c3a6ba9 ("usb: dwc3: Add Qualcomm DWC3 glue driver")
> Signed-off-by: Manu Gautam <mgautam@codeaurora.org>
> ---
>
> Changes since v1:
>   - Update unit address of DT node as per Doug's comment
>
>   arch/arm64/boot/dts/qcom/apq8096-db820c.dtsi |  6 ++++--
>   arch/arm64/boot/dts/qcom/msm8996.dtsi        | 10 ++++++----
>   2 files changed, 10 insertions(+), 6 deletions(-)

Tested on DB820c. Works fine.
Tested-by: Vivek Gautam <vivek.gautam@codeaurora.org>

BRs
Vivek
>
> diff --git a/arch/arm64/boot/dts/qcom/apq8096-db820c.dtsi b/arch/arm64/boot/dts/qcom/apq8096-db820c.dtsi
> index f45a0ab30d30..00be0d53891a 100644
> --- a/arch/arm64/boot/dts/qcom/apq8096-db820c.dtsi
> +++ b/arch/arm64/boot/dts/qcom/apq8096-db820c.dtsi
> @@ -106,8 +106,9 @@
>   			status = "okay";
>   		};
>   
> -		usb@6a00000 {
> +		usb@6af8800 {
>   			status = "okay";
> +			extcon = <&usb3_id>;
>   
>   			dwc3@6a00000 {
>   				extcon = <&usb3_id>;
> @@ -122,8 +123,9 @@
>   			pinctrl-0 = <&usb3_vbus_det_gpio>;
>   		};
>   
> -		usb@7600000 {
> +		usb@76f8800 {
>   			status = "okay";
> +			extcon = <&usb2_id>;
>   
>   			dwc3@7600000 {
>   				extcon = <&usb2_id>;
> diff --git a/arch/arm64/boot/dts/qcom/msm8996.dtsi b/arch/arm64/boot/dts/qcom/msm8996.dtsi
> index 26292027ba9b..8b6dd5443524 100644
> --- a/arch/arm64/boot/dts/qcom/msm8996.dtsi
> +++ b/arch/arm64/boot/dts/qcom/msm8996.dtsi
> @@ -776,8 +776,9 @@
>   			status = "disabled";
>   		};
>   
> -		usb2: usb@7600000 {
> -			compatible = "qcom,dwc3";
> +		usb2: usb@76f8800 {
> +			compatible = "qcom,msm8996-dwc3", "qcom,dwc3";
> +			reg = <0x76f8800 0x400>;
>   			#address-cells = <1>;
>   			#size-cells = <1>;
>   			ranges;
> @@ -804,8 +805,9 @@
>   			};
>   		};
>   
> -		usb3: usb@6a00000 {
> -			compatible = "qcom,dwc3";
> +		usb3: usb@6af8800 {
> +			compatible = "qcom,msm8996-dwc3", "qcom,dwc3";
> +			reg = <0x6af8800 0x400>;
>   			#address-cells = <1>;
>   			#size-cells = <1>;
>   			ranges;

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Julien Massot June 11, 2018, 6:36 a.m. UTC | #2
Hi,

> On 5/31/2018 4:17 PM, Manu Gautam wrote:
>>
>> Move from dwc3-of-simple to dwc3-qcom glue driver to
>> support peripheral mode which requires qscratch wrapper
>> programming on VBUS event.

I would like to test usb otg as peripheral role, but that's not clear
for me which patches
are required on top of linux master branch or linaro qcom-lt
integration branch, or a
custom branch which integrate dt-binding phy or usb related patch.

Can you point me the patches I need to apply, or a branch, to test
peripheral feature ?

Thanks,
Julien
Vivek Gautam June 11, 2018, 7:01 a.m. UTC | #3
Hi,


On 6/11/2018 12:06 PM, Julien Massot wrote:
> Hi,
>
>> On 5/31/2018 4:17 PM, Manu Gautam wrote:
>>> Move from dwc3-of-simple to dwc3-qcom glue driver to
>>> support peripheral mode which requires qscratch wrapper
>>> programming on VBUS event.
> I would like to test usb otg as peripheral role, but that's not clear
> for me which patches
> are required on top of linux master branch or linaro qcom-lt
> integration branch, or a
> custom branch which integrate dt-binding phy or usb related patch.
>
> Can you point me the patches I need to apply, or a branch, to test
> peripheral feature ?

I have a branch that's based on 4.17. You can pick that.
https://github.com/vivekgautam1/linux/commits/v4.17/db820c

Thanks
Vivek
>
> Thanks,
> Julien
>

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Julien Massot June 11, 2018, 12:33 p.m. UTC | #4
Hi Vivek,

> I have a branch that's based on 4.17. You can pick that.
> https://github.com/vivekgautam1/linux/commits/v4.17/db820c
>

Thanks a lot,
I will test this branch.

Julien
Manu Gautam June 26, 2018, 9:37 a.m. UTC | #5
Hi Andy,

On 6/7/2018 2:00 PM, Vivek Gautam wrote:
> 
> 
> On 5/31/2018 4:17 PM, Manu Gautam wrote:
>> Move from dwc3-of-simple to dwc3-qcom glue driver to
>> support peripheral mode which requires qscratch wrapper
>> programming on VBUS event.
>>
>> Fixes: a4333c3a6ba9 ("usb: dwc3: Add Qualcomm DWC3 glue driver")
>> Signed-off-by: Manu Gautam <mgautam@codeaurora.org>
>> ---
>>
>> Changes since v1:
>>   - Update unit address of DT node as per Doug's comment
>>
>>   arch/arm64/boot/dts/qcom/apq8096-db820c.dtsi |  6 ++++--
>>   arch/arm64/boot/dts/qcom/msm8996.dtsi        | 10 ++++++----
>>   2 files changed, 10 insertions(+), 6 deletions(-)
> 
> Tested on DB820c. Works fine.
> Tested-by: Vivek Gautam <vivek.gautam@codeaurora.org>
> 

Andy, let me know if this looks good to you.
And it would be great to get this in 4.18 to fix USB regression on db820c.

Thanks,
Manu
Felipe Balbi June 27, 2018, 9:27 a.m. UTC | #6
Hi,

Pierre LE MAGOUROU <plemagourou@softbankrobotics.com> writes:
>> > I have a branch that's based on 4.17. You can pick that.
>> > https://github.com/vivekgautam1/linux/commits/v4.17/db820c
>> >
>>
>> Thanks a lot,
>> I will test this branch.
>>
>>
> I just tested USB gadget with this branch on the db820c.
>
> If I activate a USB composite gadget device with EEM function, I can see
> the 'usb0' Ethernet interfaces on the device and on the host and I can ping
> the db820c from the host.
> When I create a USB composite gadget device with UAC2 function, I can see
> the audio cards on host and device but cannot play or record any sound.
>
> While looking at dwc3 traces with Ftrace, I noticed that the dwc3 driver is
> stuck on wait_event_lock_irq() in dwc3_gadget_ep_dequeue() function when I
> use UAC2 gadget.

can you share tracepoint data?

> *This email and any attachment thereto are confidential and intended 
> solely for the use of the individual or entity to whom they are addressed.
>
> If you are not the intended recipient, please be advised that disclosing, 
> copying, distributing or taking any action in reliance on the contents of 
> this email is strictly prohibited. In such case, please immediately advise 
> the sender, and delete all copies and attachment from your system.
> This 
> email shall not be construed and is not tantamount to an offer, an 
> acceptance of offer, or an agreement by SoftBank Robotics Europe on any 
> discussion or contractual document whatsoever. No employee or agent is 
> authorized to represent or bind SoftBank Robotics Europe to third parties 
> by email, or act on behalf of SoftBank Robotics Europe by email, without 
> express written confirmation by SoftBank Robotics Europe’ duly authorized 
> representatives.

you need to talk to your company's IT about removing this footer. This
makes the life of those maintaining mailing list archives rather
difficult.
Felipe Balbi June 27, 2018, 12:30 p.m. UTC | #7
Hi,

Pierre LE MAGOUROU <plemagourou@softbankrobotics.com> writes:
>> >> Thanks a lot,
>> >> I will test this branch.
>> >>
>> >>
>> > I just tested USB gadget with this branch on the db820c.
>> >
>> > If I activate a USB composite gadget device with EEM function, I can see
>> > the 'usb0' Ethernet interfaces on the device and on the host and I can
>> ping
>> > the db820c from the host.
>> > When I create a USB composite gadget device with UAC2 function, I can see
>> > the audio cards on host and device but cannot play or record any sound.
>> >
>> > While looking at dwc3 traces with Ftrace, I noticed that the dwc3 driver
>> is
>> > stuck on wait_event_lock_irq() in dwc3_gadget_ep_dequeue() function when
>> I
>> > use UAC2 gadget.
>>
>> can you share tracepoint data?
>>
>>
> Here are the trace results when I start the UAC2 gadget device (all dwc3
> functions and events are activated) : https://pastebin.com/NBP3tM8N
> The last line you see "before wait_event EP_END_TRANSFER_PENDING" is a
> trace_printk I added just before wait_event_lock_irq(). I also have a
> trace_printk after the wait_event_lock_irq() that is never called.

looks like we need to do away with the wait_event_lock_irq()
call. usb_ep_dequeue() can be called from within the controller's
interrupt handler, so we can't rely on wait_event_lock_irq(). I guess
the best thing here would be to mark TRBs as dirty (and not increment
dequeue pointer), so they aren't reused by accident, then let endpoint
continue processing. Once command completion interrupt fires, we
increment dequeue pointer.

This should work better, I suppose. Do you want a shot at implementing
this?
Pierre Le Magourou July 10, 2018, 3:03 p.m. UTC | #8
Hi Felipe,

2018-06-27 14:30 GMT+02:00 Felipe Balbi <felipe.balbi@linux.intel.com>:
>
> looks like we need to do away with the wait_event_lock_irq()
> call. usb_ep_dequeue() can be called from within the controller's
> interrupt handler, so we can't rely on wait_event_lock_irq(). I guess
> the best thing here would be to mark TRBs as dirty (and not increment
> dequeue pointer), so they aren't reused by accident, then let endpoint
> continue processing. Once command completion interrupt fires, we
> increment dequeue pointer.
>
> This should work better, I suppose. Do you want a shot at implementing
> this?

I wrote a patch to implement this last week, and sent it to linux-arm-msm.
Feel free to review it and tell me if this complies with what you
suggested to me.

Regards,

Pierre Le Magourou
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/arch/arm64/boot/dts/qcom/apq8096-db820c.dtsi b/arch/arm64/boot/dts/qcom/apq8096-db820c.dtsi
index f45a0ab30d30..00be0d53891a 100644
--- a/arch/arm64/boot/dts/qcom/apq8096-db820c.dtsi
+++ b/arch/arm64/boot/dts/qcom/apq8096-db820c.dtsi
@@ -106,8 +106,9 @@ 
 			status = "okay";
 		};
 
-		usb@6a00000 {
+		usb@6af8800 {
 			status = "okay";
+			extcon = <&usb3_id>;
 
 			dwc3@6a00000 {
 				extcon = <&usb3_id>;
@@ -122,8 +123,9 @@ 
 			pinctrl-0 = <&usb3_vbus_det_gpio>;
 		};
 
-		usb@7600000 {
+		usb@76f8800 {
 			status = "okay";
+			extcon = <&usb2_id>;
 
 			dwc3@7600000 {
 				extcon = <&usb2_id>;
diff --git a/arch/arm64/boot/dts/qcom/msm8996.dtsi b/arch/arm64/boot/dts/qcom/msm8996.dtsi
index 26292027ba9b..8b6dd5443524 100644
--- a/arch/arm64/boot/dts/qcom/msm8996.dtsi
+++ b/arch/arm64/boot/dts/qcom/msm8996.dtsi
@@ -776,8 +776,9 @@ 
 			status = "disabled";
 		};
 
-		usb2: usb@7600000 {
-			compatible = "qcom,dwc3";
+		usb2: usb@76f8800 {
+			compatible = "qcom,msm8996-dwc3", "qcom,dwc3";
+			reg = <0x76f8800 0x400>;
 			#address-cells = <1>;
 			#size-cells = <1>;
 			ranges;
@@ -804,8 +805,9 @@ 
 			};
 		};
 
-		usb3: usb@6a00000 {
-			compatible = "qcom,dwc3";
+		usb3: usb@6af8800 {
+			compatible = "qcom,msm8996-dwc3", "qcom,dwc3";
+			reg = <0x6af8800 0x400>;
 			#address-cells = <1>;
 			#size-cells = <1>;
 			ranges;