dev_dbg(denali->dev, "%s, Line %d, Function: %s\n",
                       __FILE__, __LINE__, __func__);
 
-       for (i = 0 ; i < LLD_MAX_FLASH_BANKS; i++)
+       for (i = 0 ; i < denali->max_banks; i++)
                iowrite32(INTR_STATUS__RST_COMP | INTR_STATUS__TIME_OUT,
                denali->flash_reg + INTR_STATUS(i));
 
-       for (i = 0 ; i < LLD_MAX_FLASH_BANKS; i++) {
+       for (i = 0 ; i < denali->max_banks; i++) {
                iowrite32(1 << i, denali->flash_reg + DEVICE_RESET);
                while (!(ioread32(denali->flash_reg +
                                INTR_STATUS(i)) &
                        "NAND Reset operation timed out on bank %d\n", i);
        }
 
-       for (i = 0; i < LLD_MAX_FLASH_BANKS; i++)
+       for (i = 0; i < denali->max_banks; i++)
                iowrite32(INTR_STATUS__RST_COMP | INTR_STATUS__TIME_OUT,
                        denali->flash_reg + INTR_STATUS(i));
 
  */
 static void find_valid_banks(struct denali_nand_info *denali)
 {
-       uint32_t id[LLD_MAX_FLASH_BANKS];
+       uint32_t id[denali->max_banks];
        int i;
 
        denali->total_used_banks = 1;
-       for (i = 0; i < LLD_MAX_FLASH_BANKS; i++) {
+       for (i = 0; i < denali->max_banks; i++) {
                index_addr(denali, (uint32_t)(MODE_11 | (i << 24) | 0), 0x90);
                index_addr(denali, (uint32_t)(MODE_11 | (i << 24) | 1), 0);
                index_addr_read_data(denali,
                "denali->total_used_banks: %d\n", denali->total_used_banks);
 }
 
+/*
+ * Use the configuration feature register to determine the maximum number of
+ * banks that the hardware supports.
+ */
+static void detect_max_banks(struct denali_nand_info *denali)
+{
+       uint32_t features = ioread32(denali->flash_reg + FEATURES);
+
+       denali->max_banks = 2 << (features & FEATURES__N_BANKS);
+}
+
 static void detect_partition_feature(struct denali_nand_info *denali)
 {
        /* For MRST platform, denali->fwblks represent the
        int_mask = DENALI_IRQ_ALL;
 
        /* Clear all status bits */
-       for (i = 0; i < LLD_MAX_FLASH_BANKS; ++i)
+       for (i = 0; i < denali->max_banks; ++i)
                iowrite32(0xFFFF, denali->flash_reg + INTR_STATUS(i));
 
        denali_irq_enable(denali, int_mask);
 {
        int i;
 
-       for (i = 0; i < LLD_MAX_FLASH_BANKS; ++i)
+       for (i = 0; i < denali->max_banks; ++i)
                iowrite32(int_mask, denali->flash_reg + INTR_EN(i));
 }
 
        /* Should set value for these registers when init */
        iowrite32(0, denali->flash_reg + TWO_ROW_ADDR_CYCLES);
        iowrite32(1, denali->flash_reg + ECC_ENABLE);
+       detect_max_banks(denali);
        denali_nand_timing_set(denali);
        denali_irq_init(denali);
 }
        /* scan for NAND devices attached to the controller
         * this is the first stage in a two step process to register
         * with the nand subsystem */
-       if (nand_scan_ident(&denali->mtd, LLD_MAX_FLASH_BANKS, NULL)) {
+       if (nand_scan_ident(&denali->mtd, denali->max_banks, NULL)) {
                ret = -ENXIO;
                goto failed_req_irq;
        }