linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* usb: musb: "(null)" in sysfs mode file after disabling a gadget (and at other times, system hangs)
@ 2018-03-01 23:47 Merlijn Wajer
  2018-03-02 15:27 ` Bin Liu
  0 siblings, 1 reply; 7+ messages in thread
From: Merlijn Wajer @ 2018-03-01 23:47 UTC (permalink / raw)
  To: Bin Liu
  Cc: Greg Kroah-Hartman, linux-usb, linux-kernel, Pali Rohár,
	Ivaylo Dimitrov, linux-omap


[-- Attachment #1.1: Type: text/plain, Size: 1813 bytes --]

Hi,

I found that the "mode" file in musb sys node will return "(null)" when
one would expect it show b_idle.

Wrong /mode file:

[Fresh boot, cable not connected yet]
root@n900devuan:~# modprobe g_nokia
[Insert cable connected to PC]
root@n900devuan:~# cat
/sys/devices/platform/68000000.ocp/480ab000.usb_otg_hs/musb-hdrc.0.auto/mode
b_peripheral
[Remove cable connected to PC]
root@n900devuan:~# cat
/sys/devices/platform/68000000.ocp/480ab000.usb_otg_hs/musb-hdrc.0.auto/mode
b_idle
root@n900devuan:~# rmmod g_nokia
root@n900devuan:~# cat
/sys/devices/platform/68000000.ocp/480ab000.usb_otg_hs/musb-hdrc.0.auto/mode
(null)
[Insert cable connected to PC]
root@n900devuan:~# cat
/sys/devices/platform/68000000.ocp/480ab000.usb_otg_hs/musb-hdrc.0.auto/mode
b_idle

I would expect it to state "b_idle" instead of "(null)".
I have also been able to reproduce this "(null)" state using only
configfs (and not deprecated g_nokia module), but this example is more
cumbersome to write up)


Sometimes it crashes the entire system (reproducibly):

[Fresh boot, USB cable connect to PC at all times]
root@n900devuan:~# cat
/sys/devices/platform/68000000.ocp/480ab000.usb_otg_hs/musb-hdrc.0.auto/mode
b_idle
root@n900devuan:~# modprobe g_nokia
root@n900devuan:~# cat
/sys/devices/platform/68000000.ocp/480ab000.usb_otg_hs/musb-hdrc.0.auto/mode
b_peripheral
root@n900devuan:~# rmmod g_nokia
(Hangs, reboots after a few seconds, probably due to watchdog)


This occurs on Nokia N900 (RX-51). Kernel config has:

CONFIG_USB_LIBCOMPOSITE=m
CONFIG_USB_F_*=m
CONFIG_USB_G_*=m

I don't have a trace because I don't have a serial on my Nokia N900. I
have not yet tested this on other musb devices, but I can do that if
that helps reproducing the issue.

Cheers,
Merlijn


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 228 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: usb: musb: "(null)" in sysfs mode file after disabling a gadget (and at other times, system hangs)
  2018-03-01 23:47 usb: musb: "(null)" in sysfs mode file after disabling a gadget (and at other times, system hangs) Merlijn Wajer
@ 2018-03-02 15:27 ` Bin Liu
  2018-03-02 16:47   ` Merlijn Wajer
  0 siblings, 1 reply; 7+ messages in thread
From: Bin Liu @ 2018-03-02 15:27 UTC (permalink / raw)
  To: Merlijn Wajer
  Cc: Greg Kroah-Hartman, linux-usb, linux-kernel, Pali Rohár,
	Ivaylo Dimitrov, linux-omap

Hi,

On Fri, Mar 02, 2018 at 12:47:07AM +0100, Merlijn Wajer wrote:
> Hi,
> 
> I found that the "mode" file in musb sys node will return "(null)" when
> one would expect it show b_idle.
> 
> Wrong /mode file:
> 
> [Fresh boot, cable not connected yet]
> root@n900devuan:~# modprobe g_nokia
> [Insert cable connected to PC]
> root@n900devuan:~# cat
> /sys/devices/platform/68000000.ocp/480ab000.usb_otg_hs/musb-hdrc.0.auto/mode
> b_peripheral
> [Remove cable connected to PC]
> root@n900devuan:~# cat
> /sys/devices/platform/68000000.ocp/480ab000.usb_otg_hs/musb-hdrc.0.auto/mode
> b_idle
> root@n900devuan:~# rmmod g_nokia
> root@n900devuan:~# cat
> /sys/devices/platform/68000000.ocp/480ab000.usb_otg_hs/musb-hdrc.0.auto/mode
> (null)

I can reproduce this on AM335x EVM,

> [Insert cable connected to PC]
> root@n900devuan:~# cat
> /sys/devices/platform/68000000.ocp/480ab000.usb_otg_hs/musb-hdrc.0.auto/mode
> b_idle

but not this, I still get (null). g_nokia is not loaded here, right?

> 
> I would expect it to state "b_idle" instead of "(null)".

Actually, I'd like to see (null) whenever a gadget driver is not loaded,
which indicates a gadget is not bound to the udc.

Regards,
-Bin.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: usb: musb: "(null)" in sysfs mode file after disabling a gadget (and at other times, system hangs)
  2018-03-02 15:27 ` Bin Liu
