Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
bcm63xx: fix a race between PCI bus scan and fallback sprom registration
The fallback sprom handler was installed too late, resulting in ssb failing to get a valid sprom on some devices. Fixes #11384. git-svn-id: svn://svn.openwrt.org/openwrt/trunk@31638 3c298f89-4303-0410-b956-a3cf2f4a3e73
- Loading branch information
jogo
committed
May 6, 2012
1 parent
d4d5378
commit 35009bd
Showing
2 changed files
with
110 additions
and
0 deletions.
There are no files selected for viewing
21 changes: 21 additions & 0 deletions
21
target/linux/brcm63xx/patches-3.3/306-MIPS-BCM63XX-register-devices-earlier.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
From d42f3f75a5d1abe9f7c5275fb59f3e894e83043d Mon Sep 17 00:00:00 2001 | ||
From: Jonas Gorski <jonas.gorski@gmail.com> | ||
Date: Sun, 6 May 2012 15:05:48 +0200 | ||
Subject: [PATCH 1/2] MIPS: BCM63XX: register devices earlier | ||
|
||
Register devices as an arch initcall so that the fallback sprom gets | ||
installed in the same phase as the pci bus gets registered. | ||
|
||
Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com> | ||
--- | ||
arch/mips/bcm63xx/setup.c | 2 +- | ||
1 files changed, 1 insertions(+), 1 deletions(-) | ||
|
||
--- a/arch/mips/bcm63xx/setup.c | ||
+++ b/arch/mips/bcm63xx/setup.c | ||
@@ -150,4 +150,4 @@ int __init bcm63xx_register_devices(void | ||
return board_register_devices(); | ||
} | ||
|
||
-device_initcall(bcm63xx_register_devices); | ||
+arch_initcall(bcm63xx_register_devices); |
89 changes: 89 additions & 0 deletions
89
target/linux/brcm63xx/patches-3.3/307-MIPS-BCM63XX-explicitly-register-the-pci-bus.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,89 @@ | ||
From 45aebb9465e22b236a201deef1b234693d99e174 Mon Sep 17 00:00:00 2001 | ||
From: Jonas Gorski <jonas.gorski@gmail.com> | ||
Date: Sun, 6 May 2012 15:13:48 +0200 | ||
Subject: [PATCH 2/2] MIPS: BCM63XX: explicitly register the PCI bus | ||
|
||
Instead of setting a global variable toggling the PCI registration, | ||
register it in the device_register phase after setting the fallback | ||
sprom to ensure there cannot be a race between them. | ||
|
||
Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com> | ||
--- | ||
arch/mips/bcm63xx/boards/board_bcm963xx.c | 6 +++++- | ||
.../include/asm/mach-bcm63xx/bcm63xx_dev_pci.h | 4 +++- | ||
arch/mips/pci/pci-bcm63xx.c | 13 +------------ | ||
3 files changed, 9 insertions(+), 14 deletions(-) | ||
|
||
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c | ||
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c | ||
@@ -825,7 +825,6 @@ void __init board_prom_init(void) | ||
|
||
#ifdef CONFIG_PCI | ||
if (board.has_pci) { | ||
- bcm63xx_pci_enabled = 1; | ||
if (BCMCPU_IS_6348()) | ||
val |= GPIO_MODE_6348_G2_PCI; | ||
} | ||
@@ -997,5 +996,10 @@ int __init board_register_devices(void) | ||
platform_device_register(&bcm63xx_gpio_keys_device); | ||
} | ||
|
||
+#ifdef CONFIG_PCI | ||
+ if (board.has_pci) | ||
+ bcm63xx_pci_register(); | ||
+#endif | ||
+ | ||
return 0; | ||
} | ||
--- a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_dev_pci.h | ||
+++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_dev_pci.h | ||
@@ -1,6 +1,8 @@ | ||
#ifndef BCM63XX_DEV_PCI_H_ | ||
#define BCM63XX_DEV_PCI_H_ | ||
|
||
-extern int bcm63xx_pci_enabled; | ||
+#include <linux/init.h> | ||
+ | ||
+int __init bcm63xx_pci_register(void); | ||
|
||
#endif /* BCM63XX_DEV_PCI_H_ */ | ||
--- a/arch/mips/pci/pci-bcm63xx.c | ||
+++ b/arch/mips/pci/pci-bcm63xx.c | ||
@@ -14,12 +14,6 @@ | ||
|
||
#include "pci-bcm63xx.h" | ||
|
||
-/* | ||
- * Allow PCI to be disabled at runtime depending on board nvram | ||
- * configuration | ||
- */ | ||
-int bcm63xx_pci_enabled; | ||
- | ||
static struct resource bcm_pci_mem_resource = { | ||
.name = "bcm63xx PCI memory space", | ||
.start = BCM_PCI_MEM_BASE_PA, | ||
@@ -94,7 +88,7 @@ static void bcm63xx_int_cfg_writel(u32 v | ||
|
||
void __iomem *pci_iospace_start; | ||
|
||
-static int __init bcm63xx_pci_init(void) | ||
+int __init bcm63xx_pci_register(void) | ||
{ | ||
unsigned int mem_size; | ||
u32 val; | ||
@@ -102,9 +96,6 @@ static int __init bcm63xx_pci_init(void) | ||
if (!BCMCPU_IS_6348() && !BCMCPU_IS_6358() && !BCMCPU_IS_6368()) | ||
return -ENODEV; | ||
|
||
- if (!bcm63xx_pci_enabled) | ||
- return -ENODEV; | ||
- | ||
/* | ||
* configuration access are done through IO space, remap 4 | ||
* first bytes to access it from CPU. | ||
@@ -220,5 +211,3 @@ static int __init bcm63xx_pci_init(void) | ||
"bcm63xx PCI IO space"); | ||
return 0; | ||
} | ||
- | ||
-arch_initcall(bcm63xx_pci_init); |