I have two usb ports, a usb-standard A port and a usb-mini port, on my custom board, neither of which are working properly. My custom board has an IMX6Q and is based on the sabresd platform.
When I plug a usb stick into the usb-standard port I get the following output on dmesg:
ehci_fsl_bus_resume begins, Host 1
ehci_fsl_bus_resume ends, Host 1
usb 2-1: new high speed USB device number 10 using fsl-ehci
usb 2-1: device descriptor read/64, error -71
usb 2-1: device descriptor read/64, error -71
usb 2-1: new high speed USB device number 11 using fsl-ehci
usb 2-1: device descriptor read/64, error -71
usb 2-1: device descriptor read/64, error -71
usb 2-1: new high speed USB device number 12 using fsl-ehci
usb 2-1: device not accepting address 12, error -71
usb 2-1: new high speed USB device number 13 using fsl-ehci
usb 2-1: device not accepting address 13, error -71
hub 2-0:1.0: unable to enumerate USB device on port 1
ehci_fsl_bus_suspend begins, Host 1
ehci_fsl_bus_suspend ends, Host 1
Plugging a host device, like a computer, into the OTG usb mini port. I get no response at all.
---------------------------------------------------------------------------------------------------------------------------------------------------
Here is my initialization code:
I've defined these pads for driving the usb-standard A port:
MX6Q_PAD_GPIO_0__GPIO_1_0 /*USB_H1_PWR*/
MX6Q_PAD_GPIO_3__USBOH3_USBH1_OC /*USB_H1_OC*/
I've defined these pads for driving the usb-mini port:
MX6Q_PAD_GPIO_1__USBOTG_ID /*USB_OTG_ID*/
MX6Q_PAD_KEY_COL4__USBOH3_USBOTG_OC /*USB_OTG_OC*/
MX6Q_PAD_KEY_ROW4__GPIO_4_15 /*USB_OTG_PWR*/
Here is my usb initialization function:
#define USB_OTG_PWR IMX_GPIO_NR(4, 15)
#define USB_H1_PWR IMX_GPIO_NR(1, 0)
static void imx6q_dtra3_usbotg_vbus(bool on) {
if (on)
gpio_set_value(USB_OTG_PWR, 1);
else
gpio_set_value(USB_OTG_PWR, 0);
}
static void imx6q_dtra3_host1_vbus(bool on) {
if (on)
gpio_set_value(USB_H1_PWR, 1);
else
gpio_set_value(USB_H1_PWR, 0);
}
static void __init imx6q_dtra3_init_usb(void) {
int ret = 0;
imx_otg_base = MX6_IO_ADDRESS(MX6Q_USB_OTG_BASE_ADDR);
ret = gpio_request(USB_OTG_PWR, "usb-pwr");
if (ret) {
pr_err("failed to get GPIO USB_OTG_PWR: %d\n", ret);
return;
}
gpio_direction_output(USB_OTG_PWR, 0);
/* keep USB host1 VBUS always on */
ret = gpio_request(USB_H1_PWR, "usb-h1-pwr");
if (ret) {
pr_err("failed to get GPIO USB_H1_PWR: %d\n", ret);
return;
}
gpio_direction_output(USB_H1_PWR, 1);
mxc_iomux_set_gpr_register(1, 13, 1, 1);
mx6_set_otghost_vbus_func(imx6q_dtra3_usbotg_vbus);
mx6_set_host1_vbus_func(imx6q_dtra3_host1_vbus);
}
--------------------------------------------------------------------------------------------------------------------------------------
Here is the output of cat /proc/driver/isp1504_otg
Freescale USB OTG Driver
fsl_usb2_otg version: $Revision: 1.55 $
OTGSC reg: 01042120
PORTSC reg: 1cd01000
USBMODE reg: 00000013
USBCMD reg: 00010004
USBSTS reg: 00001088
OTG state: UNDEFINED
a_bus_req: 1
b_bus_req: 0
a_bus_resume: 0
a_bus_suspend: 0
a_conn: 0
a_sess_vld: 0
a_srp_det: 0
a_vbus_vld: 0
b_bus_resume: 0
b_bus_suspend: 0
b_conn: 0
b_se0_srp: 0
b_sess_end: 0
b_sess_vld: 0
id: 1
-------------------------------------------------------------------------------------------------------------------------------------------
Here is my kernel start-up log:
U-Boot 2009.08 (Jul 30 2014 - 08:50:28)
CPU: Freescale i.MX6 family TO1.2 at 792 MHz
Thermal sensor with ratio = 185
Temperature: 31 C, calibration data 0x5954e57d
mx6q pll1: 792MHz
mx6q pll2: 528MHz
mx6q pll3: 480MHz
mx6q pll8: 50MHz
ipg clock : 66000000Hz
ipg per clock : 66000000Hz
uart clock : 80000000Hz
cspi clock : 60000000Hz
ahb clock : 132000000Hz
axi clock : 264000000Hz
emi_slow clock: 132000000Hz
ddr clock : 528000000Hz
usdhc1 clock : 198000000Hz
usdhc2 clock : 198000000Hz
usdhc3 clock : 198000000Hz
usdhc4 clock : 198000000Hz
nfc clock : 24000000Hz
Board: i.MX6Q-DTRA-3: DTRA3 Board: 0x63e12 [WDOG]
Boot Device: SD (2)
I2C: ready
DRAM: 1 GB
MMC: FSL_USDHC: 0,FSL_USDHC: 1,FSL_USDHC: 2,FSL_USDHC: 3
In: serial
Out: serial
Err: serial
i2c: I2C3 SDA is low, start i2c recovery...
I2C3 Recovery failed, I2C1 SDA still low!!!
Net: got MAC address from IIM: 00:00:00:00:00:00
enet_board_init: reset phy
FEC0 [PRIME]
Hit any key to stop autoboot: 0
mmc1 is current device
MMC read: dev # 1, block # 2048, count 8192 ... 8192 blocks read: OK
## Booting kernel from Legacy Image at 10800000 ...
Image Name: Linux-3.0.35-2508-g54750ff
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 3952880 Bytes = 3.8 MB
Load Address: 10008000
Entry Point: 10008000
Verifying Checksum ... OK
Loading Kernel Image ... OK
OK
Starting kernel ...
Linux version 3.0.35-2508-g54750ff (jbert@claws) (gcc version 4.6.2 20110630 (prerelease) (Freescale MAD -- Linaro 2011.07 -- Built at 2011/08/10 09:20) ) #55 SMP PREEMPT Fri Aug 1 15:37:56 PDT 2014
CPU: ARMv7 Processor [412fc09a] revision 10 (ARMv7), cr=10c53c7d
CPU: VIPT nonaliasing data cache, VIPT aliasing instruction cache
Machine: PARC DTRA3 based on 6Quad Sabre-SD Board
Ignoring unrecognised tag 0x54410008
Memory policy: ECC disabled, Data cache writealloc
CPU identified as i.MX6Q, silicon rev 1.2
PERCPU: Embedded 7 pages/cpu @8c008000 s5440 r8192 d15040 u32768
Built 1 zonelists in Zone order, mobility grouping on. Total pages: 194560
Kernel command line: maxcpus=1 console=ttymxc0,115200 root=/dev/mmcblk1p1 rw rootwait
PID hash table entries: 4096 (order: 2, 16384 bytes)
Dentry cache hash table entries: 131072 (order: 7, 524288 bytes)
Inode-cache hash table entries: 65536 (order: 6, 262144 bytes)
Memory: 512MB 256MB = 768MB total
Memory: 765572k/765572k available, 283004k reserved, 0K highmem
Virtual kernel memory layout:
vector : 0xffff0000 - 0xffff1000 ( 4 kB)
fixmap : 0xfff00000 - 0xfffe0000 ( 896 kB)
DMA : 0xf4600000 - 0xffe00000 ( 184 MB)
vmalloc : 0xc0800000 - 0xf2000000 ( 792 MB)
lowmem : 0x80000000 - 0xc0000000 (1024 MB)
pkmap : 0x7fe00000 - 0x80000000 ( 2 MB)
modules : 0x7f000000 - 0x7fe00000 ( 14 MB)
.init : 0x80008000 - 0x8003e000 ( 216 kB)
.text : 0x8003e000 - 0x80abca18 (10747 kB)
.data : 0x80abe000 - 0x80b23280 ( 405 kB)
.bss : 0x80b232a4 - 0x80b7184c ( 314 kB)
SLUB: Genslabs=13, HWalign=32, Order=0-3, MinObjects=0, CPUs=4, Nodes=1
Preemptible hierarchical RCU implementation.
NR_IRQS:624
MXC GPIO hardware
sched_clock: 32 bits at 3000kHz, resolution 333ns, wraps every 1431655ms
arm_max_freq=1GHz
MXC_Early serial console at MMIO 0x2020000 (options '115200')
bootconsole [ttymxc0] enabled
Console: colour dummy device 80x30
Calibrating delay loop... 1581.05 BogoMIPS (lpj=7905280)
pid_max: default: 32768 minimum: 301
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
hw perfevents: enabled with ARMv7 Cortex-A9 PMU driver, 7 counters available
Brought up 1 CPUs
SMP: Total of 1 processors activated (1581.05 BogoMIPS).
print_constraints: dummy:
NET: Registered protocol family 16
print_constraints: vddpu: 725 <--> 1300 mV at 700 mV fast normal
print_constraints: vddcore: 725 <--> 1300 mV at 1150 mV fast normal
print_constraints: vddsoc: 725 <--> 1300 mV at 1200 mV fast normal
print_constraints: vdd2p5: 2000 <--> 2775 mV at 2400 mV fast normal
print_constraints: vdd1p1: 800 <--> 1400 mV at 1100 mV fast normal
print_constraints: vdd3p0: 2625 <--> 3400 mV at 3000 mV fast normal
***********************INIT USB********************
Power down KEY_ROW4: USB_OTG_PWR
Power up GPIO_0: USB_H1_PWR
hw-breakpoint: found 6 breakpoint and 1 watchpoint registers.
hw-breakpoint: 1 breakpoint(s) reserved for watchpoint single-step.
hw-breakpoint: maximum watchpoint size is 4 bytes.
L310 cache controller enabled
l2x0: 16 ways, CACHE_ID 0x410000c7, AUX_CTRL 0x02070000, Cache size: 1048576 B
bio: create slab <bio-0> at 0
mxs-dma mxs-dma-apbh: initialized
print_constraints: vmmc: 3300 mV
vgaarb: loaded
SCSI subsystem initialized
spi_imx imx6q-ecspi.0: probed
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
Freescale USB OTG Driver loaded, $Revision: 1.55 $
MIPI CSI2 driver module loaded
Advanced Linux Sound Architecture Driver Version 1.0.24.
Bluetooth: Core ver 2.16
NET: Registered protocol family 31
Bluetooth: HCI device and connection manager initialized
Bluetooth: HCI socket layer initialized
Bluetooth: L2CAP socket layer initialized
Bluetooth: SCO socket layer initialized
i2c-core: driver [max17135] using legacy suspend method
i2c-core: driver [max17135] using legacy resume method
Switching to clocksource mxc_timer1
cfg80211: Calling CRDA to update world regulatory domain
NET: Registered protocol family 2
IP route cache hash table entries: 32768 (order: 5, 131072 bytes)
TCP established hash table entries: 131072 (order: 8, 1048576 bytes)
TCP bind hash table entries: 65536 (order: 7, 786432 bytes)
TCP: Hash tables configured (established 131072 bind 65536)
TCP reno registered
UDP hash table entries: 512 (order: 2, 16384 bytes)
UDP-Lite hash table entries: 512 (order: 2, 16384 bytes)
NET: Registered protocol family 1
RPC: Registered named UNIX socket transport module.
RPC: Registered udp transport module.
RPC: Registered tcp transport module.
RPC: Registered tcp NFSv4.1 backchannel transport module.
PMU: registered new PMU device of type 0
Static Power Management for Freescale i.MX6
wait mode is enabled for i.MX6
cpaddr = c0880000 suspend_iram_base=c0828000
PM driver module loaded
IMX usb wakeup probe
add wake up source irq 75
IMX usb wakeup probe
cpu regulator mode:ldo_enable
i.MXC CPU frequency driver
JFFS2 version 2.2. (NAND) © 2001-2006 Red Hat, Inc.
msgmni has been set to 1495
alg: No test for stdrng (krng)
io scheduler noop registered
io scheduler deadline registered
io scheduler cfq registered (default)
MIPI DSI driver module loaded
imx-sdma imx-sdma: loaded firmware 1.1
imx-sdma imx-sdma: initialized
Serial: IMX driver
imx-uart.0: ttymxc0 at MMIO 0x2020000 (irq = 58) is a IMX
console [ttymxc0] enabled, bootconsole disabled
console [ttymxc0] enabled, bootconsole disabled
loop: module loaded
m25p80 spi0.0: found m25p32, expected sst25vf016b
m25p80 spi0.0: m25p32 (4096 Kbytes)
Creating 2 MTD partitions on "m25p80":
0x000000000000-0x000000100000 : "bootloader"
0x000000100000-0x000000400000 : "kernel"
GPMI NAND driver registered. (IMX)
vcan: Virtual CAN interface driver
CAN device driver interface
flexcan netdevice driver
FEC Ethernet Driver
fec_enet_mii_bus: probed
ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
fsl-ehci fsl-ehci.0: Freescale On-Chip EHCI Host Controller
fsl-ehci fsl-ehci.0: new USB bus registered, assigned bus number 1
fsl-ehci fsl-ehci.0: irq 75, io base 0x02184000
fsl-ehci fsl-ehci.0: USB 2.0 started, EHCI 1.00
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 1 port detected
add wake up source irq 72
Power up GPIO_0: USB_H1_PWR
fsl-ehci fsl-ehci.1: Freescale On-Chip EHCI Host Controller
fsl-ehci fsl-ehci.1: new USB bus registered, assigned bus number 2
fsl-ehci fsl-ehci.1: irq 72, io base 0x02184200
fsl-ehci fsl-ehci.1: USB 2.0 started, EHCI 1.00
hub 2-0:1.0: USB hub found
hub 2-0:1.0: 1 port detected
Initializing USB Mass Storage driver...
usbcore: registered new interface driver usb-storage
USB Mass Storage support registered.
ARC USBOTG Device Controller driver (1 August 2005)
mousedev: PS/2 mouse device common for all mice
i2c-core: driver [isl29023] using legacy suspend method
i2c-core: driver [isl29023] using legacy resume method
snvs_rtc snvs_rtc.0: rtc core: registered snvs_rtc as rtc0
i2c /dev entries driver
Linux video capture interface: v2.00
i2c-core: driver [mag3110] using legacy suspend method
i2c-core: driver [mag3110] using legacy resume method
imx2-wdt imx2-wdt.0: IMX2+ Watchdog Timer enabled. timeout=60s (nowayout=1)
Bluetooth: Virtual HCI driver ver 1.3
Bluetooth: HCI UART driver ver 2.2
Bluetooth: HCIATH3K protocol initialized
Bluetooth: Generic Bluetooth USB driver ver 0.6
usbcore: registered new interface driver btusb
sdhci: Secure Digital Host Controller Interface driver
sdhci: Copyright(c) Pierre Ossman
mmc0: SDHCI controller on platform [sdhci-esdhc-imx.3] using DMA
mmc1: SDHCI controller on platform [sdhci-esdhc-imx.1] using DMA
mmc2: SDHCI controller on platform [sdhci-esdhc-imx.2] using DMA
mxc_vdoa mxc_vdoa: i.MX Video Data Order Adapter(VDOA) driver probed
VPU initialized
Thermal calibration data is 0x5954e57d
Thermal sensor with ratio = 185
Anatop Thermal registered as thermal_zone0
anatop_thermal_probe: default cooling device is cpufreq!
usbcore: registered new interface driver usbhid
usbhid: USB HID core driver
usbcore: registered new interface driver snd-usb-audio
Cirrus Logic CS42888 ALSA SoC Codec Driver
i2c-core: driver [cs42888] using legacy suspend method
i2c-core: driver [cs42888] using legacy resume method
imx_3stack asoc driver
Initialize HDMI-audio failed. Load HDMI-video first!
ALSA device list:
No soundcards found.
NET: Registered protocol family 26
TCP cubic registered
NET: Registered protocol family 17
can: controller area network core (rev 20090105 abi 8)
NET: Registered protocol family 29
can: raw protocol (rev 20090105)
can: broadcast manager protocol (rev 20090105 t)
Bluetooth: RFCOMM TTY layer initialized
Bluetooth: RFCOMM socket layer initialized
Bluetooth: RFCOMM ver 1.11
Bluetooth: BNEP (Ethernet Emulation) ver 1.3
Bluetooth: BNEP filters: protocol multicast
Bluetooth: HIDP (Human Interface Emulation) ver 1.2
lib80211: common routines for IEEE802.11 drivers
VFP support v0.3: implementor 41 architecture 3 part 30 variant 9 rev 4
Bus freq driver module loaded
Bus freq driver Enabled
mxc_dvfs_core_probe
DVFS driver module loaded
snvs_rtc snvs_rtc.0: setting system clock to 1970-01-01 00:00:00 UTC (0)
Waiting for root device /dev/mmcblk1p1...
mmc0: new high speed DDR MMC card at address 0001
mmcblk0: mmc0:0001 MMC64G 30.2 GiB
mmcblk0boot0: mmc0:0001 MMC64G partition 1 2.00 MiB
mmcblk0boot1: mmc0:0001 MMC64G partition 2 2.00 MiB
mmcblk0: p1
mmcblk0boot1: unknown partition table
mmcblk0boot0: unknown partition table
mmc1: new high speed SDHC card at address 0007
mmcblk1: mmc1:0007 SD08G 7.42 GiB
mmcblk1: p1
EXT3-fs: barriers not enabled
kjournald starting. Commit interval 5 seconds
EXT3-fs (mmcblk1p1): using internal journal
EXT3-fs (mmcblk1p1): mounted filesystem with writeback data mode
VFS: Mounted root (ext3 filesystem) on device 179:25.
Power down KEY_ROW4: USB_OTG_PWR
Freeing init memory: 216K
starting pid 1304, tty '': '/etc/rc.d/rcS'
Mounting /proc and /sys
Starting the hotplug events dispatcher udevd
Synthesizing initial hotplug evenudevd (1313): /proc/1313/oom_adj is deprecated, please use /proc/1313/oom_score_adj instead.
ts
Setting the hostname to dtra_3
Mounting filesystems
mount: sysfs already mounted or /sys busy
mount: according to mtab, /sys is already mounted on /sys
mount: mount point /proc/bus/usb does not exist
Starting syslogd and klogd
Running sysctl
Setting up networking on loopback device:
Setting up networking on eth0:
udhcpc (v1.20.2) started
eth0: Freescale FEC PHY driver [Generic PHY] (mii_bus:phy_addr=1:01, irq=-1)
Sending discover...
Sending discover...
Sending discover...
No lease, forking to background
starting pid 2343, tty '': '/etc/rc.d/rc_gpu.S'
/etc/rc.d/rc_gpu.S: line 6: /sys/module/galcore/parameters/gpu3DMinClock: No such file or directory
starting pid 2349, tty '': '/etc/rc.d/rc_mxc.S'
arm-none-linux-gnueabi-gcc (Freescale MAD -- Linaro 2011.07 -- Built at 2011/08/10 09:20) 4.6.2 20110630 (prerelease)
root filesystem built on Wed, 02 Jul 2014 14:39:19 -0700
Freescale Semiconductor, Inc.