static void detect_max_banks(struct denali_nand_info *denali)
 {
        uint32_t features = readl(denali->flash_reg + FEATURES);
-       denali->max_banks = 2 << (features & FEATURES__N_BANKS);
+       /*
+        * Read the revision register, so we can calculate the max_banks
+        * properly: the encoding changed from rev 5.0 to 5.1
+        */
+       u32 revision = MAKE_COMPARABLE_REVISION(
+                               readl(denali->flash_reg + REVISION));
+       if (revision < REVISION_5_1)
+               denali->max_banks = 2 << (features & FEATURES__N_BANKS);
+       else
+               denali->max_banks = 1 << (features & FEATURES__N_BANKS);
 }
 
 static void detect_partition_feature(struct denali_nand_info *denali)
 
 
 #define REVISION                               0x370
 #define     REVISION__VALUE                            0xffff
+#define MAKE_COMPARABLE_REVISION(x)            swab16((x) & REVISION__VALUE)
+#define REVISION_5_1                           0x00000501
 
 #define ONFI_DEVICE_FEATURES                   0x380
 #define     ONFI_DEVICE_FEATURES__VALUE                        0x003f