cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
vharris007
Visitor
Visitor
13,571 Views
Registered: ‎02-24-2015

USB boot with Linux 2015.2 build

Jump to solution

Hi, I’m running in to a problem booting from USB with the new Linux x2015.2 build. The new build switched the ChipIdea USB driver. This driver appears to do probe deferral when loading. The problem is the USB driver isn’t online when the rootFS load is performed. I’ve tried changing the root delay, but this didn’t help. Any other ideas?

 

## Booting kernel from Legacy Image at 03000000 ...
   Image Name:   Linux-3.19.0-xilinx
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    3617536 Bytes = 3.4 MiB
   Load Address: 00008000
   Entry Point:  00008000
   Verifying Checksum ... OK
## Flattened Device Tree blob at 02a00000
   Booting using the fdt blob at 0x2a00000
   Loading Kernel Image ... OK
   Loading Device Tree to 1f316000, end 1f31d5f5 ... OK

Starting kernel ...

Booting Linux on physical CPU 0x0
Linux version 3.19.0-xilinx (van@UbuntuGnome) (gcc version 4.8.3 20140320 (prerelease) (Sourcery CodeBench Lite 2014.05-23) ) #3 SMP PREEMPT Mon Jul 20 09:36:48 PDT 2015
CPU: ARMv7 Processor [413fc090] revision 0 (ARMv7), cr=18c5387d
CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
Machine model: xlnx,zynq-7000
cma: Reserved 128 MiB at 0x17000000
Memory policy: Data cache writealloc
PERCPU: Embedded 9 pages/cpu @5fb97000 s8128 r8192 d20544 u36864
Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 130048
Kernel command line: cma=128M coherent_pool=2M console=ttyPS1,115200 rootdelay=10 root=/dev/sda2 rw earlyprintk consoleblank=0
PID hash table entries: 2048 (order: 1, 8192 bytes)
Dentry cache hash table entries: 65536 (order: 6, 262144 bytes)
Inode-cache hash table entries: 32768 (order: 5, 131072 bytes)
Memory: 380948K/524288K available (4917K kernel code, 256K rwdata, 1712K rodata, 216K init, 208K bss, 12268K reserved, 131072K cma-reserved, 0K highmem)
Virtual kernel memory layout:
    vector  : 0xffff0000 - 0xffff1000   (   4 kB)
    fixmap  : 0xffc00000 - 0xfff00000   (3072 kB)
    vmalloc : 0x60800000 - 0xff000000   (2536 MB)
    lowmem  : 0x40000000 - 0x60000000   ( 512 MB)
    pkmap   : 0x3fe00000 - 0x40000000   (   2 MB)
    modules : 0x3f000000 - 0x3fe00000   (  14 MB)
      .text : 0x40008000 - 0x406817fc   (6630 kB)
      .init : 0x40682000 - 0x406b8000   ( 216 kB)
      .data : 0x406b8000 - 0x406f83a0   ( 257 kB)
       .bss : 0x406f83a0 - 0x4072c6f8   ( 209 kB)
Preemptible hierarchical RCU implementation.
        RCU restricting CPUs from NR_CPUS=4 to nr_cpu_ids=2.
