usb/188683: dwc_otg FDT support for specifying usb controller mode
Number: 188683 Category: usb Synopsis: dwc_otg FDT support for specifying usb controller mode Confidential: no Severity: non-critical Priority: low Responsible:freebsd-usb State: open Quarter: Keywords: Date-Required: Class: sw-bug Submitter-Id: current-users Arrival-Date: Wed Apr 16 07:20:01 UTC 2014 Closed-Date: Last-Modified: Originator: John Wehle Release:11 r264251 Organization: Personal Environment: Not Yet Description: In my spare time I'm working on bringing FreeBSD up on amlogic based arm processors. The amlogic SoC contains a dwc USB controller. If I enable the controller on a Visson ATV-102 box (mine appears to be based on the aml8726-m6 SoC) which uses a GL850G usb hub chip the driver fails to detect GOTGCTL_ASESVLD so it doesn't work. The attached patch allows the mode to be specifed in the FDT ... if the mode is set to host, then the driver doesn't looks for GOTGCTL_ASESVLD ... it assumes VBUS is driven. This suffices for basic USB functionality on the Visson ATV-102. How-To-Repeat: Build FreeBSD 11 for the Visson ATV-102 (this requires code for the amlogic platform which I'll be supplying in the future) and attempt to use USB. Fix: Apply the patch to optionally specify the controller mode and added mode = host; to the usb block in vsatv102-m6.dts. Patch attached with submission follows: Index: sys/dev/usb/controller/dwc_otg_fdt.c === --- sys/dev/usb/controller/dwc_otg_fdt.c(revision 264251) +++ sys/dev/usb/controller/dwc_otg_fdt.c(working copy) @@ -91,9 +91,27 @@ dwc_otg_attach(device_t dev) { struct dwc_otg_super_softc *sc = device_get_softc(dev); + pcell_t *prop; + phandle_t node; + ssize_t len; int err; int rid; + node = ofw_bus_get_node(dev); + len = OF_getprop_alloc(node, mode, sizeof(char), (void **)prop); + if (len = 0) { + if (strcmp((char *)prop, host) == 0) + sc-sc_otg.sc_mode = DWC_MODE_HOST; + else if (strcmp((char *)prop, device) == 0) + sc-sc_otg.sc_mode = DWC_MODE_DEVICE; + else if (strcmp((char *)prop, otg) == 0) + ; + else + device_printf(dev, + ignoring unknown value for mode attribute in FDT\n); + } + free(prop, M_OFWPROP); + /* initialise some bus fields */ sc-sc_otg.sc_bus.parent = dev; sc-sc_otg.sc_bus.devices = sc-sc_otg.sc_devices; Index: sys/dev/usb/controller/dwc_otg.c === --- sys/dev/usb/controller/dwc_otg.c(revision 264251) +++ sys/dev/usb/controller/dwc_otg.c(working copy) @@ -2332,7 +2332,7 @@ DPRINTFN(5, GOTGCTL=0x%08x\n, temp); - dwc_otg_vbus_interrupt(sc, + dwc_otg_vbus_interrupt(sc, (sc-sc_mode == DWC_MODE_HOST) ? 1 : (temp (GOTGCTL_ASESVLD | GOTGCTL_BSESVLD)) ? 1 : 0); } @@ -3182,7 +3182,7 @@ sc-sc_host_ch_max); /* setup FIFO */ - if (dwc_otg_init_fifo(sc, DWC_MODE_OTG)) + if (dwc_otg_init_fifo(sc, sc-sc_mode)) return (EINVAL); /* enable interrupts */ @@ -3233,7 +3233,7 @@ DPRINTFN(5, GOTCTL=0x%08x\n, temp); - dwc_otg_vbus_interrupt(sc, + dwc_otg_vbus_interrupt(sc, (sc-sc_mode == DWC_MODE_HOST) ? 1 : (temp (GOTGCTL_ASESVLD | GOTGCTL_BSESVLD)) ? 1 : 0); USB_BUS_UNLOCK(sc-sc_bus); Release-Note: Audit-Trail: Unformatted: ___ freebsd-usb@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-usb To unsubscribe, send any mail to freebsd-usb-unsubscr...@freebsd.org
Re: usb/188683: dwc_otg FDT support for specifying usb controller mode
The following reply was made to PR usb/188683; it has been noted by GNATS. From: John Wehle j...@feith.com To: i...@freebsd.org Cc: freebsd-gnats-sub...@freebsd.org Subject: Re: usb/188683: dwc_otg FDT support for specifying usb controller mode Date: Thu, 17 Apr 2014 00:27:49 -0400 (EDT) - dr_mode: tells Dual-Role USB controllers that we want to work on a particular mode. Valid arguments are host, peripheral and otg. In case this attribute isn't passed via DT, USB DRD controllers should default to OTG. Patch revised per your comments attached below. -- John 88- Index: sys/dev/usb/controller/dwc_otg_fdt.c === --- sys/dev/usb/controller/dwc_otg_fdt.c (revision 264251) +++ sys/dev/usb/controller/dwc_otg_fdt.c (working copy) @@ -91,9 +91,27 @@ dwc_otg_attach(device_t dev) { struct dwc_otg_super_softc *sc = device_get_softc(dev); + pcell_t *prop; + phandle_t node; + ssize_t len; int err; int rid; + node = ofw_bus_get_node(dev); + len = OF_getprop_alloc(node, dr_mode, sizeof(char), (void **)prop); + if (len = 0) { + if (strcmp((char *)prop, host) == 0) + sc-sc_otg.sc_mode = DWC_MODE_HOST; + else if (strcmp((char *)prop, peripheral) == 0) + sc-sc_otg.sc_mode = DWC_MODE_DEVICE; + else if (strcmp((char *)prop, otg) == 0) + ; + else + device_printf(dev, +ignoring unknown value for dr_mode attribute in FDT\n); + } + free(prop, M_OFWPROP); + /* initialise some bus fields */ sc-sc_otg.sc_bus.parent = dev; sc-sc_otg.sc_bus.devices = sc-sc_otg.sc_devices; Index: sys/dev/usb/controller/dwc_otg.c === --- sys/dev/usb/controller/dwc_otg.c (revision 264251) +++ sys/dev/usb/controller/dwc_otg.c (working copy) @@ -2332,7 +2332,7 @@ DPRINTFN(5, GOTGCTL=0x%08x\n, temp); - dwc_otg_vbus_interrupt(sc, + dwc_otg_vbus_interrupt(sc, (sc-sc_mode == DWC_MODE_HOST) ? 1 : (temp (GOTGCTL_ASESVLD | GOTGCTL_BSESVLD)) ? 1 : 0); } @@ -3182,7 +3182,7 @@ sc-sc_host_ch_max); /* setup FIFO */ - if (dwc_otg_init_fifo(sc, DWC_MODE_OTG)) + if (dwc_otg_init_fifo(sc, sc-sc_mode)) return (EINVAL); /* enable interrupts */ @@ -3233,7 +3233,7 @@ DPRINTFN(5, GOTCTL=0x%08x\n, temp); - dwc_otg_vbus_interrupt(sc, + dwc_otg_vbus_interrupt(sc, (sc-sc_mode == DWC_MODE_HOST) ? 1 : (temp (GOTGCTL_ASESVLD | GOTGCTL_BSESVLD)) ? 1 : 0); USB_BUS_UNLOCK(sc-sc_bus); - | Feith Systems | Voice: 1-215-646-8000 | Email: j...@feith.com | |John Wehle| Fax: 1-215-540-5495 | | - ___ freebsd-usb@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-usb To unsubscribe, send any mail to freebsd-usb-unsubscr...@freebsd.org
usb/149900: FreeBSD 8.1 uftdi patch to support usb-uirt
Number: 149900 Category: usb Synopsis: FreeBSD 8.1 uftdi patch to support usb-uirt Confidential: no Severity: non-critical Priority: low Responsible:freebsd-usb State: open Quarter: Keywords: Date-Required: Class: sw-bug Submitter-Id: current-users Arrival-Date: Mon Aug 23 05:30:06 UTC 2010 Closed-Date: Last-Modified: Originator: John Wehle Release:8.1 Organization: Environment: FreeBSD wagner 8.1-RELEASE FreeBSD 8.1-RELEASE #0: Wed Aug 18 13:46:05 EDT 2010 r...@wagner:/usr/obj/usr/src/sys/CUSTOM i386 Description: The enclosed lightly tested patch allows uftdi to recognize the usb-uirt which is an universal infrared receiver transmitter (more information is at: http://www.usbuirt.com ). lirc expects it to show up as a com port. I modified a version of lirc so it would build on FreeBSD to verify that I could talk to the usb-uirt once the patch was applied. How-To-Repeat: Attach a usb-uirt and notice that it doesn't register with uftdi. Fix: Apply attached patch. Patch attached with submission follows: *** dev/usb/usbdevs.ORIGINALSun Jun 13 22:09:06 2010 --- dev/usb/usbdevs Sun Aug 22 01:04:33 2010 *** product FTDI EMCU2D 0xe88a Expert mouse *** 1520,1525 --- 1520,1526 product FTDI PCMSFU 0xe88b Precision Clock MSF USB product FTDI EMCU2H 0xe88c Expert mouseCLOCK USB II HBG product FTDI MAXSTREAM 0xee18 Maxstream PKG-U + product FTDI USB_UIRT 0xf850 USB-UIRT product FTDI USBSERIAL0xfa00 Matrix Orbital USB Serial product FTDI MX2_30xfa01 Matrix Orbital MX2 or MX3 product FTDI MX4_50xfa02 Matrix Orbital MX4 or MX5 *** dev/usb/serial/uftdi.c.ORIGINAL Sun Jun 13 22:09:06 2010 --- dev/usb/serial/uftdi.c Sun Aug 22 04:12:00 2010 *** static struct usb_device_id uftdi_devs[] *** 232,237 --- 232,238 UFTDI_DEV(FTDI, CFA_633, 8U232AM), UFTDI_DEV(FTDI, CFA_634, 8U232AM), UFTDI_DEV(FTDI, CFA_635, 8U232AM), + UFTDI_DEV(FTDI, USB_UIRT, 8U232AM), UFTDI_DEV(FTDI, USBSERIAL, 8U232AM), UFTDI_DEV(FTDI, MX2_3, 8U232AM), UFTDI_DEV(FTDI, MX4_5, 8U232AM), Release-Note: Audit-Trail: Unformatted: ___ freebsd-usb@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-usb To unsubscribe, send any mail to freebsd-usb-unsubscr...@freebsd.org