Also stop both rx and tx sections before changing the configuration of the dma device during init. Signed-off-by: Olof Johansson Index: k.org/arch/powerpc/platforms/pasemi/dma_lib.c =================================================================== --- k.org.orig/arch/powerpc/platforms/pasemi/dma_lib.c +++ k.org/arch/powerpc/platforms/pasemi/dma_lib.c @@ -478,6 +478,30 @@ int pasemi_dma_init(void) for (i = 0; i < MAX_RXCH; i++) __set_bit(i, rxch_free); + i = 1000; + pasemi_write_dma_reg(PAS_DMA_COM_RXCMD, 0); + while ((i > 0) && (pasemi_read_dma_reg(PAS_DMA_COM_RXSTA) & 1)) + i--; + if (i < 0) + printk(KERN_INFO "Warning: Could not disable RX section\n"); + + i = 1000; + pasemi_write_dma_reg(PAS_DMA_COM_TXCMD, 0); + while ((i > 0) && (pasemi_read_dma_reg(PAS_DMA_COM_TXSTA) & 1)) + i--; + if (i < 0) + printk(KERN_INFO "Warning: Could not disable TX section\n"); + + /* setup resource allocations for the different DMA sections */ + tmp = pasemi_read_dma_reg(PAS_DMA_COM_CFG); + pasemi_write_dma_reg(PAS_DMA_COM_CFG, tmp | 0x18000000); + + /* enable tx section */ + pasemi_write_dma_reg(PAS_DMA_COM_TXCMD, PAS_DMA_COM_TXCMD_EN); + + /* enable rx section */ + pasemi_write_dma_reg(PAS_DMA_COM_RXCMD, PAS_DMA_COM_RXCMD_EN); + printk(KERN_INFO "PA Semi PWRficient DMA library initialized " "(%d tx, %d rx channels)\n", num_txch, num_rxch); Index: k.org/drivers/net/pasemi_mac.c =================================================================== --- k.org.orig/drivers/net/pasemi_mac.c +++ k.org/drivers/net/pasemi_mac.c @@ -1043,12 +1043,6 @@ static int pasemi_mac_open(struct net_de unsigned int flags; int ret; - /* enable rx section */ - write_dma_reg(PAS_DMA_COM_RXCMD, PAS_DMA_COM_RXCMD_EN); - - /* enable tx section */ - write_dma_reg(PAS_DMA_COM_TXCMD, PAS_DMA_COM_TXCMD_EN); - flags = PAS_MAC_CFG_TXP_FCE | PAS_MAC_CFG_TXP_FPC(3) | PAS_MAC_CFG_TXP_SL(3) | PAS_MAC_CFG_TXP_COB(0xf) | PAS_MAC_CFG_TXP_TIFT(8) | PAS_MAC_CFG_TXP_TIFG(12); Index: k.org/include/asm-powerpc/pasemi_dma.h =================================================================== --- k.org.orig/include/asm-powerpc/pasemi_dma.h +++ k.org/include/asm-powerpc/pasemi_dma.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006 PA Semi, Inc + * Copyright (C) 2006-2008 PA Semi, Inc * * Hardware register layout and descriptor formats for the on-board * DMA engine on PA Semi PWRficient. Used by ethernet, function and security @@ -40,6 +40,11 @@ enum { PAS_DMA_COM_TXSTA = 0x104, /* Transmit Status Register */ PAS_DMA_COM_RXCMD = 0x108, /* Receive Command Register */ PAS_DMA_COM_RXSTA = 0x10c, /* Receive Status Register */ + PAS_DMA_COM_CFG = 0x114, /* Common config reg */ + PAS_DMA_TXF_SFLG0 = 0x140, /* Set flags */ + PAS_DMA_TXF_SFLG1 = 0x144, /* Set flags */ + PAS_DMA_TXF_CFLG0 = 0x148, /* Set flags */ + PAS_DMA_TXF_CFLG1 = 0x14c, /* Set flags */ }; --