Re: [PATCH 06/31] swim: Configure parameter memory

Laurent Vivier <[email protected]>
Newsgroups org.kernel.vger.linux-block,org.kernel.vger.linux-kernel,org.kernel.vger.linux-m68k
Message-ID <[email protected]>
Le 16/07/2026 à 12:02, Finn Thain a écrit :
> The original SWIM chip has a 16 byte memory to store parameters which
> control read/write timing. The SWIM 2 chip retains the last 4 parameters
> which control write pre-compensation, but omits the first 12. Hence
> SWIM 2 can perform reads without any parameter memory setup but SWIM 1
> cannot.
> 
> Configure the SWIM parameter memory with the appropriate values so that
> SWIM 1 can read too. The parameters used here were observed in SWIM chip
> memory, using Macsbug, while MacOS was reading from an MFM floppy disk.
> 
> Fixes: 8852ecd97488 ("m68k: mac - Add SWIM floppy support")
> Signed-off-by: Finn Thain <[email protected]>
> ---
>   drivers/block/swim.c | 13 +++++++++++++
>   1 file changed, 13 insertions(+)
> 

Reviewed-by: Laurent Vivier <[email protected]>

> diff --git a/drivers/block/swim.c b/drivers/block/swim.c
> index 7499ff250ca7..481fb1e63ac1 100644
> --- a/drivers/block/swim.c
> +++ b/drivers/block/swim.c
> @@ -796,6 +796,17 @@ static void swim_cleanup_floppy_disk(struct floppy_state *fs)
>   	blk_mq_free_tag_set(&fs->tag_set);
>   }
>   
> +static void swim_set_parameters(struct swim __iomem *base)
> +{
> +	unsigned int i;
> +	static const u8 mem[] = { 0x18, 0x41, 0x2e, 0x2e, 0x18, 0x18, 0x1b, 0x1b,
> +				  0x2f, 0x2f, 0x19, 0x19, 0x97, 0x1b, 0x57, 0x3b, };
> +
> +	swim_write(base, mode0, 0); /* reset parameter memory index */
> +	for (i = 0; i < 16; ++i)
> +		swim_write(base, parameter, mem[i]);
> +}
> +
>   static int swim_floppy_init(struct swim_priv *swd)
>   {
>   	struct queue_limits lim = {
> @@ -805,6 +816,8 @@ static int swim_floppy_init(struct swim_priv *swd)
>   	int drive;
>   	struct swim __iomem *base = swd->base;
>   
> +	swim_set_parameters(base);
> +
>   	/* scan floppy drives */
>   
>   	swim_drive(base, INTERNAL_DRIVE);
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.