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
@@ -826,7 +826,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;
 	}
@@ -998,5 +997,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);
