aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Herring <rob.herring@calxeda.com>2012-04-30 14:32:57 -0500
committerJohn Rigby <john.rigby@linaro.org>2012-08-15 23:46:25 -0600
commit89d5215b713d070470ffdd5d1f4f1f6c7c923360 (patch)
treef053bf2e2cedbdaac4afbfc9616bd1884f9184d8
parentcc6720a1e47109a394232508c41a47e3a4b884a0 (diff)
UBUNTU: SAUCE: net: calxedaxgmac: add write barriers around setting owner bit
BugLink: http://launchpad.net/bugs/1008345 Signed-off-by: Rob Herring <rob.herring@calxeda.com> Signed-off-by: Ike Panhc <ike.pan@canonical.com> Signed-off-by: Tim Gardner <tim.gardner@canonical.com>
-rw-r--r--drivers/net/ethernet/calxeda/xgmac.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/net/ethernet/calxeda/xgmac.c b/drivers/net/ethernet/calxeda/xgmac.c
index cd64c6b2049..8f43dc4436f 100644
--- a/drivers/net/ethernet/calxeda/xgmac.c
+++ b/drivers/net/ethernet/calxeda/xgmac.c
@@ -332,7 +332,7 @@
#define DESC_BUFFER2_SZ_OFFSET 16
struct xgmac_dma_desc {
- __le32 flags;
+ volatile __le32 flags;
__le32 buf_size;
__le32 buf1_addr; /* Buffer 1 Address Pointer */
__le32 buf2_addr; /* Buffer 2 Address Pointer */
@@ -451,15 +451,20 @@ static inline int desc_get_owner(struct xgmac_dma_desc *p)
static inline void desc_set_rx_owner(struct xgmac_dma_desc *p)
{
/* Clear all fields and set the owner */
+ wmb();
p->flags = cpu_to_le32(DESC_OWN);
+ wmb();
}
static inline void desc_set_tx_owner(struct xgmac_dma_desc *p, u32 flags)
{
- u32 tmpflags = le32_to_cpu(p->flags);
+ u32 tmpflags;
+ wmb();
+ tmpflags = le32_to_cpu(p->flags);
tmpflags &= TXDESC_END_RING;
tmpflags |= flags | DESC_OWN;
p->flags = cpu_to_le32(tmpflags);
+ wmb();
}
static inline int desc_get_tx_ls(struct xgmac_dma_desc *p)