Hi, On Thu, Aug 23, 2018 at 10:06:50PM +0000, Takashi Matsuzawa wrote: > Hello. > > I am trying HNP (host -> peripheral role change) using two > PocketBeagles, but without success. Well, you are the very first one that I have ever heard who tries to use HNP on musb, at least on musb_dsps. > If there any idea on where I, where should I ask this, or how can I > debug / fix, I really appreciate. Being said, the controller itself does support HNP and other OTG protocols, but the musb driver might not, or have been broken for a very long time, since HNP probably never been tested on musb_dsps. If you use kernel v4.18+, you can try to revert commit 0a9134bd733b usb: musb: disable otg protocol support to see if HNP works. Regards, -Bin. > > 1) What I did > > Two PocketBeagles (running the default Debian image). > Both added 2nd USB ports (musb_hdrc.1). > DTBs were modified so that the 2nd musb_hdrcs have dr_mode = "otg". > musb_dsps glue port seems to be used. > Tech reference manual says the SoC's musb core supports HNP. > > One is A (by GNDing ID pin) and another B, connected with USB cable. > modprobe g_zero on both so that VBUS power is on, and A becomes a_host > and b becomes b_peripheral (as read through debugfs mode value). > > Then I did the following, expecting HNP happens and A bevcomes > a_peripheral and B bcomes b_host: > > i) Send b_hnp_enable request on A. > (This does set DEVCTL.HOSTREQ bits on B's musb_hdrc.1 and maybe doing > some additinoal things in musb driver on B.) > > ii) Set POWER.SUSPENDM bit on A's musb_hdrc.1 > (According to TRM, this should tell B's musb core to initiate HNP.) > > 2) Observation > > A: a_host -> a_wait_bcon -> a_idle -> a_wait_vrise -> a_host > B: b_peripheral -> b_idle -> b_peripheral > > And I see "musb_hdrc.1 Babble" messages on both A and B console. > > Looks like B disconnects once, but A = host/B = peripheral does not change. > > Looking into musb driver source, there are code for HNP maybe to help > musb core behavior. > (But I have not enabled driver debug message yet, which I may try next?)