RCU: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=2
NR_IRQS:16 nr_irqs:16 16
L2C: platform modifies aux control register: 0x72360000 -> 0x72760000
L2C: DT/platform modifies aux control register: 0x72360000 -> 0x72760000
L2C-310 erratum 769419 enabled
L2C-310 enabling early BRESP for Cortex-A9
L2C-310 full line of zeros enabled for Cortex-A9
L2C-310 ID prefetch enabled, offset 1 lines
L2C-310 dynamic clock gating enabled, standby mode enabled
L2C-310 cache controller enabled, 8 ways, 512 kB
L2C-310: CACHE_ID 0x410000c8, AUX_CTRL 0x76760001
slcr mapped to 60804000
zynq_clock_init: clkc starts at 60804100
Zynq clock init
sched_clock: 64 bits at 333MHz, resolution 3ns, wraps every 3298534883328ns
timer #0 at 60806000, irq=17
Console: colour dummy device 80x30
Calibrating delay loop... 1332.01 BogoMIPS (lpj=6660096)
pid_max: default: 32768 minimum: 301
Mount-cache hash table entries: 1024 (order: 0, 4096 bytes)
Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes)
CPU: Testing write buffer coherency: ok
CPU0: thread -1, cpu 0, socket 0, mpidr 80000000
Setting up static identity map for 0x4a5978 - 0x4a59d0
CPU1: thread -1, cpu 1, socket 0, mpidr 80000001
Brought up 2 CPUs
SMP: Total of 2 processors activated (2664.03 BogoMIPS).
CPU: All CPU(s) started in SVC mode.
devtmpfs: initialized
VFP support v0.3: implementor 41 architecture 3 part 30 variant 9 rev 4
NET: Registered protocol family 16
DMA: preallocated 2048 KiB pool for atomic coherent allocations
cpuidle: using governor ladder
cpuidle: using governor menu
hw-breakpoint: found 5 (+1 reserved) breakpoint and 1 watchpoint registers.
hw-breakpoint: maximum watchpoint size is 4 bytes.
zynq-ocm f800c000.ocmc: ZYNQ OCM pool: 256 KiB @ 0x60880000
GPIO IRQ not connected
XGpio: /amba_pl/gpio@41200000: registered, base is 898
GPIO IRQ not connected
XGpio: /amba_pl/gpio@41210000: registered, base is 890
GPIO IRQ not connected
XGpio: /amba_pl/gpio@41220000: registered, base is 882
XGpio: /amba_pl/gpio@41230000: registered, base is 877
XGpio: /amba_pl/gpio@41240000: registered, base is 875
XGpio: /amba_pl/gpio@41250000: registered, base is 873
vgaarb: loaded
SCSI subsystem initialized
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
media: Linux media interface: v0.10
Linux video capture interface: v2.00
pps_core: LinuxPPS API ver. 1 registered
pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
PTP clock support registered
EDAC MC: Ver: 3.0.0
Advanced Linux Sound Architecture Driver Initialized.
Switched to clocksource arm_global_timer
NET: Registered protocol family 2
TCP established hash table entries: 4096 (order: 2, 16384 bytes)
TCP bind hash table entries: 4096 (order: 3, 32768 bytes)
TCP: Hash tables configured (established 4096 bind 4096)
TCP: reno registered
UDP hash table entries: 256 (order: 1, 8192 bytes)
UDP-Lite hash table entries: 256 (order: 1, 8192 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.
hw perfevents: enabled with armv7_cortex_a9 PMU driver, 7 counters available
futex hash table entries: 512 (order: 3, 32768 bytes)
jffs2: version 2.2. (NAND) (SUMMARY)  © 2001-2006 Red Hat, Inc.
io scheduler noop registered
io scheduler deadline registered
io scheduler cfq registered (default)
dma-pl330 f8003000.dmac: Loaded driver for PL330 DMAC-241330
dma-pl330 f8003000.dmac:        DBUFF-128x8bytes Num_Chans-8 Num_Peri-4 Num_Events-16
xilinx-dma 80400000.dma: no channels defined
xilinx-dma 80410000.dma: no channels defined
xilinx-vdma 83000000.dma: Xilinx AXI VDMA Engine Driver Probed!!
42c00000.serial: ttyUL1 at MMIO 0x42c00000 (irq = 177, base_baud = 0) is a uartlite
e0000000.serial: ttyPS0 at MMIO 0xe0000000 (irq = 144, base_baud = 3125000) is a xuartps
e0001000.serial: ttyPS1 at MMIO 0xe0001000 (irq = 145, base_baud = 3125000) is a xuartps
console [ttyPS1] enabled
xdevcfg f8007000.devcfg: ioremap 0xf8007000 to 6083e000
[drm] Initialized drm 1.1.0 20060810
brd: module loaded
loop: module loaded
m25p80 spi32766.0: found s25fl128s, expected n25q128a11
m25p80 spi32766.0: s25fl128s (16384 Kbytes)
1 ofpart partitions found on MTD device spi32766.0
Creating 1 MTD partitions on "spi32766.0":
0x000000000000-0x000001000000 : "qspi-BOOT_bin"
CAN device driver interface
e1000e: Intel(R) PRO/1000 Network Driver - 2.3.2-k
e1000e: Copyright(c) 1999 - 2014 Intel Corporation.
libphy: XEMACPS mii bus: probed
xemacps e000b000.ethernet: pdev->id -1, baseaddr 0xe000b000, irq 147
xilinx_axienet 81000000.ethernet: TX_CSUM 2
xilinx_axienet 81000000.ethernet: RX_CSUM 2
libphy: Xilinx Axi Ethernet MDIO: probed
xilinx_axienet 81040000.ethernet: TX_CSUM 2
xilinx_axienet 81040000.ethernet: RX_CSUM 2
libphy: Xilinx Axi Ethernet MDIO: probed
ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
ehci-pci: EHCI PCI platform driver
usbcore: registered new interface driver usb-storage
e0002000.usb supply vbus not found, using dummy regulator
platform ci_hdrc.0: Driver ci_hdrc requests probe deferral
mousedev: PS/2 mouse device common for all mice
i2c /dev entries driver
cdns-i2c e0004000.i2c: 400 kHz mmio e0004000 irq 141
cdns-i2c e0005000.i2c: 400 kHz mmio e0005000 irq 142
Xilinx Zynq CpuIdle Driver started
Driver 'mmcblk' needs updating - please use bus_type methods
sdhci: Secure Digital Host Controller Interface driver
sdhci: Copyright(c) Pierre Ossman
sdhci-pltfm: SDHCI platform and OF driver helper
sdhci-arasan e0101000.sdhci: No vmmc regulator found
sdhci-arasan e0101000.sdhci: No vqmmc regulator found
mmc0: SDHCI controller on e0101000.sdhci [e0101000.sdhci] using ADMA
ledtrig-cpu: registered to indicate activity on CPUs
usbcore: registered new interface driver usbhid
usbhid: USB HID core driver
TCP: cubic registered
NET: Registered protocol family 17
can: controller area network core (rev 20120528 abi 9)
NET: Registered protocol family 29
can: raw protocol (rev 20120528)
can: broadcast manager protocol (rev 20120528 t)
can: netlink gateway (rev 20130117) max_hops=1
zynq_pm_ioremap: no compatible node found for 'xlnx,zynq-ddrc-a05'
zynq_pm_late_init: Unable to map DDRC IO memory.
Registering SWP/SWPB emulation handler
platform ci_hdrc.0: Driver ci_hdrc requests probe deferral
drivers/rtc/hctosys.c: unable to open rtc device (rtc0)
ALSA device list:
  No soundcards found.
Waiting 10 sec before mounting root device...
mmc0: BKOPS_EN bit is not set
mmc0: new high speed MMC card at address 0001
mmcblk0: mmc0:0001 MMC04G 3.52 GiB
mmcblk0boot0: mmc0:0001 MMC04G partition 1 16.0 MiB
mmcblk0boot1: mmc0:0001 MMC04G partition 2 16.0 MiB
mmcblk0rpmb: mmc0:0001 MMC04G partition 3 128 KiB
 mmcblk0: p1 p2
platform ci_hdrc.0: Driver ci_hdrc requests probe deferral
VFS: Cannot open root device "sda2" or unknown-block(0,0): error -6
Please append a correct "root=" boot option; here are the available partitions:
1f00           16384 mtdblock0  (driver?)
b300         3694592 mmcblk0  driver: mmcblk
  b301           51200 mmcblk0p1 253a9671-01
  b302         3639296 mmcblk0p2 253a9671-02
b318             128 mmcblk0rpmb  (driver?)
b310           16384 mmcblk0boot1  (driver?)
b308           16384 mmcblk0boot0  (driver?)
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
CPU1: stopping
CPU: 1 PID: 0 Comm: swapper/1 Not tainted 3.19.0-xilinx #3
Hardware name: Xilinx Zynq Platform
[<40014954>] (unwind_backtrace) from [<40010e38>] (show_stack+0x10/0x14)
[<40010e38>] (show_stack) from [<404a1230>] (dump_stack+0x90/0xdc)
[<404a1230>] (dump_stack) from [<400132f4>] (ipi_cpu_stop+0x3c/0x6c)
[<400132f4>] (ipi_cpu_stop) from [<40013900>] (handle_IPI+0x64/0x84)
[<40013900>] (handle_IPI) from [<400085cc>] (gic_handle_irq+0x54/0x5c)
[<400085cc>] (gic_handle_irq) from [<40011800>] (__irq_svc+0x40/0x74)
Exception stack(0x5f469f70 to 0x5f469fb8)
9f60:                                     9ca1ec4c 00000002 00000018 fffffff8
9f80: 9c2ba293 00000002 00000000 5fba0cc8 406f0a9c 406f0a9c 404a7f28 00000000
9fa0: 00000008 5f469fb8 4005f9d8 4039a748 80000113 ffffffff
[<40011800>] (__irq_svc) from [<4039a748>] (cpuidle_enter_state+0x4c/0xc0)
[<4039a748>] (cpuidle_enter_state) from [<40048db4>] (cpu_startup_entry+0x164/0x1ec)
[<40048db4>] (cpu_startup_entry) from [<00008664>] (0x8664)
---[ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)

 

0 Kudos
1 Solution

Accepted Solutions
vharris007
Visitor
Visitor
22,554 Views
Registered: ‎02-24-2015

Hi, didn't need to change the phy option. In end it was how the device tree was ordered. I modified the zynq-Zed.dts in the arch/arm/boot/dts with my pl.dtsi and other changes. When recompiled with dtc tool the usb-phy comes out on the end.

 

View solution in original post

0 Kudos
22 Replies
vharris007
Visitor
Visitor
13,416 Views
Registered: ‎02-24-2015

I built the chipidea driver as outline in the Xilinx wiki, and boot with eMMC. I’m not seeing any indication the driver is functional. Has this driver ever been used before 2015.2? If so, how was it used?

 

0 Kudos
milosoftware
Scholar
Scholar
13,383 Views
Registered: ‎10-26-2012
I don't see any probe deferral in your log. Did you include the chipidea driver at all?
0 Kudos
vharris007
Visitor
Visitor
13,366 Views
Registered: ‎02-24-2015

Hi, it's on line:

 

platform ci_hdrc.0: Driver ci_hdrc requests probe deferral

 

The chipidea driver is ID as cl_hcrc. Yes, it's in the build. Attached is a copy for the .config I used.

 

0 Kudos
vharris007
Visitor
Visitor
13,365 Views
Registered: ‎02-24-2015

add attachment

0 Kudos
milosoftware
Scholar
Scholar
13,333 Views
Registered: ‎10-26-2012

Did you enable dummy regulators?

 

Maybe there's a vbus regulator in your devicetree that isn't available?

0 Kudos
vharris007
Visitor
Visitor
13,316 Views
Registered: ‎02-24-2015

No, didn't see the VBUS option in the devicetree

 

0 Kudos
sbhatta
Visitor
Visitor
13,273 Views
Registered: ‎07-30-2015

Hi,

 

I see in driver probe deferral can only happen when PHY is not configured properly. Can you check driver for

phy(drivers/usb/phy-generic.c) is enabled ?

If enabled then please try with the dts attached. It is same as yours but moved PHY node from usb.

 

 

Thanks,

Sundeep 

0 Kudos
punnaia
Visitor
Visitor
13,255 Views
Registered: ‎07-09-2014

Please ensure that the required  phy drivers are enabled in your config file. PFA the screen shot of the menuconfig 

usbphyconfig.png
0 Kudos
vharris007
Visitor
Visitor
22,555 Views
Registered: ‎02-24-2015

Hi, didn't need to change the phy option. In end it was how the device tree was ordered. I modified the zynq-Zed.dts in the arch/arm/boot/dts with my pl.dtsi and other changes. When recompiled with dtc tool the usb-phy comes out on the end.

 

View solution in original post

0 Kudos
tusharup
Adventurer
Adventurer
11,187 Views
Registered: ‎02-04-2014

Hello vharris007,

 

Didn't understand what change you made, would you please explain. In my pl.dtsi, i don't have any node for usb. I am using kernel 4.0 and I also have recommended configuration for the chipidea driver. 

 

Regards

 

0 Kudos
trenz-al
Scholar
Scholar
11,169 Views
Registered: ‎11-09-2013

kernel 4.0 is in 2015.4 and not in 2015.2 !

 

there is and should not be anything in pl.dtsi !!

 

what is needed is entry in system-top.dts

 

to set the usb phy and all works again..

0 Kudos
tusharup
Adventurer
Adventurer
11,163 Views
Registered: ‎02-04-2014

Yes kernel 4.0 is in 2015.4. 

Originally my usb blob was like this:

 

usb@e0002000 {
compatible = "xlnx,zynq-usb-2.20a", "chipidea,usb2";
status = "okay";
clocks = <0x1 0x1c>;
interrupt-parent = <0x3>;
interrupts = <0x0 0x15 0x4>;
reg = <0xe0002000 0x1000>;
phy_type = "ulpi";
dr_mode = "host";

}

 

Now looking at the above post, I modified my devicetree for usb as follows:

 

usb@e0002000 {
compatible = "xlnx,zynq-usb-2.20a", "chipidea,usb2";
status = "okay";
clocks = <0x1 0x1c>;
interrupt-parent = <0x3>;
interrupts = <0x0 0x15 0x4>;
reg = <0xe0002000 0x1000>;
phy_type = "ulpi";
dr_mode = "host";
usb-phy = <0x6>;

usb_phy0: phy0 {
compatible = "usb-nop-xceive";
#phy-cells = <0x0>;
linux,phandle = <0x6>;
phandle = <0x6>;
};
};

 

but I got following when linux boots up.

 

 

ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
ehci-pci: EHCI PCI platform driver
usbcore: registered new interface driver usb-storage
platform e0002000.usb: Driver chipidea-usb2 requests probe deferral

usbcore: registered new interface driver usbhid
usbhid: USB HID core driver

 

 

Not sure why chipidea-usb2 requests probe deferral happening.

Please suggest something. 

0 Kudos
trenz-al
Scholar
Scholar
11,159 Views
Registered: ‎11-09-2013

nono, you need only small piece in top.dts

 

what you need is

 

=====================

/{
    usb_phy0: usb_phy@0 {
        compatible = "ulpi-phy";
        #phy-cells = <0>;
        reg = <0xe0002000 0x1000>;
        view-port = <0x0170>;
        drv-vbus;
    };
};

&usb0 {
    usb-phy = <&usb_phy0>;
} ;

 

================================

 

NOTHING else in any devicetree files, only add this to system-top.dts

 

thats it.

 

0 Kudos
trenz-al
Scholar
Scholar
11,155 Views
Registered: ‎11-09-2013

ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
usbcore: registered new interface driver usb-storage
e0002000.usb supply vbus not found, using dummy regulator
ULPI transceiver vendor/product ID 0x0424/0x0007
Found SMSC USB3320 ULPI transceiver.
ULPI integrity check: passed.
ci_hdrc ci_hdrc.0: EHCI Host Controller
ci_hdrc ci_hdrc.0: new USB bus registered, assigned bus number 1
ci_hdrc ci_hdrc.0: USB 2.0 started, EHCI 1.00
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 1 port detected

 

only change in dts as in my previous post.. works!!

 

0 Kudos
trenz-al
Scholar
Scholar
11,152 Views
Registered: ‎11-09-2013

maybe you forgot to turn off OTG in linux driver config?

0 Kudos
tusharup
Adventurer
Adventurer
11,146 Views
Registered: ‎02-04-2014

I modified the usb node in the devicetree. I am not doing it right into system-top.dts file. But I have one consolidated dts file generated from 4 dts/dtsi files. 

Here is my new node for usb:

 

usb@e0002000 {
compatible = "xlnx,zynq-usb-2.20a", "chipidea,usb2";
status = "okay";
clocks = <0x1 0x1c>;
interrupt-parent = <0x3>;
interrupts = <0x0 0x15 0x4>;
reg = <0xe0002000 0x1000>;
phy_type = "ulpi";
dr_mode = "host";
usb-phy = <&usb_phy0>;

usb_phy0: phy0 {
compatible = "ulpi-phy";
#phy-cells = <0>;
view-port = <0x0170>;
drv-vbus;
};
};

 

Can you suggest any change in this only. Rather than changing system-top.dts file. It would be easier for me.

 

Regards

 

0 Kudos
trenz-al
Scholar
Scholar
11,143 Views
Registered: ‎11-09-2013

sorry no.

 

take petalinux 2015.4

make ONLY the changes I outlined

and it

 

JUST WORKS.

0 Kudos
tusharup
Adventurer
Adventurer
11,136 Views
Registered: ‎02-04-2014

I replace my kernel and devicetree with the release kerenl and devicetree, still I am getting  

 

platform e0002000.usb: Driver chipidea-usb2 requests probe deferral

 

http://www.wiki.xilinx.com/Zynq+2015.4+Release

 

 

0 Kudos
trenz-al
Scholar
Scholar
11,118 Views
Registered: ‎11-09-2013

the correct download link

 

http://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/embedded-design-tools.html

 

petalinux 2015.4

1 enable ulpi phy

2 disable otg

3 add the code in system-top.dts

 

and it should work, it works here on several different hardware platforms we have tested.

once you have petalinux working you can experiment with other options ;)

