Re: FYI: RPi4B's and such: VLI_SS_BULK_OUT_BUG quirk handling vs. VL805 (linux example)

From: Hans Petter Selasky <hps_at_selasky.org>
Date: Sun, 18 Sep 2022 06:05:40 UTC
On 9/17/22 18:09, Mark Millard wrote:
> https://github.com/raspberrypi/linux/pull/5173 reports:
> 
> QUOTE
> After several months back-and-forth with VIA, we have a candidate root-cause for #4844 and a suggested fix. My known-bad pendrive now gets written to endlessly without suffering data corruption.
> END QUOTE
> 
> and:
> 
> QUOTE
> usb: xhci: expand mitigations for VLI_SS_BULK_OUT_BUG quirk … c9e051a
> 
> The VL805 can cause data corruption if a SS Bulk OUT endpoint enters a
> flow-control condition and there are TRBs in the transfer ring that are
> not an integral size of wMaxPacket and the endpoint is behind one or more
> hubs.
> 
> This is frequently the case encountered when FAT32 filesystems are
> present on mass-storage devices with cluster sizes of 1 sector, and the
> filesystem is being written to with an aggregate of small files.
> 
> The initial implementation of this quirk separated TRBs that didn't
> adhere to this limitation into two - the first a multiple of wMaxPacket
> and the second the 512-byte remainder - in an attempt to force TD
> fragments to align with packet boundaries. This reduced the incidence
> rate of data corruption but did not resolve it.
> 
> The fix as recommended by VIA is to disable bursts if this sequence of
> TRBs can occur.
> 
> Limit turning off bursts to just USB mass-storage devices by searching
> the device's configuration for an interface with a class type of
> USB_CLASS_MASS_STORAGE.
> 
> Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
> END QUOTE
> 
> and the drivers/usb/host/xhci-mem.c change has the comments:
> 
> 
> 	/*
> 	 * VL805 errata - Bulk OUT bursts to superspeed mass-storage
> 	 * devices behind hub ports can cause data corruption with
> 	 * non-wMaxPacket-multiple transfers.
> 	 */
> . . .
> 
> 		/*
> 		 * Slight hack - look at interface altsetting 0, which
> 		 * should be the UMS bulk-only interface. If the class
> 		 * matches, then we disable out bursts for all OUT
> 		 * endpoints because endpoint assignments may change
> 		 * between alternate settings.
> 		 */
> 
> ===
> Mark Millard
> marklmi at yahoo.com
> 
> 

Hi,

It doesn't make sense that this only applies to USB mass storage 
devices. Doesn't it apply to all SuperSpeed USB BULK transfers?

What about other OS'es, do they also get a fix?

--HPS