ARM: orion5x: use safer FPGA ID 'default' for TS-78xx
authorAlexander Clouter <alex@digriz.org.uk>
Sat, 5 Mar 2011 11:49:36 +0000 (11:49 +0000)
committerNicolas Pitre <nico@fluxnic.net>
Sat, 5 Mar 2011 19:31:53 +0000 (14:31 -0500)
Originally the FPGA ID checking switch statement left disabled all the
TS implemented FPGA devices if the ID was unknown to it.  Michael Spang
created a fix in f9b1184e that changed the default to enable the devices
in the event TS silently release more revisions into the wild, this
unfortunately breaks custom FPGA bitstreams.

This patch amends the switch statement so that the TS devices are only
enabled if on the revision number is unknown (whilst the magic matches).

Changelog:
 v2: neater implementation and some cosmetic changes
 v1: initial release <20110305112937.GA22117@chipmunk>

Signed-off-by: Alexander Clouter <alex@digriz.org.uk>
Signed-off-by: Nicolas Pitre <nico@fluxnic.net>
arch/arm/mach-orion5x/ts78xx-fpga.h
arch/arm/mach-orion5x/ts78xx-setup.c

index 791f754c58eb96a97f79b56ba8af2b0b0c7d5e49..151e89e1e6761abf6e218dbce404e8b87dff1278 100644 (file)
@@ -1,3 +1,4 @@
+#define TS7800_FPGA_MAGIC 0x00b480
 #define FPGAID(_magic, _rev) ((_magic << 8) + _rev)
 
 /*
@@ -6,15 +7,15 @@
  */
 enum fpga_ids {
        /* Technologic Systems */
-       TS7800_REV_1    = FPGAID(0x00b480, 0x01),
-       TS7800_REV_2    = FPGAID(0x00b480, 0x02),
-       TS7800_REV_3    = FPGAID(0x00b480, 0x03),
-       TS7800_REV_4    = FPGAID(0x00b480, 0x04),
-       TS7800_REV_5    = FPGAID(0x00b480, 0x05),
-       TS7800_REV_6    = FPGAID(0x00b480, 0x06),
-       TS7800_REV_7    = FPGAID(0x00b480, 0x07),
-       TS7800_REV_8    = FPGAID(0x00b480, 0x08),
-       TS7800_REV_9    = FPGAID(0x00b480, 0x09),
+       TS7800_REV_1    = FPGAID(TS7800_FPGA_MAGIC, 0x01),
+       TS7800_REV_2    = FPGAID(TS7800_FPGA_MAGIC, 0x02),
+       TS7800_REV_3    = FPGAID(TS7800_FPGA_MAGIC, 0x03),
+       TS7800_REV_4    = FPGAID(TS7800_FPGA_MAGIC, 0x04),
+       TS7800_REV_5    = FPGAID(TS7800_FPGA_MAGIC, 0x05),
+       TS7800_REV_6    = FPGAID(TS7800_FPGA_MAGIC, 0x06),
+       TS7800_REV_7    = FPGAID(TS7800_FPGA_MAGIC, 0x07),
+       TS7800_REV_8    = FPGAID(TS7800_FPGA_MAGIC, 0x08),
+       TS7800_REV_9    = FPGAID(TS7800_FPGA_MAGIC, 0x09),
 
        /* Unaffordable & Expensive */
        UAE_DUMMY       = FPGAID(0xffffff, 0x01),
index 1cac714e982d9b4b57373fbc966b62db8dec1e00..3f2e1cdf11f6389dbce20f86584055508c581227 100644 (file)
@@ -399,11 +399,20 @@ static void ts78xx_fpga_supports(void)
                ts78xx_fpga.supports.ts_rng.present = 1;
                break;
        default:
-               printk(KERN_WARNING "Unrecognized TS-78XX FPGA ID 0x%02x",
-                      ts78xx_fpga.id);
-               ts78xx_fpga.supports.ts_rtc.present = 1;
-               ts78xx_fpga.supports.ts_nand.present = 1;
-               ts78xx_fpga.supports.ts_rng.present = 1;
+               /* enable devices if magic matches */
+               switch ((ts78xx_fpga.id >> 8) & 0xffffff) {
+               case TS7800_FPGA_MAGIC:
+                       printk(KERN_WARNING "TS-7800 FPGA: unrecognized revision 0x%.2x\n",
+                                       ts78xx_fpga.id & 0xff);
+                       ts78xx_fpga.supports.ts_rtc.present = 1;
+                       ts78xx_fpga.supports.ts_nand.present = 1;
+                       ts78xx_fpga.supports.ts_rng.present = 1;
+                       break;
+               default:
+                       ts78xx_fpga.supports.ts_rtc.present = 0;
+                       ts78xx_fpga.supports.ts_nand.present = 0;
+                       ts78xx_fpga.supports.ts_rng.present = 0;
+               }
        }
 }