@ 2018-03-02 16:47   ` Merlijn Wajer
  2018-03-02 16:54     ` Pali Rohár
  0 siblings, 1 reply; 7+ messages in thread
From: Merlijn Wajer @ 2018-03-02 16:47 UTC (permalink / raw)
  To: Bin Liu, Greg Kroah-Hartman, linux-usb, linux-kernel,
	Pali Rohár, Ivaylo Dimitrov, linux-omap


[-- Attachment #1.1: Type: text/plain, Size: 3525 bytes --]

Hi,

On 02/03/18 16:27, Bin Liu wrote:
> Hi,
> 
> On Fri, Mar 02, 2018 at 12:47:07AM +0100, Merlijn Wajer wrote:
>> Hi,
>>
>> I found that the "mode" file in musb sys node will return "(null)" when
>> one would expect it show b_idle.
>>
>> Wrong /mode file:
>>
>> [Fresh boot, cable not connected yet]
>> root@n900devuan:~# modprobe g_nokia
>> [Insert cable connected to PC]
>> root@n900devuan:~# cat
>> /sys/devices/platform/68000000.ocp/480ab000.usb_otg_hs/musb-hdrc.0.auto/mode
>> b_peripheral
>> [Remove cable connected to PC]
>> root@n900devuan:~# cat
>> /sys/devices/platform/68000000.ocp/480ab000.usb_otg_hs/musb-hdrc.0.auto/mode
>> b_idle
>> root@n900devuan:~# rmmod g_nokia
>> root@n900devuan:~# cat
>> /sys/devices/platform/68000000.ocp/480ab000.usb_otg_hs/musb-hdrc.0.auto/mode
>> (null)
> 
> I can reproduce this on AM335x EVM,

>> [Insert cable connected to PC]
>> root@n900devuan:~# cat
>> /sys/devices/platform/68000000.ocp/480ab000.usb_otg_hs/musb-hdrc.0.auto/mode
>> b_idle
> 
> but not this, I still get (null). g_nokia is not loaded here, right?

I don't think so:

# cat
/sys/devices/platform/68000000.ocp/480ab000.usb_otg_hs/musb-hdrc.0.auto/mode
b_peripheral
[unplug]
# cat
/sys/devices/platform/68000000.ocp/480ab000.usb_otg_hs/musb-hdrc.0.auto/mode
b_idle
# rmmod g_nokia
# lsmod|grep nokia
nokia_modem            16384  0
ssi_protocol           20480  2 nokia_modem,cmt_speech
hsi                    20480  5
hsi_char,omap_ssi,nokia_modem,cmt_speech,ssi_protocol
# cat
/sys/devices/platform/68000000.ocp/480ab000.usb_otg_hs/musb-hdrc.0.auto/mode
(null)

... libcomposite is loaded, but nothing is in configfs (apart from the
empty usb_gadget):

root@n900devuan:~# zgrep COMPOSITE /proc/config.gz
# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
CONFIG_USB_LIBCOMPOSITE=m
CONFIG_USB_CDC_COMPOSITE=m
root@n900devuan:~# ls /sys/kernel/config/
usb_gadget
root@n900devuan:~# ls /sys/kernel/config/usb_gadget/

Do you have USB_LIBCOMPOSITE and USB_CONFIGFS enabled as module?

I tried to unload libcomposite and the usb_f_* modules:

# rmmod libcomposite
rmmod: ERROR: Module libcomposite is in use by: usb_f_ecm usb_f_phonet
usb_f_acm usb_f_mass_storage usb_f_obex
# rmmod usb_f_ecm usb_f_phonet usb_f_acm usb_f_mass_storage usb_f_obex
# rmmod libcomposite
# lsmod|grep libcom

Yet it now states this: (No change made in cable, was disconnected)

# cat
/sys/devices/platform/68000000.ocp/480ab000.usb_otg_hs/musb-hdrc.0.auto/mode
b_peripheral

And the mode doesn't change any more, even when I connect the cable.

Then, when I probe libcomposite and g_nokia again (in this order) the
mode changes to b_idle, with the cable plugged in. It doesn't change
when I plug the phone in again. When I remove g_nokia again, remove the
cable, modprobe it again, and connect the cable, it seems to work again
as expected and I can see some gadget.

I do not see any errors messages from the kernel.

Finally, when I issued 'rmmod g_nokia', the device hung and rebooted again.

>> I would expect it to state "b_idle" instead of "(null)".
> 
> Actually, I'd like to see (null) whenever a gadget driver is not loaded,
> which indicates a gadget is not bound to the udc.

Hm... Sounds fine to me. I'm using this mode in combination with the usb
phy (vbus property) to detect if the phone is detect to a 'dumb' charger
of a PC, but I can just always have a gadget loaded -- same as before,
really.

Cheers,
Merlijn


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 228 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: usb: musb: "(null)" in sysfs mode file after disabling a gadget (and at other times, system hangs)
  2018-03-02 16:47   ` Merlijn Wajer
@ 2018-03-02 16:54     ` Pali Rohár
  2018-03-05 19:28       ` Bin Liu
  0 siblings, 1 reply; 7+ messages in thread
From: Pali Rohár @ 2018-03-02 16:54 UTC (permalink / raw)
  To: Merlijn Wajer
  Cc: Bin Liu, Greg Kroah-Hartman, linux-usb, linux-kernel,
	Ivaylo Dimitrov, linux-omap

[-- Attachment #1: Type: text/plain, Size: 745 bytes --]

On Friday 02 March 2018 17:47:52 Merlijn Wajer wrote:
> >> I would expect it to state "b_idle" instead of "(null)".
> > 
> > Actually, I'd like to see (null) whenever a gadget driver is not loaded,
> > which indicates a gadget is not bound to the udc.
> 
> Hm... Sounds fine to me. I'm using this mode in combination with the usb
> phy (vbus property) to detect if the phone is detect to a 'dumb' charger
> of a PC, but I can just always have a gadget loaded -- same as before,
> really.

For detection if wallcharger or pc usb charger is connected, there is
isp1704_charger driver. It uses some standard ULPI interface. It reports
current_max and type (DCP - dedicated, CDP or just usb).

-- 
Pali Rohár
pali.rohar@gmail.com

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 195 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: usb: musb: "(null)" in sysfs mode file after disabling a gadget (and at other times, system hangs)
  2018-03-02 16:54     ` Pali Rohár
@ 2018-03-05 19:28       ` Bin Liu
  2018-03-05 19:44         ` Merlijn Wajer
  0 siblings, 1 reply; 7+ messages in thread
From: Bin Liu @ 2018-03-05 19:28 UTC (permalink / raw)
  To: Pali Rohár
  Cc: Merlijn Wajer, Greg Kroah-Hartman, linux-usb, linux-kernel,
	Ivaylo Dimitrov, linux-omap

Merlijn,

On Fri, Mar 02, 2018 at 05:54:39PM +0100, Pali Rohár wrote:
> On Friday 02 March 2018 17:47:52 Merlijn Wajer wrote:
> > >> I would expect it to state "b_idle" instead of "(null)".
> > > 
> > > Actually, I'd like to see (null) whenever a gadget driver is not loaded,
> > > which indicates a gadget is not bound to the udc.
> > 
> > Hm... Sounds fine to me. I'm using this mode in combination with the usb
> > phy (vbus property) to detect if the phone is detect to a 'dumb' charger
> > of a PC, but I can just always have a gadget loaded -- same as before,
> > really.
> 
> For detection if wallcharger or pc usb charger is connected, there is
> isp1704_charger driver. It uses some standard ULPI interface. It reports
> current_max and type (DCP - dedicated, CDP or just usb).

The musb udc driver sets the state to b_idle without checking a
gadget driver, this should be cleaned up. I have add this in my backlog.
But if this issue doesn't bother you much right now, I will make the
action low priority and address it later whenever I got time. (likely
not very soon, I have a hand full of musb driver bugs to fix...)

Regards,
-Bin.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: usb: musb: "(null)" in sysfs mode file after disabling a gadget (and at other times, system hangs)
  2018-03-05 19:28       ` Bin Liu
@ 2018-03-05 19:44         ` Merlijn Wajer
  2018-03-06 14:36           ` Bin Liu
  0 siblings, 1 reply; 7+ messages in thread
From: Merlijn Wajer @ 2018-03-05 19:44 UTC (permalink / raw)
  To: Bin Liu, Pali Rohár, Greg Kroah-Hartman, linux-usb,
	linux-kernel, Ivaylo Dimitrov, linux-omap


[-- Attachment #1.1: Type: text/plain, Size: 500 bytes --]

Hi Bin,

On 05/03/18 20:28, Bin Liu wrote:

> The musb udc driver sets the state to b_idle without checking a
> gadget driver, this should be cleaned up. I have add this in my backlog.
> But if this issue doesn't bother you much right now, I will make the
> action low priority and address it later whenever I got time. (likely
> not very soon, I have a hand full of musb driver bugs to fix...)

I can try to fix it this (or next) week. Do you have a pointer for me?

Cheers,
Merlijn


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 228 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: usb: musb: "(null)" in sysfs mode file after disabling a gadget (and at other times, system hangs)
  2018-03-05 19:44         ` Merlijn Wajer
@ 2018-03-06 14:36           ` Bin Liu
  0 siblings, 0 replies; 7+ messages in thread
From: Bin Liu @ 2018-03-06 14:36 UTC (permalink / raw)
  To: Merlijn Wajer
  Cc: Pali Rohár, Greg Kroah-Hartman, linux-usb, linux-kernel,
	Ivaylo Dimitrov, linux-omap

On Mon, Mar 05, 2018 at 08:44:40PM +0100, Merlijn Wajer wrote:
> Hi Bin,
> 
> On 05/03/18 20:28, Bin Liu wrote:
> 
> > The musb udc driver sets the state to b_idle without checking a
> > gadget driver, this should be cleaned up. I have add this in my backlog.
> > But if this issue doesn't bother you much right now, I will make the
> > action low priority and address it later whenever I got time. (likely
> > not very soon, I have a hand full of musb driver bugs to fix...)
> 
> I can try to fix it this (or next) week. Do you have a pointer for me?

Quickly looking at the code, musb->xceiv->otg->state is set to OTG_STATE_B_IDLE
in musb_init_controller(), musb_gadget_setup(), musb_gadget_start(), and
musb_g_disconnect(). I am not sure if there is redundancy, and gadget
driver should be checked in some of them.

Regards,
-Bin.

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2018-03-06 14:37 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-03-01 23:47 usb: musb: "(null)" in sysfs mode file after disabling a gadget (and at other times, system hangs) Merlijn Wajer
2018-03-02 15:27 ` Bin Liu
2018-03-02 16:47   ` Merlijn Wajer
2018-03-02 16:54     ` Pali Rohár
2018-03-05 19:28       ` Bin Liu
2018-03-05 19:44         ` Merlijn Wajer
2018-03-06 14:36           ` Bin Liu

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).