From: Felix Fietkau <nbd@openwrt.org>
Date: Fri, 19 Sep 2008 14:19:59 +0000 (+0000)
Subject: atheros: don't try to enable pci on AR2317 (fixes #3533)
X-Git-Tag: reboot~25570
X-Git-Url: http://git.cdn.openwrt.org/?a=commitdiff_plain;h=e5dc717d220534bd61ee53c010ad050f648170c3;p=openwrt%2Fopenwrt.git

atheros: don't try to enable pci on AR2317 (fixes #3533)

SVN-Revision: 12633
---

diff --git a/target/linux/atheros/files/arch/mips/atheros/ar5315/board.c b/target/linux/atheros/files/arch/mips/atheros/ar5315/board.c
index f7c45bae2e..0ac7d00368 100644
--- a/target/linux/atheros/files/arch/mips/atheros/ar5315/board.c
+++ b/target/linux/atheros/files/arch/mips/atheros/ar5315/board.c
@@ -219,23 +219,6 @@ int __init ar5315_init_devices(void)
 	ar531x_find_config(ar5315_flash_limit());
 	bcfg = (struct ar531x_boarddata *) board_config;
 
-#if 0
-	{
-	/* Detect the hardware based on the device ID */
-	u32 devid = sysRegRead(AR5315_SREV) & AR5315_REV_MAJ >> AR5315_REV_MAJ_S;
-		switch(devid) {
-		case 0x9:
-			mips_machtype = MACH_ATHEROS_AR2317;
-			break;
-		/* FIXME: how can we detect AR2316? */
-		case 0x8:
-		default:
-			mips_machtype = MACH_ATHEROS_AR2315;
-			break;
-		}
-	}
-#endif
-
 	config = (struct ar531x_config *) kzalloc(sizeof(struct ar531x_config), GFP_KERNEL);
 	config->board = board_config;
 	config->radio = radio_config;
@@ -296,7 +279,6 @@ static void ar5315_power_off(void)
 
 static void ar5315_restart(char *command)
 {
-	unsigned int reg;
 	for(;;) {
 		/* reset the system */
 		sysRegWrite(AR5315_COLD_RESET,AR5317_RESET_SYSTEM);
@@ -380,7 +362,7 @@ static void __init ar5315_time_init(void)
 
 void __init ar5315_prom_init(void)
 {
-	u32 memsize, memcfg;
+	u32 memsize, memcfg, devid;
 
 	is_5315 = 1;
 	memcfg = sysRegRead(AR5315_MEM_CFG);
@@ -390,9 +372,17 @@ void __init ar5315_prom_init(void)
 	memsize <<= 3;
 	add_memory_region(0, memsize, BOOT_MEM_RAM);
 
-	/* Initialize it to AR2315 for now. Real detection will be done
-	 * in ar5315_init_devices() */
-	mips_machtype = MACH_ATHEROS_AR2315;
+	/* Detect the hardware based on the device ID */
+	devid = sysRegRead(AR5315_SREV) & AR5315_REV_CHIP;
+	switch(devid) {
+		case 0x90:
+		case 0x91:
+			mips_machtype = MACH_ATHEROS_AR2317;
+			break;
+		default:
+			mips_machtype = MACH_ATHEROS_AR2315;
+			break;
+	}
 }
 
 void __init ar5315_plat_setup(void)
diff --git a/target/linux/atheros/files/arch/mips/atheros/ar5315/pci.c b/target/linux/atheros/files/arch/mips/atheros/ar5315/pci.c
index 9040a43ecd..166fa1cf97 100644
--- a/target/linux/atheros/files/arch/mips/atheros/ar5315/pci.c
+++ b/target/linux/atheros/files/arch/mips/atheros/ar5315/pci.c
@@ -22,6 +22,7 @@
 #include <linux/spinlock.h>
 #include <linux/delay.h>
 #include <linux/irq.h>
+#include <asm/bootinfo.h>
 #include <asm/paccess.h>
 #include <asm/irq_cpu.h>
 #include <asm/io.h>
@@ -186,6 +187,9 @@ int __init ar5315_pci_init(void)
 {
 	u32 reg;
 
+	if (mips_machtype != MACH_ATHEROS_AR2315)
+		return -ENODEV;
+
 	printk("AR531x PCI init... \n");
 
 	cfgaddr = (u32) ioremap_nocache(0x80000000, 1*1024*1024); /* Remap PCI config space */