tusharup
Adventurer
Adventurer
8,729 Views
Registered: ‎02-04-2014

I am getting success, my bootlog shows following.

 

ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
ehci-pci: EHCI PCI platform driver
usbcore: registered new interface driver usb-storage
e0002000.usb supply vbus not found, using dummy regulator
ULPI transceiver vendor/product ID 0x0424/0x0009
Found SMSC USB334x ULPI transceiver.
ULPI integrity check: passed.
ci_hdrc ci_hdrc.0: EHCI Host Controller
ci_hdrc ci_hdrc.0: new USB bus registered, assigned bus number 1
ci_hdrc ci_hdrc.0: USB 2.0 started, EHCI 1.00
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 1 port detected

 

but at /dev/ , I don't see the usb device. Is it something related to udev rules.

 

Thanks

 

 

0 Kudos
trenz-al
Scholar
Scholar
8,708 Views
Registered: ‎11-09-2013

again if you do it with petalinux no special stuff at all

 

you pluging usb mem stick, it does get auto mounted. all just works. no need to mess with anything special..

0 Kudos
tusharup
Adventurer
Adventurer
8,649 Views
Registered: ‎02-04-2014

USB detection is happening and enumeration started, but got this problem.

 

usb 1-1: device descriptor read/64, error -71
usb 1-1: device descriptor read/64, error -71
usb 1-1: new low-speed USB device number 11 using ci_hdrc
usb 1-1: device descriptor read/64, error -71
usb 1-1: device descriptor read/64, error -71
usb 1-1: new low-speed USB device number 12 using ci_hdrc
usb 1-1: device not accepting address 12, error -71
usb 1-1: new low-speed USB device number 13 using ci_hdrc
usb 1-1: device not accepting address 13, error -71
usb usb1-port1: unable to enumerate USB device

0 Kudos