Tested-by: Stan Johnson <userm57@yahoo.com>
This patch series was successfully tested on a Mac IIci.
On 9/4/26 3:26 AM, Finn Thain wrote:
> 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
>
> ---
>
> Changed since v1:
> - Patches 1/31, 19/31, 23/31 were revised as per Laurent's remarks.
> - Some minor improvements to patches 9/31, 13/31 and 16/31.
> - Added patch 24/32 to fix a bug causing silent IO corruption instead
> of an IO error.
>
> Changed since v2:
> - Reviewed-by tags were dropped from patches 1/32, 9/32, 13/32 and 16/32
> because of unreviewed changes.
> - Better assembly code in patch 13/32.
> - Patch 23/32 improved upon to reduce excessive interrupt latency when
> medium errors are encountered.
> - Patch 7/32 was split in two, and readability was improved as requested
> by Geert.
> - Geert's acked-by tag was added.
>
> ---
>
> Finn Thain (33):
> 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: Refactor SWIM setup
> 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: Don't search beyond the first data mark
> 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 | 451 ++++++++++++++++++++-------------------
> drivers/block/swim_asm.S | 356 +++++++++++++++---------------
> 3 files changed, 452 insertions(+), 386 deletions(-)
>