Re: [PATCH 0/1] m68k: Handle HAS_IOPORT dependencies

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

 



On Sat, Apr 6, 2024, at 03:14, Michael Schmitz wrote:
Am 06.04.2024 um 09:13 schrieb Arnd Bergmann:
On Fri, Apr 5, 2024, at 20:36, Michael Schmitz wrote:
Am 05.04.2024 um 23:16 schrieb Geert Uytterhoeven:
The last time I tried to add support for a different PCMCIA ethernet
adapter to apne.c _without_ adding to the hacks in io_mm.h, I wasn't
getting anywhere with the netdev crowd. That was ages ago, and I doubt
their enthusiasm for a rewrite of the 8390 code base to avoid using
inb() on MMIO architectures will be any better now.

From what I can see, there is already an abstraction layer in
these drivers that is used by all m68k drivers except apne:

As well as ne ... which uses the 8390p.c helper.

Is there any machine using ne.c that doesn't set HAS_IOPORT though?
Q40 and ATARI_ETHERNEC both have custom inb()/outb(), so
those are not affected by the change.

$ git grep -w 'define\sei_inb'
drivers/net/ethernet/8390/8390.h:#define ei_inb(_p)     inb(_p)
drivers/net/ethernet/8390/8390p.c:#define ei_inb(_p)    inb(_p)
drivers/net/ethernet/8390/ax88796.c:#define ei_inb(_a) readb(ax_convert_addr(_a))
drivers/net/ethernet/8390/etherh.c:#define ei_inb(_p)    readb((void __iomem *)_p)
drivers/net/ethernet/8390/hydra.c:#define ei_inb(port)   in_8(port)
drivers/net/ethernet/8390/mac8390.c:#define ei_inb(port)        in_8(port)
drivers/net/ethernet/8390/mcf8390.c:#define     ei_inb  ei_inb
drivers/net/ethernet/8390/xsurf100.c:#define ei_inb(_a) z_readb(ax_convert_addr(_a))
drivers/net/ethernet/8390/zorro8390.c:#define ei_inb(port)              in_8(port)

Can't apne.c just do the same here? The patch below didn't
take that long to come up with, but I may be missing something
here of course.

The address translation from ISA IO ports to MMIO addresses needs to be 
added as well (in_8() does not use address translation on m68k).

Indeed, I totally missed that bit.

apne.c also uses inw() which does have a different address translation
yet, but that's only for data transfer from the ring buffers and can
be handled entirely inside apne.c.

and this as well.

Now that is all limited to m68k. I might be able to submit a patch, but 
I cannot test any of this.

ne.c needs the same treatment as far as I can see, and I could actually 
test that one (on Atari, not actually on a PC ISA card). I'll see what I 
can come up with.

ATARI_ROM_ISA turns on HAS_IOPORT, so this one doesn't need any
immediate changes as a result of Niklas's series. I see now that
the apne driver doesn't actually need changes either since
AMIGA_PCMCIA turns on ISA.

I don't think there is an easy way to rework ne.c to avoid
inb()/outb(), but you could consider splitting the atari
support out into a separate module the same way as apne.c
to make it use the atari operations directly.

I might well be missing something else here - as I said, it's been a few 
years since I worked on the apne driver, and experimented with IO 
abstractions in that context. The problem has always been making sure 
drivers shared by different m68k platforms need only be built once and 
still work on e.g. Q40 and Atari.

Do you know of any other ISA style drivers that are used with the
amiga pcmcia or the atari rom I/O operations, aside from the 8390
family? If this is the only one using it, it does sound like this
could be simplified a lot by just making those two not share the
object code with the ISA-style ne.c.

      Arnd




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

  Powered by Linux