* [patch 2.5] PCI: kill pdev_enable_device()
@ 2002-12-17 17:19 Ivan Kokshaysky
2002-12-17 22:31 ` Jeff Garzik
0 siblings, 1 reply; 5+ messages in thread
From: Ivan Kokshaysky @ 2002-12-17 17:19 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-kernel
Actually, only Alpha relied on that due to the lack of pcibios_enable_device(),
which has been fixed recently.
- Don't disable io, mem and master bits in the PCI command
registers during resource re-allocation. The initial motivation
was to avoid temporarily overlaps of the PCI io/memory ranges. But,
this can be harmful _only_ if someone was actually accessing these
ranges in the meantime. However, in this case an access to _disabled_
region would be equally bad.
Also, clearing the PCI_COMMAND_MASTER bit might be fatal for things like
USB consoles.
- So, if we don't touch the PCI command registers, there is no point in
using pdev_enable_device(). Most drivers properly use
pci_enable_device() anyway.
Ivan.
--- 2.5/drivers/pci/setup-res.c Sun Nov 24 17:00:08 2002
+++ linux/drivers/pci/setup-res.c Thu Nov 28 12:07:37 2002
@@ -183,57 +183,3 @@ pdev_sort_resources(struct pci_dev *dev,
}
}
}
-
-void __init
-pdev_enable_device(struct pci_dev *dev)
-{
- u32 reg;
- u16 cmd;
- int i;
-
- DBGC((KERN_ERR "PCI enable device: (%s)\n", dev->name));
-
- pci_read_config_word(dev, PCI_COMMAND, &cmd);
-
- for (i = 0; i < PCI_NUM_RESOURCES; i++) {
- struct resource *res = &dev->resource[i];
-
- if (res->flags & IORESOURCE_IO)
- cmd |= PCI_COMMAND_IO;
- else if (res->flags & IORESOURCE_MEM)
- cmd |= PCI_COMMAND_MEMORY;
- }
-
- /* Special case, disable the ROM. Several devices act funny
- (ie. do not respond to memory space writes) when it is left
- enabled. A good example are QlogicISP adapters. */
-
- if (dev->rom_base_reg) {
- pci_read_config_dword(dev, dev->rom_base_reg, ®);
- reg &= ~PCI_ROM_ADDRESS_ENABLE;
- pci_write_config_dword(dev, dev->rom_base_reg, reg);
- dev->resource[PCI_ROM_RESOURCE].flags &= ~PCI_ROM_ADDRESS_ENABLE;
- }
-
- /* All of these (may) have I/O scattered all around and may not
- use I/O base address registers at all. So we just have to
- always enable IO to these devices. */
- if ((dev->class >> 8) == PCI_CLASS_NOT_DEFINED
- || (dev->class >> 8) == PCI_CLASS_NOT_DEFINED_VGA
- || (dev->class >> 8) == PCI_CLASS_STORAGE_IDE
- || (dev->class >> 16) == PCI_BASE_CLASS_DISPLAY) {
- cmd |= PCI_COMMAND_IO;
- }
-
- /* Do not enable bus mastering. A device could corrupt
- * system memory by DMAing before a driver is ready for it. */
-
- /* Set the cache line and default latency (32). */
- pci_write_config_word(dev, PCI_CACHE_LINE_SIZE,
- (32 << 8) | (L1_CACHE_BYTES / sizeof(u32)));
-
- /* Enable the appropriate bits in the PCI command register. */
- pci_write_config_word(dev, PCI_COMMAND, cmd);
-
- DBGC((KERN_ERR " cmd reg 0x%x\n", cmd));
-}
--- 2.5/drivers/pci/setup-bus.c Sun Nov 24 17:00:08 2002
+++ linux/drivers/pci/setup-bus.c Thu Nov 28 12:07:37 2002
@@ -48,22 +48,21 @@ pbus_assign_resources_sorted(struct pci_
for (ln=bus->devices.next; ln != &bus->devices; ln=ln->next) {
struct pci_dev *dev = pci_dev_b(ln);
u16 class = dev->class >> 8;
- u16 cmd;
+ u32 rom;
- /* First, disable the device to avoid side
- effects of possibly overlapping I/O and
- memory ranges.
- Leave VGA enabled - for obvious reason. :-)
- Same with all sorts of bridges - they may
- have VGA behind them. */
if (class == PCI_CLASS_DISPLAY_VGA
|| class == PCI_CLASS_NOT_DEFINED_VGA)
found_vga = 1;
- else if (class >> 8 != PCI_BASE_CLASS_BRIDGE) {
- pci_read_config_word(dev, PCI_COMMAND, &cmd);
- cmd &= ~(PCI_COMMAND_IO | PCI_COMMAND_MEMORY
- | PCI_COMMAND_MASTER);
- pci_write_config_word(dev, PCI_COMMAND, cmd);
+
+ /* Special case, disable the ROM. Several devices act funny
+ (ie. do not respond to memory space writes) when it is left
+ enabled. A good example are QlogicISP adapters. */
+ if (dev->rom_base_reg) {
+ pci_read_config_dword(dev, dev->rom_base_reg, &rom);
+ rom &= ~PCI_ROM_ADDRESS_ENABLE;
+ pci_write_config_dword(dev, dev->rom_base_reg, rom);
+ dev->resource[PCI_ROM_RESOURCE].flags &=
+ ~PCI_ROM_ADDRESS_ENABLE;
}
pdev_sort_resources(dev, &head);
@@ -387,7 +386,6 @@ void __init
pci_assign_unassigned_resources(void)
{
struct list_head *ln;
- struct pci_dev *dev;
/* Depth first, calculate sizes and alignments of all
subordinate buses. */
@@ -396,8 +394,4 @@ pci_assign_unassigned_resources(void)
/* Depth last, allocate resources and update the hardware. */
for(ln=pci_root_buses.next; ln != &pci_root_buses; ln=ln->next)
pci_bus_assign_resources(pci_bus_b(ln));
-
- pci_for_each_dev(dev) {
- pdev_enable_device(dev);
- }
}
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [patch 2.5] PCI: kill pdev_enable_device()
2002-12-17 17:19 [patch 2.5] PCI: kill pdev_enable_device() Ivan Kokshaysky
@ 2002-12-17 22:31 ` Jeff Garzik
2002-12-18 0:42 ` Dave Jones
0 siblings, 1 reply; 5+ messages in thread
From: Jeff Garzik @ 2002-12-17 22:31 UTC (permalink / raw)
To: Ivan Kokshaysky; +Cc: Linus Torvalds, linux-kernel
Ivan Kokshaysky wrote:
> - So, if we don't touch the PCI command registers, there is no point in
> using pdev_enable_device(). Most drivers properly use
> pci_enable_device() anyway.
Not only that, a driver _should_ be calling pci-enable-device, it's an
API requirement. J Random Driver should have a good reason _not_ to
call pci_enable_device() ...
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [patch 2.5] PCI: kill pdev_enable_device()
2002-12-17 22:31 ` Jeff Garzik
@ 2002-12-18 0:42 ` Dave Jones
2002-12-18 0:52 ` Jeff Garzik
2002-12-18 10:11 ` Ivan Kokshaysky
0 siblings, 2 replies; 5+ messages in thread
From: Dave Jones @ 2002-12-18 0:42 UTC (permalink / raw)
To: Jeff Garzik; +Cc: Ivan Kokshaysky, Linus Torvalds, linux-kernel
On Tue, Dec 17, 2002 at 05:31:57PM -0500, Jeff Garzik wrote:
> Ivan Kokshaysky wrote:
> >- So, if we don't touch the PCI command registers, there is no point in
> > using pdev_enable_device(). Most drivers properly use
> > pci_enable_device() anyway.
> Not only that, a driver _should_ be calling pci-enable-device, it's an
> API requirement. J Random Driver should have a good reason _not_ to
> call pci_enable_device() ...
What about the xircom issue that was discussed in the last days ?
Sounds like the solution isn't a full on pci_enable_device() as
pcmcia 'knows better than us' at that stage aparently.
Dave
--
| Dave Jones. http://www.codemonkey.org.uk
| SuSE Labs
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [patch 2.5] PCI: kill pdev_enable_device()
2002-12-18 0:42 ` Dave Jones
@ 2002-12-18 0:52 ` Jeff Garzik
2002-12-18 10:11 ` Ivan Kokshaysky
1 sibling, 0 replies; 5+ messages in thread
From: Jeff Garzik @ 2002-12-18 0:52 UTC (permalink / raw)
To: Dave Jones, Ivan Kokshaysky, Linus Torvalds, linux-kernel
On Wed, Dec 18, 2002 at 12:42:26AM +0000, Dave Jones wrote:
> On Tue, Dec 17, 2002 at 05:31:57PM -0500, Jeff Garzik wrote:
> > Ivan Kokshaysky wrote:
> > >- So, if we don't touch the PCI command registers, there is no point in
> > > using pdev_enable_device(). Most drivers properly use
> > > pci_enable_device() anyway.
> > Not only that, a driver _should_ be calling pci-enable-device, it's an
> > API requirement. J Random Driver should have a good reason _not_ to
> > call pci_enable_device() ...
>
> What about the xircom issue that was discussed in the last days ?
> Sounds like the solution isn't a full on pci_enable_device() as
> pcmcia 'knows better than us' at that stage aparently.
The solution in the driver is almost always pci_enable_device().
That recent issue was related to subsystem code not driver code;
for that specific situation, you are absolutely right:
pci_enable_device is not the right thing to do.
Jeff
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [patch 2.5] PCI: kill pdev_enable_device()
2002-12-18 0:42 ` Dave Jones
2002-12-18 0:52 ` Jeff Garzik
@ 2002-12-18 10:11 ` Ivan Kokshaysky
1 sibling, 0 replies; 5+ messages in thread
From: Ivan Kokshaysky @ 2002-12-18 10:11 UTC (permalink / raw)
To: Dave Jones, Jeff Garzik, Linus Torvalds, linux-kernel
On Wed, Dec 18, 2002 at 12:42:26AM +0000, Dave Jones wrote:
> On Tue, Dec 17, 2002 at 05:31:57PM -0500, Jeff Garzik wrote:
> > Not only that, a driver _should_ be calling pci-enable-device, it's an
> > API requirement. J Random Driver should have a good reason _not_ to
> > call pci_enable_device() ...
>
> What about the xircom issue that was discussed in the last days ?
> Sounds like the solution isn't a full on pci_enable_device() as
> pcmcia 'knows better than us' at that stage aparently.
pdev_enable_device() has nothing to do with pcmcia anyway. :-)
Ivan.
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2002-12-18 10:04 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2002-12-17 17:19 [patch 2.5] PCI: kill pdev_enable_device() Ivan Kokshaysky
2002-12-17 22:31 ` Jeff Garzik
2002-12-18 0:42 ` Dave Jones
2002-12-18 0:52 ` Jeff Garzik
2002-12-18 10:11 ` Ivan Kokshaysky
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox