From: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
To: Felipe Balbi <balbi@kernel.org>,
Thinh Nguyen <Thinh.Nguyen@synopsys.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
"linux-usb@vger.kernel.org" <linux-usb@vger.kernel.org>,
Alan Stern <stern@rowland.harvard.edu>,
Roger Quadros <rogerq@ti.com>, zhengbin <zhengbin13@huawei.com>
Cc: John Youn <John.Youn@synopsys.com>
Subject: Re: [RFC PATCH 02/14] usb: gadget: Add callback to set lane and transfer rate
Date: Thu, 12 Dec 2019 22:10:04 +0000 [thread overview]
Message-ID: <40f63473-187a-e7ed-a931-d49c895120a6@synopsys.com> (raw)
In-Reply-To: <874ky6x9eh.fsf@kernel.org>
Hi,
Felipe Balbi wrote:
> Hi,
>
> Thinh Nguyen <Thinh.Nguyen@synopsys.com> writes:
>> Introduce gadget opts udc_set_sublink_speed callback to set the lane
>> count and transfer rate (in lane speed mantissa of Gbps) for SuperSpeed
>> Plus capable gadgets. In the same way udc_set_speed, this function can
>> control the gadget's sublink attributes for SuperSpeed Plus.
>>
>> Signed-off-by: Thinh Nguyen <thinhn@synopsys.com>
>> ---
>> drivers/usb/gadget/composite.c | 2 ++
>> drivers/usb/gadget/legacy/mass_storage.c | 2 ++
> I would rather not add new features to the legacy gadgets and focus on
> our configfs interface for anything new. Moreover, using the feature
> you introduced could, arguably, be done as a separate patch.
Sure. I'll revise this.
>
>> diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c
>> index 3b4f67000315..a4de5a8c0f19 100644
>> --- a/drivers/usb/gadget/composite.c
>> +++ b/drivers/usb/gadget/composite.c
>> @@ -2353,6 +2353,8 @@ int usb_composite_probe(struct usb_composite_driver *driver)
>> gadget_driver->function = (char *) driver->name;
>> gadget_driver->driver.name = driver->name;
>> gadget_driver->max_speed = driver->max_speed;
>> + gadget_driver->max_lane_count = driver->max_lane_count;
>> + gadget_driver->max_lsm = driver->max_lsm;
>>
>> return usb_gadget_probe_driver(gadget_driver);
>> }
>> diff --git a/drivers/usb/gadget/legacy/mass_storage.c b/drivers/usb/gadget/legacy/mass_storage.c
>> index f18f77584fc2..a0912c5afffc 100644
>> --- a/drivers/usb/gadget/legacy/mass_storage.c
>> +++ b/drivers/usb/gadget/legacy/mass_storage.c
>> @@ -223,6 +223,8 @@ static struct usb_composite_driver msg_driver = {
>> .name = "g_mass_storage",
>> .dev = &msg_device_desc,
>> .max_speed = USB_SPEED_SUPER_PLUS,
>> + .max_lane_count = 2,
>> + .max_lsm = 10,
> Right, as mentioned, I'd prefer not touch the legacy gadgets. But in any
> case, why is it so that the gadget is telling you about max lane count
> and lsm? That should be abstracted away from the gadget driver. Gadget
> driver shouldn't have knowledge of number of lanes because, at the end
> of the day, that doesn't really change anything in practice. Unlike HS
> vs SS which changes a bunch of things.
Ok, that makes sense. I'll remove this.
>
>> .needs_serial = 1,
>> .strings = dev_strings,
>> .bind = msg_bind,
>> diff --git a/drivers/usb/gadget/udc/core.c b/drivers/usb/gadget/udc/core.c
>> index 51fa614b4079..a3b106a22a6e 100644
>> --- a/drivers/usb/gadget/udc/core.c
>> +++ b/drivers/usb/gadget/udc/core.c
>> @@ -1120,6 +1120,35 @@ static inline void usb_gadget_udc_set_speed(struct usb_udc *udc,
>> }
>> }
>>
>> +/**
>> + * usb_gadget_udc_set_sublink_attr - tells usb device controller the sublink
>> + * attributes supported by the current driver
>> + * @udc: The device we want to set maximum speed
>> + * @lane_count: The maximum number of lanes to connect
>> + * @lsm: The maximum lane speed mantissa in Gbps to run
>> + *
>> + * In the same way as usb_gadget_udc_set_speed(), this function can set the
>> + * gadget's sublink attributes for SuperSpeed Plus.
>> + *
>> + * This call is issued by the UDC Class driver before calling
>> + * usb_gadget_udc_start() in order to make sure that we don't try to
>> + * connect on speeds the gadget driver doesn't support.
>> + */
>> +static inline void usb_gadget_udc_set_sublink_attr(struct usb_udc *udc,
>> + unsigned int lane_count,
>> + unsigned int lsm)
> do we envision a possibility of future USB spec releases adding more
> data here? How about introducing a struct usb_sublink_attr to be passed
> around? Could be used by both host and gadget stacks.
Good idea. That'd be much better. Thanks.
>
>> +{
>> + if (udc->gadget->ops->udc_set_sublink_attr) {
>> + unsigned int rate;
>> + unsigned int lanes;
>> +
>> + rate = min(lsm, udc->gadget->max_lsm);
>> + lanes = min(lane_count, udc->gadget->max_lane_count);
> considering that lsm and lane_count are from 0 to their respective max
> values, do you need a min() here? Might be better to WARN() when either
> in over their max values.
Sure. That'd be better.
>
>> + udc->gadget->ops->udc_set_sublink_attr(udc->gadget,
>> + lanes, rate);
> indentation using spaces? (same above, please fix)
It's both tab and spaces to align to next to the above open parentheses.
It's based on checkpatch.
>
>> @@ -1353,7 +1382,14 @@ static int udc_bind_to_driver(struct usb_udc *udc, struct usb_gadget_driver *dri
>> udc->dev.driver = &driver->driver;
>> udc->gadget->dev.driver = &driver->driver;
>>
>> - usb_gadget_udc_set_speed(udc, driver->max_speed);
>> + if (udc->gadget->ops->udc_set_sublink_attr &&
>> + udc->gadget->max_speed == USB_SPEED_SUPER_PLUS &&
>> + driver->max_lsm && driver->max_lane_count &&
>> + driver->max_speed == USB_SPEED_SUPER_PLUS)
> So if driver doesn't provide max_lsm and max_speed you don't set sublink
> attr? Won't this cause problems? Also, the sublink_attr is still,
> conceptually, setting the max speed for the bus, right? So you may want
> to call usb_gadget_udc_set_sublink_attr() from inside
> usb_gadget_udc_set_speed(), then we don't need to modify all the callers.
>
The idea was that if the driver doesn't provide max_lsm and max_speed,
then it's not constrained by the number of lanes or lsm. It will
fallback to the usb_gadget_udc_set_speed().
I didn't think about creating a new usb_sublink_attr structure, so I
couldn't use usb_gadget_udc_set_sublink_attr() inside
usb_gadget_udc_set_speed() before.
Thanks for the review!
Thinh
next prev parent reply other threads:[~2019-12-12 22:11 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-12-12 2:48 [RFC PATCH 00/14] usb: dwc3: Introduce DWC_usb32 Thinh Nguyen
2019-12-12 2:49 ` [RFC PATCH 01/14] usb: gadget: Add lane count and lsm Thinh Nguyen
2019-12-12 2:49 ` [RFC PATCH 02/14] usb: gadget: Add callback to set lane and transfer rate Thinh Nguyen
2019-12-12 7:58 ` Felipe Balbi
2019-12-12 15:49 ` Alan Stern
2019-12-12 22:33 ` Thinh Nguyen
2019-12-12 22:10 ` Thinh Nguyen [this message]
2019-12-12 2:49 ` [RFC PATCH 03/14] usb: composite: Properly report lsm Thinh Nguyen
2019-12-12 7:59 ` Felipe Balbi
2019-12-12 22:10 ` Thinh Nguyen
2019-12-12 2:49 ` [RFC PATCH 04/14] usb: dwc3: Implement new id check for DWC_usb32 Thinh Nguyen
2019-12-12 2:49 ` [RFC PATCH 05/14] usb: dwc3: Update IP checks to support DWC_usb32 Thinh Nguyen
2019-12-12 8:05 ` Felipe Balbi
2019-12-12 22:12 ` Thinh Nguyen
2019-12-12 2:49 ` [RFC PATCH 06/14] usb: devicetree: dwc3: Add max lane and lsm Thinh Nguyen
2019-12-12 8:06 ` Felipe Balbi
2019-12-19 22:09 ` Rob Herring
2019-12-19 22:49 ` Thinh Nguyen
2019-12-12 2:49 ` [RFC PATCH 07/14] usb: dwc3: gadget: Set lane count " Thinh Nguyen
2019-12-12 8:14 ` Felipe Balbi
2019-12-12 22:15 ` Thinh Nguyen
2019-12-12 2:49 ` [RFC PATCH 08/14] usb: dwc3: gadget: Track connected lane count and speed Thinh Nguyen
2019-12-12 2:49 ` [RFC PATCH 09/14] usb: dwc3: gadget: Limit the setting of speed Thinh Nguyen
2019-12-12 2:50 ` [RFC PATCH 10/14] usb: dwc3: Update HWPARAMS0.MDWIDTH for DWC_usb32 Thinh Nguyen
2019-12-12 2:50 ` [RFC PATCH 11/14] usb: devicetree: dwc3: Add TRB prefetch count Thinh Nguyen
2019-12-12 8:18 ` Felipe Balbi
2019-12-12 22:16 ` Thinh Nguyen
2019-12-12 2:50 ` [RFC PATCH 12/14] usb: dwc3: gadget: Set number of TRB prefetch Thinh Nguyen
2019-12-12 2:50 ` [RFC PATCH 13/14] usb: devicetree: dwc3: Add property to disable mult TRB fetch Thinh Nguyen
2019-12-12 8:19 ` Felipe Balbi
2019-12-12 22:28 ` Thinh Nguyen
2019-12-13 7:04 ` Felipe Balbi
2019-12-13 20:10 ` Thinh Nguyen
2019-12-19 22:17 ` Rob Herring
2019-12-19 22:51 ` Thinh Nguyen
2019-12-20 22:11 ` Rob Herring
2019-12-20 23:52 ` Thinh Nguyen
2019-12-12 2:50 ` [RFC PATCH 14/14] usb: dwc3: gadget: Implement disabling of " Thinh Nguyen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=40f63473-187a-e7ed-a931-d49c895120a6@synopsys.com \
--to=thinh.nguyen@synopsys.com \
--cc=John.Youn@synopsys.com \
--cc=balbi@kernel.org \
--cc=gregkh@linuxfoundation.org \
--cc=linux-usb@vger.kernel.org \
--cc=rogerq@ti.com \
--cc=stern@rowland.harvard.edu \
--cc=zhengbin13@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).