atheros: don't try to enable pci on AR2317 (fixes #3533)
authorFelix Fietkau <nbd@openwrt.org>
Fri, 19 Sep 2008 14:19:59 +0000 (14:19 +0000)
committerFelix Fietkau <nbd@openwrt.org>
Fri, 19 Sep 2008 14:19:59 +0000 (14:19 +0000)
SVN-Revision: 12633

target/linux/atheros/files/arch/mips/atheros/ar5315/board.c
target/linux/atheros/files/arch/mips/atheros/ar5315/pci.c

index f7c45bae2ee2908f1b5994238dad9d947f3265a8..0ac7d0036872f3c6ee1825fcd972a6f21cf2bda7 100644 (file)
@@ -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)
index 9040a43ecd181d4d6b458b944599f37d7b75248f..166fa1cf9756d67c2564719c51b48e144d41e6f1 100644 (file)
@@ -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 */