0,                     /* duplex and speed */
         0,                     /* phy name */
         0,                     /* phy name init */
+#ifdef CFG_DMA_USE_INTSRAM
+        DBUF_LENGTH,           /* RX BD */
+#else
         0,                     /* RX BD */
+#endif
         0,                     /* TX BD */
         0,                     /* rx Index */
         0,                     /* tx Index */
 }
 #endif
 
-static void set_fec_duplex_speed(volatile fecdma_t * fecp, bd_t * bd, int dup_spd)
+static void set_fec_duplex_speed(volatile fecdma_t * fecp, bd_t * bd,
+                                int dup_spd)
 {
        if ((dup_spd >> 16) == FULL) {
                /* Set maximum frame length */
 {
        struct eth_device *dev;
        int i;
+#ifdef CFG_DMA_USE_INTSRAM
+       u32 tmp = CFG_INTSRAM + 0x2000;
+#endif
 
        for (i = 0; i < sizeof(fec_info) / sizeof(fec_info[0]); i++) {
 
                dev->recv = fec_recv;
 
                /* setup Receive and Transmit buffer descriptor */
+#ifdef CFG_DMA_USE_INTSRAM
+               fec_info[i].rxbd = (int)fec_info[i].rxbd + tmp;
+               tmp = fec_info[i].rxbd;
+               fec_info[i].txbd =
+                   (int)fec_info[i].txbd + tmp + (PKTBUFSRX * sizeof(cbd_t));
+               tmp = fec_info[i].txbd;
+               fec_info[i].txbuf =
+                   (int)fec_info[i].txbuf + tmp +
+                   (CFG_TX_ETH_BUFFER * sizeof(cbd_t));
+               tmp = fec_info[i].txbuf;
+#else
                fec_info[i].rxbd =
                    (cbd_t *) memalign(CFG_CACHELINE_SIZE,
                                       (PKTBUFSRX * sizeof(cbd_t)));
                                       (CFG_TX_ETH_BUFFER * sizeof(cbd_t)));
                fec_info[i].txbuf =
                    (char *)memalign(CFG_CACHELINE_SIZE, DBUF_LENGTH);
+#endif
 
 #ifdef ET_DEBUG
                printf("rxbd %x txbd %x\n",