Date: Sat, 13 Nov 2021 08:05:21 +0100 From: Milan Obuch <freebsd-usb@dino.sk> To: freebsd-usb@freebsd.org Subject: Re: USBDMSC emulated device does not work on FreeBSD Message-ID: <20211113080521.5e4798d7@zeta.dino.sk> In-Reply-To: <37a6b45a-be34-4216-d038-62f1c440037c@selasky.org> References: <20211112095915.226af6be@zeta.dino.sk> <6a6850f5-8233-aae7-8e65-42594402fcb5@selasky.org> <20211112120714.73f195a9@zeta.dino.sk> <972a650d-d490-1965-13a4-2fb984531f1d@selasky.org> <20211112121806.2db2a908@zeta.dino.sk> <85cdc03e-e8f1-871c-6e1d-66181e45dcb1@selasky.org> <20211112123438.6305fc56@zeta.dino.sk> <df6b1571-54a3-91e2-6da5-82df6644bd64@selasky.org> <20211112140045.018ebf0c@zeta.dino.sk> <571bda62-b86c-a5b0-fcc6-f70102b85db7@selasky.org> <20211112142200.7947d6b2@zeta.dino.sk> <3f2a86d6-6906-d5a3-45ad-3b1c7ce1a345@selasky.org> <37a6b45a-be34-4216-d038-62f1c440037c@selasky.org>
index | next in thread | previous in thread | raw e-mail
On Fri, 12 Nov 2021 15:22:13 +0100 I wrote:
> On Fri, 12 Nov 2021 14:26:32 +0100
> Hans Petter Selasky <hps@selasky.org> wrote:
>
> > On 11/12/21 14:25, Hans Petter Selasky wrote:
> > > hw.usb.quirk.0="0x1514 0x0001 0 0xffff UQ_MSC_NO_SYNC_CACHE"
> > > hw.usb.quirk.0="0x1514 0x0001 0 0xffff UQ_NO_STRINGS"
> >
> > Should be "1" for second quirk.
> >
> > hw.usb.quirk.0="0x1514 0x0001 0 0xffff UQ_MSC_NO_SYNC_CACHE"
> > hw.usb.quirk.1="0x1514 0x0001 0 0xffff UQ_NO_STRINGS"
> >
> > --HPS
> >
>
> Thanks for hint, it works now. For some reason, only one quirk works
> on system under test (it is 12.2-STABLE, r368192). I checked it with
> 'usbconfig dump_device_quirks', just the second one was shown. For
> completeness, necessary lines in loader.conf files are
>
> usb_quirk_load=YES
> hw.usb.quirk.0="0x1514 0x0001 0 0xffff UQ_NO_STRINGS"
> hw.usb.quirk.1="0x1514 0x0001 0 0xffff UQ_MSC_NO_SYNC_CACHE"
>
> (I think UQ_NO_STRINGS could be omitted, did not test without, but
> 'usbconfig dump_device_quirks | grep 1514' outputs just
>
> VID=0x1514 PID=0x0001 REVLO=0x0000 REVHI=0xffff
> QUIRK=UQ_MSC_NO_SYNC_CACHE
>
> nothing more.)
>
> I am reading from /dev/da0 now... next check would be write, I'll test
> later. If you'd like me to test anything else, just drop a note.
>
> Again, thanks for help.
>
> Regards,
> Milan
>
[ Follow-up to my mail ]
After looking a bit into man page, I found it is actually easy to do it
without reboot (which is important for my main workstation, otherwise
I'd have to reopen quite a number of various windows...). Also, it
looks like some bug in loader makes it not possible to add more than
one quirk on boot time, which I can 'fix' from shell:
kldload usb_quirk
usbconfig add_dev_quirk_vplh 0x1514 0x0001 0 0xffff UQ_NO_STRINGS
usbconfig add_dev_quirk_vplh 0x1514 0x0001 0 0xffff UQ_MSC_NO_SYNC_CACHE
Now I can get expected info from 'usbconfig -d ugen1.3 dump_all_desc'
command:
ugen1.3: <vendor 0x1514 product 0x0001> at usbus1, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (100mA)
bLength = 0x0012
bDescriptorType = 0x0001
bcdUSB = 0x0200
bDeviceClass = 0x0000 <Probed by interface class>
bDeviceSubClass = 0x0000
bDeviceProtocol = 0x0000
bMaxPacketSize0 = 0x0040
idVendor = 0x1514
idProduct = 0x0001
bcdDevice = 0x3000
iManufacturer = 0x0001 <Microchip Inc>
iProduct = 0x0002 <PolarFireSoc-FlashDrive>
iSerialNumber = 0x0003 <123456789ABCDEF151411111>
bNumConfigurations = 0x0001
Configuration index 0
bLength = 0x0009
bDescriptorType = 0x0002
wTotalLength = 0x0020
bNumInterfaces = 0x0001
bConfigurationValue = 0x0001
iConfiguration = 0x0004 <CFG-HS>
bmAttributes = 0x00c0
bMaxPower = 0x0032
Interface 0
bLength = 0x0009
bDescriptorType = 0x0004
bInterfaceNumber = 0x0000
bAlternateSetting = 0x0000
bNumEndpoints = 0x0002
bInterfaceClass = 0x0008 <Mass storage>
bInterfaceSubClass = 0x0006
bInterfaceProtocol = 0x0050
iInterface = 0x0005 <Interface-MSD>
Endpoint 0
bLength = 0x0007
bDescriptorType = 0x0005
bEndpointAddress = 0x0081 <IN>
bmAttributes = 0x0002 <BULK>
wMaxPacketSize = 0x0200
bInterval = 0x00ff
bRefresh = 0x0000
bSynchAddress = 0x0000
Endpoint 1
bLength = 0x0007
bDescriptorType = 0x0005
bEndpointAddress = 0x0001 <OUT>
bmAttributes = 0x0002 <BULK>
wMaxPacketSize = 0x0200
bInterval = 0x00ff
bRefresh = 0x0000
bSynchAddress = 0x0000
and 'usbconfig show_ifdrv' relevant lines are
ugen1.3: <vendor 0x1514 product 0x0001> at usbus1, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (100mA)
ugen1.3.0: umass0: <vendor 0x1514 product 0x0001, class 0/0, rev 2.00/30.00, addr 3>
Relevant lines in console log/dmesg:
ugen1.3: <vendor 0x1514 product 0x0001> at usbus1
umass0 on uhub3
umass0: <vendor 0x1514 product 0x0001, class 0/0, rev 2.00/30.00, addr 3 on usbus1
da0 at umass-sim0 bus 0 scbus8 target 0 lun 0
da0: <MSCC PolarFireSoC_msd 1234> Removable Direct Access SPC-2 SCSI device
da0: 40.000MB/s transfers
da0: 7457MB (15273600 512 byte sectors)
da0: quirks=0x2<NO_6_BYTE>
Now, 'gpart show da0' displays expected partitioning data, I can
'mount_msdosfs /dev/da0p2 /media' and access files there as needed.
Thanks for really valuable help, highly appreciated.
Regards,
Milan
help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20211113080521.5e4798d7>
