orion5x: use safer FPGA ID 'default' for TS-78xx
Subsystems (4)
Alexander Clouter
maintainerPATCH 1/1 orion5x: use safer FPGA ID 'default' for TS-78xx
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 3c390473 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).
--- arch/arm/mach-orion5x/ts78xx-fpga.h | 19 ++++++++++--------- arch/arm/mach-orion5x/ts78xx-setup.c | 18 +++++++++++++----- 2 files changed, 23 insertions(+), 14 deletions(-)
arch/arm/mach-orion5x/ts78xx-fpga.h +10 -9
@@ -1,3 +1,4 @@ +#define TS_78XX_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 (TS_78XX_FPGA_MAGIC ,0x01 ), +TS7800_REV_2 =FPGAID (TS_78XX_FPGA_MAGIC ,0x02 ), +TS7800_REV_3 =FPGAID (TS_78XX_FPGA_MAGIC ,0x03 ), +TS7800_REV_4 =FPGAID (TS_78XX_FPGA_MAGIC ,0x04 ), +TS7800_REV_5 =FPGAID (TS_78XX_FPGA_MAGIC ,0x05 ), +TS7800_REV_6 =FPGAID (TS_78XX_FPGA_MAGIC ,0x06 ), +TS7800_REV_7 =FPGAID (TS_78XX_FPGA_MAGIC ,0x07 ), +TS7800_REV_8 =FPGAID (TS_78XX_FPGA_MAGIC ,0x08 ), +TS7800_REV_9 =FPGAID (TS_78XX_FPGA_MAGIC ,0x09 ),/* Unaffordable & Expensive */ UAE_DUMMY =FPGAID (0xffffff ,0x01 ),
arch/arm/mach-orion5x/ts78xx-setup.c +13 -5
@@ -399,11 +399,19 @@ 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 TS devices if@least the magic matches */ +if (((ts78xx_fpga.id >>8 ) &0xffffff ) ==TS_78XX_FPGA_MAGIC ) { +printk (KERN_WARNING "TS-78xx 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 ; + } + + ts78xx_fpga.supports.ts_rtc.present =0 ; + ts78xx_fpga.supports.ts_nand.present =0 ; + ts78xx_fpga.supports.ts_rng.present =0 ; } }
Signature · 1 line
1.7.4.1
Alexander Clouter
maintainerPATCH 1/1 orion5x: use safer FPGA ID 'default' for TS-78xx
....abort!
Quoted 80 lines · Alexander Clouter
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
3c390473that 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).
Signed-off-by Alexander Clouter <[email protected]>--- arch/arm/mach-orion5x/ts78xx-fpga.h | 19 ++++++++++--------- arch/arm/mach-orion5x/ts78xx-setup.c | 18 +++++++++++++----- 2 files changed, 23 insertions(+), 14 deletions(-)arch/arm/mach-orion5x/ts78xx-fpga.h +10
-9@@ -1,3 +1,4 @@ +#define TS_78XX_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 (TS_78XX_FPGA_MAGIC ,0x01 ), +TS7800_REV_2 =FPGAID (TS_78XX_FPGA_MAGIC ,0x02 ), +TS7800_REV_3 =FPGAID (TS_78XX_FPGA_MAGIC ,0x03 ), +TS7800_REV_4 =FPGAID (TS_78XX_FPGA_MAGIC ,0x04 ), +TS7800_REV_5 =FPGAID (TS_78XX_FPGA_MAGIC ,0x05 ), +TS7800_REV_6 =FPGAID (TS_78XX_FPGA_MAGIC ,0x06 ), +TS7800_REV_7 =FPGAID (TS_78XX_FPGA_MAGIC ,0x07 ), +TS7800_REV_8 =FPGAID (TS_78XX_FPGA_MAGIC ,0x08 ), +TS7800_REV_9 =FPGAID (TS_78XX_FPGA_MAGIC ,0x09 ),/* Unaffordable & Expensive */ UAE_DUMMY =FPGAID (0xffffff ,0x01 ),arch/arm/mach-orion5x/ts78xx-setup.c +13
-5@@ -399,11 +399,19 @@ 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 TS devices if at least the magic matches */ +if (((ts78xx_fpga.id >>8 ) &0xffffff ) ==TS_78XX_FPGA_MAGIC ) { +printk (KERN_WARNING "TS-78xx 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 ; + } + + ts78xx_fpga.supports.ts_rtc.present =0 ; + ts78xx_fpga.supports.ts_nand.present =0 ; + ts78xx_fpga.supports.ts_rng.present =0 ; } }
Signature · 3 lines
Alexander Clouter
.sigmonster says: Anger is momentary madness.
-- HoraceAlexander Clouter
maintainerPATCH v2 1/1 orion5x: use safer FPGA ID 'default' for TS-78xx
In reply to Alexander ClouterOriginally 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 3c390473 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>
--- arch/arm/mach-orion5x/ts78xx-fpga.h | 19 ++++++++++--------- arch/arm/mach-orion5x/ts78xx-setup.c | 19 ++++++++++++++----- 2 files changed, 24 insertions(+), 14 deletions(-)
arch/arm/mach-orion5x/ts78xx-fpga.h +10 -9
@@ -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 ),
arch/arm/mach-orion5x/ts78xx-setup.c +14 -5
@@ -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 ; + } } }
Signature · 1 line
1.7.4.1
PATCH v2 1/1 orion5x: use safer FPGA ID 'default' for TS-78xx
Quoted 3 lines · Alexander Clouter
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
3c390473that changed the default to enable the devices
If you want to abbreviate commit hash values, you should keep the beginning of them not the end. This commit is:
commit f9b1184e12e5ff8129b04837dffddb5a3c390473
So a shorter form would be f9b1184e. I amended it locally.
Nicolas