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