diff mbox series

[V2,1/1] USB: serial: option: add Foxconn T77W175 composition 0x901d

Message ID 20210816035404.4210-1-slark_xiao@163.com
State Superseded
Headers show
Series [V2,1/1] USB: serial: option: add Foxconn T77W175 composition 0x901d | expand

Commit Message

Slark Xiao Aug. 16, 2021, 3:54 a.m. UTC
Foxconn SDX55 T77W175 device is working in PCIe mode normally.
You can find the PCIe support in drivers/bus/mhi/pci_generic.c file.
But in some scenario, we need to capture the memory dump once it crashed.
So a diag port under USB driver is needed.

Only interface 0 is used:
jbd@jbd-ThinkPad-P1-Gen-4:~$ lsusb | grep 05c6
Bus 003 Device 010: ID 05c6:901d Qualcomm, Inc. Generic Mobile Broadband Adapter
jbd@jbd-ThinkPad-P1-Gen-4:~$ lsusb -t | grep "Dev 10"
    |__ Port 7: Dev 10, If 0, Class=Vendor Specific Class, Driver=option, 480M

Signed-off-by: Slark Xiao <slark_xiao@163.com>
---
 drivers/usb/serial/option.c | 1 +
 1 file changed, 1 insertion(+)

Comments

Slark Xiao Aug. 16, 2021, 9:17 a.m. UTC | #1
At 2021-08-16 17:04:00, "Reinhard Speyerer" <rspmn@arcor.de> wrote:
>On Mon, Aug 16, 2021 at 11:54:04AM +0800, Slark Xiao wrote:
>> Foxconn SDX55 T77W175 device is working in PCIe mode normally.
>> You can find the PCIe support in drivers/bus/mhi/pci_generic.c file.
>> But in some scenario, we need to capture the memory dump once it crashed.
>> So a diag port under USB driver is needed.
>> 
>> Only interface 0 is used:
>> jbd@jbd-ThinkPad-P1-Gen-4:~$ lsusb | grep 05c6
>> Bus 003 Device 010: ID 05c6:901d Qualcomm, Inc. Generic Mobile Broadband Adapter
>> jbd@jbd-ThinkPad-P1-Gen-4:~$ lsusb -t | grep "Dev 10"
>>     |__ Port 7: Dev 10, If 0, Class=Vendor Specific Class, Driver=option, 480M
>> 
>> Signed-off-by: Slark Xiao <slark_xiao@163.com>
>> ---
>>  drivers/usb/serial/option.c | 1 +
>>  1 file changed, 1 insertion(+)
>> 
>> diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
>> index 039450069ca4..c275f489c1cc 100644
>> --- a/drivers/usb/serial/option.c
>> +++ b/drivers/usb/serial/option.c
>> @@ -2068,6 +2068,7 @@ static const struct usb_device_id option_ids[] = {
>>  	  .driver_info = RSVD(0) | RSVD(1) | RSVD(6) },
>>  	{ USB_DEVICE(0x0489, 0xe0b5),						/* Foxconn T77W968 ESIM */
>>  	  .driver_info = RSVD(0) | RSVD(1) | RSVD(6) },
>> +	{ USB_DEVICE(QUALCOMM_VENDOR_ID, 0x901d) },				/* Foxconn T77W175 PCIE+USB mode*/
>>  	{ USB_DEVICE(0x1508, 0x1001),						/* Fibocom NL668 (IOT version) */
>>  	  .driver_info = RSVD(4) | RSVD(5) | RSVD(6) },
>>  	{ USB_DEVICE(0x2cb7, 0x0104),						/* Fibocom NL678 series */
>> -- 
>> 2.25.1
>> 
>> 
>
>Hi Slark,
>
>since this entry uses the Qualcomm USB VID it would be a good idea to make
>the option driver only bind to the DIAG interface in case other UE vendors
>have the ADB interface provided by this composition enabled:
>
>$ sed 30q 901D
>#!/bin/sh
>#
># Copyright (c) 2014,2017-2018, The Linux Foundation. All rights reserved.
>#
># Redistribution and use in source and binary forms, with or without
># modification, are permitted provided that the following conditions are met:
>#     * Redistributions of source code must retain the above copyright
>#       notice, this list of conditions and the following disclaimer.
>#     * Redistributions in binary form must reproduce the above copyright
>#       notice, this list of conditions and the following disclaimer in the
>#       documentation and/or other materials provided with the distribution.
>#     * Neither the name of The Linux Foundation nor the names of its
>#       contributors may be used to endorse or promote products derived from
>#       this software without specific prior written permission.
>#
># THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
># INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
># FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE DISCLAIMED.  IN NO
># EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
># INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
># (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
># LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
># ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
># (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
># SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
>
># DESCRIPTION: DIAG + ADB
>
>echo "Switching to composition number 0x901D"  > /dev/kmsg
>
>
>[Ideally these compositions would also be available via kernel.org and/or
> codeaura.org but so far I have been unable to find them there.]
>
>Regards,
>Reinhard

Hi Reinhard,
  So should I use USB_DEVICE_INTERFACE_NUMBER(QUALCOMM_VENDOR_ID, 0x901d, 0x00) to bind Diag port only?

Thanks
Slark Xiao Aug. 16, 2021, 9:25 a.m. UTC | #2
At 2021-08-16 17:20:59, "Greg KH" <gregkh@linuxfoundation.org> wrote:
>On Mon, Aug 16, 2021 at 05:17:00PM +0800, Slark Xiao wrote:
>>   So should I use USB_DEVICE_INTERFACE_NUMBER(QUALCOMM_VENDOR_ID, 0x901d, 0x00) to bind Diag port only?
>
>Why is this device using the QUALCOMM vendor id anyway?  Is this allowed
>by Qualcomm?
>
>thanks,
>
>greg k-h

Hi Greg,
  Our product are designed based on Qualcomm SDX55 platform. So it still support Qualcomm vendor ID.
  I think there is no infringement about this ID combo.
 
Thanks
Greg Kroah-Hartman Aug. 16, 2021, 11:17 a.m. UTC | #3
On Mon, Aug 16, 2021 at 05:25:20PM +0800, Slark Xiao wrote:
> At 2021-08-16 17:20:59, "Greg KH" <gregkh@linuxfoundation.org> wrote:
> >On Mon, Aug 16, 2021 at 05:17:00PM +0800, Slark Xiao wrote:
> >>   So should I use USB_DEVICE_INTERFACE_NUMBER(QUALCOMM_VENDOR_ID, 0x901d, 0x00) to bind Diag port only?
> >
> >Why is this device using the QUALCOMM vendor id anyway?  Is this allowed
> >by Qualcomm?
> >
> >thanks,
> >
> >greg k-h
> 
> Hi Greg,
>   Our product are designed based on Qualcomm SDX55 platform. So it still support Qualcomm vendor ID.
>   I think there is no infringement about this ID combo.

Do you have permission from Qualcomm to use their vendor id?  I know
some vendors get very upset about this...

Why not use your own vendor id?

thanks,

greg k-h
Reinhard Speyerer Aug. 16, 2021, 3:47 p.m. UTC | #4
On Mon, Aug 16, 2021 at 05:17:00PM +0800, Slark Xiao wrote:
> 
> At 2021-08-16 17:04:00, "Reinhard Speyerer" <rspmn@arcor.de> wrote:
> >On Mon, Aug 16, 2021 at 11:54:04AM +0800, Slark Xiao wrote:
> >> Foxconn SDX55 T77W175 device is working in PCIe mode normally.
> >> You can find the PCIe support in drivers/bus/mhi/pci_generic.c file.
> >> But in some scenario, we need to capture the memory dump once it crashed.
> >> So a diag port under USB driver is needed.
> >> 
> >> Only interface 0 is used:
> >> jbd@jbd-ThinkPad-P1-Gen-4:~$ lsusb | grep 05c6
> >> Bus 003 Device 010: ID 05c6:901d Qualcomm, Inc. Generic Mobile Broadband Adapter
> >> jbd@jbd-ThinkPad-P1-Gen-4:~$ lsusb -t | grep "Dev 10"
> >>     |__ Port 7: Dev 10, If 0, Class=Vendor Specific Class, Driver=option, 480M
> >> 
> >> Signed-off-by: Slark Xiao <slark_xiao@163.com>
> >> ---
> >>  drivers/usb/serial/option.c | 1 +
> >>  1 file changed, 1 insertion(+)
> >> 
> >> diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
> >> index 039450069ca4..c275f489c1cc 100644
> >> --- a/drivers/usb/serial/option.c
> >> +++ b/drivers/usb/serial/option.c
> >> @@ -2068,6 +2068,7 @@ static const struct usb_device_id option_ids[] = {
> >>  	  .driver_info = RSVD(0) | RSVD(1) | RSVD(6) },
> >>  	{ USB_DEVICE(0x0489, 0xe0b5),						/* Foxconn T77W968 ESIM */
> >>  	  .driver_info = RSVD(0) | RSVD(1) | RSVD(6) },
> >> +	{ USB_DEVICE(QUALCOMM_VENDOR_ID, 0x901d) },				/* Foxconn T77W175 PCIE+USB mode*/
> >>  	{ USB_DEVICE(0x1508, 0x1001),						/* Fibocom NL668 (IOT version) */
> >>  	  .driver_info = RSVD(4) | RSVD(5) | RSVD(6) },
> >>  	{ USB_DEVICE(0x2cb7, 0x0104),						/* Fibocom NL678 series */
> >> -- 
> >> 2.25.1
> >> 
> >> 
> >
> >Hi Slark,
> >
> >since this entry uses the Qualcomm USB VID it would be a good idea to make
> >the option driver only bind to the DIAG interface in case other UE vendors
> >have the ADB interface provided by this composition enabled:
> > [...]
> 
> Hi Reinhard,
>   So should I use USB_DEVICE_INTERFACE_NUMBER(QUALCOMM_VENDOR_ID, 0x901d, 0x00) to bind Diag port only?
> 
> Thanks

Hi Slark,

I think this would the preferred approach.

I'll let Johan advise on the preferred position of the new entry in the
device id table.

Regards,
Reinhard
Slark Xiao Aug. 17, 2021, 2:27 a.m. UTC | #5
At 2021-08-16 19:17:11, "Greg KH" <gregkh@linuxfoundation.org> wrote:
>On Mon, Aug 16, 2021 at 05:25:20PM +0800, Slark Xiao wrote:
>> At 2021-08-16 17:20:59, "Greg KH" <gregkh@linuxfoundation.org> wrote:
>> >On Mon, Aug 16, 2021 at 05:17:00PM +0800, Slark Xiao wrote:
>> >>   So should I use USB_DEVICE_INTERFACE_NUMBER(QUALCOMM_VENDOR_ID, 0x901d, 0x00) to bind Diag port only?
>> >
>> >Why is this device using the QUALCOMM vendor id anyway?  Is this allowed
>> >by Qualcomm?
>> >
>> >thanks,
>> >
>> >greg k-h
>> 
>> Hi Greg,
>>   Our product are designed based on Qualcomm SDX55 platform. So it still support Qualcomm vendor ID.
>>   I think there is no infringement about this ID combo.
>
>Do you have permission from Qualcomm to use their vendor id?  I know
>some vendors get very upset about this...
>
>Why not use your own vendor id?
>
>thanks,
>
>greg k-h

Hi Greg,
   As Qualcomm mainly provide service to their customer, like Samsung, Apple, Huawei, Quectel, Foxconn, Sierra and so on, so I believe all available VID/PIDs are allowed to use. 
   I also checked who is using Qualcomm's VID in the whole kernel, and I found only some old platform (Gobi 1K,2K,3K which don't do any update for almost more than 10 years) in qcserial.c and ZTE, SIMcom, Quectel in option.c are using this VID. Seems Qualcomm won't do this update in the kernel side by themselves(let's say some new PID, 901x,902x,903x,904x,905x...90Fx, and 91xx). 
   About the question why not use our own VID, because this PCIE+USB mode is for debug purpose. We need to keep a common debug settings for both Linux and Windows platform, also for all our customers like Lenovo, Dell, HP, Telit. 
   Hope you can understand that.

