[PATCH 00/31] block/swim: Fixes and improvements
Finn Thain <[email protected]> Thu, 16 Jul 2026 20:02:15 +1000
| Newsgroups | org.kernel.vger.linux-m68k,org.kernel.vger.linux-block,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
I recently had a need for the 'swim' driver but found that it was too buggy to be useful for my purposes. I had two aims in mind-- Firstly, I needed this driver to help me test my new BMoW Floppy Emu for emulation correctness. Being that Linux is open source and MacOS is not, this driver should be ideal for that. Secondly, I needed to realign the heads in some disk drives. The swim driver has most of the code needed for a feedback loop for manual re-alignment, so I wrote the remaining code and pushed it to a repo here: https://github.com/fthain/linux/commits/swim/ These patches fix all the bugs I found. They improve stability, compatibility and performance. Additional patches improve source code quality by removing redundant code and cleaning up a bit. This patch series was successfully tested on the following systems. Mac Quadra 650 - SWIM 2 with Mitsubishi FDD Mac LC III - SWIM 2 with Mitsubishi FDD and Sony FDD Mac Quadra 700 - SWIM with Sony FDD Mac IIvx - SWIM with Sony FDD --- Finn Thain (31): swim: Assert strobe with stable outputs swim: Select appropriate drive once only swim: Enable the drive when probing swim: Don't disable drive after every sector swim: Perform ISM/IWM mode switching according to specs swim: Configure parameter memory swim: Enable clock divider only where appropriate swim: Don't start motor until medium is present swim: Recalibrate when drive is probed swim: Add track zero recalibration delay swim: Handle FIFO timeout error swim: Simplify return value initialization swim: Check for CRC errors swim: Check error register during sector read swim: Don't use the mark register to read data swim: Fix buffer overflow swim: Convert to blocking queue swim: Remove redundant RELAX actions swim: Deduplicate polling loops swim: Check drive ready bit swim: Revisit delays swim: Remove pointless mode0 register write swim: Don't needlessly re-read sectors swim: Remove pointless specifiers swim: Move swd initialization swim: Add some helpful references swim: Remove unused macro definitions swim: Clean up whitespace swim: Define macros for constants swim: Define symbols for constants swim: Unexport global symbols arch/m68k/mac/config.c | 31 ++- drivers/block/swim.c | 422 ++++++++++++++++++++------------------- drivers/block/swim_asm.S | 306 ++++++++++++++-------------- 3 files changed, 403 insertions(+), 356 deletions(-) -- 2.52.0