Re: S3 High Speed text font support in vgacon.c [patch 2.1.112]

Martin Mares (mj@ucw.cz)
Sun, 2 Aug 1998 17:20:53 +0200


Hi,

> I've been thinking about adding code for that to the kernel, but it's not
> trivial: how do you find out which devices have been assigned PCI resources
> already? Is this the correct way?
>
> oldaddr = pci_read(PCI_BASE_ADDRESS_i);
> pci_write(PCI_BASE_ADDRESS_i, -1);
> newaddr = pci_read(PCI_BASE_ADDRESS_i);
> if (oldaddr == newaddr) {
> /* not assigned */
> newaddr = pci_alloc(newaddr);
> pci_write(PCI_BASE_ADDRESS_i, newaddr);
> } else {
> /* assigned */
> pci_write(PCI_BASE_ADDRESS_i, oldaddr);
> }
>
> OK, this is a bit simplistic. I need two passes to prealloc the already
> assigned stuff. I cannot reassign new adresses to already assigned stuff since
> those adresses may be in the Open Firmware device tree properties, and thus
> can't be changed.

You should disable PCI_COMMAND_IO and PCI_COMMAND_MEMORY before writing
to the base address registers and enable it afterwards (but don't enable IO
where there are no I/O ports and the same holds for enabling memory).

The real problem is that you can't write a simple pci_alloc function since
you need to handle PCI-to-PCI bridges. You also need to do some fixup for early
S3 cards which errorneously report 16M address space instead of 32M (see XFree86
probing routines for an work-around).

I plan to include address allocation in the generic PCI subsystem for 2.3
(calling arch-dependent functions for address space management, but handling
bridges and buggy devices itself), since it's needed for proper support of
hot-pluggable devices (CardBus etc.) and we will finally get rid of the ugly
IDE address assignment hacks, too.

Have a nice fortnight

-- 
Martin `MJ' Mares   <mj@ucw.cz>   http://atrey.karlin.mff.cuni.cz/~mj/
Faculty of Math and Physics, Charles University, Prague, Czech Rep., Earth
"Lisp Users: Due to the holiday, there will be no garbage collection on Monday."

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.altern.org/andrebalsa/doc/lkml-faq.html