Messages in this thread | | | Date | Thu, 24 Feb 2005 01:45:24 -0500 | From | Jon Smirl <> | Subject | Re: [RFC] PCI bridge driver rewrite |
| |
On Thu, 24 Feb 2005 01:22:01 -0500, Adam Belay <abelay@novell.com> wrote: > For the past couple weeks I have been reorganizing the PCI subsystem to > better utilize the driver model. Specifically, the bus detection code > is now using a standard PCI driver. It turns out to be a major
What about VGA routing? Most PCI buses do it with the normal VGA bit but big hardware supports multiple legacy IO spaces via the bridge chips.
Are you going to make sysfs entries for the bridges? If so I'd like a VGA attribute that directly reads the VGA bit from the hardware and display it instead of using the shadow copy.
/* sysfs show for VGA routing bridge */ static ssize_t vga_bridge_show(struct device *dev, char *buf) { struct pci_dev *pdev = to_pci_dev(dev); u16 l;
/* don't trust the shadow PCI_BRIDGE_CTL_VGA in pdev */ /* user space (X) may change hardware without telling the kernel */ pci_read_config_word(pdev, PCI_BRIDGE_CONTROL, &l); return sprintf(buf, "%d\n", (l & PCI_BRIDGE_CTL_VGA) != 0); }
I also use these functions to control VGA routing, maybe they should be part of bridge support.
static void bridge_yes(struct pci_dev *pdev) { struct pci_dev *bridge; struct pci_bus *bus; /* Make sure the bridges route to us */ bus = pdev->bus; while (bus) { bridge = bus->self; if (bridge) { bus->bridge_ctl |= PCI_BRIDGE_CTL_VGA; pci_write_config_word(bridge, PCI_BRIDGE_CONTROL, bus->bridge_ctl); } bus = bus->parent; } }
static void bridge_no(struct pci_dev *pdev) { struct pci_dev *bridge; struct pci_bus *bus; /* Make sure the bridges don't route to us */ bus = pdev->bus; while (bus) { bridge = bus->self; if (bridge) { bus->bridge_ctl &= ~PCI_BRIDGE_CTL_VGA; pci_write_config_word(bridge, PCI_BRIDGE_CONTROL, bus->bridge_ctl); } bus = bus->parent; } }
Jesse can comment on the specific support needed for multiple legacy IO spaces.
-- Jon Smirl jonsmirl@gmail.com - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |