I am using 64 bytes so it should work with FS, and actually also interestingly the device I mention below uses 16 and although an HS device should use only 64, Linux still requests device qualifier from that one. It seems the driver is not checking that.
But that would be the correct behaviour?! I mean, the "normal" device descriptor is not relevant for HS operation anyhow, so it would be perfectly fine to specify 16 bytes there, while still supporting HS operation!? But if the "FS decriptor" specified a packet size not allowed with FS, then one possible workaround for that would be to probe for HS and use that if it isn't broken, and give up if that's not supported ...
I should first say I did not read all the spec word by word, not yet at least. I also did not look at HS specific things in detail yet. I saw the packet sizes are given in control transfer packet size constraints, not exactly sure why there is such a constraint (LS should be 8 bytes, FS any of 8,16,32,64 and HS 64 bytes), but I think they are not meant to be used as LS, FS, HS distinction. LS, FS is already distinguished by the pullups and I think HS support is first checked by this device qualifier descriptor. I dont know if HS signalling (chirps?) is tried before this or it is not tried at all if there is no valid device qualifier (and then there is a other speed configuration descriptor).
I dont know what happens when the device is really HS and does everything properly, but reports MaxPacketLen0 as 16 bytes. Partly the issue with the enumeration is I think the spec does not normatively say how it should be done (and fail). Then the host controllers might behave differently, maybe to support some historically bad behaving devices also, not sure.
I just saw in Linux kernel source code (drivers/usb/core/message.c) this comment:
/* The USB spec says configuration 0 means unconfigured.
* But if a device includes a configuration numbered 0,
* we will accept it as a correctly configured state.
* Use -1 if you really want to unconfigure the device.
*/
Sounds very strange to me.