Raspberry Pi 4B: USB OTG is not working
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
linux-raspi (Ubuntu) |
Fix Released
|
Undecided
|
Unassigned | ||
Focal |
Fix Released
|
Medium
|
Unassigned | ||
linux-raspi2 (Ubuntu) |
Fix Released
|
High
|
Hui Wang | ||
Eoan |
Fix Released
|
High
|
Unassigned |
Bug Description
[Impact]
On the RPI4B board, the usb-c power port could also work as a USB
OTG mode, but we set the dwc2 driver to the host mode
unconditionally, now set it to dual_role mode, then it could work
in host/otg/peripheal mode.
[Fix]
Set USB_DWC2_
[Test Case]
set the dtoverlay=
and isnmod the g_ether or g_cdc, on the host machine, we could see
RPI4B work as a usb device.
Because physical port limitation, could test dr_mode=host.
[Regression Risk]
Low, our eoan kernel choose dwc_otg driver for this port by default,
very very few users will choose dwc2 driver, and the dwc2 driver is
not enabled by default in our kernel.
And bug reporter and I already tested that the peripheral mode works
after this change.
I am using Raspberry Pi 4B (4GB) and want to make use of the OTG functionality (g_ether). I cross checked with Raspbian to make sure it is not a hardware issue. Extract from dmesg of Ubuntu 19.10.1 with latest updates applied as of Jan 26th, 2020 via "apt-get update" and "apt-get full-upgrade":
...
[ 1.514262] dwc_otg: version 3.00a 10-AUG-2012 (platform bus)
[ 1.517365] dwc_otg: FIQ enabled
[ 1.517376] dwc_otg: NAK holdoff enabled
[ 1.517386] dwc_otg: FIQ split-transaction FSM enabled
[ 1.517399] Module dwc_common_port init
...
[ 6.358332] dwc2 fe980000.usb: fe980000.usb supply vusb_d not found, using dummy regulator
[ 6.358388] dwc2 fe980000.usb: fe980000.usb supply vusb_a not found, using dummy regulator
[ 6.358545] dwc2 fe980000.usb: Configuration mismatch. dr_mode forced to host
[ 6.409098] dwc2 fe980000.usb: DWC OTG Controller
[ 6.409399] dwc2 fe980000.usb: new USB bus registered, assigned bus number 3
[ 6.409432] dwc2 fe980000.usb: irq 23, io mem 0xfe980000
...
[ 111.796714] udc-core: couldn't find an available UDC - added [g_ether] to list of pending drivers
I think it is that "Configuration mismatch. dr_mode forced to host" log entry telling me that the port is acting as HOST mode instead of OTG mode. I have try putting these in usercfg.txt
"dtoverlay=dwc2"
"dtoverlay=
"dtoverlay=
and it will give the same result, no OTG functionality.
On the same hardware running Raspbian Buster, it initialise successfully. Corresponding dmesg:
...
[ 0.567531] dwc_otg: version 3.00a 10-AUG-2012 (platform bus)
[ 0.570391] dwc_otg: FIQ enabled
[ 0.570400] dwc_otg: NAK holdoff enabled
[ 0.570409] dwc_otg: FIQ split-transaction FSM enabled
[ 0.570421] Module dwc_common_port init
...
[ 2.507634] dwc2 fe980000.usb: fe980000.usb supply vusb_d not found, using dummy regulator
[ 2.511011] dwc2 fe980000.usb: Linked as a consumer to regulator.0
[ 2.514450] dwc2 fe980000.usb: fe980000.usb supply vusb_a not found, using dummy regulator
[ 2.731860] dwc2 fe980000.usb: dwc2_check_params: Invalid parameter lpm=1
[ 2.735511] dwc2 fe980000.usb: dwc2_check_params: Invalid parameter lpm_clock_gating=1
[ 2.735522] dwc2 fe980000.usb: dwc2_check_params: Invalid parameter besl=1
[ 2.735533] dwc2 fe980000.usb: dwc2_check_params: Invalid parameter hird_threshold_en=1
[ 2.735582] dwc2 fe980000.usb: EPs: 8, dedicated fifos, 4080 entries in SPRAM
[ 2.752511] dwc2 fe980000.usb: DWC OTG Controller
[ 2.752554] dwc2 fe980000.usb: new USB bus registered, assigned bus number 3
[ 2.752601] dwc2 fe980000.usb: irq 36, io mem 0xfe980000
...
[ 2.848843] g_ether gadget: Ethernet Gadget, version: Memorial Day 2008
[ 2.851601] g_ether gadget: g_ether ready
[ 2.854580] dwc2 fe980000.usb: bound driver g_ether
[ 2.998525] dwc2 fe980000.usb: new device is high-speed
[ 3.075025] dwc2 fe980000.usb: new device is high-speed
[ 3.139338] dwc2 fe980000.usb: new address 10
[ 3.154010] g_ether gadget: high-speed config #1: CDC Ethernet (ECM)
CVE References
Changed in linux-raspi2 (Ubuntu): | |
assignee: | nobody → Hui Wang (hui.wang) |
importance: | Undecided → High |
Changed in linux-raspi2 (Ubuntu): | |
status: | New → Triaged |
description: | updated |
Changed in linux-raspi2 (Ubuntu Eoan): | |
importance: | Undecided → High |
status: | New → In Progress |
Changed in linux-raspi2 (Ubuntu Eoan): | |
status: | In Progress → Fix Committed |
no longer affects: | linux-raspi (Ubuntu Eoan) |
no longer affects: | linux-raspi2 (Ubuntu Focal) |
Changed in linux-raspi (Ubuntu Focal): | |
importance: | Undecided → Medium |
status: | New → Triaged |
Changed in linux-raspi (Ubuntu): | |
status: | New → Invalid |
Changed in linux-raspi (Ubuntu Focal): | |
status: | Triaged → Fix Committed |
Changed in linux-raspi2 (Ubuntu): | |
status: | Triaged → Fix Released |
I remember on the rpi4B board, there is no physical usb-otg port at all? could you please tell me which port is for otg?