Thanks
Slark
Greg Kroah-Hartman Aug. 17, 2021, 6:33 a.m. UTC | #6
On Tue, Aug 17, 2021 at 10:27:05AM +0800, Slark Xiao wrote:
> 

> 


<blank lines snipped, please fix your email client...>

>> At 2021-08-16 19:17:11, "Greg KH" <gregkh@linuxfoundation.org> wrote:

> >On Mon, Aug 16, 2021 at 05:25:20PM +0800, Slark Xiao wrote:

> >> At 2021-08-16 17:20:59, "Greg KH" <gregkh@linuxfoundation.org> wrote:

> >> >On Mon, Aug 16, 2021 at 05:17:00PM +0800, Slark Xiao wrote:

> >> >>   So should I use USB_DEVICE_INTERFACE_NUMBER(QUALCOMM_VENDOR_ID, 0x901d, 0x00) to bind Diag port only?

> >> >

> >> >Why is this device using the QUALCOMM vendor id anyway?  Is this allowed

> >> >by Qualcomm?

> >> >

> >> >thanks,

> >> >

> >> >greg k-h

> >> 

> >> Hi Greg,

> >>   Our product are designed based on Qualcomm SDX55 platform. So it still support Qualcomm vendor ID.

> >>   I think there is no infringement about this ID combo.

