* Re: PCI64 bus vanished in 2.4.23-pre6
2003-10-07 21:27 PCI64 bus vanished in 2.4.23-pre6 J.A. Magallon
@ 2003-10-07 22:11 ` J.A. Magallon
2003-10-10 18:28 ` Marcelo Tosatti
1 sibling, 0 replies; 5+ messages in thread
From: J.A. Magallon @ 2003-10-07 22:11 UTC (permalink / raw)
To: J.A. Magallon; +Cc: Lista Linux-Kernel
On 10.07, J.A. Magallon wrote:
> Hi all...
>
> With 2.4.23-pre6, my e1000 cards did not work. I was thinking it was a driver
> problem, but the I realized that they are not even listed in lspci.
>
> lspci (-n) in pre5:
>
> 00:00.0 Class 0600: 1166:0009 (rev 06)
> 00:00.1 Class 0600: 1166:0009 (rev 06)
> 00:04.0 Class 0300: 1039:6326 (rev 0b)
> 00:06.0 Class 0200: 8086:1229 (rev 08)
> 00:0f.0 Class 0601: 1166:0200 (rev 51)
> 00:0f.1 Class 0101: 1166:0211
> 00:0f.2 Class 0c03: 1166:0220 (rev 04)
> 01:02.0 Class 0200: 8086:1004 (rev 02)
>
> 00:00.0 Host bridge: ServerWorks CNB20LE Host Bridge (rev 06)
> 00:00.1 Host bridge: ServerWorks CNB20LE Host Bridge (rev 06)
> 00:04.0 VGA compatible controller: Silicon Integrated Systems [SiS] 86C326 5598/
> 00:06.0 Ethernet controller: Intel Corp. 82557/8/9 [Ethernet Pro 100] (rev 08)
> 00:0f.0 ISA bridge: ServerWorks OSB4 South Bridge (rev 51)
> 00:0f.1 IDE interface: ServerWorks OSB4 IDE Controller
> 00:0f.2 USB Controller: ServerWorks OSB4/CSB5 OHCI USB Controller (rev 04)
> 01:02.0 Ethernet controller: Intel Corp. 82543GC Gigabit Ethernet Controller (Co
>
> lspci in pre6:
>
> 00:00.0 Class 0600: 1166:0009 (rev 06)
> 00:00.1 Class 0600: 1166:0009 (rev 06)
> 00:04.0 Class 0300: 1039:6326 (rev 0b)
> 00:06.0 Class 0200: 8086:1229 (rev 08)
> 00:0f.0 Class 0601: 1166:0200 (rev 51)
> 00:0f.1 Class 0101: 1166:0211
> 00:0f.2 Class 0c03: 1166:0220 (rev 04)
>
> 00:00.0 Host bridge: ServerWorks CNB20LE Host Bridge (rev 06)
> 00:00.1 Host bridge: ServerWorks CNB20LE Host Bridge (rev 06)
> 00:04.0 VGA compatible controller: Silicon Integrated Systems [SiS] 86C326 5598/
> 00:06.0 Ethernet controller: Intel Corp. 82557/8/9 [Ethernet Pro 100] (rev 08)
> 00:0f.0 ISA bridge: ServerWorks OSB4 South Bridge (rev 51)
> 00:0f.1 IDE interface: ServerWorks OSB4 IDE Controller
> 00:0f.2 USB Controller: ServerWorks OSB4/CSB5 OHCI USB Controller (rev 04)
>
> Do not know if it is a problem of the driver (i suppose it is not, the driver
> has nothing to do with lspci...), a problem of the bus number, a problem
> of the PCI bus being 64 bit, or a problem with the OSB4 chipset.
>
Er, it looks like chipset specific. The front end has the very same card
(different mobo) on bus 3:
annwn:~> lspci
00:00.0 Host bridge: Intel Corp. 82860 860 (Wombat) Chipset Host Bridge (MCH) (rev 04)
00:01.0 PCI bridge: Intel Corp. 82850 850 (Tehama) Chipset AGP Bridge (rev 04)
00:02.0 PCI bridge: Intel Corp. 82860 860 (Wombat) Chipset AGP Bridge (rev 04)
00:1e.0 PCI bridge: Intel Corp. 82801BA/CA/DB/EB PCI Bridge (rev 04)
00:1f.0 ISA bridge: Intel Corp. 82801BA ISA Bridge (LPC) (rev 04)
00:1f.1 IDE interface: Intel Corp. 82801BA IDE U100 (rev 04)
00:1f.2 USB Controller: Intel Corp. 82801BA/BAM USB (Hub #1) (rev 04)
00:1f.3 SMBus: Intel Corp. 82801BA/BAM SMBus (rev 04)
00:1f.4 USB Controller: Intel Corp. 82801BA/BAM USB (Hub #2) (rev 04)
00:1f.5 Multimedia audio controller: Intel Corp. 82801BA/BAM AC'97 Audio (rev 04)
01:00.0 VGA compatible controller: nVidia Corporation NV11 [GeForce2 MX/MX 400] (rev a1)
02:1f.0 PCI bridge: Intel Corp. 82806AA PCI64 Hub PCI Bridge (rev 03)
03:00.0 PIC: Intel Corp. 82806AA PCI64 Hub Advanced Programmable Interrupt Controller (rev 01)
03:01.0 Ethernet controller: Intel Corp. 82543GC Gigabit Ethernet Controller (Copper) (rev 02)
03:02.0 SCSI storage controller: Adaptec AIC-7892A U160/m (rev 02)
04:03.0 Ethernet controller: 3Com Corporation 3c905C-TX/TX-M [Tornado] (rev 74)
04:04.0 Ethernet controller: Intel Corp. 82557/8/9 [Ethernet Pro 100] (rev 08)
???
--
J.A. Magallon <jamagallon()able!es> \ Software is like sex:
werewolf!able!es \ It's better when it's free
Mandrake Linux release 9.2 (Cooker) for i586
Linux 2.4.23-pre6-jam1 (gcc 3.3.1 (Mandrake Linux 9.2 3.3.1-2mdk))
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: PCI64 bus vanished in 2.4.23-pre6
2003-10-07 21:27 PCI64 bus vanished in 2.4.23-pre6 J.A. Magallon
2003-10-07 22:11 ` J.A. Magallon
@ 2003-10-10 18:28 ` Marcelo Tosatti
2003-10-10 22:04 ` J.A. Magallon
1 sibling, 1 reply; 5+ messages in thread
From: Marcelo Tosatti @ 2003-10-10 18:28 UTC (permalink / raw)
To: J.A. Magallon; +Cc: Lista Linux-Kernel
[-- Attachment #1: Type: TEXT/PLAIN, Size: 397 bytes --]
On Tue, 7 Oct 2003, J.A. Magallon wrote:
> Hi all...
>
> With 2.4.23-pre6, my e1000 cards did not work. I was thinking it was a driver
> problem, but the I realized that they are not even listed in lspci.
>
> <moilanen:austin.ibm.com>:
> o Workaround PPC64 PCI scan issue
This has a high chance of being the problem.
Attached patch for you to revert (-R) and retry is attached, please. :)
[-- Attachment #2: Type: TEXT/PLAIN, Size: 8824 bytes --]
# This is a BitKeeper generated patch for the following project:
# Project Name: Linux kernel tree
# This patch format is intended for GNU patch command version 2.5 or higher.
# This patch includes the following deltas:
# ChangeSet 1.1136 -> 1.1136.2.1
# include/asm-alpha/pci.h 1.8 -> 1.9
# include/asm-mips64/pci.h 1.11 -> 1.12
# include/asm-sparc64/pci.h 1.6 -> 1.7
# include/asm-ppc64/pci.h 1.3 -> 1.4
# drivers/pci/pci.c 1.45 -> 1.46
# include/asm-arm/pci.h 1.10 -> 1.11
# include/asm-i386/pci.h 1.16 -> 1.17
# include/asm-m68k/pci.h 1.3 -> 1.4
# include/asm-sh/pci.h 1.10 -> 1.11
# include/asm-mips/pci.h 1.12 -> 1.13
# include/asm-parisc/pci.h 1.7 -> 1.8
# include/asm-ppc/pci.h 1.14 -> 1.15
# include/asm-sparc/pci.h 1.8 -> 1.9
# include/asm-ia64/pci.h 1.13 -> 1.14
# include/asm-x86_64/pci.h 1.5 -> 1.6
#
# The following is the BitKeeper ChangeSet Log
# --------------------------------------------
# 03/09/29 len.brown@intel.com 1.1137
# Merge intel.com:/home/lenb/bk/linux-2.4.23
# into intel.com:/home/lenb/bk/linux-acpi-test-2.4.23
# --------------------------------------------
# 03/09/29 len.brown@intel.com 1.1136.1.1
# Merge intel.com:/home/lenb/bk/linux-2.4.23
# into intel.com:/home/lenb/bk/linux-acpi-release-2.4.23
# --------------------------------------------
# 03/09/29 moilanen@austin.ibm.com 1.1136.2.1
# [PATCH] Workaround PPC64 PCI scan issue
#
# This patch is a port of some work that Anton Blanchard did for 2.6.
#
# There are some arch, like PPC64, that need to be able to scan all the
# PCI functions. The problem comes in on a logically partitioned system
# where function 0 on a PCI-PCI bridge is assigned to one partition and say
# function 2 is assiged to another partition. On the second partition, it
# would appear that function 0 does not exist, but function 2 does. If all
# the functions are not scanned, everything under function 2 would not be
# detected.
#
#
# Thanks,
# Jake
# --------------------------------------------
#
diff -Nru a/drivers/pci/pci.c b/drivers/pci/pci.c
--- a/drivers/pci/pci.c Fri Oct 10 15:27:59 2003
+++ b/drivers/pci/pci.c Fri Oct 10 15:27:59 2003
@@ -1475,17 +1475,22 @@
u8 hdr_type;
for (func = 0; func < 8; func++, temp->devfn++) {
- if (func && !is_multi) /* not a multi-function device */
- continue;
if (pci_read_config_byte(temp, PCI_HEADER_TYPE, &hdr_type))
continue;
temp->hdr_type = hdr_type & 0x7f;
dev = pci_scan_device(temp);
- if (!dev)
- continue;
+ if (!pcibios_scan_all_fns() && func == 0) {
+ if (!dev)
+ break;
+ } else {
+ if (!dev)
+ continue;
+ is_multi = 1;
+ }
+
pci_name_device(dev);
- if (!func) {
+ if (!first_dev) {
is_multi = hdr_type & 0x80;
first_dev = dev;
}
@@ -1499,6 +1504,14 @@
/* Fix up broken headers */
pci_fixup_device(PCI_FIXUP_HEADER, dev);
+
+ /*
+ * If this is a single function device
+ * don't scan past the first function.
+ */
+ if (!is_multi)
+ break;
+
}
return first_dev;
}
diff -Nru a/include/asm-alpha/pci.h b/include/asm-alpha/pci.h
--- a/include/asm-alpha/pci.h Fri Oct 10 15:27:59 2003
+++ b/include/asm-alpha/pci.h Fri Oct 10 15:27:59 2003
@@ -50,6 +50,7 @@
bus numbers. */
#define pcibios_assign_all_busses() 1
+#define pcibios_scan_all_fns() 0
#define PCIBIOS_MIN_IO alpha_mv.min_io_address
#define PCIBIOS_MIN_MEM alpha_mv.min_mem_address
diff -Nru a/include/asm-arm/pci.h b/include/asm-arm/pci.h
--- a/include/asm-arm/pci.h Fri Oct 10 15:27:59 2003
+++ b/include/asm-arm/pci.h Fri Oct 10 15:27:59 2003
@@ -53,6 +53,8 @@
/* We don't do dynamic PCI IRQ allocation */
}
+#define pcibios_scan_all_fns() 0
+
struct pci_dev;
/* Allocate and map kernel buffer using consistent mode DMA for a device.
diff -Nru a/include/asm-i386/pci.h b/include/asm-i386/pci.h
--- a/include/asm-i386/pci.h Fri Oct 10 15:27:59 2003
+++ b/include/asm-i386/pci.h Fri Oct 10 15:27:59 2003
@@ -14,6 +14,7 @@
#else
#define pcibios_assign_all_busses() 0
#endif
+#define pcibios_scan_all_fns() 0
extern unsigned long pci_mem_start;
#define PCIBIOS_MIN_IO 0x1000
diff -Nru a/include/asm-ia64/pci.h b/include/asm-ia64/pci.h
--- a/include/asm-ia64/pci.h Fri Oct 10 15:27:59 2003
+++ b/include/asm-ia64/pci.h Fri Oct 10 15:27:59 2003
@@ -15,6 +15,7 @@
* loader.
*/
#define pcibios_assign_all_busses() 0
+#define pcibios_scan_all_fns() 0
#define PCIBIOS_MIN_IO 0x1000
#define PCIBIOS_MIN_MEM 0x10000000
diff -Nru a/include/asm-m68k/pci.h b/include/asm-m68k/pci.h
--- a/include/asm-m68k/pci.h Fri Oct 10 15:27:59 2003
+++ b/include/asm-m68k/pci.h Fri Oct 10 15:27:59 2003
@@ -34,6 +34,7 @@
};
#define pcibios_assign_all_busses() 0
+#define pcibios_scan_all_fns() 0
extern inline void pcibios_set_master(struct pci_dev *dev)
{
diff -Nru a/include/asm-mips/pci.h b/include/asm-mips/pci.h
--- a/include/asm-mips/pci.h Fri Oct 10 15:27:59 2003
+++ b/include/asm-mips/pci.h Fri Oct 10 15:27:59 2003
@@ -19,6 +19,7 @@
#else
#define pcibios_assign_all_busses() 0
#endif
+#define pcibios_scan_all_fns() 0
#define PCIBIOS_MIN_IO 0x1000
#define PCIBIOS_MIN_MEM 0x10000000
diff -Nru a/include/asm-mips64/pci.h b/include/asm-mips64/pci.h
--- a/include/asm-mips64/pci.h Fri Oct 10 15:27:59 2003
+++ b/include/asm-mips64/pci.h Fri Oct 10 15:27:59 2003
@@ -19,6 +19,7 @@
#else
#define pcibios_assign_all_busses() 0
#endif
+#define pcibios_scan_all_fns() 0
#define PCIBIOS_MIN_IO 0x1000
#define PCIBIOS_MIN_MEM 0x10000000
diff -Nru a/include/asm-parisc/pci.h b/include/asm-parisc/pci.h
--- a/include/asm-parisc/pci.h Fri Oct 10 15:27:59 2003
+++ b/include/asm-parisc/pci.h Fri Oct 10 15:27:59 2003
@@ -259,6 +259,7 @@
** to zero for legacy platforms and one for PAT platforms.
*/
#define pcibios_assign_all_busses() (pdc_type == PDC_TYPE_PAT)
+#define pcibios_scan_all_fns() 0
#define PCIBIOS_MIN_IO 0x10
#define PCIBIOS_MIN_MEM 0x1000 /* NBPG - but pci/setup-res.c dies */
diff -Nru a/include/asm-ppc/pci.h b/include/asm-ppc/pci.h
--- a/include/asm-ppc/pci.h Fri Oct 10 15:27:59 2003
+++ b/include/asm-ppc/pci.h Fri Oct 10 15:27:59 2003
@@ -24,6 +24,7 @@
extern int pci_assign_all_busses;
#define pcibios_assign_all_busses() (pci_assign_all_busses)
+#define pcibios_scan_all_fns() 0
#define PCIBIOS_MIN_IO 0x1000
#define PCIBIOS_MIN_MEM 0x10000000
diff -Nru a/include/asm-ppc64/pci.h b/include/asm-ppc64/pci.h
--- a/include/asm-ppc64/pci.h Fri Oct 10 15:27:59 2003
+++ b/include/asm-ppc64/pci.h Fri Oct 10 15:27:59 2003
@@ -25,6 +25,12 @@
#define PCIBIOS_MIN_IO 0x1000
#define PCIBIOS_MIN_MEM 0x10000000
+/*
+ * ppc64 can have multifunction devices that do not respond to function 0.
+ * In this case we must scan all functions.
+ */
+#define pcibios_scan_all_fns() 1
+
static inline void pcibios_set_master(struct pci_dev *dev)
{
/* No special bus mastering setup handling */
diff -Nru a/include/asm-sh/pci.h b/include/asm-sh/pci.h
--- a/include/asm-sh/pci.h Fri Oct 10 15:27:59 2003
+++ b/include/asm-sh/pci.h Fri Oct 10 15:27:59 2003
@@ -10,6 +10,7 @@
or architectures with incomplete PCI setup by the loader */
#define pcibios_assign_all_busses() 1
+#define pcibios_scan_all_fns() 0
#if defined(CONFIG_CPU_SUBTYPE_ST40)
/* These are currently the correct values for the ST40 based chips.
diff -Nru a/include/asm-sparc/pci.h b/include/asm-sparc/pci.h
--- a/include/asm-sparc/pci.h Fri Oct 10 15:27:59 2003
+++ b/include/asm-sparc/pci.h Fri Oct 10 15:27:59 2003
@@ -8,6 +8,7 @@
* or architectures with incomplete PCI setup by the loader.
*/
#define pcibios_assign_all_busses() 0
+#define pcibios_scan_all_fns() 0
#define PCIBIOS_MIN_IO 0UL
#define PCIBIOS_MIN_MEM 0UL
diff -Nru a/include/asm-sparc64/pci.h b/include/asm-sparc64/pci.h
--- a/include/asm-sparc64/pci.h Fri Oct 10 15:27:59 2003
+++ b/include/asm-sparc64/pci.h Fri Oct 10 15:27:59 2003
@@ -11,6 +11,7 @@
* or architectures with incomplete PCI setup by the loader.
*/
#define pcibios_assign_all_busses() 0
+#define pcibios_scan_all_fns() 0
#define PCIBIOS_MIN_IO 0UL
#define PCIBIOS_MIN_MEM 0UL
diff -Nru a/include/asm-x86_64/pci.h b/include/asm-x86_64/pci.h
--- a/include/asm-x86_64/pci.h Fri Oct 10 15:27:59 2003
+++ b/include/asm-x86_64/pci.h Fri Oct 10 15:27:59 2003
@@ -17,6 +17,7 @@
#else
#define pcibios_assign_all_busses() 0
#endif
+#define pcibios_scan_all_fns() 0
extern unsigned long pci_mem_start;
#define PCIBIOS_MIN_IO 0x1000
^ permalink raw reply [flat|nested] 5+ messages in thread