On 2/4/24 19:36, Michael van Elst wrote:
There seems to be nothing yet for NO_START_STOP. There is PQUIRK_STARTthat forces a start at attach time. But at open time when the unit still does not report ready, we issue the comamnd again (and fail if it doesn't succeed). We probably need another quirk PQUIRK_NOSTART and check it in scsipi_start() similar to the PQUIRK_NODOORLOCK in scsipi_prevent().
Right, with this information is was very easy to put together a patch, and I can now mount the LPC fake umass device on my netbsd laptop. I didn't try writing the firmware yet but I'm sure that'll work too. Patch follows for anyone who might have need. I assume a PR is the best way of getting this committed?Staffan (will probably be happily insomniac from this and zombie tomorrow :-)
--8<-- # HG changeset patch # User Staffan Thomen <duck%shangtai.net@localhost> # Date 1707080552 0 # Sun Feb 04 21:02:32 2024 +0000 # Branch netbsd-10 # Node ID f368df5ceae4dbeb3a6a10e7e8b3c6668dc08303 # Parent 7ddaaaeb813a1bceaf4190cb6c3444cc3c225ebb Round up cylinders to 1 if the device is so small it would be 0 diff -r 7ddaaaeb813a -r f368df5ceae4 sys/dev/scsipi/sd.c --- a/sys/dev/scsipi/sd.c Tue Jan 16 08:28:51 2024 +0000 +++ b/sys/dev/scsipi/sd.c Sun Feb 04 21:02:32 2024 +0000 @@ -1769,6 +1769,8 @@ dp->heads = 64; dp->sectors = 32; dp->cyls = dp->disksize / (64 * 32); + if (dp->cyls == 0) + dp->cyls = 1; } dp->rot_rate = 3600; # HG changeset patch # User Staffan Thomen <duck%shangtai.net@localhost> # Date 1707080615 0 # Sun Feb 04 21:03:35 2024 +0000 # Branch netbsd-10 # Node ID fb8c5f27a9473039c3bc82d453164ab2c201d5f4 # Parent f368df5ceae4dbeb3a6a10e7e8b3c6668dc08303 Add the PQUIRK_NOSTART quirk to prevent a START command from being sent to devices that don't support them diff -r f368df5ceae4 -r fb8c5f27a947 sys/dev/scsipi/scsipi_base.c --- a/sys/dev/scsipi/scsipi_base.c Sun Feb 04 21:02:32 2024 +0000 +++ b/sys/dev/scsipi/scsipi_base.c Sun Feb 04 21:03:35 2024 +0000 @@ -1312,6 +1312,9 @@ { struct scsipi_start_stop cmd; + if (periph->periph_quirks & PQUIRK_NOSTART) + return 0; + memset(&cmd, 0, sizeof(cmd)); cmd.opcode = START_STOP; cmd.byte2 = 0x00; diff -r f368df5ceae4 -r fb8c5f27a947 sys/dev/scsipi/scsipiconf.h --- a/sys/dev/scsipi/scsipiconf.h Sun Feb 04 21:02:32 2024 +0000 +++ b/sys/dev/scsipi/scsipiconf.h Sun Feb 04 21:03:35 2024 +0000 @@ -504,6 +504,7 @@ #define PQUIRK_NOREPSUPPOPC 0x01000000 /* does not grok REPORT SUPPORTED OPCODES to fetch device timeouts */ +#define PQUIRK_NOSTART 0x02000000 /* does not support START STOP */ /* * Error values an adapter driver may return */ # HG changeset patch # User Staffan Thomen <duck%shangtai.net@localhost> # Date 1707080713 0 # Sun Feb 04 21:05:13 2024 +0000 # Branch netbsd-10 # Node ID cb668c56dec8cabbe5d0f6ed362d35db3faef28a # Parent fb8c5f27a9473039c3bc82d453164ab2c201d5f4 Add the NXP vendor and the LPC1XXX product to apply its quirks diff -r fb8c5f27a947 -r cb668c56dec8 sys/dev/usb/umass_quirks.c --- a/sys/dev/usb/umass_quirks.c Sun Feb 04 21:03:35 2024 +0000 +++ b/sys/dev/usb/umass_quirks.c Sun Feb 04 21:05:13 2024 +0000 @@ -343,6 +343,16 @@ UMATCH_VENDOR_PRODUCT, NULL, NULL }, + + /* NXP LPC1xxx series ISP (In-System Programming) devices */ + + { { USB_VENDOR_NXP, USB_PRODUCT_NXP_LPC1XXX }, + UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC, + 0, + PQUIRK_NOSTART | PQUIRK_NODOORLOCK | PQUIRK_NOSYNCCACHE | PQUIRK_ONLYBIG, + UMATCH_VENDOR_PRODUCT, + NULL, NULL + } }; const struct umass_quirk * diff -r fb8c5f27a947 -r cb668c56dec8 sys/dev/usb/usbdevs --- a/sys/dev/usb/usbdevs Sun Feb 04 21:03:35 2024 +0000 +++ b/sys/dev/usb/usbdevs Sun Feb 04 21:05:13 2024 +0000 @@ -563,6 +563,7 @@ vendor LINUXFOUNDATION 0x1d6b Linux Foundation vendor CINTERION 0x1e2d Cinterion vendor AIRTIES 0x1eda AirTies +vendor NXP 0x1fc9 NXP vendor DLINK 0x2001 D-Link vendor PLANEX2 0x2019 Planex Communications vendor ENCORE 0x203d Encore @@ -2572,6 +2573,9 @@ product NOVATEL2 U760_DRIVER 0x5030 Novatel Wireless U760 Windows/Mac Driver product NOVATEL2 U760 0x6000 Novatel 760USB +/* NXP products */ +product NXP LPC1XXX 0x000b NXP LPC1xxx IFLASH + /* Olympus products */ product OLYMPUS C1 0x0102 C-1 Digital Camera product OLYMPUS C700 0x0105 C-700 Ultra Zoom
Attachment:
OpenPGP_signature.asc
Description: OpenPGP digital signature