
The EP1/in fails are on drivers/usb/gadget/ci_udc.c @ line 628. They happen during enumeration (I'm able to check even exactly which package fails using Wireshark + USB PCAP), but I couldn't find out more. I was hoping someone had been through that and had an idea of could be happening before I dive into the wonders of USB drivers. The CACHE fails are from arch/arm/lib/cache.c @ line 64.
On Tue, 20 Apr 2021 at 06:15, Sean Anderson seanga2@gmail.com wrote:
On 4/19/21 9:05 AM, Bruno L. Albrecht wrote:
Hello people, it's my first post here, so forgive me if I do something wrong. I'll try
to
be short and clear.
I'm developing on an Avnet PicoZed (based on a Xilinx Zynq SoC) and my objective is to expose the eMMC as a Mass Storage Device over an USB Connection.
I used the following config flag on defconfig file (
https://github.com/Xilinx/u-boot-xlnx/blob/master/configs/xilinx_zynq_virt_d...
):
CONFIG_CMD_USB_MASS_STORAGE=y
To the Device Tree (
https://github.com/Xilinx/u-boot-xlnx/blob/master/arch/arm/dts/zynq-picozed.... )
I added the usb configuration:
aliases {
<...> usb0 = &usb0;
}; &usb0 { u-boot,dm-pre-reloc; status = "okay"; dr_mode = "peripheral"; };
Compilation goes fine and U-Boot boots fine. The eMMC is correctly recognized. Then I use the following command to initiate the USB Mass Storage:
ums 0 mmc 0
When on *Windows*, the command is successful for a brief moment and then the board resets with the following error:
Zynq> ums 0 mmc 0
UMS: LUN 0, dev 0, hwpart 0, sector 0x0, count 0xe30000 \EP1/in FAIL info=40000080 pg0=3eb393c0 EP1/in FAIL info=40008080 pg0=3eb3d3c0 EP1/in FAIL info=d8080 pg0=3eaebdc0 CACHE: Misaligned operation at range [00000001, 00000041] CACHE: Misaligned operation at range [00000001, 00000041] data abort pc : [<3ff67dec>] lr : [<3ff67dec>] reloc pc : [<0405cdec>] lr : [<0405cdec>]
I don't know anything about this platform, but I'd start with figuring out what function/line these are from. You can find out by grepping through objdump -S.
--Sean
sp : 3eae81f0 ip : 00000031 fp : 3ffd957c r10: 00000001 r9 : 3eaeaed0 r8 : 00000001 r7 : 3ffd9524 r6 : 00000001 r5 : 3ffd94ec r4 : 3ffd95a4 r3 : e0001000 r2 : 00000001 r1 : 00000041 r0 : 00000001 Flags: nZCv IRQs off FIQs off Mode SVC_32 Code: eaffff7e e2861040 e1a00006 ebfe91a6 (e5963004) Resetting CPU ...
Since I'm working on a Windows machine, I have a Ubuntu running on a Virtual Machine (VirtualBox). So I made a rule to bypass the USB device that would be created on Windows directly to the Virtual Machine
(virtually
connected the USB device to my Ubuntu).
When I do this, the command works. I can access the eMMC and format it
and
do whatever I want. If I remove the filter and let Windows enumerate the device, the board resets again.
I took a look at the dmesg messages on Ubuntu and found the following
(the
only unusual messages are in bold):
[101436.784042] usb 1-2: new full-speed USB device number 25 using
ohci-pci
*[101437.232208] usb 1-2: config 1 interface 0 altsetting 0 endpoint
0x81
has invalid maxpacket 512, setting to 64[101437.232210] usb 1-2: config
1
interface 0 altsetting 0 endpoint 0x2 has invalid maxpacket 512,
setting to
64* [101437.477816] usb 1-2: New USB device found, idVendor=<custom>, idProduct=<custom>, bcdDevice= 2.21 [101437.477818] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0 [101437.477820] usb 1-2: Product: my product name [101437.477821] usb 1-2: Manufacturer: my manufacturer [101437.702297] usb-storage 1-2:1.0: USB Mass Storage device detected [101437.713954] scsi host3: usb-storage 1-2:1.0 [101438.976664] scsi 3:0:0:0: Direct-Access Linux UMS disk 0 ffff PQ: 0 ANSI: 2 [101438.979158] sd 3:0:0:0: Attached scsi generic sg2 type 0 [101439.284100] sd 3:0:0:0: [sdb] 14876672 512-byte logical blocks:
(7.62
GB/7.09 GiB) [101439.468523] sd 3:0:0:0: [sdb] Write Protect is off [101439.468526] sd 3:0:0:0: [sdb] Mode Sense: 0f 00 00 00 [101439.653020] sd 3:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [101440.759756] sdb: sdb1 [101441.559083] sd 3:0:0:0: [sdb] Attached SCSI removable disk
Not that it sounds like it would interfere, but the USB from the SoC is connected to an USB Hub (USB2514B), to which other devices are connected and work correctly on both Windows and Linux.
Any ideas of what might be happening?
Cheers Bruno