[U-Boot] [PATCH V2] kirkwood_egiga: bugfix: add DMA sequence points

Insert isb() sequence points to ensure DMA descriptors are filled in and set up before actual DMA occurs.
Signed-off-by: Albert Aribaud albert.aribaud@free.fr --- PATCHSET HISTORY
V1: initial submit V2: fixed badly placed isb()
drivers/net/kirkwood_egiga.c | 9 ++++++++- 1 files changed, 8 insertions(+), 1 deletions(-)
diff --git a/drivers/net/kirkwood_egiga.c b/drivers/net/kirkwood_egiga.c index 932792e..ea0c522 100644 --- a/drivers/net/kirkwood_egiga.c +++ b/drivers/net/kirkwood_egiga.c @@ -447,6 +447,8 @@ static int kwgbe_init(struct eth_device *dev)
/* Assignment of Rx CRDB of given RXUQ */ KWGBEREG_WR(regs->rxcdp[RXUQ], (u32) dkwgbe->p_rxdesc_curr); + /* ensure previous write is done before enabling Rx DMA */ + isb(); /* Enable port Rx. */ KWGBEREG_WR(regs->rqc, (1 << RXUQ));
@@ -536,8 +538,13 @@ static int kwgbe_send(struct eth_device *dev, volatile void *dataptr, p_txdesc->buf_ptr = (u8 *) p; p_txdesc->byte_cnt = datasize;
- /* Apply send command using zeroth TXUQ */ + /* Set this tc desc as zeroth TXUQ */ KWGBEREG_WR(regs->tcqdp[TXUQ], (u32) p_txdesc); + + /* ensure tx desc writes above are performed before we start Tx DMA */ + isb(); + + /* Apply send command using zeroth TXUQ */ KWGBEREG_WR(regs->tqc, (1 << TXUQ));
/*

-----Original Message----- From: u-boot-bounces@lists.denx.de [mailto:u-boot-bounces@lists.denx.de] On Behalf Of Albert Aribaud Sent: Saturday, July 10, 2010 7:11 PM To: u-boot@lists.denx.de Subject: [U-Boot] [PATCH V2] kirkwood_egiga: bugfix: add DMA sequence points
Insert isb() sequence points to ensure DMA descriptors are filled in and set up before actual DMA occurs.
Signed-off-by: Albert Aribaud albert.aribaud@free.fr
PATCHSET HISTORY
V1: initial submit V2: fixed badly placed isb()
drivers/net/kirkwood_egiga.c | 9 ++++++++- 1 files changed, 8 insertions(+), 1 deletions(-)
diff --git a/drivers/net/kirkwood_egiga.c b/drivers/net/kirkwood_egiga.c index 932792e..ea0c522 100644 --- a/drivers/net/kirkwood_egiga.c +++ b/drivers/net/kirkwood_egiga.c @@ -447,6 +447,8 @@ static int kwgbe_init(struct eth_device *dev)
/* Assignment of Rx CRDB of given RXUQ */ KWGBEREG_WR(regs->rxcdp[RXUQ], (u32) dkwgbe->p_rxdesc_curr);
- /* ensure previous write is done before enabling Rx DMA */
- isb(); /* Enable port Rx. */ KWGBEREG_WR(regs->rqc, (1 << RXUQ));
@@ -536,8 +538,13 @@ static int kwgbe_send(struct eth_device *dev, volatile void *dataptr, p_txdesc->buf_ptr = (u8 *) p; p_txdesc->byte_cnt = datasize;
- /* Apply send command using zeroth TXUQ */
- /* Set this tc desc as zeroth TXUQ */ KWGBEREG_WR(regs->tcqdp[TXUQ], (u32) p_txdesc);
- /* ensure tx desc writes above are performed before we
start Tx DMA */
isb();
/* Apply send command using zeroth TXUQ */ KWGBEREG_WR(regs->tqc, (1 << TXUQ));
/*
Acked-by: Prafulla Wadaskar prafulla@marvell.com
Regards.. Prafulla . .

Hi Albert,
On 7/10/2010 6:41 AM, Albert Aribaud wrote:
Insert isb() sequence points to ensure DMA descriptors are filled in and set up before actual DMA occurs.
Signed-off-by: Albert Aribaudalbert.aribaud@free.fr
PATCHSET HISTORY
V1: initial submit V2: fixed badly placed isb()
drivers/net/kirkwood_egiga.c | 9 ++++++++- 1 files changed, 8 insertions(+), 1 deletions(-)
Applied to net repo.
thanks, Ben
participants (3)
-
Albert Aribaud
-
Ben Warren
-
Prafulla Wadaskar