lkml.org 
[lkml]   [2000]   [Mar]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
Subject2.3.99-pre3 pcmcia cardbus patch, PCI questions
Date
Finally managed to make 2.3.99-pre3 recognise my Xircom Cardbus
RBEM56G. Turned out the expansion ROM was not being correctly
activated in the PCI code, patch below.

While diagnosing this problem, I spotted a couple of bits of code that
worry me in arch/i386/kernel/pci-i386.c. In pcibios_update_resource,
line 104 we have

new = res->start | (res->flags & PCI_REGION_FLAG_MASK);

When the region type is I/O, that sets the LSB on the new register
value, e.g. an I/O address of 0x1400 is written to register 0x10 as
0x1401. Is that correct?

pcibios_enable_resources loops from idx = 0 to idx < 6 to work out
which flags to set for PCI_COMMAND. In the unlikely event of a card
which has I/O, no memory but has expansion ROM then PCI_COMMAND will
only be set to PCI_COMMAND_IO, PCI_COMMAND_MEMORY will not be set.
Should enable resources check idx <= 6 instead of id < 6, just in case?

Index: 99-pre3.1/drivers/pcmcia/cardbus.c
--- 99-pre3.1/drivers/pcmcia/cardbus.c Sun, 05 Mar 2000 23:54:54 +1100 keith (linux-2.3/f/c/7_cardbus.c 1.9.1.2 644)
+++ 99-pre3.1(w)/drivers/pcmcia/cardbus.c Sat, 25 Mar 2000 16:48:13 +1100 keith (linux-2.3/f/c/7_cardbus.c 1.9.1.2 644)
@@ -299,12 +299,12 @@

pci_setup_device(dev);

- /* FIXME: Do we need to enable the expansion ROM? */
for (r = 0; r < 7; r++) {
struct resource *res = dev->resource + r;
if (res->flags)
pci_assign_resource(dev, r);
}
+ /* This will enable any expansion ROM */
pci_enable_device(dev);

/* Does this function have an interrupt at all? */
Index: 99-pre3.1/arch/i386/kernel/pci-i386.c
--- 99-pre3.1/arch/i386/kernel/pci-i386.c Sun, 19 Mar 2000 13:49:46 +1100 keith (linux-2.3/h/c/14_pci-i386.c 1.7.1.3 644)
+++ 99-pre3.1(w)/arch/i386/kernel/pci-i386.c Sat, 25 Mar 2000 16:51:53 +1100 keith (linux-2.3/h/c/14_pci-i386.c 1.7.1.3 644)
@@ -106,6 +106,7 @@
reg = PCI_BASE_ADDRESS_0 + 4*resource;
} else if (resource == PCI_ROM_RESOURCE) {
res->flags |= PCI_ROM_ADDRESS_ENABLE;
+ new |= PCI_ROM_ADDRESS_ENABLE;
reg = dev->rom_base_reg;
} else {
/* Somebody might have asked allocation of a non-standard resource */

-
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.tux.org/lkml/

\
 
 \ /
  Last update: 2005-03-22 13:57    [W:0.165 / U:0.420 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site