{
        const int regs = EMAC_XAHT_REGS(dev);
        u32 *gaht_base = emac_gaht_base(dev);
-       u32 gaht_temp[regs];
+       u32 gaht_temp[EMAC_XAHT_MAX_REGS];
        struct netdev_hw_addr *ha;
        int i;
 
                dev->xaht_width_shift = EMAC4_XAHT_WIDTH_SHIFT;
        }
 
+       /* This should never happen */
+       if (WARN_ON(EMAC_XAHT_REGS(dev) > EMAC_XAHT_MAX_REGS))
+               return -ENXIO;
+
        DBG(dev, "features     : 0x%08x / 0x%08x\n", dev->features, EMAC_FTRS_POSSIBLE);
        DBG(dev, "tx_fifo_size : %d (%d gige)\n", dev->tx_fifo_size, dev->tx_fifo_size_gige);
        DBG(dev, "rx_fifo_size : %d (%d gige)\n", dev->rx_fifo_size, dev->rx_fifo_size_gige);
 
 #define        EMAC4SYNC_XAHT_SLOTS_SHIFT      8
 #define        EMAC4SYNC_XAHT_WIDTH_SHIFT      5
 
+/* The largest span between slots and widths above is 3 */
+#define        EMAC_XAHT_MAX_REGS              (1 << 3)
+
 #define        EMAC_XAHT_SLOTS(dev)            (1 << (dev)->xaht_slots_shift)
 #define        EMAC_XAHT_WIDTH(dev)            (1 << (dev)->xaht_width_shift)
 #define        EMAC_XAHT_REGS(dev)             (1 << ((dev)->xaht_slots_shift - \