Message ID | 20191023090232.27237-1-rogerq@ti.com (mailing list archive) |
---|---|
State | Mainlined |
Commit | f3fb802efaef3662744a2215a51294d52a7cfc0e |
Headers | show |
Series | usb: cdns3: gadget: Don't manage pullups | expand |
Hi, Reviewed-by: Pawel Laszczak <pawell@cadence.com> Regards, Pawel, >The USB gadget core is supposed to manage pullups >of the controller. Don't manage pullups from within >the controller driver. Otherwise, function drivers >are not able to keep the controller disconnected from >the bus till they are ready. (e.g. g_webcam) > >Signed-off-by: Roger Quadros <rogerq@ti.com> >--- >Hi Greg/Felipe, > >This can be used for -rc as it is a bug fix. > >cheers, >-roger > > drivers/usb/cdns3/gadget.c | 4 ---- > 1 file changed, 4 deletions(-) > >diff --git a/drivers/usb/cdns3/gadget.c b/drivers/usb/cdns3/gadget.c >index 2ca280f4c054..714382d96055 100644 >--- a/drivers/usb/cdns3/gadget.c >+++ b/drivers/usb/cdns3/gadget.c >@@ -2324,8 +2324,6 @@ static void cdns3_gadget_config(struct cdns3_device *priv_dev) > writel(USB_CONF_CLK2OFFDS | USB_CONF_L1DS, ®s->usb_conf); > > cdns3_configure_dmult(priv_dev, NULL); >- >- cdns3_gadget_pullup(&priv_dev->gadget, 1); > } > > /** >@@ -2708,8 +2706,6 @@ static int cdns3_gadget_suspend(struct cdns3 *cdns, bool do_wakeup) > /* disable interrupt for device */ > writel(0, &priv_dev->regs->usb_ien); > >- cdns3_gadget_pullup(&priv_dev->gadget, 0); >- > return 0; > } > >-- >Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki. >Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki
On 19-10-23 09:17:45, Pawel Laszczak wrote: > Hi, > > Reviewed-by: Pawel Laszczak <pawell@cadence.com> Hi Roger & Pawel, Assume gadget function has already enabled, if you switch host mode to device mode, with your changes, where the device mode will be enabled again? Peter > > Regards, > Pawel, > > >The USB gadget core is supposed to manage pullups > >of the controller. Don't manage pullups from within > >the controller driver. Otherwise, function drivers > >are not able to keep the controller disconnected from > >the bus till they are ready. (e.g. g_webcam) > > > >Signed-off-by: Roger Quadros <rogerq@ti.com> > >--- > >Hi Greg/Felipe, > > > >This can be used for -rc as it is a bug fix. > > > >cheers, > >-roger > > > > drivers/usb/cdns3/gadget.c | 4 ---- > > 1 file changed, 4 deletions(-) > > > >diff --git a/drivers/usb/cdns3/gadget.c b/drivers/usb/cdns3/gadget.c > >index 2ca280f4c054..714382d96055 100644 > >--- a/drivers/usb/cdns3/gadget.c > >+++ b/drivers/usb/cdns3/gadget.c > >@@ -2324,8 +2324,6 @@ static void cdns3_gadget_config(struct cdns3_device *priv_dev) > > writel(USB_CONF_CLK2OFFDS | USB_CONF_L1DS, ®s->usb_conf); > > > > cdns3_configure_dmult(priv_dev, NULL); > >- > >- cdns3_gadget_pullup(&priv_dev->gadget, 1); > > } > > > > /** > >@@ -2708,8 +2706,6 @@ static int cdns3_gadget_suspend(struct cdns3 *cdns, bool do_wakeup) > > /* disable interrupt for device */ > > writel(0, &priv_dev->regs->usb_ien); > > > >- cdns3_gadget_pullup(&priv_dev->gadget, 0); > >- > > return 0; > > } > > > >-- > >Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki. > >Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki >
Peter, On 25/10/2019 06:13, Peter Chen wrote: > On 19-10-23 09:17:45, Pawel Laszczak wrote: >> Hi, >> >> Reviewed-by: Pawel Laszczak <pawell@cadence.com> > > Hi Roger & Pawel, > > Assume gadget function has already enabled, if you switch host mode > to device mode, with your changes, where the device mode will be enabled > again? When it switches from device mode to host the UDC is removed. When we switch back from host to device mode the UDC is added, so, usb_add_gadget_udc_release()-> check_pending_gadget_drivers()-> udc_bind_to_driver()->usb_udc_connect_control()->usb_gadget_connect()-> gadget->ops->pullup() cheers, -roger > > Peter >> >> Regards, >> Pawel, >> >>> The USB gadget core is supposed to manage pullups >>> of the controller. Don't manage pullups from within >>> the controller driver. Otherwise, function drivers >>> are not able to keep the controller disconnected from >>> the bus till they are ready. (e.g. g_webcam) >>> >>> Signed-off-by: Roger Quadros <rogerq@ti.com> >>> --- >>> Hi Greg/Felipe, >>> >>> This can be used for -rc as it is a bug fix. >>> >>> cheers, >>> -roger >>> >>> drivers/usb/cdns3/gadget.c | 4 ---- >>> 1 file changed, 4 deletions(-) >>> >>> diff --git a/drivers/usb/cdns3/gadget.c b/drivers/usb/cdns3/gadget.c >>> index 2ca280f4c054..714382d96055 100644 >>> --- a/drivers/usb/cdns3/gadget.c >>> +++ b/drivers/usb/cdns3/gadget.c >>> @@ -2324,8 +2324,6 @@ static void cdns3_gadget_config(struct cdns3_device *priv_dev) >>> writel(USB_CONF_CLK2OFFDS | USB_CONF_L1DS, ®s->usb_conf); >>> >>> cdns3_configure_dmult(priv_dev, NULL); >>> - >>> - cdns3_gadget_pullup(&priv_dev->gadget, 1); >>> } >>> >>> /** >>> @@ -2708,8 +2706,6 @@ static int cdns3_gadget_suspend(struct cdns3 *cdns, bool do_wakeup) >>> /* disable interrupt for device */ >>> writel(0, &priv_dev->regs->usb_ien); >>> >>> - cdns3_gadget_pullup(&priv_dev->gadget, 0); >>> - >>> return 0; >>> } >>> >>> -- >>> Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki. >>> Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki >> >
Hi, Roger Quadros <rogerq@ti.com> writes: > On 25/10/2019 06:13, Peter Chen wrote: >> On 19-10-23 09:17:45, Pawel Laszczak wrote: >>> Hi, >>> >>> Reviewed-by: Pawel Laszczak <pawell@cadence.com> >> >> Hi Roger & Pawel, >> >> Assume gadget function has already enabled, if you switch host mode >> to device mode, with your changes, where the device mode will be enabled >> again? > > When it switches from device mode to host the UDC is removed. When we switch > back from host to device mode the UDC is added, so, > > usb_add_gadget_udc_release()-> check_pending_gadget_drivers()-> > udc_bind_to_driver()->usb_udc_connect_control()->usb_gadget_connect()-> > gadget->ops->pullup() I agree with Roger here. UDC shouldn't try to manage pullups directly. If there are any bugs related to role switch, we should fix it in udc core, so the fix applies to everyone ;-)
On 19-10-25 12:59:17, Roger Quadros wrote: > Peter, > > On 25/10/2019 06:13, Peter Chen wrote: > > On 19-10-23 09:17:45, Pawel Laszczak wrote: > > > Hi, > > > > > > Reviewed-by: Pawel Laszczak <pawell@cadence.com> > > > > Hi Roger & Pawel, > > > > Assume gadget function has already enabled, if you switch host mode > > to device mode, with your changes, where the device mode will be enabled > > again? > > When it switches from device mode to host the UDC is removed. When we switch > back from host to device mode the UDC is added, so, > > usb_add_gadget_udc_release()-> check_pending_gadget_drivers()-> > udc_bind_to_driver()->usb_udc_connect_control()->usb_gadget_connect()-> > gadget->ops->pullup() Thanks. I have another question how you decide when to store UDC name to /sys/kernel/config/usb_gadget/g1/UDC? Do you have a user daemon program to monitor VBUS or external connector? At host mode, the store operation will fail due to there is NO UDC.
On 29/10/2019 05:12, Peter Chen wrote: > On 19-10-25 12:59:17, Roger Quadros wrote: >> Peter, >> >> On 25/10/2019 06:13, Peter Chen wrote: >>> On 19-10-23 09:17:45, Pawel Laszczak wrote: >>>> Hi, >>>> >>>> Reviewed-by: Pawel Laszczak <pawell@cadence.com> >>> >>> Hi Roger & Pawel, >>> >>> Assume gadget function has already enabled, if you switch host mode >>> to device mode, with your changes, where the device mode will be enabled >>> again? >> >> When it switches from device mode to host the UDC is removed. When we switch >> back from host to device mode the UDC is added, so, >> >> usb_add_gadget_udc_release()-> check_pending_gadget_drivers()-> >> udc_bind_to_driver()->usb_udc_connect_control()->usb_gadget_connect()-> >> gadget->ops->pullup() > > Thanks. I have another question how you decide when to store UDC name > to /sys/kernel/config/usb_gadget/g1/UDC? Do you have a user daemon program > to monitor VBUS or external connector? At host mode, the store operation > will fail due to there is NO UDC. > Yes, user space needs to monitor /sys/class/usb_role/6000000.usb-role-switch/role When it becomes "device" the UDC is available and it can prepare to configure the UDC. Could you please give your Ack for this patch if it is OK? Thanks. cheers, -roger
Hi, Roger Quadros <rogerq@ti.com> writes: > On 29/10/2019 05:12, Peter Chen wrote: >> On 19-10-25 12:59:17, Roger Quadros wrote: >>> Peter, >>> >>> On 25/10/2019 06:13, Peter Chen wrote: >>>> On 19-10-23 09:17:45, Pawel Laszczak wrote: >>>>> Hi, >>>>> >>>>> Reviewed-by: Pawel Laszczak <pawell@cadence.com> >>>> >>>> Hi Roger & Pawel, >>>> >>>> Assume gadget function has already enabled, if you switch host mode >>>> to device mode, with your changes, where the device mode will be enabled >>>> again? >>> >>> When it switches from device mode to host the UDC is removed. When we switch >>> back from host to device mode the UDC is added, so, >>> >>> usb_add_gadget_udc_release()-> check_pending_gadget_drivers()-> >>> udc_bind_to_driver()->usb_udc_connect_control()->usb_gadget_connect()-> >>> gadget->ops->pullup() >> >> Thanks. I have another question how you decide when to store UDC name >> to /sys/kernel/config/usb_gadget/g1/UDC? Do you have a user daemon program >> to monitor VBUS or external connector? At host mode, the store operation >> will fail due to there is NO UDC. >> > > Yes, user space needs to monitor /sys/class/usb_role/6000000.usb-role-switch/role > > When it becomes "device" the UDC is available and it can prepare to configure > the UDC. > > Could you please give your Ack for this patch if it is OK? Thanks. this is already in its way to Linus' tree: https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git/commit/?h=usb-linus&id=f3fb802efaef3662744a2215a51294d52a7cfc0e
On 19-10-29 11:37:31, Roger Quadros wrote: > > > On 29/10/2019 05:12, Peter Chen wrote: > > On 19-10-25 12:59:17, Roger Quadros wrote: > > > Peter, > > > > > > On 25/10/2019 06:13, Peter Chen wrote: > > > > On 19-10-23 09:17:45, Pawel Laszczak wrote: > > > > > Hi, > > > > > > > > > > Reviewed-by: Pawel Laszczak <pawell@cadence.com> > > > > > > > > Hi Roger & Pawel, > > > > > > > > Assume gadget function has already enabled, if you switch host mode > > > > to device mode, with your changes, where the device mode will be enabled > > > > again? > > > > > > When it switches from device mode to host the UDC is removed. When we switch > > > back from host to device mode the UDC is added, so, > > > > > > usb_add_gadget_udc_release()-> check_pending_gadget_drivers()-> > > > udc_bind_to_driver()->usb_udc_connect_control()->usb_gadget_connect()-> > > > gadget->ops->pullup() > > > > Thanks. I have another question how you decide when to store UDC name > > to /sys/kernel/config/usb_gadget/g1/UDC? Do you have a user daemon program > > to monitor VBUS or external connector? At host mode, the store operation > > will fail due to there is NO UDC. > > > > Yes, user space needs to monitor /sys/class/usb_role/6000000.usb-role-switch/role > > When it becomes "device" the UDC is available and it can prepare to configure > the UDC. > > Could you please give your Ack for this patch if it is OK? Thanks. > Acked-by: Peter Chen <peter.chen@nxp.com>
diff --git a/drivers/usb/cdns3/gadget.c b/drivers/usb/cdns3/gadget.c index 2ca280f4c054..714382d96055 100644 --- a/drivers/usb/cdns3/gadget.c +++ b/drivers/usb/cdns3/gadget.c @@ -2324,8 +2324,6 @@ static void cdns3_gadget_config(struct cdns3_device *priv_dev) writel(USB_CONF_CLK2OFFDS | USB_CONF_L1DS, ®s->usb_conf); cdns3_configure_dmult(priv_dev, NULL); - - cdns3_gadget_pullup(&priv_dev->gadget, 1); } /** @@ -2708,8 +2706,6 @@ static int cdns3_gadget_suspend(struct cdns3 *cdns, bool do_wakeup) /* disable interrupt for device */ writel(0, &priv_dev->regs->usb_ien); - cdns3_gadget_pullup(&priv_dev->gadget, 0); - return 0; }
The USB gadget core is supposed to manage pullups of the controller. Don't manage pullups from within the controller driver. Otherwise, function drivers are not able to keep the controller disconnected from the bus till they are ready. (e.g. g_webcam) Signed-off-by: Roger Quadros <rogerq@ti.com> --- Hi Greg/Felipe, This can be used for -rc as it is a bug fix. cheers, -roger drivers/usb/cdns3/gadget.c | 4 ---- 1 file changed, 4 deletions(-)