usb/188683: dwc_otg FDT support for specifying usb controller mode

2014-04-16 Thread John Wehle

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

2014-04-16 Thread John Wehle
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

2010-08-22 Thread John Wehle

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