Thread (1 message) 1 message, 1 author, 2000-10-12
  • (off-list ancestor, not in this archive)
  • Re: dual head r128 · Gabriel Paubert <hidden> · 2000-10-12

Re: dual head r128

From: Gabriel Paubert <hidden>
Date: 2000-10-12 17:57:08

On Thu, 12 Oct 2000, Benjamin Herrenschmidt wrote:
Note to linux-kenrel readers: This discussion is the Nth attempt to find
a solution to handle both legacy IOs and PCI IOs on machines with several
IO busses memory mapped at different locations in the CPU space.
Yes, I know, but I still suspect that it is a more acceptable solution.
How many ISA drivers are there in real use ?

By decreasing order of importance (others might disagree):

- 8259 (yuck) and RTC/CMOS (always handled by architecture specific code
  AFAICT so it can be done in the way we want)
- serial
- DMA (used by floppy, perhaps parallel)
- floppy
- parallel
- sound ? (I don't know anything about sound, none of my machines have
  sound, I hate sound in computers and all the multimierda stuff, but most
  people don't agree with me so I put it here)
- old legacy devices like modems, SCSI (I have an ISA-SCSI at home)

I don't know where to put RTC/CMOS on this scale, but it should be close
to the top.
quoted
No please, is there anybody bloat-conscious on this damned list ? Burying
more and more code inside each {in,out}[bwl] is not the solution.
Well, that is pretty small overhead, and probably ridiculous compared to
the overhead of the IO itself. Most fast devices use MMIO anyway.
The problem is not the speed, it is the bloat. And increasing icache
footprint may have impressive side effects. Given the average time
between I/O the code will no more be in the cache when it is executed
again, so it will be fetched from memory. Minimizing icache footprint
is being nice to applications by not thrashing their cache (especially
true for interrupt code). See the mail from David too. OTOH, the first
thing to do is to revert the eieio->sync patch, first it is wrong, second
it will be a killer on SMP machines with 4 or more processors.
The problem is that whatever solution someone propose, there is _always_
somebody to reject it.
Let us wait and see. This solution can be adapted little by little. As
soon as you have the major devices working the other drivers can be
upgraded gradually.
quoted
Just define a macro ISA_PORT or something like this and update the kernel
to replace all the in/out to fixed ports to do in/out(ISA_PORT(n)). If you
don't do it you'll get a nice panic so you'll find all the places quite
fast.
That basically mean making different macros for ISA in/out and PCI in/
out. I've proposed this several time, but it requires changes to the
common code, and all I got when talking about this was flames from x86 people.
No it is not the same, it means that we acknowledge that ISA and PCI are
too entangled on x86 to use different functions.
quoted
PCI I/O resources will have to be kernel virtual, physical is impossible
with PreP if we want to lift the 2Gbuser space restriction (PreP I/O is
from 2 to 3 Gb physical and the first thing to do is to reallocate devices
which use it since most firmware use it too liberally, like one device
every ... 256Mb). There are other and better ways to increase user
available virtual space, however. And anyway I don't want any stinking add
in each in/out macro.
Well, in 2.4 we can easily reassign PCI IOs if we configure the bridge
with proper resources. If all goes well, my new PCI code should handle
that fine (should be ready this week-end).
quoted
Indeed, this is too awkward (is tere no way to redirect only the VGA
part of the legacy I/O space ? That's what the PCI-PCI bridges do, but
I've not yet used a single machine with AGP so I'm ignorant).
No, most bridges used on macs can't do that. In fact, AFAIK, it's not
possible to access the ISA memory space neither on those machines (on
UniN, I can't generate memory cycles at lower address than 0x80000000).
Ok, than it's impossible to put a good old VGA and initialize it
with the help of an emulator. It also means that UniN is not CHRP
compliant but we all suspected that.
My "pet" solution would be to have all legacy drivers request an IO base
this way

  base = isa_get_IO_base(legacy_addr);

The isa_get_IO_base function could then be "tweaked" to recognize known
legacy addresses and return different bases. (There might still be
problems with VGA vs. parallell, I don't know x86 world well enough to be
sure).
I hate this, if VGA is basically the only problem, instead of using the
ISA_PORT in the drivers, use another macro, something like VGA_PORT(n).
This is reasonable if the problem is VGA versus the rest, you know what
you want to access in the driver, and which kind of device you have.
Other legacy drivers do not have to bother with it, they'll never have to
go to AGP.

	Regards,
	Gabriel.


** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help