Re: [PATCH 15/31] swim: Don't use the mark register to read data
Laurent Vivier <[email protected]> Tue, 21 Jul 2026 07:49:46 +0200
| Newsgroups | org.kernel.vger.linux-m68k,org.kernel.vger.linux-block,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
Le 16/07/2026 =C3=A0 12:02, Finn Thain a =C3=A9crit=C2=A0:
> 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.
>=20
> Fixes: 8852ecd97488 ("m68k: mac - Add SWIM floppy support")
> Signed-off-by: Finn Thain <[email protected]>
> ---
> drivers/block/swim_asm.S | 21 +++++++++++----------
> 1 file changed, 11 insertions(+), 10 deletions(-)
Reviewed-by: Laurent Vivier <[email protected]>
>=20
> 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
> =20
> @@ -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
> =20
> @@ -93,7 +94,7 @@ amark0: tstb %a2@
> dbmi %d2, amark0
> bpl signal_nonyb
> =20
> - moveb %a3@, %a4@(o_track)
> + moveb %a5@, %a4@(o_track)
> =20
> moveq #max_retry, %d2
> =20
> @@ -101,7 +102,7 @@ amark1: tstb %a2@
> dbmi %d2, amark1
> bpl signal_nonyb
> =20
> - moveb %a3@, %a4@(o_side)
> + moveb %a5@, %a4@(o_side)
> =20
> moveq #max_retry, %d2
> =20
> @@ -109,7 +110,7 @@ amark2: tstb %a2@
> dbmi %d2, amark2
> bpl signal_nonyb
> =20
> - moveb %a3@, %a4@(o_sector)
> + moveb %a5@, %a4@(o_sector)
> =20
> moveq #max_retry, %d2
> =20
> @@ -117,7 +118,7 @@ amark3: tstb %a2@
> dbmi %d2, amark3
> bpl signal_nonyb
> =20
> - moveb %a3@, %a4@(o_size)
> + moveb %a5@, %a4@(o_size)
> =20
> moveq #max_retry, %d2
> =20
> @@ -125,7 +126,7 @@ crc0: tstb %a2@
> dbmi %d2, crc0
> bpl signal_nonyb
> =20
> - moveb %a3@, %a4@(o_crc0)
> + moveb %a5@, %a4@(o_crc0)
> =20
> moveq #max_retry, %d2
> =20
> @@ -133,7 +134,7 @@ crc1: moveb %a2@, %d5
> dbmi %d2, crc1
> bpl signal_nonyb
> =20
> - moveb %a3@, %a4@(o_crc1)
> + moveb %a5@, %a4@(o_crc1)
> =20
> andb #.Lhr_crc_error, %d5
> bne signal_nonyb
> @@ -211,7 +212,7 @@ data_crc0:
> dbmi %d2, data_crc0
> bpl data_exit
> =20
> - moveb %a3@, %d2
> + moveb %a5@, %d2
> =20
> moveq #max_retry, %d2
> =20
> @@ -221,7 +222,7 @@ data_crc1:
> dbmi %d2, data_crc1
> bpl data_exit
> =20
> - moveb %a3@, %d2
> + moveb %a5@, %d2
> =20
> andb #.Lhr_crc_error, %d5
> bne data_exit