[PATCH 15/31] swim: Don't use the mark register to read data
From: Finn Thain
Date: Thu Jul 16 2026 - 06:23:26 EST
If an unexpected mark byte were to be read from the data register, an
error would be flagged. But no error gets flagged when such a byte is
read from the mark register, which is misleading. Always use the data
register except when a mark byte is expected.
Fixes: 8852ecd97488 ("m68k: mac - Add SWIM floppy support")
Signed-off-by: Finn Thain <fthain@xxxxxxxxxxxxxx>
---
drivers/block/swim_asm.S | 21 +++++++++++----------
1 file changed, 11 insertions(+), 10 deletions(-)
diff --git a/drivers/block/swim_asm.S b/drivers/block/swim_asm.S
index 1d394ee930d6..5caeba3a75d8 100644
--- a/drivers/block/swim_asm.S
+++ b/drivers/block/swim_asm.S
@@ -47,11 +47,11 @@
.global swim_read_sector_header
swim_read_sector_header:
link %a6, #0
- moveml %d1-%d5/%a0-%a4,%sp@-
+ moveml %d1-%d5/%a0-%a5,%sp@-
movel %a6@(0x0c), %a4
moveq #-1, %d0
bsr mfm_read_addrmark
- moveml %sp@+, %d1-%d5/%a0-%a4
+ moveml %sp@+, %d1-%d5/%a0-%a5
unlk %a6
rts
@@ -63,6 +63,7 @@ sector_data_mark:
mfm_read_addrmark:
movel %a6@(0x08), %a3
lea %a3@(read_handshake), %a2
+ lea %a3@(read_data), %a5
lea %a3@(read_mark), %a3
movew #seek_time, %d2
@@ -93,7 +94,7 @@ amark0: tstb %a2@
dbmi %d2, amark0
bpl signal_nonyb
- moveb %a3@, %a4@(o_track)
+ moveb %a5@, %a4@(o_track)
moveq #max_retry, %d2
@@ -101,7 +102,7 @@ amark1: tstb %a2@
dbmi %d2, amark1
bpl signal_nonyb
- moveb %a3@, %a4@(o_side)
+ moveb %a5@, %a4@(o_side)
moveq #max_retry, %d2
@@ -109,7 +110,7 @@ amark2: tstb %a2@
dbmi %d2, amark2
bpl signal_nonyb
- moveb %a3@, %a4@(o_sector)
+ moveb %a5@, %a4@(o_sector)
moveq #max_retry, %d2
@@ -117,7 +118,7 @@ amark3: tstb %a2@
dbmi %d2, amark3
bpl signal_nonyb
- moveb %a3@, %a4@(o_size)
+ moveb %a5@, %a4@(o_size)
moveq #max_retry, %d2
@@ -125,7 +126,7 @@ crc0: tstb %a2@
dbmi %d2, crc0
bpl signal_nonyb
- moveb %a3@, %a4@(o_crc0)
+ moveb %a5@, %a4@(o_crc0)
moveq #max_retry, %d2
@@ -133,7 +134,7 @@ crc1: moveb %a2@, %d5
dbmi %d2, crc1
bpl signal_nonyb
- moveb %a3@, %a4@(o_crc1)
+ moveb %a5@, %a4@(o_crc1)
andb #.Lhr_crc_error, %d5
bne signal_nonyb
@@ -211,7 +212,7 @@ data_crc0:
dbmi %d2, data_crc0
bpl data_exit
- moveb %a3@, %d2
+ moveb %a5@, %d2
moveq #max_retry, %d2
@@ -221,7 +222,7 @@ data_crc1:
dbmi %d2, data_crc1
bpl data_exit
- moveb %a3@, %d2
+ moveb %a5@, %d2
andb #.Lhr_crc_error, %d5
bne data_exit
--
2.52.0