All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v5 0/7] dwc-hsotg (aka dwc2) USB host controller emulation
@ 2020-05-12  6:48 Paul Zimmerman
  2020-05-12  6:48 ` [PATCH v5 1/7] raspi: add BCM2835 SOC MPHI emulation Paul Zimmerman
                   ` (9 more replies)
  0 siblings, 10 replies; 22+ messages in thread
From: Paul Zimmerman @ 2020-05-12  6:48 UTC (permalink / raw)
  To: Gerd Hoffmann
  Cc: Peter Maydell, Stefan Hajnoczi, QEMU Developers, Paul Zimmerman,
	John Snow, Philippe Mathieu-Daudé

Gerd, Peter, what do you think about accepting this patch series? The
only possibly disruptive patch is #5, which modifies the dev-storage.c
code a bit, the rest is all new code which shouldn't affect anything
else. Felippe Mathieu-Daudé has done quite a bit of review of the
patches, and has said he thinks it could be accepted now.

This patch series adds emulation for the dwc-hsotg USB controller,
which is used on the Raspberry Pi 3 and earlier, as well as a number
of other development boards. The main benefit for Raspberry Pi is that
this enables networking on these boards, since the network adapter is
attached via USB.

The emulation is working quite well, I have tested with USB network,
mass storage, mouse, keyboard, and tablet. I have tested with the dwc2
driver in the upstream Linux kernel, and with the dwc-otg driver in the
Raspbian kernel.

One remaining issue is that USB host passthrough does not work. I tried
connecting to a USB stick on the host, but the device generates babble
errors and does not work. This is because the dwc-hsotg controller only
has one root port, so a full-speed dev-hub device is always connected
to it, and high-speed USB devices on the host do not work at full-speed
on the guest. (I have WIP code to add high-speed support to dev-hub to
fix this.)

The patch series also includes a very basic emulation of the MPHI
device on the Raspberry Pi SOC, which provides the FIQ interrupt that
is used by the dwc-otg driver in the Raspbian kernel. But that driver
still does not work in full FIQ mode, so it is necessary to add a
parameter to the kernel command line ("dwc_otg.fiq_fsm_enable=0") to
make it work.

I have used some online sources of information while developing this
emulation, including:

http://www.capital-micro.com/PDF/CME-M7_Family_User_Guide_EN.pdf
which has a pretty complete description of the controller starting
on page 370.

https://sourceforge.net/p/wive-ng/wive-ng-mt/ci/master/tree/docs/DataSheets/RT3050_5x_V2.0_081408_0902.pdf
which has a description of the controller registers starting on
page 130.

Changes v4-v5:
  - Changed MemoryRegionOps to use '.impl.[min/max]_access_size' and
    removed ANDing of memory values with 0xffffffff, per Felippe.

  - hcd-dwc2.c: Changed NULL check of return from
    object_property_get_link() call to an assertion, per Felippe.

  - bcm2835_mphi.c/h:
    * Changed swirq_set/swirq_clr registers into a single register,
      per Felippe.
    * Simplified memory region code, per Felippe.

Changes v3-v4:
  - Reworked the memory region / register access code according to
    an example patch from Felippe Mathieu-Daudé.

  - Moved the Makefile/Kconfig changes for this file into this
    patch, per Felipe.

  - Fixed a missing DEFINE_PROP_END_OF_LIST() in dwc2_usb_properties.

Changes v2-v3:
  - Fixed the high-speed frame time emulation so that high-speed
    mouse/tablet will work correctly once we have high-speed hub
    support.

  - Added a "usb_version" property to the dwc-hsotg controller, to
    allow choosing whether the controller emulates a USB 1 full-speed
    host or a USB 2 high-speed host.

  - Added a test for a working dwc-hsotg controller to the raspi2
    acceptance test, requested by Philippe M.

  - Added #defines for the register array sizes, instead of hard-
    coding them in multiple places.

  - Removed the NB_PORTS #define and the associated iteration code,
    since the controller only supports a single root port.

  - Removed some unused fields from the controller state struct.

  - Added pointers to some online documentation to the top of
    hcd-dwc2.c, requested by Peter M.

  - Reworked the init/realize code to remove some confusing function
    names, requested by Peter M.

  - Added VMStateDescription structs for the controller and MPHI
    state, requested by Peter M (untested).