> >

> >Do you have permission from Qualcomm to use their vendor id?  I know

> >some vendors get very upset about this...

> >

> >Why not use your own vendor id?

> >

> >thanks,

> >

> >greg k-h

> 

> Hi Greg,

>    As Qualcomm mainly provide service to their customer, like Samsung, Apple, Huawei, Quectel, Foxconn, Sierra and so on, so I believe all available VID/PIDs are allowed to use. 


That is not how USB VIDs work, sorry.  Please get approval from the
company whose VID you wish to use, otherwise they will be using it
themselves for their own devices, and you will have a collision.

thanks,

greg k-h
Slark Xiao Aug. 17, 2021, 6:51 a.m. UTC | #7
At 2021-08-17 14:33:48, "Greg KH" <gregkh@linuxfoundation.org> wrote:
>On Tue, Aug 17, 2021 at 10:27:05AM +0800, Slark Xiao wrote:
>> 
>> 
>
><blank lines snipped, please fix your email client...>
>
>>> At 2021-08-16 19:17:11, "Greg KH" <gregkh@linuxfoundation.org> wrote:
>> >On Mon, Aug 16, 2021 at 05:25:20PM +0800, Slark Xiao wrote:
>> >> At 2021-08-16 17:20:59, "Greg KH" <gregkh@linuxfoundation.org> wrote:
>> >> >On Mon, Aug 16, 2021 at 05:17:00PM +0800, Slark Xiao wrote:
>> >> >>   So should I use USB_DEVICE_INTERFACE_NUMBER(QUALCOMM_VENDOR_ID, 0x901d, 0x00) to bind Diag port only?
>> >> >
>> >> >Why is this device using the QUALCOMM vendor id anyway?  Is this allowed
>> >> >by Qualcomm?
>> >> >
>> >> >thanks,
>> >> >
>> >> >greg k-h
>> >> 
>> >> Hi Greg,
>> >>   Our product are designed based on Qualcomm SDX55 platform. So it still support Qualcomm vendor ID.
>> >>   I think there is no infringement about this ID combo.
>> >
>> >Do you have permission from Qualcomm to use their vendor id?  I know
>> >some vendors get very upset about this...
>> >
>> >Why not use your own vendor id?
>> >
>> >thanks,
>> >
>> >greg k-h
>> 
>> Hi Greg,
>>    As Qualcomm mainly provide service to their customer, like Samsung, Apple, Huawei, Quectel, Foxconn, Sierra and so on, so I believe all available VID/PIDs are allowed to use. 
>
>That is not how USB VIDs work, sorry.  Please get approval from the
>company whose VID you wish to use, otherwise they will be using it
>themselves for their own devices, and you will have a collision.
>
>thanks,
>
>greg k-h

Hi Greg,
   I am checking this with Qualcomm side now. I will update the result once I get it.
  Thank you for your advice.
diff mbox series

Patch

diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
index 039450069ca4..c275f489c1cc 100644
--- a/drivers/usb/serial/option.c
+++ b/drivers/usb/serial/option.c
@@ -2068,6 +2068,7 @@  static const struct usb_device_id option_ids[] = {
 	  .driver_info = RSVD(0) | RSVD(1) | RSVD(6) },
 	{ USB_DEVICE(0x0489, 0xe0b5),						/* Foxconn T77W968 ESIM */
 	  .driver_info = RSVD(0) | RSVD(1) | RSVD(6) },
+	{ USB_DEVICE(QUALCOMM_VENDOR_ID, 0x901d) },				/* Foxconn T77W175 PCIE+USB mode*/
 	{ USB_DEVICE(0x1508, 0x1001),						/* Fibocom NL668 (IOT version) */
 	  .driver_info = RSVD(4) | RSVD(5) | RSVD(6) },
 	{ USB_DEVICE(0x2cb7, 0x0104),						/* Fibocom NL678 series */