From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jim Lin Date: Tue, 7 Apr 2015 11:24:30 +0800 Subject: [U-Boot] [PATCH v2 80/80] dm: usb: Add a README for driver model In-Reply-To: <1427307788-7496-81-git-send-email-sjg@chromium.org> References: <1427307788-7496-1-git-send-email-sjg@chromium.org> <1427307788-7496-81-git-send-email-sjg@chromium.org> Message-ID: <55234DEE.1010307@nvidia.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de There are some typos. Please correct them, thanks. On 03/26/2015 02:23 AM, Simon Glass wrote: > Add some documentation describing how USB is implemented with USB. This > might make things easier for people to understand. > > Signed-off-by: Simon Glass > --- > > Changes in v2: > - Rewrite and expand series to support driver model fully > > doc/driver-model/usb-info.txt | 415 ++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 415 insertions(+) > create mode 100644 doc/driver-model/usb-info.txt > > diff --git a/doc/driver-model/usb-info.txt b/doc/driver-model/usb-info.txt > new file mode 100644 > index 0000000..3762b6c > --- /dev/null > +++ b/doc/driver-model/usb-info.txt > @@ -0,0 +1,415 @@ > +How USB works with driver model > +=============================== > + > +Introduction > +------------ > + > +Driver model USB support makes use of existing features but changes how > +drivers are found. This document provides some information intended to help > +understand how things work with USB in U-Boot when driver model is enabled. > + > + > +Enabling driver model for USB > +----------------------------- > + > +A new CONFIG_DM_USB option is provided to enable driver model for USB. This > +causes the USB uclass to be included, and drops the equivalent code in > +usb.c. In particular the usb_init() function is then implemented by the > +uclass. > + > + > +Support for ECHI and XCHI EHCI XHCI > +------------------------- > + > +So far OHCI is not supported. Both EHCI and XHCI drivers should be declared > +as drivers in the USB uclass. For example: > + > +static const struct udevice_id ehci_usb_ids[] = { > + { .compatible = "nvidia,tegra20-ehci", .data = USB_CTLR_T20 }, > + { .compatible = "nvidia,tegra30-ehci", .data = USB_CTLR_T30 }, > + { .compatible = "nvidia,tegra114-ehci", .data = USB_CTLR_T114 }, > + { } > +}; > + > +U_BOOT_DRIVER(usb_ehci) = { > + .name = "ehci_tegra", > + .id = UCLASS_USB, > + .of_match = ehci_usb_ids, > + .ofdata_to_platdata = ehci_usb_ofdata_to_platdata, > + .probe = tegra_ehci_usb_probe, > + .remove = tegra_ehci_usb_remove, > + .ops = &ehci_usb_ops, > + .platdata_auto_alloc_size = sizeof(struct usb_platdata), > + .priv_auto_alloc_size = sizeof(struct fdt_usb), > + .flags = DM_FLAG_ALLOC_PRIV_DMA, > +}; > + > +Here ehci_usb_ids is used to list the controllers that the driver supports. > +Each has its own data value. Controllers must be in the UCLASS_USB uclass. > + > +The ofdata_to_platdata() method allows the controller driver to grab any > +necessary settings from the device tree. > + > +The ops here are ehci_usb_ops. All EHCI drivers will use these same ops in > +most cases, since they are all ECHI-compatible. For ECHI there are also some EHCI-compatible For EHCI > +special operations that can be overriden when calling ehci_register(). overridden > +This defines a single controller, containing a root hub (which is required). > +The hub is emulated by a hub emulator, and the emulated hub has a single > +flash stick to emulate on one of its ports. > + > +When 'usb start' is used, the following 'dm tree' output will be available: > + > + usb [ + ] `-- usb at 1 > + usb_hub [ + ] `-- hub > + usb_emul [ + ] |-- hub-emul > + usb_emul [ + ] | `-- flash-stick > + usb_mass_st [ + ] `-- usb_mass_storage > + > + > +This may look a confusing. Most of it mirrors the device tree, but the may look confusing --nvpublic