Changes v1-v2:
  - Fixed checkpatch errors/warnings, except for dwc2-regs.h since
    that is a direct import from the Linux kernel.

  - Switched from debug printfs to tracepoints in hcd-dwc2.c, on the
    advice of Gerd. I just dropped the debug prints in bcm2835_mphi.c,
    since I didn't consider them very useful.

  - Updated a couple of the commit messages with more info.

Thanks for your time,
Paul

---

Paul Zimmerman (7):
  raspi: add BCM2835 SOC MPHI emulation
  dwc-hsotg (dwc2) USB host controller register definitions
  dwc-hsotg (dwc2) USB host controller state definitions
  dwc-hsotg (dwc2) USB host controller emulation
  usb: add short-packet handling to usb-storage driver
  wire in the dwc-hsotg (dwc2) USB host controller emulation
  raspi2 acceptance test: add test for dwc-hsotg (dwc2) USB host

 hw/arm/bcm2835_peripherals.c           |   38 +-
 hw/misc/Makefile.objs                  |    1 +
 hw/misc/bcm2835_mphi.c                 |  184 ++++
 hw/usb/Kconfig                         |    5 +
 hw/usb/Makefile.objs                   |    1 +
 hw/usb/dev-storage.c                   |   15 +-
 hw/usb/hcd-dwc2.c                      | 1372 ++++++++++++++++++++++++
 hw/usb/hcd-dwc2.h                      |  173 +++
 hw/usb/trace-events                    |   47 +
 include/hw/arm/bcm2835_peripherals.h   |    5 +-
 include/hw/misc/bcm2835_mphi.h         |   44 +
 include/hw/usb/dwc2-regs.h             |  895 ++++++++++++++++
 tests/acceptance/boot_linux_console.py |    9 +-
 13 files changed, 2784 insertions(+), 5 deletions(-)
 create mode 100644 hw/misc/bcm2835_mphi.c
 create mode 100644 hw/usb/hcd-dwc2.c
 create mode 100644 hw/usb/hcd-dwc2.h
 create mode 100644 include/hw/misc/bcm2835_mphi.h
 create mode 100644 include/hw/usb/dwc2-regs.h

-- 
2.17.1



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

end of thread, other threads:[~2020-05-26  7:03 UTC | newest]

Thread overview: 22+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-05-12  6:48 [PATCH v5 0/7] dwc-hsotg (aka dwc2) USB host controller emulation Paul Zimmerman
2020-05-12  6:48 ` [PATCH v5 1/7] raspi: add BCM2835 SOC MPHI emulation Paul Zimmerman
2020-05-15  8:10   ` Philippe Mathieu-Daudé
2020-05-15  9:19     ` Paul Zimmerman
2020-05-18 15:14   ` Peter Maydell
2020-05-12  6:48 ` [PATCH v5 2/7] dwc-hsotg (dwc2) USB host controller register definitions Paul Zimmerman
2020-05-15  8:07   ` Philippe Mathieu-Daudé
2020-05-15  8:40     ` Gerd Hoffmann
2020-05-12  6:48 ` [PATCH v5 3/7] dwc-hsotg (dwc2) USB host controller state definitions Paul Zimmerman
2020-05-12  6:48 ` [PATCH v5 4/7] dwc-hsotg (dwc2) USB host controller emulation Paul Zimmerman
2020-05-18 15:34   ` Peter Maydell
2020-05-20  5:48     ` Paul Zimmerman
2020-05-20 13:18       ` Peter Maydell
2020-05-20 21:24         ` Paul Zimmerman
2020-05-26  7:00           ` Damien Hedde
2020-05-12  6:48 ` [PATCH v5 5/7] usb: add short-packet handling to usb-storage driver Paul Zimmerman
2020-05-12  6:48 ` [PATCH v5 6/7] wire in the dwc-hsotg (dwc2) USB host controller emulation Paul Zimmerman
2020-05-12  6:49 ` [PATCH v5 7/7] raspi2 acceptance test: add test for dwc-hsotg (dwc2) USB host Paul Zimmerman
2020-05-12  7:43 ` [PATCH v5 0/7] dwc-hsotg (aka dwc2) USB host controller emulation no-reply
2020-05-14 12:22 ` Gerd Hoffmann
2020-05-14 12:42   ` Peter Maydell
2020-05-18 15:39 ` Peter Maydell

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.