Merge branch 'drm-ttm-unmappable' into drm-core-next
[pandora-kernel.git] / arch / mips / sibyte / sb1250 / setup.c
index f4a6169..92da315 100644 (file)
@@ -31,6 +31,7 @@
 unsigned int sb1_pass;
 unsigned int soc_pass;
 unsigned int soc_type;
+EXPORT_SYMBOL(soc_type);
 unsigned int periph_rev;
 unsigned int zbbus_mhz;
 EXPORT_SYMBOL(zbbus_mhz);
@@ -39,43 +40,6 @@ static char *soc_str;
 static char *pass_str;
 static unsigned int war_pass;  /* XXXKW don't overload PASS defines? */
 
-static inline int setup_bcm1250(void);
-static inline int setup_bcm112x(void);
-
-/* Setup code likely to be common to all SiByte platforms */
-
-static int __init sys_rev_decode(void)
-{
-       int ret = 0;
-
-       war_pass = soc_pass;
-       switch (soc_type) {
-       case K_SYS_SOC_TYPE_BCM1250:
-       case K_SYS_SOC_TYPE_BCM1250_ALT:
-       case K_SYS_SOC_TYPE_BCM1250_ALT2:
-               soc_str = "BCM1250";
-               ret = setup_bcm1250();
-               break;
-       case K_SYS_SOC_TYPE_BCM1120:
-               soc_str = "BCM1120";
-               ret = setup_bcm112x();
-               break;
-       case K_SYS_SOC_TYPE_BCM1125:
-               soc_str = "BCM1125";
-               ret = setup_bcm112x();
-               break;
-       case K_SYS_SOC_TYPE_BCM1125H:
-               soc_str = "BCM1125H";
-               ret = setup_bcm112x();
-               break;
-       default:
-               printk("Unknown SOC type %x\n", soc_type);
-               ret = 1;
-               break;
-       }
-       return ret;
-}
-
 static int __init setup_bcm1250(void)
 {
        int ret = 0;
@@ -119,9 +83,25 @@ static int __init setup_bcm1250(void)
                }
                break;
        }
+
        return ret;
 }
 
+int sb1250_m3_workaround_needed(void)
+{
+       switch (soc_type) {
+       case K_SYS_SOC_TYPE_BCM1250:
+       case K_SYS_SOC_TYPE_BCM1250_ALT:
+       case K_SYS_SOC_TYPE_BCM1250_ALT2:
+       case K_SYS_SOC_TYPE_BCM1125:
+       case K_SYS_SOC_TYPE_BCM1125H:
+               return soc_pass < K_SYS_REVISION_BCM1250_C0;
+
+       default:
+               return 0;
+       }
+}
+
 static int __init setup_bcm112x(void)
 {
        int ret = 0;
@@ -157,6 +137,42 @@ static int __init setup_bcm112x(void)
                printk("Unknown %s rev %x\n", soc_str, soc_pass);
                ret = 1;
        }
+
+       return ret;
+}
+
+/* Setup code likely to be common to all SiByte platforms */
+
+static int __init sys_rev_decode(void)
+{
+       int ret = 0;
+
+       war_pass = soc_pass;
+       switch (soc_type) {
+       case K_SYS_SOC_TYPE_BCM1250:
+       case K_SYS_SOC_TYPE_BCM1250_ALT:
+       case K_SYS_SOC_TYPE_BCM1250_ALT2:
+               soc_str = "BCM1250";
+               ret = setup_bcm1250();
+               break;
+       case K_SYS_SOC_TYPE_BCM1120:
+               soc_str = "BCM1120";
+               ret = setup_bcm112x();
+               break;
+       case K_SYS_SOC_TYPE_BCM1125:
+               soc_str = "BCM1125";
+               ret = setup_bcm112x();
+               break;
+       case K_SYS_SOC_TYPE_BCM1125H:
+               soc_str = "BCM1125H";
+               ret = setup_bcm112x();
+               break;
+       default:
+               printk("Unknown SOC type %x\n", soc_type);
+               ret = 1;
+               break;
+       }
+
        return ret;
 }