linux/arch
Alexander Bigga 32136568a9 [MIPS] Fix for pci config_access on alchemy au1x000
I've encountered a serious problem with PCI config space access on Au1x000
platforms with recent 2.6.x-kernel. With 2.4.31 the same hardware works fine.
So I was looking for the differences:

Symptoms:
- no PCI-device is seen on bootup though two or three cards are present
- lspci output is empty
- OR: lspci shows 20 times the same device
(- OR: in some slot-configurations it worked anyhow)

System(s):
1. platform with Au1500 and three PCI-devices (actually a mycable XXS1500
    with backplane for three PCI-devices)
2. platform with Au1550 and two PCI-devices (custom board)

Debugging:
I digged down to the config_access() of the au1xxx-processors in
arch/mips/pci/ops-au1000.c and switched on DEBUG.

The code of config_access() seems to be almost the same as of the
2.4.x-kernel. But the "pci_cfg_vm->addr" returned by get_vm_area(0x2000, 0)
once on booting is different. That's of course not forbidden. But the
alignment seems to be wrong. In my case, I received:

2.4.31: pci_cfg_vm->addr = c0000000
2.6.18-rc5: pci_cfg_vm->addr = c0101000

To make it short: With 2.6.x it fails on the first config-access with:
"PCI ERR detected: status 83a00356".

Fixup:
My fix is now, to use the VM_IOREMAP-flag in the get_vm_area call. This flag
seems to be introduced in mm/vmalloc.c a long time ago (in 2.6.7-bk13, I
found in gitweb).
Now, the returned address is pci_cfg_vm->addr = c0104000 and everything works
fine.

Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
2006-09-27 13:37:38 +01:00
..
alpha [PATCH] alpha: Fix ALPHA_EV56 dependencies typo 2006-09-26 08:48:57 -07:00
arm [PATCH] Standardize pxx_page macros 2006-09-26 08:48:51 -07:00
arm26 [PATCH] tty: Remove include of screen_info.h from tty.h 2006-07-10 13:24:16 -07:00
avr32 [PATCH] AVR32 MTD: AT49BV6416 platform device for ATSTK1000 2006-09-26 08:48:54 -07:00
cris [PATCH] pcf8563: remove MOD_INC_USE_COUNT, MOD_DEC_USE_COUNT 2006-07-10 13:24:22 -07:00
frv [PATCH] FRV: permit __do_IRQ() to be dispensed with 2006-09-26 08:48:53 -07:00
h8300 [PATCH] reduce MAX_NR_ZONES: fix MAX_NR_ZONES array initializations 2006-09-26 08:48:46 -07:00
i386 Merge branch 'for-linus' of git://one.firstfloor.org/home/andi/git/linux-2.6 2006-09-26 13:07:55 -07:00
ia64 [PATCH] smp_call_function_single() cleanup 2006-09-26 08:48:56 -07:00
m32r [PATCH] reduce MAX_NR_ZONES: fix MAX_NR_ZONES array initializations 2006-09-26 08:48:46 -07:00
m68k [PATCH] irq-flags: M68K: Use the new IRQF_ constants 2006-07-02 13:58:47 -07:00
m68knommu [PATCH] reduce MAX_NR_ZONES: fix MAX_NR_ZONES array initializations 2006-09-26 08:48:46 -07:00
mips [MIPS] Fix for pci config_access on alchemy au1x000 2006-09-27 13:37:38 +01:00
parisc [PATCH] NUMA: Add zone_to_nid function 2006-09-26 08:48:52 -07:00
powerpc [PATCH] Change the name of pagedir_nosave 2006-09-26 08:49:01 -07:00
ppc [POWERPC] Fix compile error in sbc8560 2006-09-21 22:59:38 +10:00
s390 Merge branch 'for-linus' of git://one.firstfloor.org/home/andi/git/linux-2.6 2006-09-26 13:07:55 -07:00
sh [PATCH] Standardize pxx_page macros 2006-09-26 08:48:51 -07:00
sh64 [PATCH] reduce MAX_NR_ZONES: fix MAX_NR_ZONES array initializations 2006-09-26 08:48:46 -07:00
sparc [PATCH] Standardize pxx_page macros 2006-09-26 08:48:51 -07:00
sparc64 [SPARC64]: Fix section-mismatch errors in solaris emul module. 2006-09-25 16:39:55 -07:00
um Merge branch 'for-linus' of git://one.firstfloor.org/home/andi/git/linux-2.6 2006-09-26 13:07:55 -07:00
v850 [PATCH] v850: call init_page_count() instead of set_page_count() 2006-07-31 13:28:38 -07:00
x86_64 Merge branch 'for-linus' of git://one.firstfloor.org/home/andi/git/linux-2.6 2006-09-26 13:07:55 -07:00
xtensa [PATCH] xtensa: ptrace: EXIT_ZOMBIE fix 2006-09-01 11:39:08 -07:00