Re: [PATCH 0/4] Mac IOP driver fixes

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, 1 Jun 2020, Brad Boyer wrote:

On Tue, Jun 02, 2020 at 09:32:29AM +1000, Finn Thain wrote:
I'm hoping that the SWIM IOP can be used in bypass mode, so it could 
be used with the swim.c driver. I haven't been able to make that work 
yet.

Putting the IOP in bypass mode would have a couple issues. The obvious 
one is that it will break ADB (and because the shift register attached 
to the ADB transceiver is part of the IOP chip itself, there's not an 
easy fix for that)

I see.

but there's also some strangeness in the way the SWIM chip is attached 
to the IOP chip that looks like it might break a few things. In 
particular, it looks like they only enabled using the SWIM chip in ISM 
mode and not IWM mode.

IIUC, swim.c only uses ISM mode.

The notes I have imply that the normal Mac floppy driver didn't work on 
a IIfx even in bypass mode.

I abandoned my failed attempt to put the SWIM IOP into bypass mode when I 
finally came across this text in the HW09 tech note:

    "Like the processor which controls floppy disk and ADB I/O, the IIfx 
    has another ASIC to control the SCC, but unlike the former, this 
    processor is capable of running in a special 'IOP Bypass' mode which 
    allows direct access to the SCC."

I suppose the problem being alluded to here is the one you mentioned: to 
put this IOP in bypass would kill ADB functionality (for the duration).

In particular, note the direct use of a GPIO line on VIA1 in swim_select 
in drivers/block/swim.c.  That won't work on an IOP based system as that 
input line to SWIM doesn't appear to be hooked up to anything that can 
be accessed directly.

Here's the way it's put in _Guide to the Macintosh Family Hardware_ 
(Second Edition), on page 155:

"An IOP provides the state-control line SEL to the floppy disk drives. 
Among other functions, this line selects which of the two heads is to be 
used in a double-sided floppy disk drive."

The bit in VIA1 register A that is normally the "vHeadSel" line is 
explicitly listed as "Reserved" on the IIfx.


Yes, I was aware of that issue. But the GTMFH 2ed. figure 9-14 indicates 
that (on the IIfx) pin 12 in the drive connector is driven by the SWIM 
HDSEL pin instead of VIA1 Port A output. So, I wrote a patch to attempt to 
get the SWIM to drive this pin. But nothing worked because I never 
succeeded in putting the chip into bypass mode.

It's definitely possible to access and drive the SWIM chip in bypass 
mode, but that doesn't mean it's as transparent as for the SCC driver. 

OK.

BTW, I suspect there may be an issue with swim.c because it doesn't work 
on all models on which it should work. I know it works on Quadra 800, 650 
and a few others.

With regard to PowerBooks, we will need to power up the drive. And with 
regard to the IIfx, the A/UX iop.h header file indicates that, in bypass 
mode, the ISM registers have a 2-byte spacing (instead of 512-byte).

But I wish I knew why the driver doesn't work on an LC III, which 
supposedly has a SWIM 2, just like the Quadra 800.

Apparently this external input line is not strictly required when the 
SWIM chip is running in ISM mode. However, our driver appears to force 
the chip into ISM mode and yet still depends on this input line.


I can't comment on that. I don't really understand the ISM or IWM logic in 
any depth.



[Index of Archives]     [Video for Linux]     [Yosemite News]     [Linux S/390]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux